Собираем робота на Raspberry Pi Pico с колёсами Mecanum
В этом руководстве мы покажем, как собрать и запрограммировать робота на Raspberry Pi Pico с использованием колёс Mecanum!
Обычные колёса позволяют роботу двигаться вперёд, назад, крутиться и поворачивать. Эти «волшебные» колёса Mecanum также позволяют роботу двигаться боком и по диагонали, обеспечивая расширенные возможности движения и управления.
Мы объясним, как их настроить, и предоставим код на MicroPython для управления роботом через Raspberry Pi Pico с использованием платы Kitronik Robotics Board и перезаряжаемых аккумуляторов Ni-MH типа AA.
Что потребуется
Это проект среднего уровня сложности, поэтому мы предполагаем, что вы уже имеете опыт работы с Raspberry Pi Pico и робототехникой.
Мы предполагаем, что вы знакомы с Raspberry Pi Pico, установили Thonny на свой компьютер и настроили Pico с актуальной прошивкой UF2.
Также могут понадобиться навыки зачистки проводов и/или пайки.
Вам понадобится:
Raspberry Pi Pico с контактными штырьками (header pins)
Кабель Micro-USB (для питания и программирования Pico)
Шасси робота Waveshare MS с колёсами Mecanum (или версия MP, которую мы используем в этом руководстве)
Плата Kitronik Robotics Board для Raspberry Pi Pico
Батарейный отсек на 4×AA с выключателем
4 аккумулятора AA Ni-MH 1.2V (не забудьте про зарядное устройство, если у вас его нет)
Деревянный блок, несколько книг или узкая картонная коробка для поддержки шасси с поднятыми над столом колёсами во время тестирования
Blu Tack или аналогичный многоразовый клей
Сборка шасси
Инструкции по сборке
Мы не будем изобретать колесо заново — Waveshare уже предоставила отличные инструкции по сборке шасси, включая установку моторов и колёс Mecanum.
Инструкции для версии MP (которую мы используем) доступны на сайте Waveshare, а для версии MS — отдельно.
Мы не устанавливали рейки, так как пока нам нечего к ним крепить, а плоская верхняя поверхность удобнее для этого проекта. Провода моторов мы протянули через центральное отверстие.
Перед установкой колёс внимательно осмотрите их и правильно разложите по парам. Два колеса маркированы «R», два — «L».
Посмотрите на изображение ниже и установите колёса аналогичным образом. Одно колесо из каждой пары устанавливается на противоположные стороны по диагонали. Убедитесь, что они установлены так, как показано на рисунке, то есть все ролики направлены к центру при виде сверху:
Вы также можете воспользоваться видеоинструкциями Waveshare для каждой версии:
Питание
Зарядите аккумуляторы Ni-MH и вставьте их в батарейный отсек, убедившись, что переключатель находится в положении OFF.
Нанесите по капле Blu Tack или аналогичного клея на каждый угол нижней части отсека и плотно прижмите его к верхнему слою шасси между верхней парой колёс в передней части робота, переключателем в сторону переднего левого колеса.
Подключите провода от батарейного отсека к клеммам + и – на плате управления роботом (красный провод — к положительной клемме). Ещё раз убедитесь, что переключатель находится в положении OFF.
Теперь закрепите плату управления роботом поверх батарейного отсека с помощью четырёх дополнительных кусочков Blu Tack. Это обеспечит надёжное крепление, снизит риск короткого замыкания, но при этом позволит легко снять плату для доступа к аккумуляторам. Также можно поступить иначе и использовать простые крепёжные элементы для фиксации платы к отверстиям шасси в другом месте верхней пластины.
Схема подключений платы:
Подключение моторов
Плата управляет четырьмя двигателями постоянного тока, пронумерованными 1, 2, 3 и 4. Каждый мотор подключается двумя проводами к клеммным блокам на плате. Мотор 1 — верхний левый клеммный блок на изображении выше (ближайший к блоку питания). Далее идут моторы 2, 3 и 4 (нижний левый).
На проводах моторов установлены маленькие разъёмы PH2.0, которые, вероятно, предназначены для совместимости с платой управления роботами Waveshare ESP32, однако большинство разработчиков роботов обычно откусывают их и зачищают концы проводов для выбранного контроллера моторов (как правило, залуженных), поскольку большинство плат управления моторами используют клеммные блоки.
Мы решили использовать временные соединения с запасными разъёмами JST и макетными проводами, просто чтобы сохранить родные разъёмы во время прототипирования. Выглядит не очень, но это позволяет не откусывать разъёмы на случай, если они понадобятся позже:
Как бы вы ни решили это сделать, крайне важно подключить каждый из моторов в правильной полярности. Обратите внимание, что цвета проводов слева направо для четырёх моторов: Ч-К-К-Ч-К-Ч-Ч-К.
Мы рекомендуем подключать моторы по одному и проверять направление вращения с помощью тестовой программы ниже, но сначала нам нужно установить Pico на плату управления и добавить библиотеку с кодом.
Получаем библиотеку драйвера устройства
Прежде чем запустить тестовую программу (или даже основную программу робота), нам нужно добавить библиотеку кода для платы управления роботом на наш Pico.
Сначала подключите Pico к плате управления роботом (ориентируйтесь по надписям «USB» на плате, чтобы установить его правильной стороной) и подсоедините его к компьютеру с помощью кабеля Micro-USB.
Затем откройте браузер на своём компьютере и перейдите на страницу GitHub библиотеки для платы управления роботом — найдите репозиторий KitronikLtd/Kitronik-Pico-Robotics-Board-MicroPython и откройте файл PicoRobotics.py.
Скопируйте код и вставьте его в новое окно кода в Thonny. Сохраните его на Pico в папке lib под именем PicoRobotics.py (возможно, вы также захотите сохранить копию локально на компьютере).
Тестовая программа для моторов на MicroPython
Мы рекомендуем подключать моторы по одному и проверять направление вращения с помощью следующей программы. Все четыре мотора должны вращаться в направлении «вперёд» при изменении значения m.
Вы можете изменить значение m для каждого мотора. Если подключение правильное, верхняя часть колеса должна двигаться к передней части робота.
Вам нужно будет поднять робота на блок, чтобы его колёса были «вывешены» над столом, пока вы это делаете. Если мотор вращается в неправильном направлении, просто поменяйте провода местами в клеммном блоке. Оба переключателя — на батарейном отсеке и на плате управления моторами — должны быть включены (ON).
# Single MotorTest.py
import PicoRobotics
import utime
board = PicoRobotics.KitronikPicoRobotics()
directions = ["f","r"]
m = 1
dir ="f"
board.motorOn(m, dir, 50) # Motor ON at 50% power
utime.sleep(1) # Run for 1 second
board.motorOn(m, "f", 0) # STOP the motor
Как работает тестовая программа
Рассмотрим основную инструкцию:
board.motorOn(m, dir, speed)
Это базовая инструкция управления мотором, которая содержит следующие параметры:
m — целое число от 1 до 4, задающее номер управляемого мотора
dir — направление, задаётся строковым символом:
"f"— вперёд,"r"— назадspeed — целое число от 0 (остановка) до 100 (максимальная скорость)
Программа запускает указанный мотор вперёд на 50% мощности на одну секунду — как раз достаточно, чтобы увидеть, что происходит.
Программа на MicroPython для колёс Mecanum
Следующая программа демонстрирует базовые возможности робота, которую вы можете использовать как основу для собственного проекта. Код хорошо прокомментирован с понятными названиями процедур, поэтому его легко читать.
Поскольку колёса Mecanum могут перемещать платформу боком и по диагонали, мы использовали стороны света для обозначения направлений: вперёд — N (север). Это означает, что назад будет S (юг), E — боком вправо (восток), W — боком влево (запад).
Мы также добавили NE, NW, SE, SW, а также вращение вправо и влево.
Скопируйте следующую программу и вставьте её в Thonny. С роботом на подставке запустите программу из Thonny обычным способом (оба переключателя должны быть включены), чтобы убедиться, что всё работает правильно. Обратите внимание, что колёса останавливаются между каждой последовательностью:
# Waveshare Robot Chassis Kit MP/MS Routines
# Mecanum wheels
# Tony Goodhew for thepihut.com - 18 July 2023
import PicoRobotics
import utime
board = PicoRobotics.KitronikPicoRobotics()
directions = ["f","r"]
def stop():
for m in range(4):
board.motorOn(m+1, "f", 0)
def N(speed):
for m in range(4):
board.motorOn(m+1, "f", speed)
def S(speed):
for m in range(4):
board.motorOn(m+1, "r", speed)
def spinL(speed):
board.motorOn(1, "r", speed)
board.motorOn(2, "r", speed)
board.motorOn(3, "f", speed)
board.motorOn(4, "f", speed)
def spinR(speed):
board.motorOn(1, "f", speed)
board.motorOn(2, "f", speed)
board.motorOn(3, "r", speed)
board.motorOn(4, "r", speed)
def W(speed):
board.motorOn(1, "r", speed)
board.motorOn(2, "f", speed)
board.motorOn(3, "f", speed)
board.motorOn(4, "r", speed)
def E(speed):
board.motorOn(1, "f", speed)
board.motorOn(2, "r", speed)
board.motorOn(3, "r", speed)
board.motorOn(4, "f", speed)
def NW(speed):
board.motorOn(1, "f", 0)
board.motorOn(2, "f", speed)
board.motorOn(3, "f", speed)
board.motorOn(4, "f", 0)
def SE(speed):
board.motorOn(1, "r", 0)
board.motorOn(2, "r", speed)
board.motorOn(3, "r", speed)
board.motorOn(4, "r", 0)
def NE(speed):
board.motorOn(1, "f", speed)
board.motorOn(2, "f", 0)
board.motorOn(3, "f", 0)
board.motorOn(4, "f", speed)
def SW(speed):
board.motorOn(1, "r", speed)
board.motorOn(2, "r", 0)
board.motorOn(3, "r", 0)
board.motorOn(4, "r", speed)
d = 1.2 # time delay in seconds
utime.sleep(1)
N(50) # Forwards
utime.sleep(d)
stop()
S(50) # Backwards
utime.sleep(d)
stop()
W(50) # Sideways Left
utime.sleep(d)
stop()
E(50) # Sideways Right
utime.sleep(d)
stop()
NE(50) # Forwards and Right
utime.sleep(d)
stop()
SW(50) # Backwards and Left
utime.sleep(d)
stop()
NW(50) # Forwards and Left
utime.sleep(d)
stop()
SE(50) # Backwards and Right
utime.sleep(d)
stop()
spinL(50)
utime.sleep(d)
stop()
spinR(50)
utime.sleep(d)
stop()
После того как программа правильно отработает на подставке, вы можете сохранить её на Pico под именем main.py, чтобы она запускалась автоматически при включении питания.
Поехали!
Теперь пора переместить робота на пол и дать ему двигаться!
Отключите Pico от USB-кабеля. Оставьте батарейный отсек включённым (ON), но выключите переключатель на плате управления моторами. Поставьте робота на пол — вам понадобится площадка около 2×2 метра.
Переведите переключатель платы в положение ON и наблюдайте за выступлением робота. Мы протестировали его на ковре, кухонной плитке и асфальтовой дорожке — похоже, со всеми из них он справляется довольно хорошо. Вот краткое видео нашего робота в действии:
Что попробовать дальше
Теперь дело за вами — проявите творчество и сделайте робота своим. Вот несколько идей для экспериментов:
Измените скорости и задержки по времени
Заставьте робота описывать квадраты, прямоугольники и ромбы
Добавьте процедуры, чтобы робот поворачивал влево и вправо на месте, останавливая колёса с одной стороны и приводя в движение колёса с противоположной стороны вперёд или назад
Заставьте его двигаться по кругу, приводя в движение противоположные стороны с разной скоростью. Попробуйте описать маленький круг и больший (возможно, придётся поэкспериментировать с этим)
Попробуйте заставить его двигаться по спирали наружу