从刚体工厂切换到多体工厂

Switching from Rigidbody plant to Multibody plant

在旧代码中,inverse_dynamics_controller和kuka_torque_controller之间曾经有一个select的选项。两者略有不同,kuka_torque_controller 的输入有一个 "Tau input"。 inverse_dynamics_controller 被 select 用于位置控制,其中 kuka_torque_controller 被 select 用于扭矩控制。

在 manipulation_station 的新代码中,为什么使用 kuka_torque_controller 的选项消失了,而 inverse_dynamics_controller 是唯一使用的控制器类型?这是否意味着操纵站仅用于位置控制而不用于扭矩控制?

如果没有,那么您将如何启用转矩控制?

以下代码来自kuka_simulation

// Adds a iiwa controller.
  StateFeedbackControllerInterface<double>* controller = nullptr;
  if (FLAGS_torque_control) {
    VectorX<double> stiffness, damping_ratio;
    SetTorqueControlledIiwaGains(&stiffness, &damping_ratio);
    stiffness = stiffness.replicate(num_iiwa, 1).eval();
    damping_ratio = damping_ratio.replicate(num_iiwa, 1).eval();
    controller = builder.AddController<KukaTorqueController<double>>(
        RigidBodyTreeConstants::kFirstNonWorldModelInstanceId, tree.Clone(),
        stiffness, damping_ratio);
  } else {
    VectorX<double> iiwa_kp, iiwa_kd, iiwa_ki;
    SetPositionControlledIiwaGains(&iiwa_kp, &iiwa_ki, &iiwa_kd);
    iiwa_kp = iiwa_kp.replicate(num_iiwa, 1).eval();
    iiwa_kd = iiwa_kd.replicate(num_iiwa, 1).eval();
    iiwa_ki = iiwa_ki.replicate(num_iiwa, 1).eval();
    controller = builder.AddController<InverseDynamicsController<double>>(
        RigidBodyTreeConstants::kFirstNonWorldModelInstanceId, tree.Clone(),
        iiwa_kp, iiwa_ki, iiwa_kd,
        false /* without feedforward acceleration */);
  }

谢谢

操纵站只是 multibodyplant 的包装器(它还添加了相机和对象等),就像我们在 MIT 操纵中使用它进行教学 class 一样。在那个用例中,我们总是运行 kuka处于联合阻抗控制模式;德雷克中的逆动力学块几乎完成了相同的工作。 (其实我打算尽快用合适的联合阻抗控制器来代替它,但它还不是当务之急)。

但是如果你自己使用multibodyplant,或者愿意change/copy操纵站代码,那么你绝对可以给机器人发送扭矩命令。 (这就是逆向动力学控制器现在正在做的事情)