В качестве симулятора мы возьмем пакет Gazebo 3D, а человекоподобный DARwIn-OP, которого мы заставим играть в футбол, будет использован в качестве универсальной робототехнической платформы.
DARwIn-OP в симуляторе Gazebo
Для изучения уроков, использования примеров кода, а также написания собственных алгоритмов вам не потребуется приобретение дорогостоящего оборудования или ПО. Все программное обеспечение бесплатно, а отладка и демонстрация алгоритмов будет проводится в симуляторе. Законченный проект будет портирован на реального робота для демонстрации результатов.
Gazebo 3D, разрабатываемый некоммерческой организацией OSRF (Open Source Robotics Foundation), имеет ряд преимуществ по сравнению с другими робототехническими симуляторами. Во-первых, он бесплатный и имеет открытый код. Во-вторых, он очень популярен среди мирового робототехнического сообщества и является официальным симулятором соревнований DARPA. В-третьих, Gazebo отлично интегрируется с программной платформой ROS (Robot Operating System), а значит разработанную вами программу управления виртуальным роботом в Gazebo и ROS будет относительно несложно перенести на реального робота.
Робот 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
$ 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
После установки в каталоге 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 выдаст их названия как результат автодополнения.
Список команд ROS. Все команды начинаются с префикса ros
Давайте что-нибудь запустим, например простое телеуправление. Для начала нам нужен объект которым мы хотим управлять, пускай им будет черепаха из turtlesim. Итак, запускаем сервер turtlesim c помощью команды rosrun. Для этого открываем новую консоль и выполняем команду.
$ rosrun turtlesim turtlesim_node
На экране появится окно с черепашкой. Теперь давайте запустим модуль телеуправления, для этого откройте новую консоль и выполните команду.
$ rosrun turtlesim turtle_teleop_key
А теперь с помощью клавиш курсора попробуйте подвигать черепаху. Например, вот так.
Пример телеуправления черепахой
Итак, только что мы построили распределенную систему для телеуправления, где turtlesim и teleop являются независимыми процессами коммуницирующими через связующее программное обеспечение ros_comm. Процессы turtlesim и teleop могут находиться как на одном, так и на различных ПК, объединенных в сеть. Отобразить взаимосвязь этих процессов можно с помощью утилиты rqt_graph.
$ rosrun rqt_graph rqt_graph
Утилита rqt_graph служит для отображения топологии распределенной системы управления роботом
В rqt_graph овалами обведены различные процессы (ноды) нашей системы управления, а прямоугольниками типы данных (топики) служащие для передачи информации между процессами. Стрелки показывают направление передачи данных. Таким образом, мы видим, что нод teleop публикует топик cmd_vel, содержащий заданную скорость робота, а turtlesim подписан на данный топик.
Заглянуть в содержимое топика можно с помощью команды rostopic. Параметр list выдаст все активные топики системы, а команда echo выведет на экран содержимое указанного топика. Чтобы отобразить содержимое cmd_vel, не забудьте порулить черепахой из соседней консоли, иначе данные не будут передаваться.
$ rostopic list
$ rostopic echo /turtle1/cmd_vel
Содержимое /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, расположенную внизу окна на панели виртуального таймера.
Симулятор Gazebo с загруженной моделью робота DARwIn-OP. (Не забудьте нажать на кнопку play, помеченную красным)
Теперь откроем новую консоль и запустим программу управления движением робота. Она преобразует команды скорости из декартовых координат в движение сервомоторов, расположенных в ногах, торсе и руках робота.
$ roslaunch darwin_gazebo darwin_walker.launch
Наконец, в третьей консоли запустим программу телеуправления. Ее задача считывать команды с клавиатуры, преобразовать их в заданную скорость и передавать программе управления движением.
$ roslaunch darwin_control darwin_teleop.launch
Телеуправление роботом DARwIn-OP в симуляторе Gazebo
Те, кому интересно как выглядит структура нашей системы телеуправления, могут воспользоваться утилитой rqt_graph для графического отображения запущенных ROS процессов и каналов связи.
$ rosrun rqt_graph rqt_graph
Как видите, по сравнению с примером turtlesim, данная система управления гораздо сложнее и имеет больше элементов. Такое количество элементов, обусловлено тем, что модель Darwin-OP имеет 24 виртуальных сервомотора, которыми управляют программы darwin_walker и walker, получая заданную скорость от программы darwin_teleop.
Устройство системы управления роботом 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)
super_skier Автор
27.05.2015 22:35Выбор робота частично обусловлен наличием соответствующего робота и готовой 3D-модели, а также личным интересом к робофутболу (Darwin-OP распространенная в мире платформа для робофутбола). Конечно, курс может быть основан и на другой платформе. В конечном итоге железа для изучения не требуется, а c полученные знания обучающиеся смогут применить на другом роботе, соответствующим, их задачам. Например модель PR2 запускается аналогичным образом.
Про моделирование для Gazebo можно написать отдельный пост. Модель Darwin находится в каталоге darwin_description, она состоит из urdf файла, описывающего кинематику, динамику и 3D файлов с моделями всех звеньев робота.
Vooon
28.05.2015 12:50Сборка ROS-а из исходников пожалуй лишнее в статье про моделирование.
Не хочу сказать что оно не нужно, просто если выбрать официально поддерживаемый дистрибутив (Ubuntu 14.04 LTS для Indigo) то не придется ждать 4-8 часов сборки.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.
Vooon
28.05.2015 13:46Если 15.04, то для вас недавно выпущенный Jade :)
Не знаю только как на счет пакетов для Дарвина, но собрать в своей WS не должно быть проблемой.
Насчет сборки, возможно сильно тормозит ноутбучный диск, т.к. для IMX6 с distcc занимало >12 часов.
Сейчас попроще, есть бинарные пакеты.
Kenai
Рассказали бы хотя бы немного подробнее про самого робота. Материал анонсирован как статья про моделирование робота, а про сам объект объект управления практически нет ни слова. Хотелось бы понять чем обусловлен выбор данного робота, что в нем такого универсального, чего нет в роботе PR2, упомянутом в данной статье.