SDK说明

一、概述

fd_api 是天链机器人外设的 Python 软件开发工具包(SDK), 提供统一、便捷的接口用于控制机器人升降、头部、腰部、手部四大外设模块, 并支持实时状态读取与异步订阅。

SDK 底层基于 ROS 2 通信机制实现,封装了底层 Topic 发布/订阅细节, 上层应用无需关心 ROS 节点通信逻辑,通过简洁的 Python API 即可快速集成机器人控制功能。

核心特性

统一架构
Control / State 分离,职责清晰
双语言支持
Python 模块 + C++ 共享库,接口一致
双模状态
同步缓存读取 + 异步回调订阅
多手兼容
RoHand & Inspire 双后端
健康监控
外设健康 + 系统资源实时感知
自动限幅
头/腰部角度自动限幅防越界

适用场景

  • 机器人上位机应用程序开发
  • 机器人遥操作与远程监控系统
  • 机器人自动化流程集成
  • 机器人状态数据采集与可视化

接口说明

详细的 Control / State 接口定义与使用方法请参见 《fd_api Python 接口文档》。

与 C++ SDK 的区别:Python SDK 直接依赖 rclpy 运行时环境, API 以 Python 模块形式提供,无需编译链接;C++ SDK 则采用 PIMPL 惯用法封装, 对外头文件不包含任何 ROS 头文件。两者接口语义一致,选择取决于应用场景的性能需求。

二、支持的操作系统与软件版本

操作系统

平台 支持版本 架构
Ubuntu 20.04 LTS / 22.04 LTS amd64 (x86_64)
兼容 ROS 2 的 Linux 发行版 — amd64 (x86_64)
ARM 架构(如 Jetson 系列)如需使用,请联系技术支持获取交叉编译方案。

软件依赖

组件 版本要求 说明
ROS 2 Humble / Galactic / Foxy 通信中间件
Python ≥ 3.8 推荐 3.10+
colcon ≥ 1.2 ROS 2 构建工具
C++ 编译器 GCC ≥ 9.4 仅 C++ 共享库需要

ROS 2 依赖包

构建与运行需安装以下 ROS 2 包:

# ROS 2 Humble (Ubuntu 22.04)
sudo apt install ros-humble-std-msgs ros-humble-diagnostic-msgs

# ROS 2 Galactic (Ubuntu 20.04)
sudo apt install ros-galactic-std-msgs ros-galactic-diagnostic-msgs

# ROS 2 Foxy (Ubuntu 20.04)
sudo apt install ros-foxy-std-msgs ros-foxy-diagnostic-msgs

Python 依赖

包名 用途
rclpy ROS 2 Python 客户端库
std_msgs 标准消息类型
diagnostic_msgs 诊断消息类型
以上依赖在安装 ROS 2 后自动包含,无需额外 pip 安装。

三、SDK 结构

3.1 包目录结构

fd_api/                          # ROS 2 功能包根目录
├── package.xml                  # ROS 2 包元信息
├── CMakeLists.txt               # 构建配置(C++ + Python 混合编译)
├── setup.py                     # Python 模块安装配置
│
├── include/                     # C++ 头文件(Python SDK 不直接使用)
│   └── fd_api/
│       ├── control.h            # C++ Control 类声明
│       ├── state.h              # C++ State 类声明
│       ├── types.h              # C++ 枚举类型定义
│       └── robot_state_types.h  # C++ 健康状态数据结构
│
├── fd_api/                      # Python 模块目录 ★
│   ├── __init__.py              # 模块入口,导出全部公开 API
│   ├── control.py               # Control 类 — 外设控制接口
│   ├── state.py                 # State 类 — 外设状态读取/订阅
│   ├── types.py                 # 枚举类型定义
│   ├── waist_angle.py           # 腰部编码器 ↔ 角度转换工具
│   └── robot_state_types.py     # 健康状态数据类
│
├── resource/                    # ROS 2 资源文件
├── test/                        # 测试代码
│   ├── api_test_node.cpp        # C++ 交互测试
│   └── api_test_node_for_python_api.py  # Python 交互测试
│
└── launch/                      # 启动文件(可选)

3.2 模块分层

上层应用程序
from fd_api import Control, State
▼
fd_api Python 模块
Control(控制) · State(状态) · types(类型)
▼
ROS 2(rclpy)通信层
发布 Topic · 订阅 Topic
▼
机器人硬件外设
升降 · 头部 · 腰部 · 手部

3.3 模块文件说明

文件 职责 公开类 / 函数
__init__.py 模块入口,统一导出 State · Control · HeadType · HandType · HandBackend · 健康类型
control.py 外设控制接口 Control 类
state.py 外设状态读取 / 订阅 State 类
types.py 枚举类型定义 HeadType · HandType · HandBackend
waist_angle.py 腰部角度工具 waist_encoder_to_deg() · waist_deg_to_encoder()
robot_state_types.py 健康状态数据结构 PeripheralHealth · SystemResources · RobotHealthSnapshot · HealthLevel · ApiFaultKind · PeripheralId

3.4 Control 类 — 控制接口

方法 功能 所属模块
init(options_dict) 初始化控制节点 通用
lift_up(spd) 升降上升(速度模式) 升降
lift_down(spd) 升降下降(速度模式) 升降
lift_pos(spd, pos_mm) 升降位置控制 升降
lift_stop() 升降停止 升降
head_pos(head_type, pos_deg) 头部角度控制 头部
head_stop(head_type) 头部停止 头部
waist_front(spd, acc, dec) 腰部前倾(速度模式) 腰部
waist_back(spd, acc, dec) 腰部后仰(速度模式) 腰部
waist_pos(spd, acc, dec, pos_deg) 腰部位置控制 腰部
waist_stop() 腰部停止 腰部
hand_move(hand_type, value) 手部动作控制 手部
hand_stop(hand_type) 手部停止 手部

3.5 State 类 — 状态接口

方法 功能 获取方式
init(options_dict) 初始化状态节点 —
lift_get_current_pos() 读取升降当前位置 (mm) 同步缓存
head_get_current_pos(head_type) 读取头部当前位置 (deg) 同步缓存
waist_get_current_pos() 读取腰部当前位置 (deg) 同步缓存
hand_get_current_pos(hand_type) 读取手部当前位置 同步缓存
lift_sub_current_pos(callback) 订阅升降位置变化 异步回调
head_sub_current_pos(callback) 订阅头部位置变化 异步回调
waist_sub_current_pos(callback) 订阅腰部位置变化 异步回调
hand_sub_current_pos(hand_type, callback) 订阅手部位置变化 异步回调
runtime_get_idle_state() 查询机器人闲置状态 同步缓存
runtime_sub_idle_state(callback) 订阅闲置状态变化 异步回调
health_get_peripheral(id) 查询外设健康状态 同步缓存
health_get_system_resources() 查询系统资源使用 同步缓存
health_sub_snapshot(callback) 订阅健康快照 异步回调
unsubscribe(sub_id) 取消订阅 —

3.6 辅助工具

函数 功能
waist_encoder_to_deg(enc) 腰部编码器值 → 角度 (0°~35°)
waist_deg_to_encoder(deg) 角度 → 编码器值 (262144~310000)

四、快速开始

4.1 环境准备

确保已安装 ROS 2 并完成环境配置:

source /opt/ros/humble/setup.bash

4.2 编译安装

# 在工作空间下编译
colcon build --packages-select fd_api

# 加载环境
source install/setup.bash

4.3 导入使用

from fd_api import Control, State, HeadType, HandType

# ── 控制示例 ──
ctrl = Control()
ctrl.init({"node_name": "my_control"})
ctrl.lift_up(0.5)                    # 以速度 0.5 上升
ctrl.head_pos(HeadType.kLower, 30.0) # 下头转到 30°

# ── 状态示例 ──
state = State()
state.init({"node_name": "my_state"})
pos = state.lift_get_current_pos()   # 读取升降位置
print(f"当前升降位置: {pos} mm")

五、注意事项

速度模式超时停止:升降速度模式(lift_up / lift_down)下, 驱动在约 1 秒 内未收到新速度命令会自动停止, 上位机须 周期性调用(建议间隔 < 500ms)。
实机安全:运行前请确认机器人外设节点已启动且机器人处于安全状态。
头部角度限幅:kLower (yaw) 限幅 -45°~+45°, kUpper (pitch) 限幅 -15°~+25°。
腰部角度范围:位置控制范围为 0°~35°。
回调线程安全:状态订阅回调在线程池中执行,注意回调函数的线程安全性。
fd_api Python SDK — 天链机器人 © 2026