本記事ではUnitree A1 (Lidarオプション)でアプリケーションからSLAMを実行したときに内部のCPUでどのようなプログラムが実行されているのか確認していきたいと思います。
SLAM実行時の実行ノード
内部で実行されるプログラムはROSというプラットフォーム上で実行され各プログラムはノードとして実行されます。Unitree A1 でSLAMを実行した時にどのようなノードが実行されているのか確認しました。
1. base_controller_node
1つ目はbase_controller_nodeです。ROSトピックのcmd_velを変換しUnitree A1 SDKの移動コマンドを実行します。cmd_velとはROS内で速度を表すトピック名として使用されます。このノードの役割はROSの速度コマンドをUnitree A1 SDKへ変換するということになります。
入力
- cmd_vel(geometry_msgs/twitst)
2. slam_planner_node
2つ目はslam_planner_nodeという名前のノードです。このノードではmap(地図)とscan(2D Lidarからのデータ)を入力とし,決められたゴールまでの軌道を生成する役割を担っています。また移動中に障害物を回避するような動作計画を行います。ロボットの自律移動における行動を決定する部分となります。このソフトウェアはROSの自律移動パッケージのNavigationにあるmove_baseというソフトウェアを元に作成されているようです。
入力
- map
- move_baseのメッセージ
- scan(Lidarのデータ)
出力
- cmd_vel
- move_baseのメッセージ
- Trajectory
- local_costmap
- global_costmap
3. slamware_ros_sdk_server_node
3つ目はslamware_ros_sdk_server_nodeというノードでSLAM(地図の生成)やライダーデータ、odomデータなどを出力します。rplidarのドライバーのような役割をするだけでなく、地図生成も行ってくれるとても便利なノードです。
出力
- map
- scan
- odom
このソフトウェアはSLAMWAREがrpidar用に開発したもので、下記URLの資料に環境構築の方法や使用方法などが記載されています。
Home – SLAMWARE ROS SDK (slamtec.com)