rm_balance/USAGE.md
Robofish ec22b87dfa feat(balance_chassis): enable wheel-leg balance mode and adjust parameters
activate wheel-leg balance mode in RC switch case
update crouch and retract leg lengths in config
adjust non-contact theta threshold in chassis module
add README and USAGE documentation files
2026-02-09 14:59:50 +08:00

733 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 平衡轮足机器人使用指南
本指南提供详细的操作步骤,帮助您快速上手使用平衡轮足机器人系统。
## 目录
- [环境准备](#环境准备)
- [编译与烧录](#编译与烧录)
- [系统启动](#系统启动)
- [操作说明](#操作说明)
- [调试与监控](#调试与监控)
- [参数调优](#参数调优)
- [故障排查](#故障排查)
---
## 环境准备
### 1. 硬件准备
**必需设备**
- STM32H723 控制板
- ST-Link V2/V3 或 J-Link 调试器
- 电池(推荐 24V 锂电池)
- 大疆 DR16 遥控器
- USB 转 TTL 串口模块(用于 CLI 调试)
- 各类电机LZ、LK、DM
**可选设备**
- VOFA+ 数据可视化软件
- 示波器
- 万用表
### 2. 软件准备
**开发工具**
- [Keil MDK-ARM 5.x](https://www.keil.com/download/product/)(推荐)
- 或 [VS Code](https://code.visualstudio.com/) + [Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug)
- [STM32CubeMX](https://www.st.com/zh/development-tools/stm32cubemx.html)
**调试工具**
- [VOFA+](https://www.vofa.plus/) - 数据可视化
- 串口调试助手(如 SecureCRT、XShell、Putty
**编译工具链**(如使用 CMake 编译):
- ARM GCC Toolchain: [下载地址](https://developer.arm.com/downloads/-/gnu-rm)
- CMake: [下载地址](https://cmake.org/download/)
### 3. 驱动安装
1. **ST-Link 驱动**
- 下载 [ST-Link 驱动包](https://www.st.com/zh/development-tools/stsw-link009.html)
- 安装完成后,设备管理器中应能看到 ST-Link 设备
2. **串口驱动**(如使用 CH340
- 下载并安装对应芯片的 USB 串口驱动
---
## 编译与烧录
### 方法一:使用 Keil MDK
#### 步骤 1打开项目
1. 启动 Keil MDK
2. 打开项目文件:`MDK-ARM/CtrBoard-H7_ALL.uvprojx`
#### 步骤 2配置编译选项
1. 点击菜单栏 `Project``Options for Target`
2.`Target` 选项卡中确认:
- MCU: STM32H723XG
- ARM Compiler: 版本 6.x 或更高
3.`Debug` 选项卡中选择调试器:
- 使用 `ST-Link Debugger``J-Link Debugger`
4.`Flash Download` 选项卡中确认:
- Programming Algorithm: STM32H7x3 1MB Flash
- 选中 `Reset and Run` 选项
#### 步骤 3编译项目
1. 点击 `Project``Build Target`(或按 F7
2. 等待编译完成,检查是否有错误
3. 成功后会在 `MDK-ARM/CtrBoard-H7_ALL/` 目录生成 `.hex` 文件
#### 步骤 4烧录程序
1. 连接 ST-Link 到控制板
2. 点击 `Flash``Download`(或按 F8
3. 等待下载完成,提示 "Programming Done"
4. 控制板会自动复位运行
### 方法二:使用 CMake
#### 步骤 1配置构建环境
```bash
# 进入项目根目录
cd balance_infantry
# 创建并进入构建目录
mkdir build && cd build
# 配置 CMake
cmake ..
```
#### 步骤 2编译项目
```bash
# 使用 4 个线程并行编译
make -j4
# 编译完成后,生成的文件位于 build 目录
```
#### 步骤 3烧录程序
使用 OpenOCD 或 ST-Link 工具烧录:
```bash
# 使用 OpenOCD 烧录(需要先安装 openocd
openocd -f interface/stlink.cfg -f target/stm32h7x.cfg \
-c "program CtrBoard-H7_ALL.hex verify reset exit"
```
或使用 ST-LINK Utility 图形界面工具。
---
## 系统启动
### 1. 首次启动检查清单
⚠️ **重要**:首次启动前请务必完成以下检查:
- [ ] 电池电压正常(推荐 22V-28V
- [ ] 所有电机连接正确,没有短路
- [ ] IMU 安装稳固,方向正确
- [ ] 遥控器已配对,电量充足
- [ ] 电机 ID 配置正确(参考 `User/device/` 目录下电机驱动)
- [ ] 机械结构紧固,无松动
- [ ] 运动空间充足,无障碍物
### 2. 上电启动流程
1. **连接电源**
- 将电池连接到电源输入端
- 确认电压稳定在正常范围
2. **系统初始化**
- 系统会自动运行初始化任务(`Task_Init`
- LED 指示灯开始闪烁
- 电机进行零点校准
3. **等待就绪**
- 等待约 2-3 秒,系统进入待机状态
- LED 常亮或按固定频率闪烁(根据代码配置)
4. **连接遥控器**
- 打开 DR16 遥控器
- 确认遥控器与接收器已连接
- 遥控器 LED 常绿表示连接成功
### 3. 模式选择
系统支持多种控制模式,通过遥控器切换:
| 模式 | 说明 | 切换方式 |
|------|------|---------|
| 放松模式 | 电机不输出,用于调试 | 遥控器左摇杆按下 |
| 复位模式 | 机器人回到初始位置 | 遥控器特定按键 |
| 平衡模式 | 机器人自我平衡 | 遥控器特定按键 |
| 小陀螺模式 | 陀螺仪辅助平衡 | 遥控器特定按键 |
**具体按键配置请参考 `User/task/rc.c` 文件。**
---
## 操作说明
### 1. 基本运动控制
#### 遥控器操作DR16
```
左摇杆:
- 前后推拉:前进/后退
- 左右推拉:平移
- 按下:模式切换
右摇杆:
- 前后推拉:云台 Pitch 轴控制
- 左右推拉:云台 Yaw 轴控制
- 按下:发射机构控制
左拨轮:调节目标高度
右拨轮:调节运动速度
```
#### 注意事项
1. **首次操作**
- 从低速开始,逐步熟悉控制手感
- 保持足够的缓冲空间
- 随时准备切换到放松模式
2. **平衡模式**
- 机器人会自动保持平衡
- 输入较小的运动指令测试响应
- 观察机器人姿态是否稳定
3. **高度控制**
- 使用左拨轮调整目标高度
- 高度变化应平缓,避免突变
### 2. 云台控制
#### 云台 Yaw 轴控制
- 使用遥控器右摇杆左右推拉
- 控制底盘旋转角度
- 平稳转动,避免快速摆动
#### 云台 Pitch 轴控制
- 使用遥控器右摇杆前后推拉
- 控制发射机构俯仰角
- 注意角度限制,避免碰撞
### 3. 发射机构控制
#### 开启发射机构
1. 切换到发射模式
2. 按下右摇杆(或特定按键)启动摩擦轮
3. 等待摩擦轮达到稳定转速
4. 再次按键发射弹丸
#### 注意事项
- ⚠️ 发射前确保前方安全,无人员
- ⚠️ 不使用时及时关闭发射机构
- 定期检查摩擦轮磨损情况
### 4. 跳跃功能
#### 触发跳跃
跳跃功能仅在 `CHASSIS_MODE_WHELL_LEG_BALANCE` 模式下可用。
**跳跃流程**
1. **蓄力阶段JUMP_CROUCH**
- 机器人降低重心,缩短腿长
- 蓄力时间:`jump_params.crouch_time_ms`(默认配置)
2. **起跳阶段JUMP_LAUNCH**
- 机器人发力向下,产生向上推力
- 发力时间:`jump_params.launch_time_ms`
3. **收腿阶段JUMP_RETRACT**
- 腿部收缩,准备落地
- 收腿时间:`jump_params.retract_time_ms`
4. **落地阶段JUMP_LAND**
- 缓冲着陆,恢复平衡
- 缓冲时间:`jump_params.land_time_ms`
#### 跳跃参数调整
`User/module/config.c` 中修改跳跃参数:
```c
.jump_params = {
.crouch_time_ms = 500, // 蓄力时间 (ms)
.launch_time_ms = 100, // 起跳发力时间 (ms)
.retract_time_ms = 200, // 收腿时间 (ms)
.land_time_ms = 300, // 落地缓冲时间 (ms)
.crouch_leg_length = 0.3, // 蓄力时腿长 (m)
.launch_force = 500.0, // 起跳力 (N)
.retract_leg_length = 0.2, // 收腿时腿长 (m)
.retract_force = -100.0, // 收腿前馈力 (N)
},
```
**调试建议**
- 先调整蓄力时间和腿长,找到合适的蓄力状态
- 逐步增加起跳力,避免跳得太高
- 根据实际表现调整各阶段时间
---
## 调试与监控
### 1. CLI 命令行调试
#### 连接方式
1. 使用 USB 转 TTL 串口模块连接到开发板的串口
2. 串口参数配置:
- 波特率115200
- 数据位8
- 停止位1
- 校验位:无
3. 使用串口调试工具打开对应 COM 口
#### 常用命令
```bash
# 显示帮助信息
help
# 查看系统状态
status
# 输出示例:
# Battery: 24.5V (80%)
# CPU Temp: 45°C
# Tasks: Running normally
# 电机控制
motor
# 子命令:
# list 列出所有电机状态
# calibrate [id] 校准指定电机
# enable [id] 启用指定电机
# disable [id] 禁用指定电机
# 底盘控制
chassis
# 子命令:
# mode [mode] 设置底盘模式
# balance 进入平衡模式
# relax 进入放松模式
# 云台控制
gimbal
# 子命令:
# reset 复位云台
# calibrate 校准云台
# 监控任务信息
monitor
# 输出各任务运行频率、栈使用情况
```
### 2. VOFA+ 数据可视化
#### 配置步骤
1. 打开 VOFA+ 软件
2. 新建工程,选择 "JustFloat" 协议
3. 配置串口:
- 波特率115200
- 数据位8
- 停止位1
4. 点击连接按钮
#### 可视化数据
系统会自动发送以下数据:
- IMU 数据:加速度、陀螺仪、欧拉角
- 电机数据:位置、速度、电流
- 控制输出LQR 输出、VMC 输出
- 系统状态电池电压、CPU 温度
#### 数据导出
- 点击 "录制" 按钮开始记录数据
- 停止录制后,数据可导出为 CSV 格式
- 使用 Excel、MATLAB 等工具分析数据
### 3. 监控任务
`Task_monitor` 实时监控系统状态,包括:
**监控内容**
- 电池电压和电量百分比
- CPU 温度
- 各任务运行频率
- 任务栈使用情况
- 设备在线状态
**查看方式**
- 通过 CLI 命令 `monitor`
- 或通过 VOFA+ 实时查看
**正常指标**
- 电池电压22V - 28V
- CPU 温度:< 70°C
- 任务频率稳定在设定值 500Hz
- 栈使用率< 80%
---
## 参数调优
### 1. LQR 参数调优
#### LQR 增益矩阵
LQR 控制器的增益矩阵存储在 `User/module/config.c`
```c
LQR_GainMatrix_t lqr_gains = {
// K 矩阵第一行(轮毂力矩 T
.k11_coeff = { ... }, // theta 的增益
.k12_coeff = { ... }, // d_theta 的增益
.k13_coeff = { ... }, // x 的增益
.k14_coeff = { ... }, // d_x 的增益
.k15_coeff = { ... }, // phi 的增益
.k16_coeff = { ... }, // d_phi 的增益
// K 矩阵第二行(髋关节力矩 Tp
.k21_coeff = { ... },
.k22_coeff = { ... },
.k23_coeff = { ... },
.k24_coeff = { ... },
.k25_coeff = { ... },
.k26_coeff = { ... },
};
```
#### 调优方法
**步骤 1确定目标**
- 平衡性机器人能稳定平衡
- 响应性对指令响应迅速
- 稳定性无明显振荡
**步骤 2逐步调整**
1. 从小增益开始逐步增大
2. 先调整 theta phi 的增益姿态控制
3. 再调整 x 的增益位置控制
4. 最后调整角速度的增益阻尼
**步骤 3测试验证**
- 每次调整后重新编译烧录
- 测试平衡性能
- 使用 VOFA+ 观察响应曲线
**调优技巧**
- 增益过小响应慢容易失衡
- 增益过大振荡不稳定
- 角速度增益影响阻尼防止振荡
- 位置增益影响响应速度
### 2. PID 参数调优
#### PID 控制器位置
系统中有多个 PID 控制器
- Yaw PID`pid.yaw`
- Roll PID`pid.roll`
- 摆力矩 PID`pid.tp`
- 腿长 PID`pid.leg_length`
- 摆角 PID`pid.leg_theta`
#### 调优步骤(经典方法)
**步骤 1设置初始值**
```
Kp = 0
Ki = 0
Kd = 0
```
**步骤 2调整 Kp**
- 逐步增大 Kp
- 直到系统开始振荡
- Kp 减半约为临界值的 50%-70%
**步骤 3调整 Kd**
- 增大 Kd
- 减小振荡
- 直到振荡消失
- 保持适当的阻尼
**步骤 4调整 Ki**
- 增大 Ki
- 消除稳态误差
- 避免积分饱和
**步骤 5微调**
- 小幅调整三个参数
- 找到最佳平衡点
#### 参数配置示例
```c
KPID_Params_t yaw = {
.kp = 5.0,
.ki = 0.1,
.kd = 0.5,
.integral_limit = 10.0,
.output_limit = 10.0,
};
```
### 3. VMC 参数调优
#### VMC 运动学参数
```c
VMC_Param_t vmc_param = {
.hip_length = 0.15, // 髋关节间距 (m)
.leg_1 = 0.2, // 大腿前端长度 (m)
.leg_2 = 0.2, // 大腿后端长度 (m)
.leg_3 = 0.25, // 小腿长度 (m)
.leg_4 = 0.1, // 小腿前端长度 (m)
.wheel_radius = 0.06, // 轮子半径 (m)
.wheel_mass = 0.5, // 轮子质量 (kg)
};
```
#### 调优要点
1. **运动学参数**
- 根据实际机械尺寸精确测量
- 使用 MATLAB 工具`utils/Simulation-master/`验证
- 确保单位一致全部使用米
2. **滤波参数**
- 调整 `low_pass_cutoff_freq` 优化信号质量
- 太高频噪声大
- 太低频响应慢
### 4. 使用工具辅助调优
项目提供 MATLAB 仿真工具
1. **LQR 增益计算**
- 运行 `utils/6. 综合运动控制验证/LQR_K.m`
- 输入系统参数
- 自动计算最优 LQR 增益
2. **运动学仿真**
- 使用 `utils/Simulation-master/` 中的 MATLAB 模型
- 验证五连杆运动学
- 测试不同参数组合
3. **参数优化脚本**
- 使用 `utils/k_calc/` 中的脚本
- 批量测试参数
- 找到最优解
---
## 故障排查
### 1. 系统无法启动
**症状**上电后无反应LED 不亮
**可能原因**
- 电池电压不足或未连接
- 电源线路故障
- MCU 未烧录程序
**解决方法**
1. 检查电池电压是否正常22V-28V
2. 检查电源线路是否接触良好
3. 重新烧录程序
### 2. 电机不转动
**症状**系统运行正常但电机不转动
**可能原因**
- 电机 ID 配置错误
- CAN 通信故障
- 电机未使能
- 电机驱动板故障
**解决方法**
1. 使用 CLI 命令 `motor list` 检查电机状态
2. 检查 CAN 线连接
3. 确认电机 ID 配置正确
4. 使用 `motor enable [id]` 使能电机
5. 检查电机驱动板供电
### 3. IMU 数据异常
**症状**姿态角不稳定或数据异常
**可能原因**
- IMU 供电不稳定
- IMU 安装不牢固
- SPI 通信错误
- IMU 未校准
**解决方法**
1. 检查 IMU 供电电压3.3V
2. 重新安装 IMU确保稳固
3. 检查 SPI 线连接
4. 使用 CLI 命令校准 IMU
5. 更新 AHRS 算法参数
### 4. 机器人无法平衡
**症状**机器人启动平衡模式后立即倒下
**可能原因**
- LQR 参数不合理
- IMU 数据异常
- 电机响应不足
- 机械结构问题
**解决方法**
1. 检查 IMU 数据是否正常
2. 使用 VOFA+ 观察姿态角变化
3. 重新调整 LQR 参数参考参数调优章节
4. 检查电机输出能力
5. 检查机械结构确保无松动
### 5. 通信故障
**症状**遥控器失联或 VOFA+ 无法连接
**可能原因**
- 遥控器未配对
- 串口参数错误
- 通信线路故障
- 任务未正常运行
**解决方法**
1. 重新配对 DR16 遥控器
2. 检查串口参数115200, 8N1
3. 检查通信线路
4. 使用 CLI 命令 `monitor` 查看任务状态
### 6. 编译错误
**症状**编译时出现错误
**可能原因**
- 工具链版本不兼容
- CMake 版本过低
- 路径问题
- 代码语法错误
**解决方法**
1. 更新 ARM GCC 到最新版本
2. 确认 CMake 版本 >= 3.22
3. 检查项目路径是否有中文或特殊字符
4. 查看错误信息,定位代码问题
5. 清理构建目录后重新编译:`make clean && make`
### 7. 跳跃功能异常
**症状**:跳跃后无法落地或姿态失控
**可能原因**
- 跳跃参数不合理
- 腿长限位设置错误
- 落地检测失效
- 控制器响应不足
**解决方法**
1. 降低起跳力,从较小值开始测试
2. 调整各阶段时间参数
3. 检查腿长限位是否合理
4. 优化落地缓冲参数
5. 使用 VOFA+ 观察跳跃过程数据
### 获取更多帮助
如果以上方法无法解决问题:
1. **查看日志**
- 使用 VOFA+ 记录故障时的数据
- 使用 CLI 命令查看详细状态
2. **查阅文档**
- 检查代码注释
- 查看 `utils/` 目录中的技术文档
3. **提交 Issue**
- 在项目仓库提交详细的问题描述
- 包含:硬件型号、软件版本、错误日志、重现步骤
---
## 附录
### A. 术语表
| 术语 | 全称 | 说明 |
|------|------|------|
| LQR | Linear Quadratic Regulator | 线性二次调节器 |
| VMC | Virtual Model Control | 虚拟模型控制 |
| IMU | Inertial Measurement Unit | 惯性测量单元 |
| PID | Proportional-Integral-Derivative | 比例-积分-微分控制器 |
| CAN | Controller Area Network | 控制器局域网 |
| FDCAN | Flexible Data-rate CAN | 灵活数据速率 CAN |
| CLI | Command Line Interface | 命令行接口 |
| AHRS | Attitude and Heading Reference System | 姿态和航向参考系统 |
### B. 串口引脚定义
| 串口 | TX | RX | 功能 |
|------|----|----|------|
| USART1 | PA9 | PA10 | CLI 调试 |
| USART2 | PA2 | PA3 | VOFA+ 数据 |
| USART3 | PB10 | PB11 | 视觉通信 |
| UART4 | PA0 | PA1 | 遥控接收 |
### C. 电机 ID 分配
| 电机类型 | ID | 位置 | 用途 |
|---------|----|----|------|
| LZ 电机 | 1-4 | 关节 | 髋关节控制 |
| LK 电机 | 1-2 | 轮子 | 驱动轮控制 |
| DM 电机 | 1 | 云台 | Yaw 轴控制 |
| DM 电机 | 2 | 云台 | Pitch 轴控制 |
### D. 常用按键映射
| 按键 | 功能 | 说明 |
|------|------|------|
| 左摇杆按下 | 模式切换 | 在不同控制模式间切换 |
| 右摇杆按下 | 发射控制 | 控制发射机构开关 |
| 左拨轮 | 高度调节 | 调节机器人目标高度 |
| 右拨轮 | 速度调节 | 调节运动速度上限 |
---
**祝您调试顺利!**
如有问题,请参考 README.md 中的联系方式获取支持。