はじめに
先進的な企業により、自動走行できるロボットがどんどん開発されつつありますが、
今の一般的な自動走行ロボットは、”1台のロボットの自動走行”が主な機能かと思います。
次のフェーズとして考えられるのは群衆管理の機能だと思います。
複数機体に対して、Aはトイレ掃除をし、Bは買い物に行ってくるというような、
複数の同じROBOTに対して、違う司令を出すというようなシチュエーションに対して、どのような方法で対処すればいいのか
についての解として
一つの方法を紹介したいと思います。
FreeFleet
紹介するのは、FreeFleetというRos2のパッケージになります。
ROSにも対応しているみたいですが、今回はROS2の機能について説明します。
仕組み
同一ネットワーク内、違うロボット間で各々がNavigation2を起動した場合、
Topicが共有されるため、「同じ動きをするロボット」ができてしまいます。
同じ動きをさせないためにはTopicを非共有の状態にする必要があります。
その場合、
Robot1に対しては、export ROS_DOMAIN_ID=1
Robot2に対しては、export ROS_DOMAIN_ID=2
と設定することにより、
Topicが共有されなくなり、Robot1とRobot2が、
独立してNavigation2を動かせるようになります。
すると、どういう問題が出るかというと、
Topicが非共有になることで、逆に統合して、司令を出せなくなるという問題が出ます。
そこで登場するのが、FreeFleetという仕組みになります。
各々のRobotをFreetServerというNodeとやり取りをすることで、
統合管理ができるというのがざっとした概要になります。
このときに使うIDは、ROS_DOMAIN_IDではなく、
dds_domainというものを利用します。
ROS_DOMAIN_IDが違うNode間でも、dds_domainが一致するFreetServerとであれば
やり取りをすることができます。
DEMO
同一ネットワーク内で、別々のPCでそれぞれ、Navigation2を動かし、
FreetServerから司令を出して、別々の動きをさせるというDEMOになります。
まとめるのが下手なのですが、
新しい知見としては面白いかと思います。
今後は、1台の走行精度よりも
群衆としてどう動かすかが、研究の課題になっていくかと思っています。