跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

轮腿机器人调试与代码实现补充

轮腿机器人调试涉及硬件选型、软件架构及核心控制算法。重点分享基于 RoboMaster C 型开发板的轮腿系统调试经验,涵盖电机协议配置、五连杆运动学解算及 LQR 平衡控制逻辑。特别针对左右腿坐标系极性、状态变量正负号判定等易错点提供详细排查思路与代码示例,辅助开发者快速完成从倒立摆模型到完整轮腿系统的实机调试。

Pythonist发布于 2026/3/23更新于 2026/6/2022 浏览
轮腿机器人调试与代码实现补充

轮腿机器人调试与代码实现补充

本文基于 RoboMaster C 型开发板,分享轮腿机器人的基础代码编写与调试经验。默认读者已熟悉底盘代码、INS 任务(陀螺仪解算)、电机 CAN 协议及遥控器 Dbus 协议,并理解五连杆运动学解算与 VMC 的基本思路。调试过程中,状态变量的单位与正负号极性是最关键的难点。

硬件选型

| 材料选型 | 型号 | 数量 | 单价 | | --- | --- | --- | | 关节电机 | DM-J8009P-2EC | 4 | 1369.00 | | 轮毂电机 | 瓴控 MF9025V2(16T) | 2 | 990.00 | | 腿及电机固定板 | 碳板加工 | - | 900.00 | | 车架 | 铝管加工 | - | 500.00 | | 橡胶充气轮胎 | 伊诺华 8x1 1/4 内外胎 | 2 | 50.00 | | 开发板 | RoboMaster C 型开发板 | 1 | - |

注:目前所选用的关机电机和轮毂电机暂未出现缺陷。轮胎选型可参考相关开源社区资料。

电机 ID 分配

关节电机 ID 分配

轮毂电机 ID 分配

开发板放置

C 板放置示意图

软件架构说明

轮腿建模参考哈工程方法,双腿分开建模;五连杆解算参考玺佬的五连杆运动学解算与 VMC。

任务封装

任务作用
INS_task.c解算陀螺仪数据,得到三轴加速度计、三轴弧度
Uart1_task.c向上位机发送数据,配合 vofa+ 调试 PID
chassisR_task.c调用 VMC_calc.c 函数结合 MATLAB 计算 K 矩阵,输出轮毂及关节力矩

模块封装

模块作用
CAN_receive.c所有电机协议及功能函数封装
remote_control.c遥控器 Dbus 协议函数封装

算法封装

算法作用
VMC_calc.c1. 五连杆解算得到 phi0、腿长 L0、theta、dot_theta
2. 通过雅可比矩阵得到单腿前后关节电机输出力矩
3. 建议参考 MATLAB 文件中的 d_phi0.m 和 VMC_calc.m
arm_math.h / lib提供 sin、cos、tan 等三角函数运算
pid.cPID 初始化、计算及清除函数

MATLAB 辅助工具

名称作用用法
get_k_length.m根据腿长和 QR 矩阵计算 K 矩阵命令行输入 K = get_k_length(腿长值)
get_k.m计算多项式拟合系数点击运行

电机配置细节

轮毂电机

采用转矩闭环模式,协议参考官方文档。驱动回复协议需正确解析以确认状态。

关节电机

采用 MIT 模式。零点设置在下限位处,此时各电机处于零点位置,车子姿态需符合设计预期。

代码调试流程

调试前建议在 MATLAB 中完成参数计算。以腿长 0.24m 为例,在命令行输入 K = get_k_length(0.24) 获取结果。

进入主循环更新数据时,需注意左右腿坐标系方向相反。例如获取底盘 Pitch 角度,右腿前倾时陀螺仪反馈为正,左腿模型则需加负号。

// 更新 Pitch 逻辑示意
if (leg == LEFT) {
    pitch_angle = -gyro_pitch;
}

Yaw 角度处理同样关键,需将陀螺仪反馈的 -180~180 映射到 0~360 度,避免过零突变。

在 chassisR_task 初始化阶段,需获取遥控器指针、电机反馈、陀螺仪角速度及角度指针,并赋值杆长、初始化 PID。

// LQR_KK 数组粘贴示例
float LQR_KK[12] = { /* 从 MATLAB 获取的值 */ };

转向控制

底盘循环中,先通过循环限幅函数将 Yaw 目标值限制在 0~360°,再通过过零处理函数消除突变。利用 PD 控制器计算转向力矩 wz_set,叠加到左右轮轮毂力矩上实现差速转向。

chassis_move.wheel_motor[1].wheel_T += wz_set;
chassis_move.wheel_motor[0].wheel_T += wz_set;

腿部解算

仿照右腿模型处理左腿。在得到 Tp 和 F0 后,通过 VMC_calc_2 计算前后关节电机输出力矩并转换为转矩电流。

加入腿长控制器:

vmc_leg_right.F0 = 10.0f/arm_cos_f32(vmc_leg_right.theta) + PID_calc(&LegR_Pid, vmc_leg_right.L0, 0.24f);

最后计算中心轴髋关节输出力矩及轮毂电机的 LQR 计算力矩。

核心调试:极性判定

这是最耗时的环节。务必使用 Keil Debug 工具观测变量,手动代入几组数据验证数值是否正确。

一阶倒立摆(板凳模型)

先将腿位置固定,整车作为一阶倒立摆调试。当板凳模型调好,轮毂的 ob_lqr.lqr[0]~lqr[5] 极性即正确。这些项极性应保持一致,全为正或全为负。

// 观察结构体
ob_lqr.lqr[0] = LQR_KK[0] * (vmc_leg_right.theta - 0.0f);
ob_lqr.lqr[1] = LQR_KK[1] * (vmc_leg_right.d_theta - 0.0f);
ob_lqr.lqr[2] = LQR_KK[2] * (chassis_move.x_filter - 0);
ob_lqr.lqr[3] = LQR_KK[3] * (chassis_move.v_filter - 0);
ob_lqr.lqr[4] = -LQR_KK[4] * (chassis_move.myPithR - 0.0f);
ob_lqr.lqr[5] = -LQR_KK[5] * (chassis_move.myPithGyroR - 0.0f);
chassis_move.wheel_motor[1].wheel_T = ob_lqr.lqr[0] + ... + ob_lqr.lqr[5];

二阶倒立摆模型

在板凳模型基础上调试关节电机,设为 MIT 模式。

  1. 保留 ob_leg_r.lqr[0]~lqr[1],注释掉位移和速度项。此时车子前倾腿往前蹬,后倾腿往后蹬。
  2. 保留 ob_leg_r.lqr[4]~lqr[5],此时车子前倾腿往后蹬,后倾腿往前蹬。
  3. 组合使用,去掉位移和速度项,结合轮毂 LQR,车子可保持平稳。

注意: 关节电机的位移项极性与速度项一致,速度项极性与 chassis_move.myPithR 一致。vmc_leg_right.theta 与陀螺仪放置方向有关,调试时需反复核对。

未来优化方向

电控方面,当前已完成平衡、平移及转向。后续可增加跳跃、不同腿长拟合、Roll 轴补偿、打滑检测及离地检测等算法。

机械方面,关节轴系可参考自行车碗组结构,减少高强度跳跃下的自锁螺母松动及车轮外八现象。

目录

  1. 轮腿机器人调试与代码实现补充
  2. 硬件选型
  3. 电机 ID 分配
  4. 开发板放置
  5. 软件架构说明
  6. 任务封装
  7. 模块封装
  8. 算法封装
  9. MATLAB 辅助工具
  10. 电机配置细节
  11. 轮毂电机
  12. 关节电机
  13. 代码调试流程
  14. 转向控制
  15. 腿部解算
  16. 核心调试:极性判定
  17. 一阶倒立摆(板凳模型)
  18. 二阶倒立摆模型
  19. 未来优化方向
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • FPGA 面试核心问题与解析(一)
  • Flutter 缓存管理库 flutter_cache_manager 使用指南
  • 动态规划路径类 DP 入门:3 道经典例题详解
  • ThyGPT 多模态大模型:甲状腺结节活检率降低 40%+ 研究解析
  • SDXL Prompt Styler 如何破解 AI 绘画创作失控难题
  • OpenClaw + LMStudio + 飞书:搭建本地离线 AI 助手
  • RoboChallenge 发布具身智能年度报告:4 万次真机评测显示最强模型成功率仅 51%
  • 自动驾驶激光雷达运动畸变与鬼影处理及核心实现
  • 非标自动化教学系列课程
  • Llama3.1 深度解读:结构、训练与数据合成技术
  • 2026 年各高校 AIGC 检测标准汇总及论文 AI 率参考
  • 网络安全自学入门指南:从零开始的学习路径与实战建议
  • 不使用 flat 方法实现 JavaScript 数组扁平化的三种方案
  • LTX-2.3 开源模型解析:音视频同步生成技术详解
  • Coze 工作流实战:零门槛生成 AI 漫剧全流程解析
  • Vheer:免费免登录的 AI 绘画与视频生成工具
  • GitHub Copilot Agent 模式使用指南与实战经验
  • RAG 技术详解:如何有效消除大模型幻觉问题
  • Windows 本地部署 Ollama+OpenClaw 构建 AI 生产力系统
  • 策略模式详解:将 if-else 转化为可切换算法

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online