/clever-sitl

Docker image to run Clever (https://github.com/copterexpress/clever) simulation

Primary LanguageShell

Clever-SITL

Набор для создания и запуска Docker-контейнеров с предустановленными ROS-пакетами Клевера и с симулятором на основе Gazebo из прошивки PX4

Описание

Цель создания данного репозитория - упрощение запуска симулятора SITL (software in the loop) из прошивки PX4 с подключением к ROS-пакетам Клевера. При запуске контейнера запускается одна из сред симуляции (jMAVSim или Gazebo), программное обеспечение полётного контроллера PX4 в режиме SITL, а также пакеты Клевера, настроенные для работы с симулятором.

Контейнер основывается на Ubuntu 16.04 как на дистрибутиве, официально совместимом с ROS Kinetic.

В контейнере также находятся интерпретаторы Python 2 и 3, а также компиляторы gcc и g++ версии 5.4.0 (стандарт для Ubuntu 16.04) и все необходимые для сборки PX4 и Клевера пакеты. Кроме того, установлены пакеты ROS Desktop, включающие в себя утилиты визуализации (например, rqt и rviz).

Запуск

Для запуска контейнеров требуется использование свежей версии Docker. Руководство по установке и настройке можно найти в официальной документации. При установке на системы на базе GNU/Linux не забудьте выполнить шаги после установки.

Данный репозиторий предлагает две версии контейнера: с использованием графических возможностей основной системы и с использованием программной отрисовки. Первый вариант доступен только для систем на основе GNU/Linux с видеокартами, поддерживаемыми открытыми драйверами Mesa (точно работает для Intel, возможно - для AMD, точно не работает для NVidia).

Дополнительной экспериментальной возможностью является запуск контейнера с легковесным web-интерфейсом; в этом случае на стороне "сервера" будут производиться только вычисления, связанные с физикой, и программная отрисовка изображений с сенсоров дрона (имеющих, как правило, сравнительно низкое разрешение).

Запуск с web-интерфейсом

Запустите прилагаемый файл run_web_server.sh:

 $ ./run_web_server.sh

или выполните команду

 $ docker run -it --rm \
     -p 14556:14556 \
     -p 14557:14557 \
     -p 8080:8080 \
     -p 8081:8081 \
     -p 8082:8082 \
     -p 9090:9090 \
     -p 35602:35602 \
     -p 2222:22 \
     sfalexrog/clever-sitl:latest

После этого откройте в браузере страницу http://localhost:8081 для запуска web-интерфейса Gazebo, http://localhost:8082 для доступа к web-терминалу Butterfly, http://localhost:8080 для просмотра изображения с камеры коптера.

В web-терминале Вам доступны сервисы ROS, предоставляемые Клевером; также Вы можете подключиться к служебному окну, в котором будут выводиться диагностические сообщения запущенных сервисов.

Запуск с "прямой" отрисовкой

Запустите прилагаемый файл run.sh:

 $ ./run.sh

Данный скрипт позволит подключиться запущенным приложениям к текущему сеансу X11, а также использовать аппаратное ускорение видеокарты.

При запуске с "прямой" отрисовкой запускается симулятор jMAVSim.

Запуск с программной отрисовкой

Запустите прилагаемый файл run_vnc.sh:

 $ ./run_vnc.sh

После этого откройте в браузере страницу встроенного VNC-клиента или подключитесь к сеансу VNC на localhost:5900 с помощью любого VNC-клиента.

При запуске с программной отрисовкой запускается симулятор Gazebo (jMAVSim не хочет запускаться в этом режиме).

Работа с контейнером

В контейнере запускается три окна терминала:

  • Окно с названием PX4 command window содержит сообщения от PX4 и среды симулятора; в этом же окне доступна консоль управления PX4

  • Окно с названием ROS Clever logs содержит сообщения от сервисов Клевера

  • Окно с названием User console позволяет работать с командной оболочкой внутри контейнера (для выполнения различных команд и запуска утилит ROS)

При необходимости можно запустить дополнительные пользовательские консоли, набрав в пользовательской консоли

 $ xterm -e /bin/bash &

Кроме того, в контейнере будет запущено окно визуализации выбранного симулятора.

Примечание: При запуске контейнера с программной отрисовкой окно Gazebo, возможно, будет перекрывать окна терминалов. В этом случае можно воспользоваться панелью задач, расположенной внизу "экрана" VNC-сессии, для выбора нужного окна.

Завершение работы контейнера

Контейнер завершит работу, как только все три начальных окна терминала будут закрыты. Также можно остановить контейнер, нажав Ctrl+C в терминале, в котором был запущен скрипт запуска. Наконец, контейнер можно остановить стандартными средствами Docker.

Внесение изменений

В файле Dockerfile описан процесс установки пакетов ROS и сборки прошивки PX4. Эти команды можно поменять, но делать это следует на свой страх и риск.

Основные этапы, подлежащие изменению, - это установка пакетов Клевера, а также запуск программ при запуске контейнера. Всё это настраивается в скриптах, находящихся в папке scripts данного репозитория:

  • clever_install.sh - скрипт для установки пакетов Клевера и их зависимостей. Запускается при сборке контейнера

  • clever_update.sh - скрипт для применения обновлений к пакетам Клевера. Запускается при запуске контейнера

  • start_gui.sh - скрипт, запускающий окна терминала, описанные выше. Настроен на запуск jMAVSim. Запускается при запуске контейнера с "прямой" отрисовкой

  • start_gui_gazebo.sh - скрипт, запускающий окна терминала. Настроен на запуск Gazebo. Запускается при запуске контейнера с программной отрисовкой

  • start_px4_sitl.sh - скрипт для запуска PX4 и симулятора jMAVSim

  • start_px4_sitl_gazebo.sh - скрипт для запуска PX4 и симулятора Gazebo

  • start_clever.sh - скрипт для запуска ROS и Клевера

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