Робот на Mini2440+Arduino
Данное руководство я пишу как помощь людям, которые начинают или уже собирают робота на базе Mini2440. Надеюсь он им будет полезно. Кроме того, это отличная шпаргалка для меня, так как держать в голове всё сразу достаточно тяжело. Данная ветка будет периодически обновляться, дополняться и изменяться. Это далеко не конечная версия.
Концепт устройства был выбран следующий:
Суть его в двух слова такова: Mini2440 не в состоянии обрабатывать изображение, а, следовательно, не может быть основой для робота без привязки его в компьютеру.
Да и отлаживать логику робота на конечном устройстве в разы сложнее, чем программу на компе. Робот снимает состояние всех датчиков и камеры, передает на комп, а тот, в свою очередь, обрабатывает всю информацию, принимает решение и отправляет его обратно роботу для исполнения. Сама минька также не в состоянии работать с периферией на прямую, поэтому нужно исполнительное устройство. Хоть у меня есть большая база знаний по PIC-микроконтроллерам, я выбрал ныне модный Arduino контроллер, как исполнительно устройство к которому будет подключаться вся периферия. Arduino в настоящий момент имеет гигантскую библиотеку примеров для работу практически с любыми устройствами, так что в написании программы для него проблем быть не должно. Тем более, что она уже наполовину написана. В настоящий момент идет допил скелета для формирования протокола обмена информации между компом и Arduino.
Еще с института я ненавижу Visual Studio и считаю, что все решения, которые разработчики в него внедряют далеки от реальности. Еще тогда пытаясь написать проект для VS, я с ужасом увидел как один парень с потока написал такой-же проект под Builder C++ на порядок быстрее. Компоненты рулят! А MFC вообще страшный сон. Посему только Builder C++. К сожалению разработчики библиотеки OpenCV старательно обходят эту среду разработки стороной. Первый вопрос к народу: я нашел собранные библиотеки OpenCV 2.0 для Builder C++. Но для более поздних версий (2.1 или 2.2) найти не могу. Помогите!
Программное взаимодействие выбрано следующим:
На миньке устанавливается ser2net, которая передает реальный com порт по сети через wifi. На PC ставится программа HV Virtual Serial Port, которая формирует (виртуально) этот порт в компе. Фактически появляется порт, через который можно управлять Arduino совершенно абстрагируясь от того, что Arduino подключено не напрямую к компу, а через миньку и wifi связь.
Камера подключается непосредственно к миньке, да и скорости com порта явно не достаточно для передачи изображения. Я решил использовать mjpg-streamer, которая граббит изображение с камеры и формирует виртуальную web страницу, которую опять же по сети можно открыть с компа. И, а это пока не решено, грабить библиотекой OpenCV. У кого-нибудь опыт в подобном есть?
Фактически минька у меня получилась большим таким Wifi USB хабом. И я уже было начал думать, а покупке готового такого. а) Но таких нет б) Те, что есть стоят сумасшедшие деньги.
Самое сложное это, конечно, настроить миньку. Требования к настройке были таковы:
1. Уход от Qtopia и установка Debian. Во первых нет графики, а это плюс к производительности. Экран мне к миньке вообще для робота не нужен. Во вторых это система пакетов, которые ставить одно удовольствие. Решено, хотя есть вопросы и замечания.
2. Работа с USB Wifi брелоком. Который должен подключаться к точке через WPA. Не решено!
3. Связь с минькой через терминал по сети через putty. Отменная программа! Решено.
4. Установка и настройка mjpg-streamer для передачи видео-потока по сети. Не решено. Моя USB камера не UVC. У кого есть наработки?
5. Работа с SD флешкой. Дабы беречь встроенную. Решено для ext3, а она нисколько не бережет флешку.
Поставил пакеты:
- apt-get install mc (а как же без midnight commander-а? Через ssh putty он точь-в-точь как настоящий)
- wireless-tools (программы для wifi)
- ser2net (для расшаривания ком-порта по сетке. Суть мою уловили уже?)
- minicom (терминал, для того чтобы тестить связь с платой исполителя)
- moon-buggy (just for fun)
- wget (качалка с инета)
- udhcpc (DHCP)
- usbutils (в первую очередь для lsusb)
- bzip2 (распаковывать .tar.bz2)
- gcc (компилятор)
- build-essential (для работы make и остального)
Debian пашет. Всем доволен. Но столкнулся с вопросом, который меня остановил:
как правильно установить и настроить wifi-брелок TL-WN321G?
- ядро собирал сам, так как стандартное не держит ни одну ФС, а уменя ext3 на SD флешке
- распаковал linux-usb-wifi_linux-2.6.32.2_20100728.tgz в корень
- scan-wifi видит соседскую сетку каждый раз, а мой роутер 1 раз из 3-х. Почему?
- start-wifi подключает к wifi-роутеру, однако скорость подключения просто плачевная - 2-3 кб/с.
- всё утилиты пакета linux-usb-wifi_linux-2.6.32.2_20100728.tgz жалуются, что не могут загрузить
модуль ath9k_htc. Как я понимаю модуль не стандартный и ставится на ядро патчем compat-wireless-2.6.tar.bz2
Кто-нибудь знает как?
- iwconfig заставить работать не удалось.
Мой главный вопрос: Как заставить работать TL-WN321G под Debian?
P.S. Есть ли у кого ядро на которое не ругается тот же scan-wifi? Нужна поддержка ext3 и здравость смысла
Для компьютера требования такие:
1. Builder C++. Есть, только вот с версией не определился.
2. OpenCV 2.1 или 2.2. для Builder C++. Помогите пожалуйста.
3. Захват потока mjpg-streamer посредством OpenCV. Не решено, так как пока не купил камеру. У кого есть опыт в подобном?
4. Виртуальный com порт, для управления Arduino. Решено.
Железо.
Концепт такой
Двойная литий-ионная батарея на 7.2В (для большей емкости) питает плату контроллера двигателей и импульсный блок питания, который формирует 5В 2А для всего остального робота. Плате контроллера двигателей 7,2В необходимо непосредственно для самих двигателей. Блок питания собрал на LM2576.
5В подается на миньку (а ей нужен 1А!) и на Arduino. К Arduino подключены следующие устройства:
1. Контроллер двигателей на L298N. Плата управляет 4 двигателями через 2 канала: левый и правый. Двигатели спарена по два на каждый канал параллельно. Решено.
Сама схема взята от сюда http://robozone.su/2008/04/16/modul-upravlenija-jelektrodvigateljami.html. За что им огромное спасибо.
2. 6 штук ультразвуковых датчиков, которые должны располагаться на корпусе по кругу. Не решено, но на финишном пути.
3. Две сервомашинки для управления USB камерой по оси X и Y. Решено.
4. Цифровой компас. Не мыслю себе робота без компаса, но пока не определился с моделью. Один приобрел. Остался очень не доволен точностью! Не решено. Может быть, кто подскажет проверенные компасы?
5. Два енкодера вращения колес. По одному на каждый канал. Не решено, но в самом ближайшем будущем будет.
6. TTL конвертер уровней сигналов. Дело в том, что в миньке com порт на 3.3В, а в Arduino на 5В. Для этого я использовал конвертер уровне. Решено.
Вопрос успешно решен и проверен. Решив не рисковать портами процессора миньки я предпочел сделать конвертер уровней. Пятивольтовую сторону подключил к TX и RX Arduino (или любому другому пятивольтовому устройству), а 3.3-вольтовую сторону к TTL-Com порту миньки.
Я использовал BSS138 для двунаправленного конвертирования логических уровней.
Вот схема.
7... пока больше нет идей.
Для основы робота приобрел на http://www.ebay.com четырехколесную платформу Arduino 4WD с энкодерами в придачу. Вещь очень неплохая, хотя движки могли быть и по лучше и по качественнее.
На платформу установил Arduino, блок питания и контроллер двигателей. Так же прикрутил две сервы через скобы Tilit&pan, к которым в последвите будет прикручена камера. Сверху разместил миньку и подключил ее к БП,а через конвертер уровней к com порту Arduino. Аккумуляторов пока нет. Закажу когда собиру железо окончательно и пойму сколько у меня есть места на аккумуляторы.
В свою очередь к миньке через USB хаб. Подключаю USB камеру и USB Wifi брелок.