- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
7000端口接口说明
以下功能在连接7000端口后使用
头文件:include/tl_servo_ext.h
相关示例代码:examples\cpp\ex_servoj.cpp
1. open_servoJ - 打开关节跟踪模式
方法:Result open_servoJ(SOCKETFD socketFd, std::vector<double> vmax, std::vector<double> amax, std::vector<double> jmax);
功能描述:打开关节跟踪模式(底层 servoJ 透传)。连接 7000 端口后调用本接口即可进入透传模式,之后可高频调用 set_servoJ_pos 实时下发关节角。
参数:
- socketFd:socket(7000 伺服端口)。
- vmax:关节最大速度约束(固定 7 元素,°/s)。
- amax:关节最大加速度约束(固定 7 元素,°/s²)。
- jmax:关节最大加加速度约束(固定 7 元素,°/s³)。
返回值:
- 0:成功。
- 非0:失败(任一约束向量长度 ≠ 7 时返回参数错误)。
使用示例:
C++
// 打开 servoJ 关节实时跟踪模式
// 注意: SDK 底层协议要求 servoJ 相关向量固定为 7 元素,
// 6 轴机器人在第 7 元素(索引 6)补 0,7 轴机器人为真实 J7 约束值
std::vector<double> vmax = {30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0}; // °/s
std::vector<double> amax = {60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0}; // °/s²
std::vector<double> jmax = {100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0}; // °/s³
auto ret = tl::open_servoJ(socket_fd, vmax, amax, jmax);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] open_servoJ 失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 关节跟踪模式已打开" << std::endl;
2. close_servoJ - 关闭关节跟踪模式
方法:Result close_servoJ(SOCKETFD socketFd);
功能描述:关闭关节跟踪模式(底层 servoJ 透传),停止实时关节角下发。
参数:
- socketFd:socket(7000 伺服端口)。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
C++
// 关闭 servoJ 关节跟踪模式
auto ret = tl::close_servoJ(socket_fd);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[WARN] close_servoJ 返回: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 关节跟踪模式已关闭" << std::endl;
3. set_servoJ_pos - 设置实时跟踪关节位置
方法:Result set_servoJ_pos(SOCKETFD socketFd, std::vector<double> q);
功能描述:实时发送目标关节角到控制器(透传模式,10ms 周期高频调用)。控制器直接响应,实现平滑实时跟踪。
参数:
- socketFd:socket(7000 伺服端口)。
- q:目标关节角,7 元素向量(度);6 轴机器人在第 7 元素(索引 6)补 0(外部轴),7 轴机器人第 7 元素为真实 J7 关节角。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
C++
// 高频发送关节角(J1 从 0° 平滑转到 30°)
std::vector<double> q = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
for (int i = 0; i < 200; ++i) {
q[0] += (30.0 / 200.0); // 每次增加 0.15°
auto ret = tl::set_servoJ_pos(socket_fd, q);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] set_servoJ_pos 失败,错误码: " << ret << std::endl;
return -1;
}
std::this_thread::sleep_for(std::chrono::milliseconds(10)); // 100Hz
}
std::cout << "[信息] J1=30° 到位" << std::endl;
