2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ROS2 Navigation2での群衆管理

Last updated at Posted at 2022-05-16

はじめに

先進的な企業により、自動走行できるロボットがどんどん開発されつつありますが、
今の一般的な自動走行ロボットは、”1台のロボットの自動走行”が主な機能かと思います。
次のフェーズとして考えられるのは群衆管理の機能だと思います。

複数機体に対して、Aはトイレ掃除をし、Bは買い物に行ってくるというような、
複数の同じROBOTに対して、違う司令を出すというようなシチュエーションに対して、どのような方法で対処すればいいのか

についての解として
一つの方法を紹介したいと思います。

FreeFleet

紹介するのは、FreeFleetというRos2のパッケージになります。
ROSにも対応しているみたいですが、今回はROS2の機能について説明します。

仕組み

同一ネットワーク内、違うロボット間で各々がNavigation2を起動した場合、
Topicが共有されるため、「同じ動きをするロボット」ができてしまいます。

paint.png

同じ動きをさせないためにはTopicを非共有の状態にする必要があります。
その場合、
Robot1に対しては、export ROS_DOMAIN_ID=1
Robot2に対しては、export ROS_DOMAIN_ID=2
と設定することにより、

paint (1).png

Topicが共有されなくなり、Robot1とRobot2が、
独立してNavigation2を動かせるようになります。

すると、どういう問題が出るかというと、
Topicが非共有になることで、逆に統合して、司令を出せなくなるという問題が出ます。
そこで登場するのが、FreeFleetという仕組みになります。

各々のRobotをFreetServerというNodeとやり取りをすることで、
統合管理ができるというのがざっとした概要になります。
このときに使うIDは、ROS_DOMAIN_IDではなく、
dds_domainというものを利用します。
ROS_DOMAIN_IDが違うNode間でも、dds_domainが一致するFreetServerとであれば
やり取りをすることができます。

paint (3).png

DEMO

同一ネットワーク内で、別々のPCでそれぞれ、Navigation2を動かし、
FreetServerから司令を出して、別々の動きをさせるというDEMOになります。

まとめるのが下手なのですが、
新しい知見としては面白いかと思います。

今後は、1台の走行精度よりも
群衆としてどう動かすかが、研究の課題になっていくかと思っています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?