用于灵心巧手系列灵巧手的 C++ 软件开发工具包
LinkerHand-CPP-SDK 是由灵心巧手(北京)科技有限公司开发的官方 C++ SDK,提供完整的 API 接口用于控制 O6、L6、L7、L10、L20、L21、L25 等型号的灵巧手设备。
- 🎯 多型号支持 - 支持 O6、L6、L7、L10、L20、L21、L25 等多种型号
- 🚀 简单易用 - 提供简洁的 C++ API 接口
- 🔌 通信协议 - 支持 CAN 通信
- 📊 传感器数据 - 实时获取压力、温度、电流等传感器数据
- 🎮 精确控制 - 支持关节位置、速度、扭矩的精确控制
- 🔄 实时反馈 - 获取关节状态、电机故障码等实时信息
- 🛠️ 跨平台 - 支持 Linux (x86_64, aarch64)
- 📚 完整文档 - 提供详细的 API 文档和使用示例
- 操作系统: Linux (Ubuntu 18.04+ 推荐)
- 架构: x86_64 或 aarch64
- 编译器: GCC 7.0+ 或 Clang 5.0+
- CMake: 3.15+
- 依赖: pthread
git clone https://github.com/linker-bot/linkerhand-cpp-sdk.git
cd linkerhand-cpp-sdk./script.sh选择选项 [2]: Install SDK 进行构建和安装。
创建 main.cpp 文件:
#include "LinkerHandApi.h"
#include <iostream>
#include <thread>
#include <chrono>
int main() {
// 初始化 L10 型号右手
LinkerHandApi hand(LINKER_HAND::L10, HAND_TYPE::RIGHT);
// 获取版本信息
std::cout << "SDK Version: " << hand.getVersion() << std::endl;
// 握拳动作
std::vector<uint8_t> fist_pose = {101, 60, 0, 0, 0, 0, 255, 255, 255, 51};
hand.fingerMove(fist_pose);
std::this_thread::sleep_for(std::chrono::seconds(1));
// 张开动作
std::vector<uint8_t> open_pose = {255, 104, 255, 255, 255, 255, 255, 255, 255, 71};
hand.fingerMove(open_pose);
std::this_thread::sleep_for(std::chrono::seconds(1));
return 0;
}创建 CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(LinkerHand-CPP-SDK)
# 检测系统架构
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
set(LIB_SUBDIR "x86_64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64")
set(LIB_SUBDIR "aarch64")
else()
message(WARNING "Unknown architecture, defaulting to x86_64")
set(LIB_SUBDIR "x86_64")
endif()
# 查找库文件
find_library(LINKER_HAND_LIB
NAMES linkerhand_cpp_sdk
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/${LIB_SUBDIR}
/usr/local/lib/linkerhand-cpp-sdk/${LIB_SUBDIR}
/usr/lib/linkerhand-cpp-sdk/${LIB_SUBDIR}
NO_DEFAULT_PATH
)
# 查找头文件
set(LINKER_HAND_INCLUDE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/include
/usr/local/include/linkerhand-cpp-sdk
/usr/include/linkerhand-cpp-sdk
)
if(NOT LINKER_HAND_LIB)
message(FATAL_ERROR "linkerhand_cpp_sdk library not found!")
endif()
# 包含头文件
include_directories(${LINKER_HAND_INCLUDE_DIR})
# 创建可执行文件
add_executable(my_project main.cpp)
target_link_libraries(my_project ${LINKER_HAND_LIB} pthread)编译和运行:
mkdir build && cd build
cmake ..
make
./my_project./script.sh脚本提供以下功能:
[1]: 构建 SDK[2]: 构建并安装 SDK[3]: 卸载 SDK[6]: 运行示例程序
# 构建项目
mkdir build && cd build
cmake ..
make
# 安装(需要 root 权限)
sudo make install安装后,库文件将安装到:
- 头文件:
/usr/local/include/linkerhand-cpp-sdk/ - 库文件:
/usr/local/lib/linkerhand-cpp-sdk/{arch}/
#include "LinkerHandApi.h"
#include <vector>
#include <thread>
#include <chrono>
int main() {
// 创建 API 实例
LinkerHandApi hand(LINKER_HAND::L10, HAND_TYPE::RIGHT);
// 设置速度
std::vector<uint8_t> speed = {200, 200, 200, 200, 200};
hand.setSpeed(speed);
// 设置扭矩
std::vector<uint8_t> torque = {255, 255, 255, 255, 255};
hand.setTorque(torque);
// 控制手指运动
std::vector<uint8_t> pose = {128, 128, 128, 128, 128, 128, 128, 128, 128, 128};
hand.fingerMove(pose);
return 0;
}// 获取压力数据
auto force_data = hand.getForce();
// 获取关节状态
auto joint_state = hand.getState();
// 获取电机温度
auto temperature = hand.getTemperature();
// 获取故障码
auto fault_code = hand.getFaultCode();// 使用弧度制控制关节
std::vector<double> pose_arc = {0.5, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
hand.fingerMoveArc(pose_arc);
// 获取弧度制关节状态
auto state_arc = hand.getStateArc();更多示例请参考 examples/ 目录。详细说明请查看 示例代码文档。
详细的 API 文档请参考:API 参考文档
文档包含:
- 完整的 API 函数说明
- 参数和返回值详解
- 使用示例和注意事项
- 版本兼容性说明
项目已进行命名规范改进,详细信息请参考:命名规范改进文档
主要改进包括:
- 统一命名空间结构(所有型号实现类迁移到
linkerhand::hand命名空间) - 类名改进(不同型号使用不同类名,如
L10Hand,L20Hand等) - 参数命名修正(
handJoint→handModel) - 完全向后兼容(旧命名仍可使用)
# 构建并运行测试
mkdir build && cd build
cmake .. -DBUILD_TESTING=ON
make
ctest --output-on-failure- 测试指南: 测试文档(待创建) - 详细的测试框架安装、编写和运行指南
- 测试说明: 测试目录 README - 测试结构和快速参考
- CI/CD 文档: CI/CD 文档 - 持续集成和持续部署配置说明
测试文档包含:
- 测试框架安装和配置(Google Test)
- 如何编写和运行测试
- 测试覆盖率配置
- 测试最佳实践
- CI/CD 集成指南
项目已包含以下单元测试:
- ✅
test_Common.cpp- Common.h 枚举和类型测试 - ✅
test_RangeToArc.cpp- 范围到弧度转换函数测试 - ✅
test_IHand_Utils.cpp- IHand 工具函数测试 - ✅
test_CanFrame.cpp- CAN 帧结构测试
fingerMove()- 设置关节位置(0-255)fingerMoveArc()- 设置关节位置(弧度制)setSpeed()- 设置运动速度setTorque()- 设置扭矩限制
getState()- 获取关节状态getStateArc()- 获取关节状态(弧度制)getSpeed()- 获取当前速度设置getTorque()- 获取当前扭矩设置
getForce()- 获取压力数据(法向、切向、方向、接近感应)getTemperature()- 获取电机温度getFaultCode()- 获取电机故障码getCurrent()- 获取电机电流
SDK 支持以下通信协议:
- CAN (
COMM_CAN_0,COMM_CAN_1) - CAN 总线通信 - ModBus (
COMM_MODBUS) - ModBus 通信协议 - EtherCAT (
COMM_ETHERCAT) - EtherCAT 工业以太网通信
默认使用 COMM_CAN_0。
// 使用 CAN0 通信(默认)
LinkerHandApi hand(LINKER_HAND::L10, HAND_TYPE::RIGHT);
// 使用 CAN1 通信
LinkerHandApi hand(LINKER_HAND::L10, HAND_TYPE::RIGHT, COMM_CAN_1);
// 使用 ModBus 通信
LinkerHandApi hand(LINKER_HAND::L10, HAND_TYPE::RIGHT, COMM_MODBUS);
// 使用 EtherCAT 通信
LinkerHandApi hand(LINKER_HAND::L10, HAND_TYPE::RIGHT, COMM_ETHERCAT);linkerhand-cpp-sdk/
├── include/ # 头文件
│ ├── LinkerHandApi.h # 主 API 接口
│ ├── Common.h # 通用定义
│ └── ...
├── lib/ # 预编译库文件
│ ├── x86_64/ # x86_64 架构库
│ └── aarch64/ # aarch64 架构库
├── examples/ # 示例代码
│ ├── toolset_example.cpp
│ └── action_group_show_l10.cpp
├── docs/ # 文档
│ ├── API-Reference.md # API 参考文档
│ ├── TROUBLESHOOTING.md # 故障排查指南
│ └── FAQ.md # 常见问题解答
├── src/ # 源代码
├── third_party/ # 第三方依赖
├── CMakeLists.txt # CMake 配置
├── script.sh # 安装脚本
└── README.md # 本文档
mkdir build
cd build
cmake ..
makecd build
./toolset_example
./action_group_show_l10不同型号的关节映射关系:
["大拇指弯曲", "大拇指横摆", "食指弯曲", "中指弯曲", "无名指弯曲", "小拇指弯曲"]
["大拇指弯曲", "大拇指横摆", "食指弯曲", "中指弯曲", "无名指弯曲", "小拇指弯曲", "拇指旋转"]
["拇指根部", "拇指侧摆", "食指根部", "中指根部", "无名指根部", "小指根部",
"食指侧摆", "无名指侧摆", "小指侧摆", "拇指旋转"]
["拇指根部", "食指根部", "中指根部", "无名指根部", "小指根部",
"拇指侧摆", "食指侧摆", "中指侧摆", "无名指侧摆", "小指侧摆",
"拇指横摆", "预留", "预留", "预留", "预留",
"拇指尖部", "食指末端", "中指末端", "无名指末端", "小指末端"]
详细映射请参考 API 文档。
如果遇到问题,请参考以下文档:
-
故障排查指南 - 常见问题的排查和解决方案
- 编译问题
- 运行时问题
- 通信问题
- API 使用问题
- 性能问题
-
常见问题解答 - 常见问题的快速解答
- 安装相关问题
- 使用相关问题
- API 相关问题
- 兼容性问题
- 性能相关问题
如果文档无法解决您的问题,请:
- 查看 GitHub Issues 查看是否有类似问题
- 提交新的 Issue,并提供详细的错误信息和复现步骤
- 联系技术支持:https://linkerbot.cn/aboutUs
快速查找常见问题的答案,请参考 常见问题解答 (FAQ)。
常见问题包括:
- 如何安装和配置 SDK?
- 如何选择通信接口?
- 不同型号的关节数量是多少?
- 如何提高性能?
- 如何获取技术支持?
我们欢迎社区贡献!请参考以下步骤:
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
更多贡献指南请参考 CONTRIBUTING.md(待创建)。
本项目采用 MIT 许可证。
Copyright (c) 2026 灵心巧手(北京)科技有限公司
- 官方网站: https://linkerbot.cn
- 关于我们: https://linkerbot.cn/aboutUs
- GitHub: https://github.com/linker-bot/linkerhand-cpp-sdk
详细的版本更新记录请参考 CHANGELOG.md(待创建)。
注意: 使用前请确保设备已正确连接并配置好通信接口。