Multi-Vehicle Симуляція з ROS 2
XRCE-DDS дозволяє підключати декілька клієнтів до одного агента через UDP. Це особливо корисно в симуляції, якщо потрібно запустити лише один агент.
Налаштування та вимоги
Єдині вимоги
- Щоб мати змогу запустити симуляцію кількох транспортних засобів без ROS 2 з вибраним симулятором (Gazebo, Gazebo Classic, FlightGear та JMAVSim).
- To be able to use ROS 2 in a single vehicle simulation.
Принцип операції
У симуляції кожен екземпляр 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_NS | px4_instance | UXRCE_DDS_KEY | client namespace |
|---|---|---|---|
| not provided | 0 | px4_instance+1 | none |
| provided | 0 | px4_instance+1 | PX4_UXRCE_DDS_NS |
| not provided | >0 | px4_instance+1 | px4_${px4_instance} |
| provided | >0 | px4_instance+1 | PX4_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.