Skip to content
Snippets Groups Projects
prog 5.56 KiB
Newer Older
def driverProg():
  HOSTNAME = "%(driver_hostname)s"
  MSG_OUT = 1
  MSG_QUIT = 2
  MSG_JOINT_STATES = 3
  MSG_MOVEJ = 4
  MSG_WAYPOINT_FINISHED = 5
Stuart Glaser's avatar
Stuart Glaser committed
  MSG_STOPJ = 6
  MSG_SERVOJ = 7
  MULT_time = 1000000.0
  MULT_blend = 1000.0
  pi = 3.14159265359
    socket_send_int(MSG_OUT)
    socket_send_string(msg)
    socket_send_string("~")
    exit_critical
  end
  
  def send_waypoint_finished(waypoint_id):
    enter_critical
    socket_send_int(MSG_WAYPOINT_FINISHED)
    socket_send_int(waypoint_id)
    exit_critical
  end
  thread statePublisherThread():
    def send_joint_state():
      q = get_joint_positions()
      qdot = get_joint_speeds()
      tau = get_joint_torques()
      socket_send_int(MSG_JOINT_STATES)
      socket_send_int(floor(MULT_jointstate * q[0]))
      socket_send_int(floor(MULT_jointstate * q[1]))
      socket_send_int(floor(MULT_jointstate * q[2]))
      socket_send_int(floor(MULT_jointstate * q[3]))
      socket_send_int(floor(MULT_jointstate * q[4]))
      socket_send_int(floor(MULT_jointstate * q[5]))
      socket_send_int(floor(MULT_jointstate * qdot[0]))
      socket_send_int(floor(MULT_jointstate * qdot[1]))
      socket_send_int(floor(MULT_jointstate * qdot[2]))
      socket_send_int(floor(MULT_jointstate * qdot[3]))
      socket_send_int(floor(MULT_jointstate * qdot[4]))
      socket_send_int(floor(MULT_jointstate * qdot[5]))
      socket_send_int(floor(MULT_jointstate * tau[0]))
      socket_send_int(floor(MULT_jointstate * tau[1]))
      socket_send_int(floor(MULT_jointstate * tau[2]))
      socket_send_int(floor(MULT_jointstate * tau[3]))
      socket_send_int(floor(MULT_jointstate * tau[4]))
      socket_send_int(floor(MULT_jointstate * tau[5]))
      #socket_send_int(7895160)  # Recognizable  ".xxx" or 00787878
    send_joint_state()
    while True:
      send_joint_state()
      sync()
    end
    sync()
  end

  SERVO_IDLE = 0
  SERVO_RUNNING = 1
  cmd_servo_state = SERVO_IDLE
  cmd_servo_id = 0  # 0 = idle, -1 = stop
  cmd_servo_q = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
  cmd_servo_dt = 0.0
  def set_servo_setpoint(id, q, dt):
    enter_critical
    cmd_servo_state = SERVO_RUNNING
    cmd_servo_id = id
    cmd_servo_q = q
    cmd_servo_dt = dt
    exit_critical
  end
  thread servoThread():
    state = SERVO_IDLE
    while True:
      # Latches the new command
      enter_critical
      q = cmd_servo_q
      dt = cmd_servo_dt
      id = cmd_servo_id
      do_brake = False
      if (state == SERVO_RUNNING) and (cmd_servo_state == SERVO_IDLE):
        # No command pending
        do_brake = True
      end
      state = cmd_servo_state
      cmd_servo_state = SERVO_IDLE
      exit_critical

      #do_brake = False

      # Executes the command
      if do_brake:
        #stopj(1.0)  # TODO
        send_out("Braking")
        sync()
      elif state == SERVO_RUNNING:
        servoj(q, 0, 0, dt)
Stuart Glaser's avatar
Stuart Glaser committed
        #send_out("Servoed")
  socket_open(HOSTNAME, 50001)
  send_out("hello")
  thread_state = run statePublisherThread()
  thread_servo = run servoThread()

  # Servoes in a circle
Stuart Glaser's avatar
Stuart Glaser committed
  #movej([1.5,-0.4,-1.57,0,0,0], 3, 0.75, 1.0)
  #t = 0
  #while True:
  #  q = [1.5,0,-1.57,0,0,0]
  #  q[0] = q[0] + 0.2 * sin(0.25 * t*(2*pi))
  #  q[1] = q[1] - 0.2 + 0.2 * cos(0.25 * t*(2*pi))
  #  #servoj(q, 3, 1, 0.08)
  #  #send_out("servoed")
  #  set_servo_setpoint(t, q, 0.08)
  #  t = t + 0.08
  #  sleep(0.08)
  #end
  while True:
    #send_out("Listening")
      #send_out("Received nothing")
    elif ll[0] > 1:
      send_out("Received too many things")
      mtype = ll[1]
      if mtype == MSG_QUIT:
        send_out("Received QUIT")
        break
      elif mtype == MSG_MOVEJ:
        send_out("Received movej")
	params_mult = socket_read_binary_integer(1+6+4)
	if params_mult[0] == 0:
	  send_out("Received no parameters for movej message")
	end

	# Unpacks the parameters
	waypoint_id = params_mult[1]
	q = [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]
	a = params_mult[8] / MULT_jointstate
	v = params_mult[9] / MULT_jointstate
	t = params_mult[10] / MULT_time
	r = params_mult[11] / MULT_blend

	# Sends the command
	send_out("movej started")
	movej(q, a, v, t, r)
	send_waypoint_finished(waypoint_id)
	send_out("movej finished")
      elif mtype == MSG_SERVOJ:
        # Reads the parameters
	params_mult = socket_read_binary_integer(1+6+1)
	if params_mult[0] == 0:
	  send_out("Received no parameters for movej message")
	end

	# Unpacks the parameters
        waypoint_id = params_mult[1]
	q = [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]
	t = params_mult[8] / MULT_time

        # Servos
Stuart Glaser's avatar
Stuart Glaser committed
        #servoj(q, 3, 0.1, t)
        #send_waypoint_finished(waypoint_id)
        set_servo_setpoint(waypoint_id, q, t)
Stuart Glaser's avatar
Stuart Glaser committed
      elif mtype == MSG_STOPJ:
        send_out("Received stopj")
	stopj(1.0)
      else:
        send_out("Received unknown message type")
      end
  socket_send_int(MSG_QUIT)