Воспроизведение ROS2 LiDAR данных с RTI Recording Service и DDS
Реально-мировое тестирование незаменимо для распределенных и автономных систем, но может быть запретительно дорогим. Захватывая и воспроизводя сенсорные данные, команды могут генерировать длительную ценность из каждой тестовой сессии.
Представьте полуавтономный автомобиль, оснащенный GPS, камерами, LiDAR, RADAR, инерциальными сенсорами и полным набором сигналов управления. Объем данных, генерируемых за один заезд, поразителен, и стоимость повторных дорожных испытаний высока. Запись этих данных для последующего воспроизведения — по сути создание цифровой библиотеки тестовых сессий — драматически улучшило бы повторяемость и гибкость тестирования.
Годами пользователи DDS имели доступ к высокопропускной записи и воспроизведению через RTI Recording Service. Он поддерживает непрерывный, 24/7 захват всех системных данных во время расширенных развертываний, таких как морские испытания морских судов. Благодаря распределенной архитектуре DDS, множество экземпляров Recording Service могут быть запущены для поспевания за массовыми потоками данных.
ROS2, который полагается на DDS для межпроцессной коммуникации, может использовать тот же полевой-проверенный Recording Service для захвата высокопропускных ROS2 топиков вроде LiDAR точечных облаков. В следующем примере мы настроим умеренной-пропускной топик (ROS2 LiDAR данные) и воспроизведем его обратно в ROS2, используя только DDS-инструменты.
Конфигурация рекордера
RTI Recording Service управляется XML-конфигурационным файлом, специфицирующим, какие топики записывать, желаемые QoS-настройки и опции хранения. В этой настройке мы инструктируем рекордер относиться к ROS2 PointCloud2 типу данных как к одной колонке, избегая дорогой десериализации для этого большого типа данных.
Ниже XML-файл, который мы используем, названный ros2_record.xml:
<dds xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://community.rti.com/schema/5.3.1/rti_record.xsd"> <recorder name="simple_example"> <!-- Enable remote access to RTI Recorder. The Recorder creates one DataReader and one DataWriter in the specified domain. --> <remote_access> <enabled>true</enabled> <remote_access_domain>0</remote_access_domain> </remote_access> <!-- Base name for the set of files that will store recorded data --> <recorder_database> <database_name>ros2_replay_example.dat</database_name> <overwrite>true</overwrite> </recorder_database> <!-- Record data from one domain --> <domain name="domain0"> <domain_id>0</domain_id> <!-- Turn off deserialization for ROS2 ‘PointCloud2’ data type (over 5k elements) --> <deserialize_mode>RTIDDS_DESERIALIZEMODE_NEVER</deserialize_mode> </domain> <!-- Create a TopicGroup that only records rt/velodyne_points topics --> <topic_group name="ros-rt"> <topics><topic_expr>rt/velodyne_points</topic_expr></topics> <field_expr>*</field_expr> </topic_group> <!-- Create a RecordGroup --> <record_group name="RecordAll"> <!-- Specify which domains to record from --> <domain_ref><element>domain0</element></domain_ref> <!-- Specify which TopicGroups to record --> <topic_ref><element>ros-rt</element></topic_ref> </record_group> <!-- Add domain and typecode info to record ROS2 ‘PointCloud2’ type --> <domain_type_config> <domain_group> <element> <domain_filter> <element>domain0</element> </domain_filter> <type_config> <xml> <file_group> <element> <file_name> <element>PointCloud2.xml</element> </file_name> <type> <element> <register_top_level>false</register_top_level> <type_name>sensor_msgs::msg::dds_::PointCloud2_</type_name> <registered_type_name> <element>sensor_msgs::msg::dds_::PointCloud2_</element> </registered_type_name> <topics><element>rt/velodyne_points</element></topics> </element> </type> <max_sequence>2147483647</max_sequence> </element> </file_group> <path> <element>.</element> </path> </xml> </type_config> </element> </domain_group> </domain_type_config> </recorder> </dds>
Для запуска Recording Service с этой конфигурацией, выполните следующую команду из директории, содержащей ros2_record.xml:
rtirecord -cfgFile ros2_record.xml -cfgName simple_example
Сервис подписывается на LiDAR топик и записывает непрерывно, пока вы его не остановите. Результат — SQLite база данных под названием ros2_replay_example.dat_0_0. Последующие сессии записи добавляют числовые суффиксы к имени файла, обеспечивая, что каждый файл остается в пределах пользовательского лимита размера.
Конфигурация реплейера
С записанными данными мы теперь можем воспроизвести их в ROS2-среде. Ранние блог-посты подчеркивали, что ROS2 требует несколько QoS-твиков для бесшовной интероперабельности. В этом примере мы подавляем передачу type-code для соответствия дефолтной конфигурации ROS2 «Bouncy Bolson» (или любого ROS2 релиза, использующего rmw_connext_cpp).
Следующий XML-файл, ros2_replay.xml, управляет RTI Replay Service:
<?xml version="1.0"?> <dds xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://community.rti.com/schema/5.3.1/rti_replay.xsd"> <!-- Example configuration for RTI Replay Service 2.0, tailored for ROS2 rt/* topics (PointCloud2) --> <replay_service name="simple_example"> <annotation> <documentation>Replay service example</documentation> </annotation> <time_control> <rate>1</rate> <!-- Optional rate multiplier --> <start_mode>AUTO</start_mode> <start_offset><sec>5</sec></start_offset> </time_control> <!-- Source Database, Required --> <replay_database name="simple_config"> <filename>ros2_replay_example.dat_0_0</filename> <readonly>false</readonly> <!-- Participant configuration. Suppress sending typeCode info (for ROS2) --> <participant> <domain_id>0</domain_id> <participant_qos> <resource_limits> <type_code_max_serialized_length>0</type_code_max_serialized_length> <type_object_max_serialized_length>0</type_object_max_serialized_length> </resource_limits> </participant_qos> </participant> <!-- Get typeCode info for playback (PointCloud2 type) --> <type_config> <xml> <file_group> <element> <file_name> <element>PointCloud2.xml</element> </file_name> <type> <element> <register_top_level>false</register_top_level> <type_name>sensor_msgs::msg::dds_::PointCloud2_</type_name> <registered_type_name> <element>sensor_msgs::msg::dds_::PointCloud2_</element> </registered_type_name> <topics><element>rt/velodyne_points</element></topics> </element> </type> <max_sequence>2147483647</max_sequence> </element> </file_group> <path><element>.</element></path> </xml> </type_config> <session name="A_Session"> <!-- Default values for <time_control> * --> <replay_topic name="All_Topic"> <input> <topic_name>*</topic_name> <type_name>*</type_name> <record_group_name>*</record_group_name> <domain_name>*</domain_name> </input> </replay_topic> </session> </replay_database> </replay_service> </dds>
Для воспроизведения записанных данных обратно в ROS2, выполните:
rtireplay -cfgFile ros2_replay.xml -cfgName simple_example
Результаты
После записи серии ROS2 LiDAR сессий, данные могут быть воспроизведены по требованию. Следующий скриншот демонстрирует воспроизведенное точечное облако в ROS2-среде:

Этот подход устраняет необходимость в выделенном автосимуляторе или физическом автомобиле во время тестирования. Настроив <time_control><rate> в реплей XML, вы можете ускорить воспроизведение — эффективно симулируя высокоскоростной сценарий за минуты.
Для более глубоких инсайтов в ROS2 и DDS интеграцию, обратитесь к нашим предыдущим RTI Blog постам, таким как A Field Guide to Interopera
Интернет вещей
- OpenDDS против RTI Connext DDS: выбор правильного решения Data Distribution Service
- MQTT против DDS: выбор правильного M2M протокола для IoT
- Connext DDS в промышленном IoT: 5 ключевых инсайтов для надежности, безопасности и масштабируемости
- Четвертая промышленная революция: как Industry 4.0 переформатирует производство
- Обеспечение соответствия данных в Интернете вещей
- Использование данных в Интернете надежности: стратегии эффективного управления
- Демократизация Интернета вещей: Next-Gen Satellite IoT приносит универсальную, доступную связность
- Пять الناشших трендов связности, формирующих современную промышленность
- Определительное руководство по топ-10 промышленным ИоТ-платформам (2024)
- Будущее центров обработки данных: тренды, технологии и устойчивость