JAXON2サンプルについて

JAXON2は,東京大学の情報システム工学研究室(JSK)によって開発された,等身大ヒューマノイドロボットです.JAXON2のオリジナルモデルは,クリエイティブ・コモンズライセンス(Attribution-ShareAlike 4.0)のもと,JSKのGithubリポジトリ にて公開されています. 本サンプルのモデルは,上記のモデルを,JSKの許諾のもとで,Choreonoid用のモデルとして再編集したものです.

さらに本サンプルでは,体幹コンプライアンス制御によるZMP規範のの立位安定化制御と歩行安定化制御の実装例を提供しています.

../_images/jaxon2.png

ビルド方法

本サンプルをビルドするためには, CMakeの BUILD_JAXON2_SAMPLES フラグを有効にする必要があります.cmakeコマンドを実行する際にオプションとして -DBUILD_JAXON2_SAMPLES=ON を追加するか,ccmakeコマンドを用いてGUI上でフラグを有効化する必要があります.

サンプルプロジェクトの紹介

以下の3つのサンプルプロジェクトが用意されています.いずれも 配置が決まり次第編集 にあります.

  • Jaxon2WalkPatternController.cnoid

  • Jaxon2WalkStabilizer.cnoid

  • Jaxon2StandingStabilizer.cnoid

Jaxon2WalkPatternController.cnoid では,JAXON2が予め用意された歩行パターンを,理想的な関節位置制御のもとで実行します.各関節が目標角度に対して遅れなく追従するため,用意された歩行パターンを忠実に再現します.したがって,歩行パターンが良くできていれば,歩行動作が実現されます.一方で,腕や胴体等に外力が加わるなど,予期せぬ事象が発生したときは,バランスを取る制御が行われていないため,簡単に転倒します.

Jaxon2WalkStabilizer.cnoid では,JAXON2の各関節はPD制御によって目標位置に追従します.関節角の振る舞いは慣性等の力学的特性が反映され,追従には遅れや誤差が生じる可能性のある,より実際のロボットに近いものとなっています.そこで,ここで用いられているコントローラには,バランスを取るための安定化制御が実装されており,関節が理想的でない動きをしたとしても,歩行ができるようになっています.安定化制御の詳しい内容については次節で説明します.

Jaxon2StandingStabilizer.cnoid では,JAXON2が,安定化制御が有効な状態で立ち続けます.ロボットの上で右クリックをし,編集モードを選択してください.すると,ロボットの各リンクをドラッグすることで,外力を加えることができるようになります.もちろん安定化制御には限界がありますので,例えば胴体や頭部に大きな力を加えたり,短い時間で繰り返し力を加えたりすると転倒します.しかしながら,多くの場合は,安定化制御によって,ゆっくりと元の姿勢に収束していく様子が観察できるでしょう.

体幹位置コンプライアンス制御に基づく安定化

本サンプルの安定化制御則として用いられている,体幹位置コンプライアンス制御について紹介します.

水平面に垂直な面での重心の位置を \(x\) とし,床反力の作用中心であるZMP(ゼロ・モーメント・ポイント)を \(p\) とすると,次のZMP方程式が成り立ちます.

\[p = x - \frac{z_c}{g} \ddot{x}\]

ここで \(z_c\) は床面からの重心高さで一定と仮定されており, \(g\) は重力加速度定数を表します.この方程式は,重心の加速度 \(\ddot{x}\) を入力として見れば,線形システムとして,次の入力により,フィードバック安定化を行うことができます.

\[\ddot{x} = - k_1 p - k_2 x - k_3 \dot{x}\]

実際にフィードバック安定化を達成するには,定数 \(k_1, \ k_2, \ k_3\) はいくつかの条件を満たす必要がありますが,ここではその説明は省略します.このフィードバックを適用したZMP方程式は,次のように記述することができます.

\[p = x - \frac{z_c}{g} \left( - k_1 p - k_2 x - k_3 \dot{x} \right)\]
\[\Leftrightarrow \dot{x} = \frac{1}{k_3} \left( \frac{g}{z_c} - k_1 \right) p - \frac{1}{k_3} \left( \frac{g}{z_c} + k_2 \right) x\]

この方程式を満たすような重心速度 \(\dot{x}\) を数値積分し,重心の位置の目標値を与えたものが,本サンプルの安定化制御則となっています.ただし実際には,重心の位置を制御する代わりに,体幹(腰リンク)を制御するという近似を行っています.

なおプログラム内では,ZMP,重心位置の係数をそれぞれ, \(K_1 = \frac{1}{k_3} \left( \frac{g}{z_c} - k_1 \right), \ K_2 = \frac{1}{k_3} \left( \frac{g}{z_c} + k_2 \right)\) とおいてこれを定義しており,またロボットの前後方向と左右方向それぞれについて安定化を行っています.シンプルな立位安定化のプログラムは, 配置が決まり次第編集 から見ることができます.

注意:本説明は長阪らの論文とは異なる解釈により制御則を導いています.ご興味のある方は,梶田らによる書籍の第4章をご参照ください.

参考文献

  • 小島ら:高速大出力ヒューマノイドの研究用プラットフォームJAXONの開発,日本ロボット学会誌,34巻7号,2016 ( J-STAGE ).

  • 長阪,稲葉,井上:体幹位置コンプライアンス制御を用いた人間型ロボットの歩行安定化,第17回日本ロボット学会学術講演会予稿集,pp. 1193-1194,1999.

  • 長阪:動力学フィルタによる人間型ロボットの全身運動生成,第6章 幾何拘束型動力学フィルタによる運動生成,東京大学博士論文,2000.

  • 梶田(編著):ヒューマノイドロボット 改訂2版,第4章 2足歩行,オーム社,2020.