Open
Description
Version information
- TDK: [v1.3 & v1.2.2]
- Robot software: [v3.8]
- OS: [Ubuntu 22.04 x64]
Describe the bug
Calling the Stop()
function in all teleop APIs results in a runtime error due to control mode mismatch.
Steps to reproduce
- For
cartesian_teleop_under_lan
cart_teleop.Start();
cart_teleop.SetCartesianImpedance(robot_pair_idx, kCartStiffnessRatio, kCartDampingRatio);
cart_teleop.Activate(robot_pair_idx, 1);
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
cart_teleop.Stop();
Output:
[2025-03-28 17:34:30.949] [info] [flexiv::tdk::CartesianTeleopLAN::Start] Teleoperation control loop has started
[2025-03-28 17:34:31.968] [info] [flexiv::rdk::Robot] Control mode switched to [IDLE]
terminate called after throwing an instance of 'std::logic_error'
what(): [flexiv::rdk::Robot::StreamCartesianMotionForce] Robot is not in an applicable control mode
Aborted
- For the joint_teleop_under_lan
joint_teleop.Start();
joint_teleop.SetJointImpedance(robot_pair_idx, kJointStiffnessRatio);
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
joint_teleop.Stop();
Output:
[2025-03-28 17:41:15.603] [info] [flexiv::rdk::Robot] Control mode switched to [IDLE]
terminate called after throwing an instance of 'std::logic_error'
what(): [flexiv::rdk::Robot::StreamJointPosition] Robot is not in an applicable control mode
Aborted
- For high_transparency_teleop
htt.Init();
htt.Start();
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
htt.Stop();
Result:
[2025-03-28 17:38:04.214] [info] [flexiv::tdk::TransparentCartesianTeleopLAN::Start] Teleoperation control loop has started
terminate called after throwing an instance of 'std::logic_error'
what(): [flexiv::tdk::TransparentCartesianTeleopLAN] Robot is not in an applicable control mode
Aborted
Expected behavior
Calling Stop() at anytime should gracefully terminate the teleop session without throwing exceptions, regardless of the current control mode.