mc_rtc::Configuration
設定このページでは、本フレームワークで用意されているサンプルコントローラーのリストに加えて、各コントローラーの実行方法と各コントローラーで実現できる内容について概説します。より複雑なコントローラーについては、各コントローラーのチュートリアルのページで詳しく説明されています。
Posture
(姿勢制御)コントローラー(オンラインデモを参照)は、本フレームワーク内で最もシンプルなコントローラーです。このコントローラーは、以下のタスクと制約条件を二次計画法ソルバーに追加します。
タスク
mc_tasks::PostureTask
:
指定された関節の位置を、ロボットの各目標自由度として設定します。このコントローラーは、デフォルトでは、エンコーダー値を利用できる場合はロボットの現在のエンコーダー値を目標として設定し、そうでない場合はデフォルトの姿勢(mc_rbdyn::RobotModule::stance())を目標として設定します。また、GUIのスライダーを使用して関節を動かすことができます(Tasks -> posture_jvrc1 -> Target
)。制約条件
mc_solver::ContactConstraint
: このコントローラーには、必ず接触面制約条件を設定する必要があります。ただし、接触面セットが空でも構いません。mc_solver::KinematicsConstraint
: ジョイントの可動範囲に関する制約条件mc_solver::CollisionsConstraint
: 自己衝突回避に関する制約条件mc_solver::CompoundJointConstraint
: 複合関節(ある関節の可動範囲が別の関節の値によって決まる関節)の関節可動範囲を処理します。サポートされているロボット:
本フレームワークでサポートされているすべてのロボット。カスタムロボットの場合は、必要に応じて、CompoundJointConstraint
に関する衝突メッシュのペアと可動範囲から成るデフォルトのセットを定義する必要があります(新しいロボットの組み込みに関するチュートリアルを参照)。
実行方法: このコントローラーを実行するには、mc_rtcの設定でこのコントローラーを指定し、任意のインターフェイスを使用してコントローラーを実行します。
MainRobot: JVRC1
Enabled: Posture
CoM
(質量中心)サンプルコントローラー(オンラインデモを参照)は、前述のPosture
コントローラーと同様のタスクと制約条件が定義されています。
タスク
mc_tasks::PostureTask
: すべての関節にデフォルトの目標を設定するための姿勢制御タスク(このタスクには低い重みが設定されています)mc_tasks::CoMTask
: ロボットの質量中心を制御するタスク。デフォルトでは、このコントローラーは現在のタスクの位置を目標として設定します。GUI(RViz)の対話形式のマーカーを使用して、この目標を動かすことができます。*制約条件
mc_solver::ContactConstraint
: 左右の足の裏と地面の環境との間に接触面を追加します。mc_solver::DynamicsConstraint
: この制約条件を使用すると、mc_solver::KinematicsConstraint
で指定された関節可動範囲の制約条件に加え、関節のトルクと摩擦円錐の計算が可能となります。mc_solver::CollisionsConstraint
: 自己衝突回避に関する制約条件mc_solver::CompoundJointConstraint
: 複合関節(ある関節の可動範囲が別の関節の値によって決まる関節)の関節可動範囲を処理します。サポートされているロボット:
本フレームワークでサポートされているすべての二足歩行ロボット。カスタムロボットの場合は、ロボットの記述においてLeftFoot
(左足)とRightFoot
(右足)の裏の面を定義する必要があります。
実行方法: このコントローラーを実行するには、mc_rtcの設定でこのコントローラーを指定し、任意のインターフェイスを使用してコントローラーを実行します。
MainRobot: JVRC1
Enabled: CoM
EndEffector
(エンドエフェクター)コントローラー(オンラインデモを参照)は、前述のCoM
コントローラーと同じタスクと制約条件が定義されています。このコントローラーでは、質量中心の位置の制御に加えて、ロボットのエンドエフェクターの位置と向きを制御するためのmc_tasks::EndEffectorTaskが追加されています。
サポートされているロボット:
本フレームワークでサポートされているすべての二足歩行ロボット。カスタムロボットの場合は、ロボットの記述においてLeftFoot
とRightFoot
の裏とr_wrist
ボディを定義する必要があります。
実行方法: このコントローラーを実行するには、mc_rtcの設定でこのコントローラーを指定し、任意のインターフェイスを使用してコントローラーを実行します。
MainRobot: JVRC1
Enabled: EndEffector
Text
(テキスト)サンプルコントローラーでは、YAMLで記述された設定からタスクと制約条件を読み込むためのmc_tasks::MetaTaskLoader
とmc_solver::ConstraintSetLoader
の使い方が示されています。
実行方法: このコントローラーを実行するには、mc_rtcの設定でこのコントローラーを指定し、任意のインターフェイスを使用してコントローラーを実行します。
MainRobot: JVRC1
Enabled: Text
このコントローラーのデフォルトの設定は、EndEffector
コントローラーと似ています。また、~/.config/mc_rtc/controllers/Text.yaml
に独自の設定を記述できます。例えば以下の設定は、CoM
コントローラーを再度構成して
Text:
constraints:
- type: dynamics
- type: contact
- type: collision
- type: compoundJoint
tasks:
- type: com
weight: 1000
above: [LeftFoot]
contacts:
- r1Surface: LeftFoot
r2Surface: AllGround
isFixed: false
- r1Surface: RightFoot
r2Surface: AllGround
isFixed: false
Admittance
(アドミッタンス制御)サンプルコントローラーでは、所定の力でJVRC1
ロボットを壁に押し付けるシンプルな有限オートマトンの例を使用して、mc_tasks::force::AdmittanceTask
の使い方が示されています。
詳しい説明: アドミッタンス制御のサンプルコントローラーのチュートリアルを参照してください。
サポートされているロボット: JVRC1
に遷移します。
前提条件: ForceSensorCalibrationコントローラーを使用して手の力覚センサーが事前に較正されているか確認してください。
実行方法
このコントローラーを実行するには、mc_rtcの設定でこのコントローラーを指定し、任意の動力学的シミュレーション(Choreonoidなど)使用してコントローラーを実行します。
参考
より高度な例については、ExternalForcesのサンプルを参照してください。
MainRobot: JVRC1
Enabled: AdmittanceSample
Impedance
(インピーダンス制御)サンプルコントローラーでは、ロボットのエンドエフェクターの位置と力を同時に制御するためのmc_tasks::force::ImpedanceTask
の使い方が示されています。
サポートされているロボット: JVRC1Fixed
に遷移します。
前提条件: ForceSensorCalibrationコントローラーを使用して手の力覚センサーが事前に較正されているか確認してください。
実行方法
このコントローラーを実行するには、mc_rtcの設定でこのコントローラーを指定し、任意の動力学的シミュレーション(Choreonoidなど)使用してコントローラーを実行します。Choreonoidでは、動いている手をクリックしてドラッグすることで、外力を加えることができます。このとき、外力を加えられた手は、所定の範囲内でユーザーの操作に追従します。その後、外力を解放すると、それまでの移動経路をたどって所定の位置に手が戻ります。なお、GUIを使用して、フリーな状態のエンドエフェクターにmc_tasks::force::ImpedanceTask
を追加できます(Global -> Add Tasks -> ImpedanceTask
)。
MainRobot: JVRC1Fixed
Enabled: Impedance
LIPMStabilizer
(LIPMスタビライザー)サンプルコントローラーでは、バランスを取りながら立って前進するロボットを実現するシンプルな準静的有限オートマトンの例を使用して、mc_tasks::StabilizerTaskとこのタスクの実現に役立つ有限オートマトン状態mc_state::StabilizerStandingStateの使い方が示されています。
詳しい説明: LIPMスタビライザーのチュートリアルを参照してください。
サポートされているロボット: 本フレームワークでサポートされているすべての二足歩行ロボット。
実行方法
このコントローラーを実行するには、mc_rtcの設定でこのコントローラーを指定し、任意の動力学的シミュレーション(Choreonoidなど)使用してコントローラーを実行します。
MainRobot: JVRC1
Enabled: LIPMStabilizer
ExternalForces
(外力)サンプルコントローラーでは、所定の力で壁を押すJVRC1
ロボットを実現するシンプルな有限オートマトンの例を使用して、指定された外力を行使する二足歩行ロボットをmc_tasks::lipm_stabilizer::StabilizerTaskとmc_tasks::force::ImpedanceTask
で実現する方法が示されています。
サポートされているロボット: JVRC1
に遷移します。
前提条件: ForceSensorCalibrationコントローラーを使用して手の力覚センサーが事前に較正されているか確認してください。
実行方法
このサンプルを実行するには、力覚センサーをシミュレート可能な動力学的シミュレーターが必要です。このチュートリアルは、mc_openrtm、Choreonoid、それに本フレームワークで用意されたシミュレーションファイルsim_mc_wall.cnoid
を使用することを前提としています。他のシミュレーターを使用する場合は、必要に応じて命令を変更し、ロボットと壁が55cm
離れて配置されているシーンを作成してください。
mc_rtcの設定でこのコントローラーを指定し、Choreonoidでコントローラーを実行してください。このロボットは、両手を壁に触れた後、前に倒れながら、指定された正弦波状の外力を壁に行使します。
MainRobot: JVRC1
Enabled: ExternalForces