Skip to content

ROS з симуляцією Gazebo Classic

ROS (Робототехнічна операційна система) може бути використана з PX4 та симулятором Gazebo Classic. Вона використовує MAVROS вузол MAVLink для спілкування з PX4.

Інтеграція ROS/Gazebo Classic з PX4 дотримується шаблону на діаграмі нижче (показано загальне середовище симуляції PX4) PX4 спілкується з симулятором (наприклад Gazebo Classic), щоб отримувати дані датчиків із модельованого світу і надсилає значення для двигунів та сервоприводів. Вона спілкується з GCS та зовнішнім API (наприклад ROS) щоб надіслати телеметрію із модельованого середовища та отримати команди.

Огляд PX4 SITL

Єдина незначна різниця від "нормальної поведінки" полягає в тому, що ROS ініціює з'єднання на порту 14557, тоді як для зовнішнього API більш типово - це прослуховувати з'єднання на UDP порту 14540.

Встановлення ROS та Gazebo Classic

ROS підтримується тільки на Linux (не macOS або Windows).

Найпростіший спосіб налаштувати симуляцію PX4 з ROS на Ubuntu Linux це використати стандартний скрипт установки який можна знайти у Середовище розробки на Linux > Gazebo з ROS. Скрипт встановлює все, що вам потрібно: PX4, ROS "Melodic", симулятор Gazebo Classic 9, та MAVROS.

Скрипт дотримується стандартних інструкцій з встановлення ROS "Melodic" , які включають Gazebo 9.

Запуск ROS/симуляції

Нижченаведена команда може бути використана для запуску симуляції та під'єднання ROS до неї через MAVROS, де fcu_url - це IP / порт комп'ютера, що виконує симуляцію:

sh
roslaunch mavros px4.launch fcu_url:="udp://:[email protected]:14557"

Для з'єднання з localhost (локальним комп'ютером), використовуйте цей URL:

sh
roslaunch mavros px4.launch fcu_url:="udp://:[email protected]:14557"

Може бути корисно викликати roslaunch з -w NUM_WORKERS (перевизначити кількість робочих потоків) та/або -v (verbose, або розлогий вивід), щоб отримати попередження про відсутні залежності у вашій установці. Наприклад:

sh
roslaunch -w 2 -v mavros px4.launch fcu_url:="udp://:[email protected]:14557"

Запуск Gazebo Classic за допомогою обгорток ROS

Симуляція Gazebo Classic може бути змінена для інтеграції публікації даних датчиків напряму в рубрики ROS наприклад ROS плагін лазера для Gazebo Classic. Для підтримки цієї функції, Gazebo Classic повинна бути запущена з відповідною обгорткою ROS.

Доступні скрипти запуску ROS для запуску симуляції в обгортці ROS:

Щоб запустити SITL обгорнуту в ROS, необхідно оновити середовище ROS, а потім запустити як завжди:

(необов'язково): виконувати команду source у робочому просторі catkin потрібно тільки якщо ви скомпілювали MAVROS або інші пакети ROS з вихідного коду:

sh
cd <PX4-Autopilot_clone>
DONT_RUN=1 make px4_sitl_default gazebo-classic
source ~/catkin_ws/devel/setup.bash    # (optional)
source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/simulation/gazebo-classic/sitl_gazebo-classic
roslaunch px4 posix_sitl.launch

Включіть один зі згаданих вище файлів запуску у ваш власний файл запуску для запуску застосунку ROS в симуляції.

Що відбувається за лаштунками

Цей розділ показує як інструкції roslaunch надані раніше власне працюють (ви можете дотримуватися їх щоб запустити симуляція та ROS вручну).

Вам потрібно три термінали, у всіх потрібно запустити команду source у ROS середовищі.

Спочатку запустіть симулятор, використовуючи наступну команду:

sh
cd <PX4-Autopilot_clone>
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
roslaunch px4 px4.launch

У консолі буде приблизно це:

sh
INFO  [px4] instance: 0

______  __   __    ___
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] startup script: /bin/sh etc/init.d-posix/rcS 0
INFO  [init] found model autostart file as SYS_AUTOSTART=10016
INFO  [param] selected parameter default file parameters.bson
INFO  [param] importing from 'parameters.bson'
INFO  [parameters] BSON document size 295 bytes, decoded 295 bytes (INT32:12, FLOAT:3)
INFO  [param] selected parameter backup file parameters_backup.bson
INFO  [dataman] data manager file './dataman' size is 7866640 bytes
etc/init.d-posix/rcS: 31: [: Illegal number:
INFO  [init] PX4_SIM_HOSTNAME: localhost
INFO  [simulator_mavlink] Waiting for simulator to accept connection on TCP port 4560

У другому терміналі переконайтесь, що зможете запустити gazebo з файлами світу, визначеними у PX4-Autopilot. Щоб зробити це, встановить змінні середовища, щоб включити відповідні директорії sitl_gazebo-classic.

sh
cd <PX4-Autopilot_clone>
source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/simulation/gazebo-classic/sitl_gazebo-classic

Тепер запустіть з Gazebo Classic так, як ви хотіли б працювати з ROS:

sh
roslaunch gazebo_ros empty_world.launch world_name:=$(pwd)/Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds/empty.world

У третьому терміналі переконайтесь що зможете відтворити модель з sdf файлами, визначеними у PX4-Autopilot. Щоб зробити це, встановить змінні середовища, щоб включити відповідні директорії sitl_gazebo-classic.

sh
cd <PX4-Autopilot_clone>
source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/simulation/gazebo-classic/sitl_gazebo-classic

Тепер додайте модель квадрокоптера Iris так, як ви б хотіли коли працюєте з ROS. Після завантаження Iris автоматично з'єднається із застосунком px4.

sh
rosrun gazebo_ros spawn_model -sdf -file $(pwd)/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris/iris.sdf -model iris -x 0 -y 0 -z 0 -R 0 -P 0 -Y 0