Сегодня я начинаю публиковать статьи, посвященные созданию своего мобильного робота. На семейном совете ему решено было дать имя Роботоша, собственно поэтому, свой блог я назвал именно так. Целью его создания является изучение различных алгоритмов и элементов робототехнических систем на практике.
На текущий момент мой робот представляет из себя четырехколесную платформу с установленной на ней платой микроконтроллера и обвешенный некоторым количеством датчиков и интерфейсов для взаимодействия с пользователем. Программное обеспечение находится в самом зачаточном состоянии, поэтому я подробно буду разбирать что и почему именно так реализовано на текущий момент и постепенно двинусь дальше, добавляя функциональность и наделяя его «разумом». Это мой первый робот, поэтому, возможно, какие-то этапы его создания будут ошибочными или тупиковыми.
Идея
Идея в первом приближении выглядит следующим образом: автономный робот, обладающий следующими особенностями:
- 4-х колесная платформа
- Использование внутри помещения (квартиры)
- Бесконтактные способы определения препятствий для избежания столкновений
- Режимы управления:
- автономный режим «случайного блуждания» с целью построения карты помещения
- режим дистанционного управления
- режим выполнения голосовых команд с распознаванием голоса
- Контроль заряда батареи и самостоятельная подзарядка
- Вывод информации на символьный LCD-дисплей
- Звуковая сигнализация
Шасси робота
В качестве шасси я решил использовать покупную четырехколесную платформу из чисто экономических соображений (как ни считал, по частям получалось дороже, а эта одна из самых дешевых, которую удалось найти). Мой выбор пал на шасси DAGU 4WD chasis kit, представляющее из себя 4-х колесную платформу с моторами. Вот так выглядит комплект поставки.
Площадки для установки различного навесного оборудования сделаны из красного акрилового стекла с большим количеством крепежных отверстий для установки датчиков, контроллеров, сервомоторов. Акриловое стекло, надо сказать, сверлится очень даже легко, поэтому, если даже что-то не попадет в будущем в готовые отверстия, всегда можно легко сделать дополнительные. Колеса прорезиненные. Моторы коллекторные с пластиковыми редукторами.
Платы
Размеры: 175 х 109 х 3 мм
Расстояние между платами (высота идущих в комплекте стоек): 24мм
Клиренс: 45 мм
Колеса
Диаметр колес: 67 мм
Ширина обода: 26 мм
Моторы
Напряжение: 4.5 — 7.2 В
Обороты холостого хода: 90 ± 10 об/мин
Ток холостого хода: 190 мА (макс. 250 мА)
Крутящий момент: 0.8 кг · см
Максимальный ток: 1 А
На сборку уходит минут двадцать. В собранном виде шасси выглядит вот так:
Недорого купить можно здесь.
С двигателями, честно говоря, у меня вышла засада. Эти двигатели не предназначены для установки на них энкодеров, а для меня это важно, так как я планирую использовать энкодеры для обеспечения обратной связи для более точного позиционирования. Поэтому, скорее всего, если не удастся переделать эти, двигатели в дальнейшем буду менять на другие.
В целом, собранная платформа выглядит достаточно симпатично. Если бы не проблема с энкодерами, я был бы доволен на 100%.
Собираю (ну или пытаюсь собрать) в данный момент похожего робота. Похожие идеи — автономный робот способный строить карту помещения и ориентироваться по ней, автономно заряжаться ну и остальное по возможности. Для этого использую гусеничную платформу Dagu Rover 5 www.pololu.com/product/1551 (4 мотора и 4 энкодера). Пока мозги на ардуино мега 2560, но планирую использовать CubieBoard 2 (или Raspberry Pi 2) с ROS. Идей много. Ваш блог довольно интересный для меня.
Это вы очень правильно сделали, что выбрали платформу с энкодерами. Я изначально ошибся — на используемые мной двигатели нельзя поставить энкодер, а без использования одометрии сделать полноценного автономного робота нельзя. Я как раз сейчас платформу свою переделал (перешел к использованию только двух двигателей) — планирую на этой, максимум на следующей неделе про это подробно рассказать. Проблема использования четырех двигателей — это калибровка и синхронизация. Это можно, только сложно. Поэтому я решил упростить себе задачу и перейти к двухмоторному варианту. С гусеничными вариантами и четырьмя моторами таже беда — лучше использовать два мотора (по одному на каждую сторону), так НАМНОГО проще реализовать схему управления. Это в случае если нужно создать автономного самоуправляемого робота. Если используется дистанционное управление — это совсем другой разговор, мы сами корректируем все погрешности и ошибки в движении, управляя им, поэтому кинематическая схема робота не так критична.
Ну я как поиграл в реальности с этими гусеницами то понял что одометрию будет сложновато сделать даже с одним мотором на каждую гусеницу, т.к. при поворотах платформа поворачивается не ровно относительно своего центра, это зависит от трения поверхности, от неидеальной формы самой платформы и т.д. Я понимаю одометрию целесообразно делать на двух колесах и третьем ролике, так наиболее точно получится. Кстати ничего на сайте не написано про гироскопы, акселерометры, магнетометры, не занимались этой темой? Особенно меня инетересует калибровка магнетометра, и связка этих трех датчиков фильтром калмана. Кстати про свой метод калибровки магнетометра я написал статейку, правда на английском языке (так просто больше аудитория) diydrones.com/profiles/bl...tion-for-dummies.
С двумя моторами (колесами) и третьим неуправляемым всенаправленным колесом я и сделал новую версию своей платформы. На четырех колесах нормальный вариант только со схемой Аккермана (как в автомобилях), но там вся математика очень сильно усложняется и погрешности растут. С гироскопами, акселерометрами, магнетометрами практически пока не разбирался. Я попытаюсь на первом этапе реализовать своего робота без инерциальной навигации. У вас очень правильный подход. Чем больше различной информации с датчиков используется — тем более точную оценку можно произвести. Мне очень понравилась ваша статья. Как дело у меня дойдет до магнетометра, обязательно ваш способ калибровки попробую. Про фильтр Калмана и другие методы оценки в модели пространства состояний в двух словах, у меня есть слайды в pdf-ках «Программирование беспилотного автомобиля», «Локализация мобильного робота» и «Задача одновременной локализации и построения карты (SLAM)» (robotosha.ru/publications). Подробно я буду писать еще неоднократно про различные стороны вероятностной робототехники (в частности, про SLAM). Юрий, вы подпишитесь на новости моего блога (если еще не подписались), мне очень приятно будет видеть вас среди своих постоянных читателей и критиков.
а я выбрал вот такую платформу мегу8 сразу заменил на 328ю
Интересный какой вариант. Сервоприводы на колесах позволяют получить достаточно большую точность. Рисовать с ее помощью чего-нибудь пробовали?
Сервоприводы, датчики холла и по восемь магнитов в каждом колесе... я доволен... ))) вот один из первых вариантов практически без программной корректировки
Классно!
Ну да и плата после замены м/к на ATmega328p стала «человеческая», а обвязка и была — полный фарш...
Не поможете с кодом.?
Помогу. В чем именно?
Спасибо... Вот немогу сообразить как снять показания с колесных датчиков, записать и потом воспроизвести в обратном направлении... Может ткнёте носом в какой нибудь пример...
Здесь статейка про датчик Холла и пример кода. Датчик Холла действует как ключ. При прохождении мимо него магнита, датчик дает на выходе +5В. Для считывания показаний нужно читать значения на цифровом входе микроконтроллера, к которому подключен датчик. В примере используется прерывание для отслеживания события перехода выхода датчика из состояния 0 в 1 и если это событие возникает (колесо сделало полный оборот) — выдается сообщение в Serial-порт. Вам вместо выдачи сообщения можно будет, считывать значение таймера (например, используя функцию millis в Arduino) и вычислять промежуток времени между двумя последовательными событиями (подробнее про прерывания на Arduino можно почитать здесь). То есть определять время, за которое происходит оборот колеса. И дальше записывать в массив набор таких временных промежутков t1, t2, t3, ..., tn. Для воспроизведения в обратном направлении нужно двигателю дать команду вращаться в течение времени tn с частотой 1/tn, затем в течение времени tn-1 с частотой 1/(tn-1), ... , в течение t1 с частотой 1/t1. Аналогично и для второго двигателя — записываем временные интервалы и воспроизводим их в обратном направлении. Есть только одна проблема: мы не знаем в каком направлении вращается колесо, мы знаем только с какой скоростью оно вращается. Поэтому дополнительно нужно записывать информацию о том, в каком направлении вращался мотор в момент полного оборота — вперед или назад. Эта система имеет погрешность и точно воспроизвести записанное движение вряд ли получится, насколько хорошо или плохо — не знаю, нужно пробовать. Не очень это простая задача и датчиков Холла у меня в наличии нет, чтобы поэкспериментировать. Вы попробуйте начать, вопросы будут — задавайте, постараюсь помочь. Можете в Skype меня найти: antonoff_andrey — так проще будет и быстрее на вопросы ответить.
Спасибо, обязательно воспользуюсь Вашим предложением...
Доброе время суток, Андрей. Тема была открыта давно, но в поисках своего прочла вашу статью) Я интересуюсь навигацией 4-х колесного робота с помощью установленных энкодеров (тоже 4 штуки). Читала про принцип Аккермана, но никак не пойму, как применить этот принцип, чтобы получить на выходе навигационные параметры. Может Вы сможете подсказать, что почитать, чтобы более менее доступно написано было?
Валентина, здравствуйте! Можете еще почитать статьи Новое шасси для Роботоши и колесные энкодеры DFRobot (описана работа с энкодером) и Описание движения мобильного робота (основы теории колесных платформ). Еще вам понадобятся знания про управление с обратной связью. Могу предложить слайды своей лекции Управление с обратной связью в БПЛА. Там много картинок — это даст общее представление о теме. А, вообще, мой совет — возьмите за основу кинематическию схему: два колеса с моторами + опорный шарик (два колеса = два управляющих сигнала). Математика для платформы с электроприводами на четыре колеса гораздо сложнее (четыре колеса = четыре сигнала управления). То есть фактически, для четырехколесного случая у Вас получится функция четырех переменных.
Андрей, спасибо за дополнительную информацию, уже просматривала ее ранее. Идея четырехколесного робота не моя, поставили перед фактом — надо! а как представить алгоритм обработки полученных сигналов пока не знаю)
Я Вам на почту написал