0

在旧代码中,曾经有一个选项可以在 inverse_dynamics_controller 和 kuka_torque_controller 之间进行选择。两者略有不同,其中 kuka_torque_controller 的输入具有“Tau 输入”。inverse_dynamics_controller 被选择用于位置控制,而 kuka_torque_controller 被选择用于扭矩控制。

在操作站的新代码中,为什么使用 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 */);
  }

谢谢

4

1 回答 1

0

操纵站只是多体植物(它还添加了摄像头和物体等)的一个包装器,就像我们在 MIT 操纵课中使用它进行教学一样。在那个用例中,我们总是在它的联合阻抗控制模式下运行 kuka;德雷克中的逆动力学块几乎完成了相同的工作。(我实际上计划很快用合适的关节阻抗控制器替换它,但这还不是首要任务)。

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

于 2020-01-12T00:33:03.187 回答