Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 20 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
[![Architecture](https://img.shields.io/badge/Arch-x86__64%20%7C%20aarch64-lightgrey.svg)]()
[![CI/CD](https://github.com/linker-bot/linkerhand-cpp-sdk/workflows/CI/CD/badge.svg)](https://github.com/linker-bot/linkerhand-cpp-sdk/actions)

> 灵心巧手系列灵巧手的官方 C++ 软件开发工具包
> 专注于人工智能和机器人解决方案,帮助开发者、企业、科研机构快速实现真实场景落地

LinkerHand-CPP-SDK 由灵心巧手(北京)科技有限公司开发,提供完整的 C++ API,用于控制 L6、L7、L10、L20、L21、L25、O6、O20、G20等型号的灵巧手设备,支持 CAN / CAN-FD / Modbus 多种总线。

Expand Down Expand Up @@ -57,7 +57,6 @@ LinkerHand-CPP-SDK 由灵心巧手(北京)科技有限公司开发,提供
- CMake:建议 4.0+(已实测 4.0.3)
- 依赖:`PCAN-Basic` 与 mingw 运行时 DLL 已随发布包附带

> CAN-FD 在 ARM + Ubuntu ≤ 18 上自动禁用;O20(CAN-FD)目前仅在 Linux x86_64 上支持。

## 🚀 快速开始

Expand Down Expand Up @@ -91,17 +90,19 @@ sudo ./build.sh -u # 卸载
build.bat # 编译
```

> 发布包是预编译产物,`build.sh` 仅负责装配示例与触发安装;SDK 共享库取自 `lib/` 下对应平台目录,无须从源码编译。

### 3. 启动CAN设备

打开终端执行
```bash
# Linux

请手动启动CAN接口(需要sudo):
sudo ip link set canX up type can bitrate 1000000

或使用批量启动脚本:
for i in 0 1 2 3 4; do sudo ip link set can$i up type can bitrate 1000000; sudo ip link set can$i txqueuelen 1024; done

# Windows (无需操作)
```

### 4. 运行示例程序
Expand All @@ -114,7 +115,7 @@ cd build/bin
./linker_hand_example # CLI 工具
./test_o6_can_0
./test_l10_can_0
./test_o20_canfd_0 # 仅 Linux x86_64
./test_o20_canfd_0

# Windows
build\bin\linker_hand_example.exe
Expand Down Expand Up @@ -234,26 +235,26 @@ cmake --build . -j
### 主要 API 接口

**控制接口**
- `fingerMove()` — 设置关节位置(原始值 0–255)
- `fingerMoveArc()` — 设置关节位置(弧度)
- `fingerMove()` — 设置关节位置
- `setSpeed()` — 设置运动速度
- `setTorque()` — 设置扭矩限制

**状态查询**
- `getState()` / `getStateArc()` — 获取关节状态(原始值 / 弧度)
- `getSpeed()` / `getTorque()` — 获取当前速度 / 扭矩设置
- `getState()` — 获取关节状态
- `getSpeed()` — 获取当前速度
- `getTorque()` — 获取当前扭矩

**传感器**
- `getForce()` — 压力数据(法向 / 切向 / 方向 / 接近感应)
- `getTemperature()` — 电机温度
- `getFaultCode()` — 电机故障码
- `getForce()` — 获取传感器数据
- `getTemperature()` — 获取电机温度
- `getFaultCode()` — 获取电机故障码

## 🔌 通信协议

| 协议 | 枚举值 | 适用范围 |
|------|--------|---------|
| CAN | `COMM_TYPE::CAN` | 全系列 |
| CAN-FD | `COMM_TYPE::CAN`(搭配 `CanFD` 实现) | O20(仅 Linux x86_64) |
| CAN-FD | `COMM_TYPE::CAN`(搭配 `CanFD` 实现) | O20(不支持Linux aarch64) |
| Modbus | `COMM_TYPE::MODBUS` | L7 / L10 / O6 |


Expand All @@ -271,7 +272,7 @@ cmake --build . -j
| LinkerHand L21 | CAN | L21 series robotic hand |
| LinkerHand L25 | CAN | L25 series robotic hand |
| LinkerHand O6 | CAN / Modbus | O6 series robotic hand |
| LinkerHand O20 | CAN-FD | O20 series robotic hand(仅 Linux x86_64) |
| LinkerHand O20 | CAN-FD | O20 series robotic hand(不支持Linux aarch64) |

## 📁 项目结构

Expand All @@ -296,7 +297,8 @@ linkerhand-cpp-sdk/
│ │ ├── x86_64/ # Linux x86_64 共享库(.so)
│ │ └── arm64/ # Linux aarch64 共享库(.so)
│ └── win64/
│ └── mingw/ # Windows MinGW(.dll / .dll.a)
│ ├── mingw/ # Windows MinGW(.dll)
│ └── msvc/ # Windows MSVC(.dll / .lib)
├── examples/ # 示例源码(CAN / CAN-FD / Modbus)
├── docs/ # API-Reference / FAQ / TROUBLESHOOTING
├── cmake/ # find_package 用的 *-config.cmake
Expand All @@ -308,7 +310,7 @@ linkerhand-cpp-sdk/
└── CMakeLists.txt # 顶层 CMake:聚合 examples + 安装规则
```

> 发布包以预编译共享库为核心,`include/` 与 `lib/` 是对外契约;`examples/` 与 `cmake/` 是配套消费样例与集成胶水。
> `include/` 与 `lib/` 是对外契约;`examples/` 与 `cmake/` 是配套消费样例与集成胶水。

## 📜 示例程序列表

Expand All @@ -332,8 +334,8 @@ linkerhand-cpp-sdk/
| `test_o6_modbus_0.cpp` | O6 Modbus 基础示例 |
| `test_o6_modbus_1.cpp` | O6 Modbus 进阶示例 |
| `test_o6_modbus_2.cpp` | O6 Modbus 高级示例 |
| `test_o20_canfd_0.cpp` | O20 CAN-FD 基础示例(仅 Linux x86_64) |
| `test_o20_canfd_1.cpp` | O20 CAN-FD 进阶示例(仅 Linux x86_64) |
| `test_o20_canfd_0.cpp` | O20 CAN-FD 基础示例(不支持Linux aarch64) |
| `test_o20_canfd_1.cpp` | O20 CAN-FD 进阶示例(不支持Linux aarch64) |
| `L10/action_group_show.cpp` | L10 动作组演示 |

## 📖 关节映射表
Expand Down
19 changes: 9 additions & 10 deletions docs/API-Reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,19 @@ void setTorque(const std::vector<uint8_t> &torque);

---

### 获取法向压力、切向压力、切向方向、接近感应
### 获取传感器数据
```cpp
std::vector<std::vector<std::vector<uint8_t>>> getForce();
```
**Description**:
获取手部传感器的综合数据,包括法向压力、切向压力、切向方向和接近感应
获取五个手指的触觉力传感器数据。每个手指的传感器分布为一个 6 行 × 12 列的二维矩阵(共 72 个传感单元),本函数将全部五个手指的数据封装在一个三维向量中返回
**Returns**:
- 返回一个三维向量:第一维为传感器类型,第二维为手指,第三维为该手指对应的数据。
- 返回一个三维向量:std::vector<std::vector<std::vector<uint8_t>>>
外层 vector 大小 = 5(五根手指)。
中层 vector(每根手指)大小 = 6(行)。
内层 vector(每行)大小 = 12(列)。
每个元素为 uint8_t 类型的值。
> 注:O6型号的灵巧手矩阵数据为 4 行 × 10 列。

---

Expand Down Expand Up @@ -142,12 +147,6 @@ std::vector<double> getStateArc();

---

### 获取大拇指、食指、中指、无名指、小指的所有压力数据

压感数据统一通过 `getForce()` 获取,返回三维向量 `[传感器类型][手指][数据]`,传感器类型依次为法向压力、切向压力、切向方向、接近感应。`LinkerHandApi` 不再提供 `getPressure()` 接口。

---

### 获取版本号
```cpp
std::string getVersion();
Expand Down Expand Up @@ -214,7 +213,7 @@ void setDisable(const std::vector<uint8_t> &disable);

---

### 清除电机故障码(目前仅支持 L20)
### 清除电机故障码
```cpp
void clearFaultCode();
```
Expand Down
Loading