@@ -25,6 +25,7 @@ MODE_SPEEDL = 4
25
25
MODE_POSE = 5
26
26
MODE_FREEDRIVE = 6
27
27
MODE_TOOL_IN_CONTACT = 7
28
+ MODE_TORQUE = 8
28
29
# Data dimensions of the message received on the reverse interface
29
30
REVERSE_INTERFACE_DATA_DIMENSION = 8
30
31
@@ -70,6 +71,7 @@ JOINT_IGNORE_SPEED = 20.0
70
71
global violation_popup_counter = 0
71
72
global cmd_servo_state = SERVO_UNINITIALIZED
72
73
global 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]
73
75
global cmd_servo_q = get_joint_positions()
74
76
global cmd_servo_q_last = cmd_servo_q
75
77
global cmd_twist = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
@@ -225,6 +227,22 @@ thread speedThread():
225
227
stopj(STOPJ_ACCELERATION)
226
228
end
227
229
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
+
228
246
# Function return value (bool) determines whether the robot is moving after this spline segment or
229
247
# not.
230
248
def cubicSplineRun(end_q, end_qd, time, is_last_point=False, is_first_point=False):
@@ -748,6 +766,8 @@ while control_mode > MODE_STOPPED:
748
766
thread_move = run servoThread()
749
767
elif control_mode == MODE_SPEEDJ:
750
768
thread_move = run speedThread()
769
+ elif control_mode == MODE_TORQUE:
770
+ thread_move = run torqueThread()
751
771
elif control_mode == MODE_FORWARD:
752
772
kill thread_move
753
773
stopj(STOPJ_ACCELERATION)
@@ -766,6 +786,9 @@ while control_mode > MODE_STOPPED:
766
786
elif control_mode == MODE_SPEEDJ:
767
787
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]
768
788
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)
769
792
elif control_mode == MODE_FORWARD:
770
793
if params_mult[2] == TRAJECTORY_MODE_RECEIVE:
771
794
kill thread_trajectory
0 commit comments