関節の重み付け

この機能はPostureTaskにのみ適用されます。これは、他のタスクの関節選択機能や次元重み機能と似ています。

この機能を実現するには、JointStiffnessを指定します。または、JointGainsを使用して重要でない減衰値を指定することもできます。

この機能は、タスクの他の部分に影響を与えることなく一部の関節をより正確に指定角度に合わせたい場合に便利です。関節を制御するタスクは以下のように分類されます。

  • 関節パラメーターの指定などによって、関節角度を直接指定して関節を制御するタスク
  • 一部の関節を制御しないタスク(すなわち、JointSelectorを使用する場合)。制御しない関節の角度を維持したい場合は、それらの関節の剛性を高める必要がある

使用方法

まず、重み5、剛性1でPostureTaskを作成します。次に、右腕の関節をいくつか選択し、それらの剛性を4にします。


auto postureTask = std::make_shared<mc_tasks::PostureTask>(solver(), 0, 1, 5);
std::vector<tasks::qp::JointStiffness> stiffnesses = {{"RARM_JOINT3", 4.},
                                                      {"RARM_JOINT4", 4.}
                                                      {"RARM_JOINT5", 4.}
                                                      {"RARM_JOINT6", 4.}};

postureTask.jointsStiffness(solver(), stiffnesses);

この場合、通常の関節の減衰値は2に設定され、選択した関節の減衰値は4に設定されます。

これらの関節の減衰値を、ユーザーが定義した他の値に設定したい場合は、JointGainsを使用します。なお、JointGainsは、コンストラクターによる生成時に剛性のみを指定することができます。その場合、重要な減衰値にはデフォルト値が使用されます。今度は、剛性を4に設定し、減衰値を10に設定します。


std::vector<tasks::qp::JointGains> gains = {{"RARM_JOINT3", 4., 10.},
                                            {"RARM_JOINT4", 4., 10.}
                                            {"RARM_JOINT5", 4., 10.}
                                            {"RARM_JOINT6", 4., 10.}};

postureTask.jointsGains(solver(), gain);