在旧代码中,曾经有一个选项可以在 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 */);
}
谢谢