快速开始

1. Ti5_SDK 安装与部署

1.1 硬件准备

  • CAN 设备(如 PEAK CAN、SocketCAN 适配器)

  • 目标关节/电机模组

  • 机器人本体(如 T140A / T170A / T170C / T170D,按测试需求)

  • 外设(灵巧手、底盘、六维力传感器)

1.2 软件依赖

  • 编译器:gcc/g++(建议支持 C++17)

  • 构建工具:cmakemake

  • CAN 相关:libsocketcan-dev

  • 其他依赖:libengin3-dev(按平台与工程要求安装)

一键安装示例(Debian/Ubuntu):

sudo apt update
sudo apt install -y build-essential cmake libsocketcan-dev libengin3-dev

1.3 CAN 驱动安装说明(Linux)

  • SocketCAN:确认内核已启用 CAN(或对应模块可加载);接口就绪后可用 ip linkcandump 等检查。

  • PEAK:通常需安装厂商驱动包;就绪后结合板载指示灯、lsmodip link 综合判断。

下面以 PEAK Linux 驱动 为例(包名与版本以实际下载为准,如 peak-linux-driver-8.20.0)。部分平台(例如与 mttcan 等片上 CAN 控制器共存时)可能出现资源冲突,可按需先屏蔽冲突模块再安装 PEAK 驱动。

禁用与 PEAK 冲突的内核模块

若安装后模块无法加载,可尝试将 mttcan 加入黑名单(配置文件不存在时自行创建即可):

sudo vim /etc/modprobe.d/denylist-mttcan.conf

在文件末尾追加:

blacklist mttcan

更新 initramfs,重启后生效:

sudo update-initramfs -u

编译并安装 PEAK 驱动

tar -xvf peak-linux-driver-8.20.0.tar
cd peak-linux-driver-8.20.0
make netdev
sudo make install
sudo reboot

验证

完全重启后:红色常亮 多见于驱动已正确加载;快闪 多表示驱动未装好。可再执行:

lsmod | grep peak

若能看到 peak_* 等相关模块,通常表明驱动已加载。

故障排除与卸载

现象

建议

模块加载失败

确认已按需屏蔽冲突模块并重启;核对内核与驱动版本是否匹配

权限不足

安装与卸载步骤在需要处使用 sudo

编译报错

安装与当前内核一致的 linux-headers(或发行版提供的对应头文件包)

在驱动源码目录卸载:

sudo make uninstall

参考:PEAK System 官方站点 · Linux Kernel CAN 文档

2. 编译与运行

交付物分两类,本节先说明如何区分与查阅:

  • 本体控制标准 SDK:路径形如 Ti5SdkDemo/linux_x64Ti5SdkDemo/linux_arm64.

  • 外设独立 SDK:路径为 Ti5SdkDemo/PeripheralSDK/,按设备拆分多个子工程(如 hand_sdkchassis_sdksri_can_sdk),各自独立 CMakeLists.txt 与示例.

2.1 项目结构

以下 本体控制标准包Linux x64 预编译 SDK 为例,linux_arm64 等目录布局原则相同,差异主要在 runtime 内库文件后缀与 3rdparts 中部分平台二进制。

目录树概览

Ti5SdkDemo/linux_arm64/
├── CMakeLists.txt          # 本包统一 CMake 入口:导入 Ti5RobotControl、编译示例/小工具
├── include/                # SDK 对外头文件(集成时主要依赖此目录)
│   ├── api/                # C API:关节/机器人等(如 MotorCtrlApi、RobotCtrlInstMng、灵巧手接口等)
│   └── basic/              # 错误码、连接参数、日志、JSON、定时器、平台类型等基础能力
├── runtime/                # 运行时二进制:Ti5RobotControl 动态库(.so)及辅助脚本
├── bin/                     # 默认生成 motor_menu、robot_model_menu(构建后)
├── test/                   # 随包示例与自测源码(非公开 API 的封装,仅演示用法)
│   ├── include/            # 示例内部头文件(cmd / comm / cpp)
│   ├── src/
│   │   ├── cpp/            # 交互菜单主程序及各机型 *\_Test 实现
│   │   └── comm/           # HumanoidBody、关节组、电机辅助、臂 IK 等封装
│   └── json/               # 示例 JSON(机型配置、轨迹等)及说明
├── 3rdparts/               # 示例链接的第三方依赖(头文件或源码)
│   ├── spdlog/             # 日志库
│   ├── json/               # nlohmann/json
│   └── tcan/               # CAN 接口头文件及各平台库路径(按目标平台选用)
└── build/                  # 本地 CMake 构建目录(可选;通常不随发行包提交)

各目录说明

路径

作用

include/

给集成方包含的头文件;业务代码通常只需 #include 其中 api/ 与必要的 basic/.

runtime/

运行期动态库:Ti5RobotControl.soTi5_Arm_2204.so(双臂 IK/FK)、libcontrolcan.so 等;通过 scripts/init.sh 部署到系统库并执行 ldconfig

bin/

当前默认编译产物:motor_menu(单电机)、robot_model_menu(整机/双臂);输出于此。

test/

官方示例:演示如何调用 DLL 中 API.

3rdparts/

示例工程依赖,不替代 include 中的公开 API;二次开发可替换为自己的依赖管理方式.

集成/SDK 分发时,除业务工程外,一般需要保留 include/ + runtime/;示例与构建缓存可按需裁剪。

2.2 构建方式

以下以 本体包 linux_arm64 为例。从包根目录(如 Ti5SdkDemo/linux_arm64)直接使用 CMakeLists.txt 进行构建,所有示例/工具目标一次生成:

cd Ti5SdkDemo/linux_arm64
cmake -B build -S .
cmake --build build -j "$(nproc)"

-j 为并行编译线程数;$(nproc) 自动取当前机器逻辑 CPU 数,也可改为固定值(如 -j 10)。 最终生成的可执行文件位于 bin/motor_menurobot_model_menu),runtime/ 存放运行所需依赖库。

2.3 运行方式

1. 环境初始化(首次部署或重新编译后必做)

运行前执行 scripts/init.sh:将 runtime/ 依赖库部署到系统库路径并执行 ldconfig,同时为 bin/ 下可执行文件授予 CAN 所需的 setcap 权限,便于普通用户运行(无需 root)。

cd <包根目录>/scripts
chmod +x init.sh
./init.sh

若目录布局与默认不一致,可传入包根路径:./init.sh /path/to/linux_arm64

2. 运行示例程序

初始化完成后,在包根目录下进入 bin/ 启动交互菜单:

cd <包根目录>/bin

# 单电机联调(禁止用于整机)
./motor_menu

# 整机型号测试(T140A / T170A / T170C / T170D)
./robot_model_menu

若未执行 init.sh、或从本地 build/ 目录直接运行,需先指定动态库路径,例如:

export LD_LIBRARY_PATH=<包根目录>/runtime:${LD_LIBRARY_PATH}
cd <包根目录>/bin
./robot_model_menu

菜单项说明见下文 「可执行文件与脚本说明」

1. 可执行文件与脚本说明

以下可执行文件由本包 CMakeLists.txt 构建,产物位于 bin/

1.1 单电机测试(motor_menu)

备注

强烈提示: motor_menu 仅用于单电机 CSP/读参联调,禁止用于整机、多关节或人形机器人测试。该程序未实现关节角度限位与整机安全策略,误用于多轴/整机可能导致异常力矩、超限位、碰撞或设备损坏整机与双臂测试请使用 robot_model_menu

  • 可执行文件名称: motor_menu

  • 用途:单电机交互菜单(CSP、读参),用于 CAN 总线与单轴快速验证。

  • 安全提示行为:程序启动时打印醒目 WARNING 横幅;进入 CSP/读参流程时再次提示;菜单内亦标注「仅单电机联调」。

  • 菜单编号说明:界面上提供 1(CSP)3(读全参)0(退出)(PT 测试暂未开放)。

# 交互菜单(示例:省略时间戳/日志前缀)
# 菜单中无 2 号项:2 本应为 PT,功能未完备故暂不开放展示。
./motor_menu

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! WARNING: motor_menu 仅用于【单电机】联调与参数读写。
!! 禁止用于整机/多关节/人形机器人测试  无关节限位与安全策略。
!! 整机测试请使用 robot_model_menu。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

=============== Single motor test menu ===============
  !! 仅单电机联调  禁止用于整机/人形机器人测试 !!
  1) CSP (read-all-params then CSP submenu)
  3) Read all parameters (hardware)
  0) Exit
Input choice (1..3):

1. 机器人测试(robot_model_menu)

备注

强烈提示: 菜单中选择机型与运动项时,必须与实际连接的机器人型号、关节配置一致。若控制指令、运动学或关节组与真实硬件不符(信号/模型误差),可能导致异常力矩、超限位、碰撞或设备损坏;运行前请确认机型与现场实物一致。

motor_menu 的区别robot_model_menu 面向整机/多关节实机演示;不要用 motor_menu 替代本入口

  • 可执行文件名robot_model_menu

  • 用途:T140A / T170A / T170C / T170D 整机交互式实机演示。

第一步:选择型号

./robot_model_menu
================ 整机型号测试 ================
  1) T140A
  2) T170A
  3) T170C
  4) T170D
  0) 退出
============================================
请选择型号 (0-4):

第二步:T170C / T170D 测试菜单(T170D 第 5 项为升降)

编号

含义

1

双臂普通运动

2

双臂末端解算运动

3

头部运动测试

4

腰部运动测试

5

腿部蹲起(T170D 为升降)

0

返回型号选择

==================================================
T170C 测试菜单
--------------------------------------------------
  1  双臂普通运动
  2  双臂末端解算运动
  3  头部运动测试
  4  腰部运动测试
  5  腿部蹲起测试
  0  返回型号选择
==================================================
请选择 (0-5):

T140A / T170A 测试菜单

编号

含义

1

双臂普通运动

2

双臂末端解算运动

6

整机关节空间测试

0

返回型号选择

2. 环境初始化脚本

备注

强烈提示: 每次重新编译都会在输出目录生成新的可执行文件(新 inode);对可执行文件设置的 setcap 等能力不会自动迁移到新文件上。若需在普通用户下访问 CAN 等能力,请在每次编译产物更新后重新执行 init.sh,以便为新二进制重新赋予权限。

  • 推荐用法(理想情况):将 SDK 包按发布目录结构解压或放置到位后,通常只需赋予脚本可执行权限并无参运行 ./init.sh 即可完成库路径、权限等初始化;脚本会按规则自动查找 bin/runtime/(见下)。若目录布局特殊或需指定路径,再使用下文带参方式。

  • 作用概要

    • 检查本机是否具备 Eigen3libsocketcan 等开发/运行前置(不满足时打印安装提示并退出)。

    • 定位 bin/runtime/

      • 默认无参:优先使用 scripts/init.sh 所在目录的 bin/runtime/(若缺则再尝试脚本上一级目录的 bin/runtime/)。

      • 也支持显式传参:传入包根目录(该目录下应有 bin/runtime/),或传入显式 bin_dir + runtime_dir

    • 使用 sudoruntime/ 中列出的 .so 拷贝到系统库目录并执行 ldconfig,保证动态链接器能找到 Ti5RobotControl 等依赖。

    • 使用 sudo setcapmotor_menurobot_model_menu 等可执行文件设置 cap_net_admin,cap_net_raw,使普通用户态运行即可访问 CAN 相关能力(仍需已安装 libcap2-bin 等,脚本会检查 setcap)。

  • 用法示例

chmod +x init.sh
# 1) 默认无参(最常用):理想情况下只需执行这一句;脚本会在 init.sh 所在目录的同级,
#    或再往上一级目录中查找 bin/ 与 runtime/
./init.sh

1. 底盘(chassis)安装与部署

内部目录:PeripheralSDK/chassis_sdk

1.1 依赖环境

  • 建议系统:Ubuntu 22.04(ARM/x86 均可)

  • 编译器:gcc/g++(支持 C++17)

  • 构建工具:cmakemake

  • 运行前置:准备好底盘接入端的 hostport,确保网络可达(示例运行时需要传入)。

1.2 通用编译步骤

chassis_sdk 为例:

cd <你的路径>/PeripheralSDK/chassis_sdk
mkdir -p build
cd build
cmake ..
make -j

1.3 运行方式

编译后可执行:

./build/chassis_sdk_demo <host> <port> <cmd> [value] [duration_ms]

cmd 含义:

  • forward:前进(value = vx

  • lateral:横移(value = vy

  • rotate:旋转(value = wz

  • stop:停车

  • query:查询连接与最近一次速度指令

示例:

./build/chassis_sdk_demo 169.254.128.2 5480 forward 0.1 2000
./build/chassis_sdk_demo 169.254.128.2 5480 rotate 0.2 1500
./build/chassis_sdk_demo 169.254.128.2 5480 query

说明:更完整的控制封装与接口用法,请以 PeripheralSDK/外设控制开发指南.md 为准。


2. 灵巧手(hand)安装与部署

内部目录:PeripheralSDK/hand_sdk

2.1 串口与权限准备

  • 准备串口设备路径(如 /dev/ttyACM0,以实际设备为准)

  • 确保当前用户具备串口访问权限(权限配置按你所用系统实际情况调整)

2.2 通用编译步骤

hand_sdk 为例:

cd <你的路径>/PeripheralSDK/hand_sdk
mkdir -p build
cd build
cmake ..
make -j

2.3 运行方式

编译后可执行:

./build/hand_sdk_demo <serial_port> [action_id]

action_id 含义:

  • 0:STRAIGHT

  • 1:VICTORY

  • 2:OK

  • 3:HEART

  • 4:QUERY_POS(仅查询当前位置)

示例:

./build/hand_sdk_demo /dev/ttyACM0 1
./build/hand_sdk_demo /dev/ttyACM0 4

说明:更完整的控制封装与接口用法,请以 PeripheralSDK/外设控制开发指南.md 为准。


3. 六维力传感器(sri_can)安装与部署

内部目录:PeripheralSDK/sri_can_sdk

3.1 CAN 前置条件

  • 建议系统:Ubuntu 22.04

  • sri_can_demo 仅 Linux 构建目标:依赖 SocketCAN

  • 使用 CAN 接口时通常需要 root 或具备 cap_net_admin 权限(与你系统的 CAN 权限策略一致即可)

3.2 通用编译步骤

sri_can_sdk 为例:

cd <你的路径>/PeripheralSDK/sri_can_sdk
mkdir -p build
cd build
cmake ..
make -j

说明:非 Linux 下该目录可能只生成头文件接口库,不会产出可执行 demo。

3.3 运行方式(示例)

编译后可执行(默认 CAN 名 vcan0,可用参数覆盖):

./build/sri_can_demo [can_interface]

示例:

./build/sri_can_demo can0