示例#1
0
sys.path.append(os.path.join(os.path.dirname(__file__), '../../..'))
from uarm.wrapper import SwiftAPI

swift = SwiftAPI(filters={'hwid': 'USB VID:PID=2341:0042'},
                 enable_handle_thread=False)
# swift = SwiftAPI(filters={'hwid': 'USB VID:PID=2341:0042'}, enable_write_thread=True)
# swift = SwiftAPI(filters={'hwid': 'USB VID:PID=2341:0042'}, enable_report_thread=True)
# swift = SwiftAPI(filters={'hwid': 'USB VID:PID=2341:0042'}, enable_handle_thread=True, enable_write_thread=True, enable_report_thread=True)

swift.waiting_ready()  # wait the rebot ready
print(swift.get_device_info())

move_speed = 100

time.sleep(5)  # <! must wait the effector check itself
rtn = swift.get_mode(wait=True, timeout=10)  # <! make sure the work mode is 5
print(rtn)
if rtn != 5:
    swift.set_mode(5)
    time.sleep(5)  # <! must wait the effector check itself

swift.set_position(x=150,
                   y=150,
                   z=150,
                   speed=move_speed,
                   wait=True,
                   timeout=10,
                   cmd='G0')
# print( swift.get_position() )
# print( swift.get_servo_angle() )
# print( swift.send_cmd_sync('P2243') )
示例#2
0
class UArmHandler(object):
    def __init__(self, ui):
        super(UArmHandler, self).__init__()
        self.ui = ui

        self.arm = None
        self.port = None
        self.cmd_que = queue.Queue(100)
        self.cmd_thread = XArmThread(self.cmd_que, check=False)
        self.cmd_thread.signal.connect(self.run_cmd)
        self.cmd_thread.start()

        self.report_que = queue.Queue()
        self.report_thread = XArmThread(self.report_que, check=True)
        self.report_thread.signal.connect(self.update_ui)
        self.report_thread.start()

    def run_cmd(self, item):
        try:
            if self.arm and self.arm.connected:
                func = getattr(self.arm, item['cmd'])
                # log(item['cmd']+':', func(*item.get('args', []), **item.get('kwargs', {})))
                ret = func(*item.get('args', []), **item.get('kwargs', {}))
                if item['cmd'] == 'get_position' and isinstance(
                        ret, list) and len(ret) >= 3:
                    self.report_que.put({
                        'type': 'location',
                        'item': {
                            'position': ret,
                            'angles': None
                        }
                    })
                elif item['cmd'] == 'get_polar' and isinstance(
                        ret, list) and len(ret) >= 3:
                    self.report_que.put({
                        'type': 'location',
                        'item': {
                            'position': [None, None, None, *ret],
                            'angles': None
                        }
                    })
                elif item['cmd'] == 'get_servo_angle' and isinstance(
                        ret, list) and len(ret) >= 3:
                    self.report_que.put({
                        'type': 'location',
                        'item': {
                            'position': None,
                            'angles': ret
                        }
                    })
                elif item['cmd'] == 'get_device_info':
                    self.report_que.put({'type': 'info', 'item': ret})
                elif item['cmd'] == 'get_mode' or item['cmd'] == 'set_mode':
                    self.report_que.put({
                        'type': 'mode',
                        'item': {
                            'mode': ret
                        }
                    })
                # if isinstance(ret, int) and ret == TCP_OR_JOINT_LIMIT:
                #     self.ui.reset_flag()
                logger.debug('cmd: {}, ret:{}, args: {}, kwargs: {}'.format(
                    item['cmd'], ret, item.get('args', []),
                    item.get('kwargs', {})))
            else:
                self.cmd_que.queue.clear()
                self.report_connected_callback({'connected': False})
                logger.debug('cmd: {}, ret: xArm is not connected'.format(
                    item['cmd']))
        except:
            pass

    def connect(self, port):
        try:
            logger.debug('try connect to {}'.format(port))
            if self.arm and self.arm.connected:
                logger.info('disconnect from {}'.format(self.port))
                self.arm.disconnect()
        except Exception as e:
            print(e)
        threading.Thread(target=self.connnect_thread,
                         args=(port, ),
                         daemon=True).start()

    def connnect_thread(self, port):
        try:
            self.port = port
            self.arm = SwiftAPI(port=port, do_not_open=True)
            self.arm.connect()
            if not self.arm.connected:
                time.sleep(0.5)
            self.arm.waiting_ready()
            self.report_connected_callback({'connected': True})
            device_info = self.arm.get_device_info()
            self.report_que.put({'type': 'info', 'item': device_info})
            mode = self.arm.get_mode()
            self.report_que.put({'type': 'mode', 'item': {'mode': mode}})
            position = self.arm.get_position()
            if isinstance(position, list) and len(position) >= 3:
                self.report_que.put({
                    'type': 'location',
                    'item': {
                        'position': position,
                        'angles': None
                    }
                })
            polar = self.arm.get_polar()
            if isinstance(polar, list) and len(polar) >= 3:
                self.report_que.put({
                    'type': 'location',
                    'item': {
                        'position': [None, None, None, *polar],
                        'angles': None
                    }
                })
            angles = self.arm.get_servo_angle()
            if isinstance(angles, list) and len(angles) >= 3:
                self.report_que.put({
                    'type': 'location',
                    'item': {
                        'position': None,
                        'angles': angles
                    }
                })
            return True
        except Exception as e:
            # print(e)
            self.report_connected_callback({'connected': False})

    def disconnect(self):
        try:
            if self.arm and self.arm.connected:
                self.arm.disconnect()
                self.report_connected_callback({'connected': False})
                # logger.info('diconnect from {}'.format(self.addr))
        except Exception as e:
            print(e)

    def update_ui(self, data):
        item = data['item']
        if data['type'] == 'timeout':
            if not self.arm or not self.arm.connected:
                self.ui.update_connect_status(False)
        elif data['type'] == 'connect':
            self.ui.update_connect_status(item['connected'])
        elif data['type'] == 'location':
            pos = item['position']
            angles = item['angles']
            if angles:
                self.ui.axis_ui.update_joints(angles)
            if pos:
                self.ui.cartesian_ui.update_cartesians(pos)
        elif data['type'] == 'info':
            self.ui.update_device_info(item)
        elif data['type'] == 'mode':
            self.ui.update_mode(item['mode'])

    def report_connected_callback(self, item):
        self.report_que.put({'type': 'connect', 'item': item})

    def put_cmd_que(self, item):
        self.cmd_que.put(item)
#
# Author: Vinman <*****@*****.**> <*****@*****.**>

import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
from uarm.wrapper import SwiftAPI
"""
pressure test: set mode
"""

swift = SwiftAPI(filters={'hwid': 'USB VID:PID=2341:0042'}, cmd_pend_size=2)

swift.waiting_ready()

print(swift.get_device_info())

mode = swift.get_mode()
print('mode:', mode)

mode_count = 4

count = 1
while swift.connected:
    mode = (mode + 1) % mode_count
    if swift.set_mode(mode) != mode:
        print('set mode {} failed, count={}'.format(mode, count))
    count += 1
    if count == 1000000:
        count = 1
示例#4
0
"""

swift = SwiftAPI(filters={'hwid': 'USB VID:PID=2341:0042'})

swift.waiting_ready()

ret = swift.get_power_status()
print('power status: {}'.format(ret))

ret = swift.get_device_info()
print('device info: {}'.format(ret))
ret = swift.get_limit_switch()
print('limit switch: {}'.format(ret))
ret = swift.get_gripper_catch()
print('gripper catch: {}'.format(ret))
ret = swift.get_mode()
print('mode: {}'.format(ret))
print('set mode:', swift.set_mode(1))
ret = swift.get_mode()
print('mode: {}'.format(ret))
ret = swift.get_servo_attach(servo_id=2)
print('servo attach: {}'.format(ret))
ret = swift.get_servo_angle()
print('servo angle: {}'.format(ret))


def print_callback(ret, key=None):
    print('{}: {}'.format(key, ret))

swift.get_polar(wait=False, callback=functools.partial(print_callback, key='polar'))
swift.get_position(wait=False, callback=functools.partial(print_callback, key='position'))