Turtlebot: сборка и запуск

В предыдущих статьях мы разобрались с управлением 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 две строчки

<param name=”/has_gyro” value=”false” />
<param name=”/robot_type” value=”roomba” />


Посмотреть каким получился итоговый файл можно здесь.

О том как работать с параметрами в 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. Мы ещё не пробовали этот вариант, но как появятся результаты, обязательно отпишемся.

Комментарии (12)

RSS свернуть / развернуть
+
+1
Спасибо, замечательная работа!
avatar

noonv

  • 15 июля 2012, 15:38
+
0
Спасибо! Советую покупать алюминиевые трубки вместо пруткой и подходящие саморезы. Вопрос: я искал самые недорогие Arduino нашел и хочу заказать письмом. Как вы думаете подойдут они для повторения вашего проекта? Достаточно ли 168 меги или надо 328? Цена немного отличается.
avatar

Arduino32

  • 9 августа 2012, 07:36
+
0
Думаю, подойдёт даже ATMega8, так как весь код занимает 4КБ флеш-памяти. Так что мне кажется ок. Мы тестировали это на нашей собственной разводке Ардуино (как раз АТМега168).
Однако Ардуино — это временное решение. По-хорошему, нужно сделать платку, которая будет одновренно и передавать Serial-сигналы с компьютера, и подавать питание на кинект. Что-то вроде этого. Но эта штука стоит у них 50 Евро! Мы думаем сделать такую же только подешевле в ближайшем будущем. Если ты можешь сам сделать, то здесь можно найти все схемы и чертежи. Ещё вот здесь есть хорошая статья об этом.
Кстати, возможно в ближайшем будущем в этой статье будут некоторые изменения. Сейчас боремся с какой-то странной проблемой. Возможно, допишем это сюда.

Ну и ещё ребята из бауманки, вроде, тоже занимаются постройкой ТёртлБота. Можно, если что, думаю, у них что-нибудь подсмотреть или позадавать вопросы.

Ну и, если что-то будет не получаться, пиши.
avatar

mishmash

  • 9 августа 2012, 21:04
+
+1
Сделали несколько важных изменений:
1. Переделали статью под Ubuntu 12.04 и fuerte
2. Исключили Arduino из нашей схемы. Лучше делать напрямую через ftdi. Это помогает избежать множества проблем.
avatar

mishmash

  • 1 сентября 2012, 13:15
+
0
Вопрос. Вы применяли интегральный линейный стабилизатор L7812, у которого потери Dropout Voltage = 2...2.5V соответственно это все идет в нагрев радиатора на стабилизаторе, не жалко батарейку? Ни лучше ли использовать импульсный стабилизатор например как здесь www.chipdip.ru/video/id000307709/ Я далеко не эксперт в электронике, поэтому хотел бы услышать ответ компетентных участников.
avatar

Anton_Astrakhan

  • 21 июля 2013, 19:55
+
0
Потребление стабилизатора L7812 составит порядка 4,5 мА, а это не существенная цифра, применительно к данному случаю.
avatar

Qan2m

  • 23 июля 2013, 17:17
+
0
У меня есть LM2940T, вроде как Low Dropout, подскажи, если поставлю его, то КПД использования батареи поднимется? Воте го параметры lib.chipdip.ru/142/DOC000142741.pdf
avatar

Anton_Astrakhan

  • 23 июля 2013, 17:26
+
0
КПД батареи не повысится, ибо это внутренний её параметр. Более того потребление LM2940T в два раза выше, чем L7812. Оно будет около 10 мА.
avatar

Qan2m

  • 24 июля 2013, 09:44
+
0
L7812 пока не достал, собрал на LM2940T, при работе от него вывод под радиатор нагревается градусов до 60-70. это не нравится мне. Чувствуется что расход энергии батареи не совсем целевой. Скажите у вас на L7812 какой нагрев вывода под радиатор?
avatar

Anton_Astrakhan

  • 24 июля 2013, 09:51
+
0
Такой нагрев без подключенной нагрузки? Это странно, быть может стоит перепроверить правильность подключения?
avatar

Qan2m

  • 24 июля 2013, 13:34
+
0
Нет. это при подключенной нагрузке естественно, по замерам Kinect при работе у меня потребляет около 270mА. Когда нагрузка падает, и Kinect находится в «ждущем» режиме, вывод под радиатор еле теплый.
avatar

Anton_Astrakhan

  • 24 июля 2013, 13:38

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.