【ROS 2】Nav2の便利・面白いと思った機能について

ROS
この記事は、ROS 2 Advent Calendar 2023の12/15の記事です。
Nav2を学んでいて、個人的にこれは便利だな、面白いなといった機能をここでは紹介します。
まだまだ、ROS経験は1年程度で浅く、内容としては容易なことしか書いておりませんが、初めてNav2を触るよ!という人などに少しでもROSやナビゲーションが楽しいなと思ってもらえればと思ってます!

Nav2 Keepout Zones

Nav2 Keepout Zonesについてどんなものか説明していきます。

この機能は、Nav2でナビゲーションを行う際に、ここは入ったらだめだよと進入禁止エリアを設定しておくと、そこに入らないようにすることができる機能です。

最近のお掃除ロボットとかにもありますよね。

引用: ROOMBAの進入禁止エリア設定 https://service.irobot-jp.com/1/keep_out_zone

使い方は、ざっくりと進入禁止エリアにしたいところをマークした地図を作成して、それを指定して動かします。

動かした様子が以下のようになります。障害物はおいてないですが、進入禁止エリアとしてマークしているので、そこをよけて経路計画されていますね。

実際に動かしてみたい!という方は、以下の記事を参考にしてもらえればと思います。

【ROS 2】Nav2 Keepout Zonesを使用して侵入禁止エリアを設定する
概要 Nav2のKeepout Zoneを使用して、進入禁止エリアを設定する方法を記載します。 Nav2ではKeepoutFilterというコストマップフィルタープラグインがあり、これを使用することで、入ってはいけない部分を指定することがで...

Nav2 SpeedFilter

Nav2 SpeedFilterは速度制限エリアを設定することができる機能です。

例えば、ここは人通りが多いからちょっと遅くしたいとかそういうことができるようになります。

Keepout Zonesと同じように、地図に制限させたい部分をマークして、それを指定して速度制限させます。

以下のようにRViz2上に制限速度エリアが反映されて、Nav2 Goalで指示すると、制限速度エリアで減速することがわかります。

 

実際に動かしてみたい!という方は、以下の記事を参考にしてもらえればと思います。

【ROS 2】Nav2 SpeedFilterを使用して速度制限エリアを設定する
概要 Nav2のSpeedFilterを使用して、速度制限エリアを設定する方法を記載します。 Nav2ではSpeedFilterというコストマップフィルタープラグインがあり、これを使用することで、速度制限エリアを指定することができるようにな...

Nav2 Collision Monitor

Nav2 Collision Monitorは、LiDARなどのセンサ情報を使用して、近くに障害物があれば減速したり、停止したりすることができる機能です。

slowdown boxと、stop boxという領域を指定することができ、slowdown box内に2DLiDARの点群が入ったら減速、stop box内に2DLiDARの点群が入ったら停止、といったことができるようになります。

引用:https://navigation.ros.org/tutorials/docs/using_collision_monitor.html#collision-monitor-tutorial

指定可能なセンサーは、以下になります。

  • Laser scanners (sensor_msgs::msg::LaserScan messages)
  • PointClouds (sensor_msgs::msg::PointCloud2 messages)
  • IR/Sonars (sensor_msgs::msg::Range messages)

以下は動作の様子です。少し見づらいですが、RViz2上の青い枠がslowdown box, 赤い枠がstop boxとなっています。動画では途中でGazebo上のオブジェクトを移動させて、slowdown box内に点群が検知されたら、減速し、stop box内に点群が検知されたら止まっているのがわかるかと思います。このように、人が途中で割り込んできたら減速することや停止するなどすることができるようになります。

また、ROS 2 Ironでは、Collision Monitorでstate_topicを発行するようになり、このトピックを使うことで、現在SlowDownBoxがアクティブなのか、StopBoxがアクティブなのかというのがわかるようになります。この情報を用いて、SlowDownBoxに入ったら、LEDを点灯するなどができるようになります。

Collision Detector NodeもIronで追加されており、CollisionMonitorと似ていますが、停止や減速などを行うのではなく、検出した場合の、障害物が検出された場合、トピックを通じて通知を受け取れます。

実際に動かしてみたい!という方は、以下の記事を参考にしてもらえればと思います。

【ROS 2】Nav2 Collision Monitorを使用して衝突をモニタする
概要 Nav2のCollision Monitor使用して、障害物が近くにある場合に減速したり、停止することができるようになります。 以下のようにSlowdownBoxとStopBoxのポリゴンを指定して、その中にLaserScan等の点群...

Nav2 Waypoint Follower

Nav2 Waypoint Followerは、ナビゲーション時に途中途中向かうポイントを指定することができる機能です。

また、Nav2 Waypoint Followerはウェイポイント到達時にpluginを呼び出すことができる機能があります。

用意されているプラグインは、以下の3つがあります。

  • WaitAtWaypoint:Waypoint到達時に、指定した時間一時停止します。
  • PhotoAtWaypoint:ウェイポイント到達時に写真をとります。
  • InputAtWaypoint:ウェイポイントでタイムアウト付きで外部入力を待機できるようにします。

Pluginになっているため、nav2_core::WaypointTaskExecutorを継承して自作のプラグインを作るといったことも可能になります。

写真を撮るプラグインを使用して、Waypoint Followerを動作させたときの様子を以下に載せます。

RViz2のNavigation Panelを使用して、ウェイポイントを指定して動作させることができ、ウェイポイント到達時に画像ファイルが保存されているのがわかるかと思います。

実際に動かしてみたい!という方は、以下の記事を参考にしてもらえればと思います。

【ROS 2】Nav2 Waypoint Followerで複数の向かうポイントを指定する
概要 Nav2でWaypoint Followerがどのようなものか、使い方を記載します。 まず、Waypointというのは、ゴールに向かっていくときのポイントになります。ここに向かってから、ここに向かってというように、途中途中のポイントを...

コメント