Hi Maulana,
Please share the Blockly or Python script with us. What is the current firmware version?
Can this be reproduced every time, or is it random?
Best regards,
Minna
Hi Maulana,
Please share the Blockly or Python script with us. What is the current firmware version?
Can this be reproduced every time, or is it random?
Best regards,
Minna
I’m using firmware v2.6.0 and using Blockly. But because I can’t provide the Blockly script, I changed it to Python. I have 2 Python scripts.
import sys
import math
import time
import queue
import datetime
import random
import traceback
import threading
from xarm import version
from xarm.wrapper import XArmAPI
class RobotMain(object):
"""Robot Main Class"""
def __init__(self, robot, **kwargs):
self.alive = True
self._arm = robot
self._ignore_exit_state = False
self._tcp_speed = 100
self._tcp_acc = 2000
self._angle_speed = 20
self._angle_acc = 500
self._vars = {}
self._funcs = {}
self._robot_init()
def _start_run_blockly(self, fileName, times):
for i in range(times):
code = self._arm.run_blockly_app(fileName, init=False, is_exec=True, axis_type=[self._arm.axis, self._arm.device_type])
# Robot init
def _robot_init(self):
self._arm.clean_warn()
self._arm.clean_error()
self._arm.motion_enable(True)
self._arm.set_mode(0)
self._arm.set_state(0)
time.sleep(1)
self._arm.register_error_warn_changed_callback(self._error_warn_changed_callback)
self._arm.register_state_changed_callback(self._state_changed_callback)
# Register error/warn changed callback
def _error_warn_changed_callback(self, data):
if data and data['error_code'] != 0:
self.alive = False
self.pprint('err={}, quit'.format(data['error_code']))
self._arm.release_error_warn_changed_callback(self._error_warn_changed_callback)
# Register state changed callback
def _state_changed_callback(self, data):
if not self._ignore_exit_state and data and data['state'] == 4:
self.alive = False
self.pprint('state=4, quit')
self._arm.release_state_changed_callback(self._state_changed_callback)
def _check_code(self, code, label):
if not self.is_alive or code != 0:
self.alive = False
ret1 = self._arm.get_state()
ret2 = self._arm.get_err_warn_code()
self.pprint('{}, code={}, connected={}, state={}, error={}, ret1={}. ret2={}'.format(label, code, self._arm.connected, self._arm.state, self._arm.error_code, ret1, ret2))
return self.is_alive
@staticmethod
def pprint(*args, **kwargs):
try:
stack_tuple = traceback.extract_stack(limit=2)[0]
print('[{}][{}] {}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), stack_tuple[1], ' '.join(map(str, args))))
except:
print(*args, **kwargs)
@property
def arm(self):
return self._arm
@property
def VARS(self):
return self._vars
@property
def FUNCS(self):
return self._funcs
@property
def is_alive(self):
if self.alive and self._arm.connected and self._arm.error_code == 0:
if self._ignore_exit_state:
return True
if self._arm.state == 5:
cnt = 0
while self._arm.state == 5 and cnt < 5:
cnt += 1
time.sleep(0.1)
return self._arm.state < 4
else:
return False
# Robot Main Run
def run(self):
try:
code = self._arm.set_bio_gripper_enable(True)
if not self._check_code(code, 'set_bio_gripper_enable'):
return
code = self._arm.set_bio_gripper_position(pos=150, speed=3000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
self._angle_speed = 100
self._angle_acc = 50
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[226.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[230.1, 11.4, -18.3, -82.0, -90.5], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[269.4, 8.0, -19.4, -77.6, -89.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_bio_gripper_position(pos=73, speed=3000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
if self._arm.arm.check_bio_gripper_is_catch(timeout=3.0):
code = self._arm.set_servo_angle(angle=[269.4, 8.0, -19.4, -77.6, -50.7], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[226.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
self._start_run_blockly(fileName="scan_caping", times=1)
else:
code = self._arm.set_bio_gripper_position(pos=150, speed=3000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
code = self._arm.set_servo_angle(angle=[269.6, 32.0, -60.9, -60.1, -89.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_bio_gripper_position(pos=72, speed=3000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
if self._arm.arm.check_bio_gripper_is_catch(timeout=3.0):
code = self._arm.set_servo_angle(angle=[269.6, 32.0, -60.9, -60.1, -50.7], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[226.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
self._start_run_blockly(fileName="scan_caping", times=1)
else:
code = self._arm.set_bio_gripper_position(pos=150, speed=3000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
code = self._arm.set_servo_angle(angle=[269.8, 69.4, -130.9, -25.9, -89.7], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_bio_gripper_position(pos=74, speed=3000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
if self._arm.arm.check_bio_gripper_is_catch(timeout=3.0):
code = self._arm.set_servo_angle(angle=[269.8, 69.4, -130.9, -25.9, -50.7], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[226.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
self._start_run_blockly(fileName="scan_caping", times=1)
else:
code = self._arm.set_bio_gripper_position(pos=150, speed=3000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
code = self._arm.set_servo_angle(angle=[247.6, 46.2, -86.6, -49.6, -89.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[226.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
except Exception as e:
self.pprint('MainException: {}'.format(e))
finally:
self.alive = False
self._arm.release_error_warn_changed_callback(self._error_warn_changed_callback)
self._arm.release_state_changed_callback(self._state_changed_callback)
if __name__ == '__main__':
RobotMain.pprint('xArm-Python-SDK Version:{}'.format(version.__version__))
arm = XArmAPI('192.168.1.224', baud_checkset=False)
time.sleep(0.5)
robot_main = RobotMain(arm)
robot_main.run()
import sys
import math
import time
import queue
import datetime
import random
import traceback
import threading
from xarm import version
from xarm.wrapper import XArmAPI
class RobotMain(object):
"""Robot Main Class"""
def __init__(self, robot, **kwargs):
self.alive = True
self._arm = robot
self._ignore_exit_state = False
self._tcp_speed = 100
self._tcp_acc = 2000
self._angle_speed = 20
self._angle_acc = 500
self._vars = {}
self._funcs = {}
self._robot_init()
self._cgpio_digital_callbacks = []
self._cgpio_state = None
self._callback_in_thread = kwargs.get('callback_in_thread', True)
self._callback_que = queue.Queue()
gpio_t = threading.Thread(target=self._listen_gpio_thread, daemon=True)
gpio_t.start()
callback_t = threading.Thread(target=self._event_callback_handle_thread, daemon=True)
callback_t.start()
def _event_callback_handle_thread(self):
while self.alive:
try:
callback = self._callback_que.get(timeout=1)
callback() if not self._callback_in_thread else threading.Thread(target=callback, daemon=True).start()
except queue.Empty:
pass
except Exception as e:
self.pprint(e)
def _listen_gpio_thread(self):
_, values = self._arm.get_cgpio_state()
cgpio_digitals = [values[3] >> i & 0x0001 if values[10][i] in [0, 255] else 1 for i in range(len(values[10]))] if _ == 0 else [0] * 16
while self.alive:
_, values = self._arm.get_cgpio_state()
if _ == 0 and self._cgpio_state is not None and self._cgpio_state != values:
digitals = [values[3] >> i & 0x0001 if values[10][i] in [0, 255] else 1 for i in range(len(values[10]))]
for item in self._cgpio_digital_callbacks:
for io in range(len(digitals)):
if item['io'] == io and eval('{} {} {}'.format(digitals[io], item['op'], item['trigger'])) and not eval('{} {} {}'.format(cgpio_digitals[io], item['op'], item['trigger'])):
self._callback_que.put(item['callback'])
cgpio_digitals = digitals
self._cgpio_state = values if _ == 0 else self._cgpio_state
time.sleep(0.01)
def _start_run_blockly(self, fileName, times):
for i in range(times):
code = self._arm.run_blockly_app(fileName, init=False, is_exec=True, axis_type=[self._arm.axis, self._arm.device_type])
# Robot init
def _robot_init(self):
self._arm.clean_warn()
self._arm.clean_error()
self._arm.motion_enable(True)
self._arm.set_mode(0)
self._arm.set_state(0)
time.sleep(1)
self._arm.register_error_warn_changed_callback(self._error_warn_changed_callback)
self._arm.register_state_changed_callback(self._state_changed_callback)
# Register error/warn changed callback
def _error_warn_changed_callback(self, data):
if data and data['error_code'] != 0:
self.alive = False
self.pprint('err={}, quit'.format(data['error_code']))
self._arm.release_error_warn_changed_callback(self._error_warn_changed_callback)
# Register state changed callback
def _state_changed_callback(self, data):
if not self._ignore_exit_state and data and data['state'] == 4:
self.alive = False
self.pprint('state=4, quit')
self._arm.release_state_changed_callback(self._state_changed_callback)
def _check_code(self, code, label):
if not self.is_alive or code != 0:
self.alive = False
ret1 = self._arm.get_state()
ret2 = self._arm.get_err_warn_code()
self.pprint('{}, code={}, connected={}, state={}, error={}, ret1={}. ret2={}'.format(label, code, self._arm.connected, self._arm.state, self._arm.error_code, ret1, ret2))
return self.is_alive
@staticmethod
def pprint(*args, **kwargs):
try:
stack_tuple = traceback.extract_stack(limit=2)[0]
print('[{}][{}] {}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), stack_tuple[1], ' '.join(map(str, args))))
except:
print(*args, **kwargs)
@property
def arm(self):
return self._arm
@property
def VARS(self):
return self._vars
@property
def FUNCS(self):
return self._funcs
@property
def is_alive(self):
if self.alive and self._arm.connected and self._arm.error_code == 0:
if self._ignore_exit_state:
return True
if self._arm.state == 5:
cnt = 0
while self._arm.state == 5 and cnt < 5:
cnt += 1
time.sleep(0.1)
return self._arm.state < 4
else:
return False
# Define Contoller GPIO-5 DIGITAL is LOW callback
def controller_gpio_5_digital_is_changed_callback_1(self):
self._angle_speed = 80
self._angle_acc = 50
code = self._arm.set_bio_gripper_enable(True)
if not self._check_code(code, 'set_bio_gripper_enable'):
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_servo_angle(angle=[166.2, 51.2, -72.3, 19.8, -11.0], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
code = self._arm.set_bio_gripper_position(pos=77, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[166.7, 50.1, -72.5, 21.1, -10.5], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[89.1, -46.7, 8.2, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[89.1, 32.7, -53.7, 20.8, 0.2], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[89.1, -46.7, 8.2, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
# Define Contoller GPIO-6 DIGITAL is LOW callback
def controller_gpio_6_digital_is_changed_callback_2(self):
self._angle_speed = 100
self._angle_acc = 50
code = self._arm.set_bio_gripper_enable(True)
if not self._check_code(code, 'set_bio_gripper_enable'):
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[166.2, 51.2, -72.3, 19.8, -11.0], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=78, speed=4000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[166.7, 50.1, -72.5, 21.1, -10.5], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[117.7, -46.7, 8.0, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[116.1, 25.2, -72.4, 47.2, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[117.7, -46.7, 8.0, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
self._start_run_blockly(fileName="botol_to_scanner", times=1)
# Define Contoller GPIO-7 DIGITAL is LOW callback
def controller_gpio_7_digital_is_changed_callback_3(self):
self._angle_speed = 100
self._angle_acc = 50
code = self._arm.set_bio_gripper_enable(True)
if not self._check_code(code, 'set_bio_gripper_enable'):
return
code = self._arm.set_servo_angle(angle=[89.1, -46.7, 8.2, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[89.1, 32.7, -53.7, 20.8, 0.2], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=77, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[89.1, -46.7, 8.2, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[28.1, -46.7, 8.2, 38.5, -4.7], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=1.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[41.6, 21.6, -48.9, 25.6, 44.4], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[28.1, -46.7, 8.2, 38.5, -4.7], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
# Robot Main Run
def run(self):
try:
self._angle_speed = 100
self._angle_acc = 50
code = self._arm.set_bio_gripper_enable(True)
if not self._check_code(code, 'set_bio_gripper_enable'):
return
code = self._arm.set_servo_angle(angle=[220.4, 17.7, -24.5, 7.0, -28.0], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
if self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 0, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-341.7, -160.2, 7.0, 180.0, 0.2, 169.6], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[167.0, 49.8, -71.9, 20.8, -10.2], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=True)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
elif self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 1, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-252.4, -452.4, 34.8, 180.0, 0.3, 172.9], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
if self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 0, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-341.7, -160.2, 7.0, 180.0, 0.2, 169.6], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[167.0, 49.8, -71.9, 20.8, -10.2], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
elif self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 1, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-287.3, -491.2, 34.8, 180.0, 0.3, 96.0], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
if self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 0, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-341.7, -160.2, 7.0, 180.0, 0.2, 169.6], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[167.0, 49.8, -71.9, 20.8, -10.2], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
elif self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 1, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-311.2, -366.2, 34.8, 180.0, 0.0, -111.6], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_position(*[-365.6, -330.2, 34.8, 180.0, -0.4, -66.0], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
if self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 0, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-341.7, -160.2, 7.0, 180.0, 0.2, 169.6], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[167.0, 49.8, -71.9, 20.8, -10.2], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
elif self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 1, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-425.1, -411.1, 34.8, 180.0, -0.4, -12.7], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
if self._arm.arm.get_cgpio_li_state([1, 1, 1, 1, 0, 1, 1, 1], timeout=3.0, is_ci=True):
code = self._arm.set_position(*[-341.7, -160.2, 7.0, 180.0, 0.2, 169.6], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[167.0, 49.8, -71.9, 20.8, -10.2], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
else:
code = self._arm.set_position(*[-341.7, -160.2, 7.0, 180.0, 0.2, 169.6], speed=self._tcp_speed, mvacc=self._tcp_acc, radius=0.0, wait=True)
if not self._check_code(code, 'set_position'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[168.3, 21.7, -0.3, -21.4, -1.6], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[125.6, -46.7, 8.2, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[128.1, 30.0, -70.6, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_bio_gripper_position(pos=150, speed=4000, force=100, wait=False)
if not self._check_code(code, 'open_bio_gripper'):
return
for i in range(10):
time.sleep(0.1)
if not self.is_alive:
return
code = self._arm.set_servo_angle(angle=[125.6, -46.7, 8.2, 38.5, -0.8], speed=self._angle_speed, mvacc=self._angle_acc, wait=True, radius=0.0)
if not self._check_code(code, 'set_servo_angle'):
return
self._start_run_blockly(fileName="botol_to_scanner", times=1)
self._cgpio_digital_callbacks.append({'io': 5, 'trigger': 0, 'op': '==', 'callback': self.controller_gpio_5_digital_is_changed_callback_1})
self._cgpio_digital_callbacks.append({'io': 6, 'trigger': 0, 'op': '==', 'callback': self.controller_gpio_6_digital_is_changed_callback_2})
self._cgpio_digital_callbacks.append({'io': 7, 'trigger': 0, 'op': '==', 'callback': self.controller_gpio_7_digital_is_changed_callback_3})
# Event Loop
while self.is_alive:
time.sleep(0.5)
except Exception as e:
self.pprint('MainException: {}'.format(e))
finally:
self.alive = False
self._arm.release_error_warn_changed_callback(self._error_warn_changed_callback)
self._arm.release_state_changed_callback(self._state_changed_callback)
if __name__ == '__main__':
RobotMain.pprint('xArm-Python-SDK Version:{}'.format(version.__version__))
arm = XArmAPI('192.168.1.224', baud_checkset=False)
time.sleep(0.5)
robot_main = RobotMain(arm)
robot_main.run()