外设控制 API

1. 灵巧手

主要封装类:hand_sdk::HandController

1.1 接口说明

  • connectRs485(port, baud)

  • setAllFingerAnglesDeg(angles, speed)

  • start()

  • stop()

  • disconnect()

  • getFingerAnglesDeg(out_angles_deg)

1.2 示例

编译:

cd PeripheralSDK/hand_sdk
mkdir -p build && cd build
cmake ..
make -j

运行动作示例(比耶):

cd PeripheralSDK/hand_sdk/build
./hand_sdk_demo /dev/ttyACM0 1

查询当前位置:

cd PeripheralSDK/hand_sdk/build
./hand_sdk_demo /dev/ttyACM0 4

action_id 建议说明:

  • 0:STRAIGHT

  • 1:VICTORY

  • 2:OK

  • 3:HEART

  • 4:QUERY_POS(仅查询)

2. 六维力

六维力建议直接基于 PeripheralSDK/sri_can_sdk 使用。该 SDK 为纯 C++(非 ROS2 依赖),基于 Linux SocketCAN。

2.1 接口说明

  • set_can(iface, bitrate):配置 CAN 接口与波特率(如 can0, 1000000

  • set_channel(cmd_id, data_ids):配置命令 ID 和 3 个数据帧 ID

  • connect() / disconnect():连接/断开 CAN

  • send(cmd):发送命令(0x01 单次、0x02 连续、0x00 停止)

  • read(timeout):单次采样(内部发送 0x01 并接收解析 3 帧)

  • recv(timeout):连续模式下接收并解析 3 帧

  • connected():连接状态

  • data():读取最新六维力数据

2.2 示例

sri_can_sdk::SriSensor s("id");
s.set_can("can0", 1000000);
s.set_channel(0x80, {0x291, 0x292, 0x293});

if (s.connect()) {
  if (s.read(1.0)) {
    auto& d = s.data();
    printf("FX=%.2f FY=%.2f FZ=%.2f\n", d.fx, d.fy, d.fz);
  }

  s.send(sri_can_sdk::SriProtocol::CMD_START_CONTINUOUS);
  while (s.recv(0.1)) {
    auto& d = s.data();
    // 使用 d.fx d.fy d.fz d.mx d.my d.mz
  }
  s.send(sri_can_sdk::SriProtocol::CMD_STOP_CONTINUOUS);
  s.disconnect();
}

编译与可执行文件测试:

sri_can_demo 的参数是 CAN 接口名,例如 can4,不是 /sys/class/net/can4 这类路径。

CAN 接口配置(以 can4、1Mbps 为例):

sudo ip link set can4 down
sudo ip link set can4 type can bitrate 1000000
sudo ip link set can4 up
ip -details link show can4

运行示例:

cd PeripheralSDK/sri_can_sdk/build
./sri_can_demo can4

菜单测试顺序:

  1. 输入 1:连接

  2. 输入 3:单次采样,检查 FX/FY/FZ/MX/MY/MZ

  3. 输入 4:流式采集,输入采集帧数(如 200

  4. 输入 2:断开

  5. 输入 0:退出

联调排查:

  • 若提示“连接失败”,先检查 can4 是否已 up

  • 若提示“单次采样失败”,检查波特率、命令 ID、数据 ID 是否和设备一致

  • 可使用 candump can4 抓包确认是否有数据帧

3. 底盘

主要封装类:ti5_chassis_sdk::ChassisController

3.1 接口说明

  • connect(host, port)

  • sendVelocity(vx, vy, wz)

  • sendVelocityFor(vx, vy, wz, duration_ms, period_ms)

  • moveForward(vx) / moveLateral(vy) / rotate(wz)

  • stop()

  • isConnected()

  • host() / port()

  • getLastVelocity(vx, vy, wz)

3.2 示例

编译:

cd PeripheralSDK/chassis_sdk
mkdir -p build && cd build
cmake ..
make -j

前进 2 秒:

cd PeripheralSDK/chassis_sdk/build
./chassis_sdk_demo <host> <port> <cmd> [value] [duration_ms]
./chassis_sdk_demo 169.254.128.2 5480 forward 0.10 2000

原地旋转 1.5 秒:

cd PeripheralSDK/chassis_sdk/build
./chassis_sdk_demo 169.254.128.2 5480 rotate 0.20 1500

查询连接状态与最近一次速度命令:

cd PeripheralSDK/chassis_sdk/build
./chassis_sdk_demo 169.254.128.2 5480 query