快速开始
1. Ti5_SDK 安装与部署
1.1 硬件准备
CAN 设备(如 PEAK CAN、SocketCAN 适配器)
目标关节/电机模组
机器人本体(如 T140A / T170A / T170C / T170D,按测试需求)
外设(灵巧手、底盘、六维力传感器)
1.2 软件依赖
编译器:
gcc/g++(建议支持 C++17)构建工具:
cmake、makeCAN 相关:
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 link、candump等检查。PEAK:通常需安装厂商驱动包;就绪后结合板载指示灯、
lsmod、ip 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 make uninstall
2. 编译与运行
交付物分两类,本节先说明如何区分与查阅:
本体控制标准 SDK:路径形如
Ti5SdkDemo/linux_x64、Ti5SdkDemo/linux_arm64.外设独立 SDK:路径为
Ti5SdkDemo/PeripheralSDK/,按设备拆分多个子工程(如hand_sdk、chassis_sdk、sri_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 构建目录(可选;通常不随发行包提交)
各目录说明
路径 |
作用 |
|---|---|
|
给集成方包含的头文件;业务代码通常只需 |
|
运行期动态库: |
|
当前默认编译产物: |
|
官方示例:演示如何调用 DLL 中 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_menu、robot_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/。
2. 环境初始化脚本
脚本名称: init.sh
备注
强烈提示: 每次重新编译都会在输出目录生成新的可执行文件(新 inode);对可执行文件设置的 setcap 等能力不会自动迁移到新文件上。若需在普通用户下访问 CAN 等能力,请在每次编译产物更新后重新执行 init.sh,以便为新二进制重新赋予权限。
推荐用法(理想情况):将 SDK 包按发布目录结构解压或放置到位后,通常只需赋予脚本可执行权限并无参运行
./init.sh即可完成库路径、权限等初始化;脚本会按规则自动查找bin/与runtime/(见下)。若目录布局特殊或需指定路径,再使用下文带参方式。作用概要:
检查本机是否具备 Eigen3、libsocketcan 等开发/运行前置(不满足时打印安装提示并退出)。
定位
bin/与runtime/:默认无参:优先使用
scripts/init.sh所在目录的bin/与runtime/(若缺则再尝试脚本上一级目录的bin/与runtime/)。也支持显式传参:传入包根目录(该目录下应有
bin/与runtime/),或传入显式bin_dir+runtime_dir。
使用
sudo将runtime/中列出的.so拷贝到系统库目录并执行ldconfig,保证动态链接器能找到Ti5RobotControl等依赖。使用
sudo setcap为motor_menu、robot_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)构建工具:
cmake、make运行前置:准备好底盘接入端的
host与port,确保网络可达(示例运行时需要传入)。
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:STRAIGHT1:VICTORY2:OK3:HEART4: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