Оглавление:
- Запасы
- Шаг 1: Строительство
- Шаг 2. Протестируйте Roboclaw, двигатели и кодеры
- Шаг 3: добавление и программирование Arduino
- Шаг 4: Добавление и программирование Raspberry Pi (node.js)
- Шаг 5: Заключительный шаг - Программирование / использование клиента веб-страницы
- Шаг 6. Необязательно: управляйте роботом с помощью событий перетаскивания и / или касания
Видео: Робот с полным приводом, управляемый через удаленный USB-геймпад: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Для моего следующего проекта робототехники я был вынужден спроектировать / спроектировать собственную платформу роботов из-за непредвиденных обстоятельств.
Цель состоит в том, чтобы он был автономным, но сначала мне нужно было проверить его базовые навыки вождения, поэтому я подумал, что было бы забавным побочным проектом вести себя и управлять им, как если бы это был радиоуправляемый автомобиль., но вместо этого используйте USB-геймпад.
Результаты оказались такими же хорошими или даже лучше, чем я ожидал.
Преимущество использования USB-геймпада с большим количеством программирования заключается в том, что я могу настроить его и добавить к тому, что я уже сделал. У меня нет реального опыта создания радиоуправляемого автомобиля, но я полагаю, что он в значительной степени привязан к тому, что поставляется с RC-передатчиком (джойстиками / кнопками и т. Д.) И RC-приемником.
Например, я добавил некоторое распознавание того, что робот врезался в стену, просто за счет того, что программное обеспечение обнаруживает высокие токи и низкие значения скорости энкодера.
При желании можно добавить к роботу несколько веб-камер USB, в зависимости от количества и их размещения можно водить робота по жилой зоне и в другую комнату, сидя где-то в другом месте перед компьютером, к которому подключен USB-геймпад. Это.
Это руководство не будет истинным, подробным, всеобъемлющим, пошаговым руководством, но я постараюсь дать как можно больше подробностей.
Запасы
Предлагаемые детали: большую часть этого я получил от Servo City (Actobotics).
2 - 13,5-дюймовые U-образные каналы для боковых сторон базовой рамы. На них установлены двигатели. Я выбрал что-то более короткое, и мои двигатели установлены в самых углах, и это затруднило их установку.
2 - 12-дюймовые U-образные каналы для передней и задней части базовой рамы.
2 - 15-дюймовые U-образные каналы для передних и задних бамперов
2–7 (или было 7,5 ?) U-образных каналов для передних колонн. Это не слишком критично, длина может варьироваться. Это зависит от высоты задних колонн и на какой высоте вы выберете установку угловых колонн. U-образный канал, соединяющий их.
2 - (длина?) П-образные швеллеры для углового элемента спереди-сзади, соединяющие вертикальные стойки. Это очень важно, потому что Servo City / Actobotics продают для этой цели панели или кронштейны под углом 45 градусов, но вам придется выполнить некоторые математические / триггерные вычисления, чтобы убедиться, что вы получаете правильную длину.
2 - (длина?) U-образные каналы для использования в качестве боковых бамперов более высокого уровня, опять же, это зависит от того, что вы делаете с основанием
2 - (длина?) U-образные каналы для использования в качестве переднего и заднего бамперов более высокого уровня, то же самое, что и выше.
1 - (длина?) U-образный канал, служащий самым верхним элементом, проходит через задние колонны. Это может быть не слишком критично, так как вы можете установить его сверху или перед / за вертикальными колоннами.
12 (приблизительно) L-образных каналов или скоб. Они служат нескольким целям, но по существу обеспечивают структурную целостность / прочность углов базовой рамы И вертикальных колонн.
4 (+?) Плоских канала от 3 до 5 отверстий. Они также обеспечивают конструктивную прочность робота.
ServoCity продает два основных типа плоских панелей большой площади, которые можно использовать в качестве нижнего поддона, или в качестве верхней части, где будет размещаться аккумулятор и / или контроллеры, или даже в качестве верхней поверхности для датчиков.
Есть панель размером 4 (4,5?) "X 12", и я думаю, что другая - панель 9 (9,5?) "X 12".
Вот тут-то все становится интересно, может сбивать с толку и дорого (мелкие детали складываются). Все каналы и т. Д. Могут быть соединены друг с другом с помощью этих соединительных элементов, которых НЕСКОЛЬКО. Здесь я сожалею, что у меня нет исчерпывающего, подробного и конкретного списка деталей.
И дело в том, что … вы действительно не знаете, какие из них вам могут понадобиться или сколько … потому что есть очень много способов собрать эти части вместе.
Могу перечислить то, что использовал:
www.servocity.com/90-quad-hub-mount-c
www.servocity.com/side-tapped-pattern-moun…
www.servocity.com/90-quad-hub-mount-d
Следующие два очень удобны, и я бы просто запастись ими:
www.servocity.com/single-screw-plate
www.servocity.com/dual-screw-plate
Далее идут все саморезы (болты). Я начал с упаковки КАЖДОГО размера, и я прошел через большинство из них. Я использовал более длинные винты там, где размер не имел значения, а более короткие оставил там, где они были ТРЕБУЕТСЯ, потому что никакая другая длина не подойдет.
Наконец, вы должны получить 1 пакет из них:
www.servocity.com/6-32-nylock-nuts-pack
Я не использовал так много, но они (я думаю) очень важны для того, чтобы ваши моторы не отрывались от рамы с течением времени. Только два будут работать на двигатель из-за U-образного канала
Вам понадобится как минимум 4 из них, вы можете получить еще один или около того, если вы повредите один (поверьте мне, вы могли бы включать / выключать двигатели несколько раз):
www.servocity.com/heavy-duty-clamping-shaf…
Обычно валы двигателей составляют 6 мм, а оси - 1/4 дюйма (0,25 дюйма).
Я бы взял несколько черных винтов, предположительно более сильных, и использовал их для вышеуказанных зажимов, а НЕ использовал винты, которые идут в комплекте с зажимами:
(Думаю, это те):
Подшипники диаметром 4 - 1/4 дюйма (0,25 дюйма)
1 - мешок черных проставок 1/4"
4 - Зажимные D-ступицы
www.servocity.com/0-770-clamping-d-hubs
4 - D-валы (# 6340621.375 "(1-3 / 8")
Колеса для тяжелых условий эксплуатации 4-6 дюймов
www.servocity.com/6-heavy-duty-wheel
Обратите внимание, что мне нравятся эти колеса, но у них край из твердой резины. Кажется, они хорошо себя чувствуют на твердых полах, коврах и, возможно, на жестких бетонных дорожках. Не годится на траве, песке и т. Д.
ТАКЖЕ они будут испачкать ваш ковер !!!
4 - моторы:
www.servocity.com/motors-actuators/gear-mo…
Я использовал 223 об / мин, хорошую максимальную скорость в помещении, также мог легко перемещать своего робота (тяжелого с 2 батареями SLA 12 В) в замедленном движении.
2 - энкодеры двигателей. (Roboclaw Servo City работает только с 2 кодировщиками)
1 - Контроллер мотора Roboclaw 2X45A, убедитесь, что у вас тот, на котором есть зеленые клеммные колодки, а не контакты…. ну… у каждого есть свои преимущества. Оглядываясь назад … Я, возможно, получил булавки.
Думаю, это из Servo City.
SparkFun продает Arduino Uno (это то, что я использовал), а также Redboard Artemis в качестве вашего диспетчера дисков.
Вам понадобится Raspberry Pi 3 (или 4?) В качестве высокоуровневого «мозга» и интерфейса для вас.
Вам понадобится проводка, переключатели, предохранители и очень прочный обратный диод.
Я использовал SLA-батарею Duracell 12V 14AH глубокого разряда, но вы можете использовать что угодно.
ПРЕДУПРЕЖДЕНИЕ! Конструкция этого робота (ВЫСОКИЙ и ШИРОКИЙ, но КОРОТКИЙ) предполагает наличие своего рода тяжелого центра тяжести, такого как батарея SLA. Он может не работать с другими типами аккумуляторных батарей по новой технологии. LiPo, Lion и т.д. Может легко опрокинуться.
От Pololu я получил несколько адаптеров для цилиндрических вилок, чтобы я мог независимо подключать Arduino и / или Redboard, даже если они будут подключены к Raspberry через USB, потому что я не хотел полагаться на мощность Raspberry.. (Особенно крепление камер, датчиков и т. Д.)
Вам понадобится понижающий стабилизатор напряжения с 12 до 5 В, минимум 5 А (?) Для Raspberry. Остальные могут работать с любым напряжением от 7 до 15 В, так что напрямую с батареей SLA.
Вот и все по запчастям.
Чего я бы НЕ стал делать - это зубчатая передача со скосом под 90 градусов.
Опять же, в моем плейлисте Robotics на YouTube есть много видео, в которых подробно описывается большая часть вышеперечисленного.
Шаг 1: Строительство
Откровенно говоря, все мои этапы строительства уже выполнены в виде youtubes. Вы можете увидеть их в моем плейлисте «Робототехника», начиная с «Робот Уоллеса 4». Предыдущие (Уоллес II, Уоллес III) также имеют хороший материал.
www.youtube.com/playlist?list=PLNKa8O7lX-w…
Шаг 2. Протестируйте Roboclaw, двигатели и кодеры
Создатели Roboclaw (BasicMicro) имеют приложение для Windows, которое вы можете использовать, чтобы убедиться, что вы правильно подключили моторы и кодеры к Roboclaw. Вы будете подключать двигатели с той же стороны параллельно Roboclaw. Вы можете использовать провода энкодера только на задних двигателях или на передних двигателях, или, может быть, даже лучше - ДИАГОНАЛЬНО.
Причина моего предложения связана с проверкой (позже) зависшего робота. Наличие по диагонали состояния, когда передние / задние колеса вращаются / не вращаются, может быть лучше, чем просто переднее или только заднее.
ПРИМЕЧАНИЕ: что я НЕ сделал, так это использовать Arduino для подключения (через контакты GPIO) к кодировщикам - если вы это сделаете, у вас может быть кодировщик Roboclaw handle 2, а затем Arduino обрабатывает два других, и просто запросите у Roboclaw два значения кодировщика (и скорости).
ПРИМЕЧАНИЕ. Я использовал приложение BasicMicro для предварительной настройки Roboclaw для ускорения / замедления. Это хорошо для защиты оборудования и электроники. В моем плейлисте Robotics есть видео об этом.
Чуть не забыл: я также купил несколько соединительных кабелей, которые проходят между кабелями двигателя и Roboclaw. ПРИМЕЧАНИЕ: если вы сделаете это, вы заметите, что общая длина кабеля ДЕЙСТВИТЕЛЬНО ДЛИНА. Но я не хотел резать, если мне это не нужно. Я действительно (для последующих шагов) столкнулся с проблемами связи с USB между Raspberry и Arduino, вероятно, из-за шума EMI … но я работал над этим с помощью программного обеспечения.
Если это станет проблемой, вы можете перерезать провода - вы также можете купить металлический экран (от Amazon, диаметром 1 дюйм).
И последнее: мне еще предстоит сделать автоматическую настройку или автоматическую настройку Roboclaw (с использованием кодировщиков), чтобы левый и правый двигатели двигались с одинаковой скоростью, а робот двигался прямо.
Мой действительно немного изгибается на высоте около 12 футов, но не настолько, чтобы я чувствовал необходимость что-то с этим делать.
Шаг 3: добавление и программирование Arduino
Вам понадобится бочкообразный штекер и немного проводки, а также USB-кабель. Убедитесь, что вы выбрали правильный разъем для разъема Arduino.
Вам нужно будет загрузить Arduino IDE.
Здесь, на Github, есть последний набросок, который описывает управление роботом:
github.com/elicorrales/wallace.robot.ardui…
Вы подключите Arduino к своему компьютеру, на котором запущена IDE, и в зависимости от того, как написан скетч, вы будете использовать контакты 10 и 11 на Arduino для последовательной связи (Software Serial) с Roboclaw.
Я разработал простой протокол связи между Raspberry Pi и Arduino.
Он основан на символах ASCII, что упрощает отладку и тестирование, просто используя окно «последовательный монитор» в Arduino IDE.
Команды начинаются с цифры "0" (ноль) и при необходимости увеличиваются.
Команды, начинающиеся с «20», являются прямыми командами Roboclaw, а команды под этим номером - строго связанные с Arduino.
Из-за шума EMI я улучшил командную строку, включив в нее контрольную сумму.
Итак, любая строка будет включать:
# количество токенов в строке, включая этот
контрольная сумма
Например, скажем, вы хотите, чтобы Arduino отвечал своим меню команд:
4 0 12 16
«4» - это четыре токена в строке.
«0» - это команда МЕНЮ.
«12» - это случайное число, которое я выбрал.
«16» - это сумма 4 + 0 + 12.
Та же самая команда MENU может быть другой:
4 0 20 24
Поскольку я выбрал другое случайное число, контрольная сумма также отличается.
Например, вы хотите двигаться вперед со 100% скоростью:
5 29 0 134 100
«5» пять жетонов
«29» команда ВПЕРЕД
«0» случайное число
«134» контрольная сумма
«100» параметр 1 (скорость в данном случае)
Если Arduino не может проверить эту входящую строку, он просто отбрасывает ее / игнорирует, без ответа.
Если Arduino не получает команду следующего движения с X миллисекундами, он отправляет STOP моторы на Roboclaw.
Arduino запускается и отправляет автоматический статус в порт USB … если не сказано прекратить это делать.
На этом этапе вы должны быть готовы попробовать управлять Roboclaw и наблюдать за вращением двигателей, просто используя «Serial Monitor» в среде IDE.
Шаг 4: Добавление и программирование Raspberry Pi (node.js)
Опять же, если вы посмотрите мой плейлист Робототехники, даже с самого начала я прошел каждый шаг, чтобы запустить Raspberry.
Единственное, что я мог не заметить, это то, что вам понадобится стабилизатор на 5 В, и вы либо каким-то образом сконструируете, разрежете / модифицируете для него USB-кабель, либо запустите Raspberry другим способом.
Здесь, в Github, есть все, что вам нужно в Raspberry для связи с Arduino через USB.
github.com/elicorrales/wallace.robot.raspb…
Есть даже тестовые скрипты.
Вы можете взглянуть на код сервера node.js, и вы увидите, как Raspberry преобразует краткие числовые инструкции в строки URL-адресов типа REST. Вы можете использовать "curl" для отправки тестовых команд.
Пример:
ваш IP-адрес RP3: 8084 / arduino / api / forward / 50
заставит моторы на мгновение повернуть колеса вперед.
Если вы поместите это в цикл сценария оболочки, вы увидите, что колеса продолжают вращаться.
Код node.js (server.js) включает функцию повторного подключения на случай потери последовательной связи с Arduino. Вы можете проверить это, просто отключив Arduino от Raspberry и снова подключив его.
Убедитесь, что скорость последовательной передачи данных между ними совпадает.
Из-за того, что Arduino отбрасывает плохие пакеты данных, а также из-за того, что на уровне node.js и на уровне javascript браузера все закодировано для отправки множества команд "привода", я смог запустить до 2 000 000 бод. (2 Мбит / с).
Если вы запускаете тестовые сценарии и видите, как крутятся колеса, значит, вы готовы к следующему шагу.
Шаг 5: Заключительный шаг - Программирование / использование клиента веб-страницы
В ссылку Github на Raspberry-часть всего этого включены клиентские файлы.
index.html. index.js. p5.min.js.
Они управляют USB-геймпадом через Gamepad API (на основе браузера), и вы должны увидеть различные кнопки и ползунки, также доступные на веб-странице.
Код javascript запрашивает (опрашивает) значения осей X и Y для одного из джойстиков.. (в зависимости от того, какие джойстики / геймпады у вас есть, вам, возможно, придется настроить код). Он очень быстро опрашивает и передает все эти значения серверу node.js, который прослушивает 8084.
Необработанные значения по осям X и Y джойстиков находятся в диапазоне от 0 до 1.
Но функция библиотеки контроллера двигателя Roboclaw, используемая в Arduino для управления двигателями, ожидает значение от -100 до 0 (назад) или (от 0 до 100) вперед.
Су…. это цель включения p5.min.js. Просто так получилось, что у вас есть очень хорошая и удобная функция map (), в которой вы даете ей необработанное значение, его исходный (текущий) диапазон и новый желаемый диапазон. И он преобразует необработанное значение в значение в новом сопоставленном диапазоне.
Еще один момент: на 100 скоростях робот может быть очень хитрым. Я постоянно с чем-то сталкивался. Но даже когда вы станете лучше в этом, он все равно будет обидчивым при вращении влево или вправо.
Что-то, что вы можете добавить, будет похоже на текущий слайдер максимальной скорости на веб-странице. Этот ползунок определяет, какое максимальное или максимальное значение вы будете сопоставить джойстикам X и Y.
Пример:
Допустим, вы сопоставляете 0 -> 1 с 0 -> 100. Когда вы нажимаете джойстик до упора, вы находитесь на 100. Обидчивый. Может быть, слишком быстро.
Но если вы сдвинете ползунок максимальной скорости немного назад, теперь вы сопоставляете 0 -> 1 с 0 -> 80 или 70.
Это означает, что у вас есть больше возможностей для перемещения джойстика без такого большого изменения скорости, отправляемой в node.js (и в Arduino).
И вы могли бы добавить, что разделите крестики (поворот влево или вправо) от Y (вперед или назад) на их собственные максимальные доступные скорости.
Таким образом, вы можете оставить Ys от 0 до 100, от 0 до -100 для быстрого линейного движения, но снизить максимальную скорость Xs для более контролируемого вращательного движения. Лучшее из обоих миров.
Шаг 6. Необязательно: управляйте роботом с помощью событий перетаскивания и / или касания
Если вы зашли так далеко, то знаете, что уровни программного обеспечения, начиная с браузера и переходя через Javascript и далее к серверу Raspberry node.js и, наконец, к arduino, преобразуют координаты X и Y джойстика геймпада в координаты " команды "вперед" (или "назад" и т. д.) (и их значение скорости).
Кроме того, вы знаете, что, хотя X и Y джойстика имеют отрицательное значение 1, ноль и плюс 1, их нужно преобразовать между нулем и 100. Ну, максимум зависит от настройки максимальной скорости на веб-странице.
Су … единственное, что можно сделать, чтобы использовать события мыши или касания (как на смартфоне), - это захватить эти события, захватить X и Y.
НО ---- эти X и Y НЕ находятся между отрицательными 1 и 1. Они начинаются с 0 и увеличиваются положительно, потому что они, по сути, являются пикселями или относительными экранными координатами некоторого элемента HTML (например, панели начальной загрузки) или холста.
И снова функция map () библиотеки Js P5 очень удобна для переназначения того, что нам нужно.
Я реорганизовал код, чтобы иметь две разные веб-страницы, одну для настольного компьютера с помощью геймпада, а другую для мобильного устройства с использованием событий касания.
Кроме того, после переназначения X и Y они передаются в ту же цепочку кода и т. Д., Как и X и Y с геймпада.
Рекомендуемые:
Робот, управляемый через Bluetooth, сделай сам Arduino !: 5 шагов
Сделай сам Arduino управляемый робот по Bluetooth !: Всем привет! В этой статье я создаю робота, управляемого через Bluetooth, с помощью Arduino. Если вы предпочитаете смотреть видео, вот видеоурок, который я сделал !:
Радужные часы со словами с полным эффектом радуги и многое другое: 13 шагов (с изображениями)
Радужные часы со словами с полным эффектом радуги и многое другое: цели1) Простые2) Недорогие3) Максимально энергоэффективные часы со словами радуги с полным эффектом радуги. Смайлик на часах со словами. Простой ИК-пульт дистанционного управления Обновление 03-ноя-18 LDR для Управление яркостью NeopixelsUpdate 01-янв
Плотти Ботти: робот для рисования, управляемый через Интернет!: 10 шагов
Plotti Botti: робот для рисования, управляемый через Интернет !: Plotti Botti - это XY-плоттер, прикрепленный к доске, которым может управлять кто угодно через LetsRobot.tv
Катящийся робот с ESP32 Thing и драйвером TB6612FNG, управляемый Android через BLE: 11 шагов
Катящийся робот с ESP32 Thing и драйвером TB6612FNG, управляемый Android через BLE: Всем привет Это мое первое руководство. Катящийся робот (по прозвищу Райдо - от руны, связанной с движением), основанный на ESP32 Thing, TB6612 FNG и BLE. Одна часть, которая может показаться странной, заключается в том, что фотографии не из процесса изготовления
Робот-вездеход, управляемый через Wi-Fi (с Arduino, ESP8266 и шаговыми двигателями): 11 шагов (с изображениями)
Робот-ровер FPV, управляемый Wi-Fi (с Arduino, ESP8266 и шаговыми двигателями): в этом руководстве показано, как спроектировать двухколесный робот-вездеход с дистанционным управлением по сети Wi-Fi, используя Arduino Uno, подключенный к модулю Wi-Fi ESP8266. и два шаговых двигателя. Роботом можно управлять из обычного интернет-браузера