C、C++:
末端工具协议配置 末端工具动作配置
支持进行动作的相关配置,包括查询、运行、删除、保存和更新等操作。
查询动作列表rm_get_tool_action_list
- 方法原型:
C
int rm_get_tool_action_list(rm_robot_handle *handle, int page_num, int page_size, const char *vague_search, rm_tool_action_list_t *list);- 参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
handle | 输入参数 | 机械臂句柄。 |
page_num | 输入参数 | 页码。 |
page_size | 输入参数 | 每页大小。 |
vague_search | 输入参数 | 模糊搜索字符串。 |
list | 输出参数 | 动作列表。 |
可以跳转rm_robot_handle和rm_tool_action_list_t查阅结构体详细描述。
- 返回值:
| 参数 | 说明 |
|---|---|
| 0 | 成功。 |
| 1 | 控制器返回false,传递参数错误或机械臂状态发生错误。 |
| -1 | 数据发送失败,通信过程中出现问题。 |
| -2 | 数据接收失败,通信过程中出现问题或者控制器超时没有返回。 |
| -3 | 返回值解析失败,接收到的数据格式不正确或不完整。 |
| -4 | 三代控制器不支持该接口. |
- 使用示例
C
int page_num = 1;
int page_size = 20;
const char* vague_search = NULL;
rm_tool_action_list_t list;
ret = rm_get_tool_action_list(handle, page_num, page_size, vague_search, &list);
printf("%d\n", ret);
printf("=== 工具动作列表 ===\n");
printf("返回动作数: %d\n", list.list_len);
printf("\n");
const int THRESHOLD = 1000000;
for (int i = 0; i < list.list_len; i++) {
printf("动作 %d:\n", i + 1);
printf(" 名称: %s\n", list.act_list[i].name);
int hasValidPos = 0;
for (int j = 0; j < 100; j++) {
if (abs(list.act_list[i].hand_pos[j]) < THRESHOLD) {
hasValidPos = 1;
break;
}
}
int hasValidAngle = 0;
for (int j = 0; j < 100; j++) {
if (abs(list.act_list[i].hand_angle[j]) < THRESHOLD) {
hasValidAngle = 1;
break;
}
}
if (hasValidPos) {
printf(" handpos: [");
for (int j = 0; j < 100; j++) {
if (abs(list.act_list[i].hand_pos[j]) < THRESHOLD) {
if (j > 0) printf(", ");
printf("%d", list.act_list[i].hand_pos[j]);
}
}
printf("]\n");
}
else if (hasValidAngle) {
printf(" handangle: [");
for (int j = 0; j < 100; j++) {
if (abs(list.act_list[i].hand_angle[j]) < THRESHOLD) {
if (j > 0) printf(", ");
printf("%d", list.act_list[i].hand_angle[j]);
}
}
printf("]\n");
}
printf("--------------------\n");
}运行指定末端动作rm_run_tool_action
- 方法原型:
C
int rm_run_tool_action(rm_robot_handle *handle, const char *action_name);- 参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
handle | 输入参数 | 机械臂控制句柄。 |
action_name | 输入参数 | 动作名称。 |
可以跳转rm_robot_handle查阅结构体详细描述。
- 返回值:
| 参数 | 说明 |
|---|---|
| 0 | 成功。 |
| 1 | 控制器返回false,传递参数错误或机械臂状态发生错误。 |
| -1 | 数据发送失败,通信过程中出现问题。 |
| -2 | 数据接收失败,通信过程中出现问题或者控制器超时没有返回。 |
| -3 | 返回值解析失败,接收到的数据格式不正确或不完整。 |
| -4 | 三代控制器不支持该接口. |
| -5 | 当前到位设备校验失败,即当前到位设备不为末端工具动作。 |
- 使用示例
运行指定末端动作run_tool_action
C
const char* action_name = "1";
ret = rm_run_tool_action(handle, action_name);
printf("%d\n", ret);删除指定末端动作rm_delete_tool_action
- 方法原型:
C
int rm_delete_tool_action(rm_robot_handle *handle, const char *action_name);- 参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
handle | 输入参数 | 机械臂控制句柄。 |
action_name | 输入参数 | 动作名称。 |
可以跳转rm_robot_handle查阅结构体详细描述。
- 返回值:
| 参数 | 说明 |
|---|---|
| 0 | 成功。 |
| 1 | 控制器返回false,传递参数错误或机械臂状态发生错误。 |
| -1 | 数据发送失败,通信过程中出现问题。 |
| -2 | 数据接收失败,通信过程中出现问题或者控制器超时没有返回。 |
| -3 | 返回值解析失败,接收到的数据格式不正确或不完整。 |
| -4 | 三代控制器不支持该接口 |
- 使用示例
删除指定末端动作delete_tool_action
C
const char* action_name = "p";
ret = rm_delete_tool_action(handle, action_name);
printf("%d\n", ret);保存动作到控制器rm_save_tool_action
- 方法原型:
C
int rm_save_tool_action(rm_robot_handle *handle, const char *action_name,int *selected_array,int array_size, int array_type);- 参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
handle | 输入数据 | 机械臂控制句柄。 |
action_name | 输入数据 | 动作名称。 |
selected_array | 输入数据 | 保存数组的值。 |
array_size | 输入数据 | 保存数组的大小。 |
array_type | 输入数据 | 保存数字的类型(0-表示保存类型为hand_pos。 1-表示保存类型为hand_angle) |
可以跳转rm_robot_handle查阅结构体详细描述。
- 返回值:
| 参数 | 说明 |
|---|---|
| 0 | 成功。 |
| 1 | 控制器返回false,传递参数错误或机械臂状态发生错误。 |
| -1 | 数据发送失败,通信过程中出现问题。 |
| -2 | 数据接收失败,通信过程中出现问题或者控制器超时没有返回。 |
| -3 | 返回值解析失败,接收到的数据格式不正确或不完整。 |
| -4 | 三代控制器不支持该接口 |
- 使用示例
保存动作save_tool_action
C
const char* action_name = "12";
int selected_array[6] = {1,1,1,1,1,1};
int array_size = 6;
int array_type = 0;
ret = rm_save_tool_action(handle, action_name, selected_array, array_size, array_type);
printf("%d\n", ret);更新动作到控制器rm_update_tool_action
- 方法原型:
C
int rm_update_tool_action(rm_robot_handle *handle, const char *action_name, const char *new_name, int *selected_array,int array_size, int array_type);- 参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
handle | 输入数据 | 机械臂控制句柄。 |
action_name | 输入数据 | 动作名称。 |
new_name | 输入数据 | 新动作名称。 |
selected_array | 输入数据 | 保存数组的值。 |
array_size | 输入数据 | 保存数组的大小。 |
array_type | 输入数据 | 保存数字的类型(0-表示保存类型为hand_pos。 1-表示保存类型为hand_angle) |
可以跳转rm_robot_handle查阅结构体详细描述。
- 返回值:
| 参数 | 说明 |
|---|---|
| 0 | 成功。 |
| 1 | 控制器返回false,传递参数错误或机械臂状态发生错误。 |
| -1 | 数据发送失败,通信过程中出现问题。 |
| -2 | 数据接收失败,通信过程中出现问题或者控制器超时没有返回。 |
| -3 | 返回值解析失败,接收到的数据格式不正确或不完整。 |
| -4 | 三代控制器不支持该接口 |
- 使用示例
C
const char* action_name = "121";
const char* new_name = "12";
int selected_array[6] = { 2,1,1,1,1,1 };
int array_size = 6;
int array_type = 1;
ret = rm_update_tool_action(handle, action_name, new_name, selected_array, array_size, array_type);
printf("%d\n", ret);末端工具控制配置
设置末端工具角度跟随控制 rm_set_hand_follow_angle()
设置跟随角度,最高50Hz的控制频率。
灵巧手:6个主动自由度,自由度1(大拇指弯曲)、自由度2(食指)、自由度3(中指)、自由度4(无名指)、自由度5(小指)、自由度6(大拇指旋转)。
二指夹爪:1 个主动自由度。
注意
如果要使用此功能,需要联系技术支持发送定制的末端工具(灵巧手/夹爪)固件升级包。
- 方法原型:
C
int rm_set_hand_follow_angle(rm_robot_handle *handle, const int *hand_angle, bool block);可以跳转rm_robot_handle查阅结构体详细描述。
- 参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
handle | 输入参数 | 机械臂句柄。 |
hand_angle | 输入参数 | 设置自由度角度。 设置末端灵巧手各手指动作时, hand_angle表示手指角度数组,按照灵巧手厂商定义的角度做控制。例如,灵巧手角度的定义(单位:0.01 °):大拇指:0 ~ 7400;食指:0 ~ 8500;中指:0 ~ 8400;无名指:0 ~ 8500;小拇指:0 ~ 8400;大拇指偏摆:0 ~ 11000 |
block | 输入参数 | true:表示非阻塞模式,发送成功后返回,false:表示阻塞模式,接收设置成功指令后返回。 |
- 返回值:
0代表成功,其他错误码请参考API2错误代码。
- 使用示例
C
// 高速控制灵巧手,非阻塞模式
const int angle[6]= {0,100,200,300,400,500};
bool block = true;
ret = rm_set_hand_follow_angle(robot_handle,angle,block);设置末端工具位置跟随控制rm_set_hand_follow_pos()
设置末端工具跟随位置,最高50Hz的控制频率。
灵巧手:6个主动自由度,自由度1(大拇指弯曲)、自由度2(食指)、自由度3(中指)、自由度4(无名指)、自由度5(小指)、自由度6(大拇指旋转)。
二指夹爪:1 个主动自由度。
注意
如果要使用此功能,需要联系技术支持发送定制的末端工具(灵巧手/夹爪)固件升级包。
- 方法原型:
C
int rm_set_hand_follow_pos(rm_robot_handle *handle, const int *hand_pos, bool block);可以跳转rm_robot_handle查阅结构体详细描述。
- 参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
handle | 输入参数 | 机械臂句柄。 |
hand_pos | 输入参数 | 设置自由度位置。 设置末端二指夹爪自由度位置时, hand_pos 表示自由度位置数组,按照夹爪厂商定义的位置做控制。例如,二指夹爪自由度的定义:运动范围:0-120mm; 驱动器行程:0-12000 |
block | 输入参数 | true:表示非阻塞模式,发送成功后返回,false:表示阻塞模式,接收设置成功指令后返回。 |
- 返回值:
0代表成功,其他错误码请参考API2错误代码。
- 使用示例
C
// 高速控制灵巧手,非阻塞模式
const int pos[6]= {0,100,200,300,400,500};
bool block = true;
ret = rm_set_hand_follow_pos(robot_handle,pos,block);
