Open10

ロボット制御フレームワーク ARCS6 について説明する

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

はじめに

このスクラップでは長岡技術科学大学の横倉勇希先生が開発しているロボット制御フレームワーク ARCS6 についての説明を投稿していく。

https://www.sidewarehouse.net/index.html

手始めに下記を対象に説明していく。

  • ARCS6 とは何か?
  • ARCS6 の特徴
  • ROS/ROS2 との違い
  • 開発者(横倉先生)について
  • ARCS6 v.s. DSP
  • ARCS6 v.s. ROS/ROS2
  • ARCS6 のリアルタイム性について
  • ARCS6 を使ってできること
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ARCS6 とは何か?

  • ARCS6 は ROS のような Linux 上で動作するロボット制御フレームワーク
  • ROS とは異なり、モーションコントロールのような低層レイヤでのロボット制御に特化している
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ARCS6 の特徴

  • ARCS6 の最大の特徴は AlmaLinux のような一般的な Linux OS を使ってリアルタイム制御ができる点
  • リアルタイムカーネル(例:RTLinux、RTAI)に関する知識が不要
  • カーネルを変更を加える必要もない
  • ロボットを制御するコードはカーネル空間ではなくユーザー空間で実行される
  • コードに影響があってもカーネルに影響が及ぶことはない
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ROS / ROS2 との違い

横倉先生の Web サイトには下記の記述がある

インバータのゲートを叩くレベルでロボットを動かしている我々パワー研からすると,ROS/ROS2は上位層用である。 なので,ROSで上位層を,ARCS6で下位層を作るという住み分けが正解。

ROS はリアルタイム性がないので ARCS6 と明確に異なる。一方 ROS2 はリアルタイム性を備えるので違いは曖昧。

ROS2 公式ドキュメントにもリアルタイムに関するデモがあるが一読しただけではよくわからない。

https://docs.ros.org/en/humble/Tutorials/Demos/Real-Time-Programming.html

ただし ROS2 でリアルタイム制御を実現するには rt-preempt、Xenomai が必要になりそう。

これらを必要としないでもソフトリアルタイム制御が実現できる点は ARCS6 の ROS/ROS2 に対する違いと言えるかも知れない

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

開発者(横倉先生)について

1984年生。2009年3月長岡技術科学大学大学院電子情報工学専攻修士課程修了。 同年4月より慶應義塾大学大学院理工学研究科総合デザイン工学専攻後期博士課程入学,2011年3月修了。 2010年4月から2011年8月まで日本学術振興会特別研究員(DC2およびPD)。 2011年4月慶應義塾大学理工学部訪問研究員,同年9月長岡技術科学大学電気系博士研究員,2012年4月より同大学助教,2020年9月より同大准教授,現在に至る。 主としてモーションコントロール,モータドライブ,ロボティクスに関する研究に従事。博士(工学)。

Web サイトにわかりやすくまとまっていた

Yuki Yokokura received the B.E. and M.E. degrees in electrical engineering from the Nagaoka University of Technology, Nagaoka, Japan, in 2007 and 2009, respectively, and the Ph.D. degree in integrated design engineering from Keio University, Yokohama, Japan, in 2011. He was a Visiting Fellow with Keio University, and a Postdoctoral Fellow with Nagaoka University of Technology in 2011. Dr. Yokokura was a Japan Society for the Promotion of Science Research Fellow from 2010 to 2011. He was an Assistant Professor with Nagaoka University of Technology from 2012 to 2020, and he has been an Associate Professor in 2020.

英語版もある

https://www.sidewarehouse.net/selfintro/index.html

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ARCS6 v.s. DSP

ARCS6 レクチャー PDF 資料の 5 ページにわかりやすくまとめられている

https://www.sidewarehouse.net/arcs6/ARCS6LecturePublic.pdf

  • ほぼ無尽蔵な記憶容量 → 実験データの保存に余裕
  • ディスプレイ・キーボード・マウスが使える → 使いやすい UI、操作しやすい
  • リソース管理を OS に任せられる → 簡単
  • ネットワークが使える → ファイル共有・遠隔化が簡単
  • クロスコンパイル不要 → 開発環境で悩まなくて良い
  • 最新の超高速な CPU が使える → 計算がめっちゃ速い
  • 計算性能の割に低価格 → 懐に優しい

DSP を使うとプロセッサを完全にコントロールできる利点があるが、その一方で CPU やメモリなどの計算機資源が乏しい環境で工夫しながら制御を実装する必要がある

デバッグのために DSP の変数 1 つ読み込んで表示するにしてもシリアル通信などを使ってパソコンに送信する必要がある

プログラムに変更を加える場合はパソコン側でクロスコンパイルして DSP に書き込み、再起動を行う必要がある

制御方式の検証を手早く行い場面では DSP を使うよりも ARCS6 を使う方が適している

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ARCS6 v.s. ROS / ROS2

ROS との違いでも書いたが、ROS / ROS2 はそのままではリアルタイム性がないので制御周期を一定にできないため、モーションコントロールなどのユースケースには適していない

ROS2 はリアルタイム性を考慮して設計されているが、そのためには Linux カーネルに RT-Preempt 等のパッチを適用することが要件となっている

Linux カーネルにパッチを適用すると安定性が損なわれ、制御コードの不備が OS の処理に影響を及ぼすことがある

下記は横倉先生の実体験に基づくコメント、苦労がにじみ出ている

でもリアルタイムカーネルのパッチを当てて動かすための戦いはもう疲れたので,現状の方法で問題が出ない限り自分ではやらないと思う…

ARCS6 は Linux カーネルにパッチを適用することなくリアルタイム性を確保できる点が ROS / ROS2 との違い

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ARCS6 のリアルタイム性について

  • ARCS6 は CPU コアの 1 つを占有することで非リアルタイム OS でリアルタイム性を実現している
  • この点については レクチャー PDF 資料の 8 ページ目の図がとてもわかりやすい
  • Linux カーネルにパッチを適用する必要が無いのでそれに伴う様々な副作用に悩むことから解放される
  • Linux カーネルにパッチを適用せず、十分にテストされた信頼のおけるカーネル上でできるだけリアルタイム性を守る、それが ARCS6 のリアルタイム性に対するアプローチ
  • ARCS6 はソフトリアルタイムシステムなので制御周期から逸脱する場合がある

https://www.sidewarehouse.net/arcs6/realtime.html

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ARCS6 を使ってできること

  • リアルタイムスレッドの実行
  • データ(例:センサ計測値)の保存と出力
  • アクチュエータパラメーター(例:位置、電流、推力)のリアルタイム表示とリアルタイム波形表示
  • 任意変数値のリアルタイム表示とリアルタイム波形表示
  • 変数の書き換え
  • 一時停止&再開
  • 制御周期の計測と統計表示(例:標準偏差、最大値、最小値)
  • 計算消費時間の計測
  • D/A コンバータ、A/D コンバータ、エンコーダカウンタ、シリアル通信ボード等の入出力機器のインタフェースクラス
  • 6軸力覚センサ用シリアル通信インターフェース
  • EtherCAT/UNINET通信対応
  • デバイスドライバ,カーネルモジュール開発支援機能(これについてはまだ理解が及んでいない)
  • モーションコントロールクラス(例:積分器,擬似微分器,PI/PD/PID/I-PD等々の制御器,位相補償器,各種オブザーバ,各種フィルタ,レギュレータ)
  • 汎用クラス(例:リングバッファ,統計処理,リミッタ,信号発生器,UDP送受信器,メルセンヌ・ツイスタ)
  • リアルタイムデバッグプリント機能,イベントログ機能,条件指定緊急停止機能
  • 行列計算(例:行列&ベクトルの加減乗演算,冪乗,LU/QR/コレスキー分解,SVD,逆行列,複素数行列,constexpr行列)
  • 連続系状態方程式のA行列とB行列の離散化,任意の連続系伝達関数の応答計算(これも理解が及んでいない)
  • 周波数特性測定のためのFRA(Frequency Response Analyzer)クラス(これも理解が及んでいない)
  • 単純/単層パーセプトロン,順伝播ニューラルネットワーク

基本的な機能と応用的な機能を分けるとわかりやすくなりそう