终极 FOC 轮腿机器人 DIY 制作教程:从零到一造出会自己平衡行走的机器人
【免费下载链接】foc-wheel-legged-robotOpen source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software development. | 一个新型结构的轮腿机器人开源资料,包含机械设计、电子设计、算法仿真、软件开发等材料项目地址: https://gitcode.com/gh_mirrors/fo/foc-wheel-legged-robot
如果你曾盯着平衡车发呆,好奇它为什么摔不倒;如果你刷到过机器人滑着轮子灵活越障的视频,心里痒痒的——那么恭喜你,这篇轮腿机器人 DIY 教程就是为你准备的。它基于开源项目FOC 轮腿机器人(foc-wheel-legged-robot),一个把机械设计、电子硬件、控制算法和手机遥控全部开源、总成本约 550 元就能复刻的完整方案。读完这篇文章,你会从一个"想动手但不知从哪下手"的新手,变成知道"每个零件装在哪、每行代码管什么、每个参数怎么调"的准制作者。文章里记录的,是一个真实新手从心动到站稳的全过程,包括他踩过的坑和悟出的道理。
缘起:为什么一台会自己平衡的机器人值得你动手
先讲个故事。半年前,我盯着桌面上一堆电机零件发呆,脑子里只有一个念头:"我想造一台会自己平衡的机器人。"听起来很酷,对吧?但紧接着问题来了:我完全不知道平衡是怎么实现的。
轮子直立行走,本质上是一个"倒立摆"问题——想象一支铅笔立在指尖上,你想让它保持直立,就得不停地往它倾斜的反方向移动手。机器人的大脑每秒要重复这个判断成百上千次,这就是"平衡"。而 FOC 轮腿机器人的特别之处在于:它把"平衡"和"行走"分给了两组电机——关节电机负责像膝盖一样弯曲调整重心,车轮电机负责像脚一样前后移动,两者配合,机器人就能边平衡边跑。
你可能会问:"这跟我买台平衡车有什么区别?"区别大了。平衡车是现成的黑箱,而这里是完全透明的课堂。当你亲手把电机、驱动板、主控板、陀螺仪拼在一起,再亲手把平衡参数从"疯狂抖动"调到"纹丝不动",你学到的不是某个孤立的知识点,而是一条完整的工程链路:力学建模 → 仿真验证 → 硬件实现 → 现场调参。这条链路,正是所有机器人工程师每天都在走的路。
最打动我的一点是:这个项目把整个过程拆成了六个可独立研究的模块——机械结构在solidworks目录,算法仿真在matlab目录,电机驱动板在stm32-foc目录,运动主控在esp32-controller目录,可选图传系统在linux-fpv目录,手机遥控 APP 在android目录。你完全不需要一次看懂所有东西,按需查看就行。
📍第一站里程碑:你能说出这台机器人的"大脑"(ESP32 主控)、"肌肉"(4010 关节电机 + 2804 车轮电机)、"神经"(CAN 总线)分别是什么。做到这一点,你已经比 90% 的围观群众懂得多了。
拆解:把"平衡行走"这个大难题切成四个能落地的小目标
刚拿到项目资料时,我的第一反应是"这也太多了吧"。SolidWorks 模型、MATLAB 仿真、STM32 固件、ESP32 程序、Android 工程……随便一个都够研究一周。后来我明白了一个道理:大难题不可怕,可怕的是把它当成一个整体去面对。把"造一台会平衡的机器人"拆成四个小目标,每一步都清晰可行:
目标一:让单个电机转起来。这是最底层的"肌肉"问题。一个无刷电机要转动,需要知道转子转到哪了、该给三相绕组通什么样的电。项目里的 STM32 FOC 驱动板就是干这个的:它用磁编码器感知转子位置,用 FOC 算法(磁场定向控制,通俗说就是"永远让磁场推力方向对准转子的运动方向")把电压精准地变成扭矩。
目标二:让六个电机听同一个大脑的话。机器人有四个关节电机、两个车轮电机,必须协调工作。项目用 CAN 总线(一条两线差分总线,能在 1Mbps 速率下连接多个设备)把它们串起来,每个电机一个 ID,大脑发一条指令,所有电机各取所需。这块属于"神经"系统。
目标三:让机器人知道自己是歪的还是正的。主控板上的 MPU6050 陀螺仪+加速度计持续测量姿态,算法据此判断"我现在往哪边倒了"。这是"感官"系统。
目标四:让大脑算出"下一步该干嘛"。这是最有趣的部分——平衡算法。项目采用虚拟模型控制(VMC)加 LQR 状态反馈的组合拳:VMC 负责把腿部抽象成简单的"虚拟腿"来规划受力,LQR 负责根据当前姿态误差计算每个电机该出多少力。有意思的是,这套算法先写在 MATLAB 里,再用 MATLAB Coder 一键转成 C 代码,直接嵌进主控程序——你在esp32-controller/software/src目录下看到的leg_pos.c、leg_spd.c、lqr_k.c就是仿真阶段的产物。
当你把这四个目标都打通,机器人就会"活"过来:传感器告诉它歪了,算法算出补偿力,CAN 总线把指令发给电机,电机转动带动重心回正——整个过程每秒重复几百次,你看到的便是"稳稳站立"。
📍第二站里程碑:你能向朋友解释"FOC 是给电机用的精准扭矩控制技术",以及"平衡的本质是持续纠正姿态偏差"。概念通了,动手就不慌。
备料:一张清单搞定全部零件,附选购建议与避坑提醒
按项目实际清单算过账后我松了口气:不含图传约 549 元,加上图传约 719 元。这个价格买到的不是玩具,而是一整套可以反复折腾的学习平台。
核心电机(机器人的肌肉):
| 零件 | 数量 | 参考单价 | 用途 |
|---|---|---|---|
| 4010 无刷电机 | 4 | ¥50 | 关节驱动,扭矩大、转速低 |
| 2804 无刷电机 | 2 | ¥13 | 车轮驱动,轻巧高转速 |
| 编码器磁铁 | 6 | 随电机 | 直径 6mm 径向充磁,贴转子中心 |
电子系统(机器人的大脑和神经):
| 零件 | 数量 | 参考单价 | 说明 |
|---|---|---|---|
| STM32 FOC 驱动板元件 | 6 | ¥25 | 每块约 25 元,可自己打板焊接 |
| ESP32 主控板元件 | 1 | ¥20 | 含 ESP32-C3 与 MPU6050 |
| 3S 航模锂电池 | 1 | ¥28 | 11.1V,800mAh 左右 |
结构与辅料:3D 打印件一套(约 100 元,白色树脂打印),定制亚克力底板一块(约 5 元),604 深沟球轴承与 F8-14M 推力轴承若干,M2.5/M3 螺丝、尼龙防松螺母、铜柱与垫片(合计约 20 元)。
几个过来人的避坑提醒:
- 驱动板建议直接用开源文件打样。项目提供了立创 EDA 的原理图和 PCB 文件(
stm32-foc/hardware目录),PCB 是直径 30mm 的圆形双层板,对侧孔距与 2804 电机孔位一致,可以直接贴电机安装。焊一块大约 25 元,比买成品省得多,还能练焊接。 - 编码器磁铁的距离很讲究。磁铁与 AS5600 磁编码器要对正,间距保持 2~3mm。太远读不到角度,太近可能摩擦。
- 图传模块是"可选项"不是"必选项"。项目说明里写得很清楚:
linux-fpv图传模块会明显增加成本和复杂度,去掉它,蓝牙遥控、平衡行走完全不受影响。新手建议先跳过,跑通平衡再考虑加。 - 电机相线先别急着焊死。第一次调试很可能需要交换相线来修正电机转向,用杜邦线或可插拔端子连接会更从容。
📍第三站里程碑:所有零件到齐、能分清"哪个电机装腿上、哪个电机装轮上",并且驱动板已经打好样或准备好焊接。从这一步起,你的桌子开始像一个"车间"了。
搭建:三步拼出机器人的"骨骼"与"神经"
零件齐了,接下来是动手时刻。整个装配可以分成三步,每步之间都有明确的检查点。
第一步:拼骨骼。项目的机械模型在solidworks目录,包含大腿、小腿、底板、关节支架等全部零件和总装模型,照着总装.SLDASM的装配关系装即可。我的经验是:先把 4010 电机固定在关节支架上,再安装轴承——用热风枪把连接件稍微加热到 60~70℃,轴承更容易压入,装好后要确认能顺畅空转。电机转子中心记得贴上径向充磁磁铁,这是编码器读取角度的关键。检查点:所有关节活动顺滑、无卡顿、无明显晃动。
第二步:布神经。驱动板装好电机后,要按下面的方法设置 ID 和标定(细节放下一章)。然后接好 CAN 总线:把六块驱动板并联到总线上,总线两端各接一个 120Ω 终端电阻——这是 CAN 通信稳定的前提,漏了它你会发现"明明都连了线,为什么数据就是不来"。检查点:总线上每个节点的 ID 不重复,供电电压在 11~12.6V 之间。
第三步:安大脑。把 ESP32 主控板通过铜柱固定在底板上方,接好电源、CAN 总线和 MPU6050(陀螺仪直接集成在主控板上)。注意走线时让电源线和信号线分开放置,避免干扰。检查点:上电后主控板指示灯正常,用万用表确认各模块供电无误。
📍第四站里程碑:机器人能通电、六个电机都能响应指令(哪怕只是动一下)。此刻你拥有了一台"植物人"机器人——结构完整,只差灵魂。
唤醒:第一次烧录、电机标定与传感器校准
硬件搭好只是开始,让机器人"醒过来"才是重头戏。这一步我们要做三件事:给主控烧程序、给电机做标定、校准传感器。
给主控烧录程序。主控程序用 PlatformIO 开发,工程在esp32-controller/software目录。用 USB Type-C 线连接电脑,按住两个按键先松开 RESET 再松开 BOOT,芯片进入烧录模式,PlatformIO 里点一下 Upload 即可。烧录成功的话,串口能输出调试信息——这是你第一次"看到"机器人的内心活动。
电机自动标定。每块驱动板都要知道自己带的是什么样的电机:极对数是多少、传感器零点在哪、方向对不对。项目把这件事做成了"一键完成":按住驱动板上的按钮不松手,LED 会以 500ms 周期闪烁,闪到第 N 次时松手,ID 就设成了 N(范围 1-8,同一总线上不能重复);如果一直按到 LED 常亮 2 秒再松手,就进入自动标定模式,电机会空载缓慢旋转,自动采集参数并存进 Flash,掉电也不丢。标定成功会播放提示音。我第一次标定时忘了把电机卸下来,电机带着整条腿空转,吓得我赶紧断电——记住:标定务必让电机空载。
传感器校准。主控上电后会自动读取 MPU6050 的姿态数据。确保机器人水平静止放置,观察串口输出的姿态角。如果角度数据有固定的偏置,就需要在esp32-controller/software/src/main.cpp里调整电机的零点偏移offsetAngle和旋转方向dir参数。项目文档给出了完整的测量方法:先把dir调到让角度随电机正转递增,再通过"实测角度与计算角度对比"反推出零点偏移,公式并不复杂:
phi = (rawAngle - offsetAngle) * dir遥控测试。项目自带的 Android APP(android/balancebot.apk已编译好)通过蓝牙搜索 "BalanceBot" 设备即可连接。界面是带虚拟摇杆的实时视图:直接用蓝牙模式时,手机和主控通过低功耗蓝牙直连;如果以后加了图传,还能切到"图传模式",通过局域网遥控,机器人就不用待在手机蓝牙范围里了。
📍第五站里程碑:六个电机标定成功、主控串口输出稳定的姿态数据、手机能连上并遥控电机动作。到了这一步,"植物人"已经有心跳了。
驯服:让机器人从"摇摇晃晃"到"稳稳站立"的调参心法
如果说前面几章是"把零件变成机器",这一章就是"把机器变成机器人"。第一次让机器人尝试站立,它大概率会像喝醉了一样疯狂摆动,然后"啪"地摔倒——别慌,这是每个制作者的必经之路,调参就是干这个的。
项目的控制结构非常清晰:底层是电机扭矩控制,中层是腿部姿态控制(VMC 虚拟腿),顶层是平衡控制(LQR 状态反馈 + PID 修正)。esp32-controller/software/src/PID.c实现了单级和串级 PID。如果你听到 PID 就头大,我教你一个记法:
- 比例(P)=反应速度:歪得越多,纠正力越大,让机器人"跟得上";
- 积分(I)=纠偏力度:持续消除残余偏差,对付"总往一边歪";
- 微分(D)=防抖阻尼:预判变化趋势,给动作"踩刹车",抑制震荡。
调参的铁律是一次只动一个参数,每次只改一点。我自己的顺序是:先把积分和微分调小,只留比例项,慢慢加大 P 值,直到机器人开始出现规律的轻微摆动——这时候机器人已经"有反应了";然后加 D 值把摆动压下去,你会发现站立开始变得稳定;最后才用小步长加 I,消除那点顽固的静差。每一步调整幅度不超过当前值的 10%,改完都要重新上电观察。
几个高频问题的排查思路:
| 现象 | 大概率原因 | 尝试方向 |
|---|---|---|
| 总往固定一侧倒 | 重心偏移 | 检查电池位置、左右配重是否对称 |
| 前后持续晃动停不下来 | P 偏大或 D 偏小 | 减小 P,或增大 D |
| 反应迟钝、像在打盹 | P 偏小 | 逐步加大 P |
| 电机有异响、发热 | 相序或方向错误 | 交换任意两根相线,检查dir参数 |
| CAN 数据时有时无 | 终端电阻缺失或 ID 冲突 | 补 120Ω 电阻,核对 ID |
平衡算法里还有一个宝藏:主控的Motor_InitAll函数可以设置扭矩系数torqueRatio和反电动势函数,项目已为 4010/2804 电机配好了默认值。如果你换用其他电机,可以按文档方法自己测量标定。当一切就绪,你会看到机器人从一个"疯狂摇摆的醉汉"变成"稳稳站住、能随摇杆指令前进后退转向的运动员"。那种成就感,是看再多视频也体会不到的。
📍第六站里程碑:机器人能保持直立超过 10 秒,且能响应遥控指令前进、后退、转向。恭喜,你已经完成了从"拼装者"到"调校者"的蜕变。
进阶:仿真验证、结构轻量化与更多玩法
站稳只是起点。项目真正的深度,藏在matlab目录里——它是整个平衡算法的心脏。
用仿真验证算法。项目用 MATLAB(R2022b 及以上)搭建了完整的仿真链路:leg_func_calc.m负责腿部解算和 VMC 映射,sys_calc.m求系统状态空间方程和 LQR 反馈矩阵,leg_sim.slx和sys_sim.slx是带 Simscape Multibody 物理模型的仿真模型。这套仿真不是摆设:你在真机上看到的每条腿的发力逻辑,都是先在仿真里验证过的。改动算法前先在仿真里跑一遍,能省下大量现场调试时间。
结构轻量化。机械部分值得花心思。项目文档给了几个方向:大腿从实心改成镂空设计能减重约 15%;小腿连接从单轴承升级为双轴承能显著提升刚度;底板从亚克力换成碳纤维可减重 40%。这些改进在 SolidWorks 模型(solidworks目录)里改起来很方便,改完记得先跑仿真验证,再决定是否加工。
给机器人加"眼睛"。如果你想让它更炫,可以加上linux-fpv图传系统:一块 NanoPi Duo2 核心板加 OV5640 摄像头,用 ffmpeg 把视频压成 MJPG 流推给手机,APP 里就能看到实时画面。它的妙处是"可拔插":手机直接蓝牙遥控、手机经图传局域网遥控,两种模式对主控来说毫无区别,可以随时插拔。实测画质 640x480@25fps、延迟约 300ms,作为第一人称视角足够用了。等以后想玩视觉避障、SLAM 建图,这套图传链路就是现成的基础。
跌落缓冲也是这套结构的彩蛋——因为腿是柔性的,机器人从高处摔下来能通过腿部变形吸收冲击,项目实拍图展示了这一过程。这种"结构本身就是保护"的设计思路,很值得品味。
📍第七站里程碑:你能在 MATLAB 仿真里跑通平衡算法,并对自己机器人的某个零件提出"为什么这么设计"的思考。你已经开始用工程师的眼光看问题了。
启程:从这篇文章开始的下一步行动清单
到这里,你手里的"藏宝图"已经完整了。接下来就是行动:
- 拿到全部源码。打开终端,运行:
git clone https://gitcode.com/gh_mirrors/fo/foc-wheel-legged-robot cd foc-wheel-legged-robot仓库里每个子目录都有独立的说明文档(README.md),从你最感兴趣的部分看起就行。
先跑仿真再动手。如果你有 MATLAB,先打开
matlab目录的模型跑一遍,用最便宜的方式提前"摔"几百次。按模块推进,别贪多。建议顺序:机械装配 → 驱动板标定 → 主控烧录 → 平衡调参 → 手机遥控 →(可选)图传。
每次只改一个变量。无论是参数、相线还是机械结构,改完记录效果。调参笔记是你最宝贵的财富。
把失败当成数据。机器人每摔一次,都是你离成功更近一步的证据。我调平衡那几天,家里地板被砸得当当响,邻居还以为我在装修——但当你第一次看到它稳稳站住、顺着你的摇杆指令滑出去的时候,一切都值了。
最后送上一句这个项目教会我的话:技术永无止境,创新就在手中。从一颗电机到一台会平衡的机器人,差的从来不是天赋,而是一个开始。现在,轮到你了。
📍最终里程碑:你完成了从读者到制作者的跨越——要么已经拥有一台会平衡的 FOC 轮腿机器人,要么已经迈出了第一步。无论哪种,都欢迎带着你的故事回来。
【免费下载链接】foc-wheel-legged-robotOpen source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software development. | 一个新型结构的轮腿机器人开源资料,包含机械设计、电子设计、算法仿真、软件开发等材料项目地址: https://gitcode.com/gh_mirrors/fo/foc-wheel-legged-robot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考