尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

用Arduino Nano打造并联腿机器狗:从零到稳定行走的完整指南

发布时间:2026/9/29 17:02:33

资讯中心
01
ARTICLE

用Arduino Nano打造并联腿机器狗:从零到稳定行走的完整指南

用Arduino Nano打造并联腿机器狗:从零到稳定行走的完整指南
并联腿机器人这几年在创客圈里热度一直很高但大多数教程要么只讲理论要么用现成的开发板加昂贵的总线舵机对刚入门的朋友并不友好。这次我用手头最普通的Arduino Nano加上8个SG90级别的微型舵机配合3D打印结构件从零拼出一台能稳定行走的并联腿机器狗。全程不用买专用舵机控制板也不用写复杂的运动学解算用最朴素的分时PWM驱动方式就能让它迈开步子。这篇文章我会把整台机器人的设计和制作过程完整拆开从机构原理、硬件选型、代码结构到3D模型处理再到组装调试中踩过的坑全部记录下来。代码和模型文件都会给出获取方式你可以直接照着做也可以根据自己的理解改出不同的步态。适合手里有基础Arduino套件、想尝试四足机器人但不想一上来就上太复杂方案的玩家。1. 整体设计与思路拆解1.1 为什么选择并联腿结构常见的四足机器人腿型分为串联腿和并联腿两类。串联腿就是类似昆虫或哺乳动物的腿髋关节、大腿、小腿依次串联每个关节一个舵机结构直观运动学简单但缺点是关节越多末端累积误差越大而且对舵机力矩要求高小舵机很难撑起机身。并联腿则完全不同。它把驱动器集中在机体附近通过连杆机构将动力传递到足端。最典型的形式是平面五连杆或平面四连杆变体。这种结构的优势有几个一是运动部件惯量小响应快二是足端承载力可以通过连杆比例放大用小舵机也能抬起较重的机身三是所有舵机都在身体内部外观更整洁不容易在碰撞中损坏舵机齿轮。我选的方案是每侧两条腿共用一个并联机构也就是每条腿由两个舵机驱动通过一组连杆把旋转运动转换成足端的近似直线运动。8个舵机正好对应四条腿每条腿两个自由度。这种设计的本质是把每条腿的髋关节和膝关节虚拟化用连杆机构实现运动耦合。1.2 8个舵机的分配逻辑8个舵机的分配是并联腿机器狗的核心问题。四条腿每条腿分配两个舵机分别控制腿的前后摆动和上下抬起。听起来和串联腿一样但区别在于并联腿的两个舵机都安装在身体框架上不随腿部运动。前左腿两个舵机前右腿两个舵机后左腿两个舵机后右腿两个舵机。在代码里用数组管理这8个舵机的角度值每一帧计算所有舵机的目标角度然后依次输出PWM信号。这里要注意Arduino Uno或Nano的PWM引脚有限8个舵机不能全部接在硬件PWM脚上需要用软件模拟方式。我使用的是舵机库的默认软件PWM模式也就是用普通数字引脚也能驱动舵机代价是同一时间只能更新一个舵机但对步行机器人来说这个速度完全够用。1.3 步态规划的简化思路四足机器人的步态有很多种比如行走步、小跑步、跳跃步等。对于这个并联腿结构最稳妥的是行走步态也就是对角小跑trot gait。简单说就是左前腿和右后腿同时摆动右前腿和左后腿同时支撑然后交替进行。步态规划的难点在于协调8个舵机的时序。我采用的方法是定义一个步态周期把整个周期分成若干个时间片每个时间片内为每个舵机设定一个目标角度然后通过插值让舵机平滑过渡到目标角度。这样既避免了舵机突然大幅转动导致的抖动和电流冲击又能让整体步态看起来自然。2. 核心硬件选型与材料准备2.1 主控板的选择Arduino Nano是我最推荐的选择理由有三点。第一体积小能直接嵌入3D打印的机身框架里不用额外设计很大的安装仓。第二价格便宜兼容性好用市面上常见的兼容板就能跑。第三I/O引脚数量足够8个舵机信号线占用8个数字引脚加上超声波传感器或其他扩展模块剩余引脚依然够用。如果你手里只有Arduino Uno也可以用只是体积大一点需要把板子放在机身背部。ESP32也可以但供电和逻辑电平需要注意ESP32是3.3V逻辑输出而SG90舵机信号线最好用5V电平需要用电平转换或确认舵机兼容性。2.2 舵机的选择与力矩估算舵机是整个机器人的核心执行部件。我最初用的是SG90 9g舵机实测下来发现一个问题并联腿结构虽然能放大足端力但在某些姿态下单个舵机需要承受的力矩依然接近极限。尤其是机器人从地面抬腿的瞬间如果机身姿态偏向一侧受力舵机很容易堵转。经过几次测试我建议有条件的朋友直接用MG90S金属齿轮舵机。MG90S和SG90尺寸相同都是9g级别的微型舵机舵盘规格也一致但MG90S的齿轮是金属的抗堵转能力明显更强价格只贵几块钱。我最终用MG90S替换了全部8个SG90故障率立刻降了下来。力矩估算方面整机重量大约800g到1000g四条腿支撑时每条腿平均承担200g到250g的重量。加上运动时的动态载荷每个舵机需要能承受约0.3到0.5 kg·cm的力矩。MG90S的堵转力矩标称在1.8 kg·cm左右4.8V供电时实际使用中留出了较大余量。2.3 供电方案最容易翻车的地方舵机供电和主控供电必须分开这是我踩过最深的一个坑。如果8个舵机全部从Arduino的5V引脚取电启动瞬间的电流冲击会把Arduino直接重启导致机器人原地抽搐。我的方案是这样的用两节18650锂电池串联得到7.4V电压接入一个UBEC降压模块输出5V给舵机供电。Arduino则从另一路降压输出取电或者直接从USB口供电调试。这个UBEC也叫舵机供电模块最大输出电流要在5A以上才稳普通的降压模块输出电流不足启动时会电压跌落。提示不要用9V方块电池给舵机供电电流能力太差8个舵机同时动的时候电压会被拉到4V以下舵机直接罢工。2.4 3D模型的选择与适配网上有非常多开源的并联腿机器狗模型大多数是基于比利时工程师的MiniKame或类似结构修改而来的。搜索关键词可以用“quadruped robot 3D model”、“parallel leg robot STL”。这些模型的质量参差不齐我建议优先选择满足以下条件的每条腿使用两个舵机且舵机固定在机体上的并联联动结构零件数量尽量少最好控制在30个以内不需要额外轴承直接用螺丝连接的型号打印件之间留有0.3mm左右的装配间隙如果你找到的模型和我的舵机型号不匹配舵机安装仓尺寸是修改的重点。SG90和MG90S的外形尺寸基本一样都是22.8mm × 12.2mm × 28.5mm左右但不同厂家会有细微差别。建议打印前对比舵机实测尺寸和模型舱位必要时在切片软件里缩放模型。3. 控制原理与代码实现3.1 舵机控制基础PWM与角度映射舵机的控制原理一句话总结通过PWM脉冲宽度调制信号控制舵机内部电机的转动角度。标准舵机接收周期为20ms50Hz的PWM信号其中高电平脉冲宽度决定舵机角度。0.5ms 脉冲对应 0°1.5ms 脉冲对应 90°中位2.5ms 脉冲对应 180°Arduino的Servo库封装了底层细节你只需要用myservo.write(angle)就能把目标角度转换成对应的PWM信号。但这里有个隐藏问题不同的舵机对同一脉冲宽度对应的角度可能有偏差同一批次的舵机也可能有5°左右的误差。在并联腿机构中角度误差会被连杆放大到足端位置误差。所以我的代码里为每个舵机设置了一个角度校准偏移量在初始化时写在数组里这样能在不修改机械结构的情况下修正大部分误差。3.2 并联腿运动学与角度映射并联腿的运动学解算是这个项目里最硬核的部分但其实可以绕过。并联腿的足端轨迹和舵机角度之间存在一个近似映射关系当两个舵机分别处于特定角度组合时足端会落在工作空间内的某个点上。我没有采用严格的逆运动学求解而是采用标定法。具体操作步骤是先把机器狗侧放让腿部悬空手调两个舵机的角度观察足端位置记录若干组有代表性的角度组合足端在最前、最后、最高、最低、中间等把这些记录点做成查找表写入代码这样做的优势是直观、快速不需要懂三角函数。缺点是足端轨迹不够精确无法走任意方向。但对于初版机器狗来说能直线行走就已经是胜利了。如果你后续想升级可以研究平面五连杆机构的运动学模型用旋转矩阵和余弦定理求解足端坐标。3.3 完整代码结构解析整个代码我分成了四个模块舵机管理、步态时序、插值运动、主循环。下面是核心代码结构#include Servo.h #define LEG_FRONT_LEFT_A 2 #define LEG_FRONT_LEFT_B 3 #define LEG_FRONT_RIGHT_A 4 #define LEG_FRONT_RIGHT_B 5 #define LEG_BACK_LEFT_A 6 #define LEG_BACK_LEFT_B 7 #define LEG_BACK_RIGHT_A 8 #define LEG_BACK_RIGHT_B 9 Servo servos[8]; int servoPins[8] {2, 3, 4, 5, 6, 7, 8, 9}; // 每个舵机的角度校准偏移量正值为顺时针偏移 int servoOffset[8] {0, 2, -1, 3, 0, -2, 1, 0}; // 步态表中的角度值行走步态共8个相位 // 每一行对应一个相位8个值对应8个舵机 int gaitTable[8][8] { {90, 60, 90, 120, 90, 60, 90, 120}, {80, 55, 100, 125, 80, 55, 100, 125}, {70, 50, 110, 130, 70, 50, 110, 130}, {80, 55, 100, 125, 80, 55, 100, 125}, {90, 60, 90, 120, 90, 60, 90, 120}, {100, 65, 80, 115, 100, 65, 80, 115}, {110, 70, 70, 110, 110, 70, 70, 110}, {100, 65, 80, 115, 100, 65, 80, 115} }; float currentAngles[8]; float targetAngles[8]; int phaseIndex 0; unsigned long lastStepTime 0; int stepInterval 150; // 每个相位持续150ms void setup() { for (int i 0; i 8; i) { servos[i].attach(servoPins[i]); currentAngles[i] 90; targetAngles[i] 90; servos[i].write(90); } delay(1000); } void loop() { updateGait(); smoothMove(); } void updateGait() { unsigned long now millis(); if (now - lastStepTime stepInterval) { lastStepTime now; phaseIndex (phaseIndex 1) % 8; for (int i 0; i 8; i) { targetAngles[i] gaitTable[phaseIndex][i] servoOffset[i]; } } } void smoothMove() { // 简单的线性插值每次循环移动一小步 for (int i 0; i 8; i) { if (abs(currentAngles[i] - targetAngles[i]) 0.5) { if (currentAngles[i] targetAngles[i]) { currentAngles[i] 0.5; } else { currentAngles[i] - 0.5; } servos[i].write((int)currentAngles[i]); } } }这段代码的逻辑很清晰gaitTable定义了一个完整的步态周期8个相位对应8组角度。updateGait每隔150ms推进一个相位smoothMove负责让舵机平滑过渡避免突变。3.4 步态速度与插值系数调优步态周期中stepInterval决定走得多快。我试过从100ms到300ms的区间经验如下100ms太快舵机跟不上出现明显抖动和异响150ms比较合适的起步参数能保持稳定输出200ms及以上稳定但显得缓慢适合调试插值速度变量0.5也要和stepInterval配合。如果你把stepInterval调小但插值速度不变舵机就会在还没到达目标角度时又被赋予新目标结果一直在路途中追赶步态就乱了。合理的做法是保证每个相位周期内插值能完成目标角度的过渡。150ms步态间隔配0.5度/循环的插值速度在16MHz的Arduino上大约是每秒500次循环足够完成大部分角度过渡。4. 3D模型与打印技巧4.1 模型来源与选择这个项目的3D模型我是在开源社区找的关键词就是“quadruped robot parallel leg Arduino STL”。几个常用的下载平台都可以找到类似的像Thingiverse、Printables、MyMiniFactory这些。搜索时注意看模型的组装说明和用户评论尽量选那些有“printable”标签且装配逻辑清晰的设计。有些模型设计得很精致但零件数量过多打印时间长装配复杂对新手不友好。我选的这套模型全机包含机身主框架2个上下盖板腿部连杆每条腿4根共16根舵机支架与机身一体设计不需要单独打印足端可以不打直接用橡胶垫或热缩管套在连杆末端总共大约20个打印件用PLA材料打印0.2mm层高30%填充率大约需要10到12小时。4.2 打印参数设置与支撑处理打印设置这里有几个关键点直接影响装配顺滑度层高0.2mm是平衡速度和质量的默认选择。想要更精细的配合面可以降到0.15mm但打印时间会明显增加壁厚至少2层也就是1.2mm以上否则连杆强度不够极易断裂填充率机身零件建议30%以上腿部连杆建议40%以上。腿部受力大填充不足容易在运动时断裂支撑舵机安装舱位通常有悬挑结构建议开启支撑或者把模型旋转到让舵机仓位朝上的角度打印减少支撑面有一个容易踩的坑连杆上的插销孔在打印后往往比设计尺寸小因为热胀冷缩和FDM打印的层纹效应会导致孔径收缩约0.2mm到0.4mm。对策是打印后用2mm钻头或锥形锉刀扩孔否则螺丝根本穿不进去。4.3 材料选择PLA还是PETG大部分人第一次打印都用PLA便宜好打颜色多。但PLA的缺点是脆受力超过极限会直接断裂而不是弯曲变形。对于腿部连杆这种反复受力的部件我的建议是试做版全部用PLA快速验证结构加固版腿部连杆和机身关键受力位置换成PETG韧性更好耐疲劳强度更高如果打印机没有热床或打印PETG不熟练还有一个折中办法PLA打印完后在连杆中间加一根碳纤维棒或钢轴加强。很多开源模型本身就设计了中心加强轴的安装孔。5. 组装与调试实录5.1 舵机初始化与中位校准组装前最重要的一步把8个舵机全部调到中位大约90°然后再安装舵机臂和连杆。这步如果偷懒装好后会发现腿的姿态是歪的而且代码里很难完全修正。操作方法是把舵机接到Arduino上上传一个简单的扫腿测试程序舵机会在0°到180°之间来回摆动。当舵机转到90°时断电这时候舵机臂就处于中位。别忘了在舵机臂上做记号标记中位方向否则装到机器狗上会搞混。我踩过的坑是舵机臂安装方向反了结果两条前腿一条向外拐、一条向内拐步态完全不对称。解决方法是重新安装舵机臂同时在代码中检查左右腿舵机的旋转方向映射是否正确。有些模型设计时左右两侧的舵机安装方向是镜像的但舵机本身不分左右这时候需要在代码中让其中一侧的角度值做镜像换算。5.2 连杆装配顺序并联腿的连杆装配顺序有讲究。如果你先把所有连杆都装紧再固定到机身上会发现机构卡死完全无法运动。正确顺序是先把舵机安装到机身框架上安装舵机臂把同一侧的两个舵机臂通过短连杆连接起来形成第一个活动关节再连接腿部主连杆最后连接足端连杆每装一个关节就手动旋转一下舵机臂确认活动顺畅后再继续。所有螺丝不要一次性拧死留一点松量等整个机构装好、确认运动无阻力后再逐一紧固。这一步很像装自行车刹车位置完全对了才能锁紧。5.3 电路连接与走线规划电路连接方面8个舵机的信号线分别接D2到D9引脚电源线统一接到降压模块的5V输出地线统一接到公共地。走线规划上建议舵机线从机身侧面的线槽走到背部用扎带固定不要在关节活动范围内乱跑。并联腿最大优势就是舵机不动线不用跟着关节走整机内部看起来非常整洁。供电接线需要注意线径。18AWG以上的硅胶线比较稳妥太长太细的线在大电流下会产生明显压降导致远端舵机电压不足。我用的UBEC输出线和舵机电源线都控制在15cm以内。5.4 首轮通电测试接通电源前做一个目视检查清单所有舵机线插紧没有松动主控板没有被螺丝短接舵机电源线和信号线没有接反机器狗放在一个支架上四足悬空第一次通电不要直接把机器狗放在地上。找个泡沫块或纸箱把机身垫起来让四条腿悬空。先执行舵机角度校准程序观察8个舵机是否都能转到预定的90°位置。正常情况下四条腿的足端应该处于相似的姿态。确认悬空状态正常后再让机器狗落地测试。落地后如果出现明显的倾斜检查是步态表左右不对称还是某个舵机的校准偏移量需要调整。6. 常见问题与排查技巧实录6.1 舵机抖动但不转动这个现象最常见的两个原因供电不足和PWM信号干扰。先看供电用万用表测量舵机电源端的电压如果空载时有5V但一运动就掉到4.5V以下说明降压模块或电池内阻太大。把电池从18650换成更高放电倍率的锂聚合物电池或并联一组电池能显著改善。再看信号Arduino的软件PWM在同时驱动8个舵机时如果主循环里还有其他耗时操作比如delay函数或复杂的插值计算会导致PWM信号不稳定。解决办法是调整代码结构避免在主循环里使用长时间delay用之前的非阻塞式时间片写法替代。6.2 机器狗原地打转不前进打转说明左右两侧的步态没有按规定执行可能左右两侧的相位设置了相同的摆动方向。并联腿机构有一个特性左右两侧腿的舵机安装角度通常是对称相反的如果代码里给左右腿设定相同的角度值机械上就会形成一边推前、一边拉后的效果导致原地转圈。检查方法很简单把机器狗悬空执行步态程序从下方观察四条腿的足端轨迹。正常行走时对角腿应该同步摆动且方向一致。如果发现顺时针或逆时针转圈就在代码里把一侧腿的角度值做一个180°翻转或镜像处理。6.3 舵机发热严重舵机发热有两个原因堵转和持续受力。并联腿在站立状态下支撑腿的舵机会一直被连杆反向力矩顶着相当于一直堵转发热是必然的。缓解办法是采用站卧交替步态不要让四个腿一直处于撑地状态。在代码中步态周期的支撑相和摆动相明确区分支撑腿的舵机保持恒定角度摆动腿的舵机才执行角度变化这样能减少续流发热。如果长时间运行时舵机外壳烫手建议在机身背部加一个小风扇或者降低单次连续运行时间。并联腿结构本身效率并不算高舵机的能量损耗确实会转化为热量。6.4 常见问题速查表问题现象可能原因排查与解决上电后所有舵机乱转主控复位导致PWM信号中断检查供电是否稳定主控与舵机分开供电检查电池电压单腿卡死不动连杆卡住或舵机损坏手动旋转舵机臂确认舵机是否损坏检查连杆螺丝是否过紧行走时某个相位明显颠簸步态表角度不连续检查该相位与前一个相位对应舵机角度跳变是否过大机器人向一侧倾倒左右侧舵机安装不一致或校准偏移错误对比左右腿同位置舵机角度校准偏移量舵机响应迟钝舵机供电电压偏低测量5V电压更换降压模块或增强电池放电能力前腿正常后腿不动后腿舵机信号线接触不良重新插拔信号线检查焊接点是否虚焊6.5 提高可靠性的几个小改动版本跑通之后我做了三个小改动让机器狗整体稳定性明显提升第一个改动是把腿部连杆和舵机臂的固定螺丝换成带防滑垫圈的螺丝。原版模型用的是普通十字螺丝机器狗行走几步后就会因为震动而松动防滑垫圈能有效延缓松动速度。第二个改动是在舵机信号线上并联了一个100uF的电解电容并尽可能靠近舵机电源端。这个小电容能吸收舵机启动瞬间的电流尖峰对防止主控复位效果非常明显。第三个改动是给四只脚套上了热缩管。原版打印件直接接触地面容易打滑在瓷砖上走几步就会偏转方向。热缩管加厚了足底的接触面积防滑效果立竿见影。7. 从直线行走到多方向控制的扩展思路当前版本的代码只能实现直线往返行走或通过修改步态表让机器狗往特定方向转弯。想让机器狗实现转向、斜行甚至遥控控制可以从下面几个方向扩展。转向的核心思路是让两侧腿的步幅不同。左转时右侧腿的步幅大于左侧腿机器狗就会向左转弯。这个逻辑在步态表里实现就是修改左右两侧舵机的角度范围让一侧摆动幅度更大。代码中的gaitTable直接从固定值改为可以根据转向参数动态生成。加蓝牙遥控也简单。HC-05蓝牙模块的TX、RX分别接Arduino的RX0、TX1利用SoftwareSerial库接收手机蓝牙串口App发来的指令。代码增加一个解析函数将字符指令映射为前进、后退、左转、右转、停止等动作核心还是动态修改步态表。如果想让机器狗自主行走就需要加上避障模块。超声波HC-SR04或者红外测距模块都可以挂在机头位置主循环里检测障碍物距离小于设定值就执行转向动作。这个扩展对并联腿结构很友好因为机身稳定传感器不容易晃动。我在实际使用中发现并联腿机器狗做转向时由于结构本身带有一定的俯仰角变化转向半径并不稳定可能会出现原地转圈幅度不一的随机性。解决办法是降低转向时的步态频率让每一侧的步幅差不要太大牺牲一点灵活性换取可控性。这个内容后续还可以继续扩展的方向有几个一是把主控换成ESP32加入WiFi控制甚至手机APP图形化控制界面二是在机身加装陀螺仪模块实现姿态自稳定闭环三是改用总线舵机减少接线数量同时获得角度反馈。但从零起步、用最基础的Arduino并联腿方案把整条链路跑通这个经验本身才是最值钱的。有了这个基础后面每一步升级你都会清楚知道问题出在哪里。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。