Примеры как делать не нужно
Расскажу об одном из своих роботов который сейчас развиваю.
Пара видео
Слежение за мячиком (штатный pixy)
http://www.youtube.com/watch?v=9bgE9atY_co
Езда по компасу (удержание направления должен ехать прямо) в квартире компас бесполезен (либо его поднимать нужно подальше от проводки)
http://www.youtube.com/watch?v=fMhvaeC0jq8
Причём, если повторить из той же точки то робот поедет по точно такой же траектории.
Состав того что на борту:
1) корпус ZUMO, без моторов https://www.pololu.com/product/1418
2) шилд ZUMO v1 , сейчас продаётся v1.2 https://www.pololu.com/product/2508
3) olimexino-stm32 , переделанная под STM32F405RGT6 https://www.olimex.com/Products/Duino/S ... INO-STM32/
4) st-link (на ебее таких больше нет компактная плата, штатный usb разъём заменён на mini-usb)
5) HC-06 http://www.ebay.com/itm/Wireless-Serial ... 339177720b
6) энкодеры Optical Encoder Pair Kit for Micro Metal Gearmotors, 3.3V https://www.pololu.com/product/2591
7) моторы https://www.pololu.com/product/2214
8 ) гироскоп/компас/акселерометр MinIMU-9 v2 https://www.pololu.com/product/1268
9) аккумулятор LiFePO4 2шт http://www.hobbyking.com/hobbyking/stor ... _Pack.html
10) плата защиты для LiFePO4 http://www.ebay.com/itm/260894590939
11) зарядка, http://www.ebay.com/itm/1-2-or-3-cells- ... 1358479380
подробнее тут forum11/topic2129-570.html#p323620
12) Камера Pixy http://www.cmucam.org
Изменения:
Т.к. штатно установка энкодеров в этот корпус не предусмотрена, пришлось изобретать своё.
Долго мучался, очень не хотелось вести шлейф из проводов (6 жил на один энкодер), придумал такую плату
Со стороны корпуса такая плата
Вот так соединяется (коннектор справа чёрный)
Сигнал с энкодеров аналоговый, на сайте pololu есть рекомендация как сигнал должен выглядеть (синусоида), но после экспериментов я решил что прямоугольный сигнал лучше, поэтому для усиления отражающей поверхности я наклеил фольгу (есть такой фольгированный скотч, применяется для герметизации вентиляции).
получилось так
Но излучатели в энкодере очень мощьные поэтому очень важно, чтобы энкодеры друг на друга не светили, а то на что они светят должно отражать как можно меньше, иначе сигнал не будет иметь максимальный размах.
STM32F103 и STM32F405 отличаются, требуются дополнительные конденсаторы которых не было у STM32F103
Пришлось немного поколдовать с платой, но ничего сложного, фото не делал.
размещение элементов на olimexino Отличается от оригинального arduino , поэтому плата не встанет в шилд ZUMO без изменений.
Пришлось двигать элементы как на olimexino так и на шилде.
Питание:
Аккумулятор подключен к плате защиты от перезаряда/переразряда и защита от высоких токов.
С выхода этой платы питание идёт на шилд.
Схема шилда
С выключателя точку OFF, через полевой транзистор N-канальный, я завёл на контроллер, чтобы можно было самоотключиться, положение OFF основное рабочее.
Выключить можно программно, или если нажать кнопку reset.
Для включения кратковременно переводим выключатель в положение ON и затем в OFF.
В точку VRP через диод приходит входное напряжение зарядки (12в)
это же напряжение через резистор приходит на базу Q1 и тем самым закрывает его, т.е. в момент зарядки аккумулятор отключается от бортовой электроники.
Получается мини UPS схему я подробно рассматривал тут forum11/topic2129-465.html#p291919
Зарядка подключена к аккумулятору аналогично приведенной выше схеме (simple ups for robot), через Q2 который отрывается когда появляется питание на зарядке.
Другими словами, если питания на зарядке нет то аккумулятор отключен от зарядки.
Olimexino имеет встроенный импульсный стабилизатор на 5в, поэтому входное напряжение заряда 12в не страшно.
Повышающий преобразователь на шилде тоже нормально переносит 12в.
Напряжение аккумулятора через делитель приходит на АЦП контроллера, так что можно отслеживать как разряд так и заряд.
Зарядка тоже управляется отдельно (вкл/выкл) для этого я использую дополнительный транзистор который сажает на землю одну ножку на зарядке, в результате заряд прекращается. Таким образом я программно отключаю зарядку когда напряжение достигнет 7.2в.
Вся конструкция сборно разборная, на коннекторах, отдельно корпус, шилд, контроллер, так что разобрать, в случае необходимости, не составляет труда.
Программная часть:
1)операционка Chibios
2)как основной процесс elua
Отдельный поток на управление моторами
Отдельный поток на IMU
Программа управления пишется на Lua, lua скрипты хранятся на micro-sd карте (fat32), так что достаточно просто запустить другую программу и поведение робота меняется.
На борту есть встроенный редактор vi так что небольшие изменения я делаю на самом роботе.
Lua файлы можно загружать удалённо по протоколу xmodem.
для IMU взял исходники https://github.com/ptrbrtz/razor-9dof-ahrs
драйвера для Minimu9 взял от ардуино и переписал на С под chibios.
Единственное изменение, данные компаса (вектор) я пропускаю через медианный фильтр на 50 значений, так дёргается меньше и минимум-максимум более средние получаются, на скорость изменения положения не влияет.
Частота опроса компаса 200Гц, основной алгоритм расчёта положения ведётся с частотой 50Гц.
Ссылки:
Мои поиски зарядки для робота
1] Текущий рабочий вариант post323620.html#p323620
2] Ещё один универсальный полуфабрикат post325872.html#p325872
3] Схема примитивного но работоспособного Источника бесперебойного питания forum11/topic2129-465.html#p291919
Начало поиска простого UPS, начинал просто с защиты по току forum11/topic11028.html
Похожие проекты
http://mcuoneclipse.com/2014/07/26/zumo ... i-and-gps/
http://mcuoneclipse.com/2014/10/30/new- ... oking-good
http://mcuoneclipse.com/2013/01/31/the- ... umo-robot/
Zumy Robotic platform https://wiki.eecs.berkeley.edu/biomimetics/Main/Zumy ODROID U3 до 5в x1.2А в пике