Skip to content

末端工具协议配置

末端工具动作配置

支持进行动作的相关配置,包括查询、运行、删除、保存和更新等操作。

查询动作列表 rm_get_tool_action_list

  • 方法原型:
python
rm_get_tool_action_list(self, page_num: int, page_size: int, vague_search: str) -> tuple[int, dict[str, any]]:
  • 参数说明:
名称类型说明
page_numint页码。
page_sizeint每页大小。
vague_searchstr模糊搜索。
  • 返回值:

tuple[int, dict[str,any]]: 包含两个元素的元组。

  1. int:函数执行的状态码:

    参数说明
    0成功。
    1控制器返回false,传递参数错误或机械臂状态发生错误。
    -1数据发送失败,通信过程中出现问题。
    -2数据接收失败,通信过程中出现问题或者控制器超时没有返回。
    -3返回值解析失败,接收到的数据格式不正确或不完整。
    -4三代控制器不支持该接口。
  2. dict[str,any] 获取到的动作列表字典,键为rm_tool_action_list_t结构体的字段名称。

  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *
 
# 实例化RoboticArm类
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)
 
ret, list = arm.rm_get_tool_action_list(1, 20, None)
print("tool action list")
print("total_size:", list['total_size'])
THRESHOLD = 1000000
for i, action in enumerate(list['act_list']):
    print(f"action {i + 1}:")
    print(f"name: {action['name'].decode('utf-8')}" if isinstance(action['name'], bytes) else f"name: {action['name']}")

    has_valid_pos = any(pos != THRESHOLD for pos in action['hand_pos'][:100])
    has_valid_angle = any(angle != THRESHOLD for angle in action['hand_angle'][:100])

    if has_valid_pos:
        print("handpos: [", ", ".join(str(pos) for pos in action['hand_pos'][:100] if pos != THRESHOLD), "]")

    if has_valid_angle:
        print("handangle: [", ", ".join(str(angle) for angle in action['hand_angle'][:100] if angle != THRESHOLD), "]")

    print("--------------------")
 
arm.rm_delete_robot_arm()

运行指定末端动作 rm_run_tool_action

  • 方法原型:
python
rm_run_tool_action(self, action_name: str) -> int:
  • 参数说明:
名称类型说明
action_namestr末端动作名称。
  • 返回值:
参数说明
0成功。
1控制器返回false,传递参数错误或机械臂状态发生错误。
-1数据发送失败,通信过程中出现问题。
-2数据接收失败,通信过程中出现问题或者控制器超时没有返回。
-3返回值解析失败,接收到的数据格式不正确或不完整。
-4三代控制器不支持该接口。
-5当前到位设备校验失败,即当前到位设备不为末端工具动作。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
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_run_tool_action("1"))

arm.rm_delete_robot_arm()

删除指定末端动作 rm_delete_tool_action

  • 方法原型:
python
rm_delete_tool_action(self, action_name: str) -> int:
  • 参数说明:
名称类型说明
action_namestr末端动作名称。
  • 返回值:
参数说明
0成功。
1控制器返回false,传递参数错误或机械臂状态发生错误。
-1数据发送失败,通信过程中出现问题。
-2数据接收失败,通信过程中出现问题或者控制器超时没有返回。
-3返回值解析失败,接收到的数据格式不正确或不完整。
-4三代控制器不支持该接口
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
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_delete_tool_action("p"))

arm.rm_delete_robot_arm()

保存动作到控制器 rm_save_tool_action

  • 方法原型:
python
rm_save_tool_action(self, action_name: str, selected_array: list, array_size: int, array_type: int) -> int:
  • 参数说明:
名称类型说明
action_namestr末端动作名称。
selected_arraylist保存数组的值。
array_sizeint保存数组的大小。
array_typeint保存数字的类型(0-表示保存类型为hand_pos, 1-表示保存类型为hand_angle)
  • 返回值:
参数说明
0成功。
1控制器返回false,传递参数错误或机械臂状态发生错误。
-1数据发送失败,通信过程中出现问题。
-2数据接收失败,通信过程中出现问题或者控制器超时没有返回。
-3返回值解析失败,接收到的数据格式不正确或不完整。
-4三代控制器不支持该接口
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
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_save_tool_action("12", [1, 1, 1, 1, 1, 1] , 6 , 0))

arm.rm_delete_robot_arm()

更新动作到控制器 rm_update_tool_action

  • 方法原型:
python
rm_update_tool_action(self, action_name: str, new_name: str, selected_array: list[int], array_size: int, array_type: int) -> int:
  • 参数说明:
名称类型说明
action_namestr末端动作名称。
new_namestr更新后的末端动作名称。
selected_arraylist[int]保存数组的值。
array_sizeint保存数组的大小。
array_typeint保存数字的类型(0-表示保存类型为hand_pos。 1-表示保存类型为hand_angle)
  • 返回值:
参数说明
0成功。
1控制器返回false,传递参数错误或机械臂状态发生错误。
-1数据发送失败,通信过程中出现问题。
-2数据接收失败,通信过程中出现问题或者控制器超时没有返回。
-3返回值解析失败,接收到的数据格式不正确或不完整。
-4三代控制器不支持该接口
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
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_update_tool_action("121", "12", [2, 1, 1, 1, 1, 1 ] , 6 , 1))

arm.rm_delete_robot_arm()

末端工具控制配置

设置末端工具角度跟随控制rm_set_hand_follow_angle()

设置跟随角度,最高50Hz的控制频率。

  • 灵巧手:6个主动自由度,自由度1(大拇指弯曲)、自由度2(食指)、自由度3(中指)、自由度4(无名指)、自由度5(小指)、自由度6(大拇指旋转)。

  • 二指夹爪:1 个主动自由度。

注意

如果要使用此功能,需要联系技术支持发送定制的末端工具(灵巧手/夹爪)固件升级包。

  • 方法原型:
python
rm_set_hand_follow_angle(self, hand_angle: list[int], block: bool) -> int
  • 参数说明:
名称类型说明
hand_angleList[int]设置自由度角度。
设置末端灵巧手各手指动作时,hand_angle表示手指角度数组,按照灵巧手厂商定义的角度做控制。
例如,灵巧手角度的定义(单位:0.01 °):大拇指:0 ~ 7400;食指:0 ~ 8500;中指:0 ~ 8400;无名指:0 ~ 8500;小拇指:0 ~ 8400;大拇指偏摆:0 ~ 11000
blockbooltrue:表示非阻塞模式,发送成功后返回,false:表示阻塞模式,接收设置成功指令后返回。
  • 返回值:

    函数执行的状态码:

    0代表成功,其他错误码请参考API2错误代码

  • 使用示例

python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
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_hand_follow_angle([0,100,200,300,400,500], True))

arm.rm_delete_robot_arm()

设置末端工具位置跟随控制rm_set_hand_follow_pos()

设置末端工具跟随位置,最高50Hz的控制频率。

  • 灵巧手:6个主动自由度,自由度1(大拇指弯曲)、自由度2(食指)、自由度3(中指)、自由度4(无名指)、自由度5(小指)、自由度6(大拇指旋转)。

  • 二指夹爪:1 个主动自由度。

注意

如果要使用此功能,需要联系技术支持发送定制的末端工具(灵巧手/夹爪)固件升级包。

  • 方法原型:
python
rm_set_hand_follow_pos(self, hand_pos: list[int], block: bool) -> int
  • 参数说明:
名称类型说明
hand_poslist[int]设置自由度位置。
设置末端二指夹爪自由度位置时,hand_pos 表示自由度位置数组,按照夹爪厂商定义的位置做控制。
例如,二指夹爪自由度的定义:运动范围:0-120mm; 驱动器行程:0-12000
blockbooltrue:表示非阻塞模式,发送成功后返回,false:表示阻塞模式,接收设置成功指令后返回。
  • 返回值:

    函数执行的状态码:

    0代表成功,其他错误码请参考API2错误代码

  • 使用示例

python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
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_hand_follow_pos([0,100,200,300,400,500], True))

arm.rm_delete_robot_arm()