Проект duckietown, урок № 1: Сборка робота на базе Raspberry Pi, управление моторами

План работ по проекту Duckietown

  1. Определить набор элементов для проекта duckietown , разработать схему подключения.
  2. Разработать чертежи корпуса робота, выложить их в открытый доступ, произвести корпус с помощью 3d принтера и лазерного гравера.
  3. Собрать робота, написать программу движения на языке python.
  4. Подключить камеру, установить необходимое программное обеспечение
  5. Написать программу для обработки видео на языке python c использованием библиотеки opencv и библиотеки picamera
  6. Углубленное изучение библиотеки openCV , изучение алгоритмов для распознавания линии, написание программы движения по линии
  7. Написание программы для движения по дорожной разметке.

Перечень компонентов

НазваниеКол-во
1Плата raspberry pi1
2Понижающий преобразователь напряжения DC-DC1
3Драйвер двигателей L293D1
4Мотор c редуктором и колесо2
5Видеокамера1
6Батарейный отсек 18650 x41
7Литиевый аккумулятор 186504

Чертежи робота для цифрового производства

Мы подготовили чертежи для производства робота с помощью 3D принтера и лазерного гравера. Исходники созданы в ПО FreeCAD , файлы для производства в форматах STL для 3d печати и SVG для лазерной резки.
Все файлы доступны в облаке google drive по ссылке.

Схема подключения

Схема подключения моторов к плате raspberry pi для проекта duckietown
Рис. Схема подключения нарисованная на коленке

Управление пинами на плате raspberry pi через библиотеку GPIO

На рисунке представлена распиновка платы raspberry , для подключения внешнего питания мы будем использовать ПИНы 5в и GND, а для управления моторами — GPIO. Обратите внимание, что существует сквозная нуменация ПИНов , но также отдельно пронумерованы ПИНы (например, GPIO14). Не перепутайте, в теле программы нам нужно будет выбрать, какую нумерацию мы будем использовать.

Рис. Схема распиновки платы Raspberry Pi

Пример кода для включения и выключения напряжения на одной ножке. Например, для зажигания светодиода

# импортируем библиотеки: GPIO для управления ПИНами, time для использования временных интервалов 
from RPi import GPIO
from time import sleep

# настраиваем режим работы ПИНов на плате: какая используется нумерация, какие ножки работают на вход и на выход
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)

# включаем и выключаем ПИН (подаем напряжение и отключаем его)
GPIO.output(23, True)
sleep(5)
GPIO.output(23, False)

# очищаем реестр, возвращаем все настройки пинов в исходное значение
GPIO.cleanup()

Нумерация ПИНов (PIN).

Несколько слов о двух способах нумерации ПИНов. В коде выше мы использовали нумерацию BCM, она подразумевает что мы указываем номер ПИНа GPIO (в нашем случае GPIO23).

GPIO.setmode(GPIO.BCM)

Если мы хотим использовать скозную нумерацию, нам стоит использовать параметр GPIO. Тогда, в нашем случае, тот же самый ПИН будет иметь номер 16 (смотрите картинку). Подробнее про выбор нумерации читайте здесь.

ШИМ (PWM) на raspberry pi

Для плавного регулирования скорости моторов мы дожны научится выдавать с ножем (ПИНов) ШИМ сигнал. Есть два способа это сделать аппаратный и программный. Мы будем использовать программный и функцию GPIO.PWM. Рассмотрим пример реализации:

from RPi import GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)

p = GPIO.PWM(12, 0.5)
p.start(1)
sleep(5)
p.stop()
GPIO.cleanup()

В параметрах функции GPIO.PWM мы указываем: канал, или номер ножки, которую используем, и частоту сигнала в Герцах.

p = GPIO.PWM(12, 0.5)

Простая программа для движения

Напишем простую программу для движения вперед и назад.

В следующих уроках , когда мы научимся распознавать линию , мы напишем продвинутую программу с использованием алгоритма регулятора для плавной подстройки скорости.

Участники проекта

  1. Скорина Кирилл.
    Ученик СТРСОШ им. Пушкина, 10 «А» класс
  2. Дмитрий Спивак.
    Научный руководитель. Директор кружка робототехники «Робикс»

Полезные материалы и ссылки

  1. План лекций по duckietown на официальном сайте https://www.duckietown.org/instructors/classes/educational-resources
  2. Перечень необходимого железа и шасси для робота http://docs.duckietown.org/DT17/opmanual_duckiebot/out/acquiring_parts_c0.html
    3. Обзорная статья на «Бумаге» https://paperpaper.ru/campus/duckietown/
  3. Вводные лекции с курса MIT 2.166:
Видео № 1. Вводное видео Duckietown с курса MIT (что такое duckietown)
Видео № 2. Вводное видео Duckietown с курса MIT (автономный транспорт)

Добавить комментарий

Ваш e-mail не будет опубликован.