004 - vnoidの概要


今回の内容

本チャレンジでは、初心者の方でも簡単に人形ロボットの歩行制御ができるように
vnoidというサンプルライブラリが用意されております。

今回はvnoidの概要を説明します。


vnoidパッケージとは

vnoidパッケージとは、
人型ロボットの基本的な機能を理解するためのサンプルコード集です。

各機能はC/C++言語により、100行程度で記述されております。

コードの可読性が高く、自ら拡張しやすいサンプルだと思います。

環境構築の記事でも紹介したように、
vnoidの内容にしたがう歩行動作を
Choreonoidでシミュレーションできます。


vnoidパッケージの内容

vnoidパッケージには、以下の機能が含まれています。

・順運動学計算(fksolver)
・逆運動学計算(iksolver)
・着地ポーズ計画(footstep_planner)
・歩行制御(stepping_controller)
・バランス制御(stabilizer)

これらの機能を使って人型ロボットの運動制御ができます。


人型ロボットの運動計画の大まかな流れ

以下がvnoidにおける人型ロボットの運動計画の流れです。

  1. Robot::Sense
    ロボットの基準座標を置くベースリンクの位置・姿勢を計測する。
    各関節の回転変位を計測する。
    足部に取り付けた6軸力センサにより、
    足部に作用する床反力と床反モーメントを計測する。

  2. fk_solver
    順運動学を解き、各リンク座標の位置・姿勢を求める。
    各リンクの重さと重心位置の情報を用いてロボットの重心位置を計算する。

  3. footstep_planner
    足の着地ポーズ(※1)を計画する。
    計画着地ポーズに基づき、各歩行ステップの目標ZMP・DCM(※2)を計算する。
    (※1 ポーズとは位置・姿勢をまとめたものです) (※2 ZMPや、DCMについては別の記事で解説します。)

  4. stepping_controller
    各離散時刻における支持足、振り足のポーズを更新する。
    振り足のポーズはサイクロイド曲線軌道をベースに更新されるが、
    stabilizerの着地修正が反映される。

  5. stabilizer
    歩行安定化のために、ベースリンクを直立に保つような着地修正を行う。
    目標床反力を実現できるように支持足のポーズを微調整する(床反力制御)。

  6. ik_solver
    手足の位置・姿勢情報を用いて逆運動学を解き、各関節の目標回転変位を計算する。
    (※ デフォルトでは手の位置・姿勢は常にベースリンクの真横に固定されています。)

  7. Robot::Actuate
    関節の目標回転変位を実現するのに必要なトルクを計算し、関節に出力する。


まとめ・次回予告

今回はvnoidパッケージの概要について説明しました。

次回: 005 - 関節を動かしてみる