- rmw は,ROS2 と DDS 間の翻訳:
○ DDS が提供する 関数:
create_participant()
create_topic()
create_datawriter()
create_datareader()
write()
read()
take()
set_qos()
wait_for_match()
loan_sample()
return_loan()
○ rmw の翻訳:
ROS2 の publish → DDS の write()
ROS2 の subscribe → DDS の read()
ROS2 の QoS → DDS の QoS
ROS2 の Node → DDS の Participant
ROS2 の Topic → DDS の Topic
ROS2 の Publisher → DDS の DataWriter
ROS2 の Subscriber → DDS の DataReader
- DDS 製品
FastDDS
CycloneDDS
ConnextDDS
- rmw 実装(DDS ベンダーごと)
rmw_fastrtps_cpp
rmw_cyclonedds_cpp
rmw_connext_cpp
など
- DDS のマクロ化
DDS を直接叩くとは,つぎのコードを書くということ:
Participant の生成
Publisher/Subscriber の生成
Topic の生成
TypeSupport の登録
DataWriter/DataReader の生成
QoS の設定
Listener の設定
バッファリングの管理
メモリ管理
シリアライズ/デシリアライズ
RTPS の設定
ネットワーク設定
再送制御
履歴管理
マッチング処理
エラー処理
スレッド管理
rmw を使うと,つぎのコードで済む:
self.create_subscription(...)
self.create_publisher(...)
self.publisher.publish(msg)
|