Введение
Доброго всем времени суток!
Осваивая в очередной раз просторы Хабра, заметил, что здесь практически нет информации о Robotic Operating System (далее просто ROS). Поспешу исправить эту оплошность и популяризовать замечательный продукт.
Что же это такое? ROS представляет собой надстройку над ОС, которая позволяет легко и просто разрабатывать системы управления роботами. Что это означает и как с этим потом жить — и призвана рассказать серия топиков.
По сути, ROS — это набор из различных широко (и неочень) известных библиотек, таких как:
- OpenCV — библиотека, содержащая алгоритмы компьютерного зрения и обработки изображений;
- PCL- библиотека для работы с облаками 3D-точек;
- Ogre — объектно-ориентированный графический движок с открытым исходным кодом;
- Orocos — библиотека для управления роботами (например, расчет кинематики).
Также в ROS входят драйвера для различных манипуляторов и сенсоров (включая MS Kinect). Но что же отличает ROS от простой сборки библиотек? Основополагающим преимуществом является клиент-серверная архитектура ROS — разработчики реализовали механизм пересылки сообщений между различными объектами, возможность построения распределенных систем, предоставление brige'ей к языкам С++ и Python.
Чтобы начать пользоваться ROS, придется все же начать с установки. Сам же план работ выглядит примерно так:
- Установка, основные концепции
- Создаем свой пакет, знакомимся с сообщениями, простая программа
- Сервисы и параметры
Развертывание
Сегодня 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
Если перед вами появилась симпатичная черепашка, то значит все нормально. Не закрывайте это окно, оно еще нам пригодится. Чтобы было не так скучно, откройте новый терминал и введите следующее:
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-документация
В свою очередь, пакеты объединяются в стэки. На картинке вы можете увидеть пример такой структуры.
Как видите, 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
В новом окне вы увидете, какие узлы сейчас активны и через какие шины они между собой общаются. Если же вы хотите еще и послушать, чего это они там обсуждают, то вам понадобиться следующая команда:
rostopic echo /turtle1/command_velocity
Подвигайте черепаху и увидете, как в шине /turtle1/command_velocity появляются команды.
Заключение
На этом, пожалуй, на сегодня все. Впереди еще сервисы, параметры, детальные объяснения сообщений и шин, а сейчас же самое время наградить одолевших основы ROS бутылочкой холодного-того-самого. )
Полезные ссылки:
- www.ros.org/wiki — штаб-квартира пользователей и разрабочиков
- answers.ros.org/questions — коллективный разум поможет вам с любыми проблемами (но, все же, не выходящими за пределы ROS)