class Dobot: def __init__(self, port): self.interface = Interface(port) self.interface.stop_queue(True) self.interface.clear_queue() self.interface.start_queue() self.interface.set_point_to_point_jump_params(10, 10) self.interface.set_point_to_point_joint_params([50, 50, 50, 50], [50, 50, 50, 50]) self.interface.set_point_to_point_coordinate_params(400, 400, 400, 400) self.interface.set_point_to_point_common_params(100, 100) self.interface.set_point_to_point_jump2_params(5, 5, 5) self.interface.set_jog_joint_params([50, 50, 50, 50], [50, 50, 50, 50]) self.interface.set_jog_coordinate_params([50, 50, 50, 50], [50, 50, 50, 50]) self.interface.set_jog_common_params(50, 50) self.interface.set_continous_trajectory_params(50, 50, 50) def connected(self): return self.interface.connected() def get_pose(self): return self.interface.get_pose() def home(self, wait=True): self.interface.set_homing_command(0) if wait: self.wait() def set_homing_parameters(self, x, y, z, r, queue=True): return self.interface.set_homing_parameters(x, y, z, r) def get_end_effector_params(self): return self.interface.get_end_effector_params() # Move to the absolute coordinate, one axis at a time def move_to(self, x, y, z, r, wait=True): self.interface.set_point_to_point_command(2, x, y, z, r) if wait: self.wait() # Slide to the absolute coordinate, shortest possible path def slide_to(self, x, y, z, r, wait=True): self.interface.set_point_to_point_command(4, x, y, z, r) if wait: self.wait() # Move to the absolute coordinate, one axis at a time def move_to_relative(self, x, y, z, r, wait=True): self.interface.set_point_to_point_command(7, x, y, z, r) if wait: self.wait() # Slide to the relative coordinate, one axis at a time def slide_to_relative(self, x, y, z, r, wait=True): self.interface.set_point_to_point_command(6, x, y, z, r) if wait: self.wait() # Wait until the instruction finishes def wait(self, queue_index=None): # If there are no more instructions in the queue, it will end up # always returning the last instruction - even if it has finished. # Use a zero wait as a non-operation to bypass this limitation self.interface.wait(0) if queue_index is None: queue_index = self.interface.get_current_queue_index() while True: if self.interface.get_current_queue_index() > queue_index: break sleep(0.5) # Move according to the given path def follow_path(self, path, wait=True): self.interface.stop_queue() queue_index = None for point in path: queue_index = self.interface.set_continous_trajectory_command( 1, point[0], point[1], point[2], 50) self.interface.start_queue() if wait: self.wait(queue_index) # Move according to the given path def follow_path_relative(self, path, wait=True): self.interface.stop_queue() queue_index = None for point in path: queue_index = self.interface.set_continous_trajectory_command( 0, point[0], point[1], point[2], 50) self.interface.start_queue() if wait: self.wait(queue_index) def gripper_close(self): self.interface.set_end_effector_gripper(1, 1) def gripper_open(self): self.interface.set_end_effector_gripper(1, 0) def gripper_off(self): self.interface.set_end_effector_gripper(0, 0) def suc_on(self): self.interface.set_end_effector_suction_cup(1, 1) def suc_off(self): self.interface.set_end_effector_suction_cup(1, 0)
import os sys.path.insert(0, os.path.abspath('.')) import math from lib.interface import Interface bot = Interface('/dev/tty.SLAB_USBtoUART') print('Bot status:', 'connected' if bot.connected() else 'not connected') params = bot.get_continous_trajectory_params() print('Params:', params) [start_x, start_y, start_z, start_r] = bot.get_pose()[0:4] bot.set_continous_trajectory_real_time_params(20, 100, 10) # Draw about half an arch as a single path bot.stop_queue() steps = 12 scale = 75 for i in range(steps + 1): x = math.cos((math.pi / steps) * i) y = math.sin((math.pi / steps) * i) # Absolute movement bot.set_continous_trajectory_command(1, start_x, start_y + y * scale, start_z + x * scale, start_r) bot.start_queue()