Автомобиле-подобный робот Lego NXT с удаленным управлением с ПК на базе ROS


В своe время решил освоить замечательную систему ROS, о которой часто упоминают на robocraft. Чтобы освоение было интересным стал делать робота Lego в виде автомобиля, который бы самостоятельно объезжал препятствия и составлял карту местности. Поставленной цели я еще не достиг, но уже есть что показать.
Итак, сейчас построен автомобиле-подобный робот, которым можно управлять из ROS и соответственно анализировать данные с него также посредством ROS.


Общая концепция заключается в следующем:
1. На ПК выполняется ядро ROS и узлы, необходимые для управления движением робота, управления радаром робота, составления карты препятствий и получения видео с камеры смартфона.
2. На смартфоне запускается узел rosjava, который по командам, полученным из соответствующих топиков, формирует команды управления двигателями Lego NXT, а также по сигналам с датчиков NXT формирует сообщения и посылает их в топики ROS. Помимо этого узел формирует сообщения с изображениями с камеры и посылает их в ROS.
3. На Lego NXT используется прошивка LeJOS, которая позволяет удаленно управлять двигателями и получать информацию с датчиков.

Основные узлы:
android/NXTNode — узел написан на rosjava и выполняется на смартфоне. Данный узел через топик /joint_command получает команды для управления двигателями и формирует низкоуровневые команды управления двигателями согласно API прошивки LeJos. Также этот узел циклически считывает показания датчиков Lego NXT и формирует сообщения в топики /joint_state и /ultrasonic_sensor.
/android_gingerbread/ros_camera_preview_view — стандартный узел из пакета android_gingerbread. Выполняется на смартфоне и публикует изображение с камеры смартфона.
nxt_radar_control — узел написан на python и выполняется на ПК. Его задача управлять двигателем дальномера, получать с него данные и формировать сообщения для /cloud_topic.
nxt_steering_control — узел написан на python и выполняется на ПК. Он является просто конвертором сообщений от /pilot/drive в сообщения /joint_command.
encoder_to_odom — узел написан на python и выполняется на ПК. Вычисляет данные одометрии по данным с энкодеров двигателей, которые он берет из топика /joint_state.
/costmap_node — стандартный узел из стека navigation. Предназначен для составление карты препятствий.
/robot_pose_ekf — стандартный узел, реализующий расширенный фильтр Калмана для вычисления одометрии робота.

Взаимосвязь узлов можно увидеть на следующем рисунке (скриншот rxgraph)

Запуск

Все исходные коды разработанных узлов находятся в репозитории http://code.google.com/p/lego-nxt-car-like/. Стандартные пакеты использовались из релиза ROS Electric.
Для запуска управления роботом необходимо:
1. Установить на Lego NXT прошивку LeJos (http://lejos.sourceforge.net/)
2. Загрузить исходные коды пакетов из http://code.google.com/p/lego-nxt-car-like/
3. Установить на смартфон программу android_pubsub.apk из стека nxj_ros_android
4. Выполнить команду в терминале: roslaunch nxt_steering_control nxt_radar_control.launch
5. Запустить на смартфоне android_pubsub.apk, указать адрес ROS и нажать ОК.
6. После этого можно управлять роботом с помощью nxj_teleop

Планы по развитию

1. Использовать датчики смартфона (акселерометр, GPS, компас) для повышения качества одометрии.
2. Использовать визуальную одометрию.
3. Повысить точность радара, используя вместо ультразвукового дальномера инфракрасный.
4. Собственно реализовать автономное управления. Сейчас уже разработан локальный планировщик для автомобиле-подобного робота, который работает на модели в gazebo.


0 комментариев на «“Автомобиле-подобный робот Lego NXT с удаленным управлением с ПК на базе ROS”»

  1. Спасибо всем за поддержку. Есть наработки по локальному планировщику (плагин для узла movebase в ROS) для автомобиле-подобного робота, который работает сейчас на модели в Gazebo, их постараюсь опубликовать. А вот с этим роботом сейчас я на распутье. Дело в том, что из-за того что управление двигателями и чтение сенсоров Lego идет по-сути на андройде через BT, возникают достаточно серьезные ошибки в одометрии и определении препятствии. Я вижу два варианта:
    1. Реализовать программу управления в самом Lego, а с андройдом (или даже напрямую с ПК) эта программа будет обмениваться высокоуровневыми командами. Например, андройд или ПК будет отправлять Lego команду «scan», а в ответ получать сразу «облако точек» с радара.
    2. Заменить блок Lego на вот такую штуку и реализовать все алгоритмы в Androide
    Кто что может посоветовать?

  2. конечно 2! — Заменить блок Lego на вот такую штуку и реализовать все алгоритмы прямо в ней!
    это же ARDUINO!
    более того, можно вместо ADK взять обычную Xduino + bluetooth shield

    еще лучше поменять платформу например вот habrahabr.ru/blogs/DIY/135043/
    там как раз про ADK и грабли =)

    у меня такой же, только на DF Romeo — это Arduino + motorshield + expansion shield — по-моему идеальный вариант

    На сайте DF Robot есть отличный набор «Christmas DIY» там опционально Bluetooth, несколько вариантов датчиков и всякие плюшки. все опции дешевле чем по отдельности.+ в каталоге мноого всего интересного.
    набор стоит от 79$ до 200$? доставка -38$

    В России
    Romeo стоит 1600, платформа 1500, bluetooth 600-900,

    я вот как раз хочу подружить Рому (так зовут моего робота из за платы Romeo =) с ROS, можно продолжить вместе!

    • Спасибо за ссылки. Менять платформу, пока не хочу. Основная причина в том, что у тележек из наборов типа Christmas DIY передние колеса не поворачиваются. Я искал такую, чтобы поворачивались, но в итоге все сводилось к тому, что нужно покупать радиоупр. модель автомобиля и ее адаптировать.
      Еще я не хочу исключать Android из схемы, т.к. это по-сути камера, акселерометр, компас и более мощные вычислительные ресурсы чем у Arduino.
      С Arduino я еще ни разу не работал, поэтому это тоже одна из причин (помимо слабых выч. ресурсов), почему я не хочу переносить туда алгоритмы 🙂
      По поводу интеграции с ROS плат Arduino, я так понимаю для этого используется http://www.ros.org/wiki/rosserial и мне тоже было бы интересно разобраться с этим.

    • интеграция ROS и любой другой платформы можно сделать самостоятельно — ничего супер-сложного в этом нет. rosserial — это просто один из вариантов сериализации данных через последовательное соединение. никто не мешает реализовать свой вариант 😉

    • Android по прежнему — в центре устройства, посмотрите на робота Митю! — habrahabr.ru/blogs/DIY/135043/
      как раз в первую очередь из за камеры, Wi-Fi, акселерометров и тд…
      функционал любой, вплоть до устрановки ROS прямо в телефон.

      Arduino осваивается с нуля за неделю по вечерам. (не зная ни электроники, ни С++) — самый дружелюбный контроллер из всего что я видел.

      у платформы типа «ТАНК» (2WD, 4WD, Rover..) есть свои приемущества — например радиус поворота = 0!

    • По поводу платформы: я специально ориентировался на автомобильную платформу в надежде когда-нибудь в будущем с масштабировать наработки на реальный автомобиль 🙂
      По поводу связки Android-Arduino: из статьи на хабре я понял, что там есть проблемы с развязкой питания, но для меня остался открытым вопрос по скорости их взаимодействия. Кто-нибудь может сказать какая будет примерно задержка получения андройдом показаний с датчиков подключенных к ардуино?

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение