碰撞检测接口

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

1. set_collision - 设置碰撞防护参数

方法:Result set_collision(SOCKETFD socketFd, CollisionPara& param);

功能描述:设置碰撞防护参数(24.03 版本新增接口)。可将各轴碰撞检测系数写入控制器;指令位置响应时间(position_delay_time_ms_value)影响碰撞保护实时性,不建议手动修改,建议沿用查询到的原值。

参数:

  • socketFd:已连接的句柄。
  • param:输入参数,CollisionPara 结构体主要成员:
    • collisionDetection_run:碰撞检测阈值(指令),第几位为第几轴,参数范围 [1,10000]
    • collisionDetection_teach:碰撞检测阈值(点动),第几位为第几轴,参数范围 [1,10000]
    • position_delay_time_ms_value:指令位置响应时间,参数范围 (0,99] ms
    • error_enable_time_ms_value:误差允许时间,参数范围 [0,99] ms
    • axisum:机器人轴数,默认为六轴(6)

返回值:

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

使用示例:

C++
    // 查询当前碰撞参数,基于原值修改后写回,避免覆盖无关配置
    tl::CollisionPara cur_param;
    auto ret = tl::get_collision(sock, cur_param);
    if (ret != tl::Result::SUCCESS || cur_param.collisionDetection_run.empty()) {
        std::cerr << "[ERROR] 查询碰撞参数失败(当前固件可能不支持 get_collision)" << std::endl;
        return -1;
    }

    tl::CollisionPara set_param = cur_param;
    // 演示: 所有轴碰撞检测系数统一设为 98(系数无量纲)
    set_param.collisionDetection_run.assign(set_param.collisionDetection_run.size(), 98.0);
    set_param.collisionDetection_teach = set_param.collisionDetection_run;  // 点动阈值同步
    // 指令位置响应时间建议沿用查询原值,不手动设置

    ret = tl::set_collision(sock, set_param);
    if (ret != tl::Result::SUCCESS) {
        std::cerr << "[ERROR] 设置碰撞参数失败(当前固件可能不支持 set_collision)" << std::endl;
        return -1;
    }
    std::cout << "[信息] 设置碰撞参数成功(系数=98)" << std::endl;

2. get_collision - 获取碰撞防护参数

方法:Result get_collision(SOCKETFD socketFd, CollisionPara& param);

功能描述:获取碰撞防护参数(24.03 版本新增接口)。

说明:与 get_collision_detection_param 功能相同,为推荐使用的查询接口。

参数:

  • socketFd:已连接的句柄。
  • param:输出参数,CollisionPara 结构体,成员同 1.

返回值:

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

使用示例:

C++
    // 查询当前碰撞防护参数
    tl::CollisionPara collision_param;
    auto ret = tl::get_collision(sock, collision_param);
    if (ret == tl::Result::SUCCESS) {
        std::cout << "  碰撞检测阈值(指令): ";
        for (const auto& val : collision_param.collisionDetection_run) {
            std::cout << val << " ";
        }
        std::cout << std::endl;
        std::cout << "  碰撞检测阈值(点动): ";
        for (const auto& val : collision_param.collisionDetection_teach) {
            std::cout << val << " ";
        }
        std::cout << std::endl;
        std::cout << "  指令位置响应时间: " << collision_param.position_delay_time_ms_value << " ms" << std::endl;
        std::cout << "  误差允许时间: " << collision_param.error_enable_time_ms_value << " ms" << std::endl;
        std::cout << "  机器人轴数: " << collision_param.axisum << std::endl;
    }