Основы работы с Robotic Operating System

Введение


    Доброго всем времени суток!
    Осваивая в очередной раз просторы Хабра, заметил, что здесь практически нет информации о Robotic Operating System (далее просто ROS). Поспешу исправить эту оплошность и популяризовать замечательный продукт.
image
    Что же это такое? ROS представляет собой надстройку над ОС, которая позволяет легко и просто разрабатывать системы управления роботами. Что это означает и как с этим потом жить — и призвана рассказать серия топиков.
    По сути, ROS — это набор из различных широко (и неочень) известных библиотек, таких как:
  • OpenCV — библиотека, содержащая алгоритмы компьютерного зрения и обработки изображений;
  • PCL- библиотека для работы с облаками 3D-точек;
  • Ogre — объектно-ориентированный графический движок с открытым исходным кодом;
  • Orocos — библиотека для управления роботами (например, расчет кинематики).

    Также в ROS входят драйвера для различных манипуляторов и сенсоров (включая MS Kinect). Но что же отличает ROS от простой сборки библиотек? Основополагающим преимуществом является клиент-серверная архитектура ROS — разработчики реализовали механизм пересылки сообщений между различными объектами, возможность построения распределенных систем, предоставление brige'ей к языкам С++ и Python.
    Чтобы начать пользоваться ROS, придется все же начать с установки. Сам же план работ выглядит примерно так:
  1. Установка, основные концепции
  2. Создаем свой пакет, знакомимся с сообщениями, простая программа
  3. Сервисы и параметры

Развертывание


    Сегодня ROS стабильно устанавливается и работает только на Ubuntu версии от 10 и выше, на примере Natty все тонкости этого процесса и рассмотрим.
    Итак, шаг первый — настройка репозиториев. Нам нужно разблокировать «restricted,» «universe,» and «multiverse» компоненты, для этого в файле /etc/apt/sources.list необходимо раскомментировать следующие строчки:
deb-src http://security.ubuntu.com/ubuntu natty-security main restricted
deb http://security.ubuntu.com/ubuntu natty-security universe
deb-src http://security.ubuntu.com/ubuntu natty-security universe
deb http://security.ubuntu.com/ubuntu natty-security multiverse
deb-src http://security.ubuntu.com/ubuntu natty-security multiverse

    Затем надо добавить репозиторий для установки и обновлений:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu natty main" > /etc/apt/sources.list.d/ros-latest.list'

    Следующий этап — установка цифровой подписи. Здесь все тоже достаточно тривиально:
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

    После этого обновимся:
sudo apt-get update

    и попробуем установить сам метапакет ROS. Существует 4 установочных пакета, различающихся объемом предоставляемых модулей. Я воспользуюсь наиболее полным:
sudo apt-get install ros-electric-desktop-full

    После того, как процесс скачивания и развертывания всяких штуковин закончиться, в директории /opt вы должны увидеть папку ros.
    Последний шаг — обновление переменных окружения:
source /opt/ros/electric/setup.bash

    С этого момента ROS к бою работе готов. Чтобы убедиться в успешности установки, откройте два терминала, в одном напишите:
roscore

    Это запустит master-процесс, с которого ROS, собственно, и начинает работу.
    В другом напишите
rosrun turtlesim turtlesim_node

    И не забудьте сначала в каждом терминале проиниализировать переменные окружения!
source /opt/ros/electric/setup.bash

image    Если перед вами появилась симпатичная черепашка, то значит все нормально. Не закрывайте это окно, оно еще нам пригодится. Чтобы было не так скучно, откройте новый терминал и введите следующее:
rosrun turtlesim turtle_teleop_key

Из этого терминала теперь можно поуправлять рептилией.
    Процесс установки на других ОС не намного сложнее, но, к сожалению, гораздо менее стабильный (на Fedora 15, например, мне завести так и не удалось). Можно только порекомендовать писать баг-репорты, публиковать патчи и будем всем счастье.

Основные понятия


    Начнем с рассмотрения базовых концепций файловой системы (ФС) ROS.
    Пакетом (package) называется наименьшая единица ФС. Представляет собой директорию, содержащую в себе какие-либо данные, библиотеки, исполняемые и конфигурационные файлы и т.д. и т.п., логически объединенные в какой-то полезный модуль. Цель такого структурирования совершенно прозрачна — повышение юзабилити и возможности повторного использования.
    Структура пакета выглядит следующим образом:
  • bin/: скомпилированные бинарники
  • include/package_name: заголовочные файлы для C++ (обязательно должны описываться в manifest.xml!)
  • msg/: типы сообщений
  • src/package_name/: исходный код на С++ и скрипты на Python'е, экспортируемые в другие пакеты
  • srv/: типы сервисов, предоставляемых пакетом
  • scripts/: скрипты на Python'е
  • CMakeLists.txt: CMake файл для сборки пакета
  • manifest.xml: манифест пакета
  • mainpage.dox: Doxygen-документация

    В свою очередь, пакеты объединяются в стэки. На картинке вы можете увидеть пример такой структуры.
image
    Как видите, ROS обладает довольно сложной файловой системой и для того, чтобы не забивать себе голову длиннющими путями к различным директориям, пользователям предоставляют ряд утилит.
rospack find [pack_name] — выдает полный путь до директории с пакетом
crady@cradyLap:~$ rospack find rviz
/opt/ros/electric/stacks/visualization/rviz


rosstack find [pack_name] — тоже самое, но уже для стэка
crady@cradyLap:~$ rosstack find navigation
/opt/ros/electric/stacks/navigation

    Это, так сказать, статика. Динамика в ROS описывается узлами(node) и шинами(topic).
Узел — это запущенный процесс, который умеет общаться с другими процессами.
Шина — именованный канал, соединяющая различные узлы.
    Узлы и шины формируют асинхронный механизм обмена данными. Если у вас еще открыто окно с черепашкой, то вы это сейчас сможете еще и увидеть. Если закрыто — то где-то выше написано, как все вернуть на место.
    Откройте третий терминал и введите команду
rxgraph

image
    В новом окне вы увидете, какие узлы сейчас активны и через какие шины они между собой общаются. Если же вы хотите еще и послушать, чего это они там обсуждают, то вам понадобиться следующая команда:
rostopic echo /turtle1/command_velocity

    Подвигайте черепаху и увидете, как в шине /turtle1/command_velocity появляются команды.
image

image

Заключение


    На этом, пожалуй, на сегодня все. Впереди еще сервисы, параметры, детальные объяснения сообщений и шин, а сейчас же самое время наградить одолевших основы ROS бутылочкой холодного-того-самого. )



    Полезные ссылки:
  1. www.ros.org/wiki — штаб-квартира пользователей и разрабочиков
  2. answers.ros.org/questions — коллективный разум поможет вам с любыми проблемами (но, все же, не выходящими за пределы ROS)
Поделиться публикацией

Комментарии 19

    +1
    На ролике робот как-то жёстко с дверью холодильника обращается.
      +4
      У него похмелье…
        0
        Да и пиво вроде трясет в процессе
          0
          Так это уже двадцать четвертый дубль.
        +1
        Маленький еще, не научили приличному поведению. )
          +4
          Если не секрет, использовали ли Вы ROS в каком-либо объемном проекте?

          В описании на ros.org пафосно сказано, что их комьюнити опубликовало over 9000 ROS-пакетов, но при ближайшем рассмотрении выясняется, что из них значительная часть либо никак не документирована, либо банально не дописана (я даже примеров приводить не буду, ткните сами в первый попавшийся пакет) — а ведь система разрабатывается с целью создания reusable кода для робототехники.
          У них даже есть такой девелоперский изыск, как Documentation Contest.

          Интересно мнение пользователей, реально работавших с этим фреймворком (и автора поста): с одной стороны, здесь есть реализованные типовые решения (например, мне нужна работа с облаками точек, захватываемыми с бинокулярных камер); с другой стороны — не хочется привносить в свой проект систему, которая отчасти реализована не очень аккуратно (см. пункт о пакетах).
            0
            Увы, но на мой взгляд, документация в робототехнике это вообще колоссальная проблема. Эта наука требует огромного объема знаний, и, часто, разработчику после реализации чего-либо уже не хватает сил (ну «выгорают» люди, это почти нормально) на описание своего шедевра. И кто это исправит, если не мы?) По функции с носа — туториал новичкам.
            Далее, ROS, по большому счету, это НЕ фреймворк. Если вам нужна низкоуровневая обработка чего-либо — это все же сборник идейно-связанных либ (в моем представлении Ваша задача аккурат сюда вписывается). Но если вам нужны уже композиция этих самых библиотек — ROS превращается в тыкву фреймворк.
            Конкретно по облакам точек — возьмите отдельно PCL и драйвера OpenNI, и никакого ROS вам не понадобиться. Да, документация с неба не свалиться, но зато без кучи лишних пакетов.
            На данный момент ни в каких крупных проектах не замечен, но активно это пытаюсь исправить.
              0
              OpenNI Вам даже не понадобиться скорее всего, это я по привычке воткнул то, что потрошу уже не первый день.)
                0
                Я работал с PCL и OpenNI, но ROS предоставляет уже законченный пакет для распознавания объектов на текстурированном облаке точек (собственно, то, что мне нужно).
                Конечно, можно взять PCL с Triclops SDK, и сделать бинокулярное зрение руками — но помимо этого мне так же нужны средства организации computational graph (можете подсказать фреймворк?).
                  0
                  Ммм… Вряд ли, могу только порекомендовать посмотреть в сторону CGAL, но не уверен, что пригодиться.
                    0
                    Не пригодится. :)
                    Я имел в виду фреймворк для организации распределённого вычислительного процесса.
                    ROS предоставляет для этого Сервисы и Топики (ну сами же писали).
                      0
                      А, в этом плане, немного не в том направлении подумал. ) Нет, на моей памяти ничего приличнее ROS я не встречал. Можно поставить ROS-barebone версию пакета, поидее там никакх сторонних библиотек нет вообще, потом ручками доставить нужное.
                  0
                  > На данный момент ни в каких крупных проектах не замечен, но активно это пытаюсь исправить.
                  Я только что заметил Вас в списке рассылки PCL. :)
                    0
                    Не палите меня.)
                +1
                С учетом того что видео было в ускорении в 16-ть раз, то пока дождешься от такого робота пива — уже стухнешь, и сбегаешь в ларек за водкой)
                  0
                  на робокрафте были переводы уроков про ROS
                    +1
                    Не только были, но и есть. Но, во-первых, они там по несколько устаревшей версии ROS, во-вторых, лично на мой взгляд, здесь нечто подобное лишним тоже не будет, а кросс-пост запрещен. Но все это ничуть не умаляет достоинств этих самых переводов.
                      0
                      Да и в планах все-таки перейти от простых «хэллоу ворлдов» к более интересным и практически полезным вещам. Сделать это без базовых знаний нереально.
                    0
                    Надо на работу заказать парочку таких. За пивом отправлять в магазин. И научить от продавщиц отбиваться.

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

                    Самое читаемое