こんにちは、shotaです。
先日(2/19)ros2_controlの最新版がリリースされました。
また、同日ROS Japan User Groupにて、ros_control/ros2_controlに関する勉強会が開催されました。
今回は、ROS勉強会で私が発表した資料を紹介します。
発表資料一覧
勉強会前にこんなツイートをしました。(たくさんの方に見て頂き、感謝です)
ROS勉強会の発表ネタをチラ見せ#ROS #rosjp #ros2_control pic.twitter.com/5951XFt82u
— と雷 (@chmod_x_akasit) February 19, 2021
発表資料がこちらです。(※スライド32ページ以降にメモを残しています(100枚くらい))
発表動画はこちらです。(ROS Japan UG 運営のYutaka Kondoさんの投稿より)
発表の詳細
発表のスライドを用いて、ROS勉強会で何を話したのか、その一部を紹介します。
ros2_controlとは
ros2_controlは、世の中にある制御理論をロボットに適用しやすくするものです。(※私の解釈です)
例えば、2輪走行ロボットで自動走行したい場合、アプリケーション(自動走行)とロボットとの間に差動2輪走行制御が必要です。
この走行制御はros2_control特有のものではなく、すでに世の中にある制御理論です。
アプリケーションやロボットのハードウェアをできるだけ意識せずに、制御理論を適用できる仕組みがros2_controlです。
どのようにハードウェアを抽象化しているのか、その仕組みを知ることがros2_controlを理解する上で重要です。
ros2_controlで登場するキーワード
ros2_controlで登場する6つのキーワードを紹介します。
まず紹介するのが、Controller ManagerとResource Managerという管理職です。
Controller ManagerはControllerを管理します(例:コントローラの読み込み、実行)。
Resource Managerはハードウェアを管理しますが、裏方なので存在は薄いです。
Hardware ComponentsとControllersはユーザが実装するものです。
Hardware ComponentsにはSensor、Actuator、Systemの3種類のComponentsがあります。
Controllersがいわゆる世の中の制御理論です。
Command InterfaceとState Interfaceは共有メモリでアクセスするインタフェースです。
Commandは読み書きでき、Stateは読み取り専用です。
ハードウェアを抽象化する仕組み
ros2_controlではハードウェアの抽象化が重要です。それを担うのがHardware Componentsです。
Hardware ComponentsにはSensor、Actuator、Systemの3種類が用意されています。コードを実装する際は、動かしたいハードウェアがどれに該当するかを考えます。
Sensorは環境をセンシングしたデータを読み取るためのComponentです。
State InterfaceをResource Managerにエクスポートします。
Actuatorは自身を動かすためのCommand Interfaceをエクスポートします。
SensorとActuatorの集合体であるハードウェア(例、ロボット)はSystemとして定義できます。SystemはState InterfaceやCommand Interfaceをエクスポートします。
Controllerがハードウェアのアクセス権を得る仕組み
Controllerはハードウェアを動かしたいのですが、直接動かすのではなく、State InterfaceやCommand Interfaceを使ってやりとりします。
ControllerはどんなInterfaceが必要なのかをController Managerに伝え、Controller ManagerはそれをResource Managerに伝え、
該当するInterfaceがあればそれをControllerに渡します。
Interfaceが存在しない、あるいは別のControllerに使われている場合は、ControllerはInterfaceを得ることができません。
Resource Managerのおかげで、ハードウェアへのアクセスが干渉しない仕組みが実現できています。
ros2_controlを使って何を作ったか
アールティが販売しているアームロボットCRANE+ V2をros2_controlで動かしました。
ソースコードはGitHubに公開しています(下記リンク参照)。
今はプルリクエストの状態ですが、MoveIt2の最新版がリリースされたら、プルリクエストをマージする予定です。
CRANE+ V2の製品ページはこちら。
ros2_controlでマスタースレーブコントロール
ros2_controlの応用として、CRANE+ V2とCRANE-X7を動かすマスタースレーブコントローラを作成しました。
CRANE+ V2(マスター)を手で動かして、その角度をCRANE-X7(スレーブ)に伝えています。
マスタースレーブコントロールを実現するために、コントローラ(MasterSlaveController)と、CRANE-X7のHardware Componentを作成しています。
ソースコードはこちらに公開しています。
CRANE-X7の製品ページはこちら。
おわりに。ROS勉強会のその他の資料について
こちらのページにROS勉強会の他の発表資料が公開されています。
また発表動画もこちらにまとめられています。(ROS Japan UG 運営のYutaka Kondoさんのチャンネルです)
ROS Japan User GroupはROS初心者でも、そうでない方でも気軽に参加できます。
下記URLからぜひご登録ください。