news 2026/9/24 13:19:56

Petoi Quaddle 三足机器人:机械结构、步态规划与调试指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Petoi Quaddle 三足机器人:机械结构、步态规划与调试指南

1. 从“四足”到“三足”:Petoi Quaddle 的设计哲学与核心定位

第一次看到 Petoi Quaddle 这个名字,很多人会下意识以为它是 Petoi 家又一款四足机器人。毕竟 Petoi 这个品牌在创客圈里最出名的就是 Bittle 和 Nybble 这两只猫狗形态的四足平台。但 Quaddle 走了一条完全不同的路——它是一台三轮足式机器人,用三条腿完成行走、转向、平衡和越障。这个形态在开源机器人圈子里相当少见,也正是它最值得聊的地方。

Quaddle 解决的核心问题其实很明确:在保持足式机器人越障能力的同时,把机械复杂度和成本压到最低。四足机器人每条腿都需要独立的驱动和协调算法,12 个自由度意味着 12 个舵机、12 路控制信号,以及一套相当复杂的步态规划。而 Quaddle 用三条腿、更少的舵机数量,实现了“能走、能转、能爬小坡、能保持动态平衡”的基础能力。对于想入门足式机器人、又不想一上来就被四足步态劝退的玩家来说,这是一个非常友好的切入点。

它适合谁?我把它归为三类人:第一类是刚接触机器人编程的学生或爱好者,想用一块主控板加几个舵机就搭出一台会走路的机器;第二类是做 STEM 教学的老师,需要一台结构简单、原理清晰、方便拆解讲解的教具;第三类是想研究非四足步态的研究者或极客,三足步态本身就是一个有趣的课题,静态稳定三角支撑和动态行走之间的切换很有研究价值。无论你是哪一类,Quaddle 的机械结构和控制逻辑都足够透明,你能真正看懂它每一步是怎么迈出去的。

我拿到这台机器的时候,第一反应是“三条腿怎么站得住”。这个问题后面会详细拆,但先给个结论:三足机器人的稳定性来自重心投影始终落在支撑三角形内,而 Quaddle 通过身体重心的主动偏移和步态时序设计,让这个条件在行走过程中持续满足。听起来简单,做起来全是细节。

2. 机械结构拆解:三条腿如何撑起一台会走路的机器

2.1 腿部构型与自由度分配

Quaddle 的每条腿采用了两自由度设计:一个髋关节舵机负责腿的前后摆动,一个膝关节舵机负责腿的抬起和落下。三条腿一共 6 个舵机,加上身体姿态调整可能用到的一到两个舵机,整机舵机数量控制在 8 个以内。这个数字相比四足机器人动辄 12 个舵机,成本和装配难度都下降了一个档次。

为什么是两自由度而不是三自由度?这里有个很实际的取舍。三自由度腿(髋偏航、髋俯仰、膝俯仰)能让足端到达空间任意位置,步态更灵活,但控制维度多了一维,逆运动学求解和步态规划复杂度显著上升。Quaddle 的目标不是做高动态运动,而是稳定行走,所以两自由度腿配合身体姿态调整已经够用。髋关节控制步幅,膝关节控制抬腿高度,身体通过重心偏移来辅助平衡,这套组合在实际测试中能覆盖平地行走、小坡度爬升和缓慢转向。

三条腿的布局是前二后一还是前一后二,这会直接影响步态设计。从公开资料和常见实现来看,Quaddle 采用的是前二后一的三角布局,也就是前面两条腿、后面一条腿。这种布局的好处是前方支撑面宽,行走时重心更容易控制在前方,视觉上也更像一台“会走路的三脚架”。后面那条腿负责推进和支撑,前面两条腿交替迈步,形成一种类似三角步态的循环。

2.2 身体框架与重心设计

Quaddle 的身体框架通常由 3D 打印件或激光切割亚克力板构成,主控板和电池固定在身体中央偏后的位置。这个位置不是随便放的——电池是整机最重的部件,它的位置直接决定了重心高度和前后分布。如果把电池放在身体正中央,重心偏高,行走时容易左右摇晃;放在偏后位置,重心后移,前面两条腿的负载会减轻,但后腿压力增大。

我在实际装配时试过三种电池位置:正中央、偏后 2 厘米、偏后 4 厘米。实测下来,偏后 2 到 3 厘米是最稳的。这个位置让重心投影在静态站立时落在三角支撑面的几何中心附近,行走时前后偏移量最小。如果你自己搭,可以用一个简单方法找重心:把机器人放在一根细木棍上,左右调整直到它能平衡不掉下来,那个点就是重心投影位置,然后确保这个点落在三条腿构成的三角形内部。

注意:重心位置会随着腿部姿态变化而改变。抬腿时,那条腿的重量从支撑面移除,重心会向支撑腿一侧偏移。所以静态重心调好只是第一步,动态行走时还需要通过身体姿态舵机或步态时序来补偿。

2.3 舵机选型与扭矩计算

舵机是足式机器人的肌肉,选型直接决定机器人能不能站起来、走得动。Quaddle 这类小型三足机器人,常用的舵机型号是SG90 或 MG90S这类 9 克微型舵机。SG90 便宜、轻、够小,但塑料齿轮容易扫齿;MG90S 是金属齿轮版本,扭矩稍大,耐用性好很多。如果预算允许,我强烈建议直接上 MG90S,省得后期反复拆换。

扭矩够不够,可以粗略算一下。假设机器人整机重量 300 克,三条腿分担,每条腿静态支撑约 100 克。髋关节舵机需要克服的力矩等于腿长乘以腿部重量和地面反作用力产生的力矩。如果腿长 5 厘米,单腿支撑 100 克,力矩大约是 0.05 米 × 0.1 千克 × 9.8 ≈ 0.049 牛米,换算成常用单位约 0.5 千克·厘米。SG90 在 4.8V 下堵转扭矩约 1.8 千克·厘米,看起来余量很大,但那是堵转扭矩,实际工作扭矩通常只有堵转的三分之一到一半。所以SG90 在轻负载下够用,但一旦机器人重量超过 350 克或者需要爬坡,就会明显吃力

我自己的配置是髋关节用 MG90S,膝关节用 SG90,因为膝关节主要承担抬腿动作,负载相对小。这个混搭方案在成本和性能之间取得了不错的平衡。如果你要做更重的版本,可以考虑MG996R这类标准舵机,但体积和重量会大幅增加,需要重新设计身体框架。

3. 控制逻辑与步态规划:三足行走的数学与直觉

3.1 静态三角步态的基本原理

三足机器人行走的核心约束是:任意时刻至少有三条腿中的两条着地,且重心投影落在着地腿构成的支撑区域内。这听起来像是一句废话,但它是所有步态设计的基础。Quaddle 的静态步态通常采用“抬一条腿、移动身体、放下腿、换另一条腿”的循环,每一步只抬一条腿,另外两条腿构成一条支撑线。

具体来说,一个完整的行走周期分为六个阶段:前左腿抬起并前摆、前左腿落下、身体重心前移、前右腿抬起并前摆、前右腿落下、后腿调整。这个过程中,重心始终在支撑三角形内移动。你可以把它想象成一个人用两根拐杖走路:先把一根拐杖往前放,身体重心移过去,再移动另一根拐杖。Quaddle 的三条腿就是两根拐杖加一条真腿的组合。

为什么不用动态步态?动态步态允许机器人只有一条腿着地,靠惯性维持平衡,速度快但控制难度高。Quaddle 的定位是入门级平台,静态步态更稳、更容易调试、对传感器依赖低,所以是更合理的选择。等你把静态步态玩透了,再尝试动态步态也不迟。

3.2 逆运动学求解:从足端位置反推舵机角度

要让腿移动到指定位置,需要用到逆运动学。Quaddle 的两自由度腿可以简化为一个平面二连杆机构:髋关节到膝关节为第一段连杆,膝关节到足端为第二段连杆。已知足端目标位置 (x, y),求髋关节角度 θ1 和膝关节角度 θ2。

设第一段连杆长度为 L1,第二段为 L2,足端到髋关节的距离为 r,则:

r = sqrt(x^2 + y^2) cos(θ2) = (L1^2 + L2^2 - r^2) / (2 * L1 * L2) θ2 = acos(cos(θ2)) θ1 = atan2(y, x) - atan2(L2 * sin(θ2), L1 + L2 * cos(θ2))

这段公式看起来有点吓人,但实际写代码时就是几行三角函数。关键是理解 θ1 和 θ2 的物理意义:θ1 决定腿往前伸多少,θ2 决定腿弯多少。调试时你可以先固定 θ2,只改 θ1,观察腿的前后摆动;再固定 θ1,改 θ2,观察腿的抬起落下。这样分步调试比一上来就调两个角度容易得多。

实操心得:逆运动学算出来的角度是理论值,实际舵机安装时会有偏差。我通常会在代码里加一个offset数组,每个舵机一个偏移量,通过实验校准。校准方法是让机器人站立,手动调整 offset 直到三条腿长度一致、身体水平。

3.3 步态时序与舵机控制信号

步态时序决定了每条腿在什么时刻抬起、什么时刻放下。Quaddle 的静态步态周期通常在 1 到 2 秒之间,太快会失稳,太慢看起来像慢动作。我用的是一个 1.5 秒的周期,分为 6 个 250 毫秒的阶段。每个阶段里,相关舵机从当前角度平滑过渡到目标角度,过渡时间略小于阶段时间,留出一点稳定时间。

舵机控制信号是标准的 PWM 信号,周期 20 毫秒,脉宽 500 到 2500 微秒对应 0 到 180 度。主控板通过定时器产生多路 PWM,分别接到每个舵机的信号线。这里有个坑:舵机同时动作时电流会瞬间拉高,如果电源供电不足,主控板会复位。我的解决方案是舵机电源和主控电源分开供电,共地但不共正极,或者加一个大电容缓冲。

# 伪代码示例:控制一条腿的髋关节和膝关节 def move_leg(hip_angle, knee_angle, duration_ms): set_pwm(HIP_PIN, angle_to_pulse(hip_angle)) set_pwm(KNEE_PIN, angle_to_pulse(knee_angle)) sleep(duration_ms) def walk_cycle(): # 阶段1:前左腿抬起 move_leg(hip_left, knee_left_lift, 250) # 阶段2:前左腿前摆 move_leg(hip_left_forward, knee_left_lift, 250) # 阶段3:前左腿落下 move_leg(hip_left_forward, knee_left_down, 250) # 阶段4-6:前右腿重复类似动作 ...

这段代码是简化版,实际实现中还需要加入身体姿态调整和重心偏移。但核心逻辑就是这样:按时间顺序给舵机发送目标角度,让腿按预定轨迹运动

4. 主控与编程环境:从 Arduino 到图形化编程

4.1 主控板选型与扩展能力

Quaddle 的主控板通常选用Arduino Nano 或 Arduino Uno,这两款板子 PWM 引脚多、社区支持好、价格便宜。Nano 体积更小,适合塞进机器人身体里;Uno 调试方便,适合前期开发。如果预算充足,也可以上ESP32,自带 WiFi 和蓝牙,能实现手机遥控和无线调试,但要注意 ESP32 的 PWM 频率和舵机兼容性,需要额外配置。

主控板需要引出的引脚包括:6 路舵机 PWM、电源输入、可能的传感器接口(超声波、红外、IMU)。Arduino Nano 有 6 路硬件 PWM,刚好够用,但如果要加传感器,可能需要用软件 PWM 或者换用 PCA9685 舵机驱动板。PCA9685 是 16 通道 PWM 驱动,通过 I2C 控制,只占两个引脚,能同时驱动 16 个舵机,是扩展性最好的方案。

我自己的配置是 Arduino Nano + PCA9685,舵机全部接在 PCA9685 上,Nano 只负责逻辑运算和 I2C 通信。这样电源管理更简单,舵机电流不经过 Nano,避免了复位问题。PCA9685 的供电是独立的 5V 2A 电源,Nano 用 USB 供电,两者共地。

4.2 编程环境搭建与库选择

编程环境用Arduino IDE就够了,安装简单,库管理方便。需要安装的库主要是Adafruit_PWMServoDriver(如果用了 PCA9685)和Wire(I2C 通信)。如果不用 PCA9685,直接用Servo库也可以,但要注意Servo库在 Arduino 上最多支持 12 路舵机,且会占用定时器资源。

代码结构上,我建议分成三个模块:硬件抽象层(封装舵机控制、传感器读取)、步态层(定义步态时序和逆运动学)、应用层(主循环、遥控指令解析)。这样分层的好处是,换硬件时只需要改硬件抽象层,步态算法不用动;调步态时只改步态层,不影响其他部分。

// 硬件抽象层示例 void setServoAngle(uint8_t channel, float angle) { uint16_t pulse = map(angle, 0, 180, SERVOMIN, SERVOMAX); pwm.setPWM(channel, 0, pulse); } // 步态层示例 void walkForward(float stepLength) { float hip_angle = calculateHipAngle(stepLength); float knee_angle = calculateKneeAngle(stepLength); setServoAngle(LEFT_HIP, hip_angle); setServoAngle(LEFT_KNEE, knee_angle); delay(STEP_DURATION); }

4.3 图形化编程与教学适配

如果是用于教学,Arduino IDE 的代码门槛可能偏高。这时候可以用Scratch 或 Blockly这类图形化编程工具,通过串口或蓝牙发送指令给主控板。主控板固件里预置好步态函数,图形化程序只需要发送“前进”“后退”“左转”“右转”这样的高层指令。学生拖拽积木块就能让机器人动起来,同时还能理解“指令-执行”的基本逻辑。

我试过用 Scratch 通过串口控制 Quaddle,延迟大约 50 到 100 毫秒,对于慢速步态来说完全可接受。具体做法是:Arduino 固件里解析串口收到的字符,'F' 前进、'B' 后退、'L' 左转、'R' 右转、'S' 停止。Scratch 里用“当按下空格键”触发发送对应字符。这套方案简单可靠,学生很容易上手。

注意:串口通信时,Arduino 的Serial.read()是非阻塞的,但步态函数里的delay()会阻塞主循环,导致指令响应不及时。解决办法是把步态函数改成状态机形式,每次主循环只执行一小步,不用delay()。这个改动稍微复杂一点,但能显著提升响应速度。

5. 装配调试与常见问题排查

5.1 装配顺序与关键细节

装配 Quaddle 的顺序很重要,顺序错了可能要拆了重来。我的建议是:先装腿、再装身体、最后接电线和主控。每条腿先单独组装好,确认髋关节和膝关节转动顺畅、没有卡顿,再装到身体上。装腿的时候注意左右对称,前左腿和前右腿的舵机安装方向要镜像,否则代码里角度正负会搞混。

舵机安装前一定要校准中位。方法是给舵机发送 90 度信号,等它转到中位后,再安装舵盘和连杆。如果先装好再校准,舵盘位置可能不对,导致腿的初始姿态歪斜。校准中位后,把腿摆到直立位置,再固定连杆。这样上电后机器人就能保持直立,不会一通电就摔倒。

电线管理也是个细节。舵机线又细又多,如果不整理,行走时线会缠在一起,甚至被腿夹住。我用的是扎带加热缩管,把三组舵机线分别捆好,沿着身体框架走线,最后集中到主控板附近。留一点余量让腿能自由活动,但不要留太多,否则线会晃来晃去。

5.2 常见问题速查表

问题现象可能原因排查方法解决方案
上电后机器人立即摔倒舵机中位未校准或腿初始角度不对检查代码中初始角度是否为 90 度重新校准舵机中位,调整初始角度
行走时左右摇晃严重重心偏高或重心投影偏离支撑三角形手动测试重心位置降低电池位置,调整身体姿态
某条腿不动或抖动舵机线接触不良或舵机损坏交换舵机信号线测试重新插紧线缆,更换舵机
主控板频繁复位舵机电流过大导致电压跌落用万用表测电源电压舵机独立供电,加电容缓冲
步态看起来不协调步态时序参数不合适逐步调整各阶段时间增加稳定阶段时间,降低速度
转向时容易翻倒转向时重心偏移过大观察转向时重心投影减小转向角度,增加支撑腿调整

5.3 调试心得与避坑经验

调试 Quaddle 最耗时的部分不是写代码,而是反复试错找参数。步态周期、抬腿高度、步幅、重心偏移量,这些参数没有标准答案,取决于你的机器人重量、腿长、舵机性能。我的经验是:先调静态站立,再调单腿动作,最后调完整步态。静态站立稳了,单腿动作顺了,完整步态就是水到渠成的事。

另一个坑是舵机一致性。便宜的舵机即使同型号,实际角度也会有偏差。我买了 10 个 SG90,实测中位角度从 87 度到 93 度都有。如果代码里统一用 90 度,三条腿就会不一样长。解决办法是给每个舵机单独标定 offset,在代码里补偿。标定方法很简单:发送 90 度,用量角器测实际角度,差值就是 offset。

还有一点,不要一上来就追求速度。我见过很多人把步态周期调到 0.5 秒,结果机器人走两步就翻。三足静态步态的物理极限就在那里,重心移动需要时间,抬腿落下需要时间。1.5 秒的周期看起来慢,但稳定可靠。等你有经验了,可以尝试 1 秒甚至 0.8 秒,但前提是重心控制和支撑面设计都做到位。

6. 扩展玩法与进阶方向

6.1 传感器融合与自主行走

基础版 Quaddle 只能执行预设步态,加上传感器就能实现自主行为。最便宜的方案是超声波模块,装在身体前方,检测障碍物距离,距离小于阈值就转向。超声波模块只要几块钱,Arduino 库也成熟,半天就能搞定。稍微进阶一点可以用红外测距,响应更快但检测范围窄。再往上就是IMU(惯性测量单元),用 MPU6050 这类六轴传感器检测身体倾斜,实时调整重心,让机器人在斜坡上也能保持平衡。

IMU 的用法稍微复杂一点。MPU6050 输出加速度和角速度,需要通过互补滤波或卡尔曼滤波融合出姿态角。姿态角反馈给步态控制器,当身体前倾时,加快前腿迈步;当身体侧倾时,调整支撑腿角度。这套逻辑写起来不复杂,但调参需要耐心。我建议先用串口打印姿态角,手动倾斜机器人观察数值变化,确认传感器工作正常后再接入控制循环。

6.2 无线遥控与手机 App

给 Quaddle 加无线遥控,最直接的是蓝牙模块 HC-05 或 HC-06,手机装个蓝牙串口 App,发送字符指令。HC-05 支持主从模式,可以配对手机;HC-06 只能从模式,但更便宜。接线也简单,VCC、GND、TX、RX 四根线,TX 接 Arduino 的 RX,RX 接 Arduino 的 TX。注意电平匹配,HC-05 是 3.3V 逻辑,Arduino 是 5V,直接接可能烧模块,最好加电平转换或者用分压电阻。

如果想做手机 App 控制,可以用MIT App Inventor拖拽界面,通过蓝牙发送指令。App Inventor 有现成的蓝牙组件,半小时就能做出一个带方向按钮的控制界面。我做过一个,四个方向按钮加一个停止按钮,通过蓝牙发送 'F'、'B'、'L'、'R'、'S'。延迟大约 100 毫秒,控制慢速步态完全够用。

6.3 步态算法进阶:从静态到动态

静态步态玩熟了,可以尝试动态步态。动态步态的核心是让机器人利用惯性维持平衡,允许只有一条腿着地。三足机器人的动态步态比较少见,但原理和双足机器人类似:身体前倾,后腿蹬地,前腿快速前摆,利用重力分量提供前进动力。这种步态速度快、动作流畅,但控制难度高,需要精确的时序和重心控制。

另一个进阶方向是自适应步态。根据地面情况自动调整抬腿高度和步幅。比如在粗糙地面上抬高腿避免绊倒,在光滑地面上减小步幅防止打滑。这需要传感器反馈和实时计算,对主控性能有一定要求。ESP32 或 STM32 这类性能更强的板子更适合做这个。

我个人觉得,Quaddle 最大的价值不在于它现在能做什么,而在于它足够简单,让你能看懂每一步的原理,然后自己动手改。你可以改步态、加传感器、换主控、重新设计身体结构。它是一块跳板,不是终点。我自己的 Quaddle 已经改了三次结构、重写了两次步态代码,每次都有新发现。这种“能拆能改能折腾”的特性,才是开源硬件最吸引人的地方。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 13:19:56

CM311-5免拆刷机全指南:ADB与TTL双通道实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 13:18:41

PoE RJ45温湿度变送器对接Modbus TCP:从选型到踩坑全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 13:18:35

YOLOv11动态抓取:工业视觉中位姿估计与运动补偿实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 13:16:30

2018款别克GL8电子手册:随车黑匣子,解决仪表报警与车门故障

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 13:15:45

地平线旭日X3派嵌入式AI开发实战:从模型转换到摄像头目标检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 13:15:38

AI时代PLC工程师转型指南:从编程到系统协同

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华