うごくものづくりのために

技術的な備忘録がメインです。

Navigationスタックを使う (1) - 障害物情報のセット

Navigationスタックは、ロボットの移動制御を行うための大規模なスタックです。 このスタックに、目標地点、障害物、マップ、オドメトリの情報をそれぞれ与えると、それらを統合して、台車の速度指令を出力してくれます。

内部的には、グリッドセルに区切ったコストマップ(障害物情報を含んだマップ)の生成、広域な経路生成、ロボット周辺のローカルな経路生成、移動制御などを、別々のパッケージが分担して行っています。 もちろん、それぞれのパッケージのパラメータは調整できるので、種々のロボットに合わせて適切な制御を行うことができます。

navigation - ROS Wiki

これから、この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に登録した点一つ一つの性質を登録するものみたいです。例えば、色情報であったり、点の強さ?であったり。 正体がわかったらまた追記しておきます。