Оглавление:

Простая робототехническая платформа Arduino !: 5 шагов
Простая робототехническая платформа Arduino !: 5 шагов

Видео: Простая робототехническая платформа Arduino !: 5 шагов

Видео: Простая робототехническая платформа Arduino !: 5 шагов
Видео: Робот-платформа «Манипулятор» для Arduino 2024, Июль
Anonim
Простая робототехническая платформа Arduino!
Простая робототехническая платформа Arduino!
Простая робототехническая платформа Arduino!
Простая робототехническая платформа Arduino!

Я только что получил Arduino после того, как поигрался с некоторыми микроконтроллерами AVR во время встреч команды робототехники. Мне понравилась идея действительно дешевого программируемого чипа, который мог бы запускать что угодно с помощью простого компьютерного интерфейса, поэтому я получил Arduino, потому что у него уже есть хорошая плата и интерфейс USB. Для своего первого проекта Arduino я откопал комплект Vex Robotics, который лежал на некоторых соревнованиях, которые я проводил в старшей школе. Я всегда хотел создать платформу робототехники, управляемую компьютером, но для микроконтроллера Vex требуется кабель для программирования, которого у меня не было. Я решил использовать свой новый Arduino (и, возможно, позже, голый чип AVR, если он у меня заработает) для управления платформой. В конце концов я хочу получить нетбук, и тогда я смогу управлять роботом с помощью Wi-Fi и удаленно просматривать его веб-камеру.

Мне удалось получить достойный последовательный протокол и простой пример, который управляет роботом с помощью контроллера Xbox 360, подключенного к ПК с Linux.

Шаг 1. Что он может…

Что он может…
Что он может…
Что он может…
Что он может…

Arduino - очень универсальная платформа. Моя основная цель заключалась в том, чтобы заставить Arduino соединять два мотора Vex с ПК, но у меня было много оставшихся контактов ввода / вывода, и я решил добавить кое-что еще. Прямо сейчас у меня есть светодиод RGB для состояния последовательного порта (зеленый, если пакеты хорошие, красный, если они плохие) и вентилятор ПК, управляемый транзистором. Я также могу добавить переключатели и датчики, но я их еще не ставил. Самое лучшее в этом то, что вы можете добавлять все, что хотите, к роботу Arduino. Достаточно немного кода интерфейса для управления дополнительными данными и ввода данных в компьютер.

Шаг 2: Детали

Запчасти
Запчасти
Запчасти
Запчасти
Запчасти
Запчасти

Для своего робота я использовал несколько разных деталей. Большинство деталей были из старых вещей, которые я лежал в подвале.1) Arduino Duemilanove с ATMega328 Это новейший Arduino, и, поскольку я получил его всего несколько дней назад, у меня самый новый. Однако код достаточно мал, чтобы он легко поместился на любой Arduino. Он, вероятно, мог бы даже поместиться на ATTiny (если я построю контроллер робота отдельно от Arduino, ATTiny 2313 будет выглядеть как хороший выбор, он меньше и дешевле, но все же имеет множество выходов и последовательный интерфейс UART) 2) Vex Robotics PlatformI несколько лет назад получил комплект Vex, чтобы построить радиоуправляемого робота, чтобы собирать вещи для соревнований в старшей школе. Я сконструировал базовую базу «квадратного бота», у которой 4 колеса, приводимые в движение двумя двигателями. Вы можете заменить другие базы роботов, если у вас есть другая платформа, на которой вы хотите водить. Важно отметить, что двигатели Vex - это, по сути, сервоприводы с непрерывным вращением, они используют широтно-импульсную модуляцию, чтобы сигнализировать, насколько быстро и в каком направлении нужно вращаться. Двигатели Vex хороши тем, что они имеют широкий диапазон рабочих напряжений, где-то от 5 до 15 вольт. Я использую 12 В, потому что у меня была батарея на 12 В. Для большинства стандартных сервоприводов для хобби вам понадобится более низкое напряжение (часто 6 вольт). 3) Батарея Робот бесполезен без источника питания. Для тестирования я использую стандартный адаптер для защиты от бородавок на 9 В от RadioShack, но для беспроводной работы я обнаружил аккумуляторную батарею NiMH 12 В в старинном ноутбуке. Хотя у него недостаточно заряда для работы ноутбука, он отлично управляет моим роботом Vex. Он также может питать Arduino с помощью входного контакта Vin на разъеме питания, Arduino будет регулировать напряжение 12 В до 5 и даже выводить его на выходной контакт 5 В. 4) Базовая макетная плата В настоящее время я использую макетную плату для все подключите. В конце концов я получу более качественную макетную плату и припаяю еще несколько постоянных соединений, но пока макетная плата позволяет легко что-то менять. Моя макетная плата - это «базовая макетная плата» SparkFun, просто макет на металлической пластине с 3 выводами. 5) Преобразователь RS232-TTL на базе MAX232 в USB) можно использовать преобразователь RS232-TTL. Я использую MAX232, потому что у меня их несколько валялось, и я припаял его на небольшой кусок макетной платы с необходимыми конденсаторами. Мне нужен RS-232, потому что в моем старом ноутбуке есть только один порт USB, и я использую его для игрового контроллера для управления роботом. 6) Дополнительные детали по желанию Для легкой отладки последовательного протокола я поместил на него светодиод RGB (получил один с моим заказом Arduino, потому что они звучали круто). Индикатор последовательно мигает красным, зеленым и синим светом, когда Arduino загружается, чтобы показать, что робот перезагружен, а затем загорается зеленым, когда получен пакет двигателя, синим, когда получен пакет вентилятора, и красным, когда неисправен или неизвестен пакет был получен. Для управления вентилятором я использовал стандартный транзистор NPN (те же, что я продемонстрировал в своем последнем руководстве) и резистор между транзистором и Arduino (транзистор потреблял слишком много тока и нагревал Arduino, поэтому я установил ограничение резистор, чтобы остановить его).

Шаг 3: Программирование Arduino и ПК

Программирование Arduino и ПК
Программирование Arduino и ПК

Для программирования Arduino вам, очевидно, понадобится программное обеспечение Arduino и USB-кабель. Вы также можете запрограммировать Arduino, используя последовательный порт и преобразователь уровня TTL, если ваш компьютер имеет последовательный порт. Обратите внимание, что последовательный интерфейс USB не будет связываться с процессором ATMega Arduino, если к последовательным контактам Arduino (контакты 0 и 1) подключен преобразователь уровня, поэтому отключите его перед использованием USB. На Arduino нам понадобится последовательный интерфейс, который позволяет ПК для управления моторами. Нам также понадобится сервоприводная система с ШИМ, чтобы отправлять правильные сигналы на двигатели Vex и следить за тем, чтобы они двигались в правильном направлении при заданных правильных значениях. Я также добавил несколько простых светодиодов, в основном для индикации состояния, но также потому, что это выглядит круто. На ПК нам нужно будет открыть последовательный порт и отправить кадры данных, которые программа Arduino поймет. ПК также должен отображать параметры двигателя. Легкий способ сделать это - использовать USB-игровой планшет или джойстик, я использую контроллер Xbox 360. Другой вариант - использовать сетевой компьютер (нетбук или небольшую плату mini ITX) на самом роботе для беспроводного управления. С нетбуком вы даже можете использовать встроенную веб-камеру для потоковой передачи видео и удаленного управления роботом. Я использовал систему сокетов Linux для программирования сети для моей установки. Одна программа («сервер джойстика») запускается на отдельном ПК, к которому подключен контроллер, а другая программа («клиент») запускается на нетбуке, подключенном к Arduino. Это связывает два компьютера и отправляет информацию о джойстике на нетбук, который затем отправляет последовательные пакеты на Arduino, который управляет роботом. Чтобы подключиться к Arduino с помощью ПК с Linux (на C ++), вы должны сначала открыть последовательный порт на правильном скорость передачи, а затем отправьте значения, используя протокол, который вы также использовали в коде Arduino. Мой серийный формат прост и эффективен. Я использую 4 байта на «фрейм» для отправки двух скоростей двигателя (каждая - это один байт). Первый и последний байты - это жестко запрограммированные значения, которые используются, чтобы Arduino не отправлял неправильный байт в код PWM и не приводил к сбою двигателей. Это основная цель светодиода RGB, он мигает красным, когда последовательный кадр был неполным. Это 4 байта: 255 (жестко закодированный «начальный» байт),,, 200 (жестко закодированный «конечный» байт) Чтобы обеспечить надежный прием данных, убедитесь, что вы установили достаточную задержку между циклами программы. Если вы запустите код вашего ПК слишком быстро, он затопит порт, и Arduino может начать сбрасывать или даже неправильно считывать байты. Даже если он не сбрасывает информацию, он также может переполнять буфер последовательного порта Arduino. Для двигателей Vex я использовал библиотеку Arduino Servo. Поскольку двигатели Vex - это просто двигатели с непрерывным вращением, они используют ту же самую сигнализацию, что и сервоприводы. Однако вместо 90 градусов это точка остановки, в которой двигатель не вращается. Уменьшение «угла» заставляет двигатель вращаться в одном направлении, а увеличение угла заставляет его вращаться в другом направлении. Чем дальше вы находитесь от центральной точки, тем быстрее будет вращаться мотор. Хотя он ничего не сломает, если вы отправите на двигатели значения, превышающие 180 градусов, я бы посоветовал ограничить значения от 0 до 180 градусов (которые в данном случае являются приращениями скорости). Поскольку мне нужно было больше контроля и меньше контроля над движением робота, я добавил программное «ограничение скорости» в свою программу, которое не позволяет скорости увеличиваться более чем на 30 градусов в любом направлении (диапазон составляет 90 +/- 30).. Я планирую добавить команду последовательного порта, которая изменяет ограничение скорости, чтобы компьютер мог снимать ограничение на лету, если вы хотите двигаться быстро (я тестировал в небольших комнатах, поэтому я не хочу, чтобы он ускорялся и врезаться в стену, особенно с нетбуком на ней). Для получения дополнительной информации загрузите прилагаемый код в конце данного Руководства.

Шаг 4. Добавьте нетбук, чтобы исследовать неизведанные миры на расстоянии

Добавьте нетбук, чтобы исследовать неизведанные миры на расстоянии
Добавьте нетбук, чтобы исследовать неизведанные миры на расстоянии
Добавьте нетбук, чтобы исследовать неизведанные миры на расстоянии
Добавьте нетбук, чтобы исследовать неизведанные миры на расстоянии

С полноценным ПК на борту вашего робота Arduino вы можете управлять своим роботом так далеко, насколько это возможно для вашего Wi-Fi, без каких-либо шнуров, чтобы ограничить робота одной областью. Хорошим кандидатом на эту работу является нетбук, потому что нетбуки крошечные, легкие, со встроенным аккумулятором, Wi-Fi и даже со встроенными веб-камерами, которые можно использовать для потоковой передачи изображения робота обратно в безопасное место, где вы может это контролировать. Кроме того, если ваш нетбук оснащен услугой мобильного широкополосного доступа, ваш диапазон практически неограничен. Имея достаточно батарей, вы можете отвезти своего робота в местную пиццерию и разместить заказ через веб-камеру (не рекомендуется, роботов обычно не допускают в пиццерии, даже если бы это были люди, которые, вероятно, попытаются украсть робота и, возможно, даже пиццу). Это также может быть хорошим способом исследовать темные глубины вашего подвала, не вставая с офисного кресла, хотя в этом случае может быть очень полезно добавить несколько фар.

Есть много способов заставить это работать, многие из них, вероятно, намного проще, чем мой, хотя я не знаком с языками обработки или сценариями, поэтому я решил использовать Linux и C ++ для создания беспроводной связи управления между моей базовой станцией (также известной как старый ThinkPad) и мой новый нетбук Lenovo IdeaPad, подключенный к базе дисковода Arduino. Оба ПК работают под управлением Ubuntu. Мой ThinkPad подключен к моей школьной локальной сети, а мой IdeaPad подключен к моей точке доступа Wi-Fi, которая также подключена к школьной локальной сети (я не мог получить надежный видеопоток из школьной сети Wi-Fi, поскольку все остальные используют его, поэтому я установил мой собственный роутер, чтобы обеспечить хорошее соединение). В моем случае особенно важно хорошее соединение, так как я не реализовал проверку ошибок или тайм-аут. Если сетевое соединение внезапно обрывается, робот продолжает работать, пока он не врежется во что-нибудь или я не бегу и не остановлю его. Это главный фактор, стоящий за моим решением замедлить трансмиссию как за счет пониженной передачи двигателей, так и за счет программного ограничения скорости.

Шаг 5. Получите видеопоток

После того, как ваш робот-исследователь сможет управлять автомобилем по беспроводной сети, вы, вероятно, захотите получить видеопоток с нетбука, чтобы вы могли определить, где находится ваш робот. Если вы используете Ubuntu (или даже если вы не используете!), Я рекомендую использовать VLC Media Player для потоковой передачи. Если вы не установили его, вам действительно не хватает, поэтому установите его с помощью команды «sudo apt-get install vlc», найдите VLC в Центре программного обеспечения Ubuntu (только 9.10) или загрузите установщик с videolan. org, если у вас Windows. Вам понадобится VLC, работающий на обоих ПК. VLC поддерживает потоковую передачу, а также воспроизведение потоков в сети. На нетбуке (ПК-роботе) сначала убедитесь, что ваша веб-камера (встроенная или подключенная через USB) работает, щелкнув «Открыть устройство захвата» и попробовав Video for Linux 2 (некоторым более старым устройствам может потребоваться Video for Linux, а не новая версия 2). Вы должны увидеть изображение камеры на экране нетбука. Для потоковой передачи выберите «Потоковая передача» в меню «Файл», а затем выберите вкладку «Устройство захвата» в верхней части появившегося окна. Помните, что Ubuntu (и многие другие дистрибутивы Linux) позволяют удерживать нажатой клавишу Alt, чтобы щелкать и перетаскивать окна, которые слишком велики для вашего экрана (особенно полезно на старых нетбуках, хотя даже мой IdeaPad имеет странное разрешение 1024x576 без видимой причины). Чтобы уменьшить задержку, нажмите «Показать дополнительные параметры» и уменьшите значение кеширования. Количество, которое вы можете снизить, иногда зависит от устройства, оно становится нестабильным, если вы его слишком сильно понижаете. На 300 мс вы можете получить небольшую задержку, но это не так уж плохо.

Затем нажмите Stream, чтобы перейти в следующее меню. Нажмите «Далее», затем выберите и добавьте HTTP в качестве нового пункта назначения. Теперь настройте Транскодирование, чтобы уменьшить размер потока. Я создал собственный профиль, который использует M-JPEG со скоростью 60 кбит / с и 8 кадров в секунду. Это связано с тем, что использование продвинутых кодеков, таких как MPEG или Theora, потребляет огромное количество процессорного времени на процессоре Atom нетбука, и это может привести к остановке видеопотока без видимой причины. MJPEG - простой кодек, который легко использовать при низких битрейтах. После запуска потока откройте VLC на другом ПК, откройте сетевой поток, выберите HTTP, а затем введите IP-адрес вашего нетбука (локальный или Интернет-в зависимости от того, как вы подключаетесь), а затем «: 8080». Вам нужно указать порт по какой-то нечетной причине, иначе вы получите ошибки. Если у вас хорошее соединение, вы должны увидеть канал с веб-камеры на другом компьютере, но у него будет небольшая (около секунды) задержка. Я не знаю точно, почему возникает эта задержка, но не могу понять, как от нее избавиться. Теперь откройте приложение управления и начните управлять своим роботом-нетбуком. Почувствуйте, как работает задержка во время движения, чтобы вы ни во что не врезались. Если он работает, ваш робот-нетбук готов.

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