SDK说明
fd_api Python SDK 说明
天链机器人外设控制 · Python 软件开发工具包
一、概述
fd_api 是天链机器人外设的 Python 软件开发工具包(SDK), 提供统一、便捷的接口用于控制机器人升降、头部、腰部、手部四大外设模块, 并支持实时状态读取与异步订阅。
SDK 底层基于 ROS 2 通信机制实现,封装了底层 Topic 发布/订阅细节, 上层应用无需关心 ROS 节点通信逻辑,通过简洁的 Python API 即可快速集成机器人控制功能。
核心特性
统一架构
Control / State 分离,职责清晰
Control / State 分离,职责清晰
双语言支持
Python 模块 + C++ 共享库,接口一致
Python 模块 + C++ 共享库,接口一致
双模状态
同步缓存读取 + 异步回调订阅
同步缓存读取 + 异步回调订阅
多手兼容
RoHand & Inspire 双后端
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
▼
from fd_api import Control, State
fd_api Python 模块
Control(控制) · State(状态) · types(类型)
▼
Control(控制) · State(状态) · types(类型)
ROS 2(rclpy)通信层
发布 Topic · 订阅 Topic
▼
发布 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°。
回调线程安全:状态订阅回调在线程池中执行,注意回调函数的线程安全性。
