Skip to content

Multi-Vehicle Симуляція з ROS 2

XRCE-DDS дозволяє підключати декілька клієнтів до одного агента через UDP. Це особливо корисно в симуляції, якщо потрібно запустити лише один агент.

Налаштування та вимоги

Єдині вимоги

Принцип операції

У симуляції кожен екземпляр PX4 отримує унікальний номер px4_instance, починаючи з 0. Це значення використовується для присвоєння унікального значення ключу UXRCE_DDS_KEY:

sh
param set UXRCE_DDS_KEY $((px4_instance+1))

INFO

Таким чином, UXRCE_DDS_KEY завжди збігатиметься з MAV_SYS_ID.

Крім того, коли px4_instance більше нуля, додається унікальний префікс простору імен ROS 2 у вигляді px4_$px4_instance:

sh
uxrce_dds_ns="-n px4_$px4_instance"

INFO

Змінна оточення PX4_UXRCE_DDS_NS, якщо її встановлено, перевизначає поведінку простору імен, описану вище.

Перший екземпляр (px4_instance=0) не має додаткового простору імен, щоб відповідати стандартній поведінці клієнта xrce-dds на реальному транспортному засобі. Цю невідповідність можна виправити вручну за допомогою PX4_UXRCE_DDS_NS у першому випадку або почавши додавання транспортних засобів з індексу 1 замість 0 (це поведінка за замовчуванням, прийнята у sitl_multiple_run.sh для Gazebo Classic).

Типове налаштування клієнта у симуляції:

PX4_UXRCE_DDS_NSpx4_instanceUXRCE_DDS_KEYclient namespace
not provided0px4_instance+1none
provided0px4_instance+1PX4_UXRCE_DDS_NS
not provided>0px4_instance+1px4_${px4_instance}
provided>0px4_instance+1PX4_UXRCE_DDS_NS

Налаштування значення target_system

PX4 приймає повідомлення VehicleCommand тільки якщо їхнє поле target_system дорівнює нулю (широкомовний зв'язок) або збігається з MAV_SYS_ID. У всіх інших ситуаціях повідомлення ігноруються. Тому, коли вузли ROS 2 хочуть надіслати VehicleCommand до PX4, вони повинні переконатися, що повідомлення заповнені відповідним значенням target_system.

Наприклад, якщо ви хочете надіслати команду третьому автомобілю, який має px4_instance=2, вам потрібно встановити target_system=3 у всіх ваших повідомленнях VehicleCommand.