- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
六维力传感器查询接口
头文件:include/tl_interface.h
相关示例代码:examples\cpp\ex_six_axis_force.cpp、ex_six_axis_force_drag.cpp、ex_error_zero.cpp
1. set_six_dimensional_force_communication_params - 设置六维力传感器通讯参数
方法:Result set_six_dimensional_force_communication_params(SOCKETFD socketFd, SixDimensionalForceCommunicationParams& params);
功能描述:配置机械臂末端六维力传感器的通讯参数(通讯类型、拖拽使能、自动连接、方向及 EtherCAT/Modbus 等参数)。
参数:
- socketFd:已连接的句柄。
- params:输入参数,SixDimensionalForceCommunicationParams 结构体,主要成员:
- sensorDragEnable:传感器拖拽使能(默认 true)
- originDataInitialPara:原始数据初始参数
- sensorCommunicationType:通讯类型,0=EtherCAT,1=Modbus RTU,2=Modbus TCP
- startupAutoConnectSensor:启动时自动连接传感器(默认 false)
- YDirection:Y 方向(1=正,-1=反)
- ZDirection:Z 方向(1=正,-1=反)
- etherCat_mapNum:EtherCAT 映射数量
- modbus_rtu_slaveID / modbus_rtu_port / modbus_rtu_baudRate 等:Modbus RTU 通讯参数
- modbus_tcp_IP / modbus_tcp_port 等:Modbus TCP 通讯参数
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 1. 设置六维力传感器通讯参数(EtherCAT 通讯类型)
tl::SixDimensionalForceCommunicationParams comm_params;
comm_params.sensorCommunicationType = 0; // 0: EtherCAT
comm_params.startupAutoConnectSensor = true; // 启动自动连接传感器
comm_params.sensorDragEnable = true; // 传感器拖拽使能
comm_params.etherCat_mapNum = 1; // EtherCAT 映射数量
comm_params.YDirection = -1; // Y 方向(-1 反)
comm_params.ZDirection = -1; // Z 方向(-1 反)
auto ret = tl::set_six_dimensional_force_communication_params(socket_fd, comm_params);
if (ret == tl::Result::SUCCESS) {
std::cout << "[成功] 设置六维力传感器通讯参数" << std::endl;
} else {
std::cerr << "[失败] 设置六维力传感器通讯参数失败! ret = " << ret << std::endl;
}
2. get_six_dimensional_force_communication_params - 获取六维力传感器通讯参数
方法:Result get_six_dimensional_force_communication_params(SOCKETFD socketFd, SixDimensionalForceCommunicationParams& params);
功能描述:获取六维力传感器当前的通讯参数配置。
参数:
- socketFd:已连接的句柄。
- params:输出参数,SixDimensionalForceCommunicationParams 结构体,成员同 1.。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 查询当前通讯参数(可在此基础上修改字段后写回,避免覆盖无关配置)
tl::SixDimensionalForceCommunicationParams comm_params;
auto ret = tl::get_six_dimensional_force_communication_params(socket_fd, comm_params);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 查询六维力传感器通讯参数失败! ret = " << ret << std::endl;
return -1;
}
std::cout << " 通讯类型: " << comm_params.sensorCommunicationType
<< " (0=EtherCAT 1=ModbusRTU 2=ModbusTCP)" << std::endl;
std::cout << " 传感器拖拽使能: " << (comm_params.sensorDragEnable ? "开启" : "关闭") << std::endl;
3. get_sensor_base_param - 获取六维力传感器的基础参数
方法:Result get_sensor_base_param(SOCKETFD socketFd, SensorBaseParam& baseParam);
功能描述:获取六维力传感器的基础参数(质量、质心、标零状态)。
参数:
- socketFd:已连接的句柄。
- baseParam:输出参数,SensorBaseParam 结构体,主要成员:
- sensorMass:传感器质量,单位 [kg]
- sensorMassCenterX:质心 X,单位 [mm]
- sensorMassCenterY:质心 Y,单位 [mm]
- sensorMassCenterZ:质心 Z,单位 [mm]
- saveZero:是否已标零(true=已标零)
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 查询标定后的基础参数
tl::SensorBaseParam base_param;
auto ret = tl::get_sensor_base_param(socket_fd, base_param);
if (ret == tl::Result::SUCCESS) {
std::cout << " 传感器质量: " << base_param.sensorMass << std::endl;
std::cout << " 质心 - X: " << base_param.sensorMassCenterX
<< ", Y: " << base_param.sensorMassCenterY
<< ", Z: " << base_param.sensorMassCenterZ << std::endl;
std::cout << " 标零状态: " << (base_param.saveZero ? "已标零" : "未标零") << std::endl;
}
4. mark_base_sensor - 执行六维力传感器标定
方法:Result mark_base_sensor(SOCKETFD socketFd, bool& success);
功能描述:完成六维力传感器零点偏移与正交耦合误差校准,消除自重及安装偏差带来的力信号零漂,保证后续力控采集数据精度。
参数:
- socketFd:已连接的句柄。
- success:输出参数,标定是否成功(true=成功)。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 标定六维力传感器零位/重心
// 操作前请确保:
// 1. 机械臂末端无负载或已安装标准负载
// 2. 机械臂处于竖直姿态(关节各轴在合理位置)
// 3. 周围安全,标定过程中机械臂会缓慢运动
std::cout << "[INFO] 即将执行六维力传感器标定,请确认 (y/n): ";
char confirm = 'n';
std::cin >> confirm;
if (confirm == 'y' || confirm == 'Y') {
bool calib_success = false;
auto ret = tl::mark_base_sensor(socket_fd, calib_success);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 标定六维力传感器失败,错误码: " << ret << std::endl;
} else if (calib_success) {
std::cout << "[INFO] 标定六维力传感器成功" << std::endl;
} else {
std::cerr << "[ERROR] 标定六维力传感器失败,标定结果为 false" << std::endl;
}
}
5. get_sensor_6d_data - 获取六维力传感器数据
方法:Result get_sensor_6d_data(SOCKETFD socketFd, Sensor6DData& sensorData);
功能描述:获取机械臂末端六维力传感器数据(原始数据与去皮后数据)。
参数:
- socketFd:已连接的句柄。
- sensorData:输出参数,Sensor6DData 结构体,主要成员:
- sensorConnected:传感器连接状态(true=已连接)
- fxData / fyData / fzData:原始力数据 Fx / Fy / Fz,单位 [N]
- mxData / myData / mzData:原始力矩数据 Mx / My / Mz,单位 [N·m]
- fxDataSubBase / fyDataSubBase / fzDataSubBase:去皮后力数据,单位 [N]
- mxDataSubBase / myDataSubBase / mzDataSubBase:去皮后力矩数据,单位 [N·m]
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 获取六维力传感器数据
tl::Sensor6DData sensor_data;
auto ret = tl::get_sensor_6d_data(socket_fd, sensor_data);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取六维力传感器数据失败! ret = " << ret << std::endl;
return -1;
}
std::cout << " 传感器连接状态: "
<< (sensor_data.sensorConnected ? "已连接" : "未连接") << std::endl;
std::cout << std::fixed << std::setprecision(3);
std::cout << " --- 传感器原始数据 ---" << std::endl;
std::cout << " Fx = " << sensor_data.fxData << " N" << std::endl;
std::cout << " Fy = " << sensor_data.fyData << " N" << std::endl;
std::cout << " Fz = " << sensor_data.fzData << " N" << std::endl;
std::cout << " Mx = " << sensor_data.mxData << " N·m" << std::endl;
std::cout << " My = " << sensor_data.myData << " N·m" << std::endl;
std::cout << " Mz = " << sensor_data.mzData << " N·m" << std::endl;
std::cout << " --- 去皮后数据 ---" << std::endl;
std::cout << " Fx = " << sensor_data.fxDataSubBase << " N" << std::endl;
std::cout << " Fy = " << sensor_data.fyDataSubBase << " N" << std::endl;
std::cout << " Fz = " << sensor_data.fzDataSubBase << " N" << std::endl;
std::cout << " Mx = " << sensor_data.mxDataSubBase << " N·m" << std::endl;
std::cout << " My = " << sensor_data.myDataSubBase << " N·m" << std::endl;
std::cout << " Mz = " << sensor_data.mzDataSubBase << " N·m" << std::endl;
6. get_payload_param_by_sensor - 获取六维力传感器负载参数
方法:Result get_payload_param_by_sensor(SOCKETFD socketFd, PayloadParamBySensor& param);
功能描述:获取基于六维力传感器标定的负载参数(负载质量与质心)。
参数:
- socketFd:已连接的句柄。
- param:输出参数,PayloadParamBySensor 结构体,主要成员:
- payloadMass:负载质量,单位 [kg]
- payloadMassCenterX:负载质心 X,单位 [mm]
- payloadMassCenterY:负载质心 Y,单位 [mm]
- payloadMassCenterZ:负载质心 Z,单位 [mm]
返回值:
- 0:成功。
- 非0:失败。
