В старом коде раньше была возможность выбора между 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 */);
}
Спасибо