Оглавление:

Робот с полным приводом, управляемый через удаленный USB-геймпад: 6 шагов
Робот с полным приводом, управляемый через удаленный USB-геймпад: 6 шагов

Видео: Робот с полным приводом, управляемый через удаленный USB-геймпад: 6 шагов

Видео: Робот с полным приводом, управляемый через удаленный USB-геймпад: 6 шагов
Видео: Высокая плотность 2022 2024, Июнь
Anonim
Image
Image

Для моего следующего проекта робототехники я был вынужден спроектировать / спроектировать собственную платформу роботов из-за непредвиденных обстоятельств.

Цель состоит в том, чтобы он был автономным, но сначала мне нужно было проверить его базовые навыки вождения, поэтому я подумал, что было бы забавным побочным проектом вести себя и управлять им, как если бы это был радиоуправляемый автомобиль., но вместо этого используйте 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 с геймпада.

Рекомендуемые: