@@ -25,6 +25,7 @@ MODE_SPEEDL = 4
2525MODE_POSE = 5
2626MODE_FREEDRIVE = 6
2727MODE_TOOL_IN_CONTACT = 7
28+ MODE_TORQUE = 8
2829# Data dimensions of the message received on the reverse interface
2930REVERSE_INTERFACE_DATA_DIMENSION = 8
3031
@@ -70,6 +71,7 @@ JOINT_IGNORE_SPEED = 20.0
7071global violation_popup_counter = 0
7172global cmd_servo_state = SERVO_UNINITIALIZED
7273global cmd_servo_qd = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
74+ global cmd_tau = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
7375global cmd_servo_q = get_joint_positions()
7476global cmd_servo_q_last = cmd_servo_q
7577global cmd_twist = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
@@ -225,6 +227,22 @@ thread speedThread():
225227 stopj(STOPJ_ACCELERATION)
226228end
227229
230+ # Helpers for torque control
231+ def set_torque(tau):
232+ cmd_tau = tau
233+ control_mode = MODE_TORQUE
234+ end
235+
236+ thread torqueThread():
237+ textmsg("ExternalControl: Starting torque thread")
238+ while control_mode == MODE_TORQUE:
239+ tau = cmd_tau
240+ torque_command(tau, friction_comp=True)
241+ end
242+ textmsg("ExternalControl: torque thread ended")
243+ stopj(STOPJ_ACCELERATION)
244+ end
245+
228246# Function return value (bool) determines whether the robot is moving after this spline segment or
229247# not.
230248def cubicSplineRun(end_q, end_qd, time, is_last_point=False, is_first_point=False):
@@ -748,6 +766,8 @@ while control_mode > MODE_STOPPED:
748766 thread_move = run servoThread()
749767 elif control_mode == MODE_SPEEDJ:
750768 thread_move = run speedThread()
769+ elif control_mode == MODE_TORQUE:
770+ thread_move = run torqueThread()
751771 elif control_mode == MODE_FORWARD:
752772 kill thread_move
753773 stopj(STOPJ_ACCELERATION)
@@ -766,6 +786,9 @@ while control_mode > MODE_STOPPED:
766786 elif control_mode == MODE_SPEEDJ:
767787 qd = [params_mult[2] / MULT_jointstate, params_mult[3] / MULT_jointstate, params_mult[4] / MULT_jointstate, params_mult[5] / MULT_jointstate, params_mult[6] / MULT_jointstate, params_mult[7] / MULT_jointstate]
768788 set_speed(qd)
789+ elif control_mode == MODE_TORQUE:
790+ tau = [params_mult[2]/ MULT_jointstate, params_mult[3]/ MULT_jointstate, params_mult[4]/ MULT_jointstate, params_mult[5]/ MULT_jointstate, params_mult[6]/ MULT_jointstate, params_mult[7]/ MULT_jointstate]
791+ set_torque(tau)
769792 elif control_mode == MODE_FORWARD:
770793 if params_mult[2] == TRAJECTORY_MODE_RECEIVE:
771794 kill thread_trajectory
0 commit comments