RTI Recording ServiceとDDSによるROS 2 LiDARデータのリプレイ
実世界テストは分散・自律システムに不可欠ですが、費用が高額になりがちです。センサーデータを取得しリプレイすることで、各テストセッションから持続的な価値を生み出せます。
GPS、カメラ、LiDAR、RADAR、慣性センサー、完全な制御信号スイートを備えた準自律走行車両を想像してください。単一走行で生成されるデータ量は驚異的で、繰り返し実路試験のコストは高額です。そのデータを後でリプレイするために記録する、すなわちテストセッションのデジタルライブラリを作成することで、テストの再現性と柔軟性が劇的に向上します。
長年、DDSユーザーはRTI Recording Serviceを通じて高帯域幅の記録と再生にアクセスしてきました。これは、海軍艦艇の洋上試験のような長期展開中、全システムデータの継続的24/7取得をサポートします。DDSの分散アーキテクチャにより、複数のRecording Serviceインスタンスを起動して大量データストリームに対応できます。
DDSをプロセス間通信に依存するROS 2は、同じ実地検証済みRecording Serviceを活用し、LiDARポイントクラウドのような高帯域幅ROS 2トピックを取得できます。以下の例では、中程度帯域幅のトピック(ROS 2 LiDARデータ)を設定し、DDSツールのみを使用してROS 2にリプレイします。
レコーダー設定
RTI Recording ServiceはXML設定ファイルで駆動され、記録するトピック、望ましいQoS設定、ストレージオプションを指定します。この設定では、ROS 2PointCloud2データを単一カラムとして扱うようレコーダーに指示し、この大規模データ型のコスト高い逆シリアル化を回避します。
使用する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"> <!-- RTI Recorderへのリモートアクセスを有効化。指定ドメインで1 DataReaderと1 DataWriterを作成 --> <remote_access> <enabled>true</enabled> <remote_access_domain>0</remote_access_domain> </remote_access> <!-- 録画データを格納するファイルセットのベース名 --> <recorder_database> <database_name>ros2_replay_example.dat</database_name> <overwrite>true</overwrite> </recorder_database> <!-- 1ドメインからデータを記録 --> <domain name="domain0"> <domain_id>0</domain_id> <!-- ROS 2 'PointCloud2'データ型(5000要素超)の逆シリアル化を無効化 --> <deserialize_mode>RTIDDS_DESERIALIZEMODE_NEVER</deserialize_mode> </domain> <!-- rt/velodyne_pointsトピックのみ記録するTopicGroup作成 --> <topic_group name="ros-rt"> <topics><topic_expr>rt/velodyne_points</topic_expr></topics> <field_expr>*</field_expr> </topic_group> <!-- RecordGroup作成 --> <record_group name="RecordAll"> <!-- 記録対象ドメイン指定 --> <domain_ref><element>domain0</element></domain_ref> <!-- 記録対象TopicGroup指定 --> <topic_ref><element>ros-rt</element></topic_ref> </record_group> <!-- ROS 2 'PointCloud2'型記録用のドメインとタイプコード情報追加 --> <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>
ros2_record.xmlを含むディレクトリから以下コマンドでRecording Serviceを開始:
rtirecord -cfgFile ros2_record.xml -cfgName simple_example
サービスがLiDARトピックを購読し、停止まで継続記録。出力はros2_replay_example.dat_0_0というSQLiteデータベース。以降の記録セッションは数値サフィックスが付加され、ユーザー定義サイズ制限内に各ファイルを維持。
リプレイヤー設定
データ記録後、ROS 2環境にリプレイ可能。過去のブログで指摘された通り、ROS 2はシームレスな相互運用性のためにいくつかのQoS調整を必要とします。この例では、ROS 2「Bouncy Bolson」(またはrmw_connext_cpp使用のROS 2リリース)のデフォルト設定に合わせ、タイプコード送信を抑制します。
以下の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"> <!-- RTI Replay Service 2.0設定例、ROS 2 rt/*トピック(PointCloud2)向け --> <replay_service name="simple_example"> <annotation> <documentation>Replay service example</documentation> </annotation> <time_control> <rate>1</rate> <!-- オプションのレート倍率 --> <start_mode>AUTO</start_mode> <start_offset><sec>5</sec></start_offset> </time_control> <!-- ソースデータベース、必須 --> <replay_database name="simple_config"> <filename>ros2_replay_example.dat_0_0</filename> <readonly>false</readonly> <!-- 参加者設定。タイプコード情報送信抑制(ROS 2用) --> <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> <!-- 再生用タイプコード情報取得(PointCloud2型) --> <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"> <!-- <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>
記録データをROS 2にリプレイするには:
rtireplay -cfgFile ros2_replay.xml -cfgName simple_example
結果
一連のROS 2 LiDARセッション記録後、データをオンデマンドでリプレイ可能。以下スクリーンショットはROS 2環境内でのリプレイされたポイントクラウドを示します:

このアプローチにより、専用自動車シミュレーターや実車両がテスト中に不要になります。リプレイXMLの<time_control><rate>設定を調整することで、再生を高速化可能—実質的にハイシードシナリオを数分でシミュレート。
ROS 2とDDS統合の詳細については、A Field Guide to Interoperability and When Ecosystems Mergeなど過去のRTIブログ記事をご参照ください。
モノのインターネットテクノロジー
- OpenDDS vs RTI Connext DDS:適切なデータ配布サービスソリューションの選択
- MQTT vs DDS:IoT向け最適なM2Mプロトコルの選択
- 産業用IoTにおけるConnext DDS:信頼性・セキュリティ・拡張性のための5つの重要知見
- ROS 2とDDS相互運用性:シームレス統合のための実践ガイド
- 第4次産業革命:インダストリー4.0が製造業をどう再構築するか
- モノのインターネットにおけるデータコンプライアンスの確保
- 「信頼性のインターネット」におけるデータ活用:効果的管理のための戦略
- IoTの民主化:次世代衛星IoTがもたらす普遍的で手頃な接続性
- 現代産業を形作る5つの新興接続性トレンド
- 決定版:トップ10産業用IoTプラットフォームガイド(2024年版)
- データセンターの未来:トレンド、技術、持続可能性