ROS2 + DDS:もう一度再生する
実際のテストが必要です-そして多くの場合高価–分散型および自律型システムの作成の一部。テストは、システムをさまざまなシナリオに通すように設計されており、リアルタイムのデータ収集により、これらのテストから永続的な価値を生み出すことができます。
GPS、カメラ、LiDAR、RADAR、加速度計、ジャイロスコープ、コンパス、速度計、制御信号に加えて、マッピングと環境を含む(半)自動運転車のロードテストについて考えてみてくださいデータ。これは*大量の*データであり、取得するのに非常に費用がかかります。実際のテストが実行されているかのように、このすべてのデータをオンデマンド再生用に記録できたら素晴らしいと思いませんか?すべてのテストセッションのデジタルライブラリを構築し、再生時にそれを変更できるとしたらどうでしょうか。それにより、さらに再現性の高いテストシナリオを作成できますか?
DDSユーザーは、RTI Recording Serviceを使用して、高帯域幅/大容量の録音と再生を長年利用できることをご存知ですか? RTI Recording Serviceの使用例としては、海軍艦艇の海上公試など、拡張フィールド展開中のすべてのシステムデータの継続的(24/7)記録があります。 DDSの分散性により、記録の帯域幅と容量はほぼ無制限です。データの洪水に対応するために、記録サービスの複数のインスタンスを起動できます。
ROSエコシステムにはRosbagと呼ばれる独自のレコーディングサービスがありますが、この記事の執筆時点では、RosbagはROS2用にリリースされたばかりです。幸い、ROS2は基盤となる接続フレームワークとしてDDSを使用しているため、フィールドで実証済みのRTI Recording Serviceを使用して、いつでも再生できるようにROS2からの高帯域幅データを記録するのは簡単です。
それを実現させましょう...
レコーダーの構成
RTI Recording Serviceは、必要なQoS設定を使用して、すべてまたは選択したトピックを記録するようにXMLファイルで構成できます。この例では、中程度の帯域幅のトピック(ROS2 LiDARデータ)を記録し、それをすべて純粋なDDSツールセットからROS2に再生するように設定します。
RTI Recording Serviceは通常、従来のデータベースの列に記録するためにデータを逆シリアル化します。 ROS2 LiDARデータにはサンプルごとに多数のポイントがあるため、この場合、データを逆シリアル化せずにデータベースに単一の列として記録するようにレコーダーに指示します。 XMLファイルの残りの部分は、記録するトピックとデータタイプ、およびデータの保存場所をレコーダーに指示します。
これは、私が作成した「ros2_record.xml」という名前のXMLファイルに含まれています:
xsi:noNamespaceSchemaLocation ="http://community.rti.com/schema/5.3.1/rti_record.xsd">
<!-これにより、RTIRecorderへのリモートアクセスが可能になります。 RTIRecorderが作成します
タグで指定されたドメイン内のDataReaderと1つのDataWriter。 ->
true
0
<!-記録されたデータが保存されるファイルのセットのベース名->
ros2_replay_example.dat
true
<!-1つのドメインからのデータを記録します->
0
<!-ROS2'PointCloud2 'データ型の逆シリアル化をオフにします(トピック内の> 5k要素)->
RTIDDS_DESERIALIZEMODE_NEVER
<!-rt / velodyne_pointsトピックのみを記録するTopicGroupを作成します->
rt / velodyne_points
*
<!-レコードグループを作成します->
<!-記録するドメインを指定します->
domain0
<!-記録するトピックグループを指定します->
ros-rt
<!-ROS2'PointCloud2 'タイプを記録するためのドメインおよびタイプコード情報を追加します->
<要素>
domain0
<要素>
PointCloud2.xml
<タイプ>
<要素>
false
Sensor_msgs ::msg ::dds _ ::PointCloud2 _
Sensor_msgs ::msg ::dds _ ::PointCloud2 _
<トピック>
rt / velodyne_points
2147483647
<パス>
<要素>。要素>
レコーダー>
上記のXMLファイルを使用してRTI Recording Serviceを起動するには、次のコマンドを使用します(上記のXMLファイルと同じディレクトリから実行):
rtirecord -cfgFile ros2_record.xml -cfgName simple_example
これにより、LiDARデータをサブスクライブし、プログラムを閉じるまで継続的に記録する記録サービスが起動します。最終結果は、「ros2_replay_example.dat_0_0」という名前のSQLiteデータベースファイルです
記録セッション(最初の番号)とこれが順番に並んでいるデータベースファイルを区別するために、ファイル名に番号が追加されます(ファイルは自動的にユーザーが選択できるように制限されます)サイズ。大きくなりすぎると閉じられ、次の期間のデータを保持するために別のファイルが開かれます。これにより、データベースファイルが大きくなりすぎるのを防ぎます。
リプレイヤー設定
ROS2 LiDARデータを記録したので、ROS2で再生できるかどうかを見てみましょう。
以前のブログ記事(相互運用性とエコシステムのマージ時のフィールドガイド)で述べたように、ROS2では互換性を確保するためにいくつかの設定が必要です。この例では、検出中のタイプコード情報の送信は、ROS2の「BouncyBolson」リリースのデフォルト構成と互換性があるように抑制されていますが、 rmw_connext_cpp
を実行している場合は、ROS2でもこの調整を行うことができます。 RMWレイヤーとして。
これらの設定は、トピック、ドメイン、ファイル情報とともに、別のXMLファイルに配置されます:
<?xml version ="1.0"?>
xsi:noNamespaceSchemaLocation ="http://community.rti.com/schema/5.3.1/rti_replay.xsd">
<!-********************************************** ********************->
<!-RTI Replay Service2.0の設定例->
<!-ROS2 rt / *トピック(PointCloud2タイプ)をサポートするように編集->
<!-********************************************** ********************->
注釈>
リプレイサービスの例
注釈>
1 <!-オプションのレート乗数->
AUTO
5
<!-ソースデータベース、必須->
ros2_replay_example.dat_0_0
false
<!-参加者の構成。 typeCode情報の送信を抑制します(ROS2の場合)->
<参加者>
0
0
0
参加者>
<!-再生用のtypeCode情報を取得します(PointCloud2タイプ)->
<要素>
PointCloud2.xml
<タイプ>
<要素>
false
Sensor_msgs ::msg ::dds _ ::PointCloud2 _
Sensor_msgs ::msg ::dds _ ::PointCloud2 _
rt / velodyne_points
2147483647
。
<セッション名="A_Session">
<!-のデフォルト値*->
<入力>
*
*
*
*
セッション>
記録されたデータをROS2に再生するには:
rtireplay -cfgFile ros2_replay.xml -cfgName simple_example
結果
これで、一連の自動シミュレーターセッション中に生成されたROS2 LiDARデータを収集しました。これらはすべて、期待どおりにオンデマンドで再生できます。
いいね!専用の自動車シミュレーター(または実際の車両)を必要とせずに、LiDARデータをオンデマンドで再生できるようになりました。
で遊ぶのは楽しかったです LiDARデータの再生を高速化するための再生XMLファイルの変数。まるで*非常に*速い車の乗客のようでした!
ROS2とDDSの詳細については、以前のRTIブログの投稿をご覧ください:
相互運用性とエコシステムが統合されるタイミングに関するフィールドガイド
モノのインターネットテクノロジー