DDSの通信プロトコルRTPS実装の一つFreeRTPSを試す (2)
DDSの通信プロトコルRTPS実装の一つFreeRTPSを試す (1)の続きです。 本日はfreertps
のアプリケーションコードを見ていきましょう。
Talker/Listener
まずはROSでいうHello Worldプログラム的な役割の文字列のPub/Sub通信を見ます。
- https://github.com/ros2/freertps/blob/master/apps/listener/listener.c
- https://github.com/ros2/freertps/blob/master/apps/talker/talker.c
C++言語で書くROSプログラムに対して、このfreertpsを使うCプログラミングの注意点は、
- 文字列はchar(もしくはuint8_t)型配列で表現
- コールバック関数の引数はvoidポインタ
でしょうか。 一部、変数宣言や型キャストが強引であったり、メモリ空間を意識しないといけない点などがC++と比べて違いますが、基本的には案外読めるソースコードで安心しました。 ピュアCのソースコードは読みづらいという印象を持っていました。 実装が上手なのでしょう。
素晴らしい点は、インクルード宣言にこれまで出てきたROS 2のヘッダーファイルのインクルードがなく、freertps
と文字列メッセージのヘッダーファイル(.msg
から自動生成?)のインクルードだけで完結している点です。
つまり、freertps
は、前回も示した図でいうDDS vendor
でありながら、rmw
, rcl
の機能と、C言語用のROS 2クライアントも含んでいるような、広範囲をカバーするライブラリであることがわかりました。
http://roscon.ros.org/2016/presentations/ROSCon%202016%20-%20ROS%202%20Update.pdf
また、C言語である点も計算リソースに制限がある組み込みシステムへの応用を可能にしているのでしょう。 「スタンドアローン」という言葉に二言がありません。 覚える範囲が狭くて助かります。このライブラリを理解できたら、ROS 2の全貌を理解できそうです。
次回はもう少し複雑なメッセージを使う別のアプリケーションコードを見ていく予定です。
Comments powered by Disqus.