1
0
mirror of https://gitlab.com/obbart/universal_robots_ros_driver.git synced 2026-04-10 10:00:48 +02:00

extrapolate on missing packages

This commit is contained in:
Felix Mauch
2019-05-13 15:26:26 +02:00
parent f3cdbac4c4
commit 35322d208b

View File

@@ -46,39 +46,54 @@ def myProg():
textmsg("steptime=", steptime) textmsg("steptime=", steptime)
MULT_jointstate = {{JOINT_STATE_REPLACE}} MULT_jointstate = {{JOINT_STATE_REPLACE}}
SERVO_UNINITIALIZED = -1
SERVO_IDLE = 0 SERVO_IDLE = 0
SERVO_RUNNING = 1 SERVO_RUNNING = 1
cmd_servo_state = SERVO_IDLE cmd_servo_state = SERVO_UNINITIALIZED
cmd_servo_q = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] cmd_servo_q = get_actual_joint_positions()
cmd_servo_q_last = get_actual_joint_positions()
def set_servo_setpoint(q): def set_servo_setpoint(q):
enter_critical enter_critical
cmd_servo_state = SERVO_RUNNING cmd_servo_state = SERVO_RUNNING
cmd_servo_q_last = cmd_servo_q
cmd_servo_q = q cmd_servo_q = q
exit_critical exit_critical
end end
def extrapolate():
enter_critical
diff = [cmd_servo_q[0] - cmd_servo_q_last[0], cmd_servo_q[1] - cmd_servo_q_last[1], cmd_servo_q[2] - cmd_servo_q_last[2], cmd_servo_q[3] - cmd_servo_q_last[3], cmd_servo_q[4] - cmd_servo_q_last[4], cmd_servo_q[5] - cmd_servo_q_last[5]]
cmd_servo_q_last = cmd_servo_q
cmd_servo_q = [cmd_servo_q[0] + diff[0], cmd_servo_q[1] + diff[1], cmd_servo_q[2] + diff[2], cmd_servo_q[3] + diff[3], cmd_servo_q[4] + diff[4], cmd_servo_q[5] + diff[5]]
exit_critical
return cmd_servo_q
end
thread servoThread(): thread servoThread():
state = SERVO_IDLE state = SERVO_IDLE
while True: while True:
enter_critical enter_critical
q = cmd_servo_q q = cmd_servo_q
do_brake = False do_extrapolate = False
if (state == SERVO_RUNNING) and (cmd_servo_state == SERVO_IDLE): if (cmd_servo_state == SERVO_IDLE):
do_brake = True do_extrapolate = True
end end
state = cmd_servo_state state = cmd_servo_state
cmd_servo_state = SERVO_IDLE cmd_servo_state = SERVO_IDLE
exit_critical exit_critical
if do_brake: if do_extrapolate:
textmsg("No new setpoint received. Stopping robot.") textmsg("No new setpoint received. Extrapolating.")
stopj(1.0) q = extrapolate()
sync() servoj(q, t=steptime, {{SERVO_J_REPLACE}})
elif state == SERVO_RUNNING: elif state == SERVO_RUNNING:
servoj(q, t=steptime, {{SERVO_J_REPLACE}}) servoj(q, t=steptime, {{SERVO_J_REPLACE}})
else: else:
textmsg("Should not be here")
sync() sync()
end end
end end
stopj(0.1)
end end
socket_open("{{SERVER_IP_REPLACE}}", {{SERVER_PORT_REPLACE}}, "reverse_socket") socket_open("{{SERVER_IP_REPLACE}}", {{SERVER_PORT_REPLACE}}, "reverse_socket")
@@ -87,7 +102,7 @@ def myProg():
params_mult = socket_read_binary_integer(6+1, "reverse_socket") params_mult = socket_read_binary_integer(6+1, "reverse_socket")
keepalive = params_mult[7] keepalive = params_mult[7]
while keepalive > 0: while keepalive > 0:
params_mult = socket_read_binary_integer(6+1, "reverse_socket", 0.012) params_mult = socket_read_binary_integer(6+1, "reverse_socket", steptime)
if params_mult[0] > 0: if params_mult[0] > 0:
keepalive = params_mult[7] keepalive = params_mult[7]
q = [params_mult[1] / MULT_jointstate, 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] q = [params_mult[1] / MULT_jointstate, 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]
@@ -96,9 +111,7 @@ def myProg():
# TODO: Extrapolation goes here # TODO: Extrapolation goes here
keepalive = keepalive - 1 keepalive = keepalive - 1
end end
sync()
end end
stopj(1.0)
sleep(.1) sleep(.1)
socket_close() socket_close()
kill thread_servo kill thread_servo
@@ -130,6 +143,7 @@ ur_driver::UrDriver::UrDriver(const std::string& ROBOT_IP)
std::ostringstream out; std::ostringstream out;
out << "lookahead_time=" << servoj_lookahead_time_ << ", gain=" << servoj_gain_; out << "lookahead_time=" << servoj_lookahead_time_ << ", gain=" << servoj_gain_;
prog.replace(prog.find(SERVO_J_REPLACE), SERVO_J_REPLACE.length(), out.str()); prog.replace(prog.find(SERVO_J_REPLACE), SERVO_J_REPLACE.length(), out.str());
prog.replace(prog.find(SERVO_J_REPLACE), SERVO_J_REPLACE.length(), out.str());
prog.replace(prog.find(SERVER_IP_REPLACE), SERVER_IP_REPLACE.length(), local_ip); prog.replace(prog.find(SERVER_IP_REPLACE), SERVER_IP_REPLACE.length(), local_ip);
prog.replace(prog.find(SERVER_PORT_REPLACE), SERVER_PORT_REPLACE.length(), std::to_string(reverse_port)); prog.replace(prog.find(SERVER_PORT_REPLACE), SERVER_PORT_REPLACE.length(), std::to_string(reverse_port));
size_t len = prog.size(); size_t len = prog.size();