SDK说明
fd_api C++ SDK 说明
天链机器人外设控制 · C++ 共享库软件开发工具包
PIMPL 封装 · 无 ROS 头文件暴露一、概述
fd_api C++ SDK 是天链机器人外设的 C++ 共享库,提供高效、低延迟的接口用于控制机器人底盘、升降、头部、腰部、手部、机械臂六大外设模块,并支持实时状态读取与异步订阅。适用于对性能要求较高的 C++ 上位机应用。
SDK 底层基于 ROS 2(rclcpp)通信机制实现,采用 PIMPL(Pointer to Implementation) 惯用法设计,对外头文件不包含任何 ROS 头文件,使用者无需依赖 ROS 2 构建环境即可编译引用。
提供与 Python SDK 一致的接口语义,便于多语言团队协作维护。
核心特性
Control / State 分离,职责清晰
对外零 ROS 头文件暴露
同步缓存读取 + 异步回调订阅
RoHand & Inspire 双后端
外设健康 + 系统资源实时感知
头 / 腰部角度自动限幅防越界
const 引用传递,避免数据拷贝
回调线程数可配置
适用场景
- 高性能机器人上位机应用程序开发
- 实时机器人遥操作与远程监控系统
- 工业自动化流程集成
- 嵌入式 / 边缘计算节点部署
接口说明
详细的 Control / State 接口定义与使用方法请参见 《fd_api C++ 接口文档》。
二、支持的操作系统与软件版本
操作系统
| 平台 | 支持版本 | 架构 |
|---|---|---|
| Ubuntu | 20.04 LTS / 22.04 LTS | amd64 (x86_64) |
| 兼容 ROS 2 的 Linux 发行版 | — | amd64 (x86_64) |
软件依赖
| 组件 | 版本要求 | 说明 |
|---|---|---|
| ROS 2 | Humble / Galactic / Foxy | 通信中间件(运行时 / 编译需要) |
| C++ 标准 | C++17 | 编译要求 |
| 编译器 | GCC ≥ 9.4 | 支持 C++17 |
| colcon | ≥ 1.2 | ROS 2 构建工具 |
| CMake | ≥ 3.16 | 构建系统 |
ROS 2 依赖包
# ROS 2 Humble (Ubuntu 22.04)
sudo apt install ros-humble-std-msgs ros-humble-diagnostic-msgs
# ROS 2 Galactic / Foxy (Ubuntu 20.04)
sudo apt install ros-galactic-std-msgs ros-galactic-diagnostic-msgs
sudo apt install ros-foxy-std-msgs ros-foxy-diagnostic-msgs
rclpy 运行时环境。三、SDK 结构
3.1 包目录结构
fd_api/ # ROS 2 功能包根目录
├── package.xml # ROS 2 包元信息
├── CMakeLists.txt # 构建配置(C++ + Python 混合编译)
├── setup.py # Python 模块安装配置
│
├── include/ # C++ 对外头文件 ★
│ └── fd_api/
│ ├── control.h # Control 类声明
│ ├── state.h # State 类声明(含回调类型)
│ ├── types.h # 枚举类型定义
│ └── robot_state_types.h # 健康状态数据结构
│
├── src/ # C++ 实现源文件
│ ├── control.cpp # Control 实现(PIMPL)
│ ├── state.cpp # State 实现(PIMPL)
│ └── ... # 内部实现文件
│
├── fd_api/ # Python 模块目录
│ └── ...
│
├── test/
│ ├── api_test_node.cpp # C++ 交互测试节点
│ └── api_test_node_for_python_api.py
│
└── launch/
3.2 模块分层
#include "fd_api/control.h"
Control(控制)· State(状态)· types(类型)
PIMPL 实现 · 对外零 ROS 暴露
发布 Topic · 订阅 Topic
底盘 · 升降 · 头部 · 腰部 · 手部 · 机械臂
3.3 头文件说明
| 头文件 | 职责 | 公开内容 |
|---|---|---|
| include/fd_api/control.h | 控制接口声明 | fd_robot::Control 类、Control::Options 配置结构体 |
| include/fd_api/state.h | 状态读取 / 订阅接口 | fd_robot::State 类、State::Options 配置结构体、回调类型别名 |
| include/fd_api/types.h | 枚举类型定义 | HeadType · HandType · HandBackend 等 |
| include/fd_api/robot_state_types.h | 健康状态数据结构 | HealthLevel · ApiFaultKind · PeripheralId · PeripheralHealth · SystemResources · RobotHealthSnapshot |
四、类型体系
C++ SDK 共定义 13 个类型,按用途分为三类:
4.1 基础枚举
| 类型 | 说明 |
|---|---|
| HeadType | 头部类型:kLower(下头,yaw)/ kUpper(上头,pitch) |
| HandType | 手部类型:左 / 右 / 双手 |
| HandBackend | 手部后端:RoHand / Inspire / 双后端 |
| ArmSide | 机械臂侧别:左臂 / 右臂 |
| HealthLevel | 健康等级:未知 / 正常 / 警告 / 错误 / 过时 |
| ApiFaultKind | 故障类别:无 / 降级 / 硬件故障 / 通信丢失 |
4.2 外设标识与健康
| 类型 | 说明 |
|---|---|
| PeripheralId | 外设标识(0–43),覆盖电机、相机、力传感器、IMU、激光、导航、大小脑 CPU/内存/存储、电源等 43 个外设 |
| PeripheralHealth | 外设健康:level + fault + detail |
| SystemResources | 系统资源占用(CPU / 内存 / 存储等) |
| RobotHealthSnapshot | 整机健康快照(聚合多个外设状态) |
4.3 C++ 独有类型
| 类型 | 说明 |
|---|---|
| ChassisNavStatus | 底盘导航状态 |
| ArmEndPose | 机械臂末端位姿 |
| ArmJointSample | 机械臂关节采样数据 |
五、快速开始
5.1 环境准备
确保已安装 ROS 2 并完成环境配置:
source /opt/ros/humble/setup.bash
5.2 编译安装
# 在工作空间下编译
colcon build --packages-select fd_api
# 加载环境
source install/setup.bash
5.3 最小接入示例
#include "fd_api/control.h"
#include "fd_api/state.h"
fd_robot::Control control;
fd_robot::State state;
// C++ 版 Init 可能返回 false,需检查
if (!control.Init()) { return -1; }
if (!state.Init()) { return -1; }
// 控制:升降到位 400mm
control.lift_set_pos(400.0f);
// 状态:同步读当前升降位置(出参 + bool 表示是否有效)
float pos = 0.0f;
if (state.lift_get_current_pos(pos)) {
// 使用 pos
}
5.4 运行交互测试
ros2 run fd_api api_test_node
启动后进入菜单,可按按键交互测试各外设的控制与状态功能。详细接口使用请参见 《fd_api C++ 接口文档》。
六、接口速览
以下是 Control / State 两大模块的接口分组总览。C++ 版接口命名全部为 snake_case(如 lift_set_pos)。
6.1 Control 接口(7 组)
| 外设 | 接口 | 说明 |
|---|---|---|
| 升降 | lift_up / lift_down | 速度模式升降(需周期调用,间隔 < 500ms) |
| lift_set_pos | 位置控制,约 0–700mm | |
| lift_stop | 停止升降 | |
| lift_set_orig | 设定原点 | |
| lift_status_cmd | 升降状态命令(仅 C++) | |
| 头部 | head_set_pos | 位置控制(自动按 profile 限幅) |
| head_stop | 停止头部 | |
| 腰部 | waist_front / waist_back | 前倾 / 后倾 |
| waist_set_pos | 位置控制,0°–35° | |
| waist_stop | 停止腰部 | |
| 手部 | hand_move | 手部动作(RoHand 6 关节值 / Inspire 首个整型开度) |
| hand_stop | 停止手部 | |
| 底盘 | chassis_move | 移动:0 前进 / 1 后退 / 2 右转 / 3 左转 |
| chassis_nav_status | 导航状态(仅 C++) | |
| chassis_goto_mark | 点位导航(仅 woosh / yunji) | |
| chassis_goto_pose | 位姿导航(三家底盘均支持) | |
| chassis_cancel_nav | 取消导航 | |
| chassis_wait_arrived | 等待到达目标 | |
| 机械臂 | arm_set_speed | 设置速度 |
| arm_move_joints(_deg) | 按关节角度 / 度数运动(长度须等于该侧 DOF) | |
| arm_joint_jog | 关节点动 | |
| arm_joint_step_deg | 关节按度数步进 | |
| arm_power_on(_both) / arm_power_off_both | 上电 / 断电(单侧或双侧) | |
| arm_set_six_axis_force_enable | 六轴力控使能(仅 C++) | |
| arm_stop | 停止机械臂 | |
| arm_move_axis_delta | 按轴增量运动 | |
| arm_move_to_target / location | 移动到目标点 / 位置 | |
| arm_move_joints_traj | 关节轨迹运动 |
arm_move_axis_delta / arm_move_to_target / arm_move_to_location / arm_move_joints_traj)依赖 arm_api_base 的 HTTP 服务。6.2 State 接口(8 组)
| 外设 / 能力 | 接口 | 说明 |
|---|---|---|
| 升降 / 头部 / 腰部 / 手部 | get_current_pos | 同步读取当前位置(出参 + bool 有效性) |
| sub_current_pos | 订阅位置变化(异步回调) | |
| 机械臂 | arm_get_joint_angles | 读关节角度 |
| arm_sub_joint_angles | 订阅关节角度 | |
| arm_sub_joint_samples | 订阅关节采样 | |
| arm_get_end_pose | 读末端位姿 | |
| arm_sub_end_pose | 订阅末端位姿 | |
| 运行时 | runtime_get_idle_state | 查询空闲状态 |
| 健康 | health_get_peripheral | 查询外设健康 |
| health_get_system_resources | 查询系统资源 | |
| health_sub_snapshot | 订阅整机健康快照 | |
| 通用 | unsubscribe | 取消订阅(传入订阅 ID) |
arm_get_joint_angles / arm_sub_joint_angles / arm_sub_joint_samples / arm_get_end_pose / arm_sub_end_pose 仅 C++ SDK 提供,Python SDK 不提供。七、注意事项
lift_up / lift_down)下,驱动在约 1 秒 内未收到新速度命令会自动停止,上位机须 周期性调用(建议间隔 < 500ms),单次调用不足以维持连续升降。arm_move_joints 入参长度须等于该侧 DOF(默认 7,hh_y2_bdt 为 6);当 arm_dof_left/right = 0 时从 robot_profile 解析。chassis_goto_mark 在 slamtec 底盘上会立即 failed,点位导航仅 woosh / yunji 支持;且需 chassis_status_updater_node 运行。HeadType::kLower (yaw) 限幅 -45°~+45°,HeadType::kUpper (pitch) 限幅 -15°~+25°。输入超限值会被自动钳位。node_name 不能冲突;C++ 版靠析构自动释放资源,无需手动 close()。bool 返回值表示"是否有有效数据",实际数据通过出参写入;请先判断返回值再使用出参。State::Options::callback_thread_count 配置(默认 2)。请确保回调函数内部无竞态条件。机械臂URDF文件
-
文件大小: 2.5MB
-
文件大小: 2.4MB
-
文件大小: 2.3MB
-
文件大小: 2.2MB
-
文件大小: 2.1MB
-
文件大小: 2.5MB
-
文件大小: 2.4MB
-
文件大小: 2.4MB
-
文件大小: 2.4MB
-
文件大小: 2.2MB
-
文件大小: 2.1MB
-
文件大小: 2.1MB
-
文件大小: 2.0MB
-
文件大小: 2.1MB
-
文件大小: 2.1MB
机械尺寸
-
文件大小: 113.2KB
-
文件大小: 93.8KB
-
文件大小: 96.6KB
-
文件大小: 96.1KB
-
文件大小: 122.3KB
-
文件大小: 113.7KB
-
文件大小: 98.2KB
-
文件大小: 110.7KB
-
文件大小: 162.4KB
机械臂STEP文件
-
文件大小: 45.1MB
-
文件大小: 42.6MB
-
文件大小: 42.0MB
-
文件大小: 34.4MB
-
文件大小: 30.2MB
-
文件大小: 30.4MB
-
文件大小: 22.3MB
-
文件大小: 22.3MB
机械臂三维模型可转动版
-
文件大小: 12.6MB
-
文件大小: 10.5MB
-
文件大小: 13.1MB
-
文件大小: 13.1MB
-
文件大小: 12.6MB
-
文件大小: 11.2MB
-
文件大小: 11.1MB
-
文件大小: 11.2MB
-
文件大小: 11.2MB
-
文件大小: 11.2MB
-
文件大小: 11.2MB
-
文件大小: 10.5MB
机械臂API(ROS2)下载
-
文件大小: 102.2MB
机械臂控制器下载
-
文件大小: 609.5MB
机械臂示教器下载
-
文件大小: 111.5MB
机械臂SDK下载
-
文件大小: 3.4MB
W1相关资料
-
文件大小: 59.2MB
底部版权
相关下载
-
文件大小: 149.7MB
-
文件大小: 96.0KB
-
文件大小: 103.1KB
-
文件大小: 89.8KB
-
文件大小: 105.0KB
-
文件大小: 112.2KB
-
文件大小: 115.6KB
-
文件大小: 118.0KB
-
文件大小: 109.3KB
-
文件大小: 114.5KB
-
文件大小: 270.4KB
电气原理图
-
文件大小: 270.4KB
技术资料
-
文件大小: 105.0KB
-
文件大小: 112.2KB
-
文件大小: 118.0KB
-
文件大小: 115.6KB
-
文件大小: 109.3KB
-
文件大小: 114.5KB
机械尺寸
-
文件大小: 96.0KB
-
文件大小: 103.1KB
-
文件大小: 89.8KB
3D模型
-
文件大小: 149.7MB
航空航天
伺服行业
叉车
闸机
观光巴士
