Skip to content

机械臂连接控制ArmRobotic

机械臂连接、断开、日志设置等操作。

初始化线程模式__init__()

此为构造函数。

  • 方法原型:
python
__init__(self, mode: rm_thread_mode_e = None):

可以跳转typeList查阅rm_thread_mode_e枚举详细描述

  • 参数说明:
参数类型说明
moderm_robot_arm_model_eRM_SINGLE_MODE_E:单线程模式,单线程非阻塞等待数据返回;RM_DUAL_MODE_E:双线程模式,增加接收线程监测队列中的数据; RM_TRIPLE_MODE_E:三线程模式,在双线程模式基础上增加线程监测UDP接口数据。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 结束机械臂控制,删除指定机械臂对象
arm.rm_delete_robot_arm()

创建机械臂连接控制句柄rm_create_robot_arm()

  • 方法原型:
python
rm_create_robot_arm(self, ip: str, port: int, level: int = 3, log_func: CFUNCTYPE = None) -> rm_robot_handle:

可以跳转rm_robot_handle查阅结构体详细描述

  • 参数说明:
参数类型说明
ipstr机械臂的IP地址。
portint机械臂的端口号。
levelint日志打印等级,默认为3。- 0: debug模式;- 1: info模式;- 2: warning模式;- 3: error模式。
log_funcCFUNCTYPE自定义日志打印函数(当前Python版本API暂不支持)。默认为None。
  • 返回值:
参数类型说明
/rm_robot_handle机械臂句柄,其中包含机械臂id标识。
  • 使用示例 使用RoboticArm类连接两条机械臂,并进行状态查询:
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm1 = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)
arm2 = RoboticArm()

# 创建机械臂连接,打印连接id
handle1 = arm1.rm_create_robot_arm("192.168.1.18", 8080)
print(handle1.id)
handle2 = arm2.rm_create_robot_arm("192.168.1.19", 8080)
print(handle2.id)

# 获取当前机械臂状态
print(arm1.rm_get_current_arm_state())
print(arm2.rm_get_current_arm_state())

# 断开所有连接,销毁线程
RoboticArm.rm_destory()

删除指定机械臂对象rm_delete_robot_arm()

  • 方法原型:
python
rm_delete_robot_arm(self) -> int:
  • 返回值:
参数类型说明
/int0表示成功,非0表示失败。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 删除指定机械臂对象
arm.rm_delete_robot_arm()

关闭所有机械臂连接rm_destory()

销毁所有线程。

  • 方法原型:
python
rm_destory(self) -> int:
  • 返回值:
参数类型说明
/int0表示成功,非0表示失败。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 断开所有连接
RoboticArm.rm_destory()

保存日志到文件rm_set_log_save()

  • 方法原型:
python
rm_set_log_save(self, path) -> None:
  • 参数说明:
参数类型说明
pathstring日志保存文件路径。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

arm.rm_set_log_save("/home/aisha/work/rm_log.txt")

# 删除指定机械臂对象
arm.rm_delete_robot_arm()

设置真实/仿真模式rm_set_arm_run_mode()

  • 方法原型:
python
rm_set_arm_run_mode(self, mode: int) -> int:
  • 参数说明:
参数类型说明
modeint模式 0:仿真 1:真实。
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功。
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 设置机械臂为仿真模式
arm.rm_set_arm_run_mode(0)

# 删除指定机械臂对象
arm.rm_delete_robot_arm()

获取真实/仿真模式rm_get_arm_run_mode()

  • 方法原型:
python
rm_get_arm_run_mode(self) -> tuple[int, int]:
  • 返回值:tuple[int, int]: 包含两个元素的元组。

1.函数执行的状态码:

参数类型说明
0int成功。
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。

2.模式:

参数类型说明
/int0:仿真 1:真实。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 获取机械臂当前运行模式
print(arm.rm_set_arm_run_mode(0))

# 删除指定机械臂对象
arm.rm_delete_robot_arm()

获取机械臂基本信息rm_get_robot_info()

  • 方法原型:
python
rm_get_robot_info(self) -> tuple[int, dict[str, any]]:
  • 返回值:tuple[int, dict[str, any]]: 包含两个元素的元组。

1.函数执行的状态码:

参数类型说明
0int成功。
-1int未找到对应句柄,句柄为空或已被删除。
-2int获取到的机械臂基本信息非法,检查句柄是否已被删除。

2.返回当前工具坐标系字典:

参数类型说明
dict[str, any]str返回当前工具坐标系字典,键为rm_robot_info_t结构体的字段名称。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 获取机械臂型号、末端力传感器版本及自由度信息
print(arm.rm_get_robot_info())

# 删除指定机械臂对象
arm.rm_delete_robot_arm()

注册机械臂事件回调函数rm_get_arm_event_call_back()

当机械臂返回运动到位指令或者文件运行结束指令时会有数据返回。

  • 方法原型:
python
rm_get_arm_event_call_back(self, event_callback: rm_event_callback_ptr):
  • 参数说明:
参数类型说明
event_callbackrm_event_callback_ptr机械臂事件回调函数,该回调函数接收rm_event_push_data_t类型的数据作为参数,没有返回值。

注意:单线程模式无法使用该回调函数。

  • 使用示例
python
# 下面是一个如何注册机械臂事件回调函数的示例:
# 在这个示例中,我们定义了一个名为`event_callback`的函数,用于处理机械臂的事件,并将其注册为回调函数。
# 当机械臂事件发生时,`event_callback`函数将被调用,并接收一个包含事件数据的对象作为参数
from Robotic_Arm.rm_robot_interface import *

def event_func(data:rm_event_push_data_t) -> None:
    print("The motion is complete, the arm is in place.")
    # 判断接口类型
    if data.event_type == 1:  # 轨迹规划完成
        print("运动结果:", data.trajectory_state)
        print("当前设备:", data.device)
        print("是否连接下一条轨迹:", data.trajectory_connect)
    elif data.codeKey == 2:  # 在线编程文件运行完成
        print("在线编程文件结束id:", data.program_id)

# 初始化为三线程模式
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

event_callback = rm_event_callback_ptr(event_func)
arm.rm_get_arm_event_call_back(event_callback)

# 非阻塞关节运动
ret = arm.rm_movej([0, 30, 60, 0, 90, 0], 50, 0, 0, 0)
print("movej: ", ret)

# 等待打印数据
time.sleep(10)

# 删除指定机械臂对象
arm.rm_delete_robot_arm()