Navigationスタックを使う (1) - 障害物情報のセット
Navigationスタックは、ロボットの移動制御を行うための大規模なスタックです。 このスタックに、目標地点、障害物、マップ、オドメトリの情報をそれぞれ与えると、それらを統合して、台車の速度指令を出力してくれます。
内部的には、グリッドセルに区切ったコストマップ(障害物情報を含んだマップ)の生成、広域な経路生成、ロボット周辺のローカルな経路生成、移動制御などを、別々のパッケージが分担して行っています。 もちろん、それぞれのパッケージのパラメータは調整できるので、種々のロボットに合わせて適切な制御を行うことができます。
これから、このNavigationスタックを SSLロボットで使えるように調整していきます。
navigation/Tutorials/RobotSetup - ROS Wiki
障害物情報のセット
navigation/Tutorials/RobotSetup/Sensors - ROS Wiki
現在のところ、navigationスタックは障害物の情報として、sensor_msgs/LaserScan 型か sensor_msgs/PointCloud 型のメッセージを受け付けるようです。 SSLではLRFを用いて障害物検知をしているわけではないので、PointCloud型のメッセージとして障害物情報をパブリッシュします。
PointCloud型は、以下のような構成になっています。
sensor_msgs/PointCloud Documentation
まず、headerの中身から解説します。
seq
シーケンス番号です。パブリッシュされるたびに勝手にインクリメントされるので、いじらなくてよし。stamp
タイムスタンプです。秒単位かナノ秒単位での現在時刻を入れておきましょう。frame_id
障害物の座標を指定する際の基準となる、tf上の座標空間の名前を指定します。 例えば、ワールド座標系で障害物の座標を指定する際は、frame_id = 'world' とでもしておきます。
次に、pointsについてです。
pointsには、障害物となる点の集まりを登録します。SSLの場合は、主としてロボットの外周が、この点の集まりとして表現されると思います。 pointsは、Point32型の配列となっています。 Point32型は1つの点の座標を表現するための型で、x,y,zをfloat32型で持っています。pointsの要素一つ一つに、障害物点の座標を登録します。
最後に、channelsについてですが、これはいまいちよくわかっていません。 どうやら、pointsに登録した点一つ一つの性質を登録するものみたいです。例えば、色情報であったり、点の強さ?であったり。 正体がわかったらまた追記しておきます。