# 睿尔曼机械臂最小 Demo

本文档说明如何在本项目中构建并运行睿尔曼 RealMan RM_API2 最小 C++ Demo。

该 Demo 目标是验证 SDK、动态库、网络连接和控制器通信是否可用。程序只执行以下动作：

1. 初始化 RM_API2。
2. 连接机械臂控制器。
3. 打印 API 版本。
4. 读取机械臂软件版本信息。
5. 读取机械臂基础信息。
6. 断开连接并销毁 SDK 线程。

Demo 不会发送任何运动指令，适合作为首次联调入口。

## 文件位置

| 文件 | 说明 |
| --- | --- |
| `examples/realman_minimal_demo.cpp` | 最小机械臂连接与信息读取示例 |
| `/home/mashiro/RM_API2/C++/include` | 首选睿尔曼 RM_API2 C++ 头文件 |
| `/home/mashiro/RM_API2/C++/linux/linux_x86_c++_vv1.1.5/libapi_cpp.so` | 首选睿尔曼 RM_API2 Linux x86_64 动态库 |
| `third_party/Robotic_Arm` | fallback SDK 路径 |
| `CMakePresets.json` | CLion/命令行可直接使用的 CMake presets |

## 环境要求

- Ubuntu/Linux x86_64。
- GCC/G++ 7.5 或更高版本。
- CMake 3.15 或更高版本。
- 机械臂控制器与电脑在同一网络内。
- 默认控制器地址为 `192.168.1.18:8080`，可通过参数覆盖。

## CLion 使用方式

1. 打开 CLion。
2. 选择 `Open`，打开项目目录：

   ```bash
   /home/mashiro/project/linkerhand-cpp-sdk
   ```

3. CLion 识别 `CMakePresets.json` 后，选择 `CLion Debug` 或 `CLion Release`。
4. 在 Run/Debug Configuration 中选择目标 `realman_minimal_demo`。
5. 如果机械臂 IP 不是默认值，在 Program arguments 中填写：

   ```text
   192.168.1.18 8080
   ```

   第三个参数可设置 SDK 超时时间，单位 ms：

   ```text
   192.168.1.18 8080 1500
   ```

6. 点击 Build 或 Run。

## 命令行构建

Debug 构建：

```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-debug
cmake --build --preset realman-demo-debug
```

Release 构建：

```bash
cd /home/mashiro/project/linkerhand-cpp-sdk
cmake --preset clion-release
cmake --build --preset realman-demo-release
```

## 运行方式

使用默认地址 `192.168.1.18:8080`：

```bash
./cmake-build-debug/realman_minimal_demo
```

指定 IP 和端口：

```bash
./cmake-build-debug/realman_minimal_demo 192.168.1.18 8080
```

指定 IP、端口和超时时间：

```bash
./cmake-build-debug/realman_minimal_demo 192.168.1.18 8080 1500
```

查看帮助：

```bash
./cmake-build-debug/realman_minimal_demo --help
```

## 预期输出

连接成功时会看到类似输出：

```text
RealMan API version: ...
Connecting to 192.168.1.18:8080 with timeout 1000 ms...
Robot handle created, id: 1

================ RealMan Arm Software Info ================
Product Version: ...
Algorithm Version: ...
Control Layer Version: ...
===========================================================

================ RealMan Arm Basic Info ====================
Arm DOF: 6
Arm Model: RM_65 (0)
Force Type: Standard (0)
Controller Version: 4
===========================================================
RealMan minimal demo finished successfully.
```

如果未连接真实机械臂，程序会在连接阶段失败并提示检查 IP、端口、网络和电源状态。这说明本地程序已能启动，剩余问题在设备连接侧。

## 网络检查

运行前建议先检查网络连通性：

```bash
ping 192.168.1.18
nc -vz 192.168.1.18 8080
```

如果 `nc` 未安装：

```bash
sudo apt update
sudo apt install netcat-openbsd
```

## 常见问题

| 现象 | 可能原因 | 处理方式 |
| --- | --- | --- |
| `Failed to connect to RealMan arm` | IP/端口不对、控制器未上电、电脑不在同一网段 | 检查控制器地址、网线、网卡 IP、防火墙 |
| 找不到 `libapi_cpp.so` | 运行时动态库路径未生效 | 使用本文的 CMake target 构建；目标已设置 rpath |
| CLion 没看到 `realman_minimal_demo` | CMake 未重新加载 | 点击 Reload CMake Project |
| 构建时找不到 `rm_interface.h` | SDK 路径不对 | 确认 `REALMAN_RM_API2_ROOT` 指向 `/home/mashiro/RM_API2/C++`，或 fallback `third_party/Robotic_Arm/include/rm_interface.h` 存在 |

## 后续开发建议

- 先确认本 Demo 能稳定读取机械臂信息，再加入运动控制。
- 新增运动控制前，优先做小速度、非危险空间、急停可触达的测试。
- 把所有运动参数做成配置，不要把生产动作硬编码在 demo 中。
