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

В качестве симулятора мы возьмем пакет Gazebo 3D, а человекоподобный DARwIn-OP, которого мы заставим играть в футбол, будет использован в качестве универсальной робототехнической платформы.

image
DARwIn-OP в симуляторе Gazebo

Для изучения уроков, использования примеров кода, а также написания собственных алгоритмов вам не потребуется приобретение дорогостоящего оборудования или ПО. Все программное обеспечение бесплатно, а отладка и демонстрация алгоритмов будет проводится в симуляторе. Законченный проект будет портирован на реального робота для демонстрации результатов.

Gazebo 3D, разрабатываемый некоммерческой организацией OSRF (Open Source Robotics Foundation), имеет ряд преимуществ по сравнению с другими робототехническими симуляторами. Во-первых, он бесплатный и имеет открытый код. Во-вторых, он очень популярен среди мирового робототехнического сообщества и является официальным симулятором соревнований DARPA. В-третьих, Gazebo отлично интегрируется с программной платформой ROS (Robot Operating System), а значит разработанную вами программу управления виртуальным роботом в Gazebo и ROS будет относительно несложно перенести на реального робота.

image
Робот PR2 в симуляторе Gazebo

В этом уроке мы изучим, как установить последнюю версию Gazebo, подключить ее к программной платформе ROS, загрузить физическую модель робота DARwin и заставить ее ходить. В конце мы настроим простую систему телеуправления движением робота с клавиатуры. Параллельно будем осваивать ифраструктуру ROS.

Установка ROS


Первым и самым трудоемким шагом является установка ROS и Gazebo. Для установки ROS нам понадобится ПК с Linux (например Ubuntu 15.04). Если вы пользователь Windows или Mac OS, то можно воспользоваться виртуальной машиной, например Virtual Box c установкой Linux Ubuntu. Сразу хочется отметить, что мне не удалось настроить нормальную поддержку 3D под виртуальной машиной, Gazebo либо вылетал, либо работал с тормозами. Поэтому в качестве тренировки, можно воспользоваться виртуальной машиной, но для реальной разработки целесообразно все-таки использовать Linux.

ROS можно установить двумя способами. Первый способ относительно простой — это установка уже готовых Debian пакетов. Данный способ подходит в том случае, если у вас установлен Ubuntu Saucy (13.10) или Trusty (14.04), или, например, Debian Wheezy. Второй способ более сложный и запутанный — это установка из исходников. С помощью него можно произвести установку ROS в более свежих версиях Ubuntu или других дистрибутивов Linux.

Пример установки приведенный ниже осуществлялся в Linux Ubuntu 15.04.

Итак, приступим!

Откройте bash terminal через меню программ или нажав комбинацию клавиш ctrl+alt+t. Сначала необходимо установить утилиты для самозагрузки и инициализации ROS. Если вы используете Ubuntu или Debian это можно сделать добавив в репозиторий ссылку на packages.ros.org.

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential

Замечание
То же самое можно сделать с помощью менеджера пакетов pip, но для пользователей Ubuntu первый вариант более предпочтителен.

$ sudo apt-get install python-pip
$ sudo pip install -U rosdep rosinstall_generator wstool rosinstall


Инициализируем rosdep. Rosdep — инструмент командной строки для установки системных зависимостей ROS.

$ sudo rosdep init
$ rosdep update

Теперь приступим к сборке пакетов ROS с помощью утилиты catkin. Catkin — это набор макросов для сборки и управления инфраструктурой ROS.

Создадим каталог для установки ROS и загрузим ключевые пакеты.

$ mkdir ~/workspace/ros -p
$ cd ~/workspace/ros

Команда rosinstall_generator создает список пакетов необходимых для установки ROS, в качестве параметров может быть указана минимальная установка ros_comm, базовая desktop или полная desktop_full. Установка desktop_full включает версию Gazebo 2.0. Эта версия уже устарела, текущей является версия 5.x. Поэтому мы выберем конфигурацию desktop, а Gazebo установим отдельно.

$ rosinstall_generator desktop --rosdistro indigo --deps --wet-only --tar > indigo-desktop-wet.rosinstall

После того как список пакетов для установки сгенерирован в файл indigo-desktop-wet.rosinstall, воспользуемся утилитой wstool для инициализации рабочей области и загрузки пакетов.

$ wstool init src indigo-desktop-wet.rosinstall

Замечание
Если по какой-то причине установка прервалась, возобновить процесс можно следующей командой.

$ wstool update -t src


image
После установки в каталоге src можно найти скачанные пакеты

Теперь переместимся в корневой каталог ros и выполним команду rosdep для установки системных зависимостей для скачанных пакетов.

$ cd ~/workspace/ros
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y

После успешной установки всех зависимостей, наконец можно откомпилировать пакеты с помощью системы автоматизации сборки catkin. Это делается командой catkin_make_isolated или командой catkin_make. Сatkin_make_isolated следует использовать, если часть ваших пакетов использует CMake (другая популярная система автоматизации сборки), а часть catkin, если же все пакеты используют catkin, следует применять catkin_make. Базовый репозиторий имеет смешанный тип, поэтому используем команду catkin_make_isolated.

$ ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release

Для того, чтобы инфраструктура ROS заработала, необходимо настроить переменные окружения и прописать все необходимые пути. Для этого следует выполнить скрипт setup.bash.

$ source ~/workspace/ros/install_isolated/setup.bash

Это команда настроит переменные окружения только для текущей bash консоли. Если Вы хотите добавить переменные окружения ROS в bash по умолчанию, то можно записать команду source в файл .bashrc. Этот файл исполняется при открытии новой bash консоли.

$ echo "source ~/workspace/ros/install_isolated/setup.bash" > ~/.bashrc 

Поздравляю! На этому установка ROS окончена, давайте выполним несколько команд, чтобы проверить правильность работы.

Для того чтобы вывести список доступных команд для управления инфраструктурой ROS, наберите в консоли команду ros и нажмите клавишу Tab два раза. Так как все команды ROS начинаются с префикса ros, bash выдаст их названия как результат автодополнения.

image
Список команд ROS. Все команды начинаются с префикса ros

Давайте что-нибудь запустим, например простое телеуправление. Для начала нам нужен объект которым мы хотим управлять, пускай им будет черепаха из turtlesim. Итак, запускаем сервер turtlesim c помощью команды rosrun. Для этого открываем новую консоль и выполняем команду.

$ rosrun turtlesim turtlesim_node

На экране появится окно с черепашкой. Теперь давайте запустим модуль телеуправления, для этого откройте новую консоль и выполните команду.

$ rosrun turtlesim turtle_teleop_key

А теперь с помощью клавиш курсора попробуйте подвигать черепаху. Например, вот так.

image
Пример телеуправления черепахой

Итак, только что мы построили распределенную систему для телеуправления, где turtlesim и teleop являются независимыми процессами коммуницирующими через связующее программное обеспечение ros_comm. Процессы turtlesim и teleop могут находиться как на одном, так и на различных ПК, объединенных в сеть. Отобразить взаимосвязь этих процессов можно с помощью утилиты rqt_graph.

$ rosrun rqt_graph rqt_graph

image
Утилита rqt_graph служит для отображения топологии распределенной системы управления роботом

В rqt_graph овалами обведены различные процессы (ноды) нашей системы управления, а прямоугольниками типы данных (топики) служащие для передачи информации между процессами. Стрелки показывают направление передачи данных. Таким образом, мы видим, что нод teleop публикует топик cmd_vel, содержащий заданную скорость робота, а turtlesim подписан на данный топик.

Заглянуть в содержимое топика можно с помощью команды rostopic. Параметр list выдаст все активные топики системы, а команда echo выведет на экран содержимое указанного топика. Чтобы отобразить содержимое cmd_vel, не забудьте порулить черепахой из соседней консоли, иначе данные не будут передаваться.

$ rostopic list
$ rostopic echo /turtle1/cmd_vel


image
Содержимое /turtle1/cmd_vel — заданная линейная и угловая скорость черепахи

После успешной установки ROS приступим к установке симулятора Gazebo.

Установка Gazebo


Gazebo мы не будем компилировать из исходников, а просто установим последнюю версию с помощью менеджера пакетов Ubuntu. Для этого мы подключим репозиторий с Gazebo, добавим ключ и произведем установку.

$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-latest.list'
$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install gazebo5 libgazebo-dev

Теперь необходимо настроить конфигурацию rosdep так, чтобы система игнорировала зависимость пакетов от более старой версии Gazebo, являющейся частью ROS Indigo, а использовала бы последнюю версию, которую мы только что установили. Для этого мы перейдем в каталог конфигурационных файлов rosdep, создадим файл local.yaml, в котором укажем игнорировать пакет gazebo. Далее перейдем в каталог sources.list.d и добавим только что созданный скрипт в список 10-local.list. Далее выполним команду update для того, чтобы новая конфигурация вступила в действие.

$ cd /etc/ros/rosdep
$ sudo bash -c 'echo "gazebo: { ubuntu: { vivid: [] } }" >  local.yaml'
$ cd ./sources.list.d
$ sudo bash -c 'echo "yaml file:///etc/ros/rosdep/local.yaml" >  10-local.list'
$ rosdep update

На финальном этапе необходимо установить пакеты связующие симулятор Gazebo с инфраструктурой ROS, а также пакеты с описанием 3D модели и контроллеров робота DARwIn-OP. Для упрощения этого процесса мы подготовили небольшой скрипт, который произведет загрузку всех необходимых зависимостей.

Перейдем в рабочий каталог и загрузим скрипт из нашего репозитория на github.

$ cd ~/workspace
$ git clone https://github.com/robotgeeks/ros_gazebo_darwin.git

Далее заходим в каталог ros_gazebo_darwin, как было описано ранее, инициализируем рабочую область catkin и загружаем пакеты перечисленные в файле indigo-gazebo-darwin.rosinstall.

$ cd ~/workspace/ros_gazebo_darwin
$ wstool init src indigo-gazebo-darwin.rosinstall

Далее производим компиляцию и установку только что скачанных пакетов.

$ catkin_make install 

Теперь добавим переменные окружения и пути для нашей рабочей области. Для этого выполним следующие команды.

$ source ~/workspace/ros_gazebo_darwin/install/setup.bash
$ echo "source ~/workspace/ros_gazebo_darwin/install/setup.bash" > ~/.bashrc 

Отлично! Установка Gazebo и модели DARwIn-OP успешно завершена, давайте поскорее запустим результат.

Работа в симуляторе Gazebo


Наконец, после долгих страданий, пришло время запустить симулятор с моделью робота. Для этого с помощью команды roslaunch выполним скрипт darwin_gazebo.launch.

$ roslaunch darwin_gazebo darwin_gazebo.launch

Результатом выполнения скрипта должен стать запуск окна Gazebo и загрузка 3D модели робота с соответствующими виртуальными контроллерами и сенсорами. Для запуска симуляции необходимо нажать кнопку play, расположенную внизу окна на панели виртуального таймера.

image
Симулятор Gazebo с загруженной моделью робота DARwIn-OP. (Не забудьте нажать на кнопку play, помеченную красным)

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

$ roslaunch darwin_gazebo darwin_walker.launch

Наконец, в третьей консоли запустим программу телеуправления. Ее задача считывать команды с клавиатуры, преобразовать их в заданную скорость и передавать программе управления движением.

$ roslaunch darwin_control darwin_teleop.launch

image
Телеуправление роботом DARwIn-OP в симуляторе Gazebo

Те, кому интересно как выглядит структура нашей системы телеуправления, могут воспользоваться утилитой rqt_graph для графического отображения запущенных ROS процессов и каналов связи.

$ rosrun rqt_graph rqt_graph

Как видите, по сравнению с примером turtlesim, данная система управления гораздо сложнее и имеет больше элементов. Такое количество элементов, обусловлено тем, что модель Darwin-OP имеет 24 виртуальных сервомотора, которыми управляют программы darwin_walker и walker, получая заданную скорость от программы darwin_teleop.

image
Устройство системы управления роботом DARwIn-OP в симуляторе Gazebo

Подведем итог. В данном уроке мы изучили процесс установки и компиляции ROS Indigo из исходного кода. Сделали мы это с образовательной целью, чтобы немного разобраться с устройством системы ROS и ее команд, а также для того, чтобы подключить последнюю версию симулятора Gazebo 3D. Далее мы загрузили модель человекоподобного робота DARwIn-OP, производимого компанией Robotis, и настроили простую систему управления. Благодаря возможностям ROS наша системы способна работать как на одном, так и на нескольких ПК, объединенных в сеть.

В следующем уроке мы продолжим знакомиться с возможностями ROS, попробуем добавить в виртуальный мир робота новые объекты, например, мяч и ворота. Мы напишем собственную программу по распознаванию мяча и управления движением в заданную точку и, конечно, произведем удар по воротам!

До встречи!

Источники:
www.ros.org
www.gazebosim.org
www.generationrobots.com/en/content/83-carry-out-simulations-and-make-your-darwin-op-walk-with-gazebo-and-ros

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


  1. Kenai
    27.05.2015 16:43

    Рассказали бы хотя бы немного подробнее про самого робота. Материал анонсирован как статья про моделирование робота, а про сам объект объект управления практически нет ни слова. Хотелось бы понять чем обусловлен выбор данного робота, что в нем такого универсального, чего нет в роботе PR2, упомянутом в данной статье.


  1. super_skier Автор
    27.05.2015 22:35

    Выбор робота частично обусловлен наличием соответствующего робота и готовой 3D-модели, а также личным интересом к робофутболу (Darwin-OP распространенная в мире платформа для робофутбола). Конечно, курс может быть основан и на другой платформе. В конечном итоге железа для изучения не требуется, а c полученные знания обучающиеся смогут применить на другом роботе, соответствующим, их задачам. Например модель PR2 запускается аналогичным образом.

    Про моделирование для Gazebo можно написать отдельный пост. Модель Darwin находится в каталоге darwin_description, она состоит из urdf файла, описывающего кинематику, динамику и 3D файлов с моделями всех звеньев робота.


  1. Vooon
    28.05.2015 12:50

    Сборка ROS-а из исходников пожалуй лишнее в статье про моделирование.
    Не хочу сказать что оно не нужно, просто если выбрать официально поддерживаемый дистрибутив (Ubuntu 14.04 LTS для Indigo) то не придется ждать 4-8 часов сборки.


    1. super_skier Автор
      28.05.2015 13:17

      Изначально так и планировалось, поставить все на Ubuntu 14.04. Но потом начались проблемы с работой Gazebo 1.9, сначала не грузилась модель, потом не работало 3D в виртуальной машине и т.п. В итоге я решил отказаться от идеи использовать virtual box. Так как на рабочем ПК стоит Ubuntu 15.04, решил попробовать собрать ROS из исходников и прикрепить последнюю версию Gazebo. Сборка версии desktop занимает меньше получаса. Пришлось повозиться с подключением Gazebo 5.x, но когда разберешься все оказывается просто. Поэтому, чтобы труд по установке не пропал, было решено описать все в статье. В следующих публикация будем работать с моделью, что-нибудь запрограммируем, параллельно будем разбираться с утилитами ROS.


      1. Vooon
        28.05.2015 13:46

        Если 15.04, то для вас недавно выпущенный Jade :)
        Не знаю только как на счет пакетов для Дарвина, но собрать в своей WS не должно быть проблемой.

        Насчет сборки, возможно сильно тормозит ноутбучный диск, т.к. для IMX6 с distcc занимало >12 часов.
        Сейчас попроще, есть бинарные пакеты.


        1. super_skier Автор
          28.05.2015 13:52

          Спасибо, видимо совсем недавно. Попробую поставить!