ROS2の資料
ROSの基本構造
- ノード:プログラムの単位。1つのプロセスに対応。
- プロセス:プログラムの最小単位。(1プログラムから複数のプロセスが出うる)
- プロセス間(ノード間)で通信を行う
- トピック:ノードがメッセージを交換するための経路
- 通信は3種
- トピック(通信の型(タイプ)定義は.msg)
- サービス(.srv)
- アクション(.action)
- パラメータ:Windowsの.ini。
- ネーム:ノード、トピック、サービス、アクションのメッセージ・パラメータはすべてネームを持つ。
トピックの場合、Relative型、Global型、Private型の表記がある。
トピック、サービス、アクションの違い
トピックは非同期、継続的、一方的(配信→購読)
サービスは同期、1回限り、要求に基づいて双方向通信。引数付き変数みたいな働き。
メッセージ
メッセージのフォーマットは「波カッコ{}」と「コロン:」。※「コロン(:)」の後ろに半角スペース必須。
例>Twistメッセージ = ベクトル3(Vector3)型変数linearとangularの2つ
(Vector3は、x, y, zの変数をもつ)
→ '{linear: {x: 0, y: 0,z: 0}, angular:{x: 0, y: 0,z: 0}}'
通信方式3種
トピック(移動、色の変更など)
メッセージを使ってノード間(プロセス間)の通信を行う。
購読(Subscriber)と配信(Publisher)があり、購読側のノードに配信側のノードからメッセージを送る。
メッセージは型(タイプ)が決まっていて、典型タイプがある。
コマンド(p.101~)
パッケージの実行
- ros2 run <パッケージ名> <ファイル名>
ノード
- ros2 node list
- ros2 node info <ノード名>
- ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
ノード名の変更(別名ノードだけどパッケージとファイルは同じ)
トピック
- ros2 topic list(-tオプションでそのトピックのタイプ(型)を表示)
- ros2 topic info <トピック名>
- ros2 msg show <タイプ名>
メッセージのタイプを表示する。(トピックと直接は関係ない。トピックがそのメッセージタイプを使ってればそのタイプに合わせたメッセージでトピック通信ができる。) - ros2 msg list
- ros2 topic pub --once(または--rate 1) <タイプ名> ’メッセージ’
サービス(生成、消去など)
同期型。1回通信。双方向(引数を元に実行して返り値が返ってくる)
- ros2 service list(-tオプションでタイプ名表示)
タイプは引数の型 - ros2 interface show <タイプ名>
引数なしは、タイプ名「std_srvs/srv/Empty」 - ros2 service call <サービス名> <サービスタイプ> <引数>
パラメータ
ノードの設定にかかわる種々の値。
ノード毎に整数、小数、ブール、文字列、それらのリストが持てる。
動的変更が可能。
コマンド
- ros2 param list
ノード一覧とノードのパラム一覧表示 - ros2 param get <ノード名> <パラム>
- ros2 param set <ノード名> <パラム> <値>
- ros2 param dump <ノード名>
<ノード名>.yamlのファイルが作成 - ros2 run <パッケージ名> <ファイル名> --ros-args --params-file <パラメータファイル.yaml>
アクション
双方向通信。処理が長くて応答時間のかかるときに利用。処理の途中結果を受け取れる。
1対1の非同期通信。(サービスは返り値のみ返す⇔アクションはフィードバック(途中結果)返したり、キャンセル命令が出せる)
メッセージは3種類:Goal(到達目標地点)、Result(目標達成時1度送るメッセージ[サーバ→クライアント])、Feedback(センサ情報取得など)
ラウンチ(Launch)
パラメータ設定やノード起動などをまとめたのが、launchファイル。形式はPython形式。(ROS1はXML形式)
Pythonのクラス定義みたいな感じで書いてる。
launchで通信の実行やら入出力、ノード管理とか全部できるから、これでプログラムとしてまとめる感じか。
コマンド
- ros2 launch <pyファイル>
rclpy
Pythonで記述できるようにするやつ?rclpyインポートしてから書く。
Turtlesimメモ
各名称メモ
パッケージ名:Turtlesim
ノード名:Turtlesim
トピック:cmd_velとか
サービス:Clear、Spawnなど
アクション:RotateAbsolute
ディレクトリ
パッケージの場所
/opt/ros/galactic/lib/turtlesim
/opt/ros/galactic/include/turtlesim/
⇒3個action, msg, srvのディレクトリ(アクション、メッセージ、サービス)