В предыдущих статьях мы разобрались с управлением roomba через Arduino, при помощи python (или любых других языков, способных работать с последовательным портом) , а также через ROS. Пришло время сделать собственного Turtlebot’а.
Для постройки Turtlebot’а. потребуются следующие комплектующие:
- Asus EeePC 1215N (мы использовали acer aspire one D255E)
- iRobot roomba (можно использовать irobot create. но в России его купить сложно, поэтому дальше речь всегда будет идти о румбе)
- Microsoft Kinect
- Детали для сборки конструкции
- Плата питания кинекта
- USB — UART преобразователь, например вот такой
В принципе, все комлектующие можно купить в http://turtlebot.eu, но т.к. у нас уже был Microsoft Kinect и Roomba, то решили сделать все самостоятельно.
Плата питания:
Одна из задач — взять питание для Kinect от батареи Roomba. Для питания Кинекта необходимо стабилизированное напряжение 12 В. Соберите на макетной плате стабилизатор напряжения. Для этого вам понадобится микросхема L7812 и необходимая к ней обвязка: два керамических конденсатора по 100 нФ и электролитические конденсаторы 47 и 100 мкФ. Если вы, как и мы, не найдете в магазине 9-контактного разъема Кинекта — перекусите провод, тянущийся к блоку питания. Белый провод — + 12 Вольт, коричневый — GND. Удобно припаять в разрыв белого провода микровыключатель, чтоб не выдергивать миниDIN из гнезда.
Общая схема питания выглядит вот так:
Детали конструкции:
На turtlebot.com можно скачать полную документацию проекта, в которой есть как инструкция по сборке Turtlebot’а, так и чертежи всех требующихся деталей конструкции. По чертежам мы нарезали на лазерном станке плоские детали, купили в магазине стройматериалов алюминиевые прутки, на токарном станке их отторцевали, просверлили в торцах отверстия, нарезали резьбу и вкрутили шпильки для крепления.
Затем согласно туториалу по сборке собираем робота, особых проблем на этой стадии не возникло. Единственное — Кинект крепится саморезами. Мы просто нарезали в отверстиях кинекта резьбу М3.
Итак, железки собраны и перед нами стоит полноценный Turtlebot, такой же, как на картинках. Пришло время заняться софтом. Для этого открываем туториал на ros.org. У нас был нетбук с установленной Ubuntu 12.04. Согласно туториалу ставим пакет ros-fuerte-turtlebot-robot(можно также сразу установить ros-fuerte-desktop-full, чтобы потом не устанавливать отдельно каждый внезапно потребовавшийся пакет)
$ sudp apt-get install ros-fuerte-desktop-full
настраиваем среду, устанавливаем chrony (она понадобится для синхронизации нетбука и рабочей станции)
По умолчанию программное обеспечение настроено на работу с Create, поэтому необходимо поменять некоторые параметры: в нашем случае мы поменяли два параметра
- /has_gyro с true на false, указав, таким образом на отсутствие гироскопа.
- /robot_type с create на roomba
Для этого в пакете turtlebot_bringup нужно открыть файл minimal.launch
$ roscd turtlebot_bringup
$ sudo gedit minimal.launch
И добавляем для нода turtlebot_node две строчки
Посмотреть каким получился итоговый файл можно здесь.
О том как работать с параметрами в ROS можно подробней прочитать вот здесь http://www.ros.org/wiki/Parameter%20Server
В нашем случае порт совпадал с установленным по умолчанию /dev/ttyUSB0, но если ваш порт отличается, то поменяйте его через параметры таким же образом.
Ещё один параметр, который может потребовать изменения — это скорость на которой румба общается с компьютером. Наша румба настроена на baudrate 19200, а по умолчанию в програмнном обеспечении тёртлбота установлено значение 115200. Почему-то строчка в turtlebot_node, позволяющая изменить этот параметр через Parameter Server закомментирована. Поэтому можно либо расскоментировать её и дописать соответсвующую строку в minimal.launch, либо заходим в пакет turtlebot_node и находим файл robot_types.py в папке src
roscd turtlebot_node
cd src/turtlebot_node
sudo gedit robot_types.py
и в последней строчке меняем значение скорости для румбы с 115200 на 19200. Вот так выглядим итоговый код файла
На рабочую станцию (компьютер, с которого будем управлять Turtlebot’ом) ставим пакет ros-fuerte-turtlebot-apps.
$ sudo apt-get install ros-fuerte-turtlebot-apps
В нашем случае на рабочей станции также была установлена ubuntu 12.04. Затем не забываем установить chrony.
Для того, чтобы система работала, нам необходимо правильно настроить сетевые параметры между Turtlebot’ом и рабочей станцией. В нашем случае компьютеры через роутер объединены в wi-fi сеть. Узнаем при помощи ifconfig ip-адрес каждого и пробуем пинговать с каждого компьютера другой. чтобы убедиться. что компьютеры друг друга видят. Затем, согласно http://ros.org/wiki/Robots/TurtleBot/Network%20Setup присваиваем соответствующие значения параметрам ROS_MASTER_URI и ROS_HOSTNAME. Обратие внимание . что на рабочей станции ROS_MASTER_URI должна содержать ip-адрес нетбука. После этого шага, крышку нетбука можно опустить и установить нетбук на соответствующую пластину на роботе.
После того, как сеть настроена, переходим на следующий шаг туториала — TurtleBot Bringup.
Заходим через ssh с рабочей станции на Turtlebot. Я решил не работать пока с сервисом, поэтому остановил его командой
$ sudo service turtlebot stop
и затем запустим launch-файл, запускающий Turtlebot’а
$ roslaunch turtlebot_bringup minimal.launch
Теперь в соседнем терминале на рабочей станции запускаем панель управления
$ rosrun turtlebot_dashboard turtlebot_dashboard&
Если всё удачно, то видим вот такую панель
Панель позволяет следить за параметрами робота — такими как заряд батареи, режим, в котором сейчас функционирует робот (также режимы можно переключать), логи системы.
Если после запуска кнопки остаются серыми, то, скорей всего, глюк в настройке сети — проверьте это. Советую посмотреть видео в туториале, на котором Мелони Вайс подробно рассказывает о том, как работать с панелью.
Немного о правилах работы с Turtlebot:
Запомните, что заряжать пылесос можно только когда turtlebot переключен в режим passive.
Также следите за тем, чтобы после выключения робота, у вас была разомкнута цепь, питающая Arduino и Kinect — чтобы не разрядить полностью батарею. Полный разряд для батареи вреден.
Телеуправление:
Для того, чтобы поуправлять Turtlebot’ом при помощи клавиатуры рабочей станции, просто снова войдите в него через ssh в соседнем терминале и запустиите
roslaunch turtlebot_teleop keyboard_teleop.launch
Следуйте инструкциям, нажимая на соответствующие клавиши, и вы увидите, как ваш Turtlebot начнёт двигаться.
Ваш Turtlebot готов. Сейчас вы можете поэкспериментировать с другими приложениями.
Ниже видео, на котором видно, как работает turtlebot_follower — приложение, которое позволяет роботу двигаться за любыми вещами, которые находятся перед ним.
Если у вас при запуске возникнут какие-то вопросы, то пишите — будем разбираться вместе 🙂
UPD
Недавно появилась идея, что можно использовать Xtion Pro вместо kinect. Он питается только через USB, поэтому отпадает необходимость в плате распределения питания. Можно обойтись лишь обычной ftdi. Мы ещё не пробовали этот вариант, но как появятся результаты, обязательно отпишемся.
0 комментариев на «“Turtlebot: сборка и запуск”»
Спасибо, замечательная работа!
Спасибо! Советую покупать алюминиевые трубки вместо пруткой и подходящие саморезы. Вопрос: я искал самые недорогие Arduino нашел и хочу заказать письмом. Как вы думаете подойдут они для повторения вашего проекта? Достаточно ли 168 меги или надо 328? Цена немного отличается.
Думаю, подойдёт даже ATMega8, так как весь код занимает 4КБ флеш-памяти. Так что мне кажется ок. Мы тестировали это на нашей собственной разводке Ардуино (как раз АТМега168).этого . Но эта штука стоит у них 50 Евро! Мы думаем сделать такую же только подешевле в ближайшем будущем. Если ты можешь сам сделать, то здесь можно найти все схемы и чертежи. Ещё вот здесь есть хорошая статья об этом.
Однако Ардуино — это временное решение. По-хорошему, нужно сделать платку, которая будет одновренно и передавать Serial-сигналы с компьютера, и подавать питание на кинект. Что-то вроде
Кстати, возможно в ближайшем будущем в этой статье будут некоторые изменения. Сейчас боремся с какой-то странной проблемой. Возможно, допишем это сюда.
Ну и ещёребята из бауманки , вроде, тоже занимаются постройкой ТёртлБота. Можно, если что, думаю, у них что-нибудь подсмотреть или позадавать вопросы.
Ну и, если что-то будет не получаться, пиши.
Сделали несколько важных изменений:
1. Переделали статью под Ubuntu 12.04 и fuerte
2. Исключили Arduino из нашей схемы. Лучше делать напрямую через ftdi. Это помогает избежать множества проблем.
Вопрос. Вы применяли интегральный линейный стабилизатор L7812, у которого потери Dropout Voltage = 2…2.5V соответственно это все идет в нагрев радиатора на стабилизаторе, не жалко батарейку? Ни лучше ли использовать импульсный стабилизатор например как здесьhttp://www.chipdip.ru/video/id000307709/ Я далеко не эксперт в электронике, поэтому хотел бы услышать ответ компетентных участников.
Потребление стабилизатора L7812 составит порядка 4,5 мА, а это не существенная цифра, применительно к данному случаю.
У меня есть LM2940T, вроде как Low Dropout, подскажи, если поставлю его, то КПД использования батареи поднимется? Воте го параметрыlib.chipdip.ru/142/DOC000142741.pdf
КПД батареи не повысится, ибо это внутренний её параметр. Более того потребление LM2940T в два раза выше, чем L7812. Оно будет около 10 мА.
L7812 пока не достал, собрал на LM2940T, при работе от него вывод под радиатор нагревается градусов до 60-70. это не нравится мне. Чувствуется что расход энергии батареи не совсем целевой. Скажите у вас на L7812 какой нагрев вывода под радиатор?
Такой нагрев без подключенной нагрузки? Это странно, быть может стоит перепроверить правильность подключения?
Нет. это при подключенной нагрузке естественно, по замерам Kinect при работе у меня потребляет около 270mА. Когда нагрузка падает, и Kinect находится в «ждущем» режиме, вывод под радиатор еле теплый.