Pull to refresh

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

Reading time5 min
Views63K

Введение


    Доброго всем времени суток!
    Осваивая в очередной раз просторы Хабра, заметил, что здесь практически нет информации о 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)
Tags:
Hubs:
Total votes 36: ↑34 and ↓2+32
Comments20

Articles