diff --git a/ur_driver/prog b/ur_driver/prog index 572a09eb4bab511685a662acc9b020311870903a..b06e81fee7f7c09e2916ff1e2a8bd3a126acce68 100644 --- a/ur_driver/prog +++ b/ur_driver/prog @@ -100,17 +100,11 @@ def driverProg(): def send_io_state(): enter_critical socket_send_int(MSG_GET_IO) - socket_send_int(1*get_digital_in(0) + 2*get_digital_in(1) + 4 * get_digital_in(2) + 8 * get_digital_in(3) + 16 * get_digital_in(4) + 32 * get_digital_in(5) + 64 * get_digital_in(6) + 128 * get_digital_in(7) + 256 * get_digital_in(8) + 512 * get_digital_in(9)) - socket_send_int(1*get_digital_out(0) + 2*get_digital_out(1) + 4 * get_digital_out(2) + 8 * get_digital_out(3) + 16 * get_digital_out(4) + 32 * get_digital_out(5) + 64 * get_digital_out(6) + 128 * get_digital_out(7) + 256 * get_digital_out(8) + 512 * get_digital_out(9)) - ####socket_send_int(pow(2,0)*get_flag(0) + pow(2,1)*get_flag(1) + pow(2,2)*get_flag(2) + pow(2,3)*get_flag(3) + pow(2,4)*get_flag(4) + pow(2,5)*get_flag(5) + pow(2,6)*get_flag(6) + pow(2,7)*get_flag(7) + pow(2,8)*get_flag(8) + pow(2,9)*get_flag(9) + pow(2,10)*get_flag(10) + pow(2,11)*get_flag(11) + pow(2,12)*get_flag(12) + pow(2,13)*get_flag(13) + pow(2,14)*get_flag(14) + pow(2,15)*get_flag(15) + pow(2,16)*get_flag(16) + pow(2,17)*get_flag(17) + pow(2,18)*get_flag(18) + pow(2,19)*get_flag(19) + pow(2,20)*get_flag(20) + pow(2,21)*get_flag(21) + pow(2,22)*get_flag(22) + pow(2,23)*get_flag(23) + pow(2,24)*get_flag(24) + pow(2,25)*get_flag(25) + pow(2,26)*get_flag(26) + pow(2,27)*get_flag(27) + pow(2,28)*get_flag(28) + pow(2,29)*get_flag(29) + pow(2,30)*get_flag(30) + pow(2,31)*get_flag(31)) - #socket_send_int(1*get_flag(0) + 2*get_flag(1) + 4*get_flag(2) + 8*get_flag(3) + 16*get_flag(4) + 32*get_flag(5) + 64*get_flag(6) + 128*get_flag(7)) - #socket_send_int(1*get_flag(8) + 2*get_flag(9) + 4*get_flag(10) + 8*get_flag(11) + 16*get_flag(12) + 32*get_flag(13) + 64*get_flag(14) + 128*get_flag(15)) - #socket_send_int(1*get_flag(16) + 2*get_flag(17) + 4*get_flag(18) + 8*get_flag(19) + 16*get_flag(20) + 32*get_flag(21) + 64*get_flag(22) + 128*get_flag(23)) - #socket_send_int(1*get_flag(24) + 2*get_flag(25) + 4*get_flag(26) + 8*get_flag(27) + 16*get_flag(28) + 32*get_flag(29) + 64*get_flag(30) + 128*get_flag(31)) - socket_send_int(get_analog_out(0) * MULT_analog) - socket_send_int(get_analog_out(1) * MULT_analog) - socket_send_int(get_analog_in(0) * MULT_analog) - socket_send_int(get_analog_in(1) * MULT_analog) + ###socket_send_int(pow(2,0)*get_flag(0) + pow(2,1)*get_flag(1) + pow(2,2)*get_flag(2) + pow(2,3)*get_flag(3) + pow(2,4)*get_flag(4) + pow(2,5)*get_flag(5) + pow(2,6)*get_flag(6) + pow(2,7)*get_flag(7) + pow(2,8)*get_flag(8) + pow(2,9)*get_flag(9) + pow(2,10)*get_flag(10) + pow(2,11)*get_flag(11) + pow(2,12)*get_flag(12) + pow(2,13)*get_flag(13) + pow(2,14)*get_flag(14) + pow(2,15)*get_flag(15) + pow(2,16)*get_flag(16) + pow(2,17)*get_flag(17) + pow(2,18)*get_flag(18) + pow(2,19)*get_flag(19) + pow(2,20)*get_flag(20) + pow(2,21)*get_flag(21) + pow(2,22)*get_flag(22) + pow(2,23)*get_flag(23) + pow(2,24)*get_flag(24) + pow(2,25)*get_flag(25) + pow(2,26)*get_flag(26) + pow(2,27)*get_flag(27) + pow(2,28)*get_flag(28) + pow(2,29)*get_flag(29) + pow(2,30)*get_flag(30) + pow(2,31)*get_flag(31)) + socket_send_int(1*get_flag(0) + 2*get_flag(1) + 4*get_flag(2) + 8*get_flag(3) + 16*get_flag(4) + 32*get_flag(5) + 64*get_flag(6) + 128*get_flag(7)) + socket_send_int(1*get_flag(8) + 2*get_flag(9) + 4*get_flag(10) + 8*get_flag(11) + 16*get_flag(12) + 32*get_flag(13) + 64*get_flag(14) + 128*get_flag(15)) + socket_send_int(1*get_flag(16) + 2*get_flag(17) + 4*get_flag(18) + 8*get_flag(19) + 16*get_flag(20) + 32*get_flag(21) + 64*get_flag(22) + 128*get_flag(23)) + socket_send_int(1*get_flag(24) + 2*get_flag(25) + 4*get_flag(26) + 8*get_flag(27) + 16*get_flag(28) + 32*get_flag(29) + 64*get_flag(30) + 128*get_flag(31)) socket_send_int(get_analog_in(2) * MULT_analog) socket_send_int(get_analog_in(3) * MULT_analog) exit_critical diff --git a/ur_driver/src/ur_driver/driver.py b/ur_driver/src/ur_driver/driver.py index a0b1fc15e400ab07e38fdc27b593421fa160da93..352af1947a937e4ed906824de69d7b0bf6814493 100755 --- a/ur_driver/src/ur_driver/driver.py +++ b/ur_driver/src/ur_driver/driver.py @@ -58,6 +58,7 @@ MULT_jointstate = 10000.0 MULT_time = 1000000.0 MULT_blend = 1000.0 MULT_analog = 1000000.0 +MULT_analog_robotstate = 0.1 #Bounds for SetPayload service MIN_PAYLOAD = 0.0 @@ -86,6 +87,7 @@ connected_robot_cond = threading.Condition(connected_robot_lock) pub_joint_states = rospy.Publisher('joint_states', JointState) pub_wrench = rospy.Publisher('wrench', WrenchStamped) pub_io_states = rospy.Publisher('io_states', IOStates) +pub_io_states2 = rospy.Publisher('io_states2', IOStates) #dump_state = open('dump_state', 'wb') class EOF(Exception): pass @@ -202,6 +204,36 @@ class URConnection(object): msg.effort = [0]*6 pub_joint_states.publish(msg) self.last_joint_states = msg + + # Use information from the robot state packet to publish IOStates + msg = IOStates() + #gets digital in states + for i in range(0, 10): + msg.digital_in_states.append(DigitalIn(i, (state.masterboard_data.digital_input_bits & (1<<i))>>i)) + #gets digital out states + for i in range(0, 10): + msg.digital_out_states.append(DigitalOut(i, (state.masterboard_data.digital_output_bits & (1<<i))>>i)) + #gets analog_in[0] state + inp = state.masterboard_data.analog_input0 / MULT_analog_robotstate + msg.analog_in_states.append(Analog(0, inp)) + #gets analog_in[1] state + inp = state.masterboard_data.analog_input1 / MULT_analog_robotstate + msg.analog_in_states.append(Analog(1, inp)) + #gets analog_out[0] state + inp = state.masterboard_data.analog_output0 / MULT_analog_robotstate + msg.analog_out_states.append(Analog(0, inp)) + #gets analog_out[1] state + inp = state.masterboard_data.analog_output1 / MULT_analog_robotstate + msg.analog_out_states.append(Analog(1, inp)) + #print "Publish IO-Data from robot state data" + pub_io_states.publish(msg) + + # Notes: + # - analog_input2 and analog_input3 are within ToolData + # - Where are the flags coming from? + # + # - Shall we have appropriate ur_msgs definitions in order to reflect MasterboardData, ToolData,...? + # Updates the state machine that determines whether we can program the robot. can_execute = (state.robot_mode_data.robot_mode in [RobotMode.READY, RobotMode.RUNNING]) @@ -353,81 +385,39 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler): #gets all IO States and publishes them into a message elif mtype == MSG_GET_IO: - #gets digital in states - while len(buf) < 4: - buf = buf + self.recv_more() #print "MSG_GET_IO" #print type(buf) #print len(buf) #print "Buf:", [ord(b) for b in buf] - inp = struct.unpack_from("!i", buf, 0)[0] - buf = buf[4:] msg = IOStates() - for i in range(0, 10): - msg.digital_in_states.append(DigitalIn(i, (inp & (1<<i))>>i)) - #gets digital out states + #gets flag states (0-7) while len(buf) < 4: buf = buf + self.recv_more() inp = struct.unpack_from("!i", buf, 0)[0] buf = buf[4:] - for i in range(0, 10): - msg.digital_out_states.append(DigitalOut(i, (inp & (1<<i))>>i)) - ##gets flag states (0-7) - #while len(buf) < 4: - #buf = buf + self.recv_more() - #inp = struct.unpack_from("!i", buf, 0)[0] - #buf = buf[4:] - #for i in range(0, 8): - #msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) - ##gets flag states (8-15) - #while len(buf) < 4: - #buf = buf + self.recv_more() - #inp = struct.unpack_from("!i", buf, 0)[0] - #buf = buf[4:] - #for i in range(8, 16): - #msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) - ##gets flag states (16-23) - #while len(buf) < 4: - #buf = buf + self.recv_more() - #inp = struct.unpack_from("!i", buf, 0)[0] - #buf = buf[4:] - #for i in range(16, 24): - #msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) - ##gets flag states (24-31) - #while len(buf) < 4: - #buf = buf + self.recv_more() - #inp = struct.unpack_from("!i", buf, 0)[0] - #buf = buf[4:] - #for i in range(24, 32): - #msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) - #gets analog_out[0] state + for i in range(0, 8): + msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) + #gets flag states (8-15) while len(buf) < 4: buf = buf + self.recv_more() inp = struct.unpack_from("!i", buf, 0)[0] - inp /= MULT_analog buf = buf[4:] - msg.analog_out_states.append(Analog(0, inp)) - #gets analog_out[1] state + for i in range(8, 16): + msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) + #gets flag states (16-23) while len(buf) < 4: buf = buf + self.recv_more() inp = struct.unpack_from("!i", buf, 0)[0] - inp /= MULT_analog buf = buf[4:] - msg.analog_out_states.append(Analog(1, inp)) - #gets analog_in[0] state + for i in range(16, 24): + msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) + #gets flag states (24-31) while len(buf) < 4: buf = buf + self.recv_more() inp = struct.unpack_from("!i", buf, 0)[0] - inp /= MULT_analog - buf = buf[4:] - msg.analog_in_states.append(Analog(0, inp)) - #gets analog_in[1] state - while len(buf) < 4: - buf = buf + self.recv_more() - inp = struct.unpack_from("!i", buf, 0)[0] - inp /= MULT_analog buf = buf[4:] - msg.analog_in_states.append(Analog(1, inp)) + for i in range(24, 32): + msg.flag_states.append(Flag(i, (inp & (1<<i))>>i)) #gets analog_in[2] state while len(buf) < 4: buf = buf + self.recv_more() @@ -442,7 +432,7 @@ class CommanderTCPHandler(SocketServer.BaseRequestHandler): inp /= MULT_analog buf = buf[4:] msg.analog_in_states.append(Analog(3, inp)) - pub_io_states.publish(msg) + pub_io_states2.publish(msg) elif mtype == MSG_QUIT: print "Quitting"