Skip to content

连接机械臂配置roboticArm

此模块为API及机械臂初始化相关接口,包含API版本号查询、API初始化、连接/断开机械臂、日志设置、 机械臂仿真/真实模式设置、机械臂信息获取、运动到位信息及机械臂实时状态信息回调函数注册等。

查询sdk版本号rm_api_version()

  • 方法原型:
C
char* rm_api_version(void)
  • 返回值:
参数类型说明
/char*返回版本号
  • 使用示例
C
char *version = rm_api_version();
printf("api version: %s\n", version);

初始化线程模式rm_init()

  • 方法原型:
C
int rm_init(rm_thread_mode_e mode)

可以跳转 rm_thread_mode_e 查阅枚举类型

  • 参数说明:
参数说明
mode:RM_SINGLE_MODE_E单线程模式,单线程非阻塞等待数据返回。
mode:RM_DUAL_MODE_E双线程模式,增加接收线程监测队列中的数据。
mode:RM_TRIPLE_MODE_E三线程模式,在双线程模式基础上增加线程监测UDP接口数据。
  • 返回值:
参数类型说明
0int成功
-1int创建线程失败。查看日志以获取具体错误
  • 使用示例
C
// 初始化线程模式为三线程模式
rm_init(RM_TRIPLE_MODE_E);

销毁所有线程rm_destory()

注意:此操作会关闭所有连接。

  • 方法原型:
C
int rm_destory(void )
  • 返回值:
参数类型说明
0int成功
  • 使用示例
C
rm_destory();

配置日志打印rm_set_log_call_back()

  • 方法原型:
C
void rm_set_log_call_back(void(*)(const char *message, va_list args) LogCallback, int level)

可以跳转 rm_thread_mode_e 查阅枚举类型

  • 参数说明:
参数说明
LogCallback日志打印回调函数。
level日志打印等级。0:debug级别;1:info级别;2:warn级别;3.error级别。
  • 使用示例
C
// 获取当前时间信息
char *get_cur_time()
{
  static char s[32] = {0};
  struct tm* ltime;
  struct timeval stamp;
  gettimeofday(&stamp, NULL);
  ltime = localtime(&stamp.tv_sec);
  strftime(s, 20, "%Y%m%d %H:%M:%S", ltime);
  return s;
}

// 日志回调函数
void api_log(const char* message, va_list args) {
    printf("[%s]: ",get_cur_time());
    vfprintf(stdout, message, args);
}

// 注册日志打印回调函数,打印error级别的日志信息
rm_set_log_call_back(api_log, 3);

创建一个机械臂控制实例rm_create_robot_arm()

  • 方法原型:
C
rm_robot_handle* rm_create_robot_arm(const char * ip, int port)

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

  • 参数说明:
参数说明
ip机械臂的ip地址。
port机械臂的端口号。
  • 返回值:

创建成功后,返回机械臂控制rm_robot_handle句柄id,连接成功id大于0,连接失败返回-1,达到最大连接数5创建失败返回空。

  • 使用示例
C
rm_robot_handle *robot_handle = rm_create_robot_arm("192.168.1.18",8080);
if(robot_handle->id == -1)
{
    rm_delete_robot_arm(robot_handle);
    printf("arm connect err...\n");
}
else if(robot_handle != NULL)
{
    printf("connect success,arm id %d\n",robot_handle->id);
}

删除指定机械臂实例rm_delete_robot_arm()

  • 方法原型:
C
int rm_delete_robot_arm(rm_robot_handle * handle)

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

  • 参数说明:
变量说明
handle需要删除的机械臂句柄。
  • 返回值:
参数类型说明
0int成功。
-1int未找到对应句柄,句柄为空或已被删除。
  • 使用示例
C
rm_delete_robot_arm(robot_handle);

设置机械臂仿真/真实模式rm_set_arm_run_mode()

  • 方法原型:
C
int rm_set_arm_run_mode(rm_robot_handle * handle,int mode)

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

  • 参数说明:
参数说明
handle机械臂控制句柄。
mode0:仿真模式;1:真实模式。
  • 返回值:
参数类型说明
0int成功。
1int控制器返回false,传递参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器超时没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
C
// 设置机械臂运行模式为仿真模式
int ret = rm_set_arm_run_mode(robot_handle, 0);   
if (ret == 0) {  
    // 设置成功  
    printf("Robot arm run mode set successfully.\n");  
} else {  
    // 设置失败
    printf("Failed to set robot arm run mode. Error code: %d\n", ret);  
}

获取机械臂仿真/真实模式rm_get_arm_run_mode()

  • 方法原型:
C
int rm_get_arm_run_mode(rm_robot_handle * handle,int * mode)

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

  • 参数说明:
参数说明
handle机械臂控制句柄。
mode0:仿真模式;1:真实模式。
  • 返回值:
参数类型说明
0int成功。
1int控制器返回false,传递参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器超时没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
C
int mode;
ret = rm_get_arm_run_mode(robot_handle, &mode);   
if (ret == 0) {  
    // 设置成功  
    printf("Robot arm run mode get successfully. Current run mode: %d\n", mode);  
} else {  
    // 设置失败处理  
    printf("Failed to get robot arm run mode. Error code: %d\n", ret);  
}

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

  • 方法原型:
C
int rm_get_robot_info(rm_robot_handle * handle,rm_robot_info_t * robot_info)

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

  • 参数说明:
参数类型说明
handle输入参数机械臂控制句柄。
robot_info输入参数存放机械臂基本信息结构体。
  • 返回值:
参数类型说明
0int成功。
-1int未找到对应句柄,句柄为空或已被删除。
-2int获取到的机械臂基本信息非法,检查句柄是否已被删除。
  • 使用示例
C
rm_robot_info_t robot_info;
ret = rm_get_robot_info(robot_handle, &robot_info);
printf("Get robot info result : %d\n", ret);
printf("Robot info : %d %d %d \n", robot_info.arm_dof,robot_info.arm_model,robot_info.force_type);

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

  • 方法原型:
C
void rm_get_arm_event_call_back(rm_event_callback_ptr event_callback)

这里使用了机械臂事件回调函数rm_event_callback_ptr
方法原型为:typedef void(* rm_event_callback_ptr) (rm_event_push_data_t data)
跳转rm_realtime_arm_joint_state_t查阅结构体详情。

注意:单线程无法使用该函数获取到位信息。

  • 参数说明:
参数说明
handle用户自定义机械臂控制句柄。
event_callback用户自定义机械臂事件回调函数,该回调函数接收rm_event_push_data_t类型的数据作为参数,没有返回值。
  • 使用示例
C
// 机械臂事件回调函数
void callback_event(rm_event_push_data_t data)
{
    printf("CallbackCallbackCallbackCallbackCallback\n");
    switch (data.event_type)
    {
    case RM_CURRENT_TRAJECTORY_STATE_E:
        printf("当前轨迹运行结果:%d,到位设备:%d,是否存在下一条轨迹:%d\n",data.trajectory_state,data.device, data.trajectory_connect);
        break;
    case RM_PROGRAM_RUN_FINISH_E:
        printf("在线编程运行结束,结束ID:%d\n", data.program_id);
        break;
    default:
        break;
    }
}
// 机械臂事件回调函数注册
rm_get_arm_event_call_back(callback_event);