SDK说明

一、概述

fd_api C++ SDK 是天链机器人外设的 C++ 共享库,提供高效、低延迟的接口用于控制机器人底盘、升降、头部、腰部、手部、机械臂六大外设模块,并支持实时状态读取与异步订阅。适用于对性能要求较高的 C++ 上位机应用。

SDK 底层基于 ROS 2(rclcpp)通信机制实现,采用 PIMPL(Pointer to Implementation) 惯用法设计,对外头文件不包含任何 ROS 头文件,使用者无需依赖 ROS 2 构建环境即可编译引用。

提供与 Python SDK 一致的接口语义,便于多语言团队协作维护。

核心特性

统一架构
Control / State 分离,职责清晰
PIMPL 封装
对外零 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)
ARM 架构(如 Jetson 系列)如需使用,请联系技术支持获取交叉编译方案。

软件依赖

组件 版本要求 说明
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
与 Python SDK 的区别:C++ SDK 对外头文件不包含任何 ROS 头文件,链接时依赖 ROS 2 库;Python SDK 则直接依赖 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"
fd_api C++ 共享库
Control(控制)· State(状态)· types(类型)
PIMPL 实现 · 对外零 ROS 暴露
ROS 2(rclcpp)通信层
发布 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 机械臂关节采样数据
以上 3 个类型仅 C++ 导出,Python SDK 不提供。

五、快速开始

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)
机械臂状态接口为 C++ 独有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),单次调用不足以维持连续升降。
DOF 由机型决定arm_move_joints 入参长度须等于该侧 DOF(默认 7hh_y2_bdt6);当 arm_dof_left/right = 0 时从 robot_profile 解析。
dual 模式前置条件:dual 模式下机械臂关节运动通常需先收到关节状态。
点位导航兼容性chassis_goto_mark 在 slamtec 底盘上会立即 failed,点位导航仅 woosh / yunji 支持;且需 chassis_status_updater_node 运行。
实机安全:运行前请确认机器人外设节点已启动且机器人处于安全状态。
头部角度限幅HeadType::kLower (yaw) 限幅 -45°~+45°,HeadType::kUpper (pitch) 限幅 -15°~+25°。输入超限值会被自动钳位。
腰部角度范围:位置控制范围为 0°~35°。
多实例约束:多实例使用时 node_name 不能冲突;C++ 版靠析构自动释放资源,无需手动 close()
同步读取语义:C++ 同步读接口用 bool 返回值表示"是否有有效数据",实际数据通过出参写入;请先判断返回值再使用出参。
回调线程安全:状态订阅回调在线程池中执行,线程数量由 State::Options::callback_thread_count 配置(默认 2)。请确保回调函数内部无竞态条件。
fd_api C++ SDK — 天链机器人 © 2026

  • 文件大小: 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

  • 文件大小: 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

  • 文件大小: 102.2MB

  • 文件大小: 609.5MB

  • 文件大小: 111.5MB

  • 文件大小: 3.4MB

  • 文件大小: 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

  • 文件大小: 149.7MB