JAXON2サンプル

Choreonoidでは、東京大学情報システム工学研究室(JSK)によって開発された等身大ヒューマノイドロボット "JAXON2" のモデルを利用することができます。このモデルとサンプル一式のリポジトリについて、Githubの以下のリポジトリで公開しています。

このモデルで歩行動作を行なうサンプルとして、体幹コンプライアンス制御によるZMP規範の立位安定化制御と歩行安定化制御の実装例も提供しています。

なお、JAXON2のオリジナルモデルはクリエイティブ・コモンズライセンス(Attribution-ShareAlike 4.0)のもと、JSKのGithubリポジトリ にて公開されています。 本サンプルのモデルは、上記のモデルをJSKの許諾のもとでChoreonoid用のモデルとして再編集したものです。

../_images/jaxon2.png

利用方法

Choreonoid本体のextディレクトリ以下にjaxon2-draftのリポジトリをcloneします。

cd Choreonoid本体のソースディレクトリ/ext
git clone https://github.com/choreonoid/jaxon2-draft.git

Choreonoid本体のビルド時にCMakeの BUILD_JAXON2_SAMPLES オプションをONにしておくと、JAXON2のモデルやサンプルがインストールされます。cmakeコマンドの引数として -DBUILD_JAXON2_SAMPLES=ON を追加するか、ccmakeコマンドを用いてGUI上でこのオプションをONにしてください。

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

以下の3つのサンプルプロジェクトが用意されています。いずれもjaxon2-draftリポジトリの "sample" ディレクトリに格納されています。

  • Jaxon2WalkPatternController.cnoid

  • Jaxon2WalkStabilizer.cnoid

  • Jaxon2StandingStabilizer.cnoid

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

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

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

注釈

Jaxon2WalkPatternControllerとJaxon2WalkStabilizerで参照している歩行動作データは、Choreonoidの動作振付機能を用いて作成しました。この動作データを編集するプロジェクトとして、Jaxon2SampleWalkPattern.cnoidというプロジェクトも用意しています。このプロジェクトを利用する場合は、Choreonoid本体のビルド時に BUILD_POSE_SEQ_PLUGINBUILD_BALANCER_PLUGIN をONにして、PoseSeqプラグインとBalancerPluginが有効になるようにしてください。

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

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

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

p=xzcgx¨

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

x¨=k1pk2xk3x˙

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

p=xzcg(k1pk2xk3x˙)
x˙=1k3(gzck1)p1k3(gzc+k2)x

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

なおプログラム内では、ZMP、重心位置の係数をそれぞれ、 K1=1k3(gzck1), K2=1k3(gzc+k2) とおいてこれを定義しており、またロボットの前後方向と左右方向それぞれについて安定化を行っています。シンプルな立位安定化のコードは、samples以下の "Jaxon2StandingStabilizer.cpp" もしくは "Jaxon2WalkStabilizer.cpp" に実装されています。

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

参考文献

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

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

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

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