实时运动控制接口

头文件:include/tl_interface.h
相关示例代码:examples\cpp\ex_move_control.cpp

1. robot_movej - 关节空间运动到目标位姿

方法:Result robot_movej(SOCKETFD socketFd, MoveCmd moveCmd);

功能描述:立即下发关节角度数据,驱动机械臂实时运动到目标位置(在线点对点控制)。不依赖作业文件(该功能需要在示教模式下使用)。

参数:

  • socketFd:已连接的句柄。
  • moveCmd:运动命令结构体,需设置以下成员:
    • targetPosType:目标位置类型,PosType 枚举(data / PType / E_TYPE / RP_TYPE / AP_TYPE / GPType / GEType)
    • targetPosName:目标位置名称(使用 P 变量模式时可为空)
    • coord:坐标系,Coord 枚举(JOINT / BASE / TOOL / USER),范围 0~3
    • velocity:速度,范围 0 < velocity ≤ 100,单位 %
    • acc:加速度,范围 0 < acc ≤ 100
    • dec:减速度,范围 0 < dec ≤ 100
    • pl:平滑度(0 表示精确到达)
    • targetPosValue:目标位置数据,n 个轴就赋值前 n 位数组,其余置 0;关节坐标下单位为度

返回值:

  • 0:成功。
  • 非0:失败(如超限位、未使能等)。

使用示例:

C++
    // MoveJ 运动控制
    tl::MoveCmd cmd;
    cmd.targetPosType  = tl::PosType::PType;
    cmd.targetPosName  = "";
    cmd.coord          = tl::Coord::JOINT;   // 关节坐标系
    cmd.velocity       = 40;                 // 速度,单位 %
    cmd.acc            = 10;
    cmd.dec            = 10;
    cmd.pl             = 0;                  // 精确到达
    cmd.targetPosValue = std::vector<double>{
        20.0, 10.0, -10.0, 0.0, 0.0, 0.0, 0.0}; // 关节坐标下单位为度

    auto ret = tl::robot_movej(socket_fd, cmd);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] MoveJ运动控制失败,错误码: " << ret << std::endl;
        return -1;
    }
    // 等待运动到位
    wait_motion_done(socket_fd, 30);
    std::cout << "[信息] MoveJ运动控制成功" << std::endl;

2. robot_movel - 笛卡尔空间直线运动到目标位姿

方法:Result robot_movel(SOCKETFD socketFd, MoveCmd moveCmd);

功能描述:立即下发直角坐标数据,驱动机械臂末端沿直线运动到目标位姿。

参数:

  • socketFd:已连接的句柄。
  • moveCmd:运动命令结构体,需设置以下成员:
    • targetPosType:目标位置类型,PosType 枚举(data / PType / E_TYPE / RP_TYPE / AP_TYPE / GPType / GEType)
    • targetPosName:目标位置名称(使用 P 变量模式时可为空)
    • coord:坐标系,Coord 枚举(JOINT / BASE / TOOL / USER),范围 0~3
    • velocity:速度,范围 0 < velocity ≤ 1000,单位 mm/s
    • acc:加速度,范围 0 < acc ≤ 100
    • dec:减速度,范围 0 < dec ≤ 100
    • pl:平滑度(0 表示精确到达)
    • targetPosValue:目标位置数据,直角坐标下位移单位 mm、旋转单位弧度,如 [X, Y, Z, RX, RY, RZ]

返回值:

  • 0:成功。
  • 非0:失败(如超限位、未使能等)。

使用示例:

C++
    // MoveL 运动控制
    tl::MoveCmd cmd;
    cmd.targetPosType  = tl::PosType::PType;
    cmd.targetPosName  = "";
    cmd.coord          = tl::Coord::BASE;    // 基坐标系(直角)
    cmd.velocity       = 40;                 // 速度,单位 mm/s
    cmd.acc            = 10;
    cmd.dec            = 10;
    cmd.pl             = 0;
    cmd.targetPosValue = std::vector<double>{
        280, 90.0, 270, 3.14, 0.0, 0.0}; // 直角坐标下位移单位 mm,旋转单位弧度

    auto ret = tl::robot_movel(socket_fd, cmd);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] MoveL运动控制失败,错误码: " << ret << std::endl;
        return -1;
    }
    // 等待运动到位
    wait_motion_done(socket_fd, 30);
    std::cout << "[信息] MoveL运动控制成功" << std::endl;

3. robot_go_home - 机器人回原点(home)

方法:Result robot_go_home(SOCKETFD socketFd);

功能描述:回到设定的零点。

参数:

  • socketFd:已连接的句柄。

返回值:

  • 0:成功。
  • 非0:失败。

使用示例:

C++
    // 回到设定的零点
    auto ret = tl::robot_go_home(socket_fd);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 回到零点失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 机器人回到零点成功" << std::endl;

4. robot_go_to_reset_position - 机器人回到复位位置

方法:Result robot_go_to_reset_position(SOCKETFD socketFd);

功能描述:回到控制器预设的复位点。

参数:

  • socketFd:已连接的句柄。

返回值:

  • 0:成功。
  • 非0:失败(如控制器未配置复位点)。

使用示例:

C++
    // 回到控制器预设的复位点
    auto ret = tl::robot_go_to_reset_position(socket_fd);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 回到复位点失败,错误码: " << ret << std::endl;
        return -1;
    }
    std::cout << "[信息] 机器人回到复位位置成功" << std::endl;