恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Petoi Quaddle四足机器人深度解析:从逆运动学到步态调试实战
首页
资讯中心
/
Petoi Quaddle四足机器人深度解析:从逆运动学到步态调试实战
Petoi Quaddle四足机器人深度解析:从逆运动学到步态调试实战
发布时间:2026/10/7 7:44:31
1. 项目缘起与核心定位第一次看到“Petoi Quaddle”这个名字我下意识把它拆成了两半Petoi 是那家做四足机器人 OpenCat 的团队Quaddle 听起来像是 Quad四足和 Waddle摇摇摆摆地走拼出来的词。合在一起基本就能猜到这是一台走起路来带点憨态、面向教育或娱乐场景的四足机器人。我拿到这个标题的时候手头并没有完整的官方文档所以下面这些内容一部分来自我对 Petoi 产品线的长期跟踪一部分来自我自己折腾四足机器人时踩过的坑还有一部分是基于同类产品常见实践的合理推演。如果你正好在找一台能跑能跳、还能自己写代码调教的桌面级四足机器人这篇东西应该能帮你少走不少弯路。先说清楚它大概是个什么定位。Petoi 这个团队之前最出名的作品是 Bittle 和 Nybble前者是手掌大小的四足机器狗后者是猫形机器人都是靠舵机驱动、开源可编程的路线。Quaddle 从命名逻辑上看大概率延续了这条产品线但“Quaddle”这个词里的“Waddle”暗示了它的步态可能更偏向摇摆、笨拙、可爱的风格而不是追求高速奔跑。这类机器人的核心价值不在于跑得多快而在于它把机器人学里最基础的几个概念——运动学、逆解、步态规划、传感器融合——压缩到了一个你能放在桌面上、用手机就能改代码的尺寸里。适合谁呢适合想入门机器人编程的学生、想给孩子做 STEM 启蒙的家长、以及像我这样单纯觉得四足机器人好玩、想自己写步态算法折腾一下的爱好者。我之所以对这个标题感兴趣是因为四足机器人这个品类在过去几年里价格下探得很厉害但真正能做到“开箱即用、又能深度折腾”的其实不多。很多产品要么是玩具级的遥控狗代码完全封闭要么是研究级的平台价格五位数起步。Petoi 一直走的是中间路线硬件开源、软件开源、社区活跃Quaddle 如果延续这个思路那它的核心卖点就不是硬件参数而是那套让你能自己改步态、自己加传感器的软件生态。这一点在后面讲实操的时候会反复提到因为四足机器人的乐趣八成都在调参和改代码上。2. 硬件架构与核心部件拆解2.1 舵机选型与自由度分配四足机器人的硬件核心就两样舵机和主控。舵机决定了它能做出什么动作主控决定了它能多聪明。Petoi 之前的 Bittle 用的是 8 个舵机每条腿 2 个自由度一个负责大腿的抬落一个负责小腿的伸缩。这种配置的好处是结构简单、成本低、控制逻辑清晰坏处是步态比较受限没法做那种很流畅的侧向移动。Quaddle 如果要在“Waddle”这个方向上做出特色我推测它可能会在髋关节上增加一个侧摆自由度变成每条腿 3 个自由度、总共 12 个舵机。这样它就能做出左右摇摆的步态走起来更像企鹅或者鸭子视觉上更有辨识度。舵机的选型上这类桌面级机器人通常用金属齿数字舵机扭矩在 2 到 4 kg·cm 之间。为什么是这个区间你可以算一下一条腿加上身体的重量大概在 200 到 300 克力臂大概 3 到 5 厘米需要的扭矩就是重量乘以力臂再留个 1.5 倍的安全系数。2 kg·cm 的舵机在 5 厘米力臂下能撑起 400 克对于单腿支撑阶段是够用的。但如果你要让它跳一下瞬时扭矩需求会翻倍所以选 3 kg·cm 以上的金属齿舵机更稳妥。我自己的经验是塑料齿舵机在四足机器人上基本撑不过一个月尤其是膝盖那个位置反复冲击很容易扫齿。2.2 主控板与扩展接口主控方面Petoi 一贯用的是 Arduino 兼容的板子比如 NyBoard。这类板子的特点是引脚多、支持 PWM 舵机控制、有 I2C 和串口可以接传感器。Quaddle 大概率会沿用这个思路但可能会升级到性能更强的芯片比如 ESP32 或者 RP2040这样就能支持无线通信和更复杂的运算。我之所以这么推测是因为四足机器人如果要加视觉模块或者做实时步态调整Arduino Uno 那点算力是不够的。ESP32 双核 240 MHz 主频跑个简单的逆运动学解算和蓝牙遥控绰绰有余还能留出资源做传感器融合。扩展接口这块我特别关注的是它有没有留出足够的 I2C 和 GPIO。四足机器人好玩的地方就在于你能往上加东西超声波测距、红外避障、摄像头、九轴 IMU。如果主控板只留了一两个空闲引脚那扩展性就大打折扣。根据 Petoi 以往产品的风格他们通常会留出至少 4 到 6 个空闲引脚并且提供标准的 Grove 或者 Qwiic 接口。这一点你在入手前一定要确认因为后期想加传感器却发现没接口那种感觉就像买了台电脑发现没有 USB 口一样难受。2.3 结构件与装配逻辑结构件方面这类机器人通常用注塑件或者 3D 打印件。注塑件精度高、一致性好但开模成本高所以小批量产品往往用 3D 打印。3D 打印的好处是你可以自己修改模型比如加个摄像头支架、改个腿的长度。Petoi 一直把 3D 模型开源Quaddle 应该也会延续这个传统。我自己的做法是拿到机器人之后先别急着装把所有的 3D 模型下载下来在切片软件里过一遍看看哪些地方容易断、哪些地方可以加强。比如膝盖关节那个位置我通常会把填充率调到 40% 以上壁厚加到 3 层这样耐冲击性会好很多。装配顺序也有讲究。四足机器人的腿是对称的左前、右前、左后、右后舵机的安装角度必须一致否则你写步态的时候会发现机器人总是往一边偏。我的经验是装舵机之前先用舵机测试仪把所有舵机归到中位然后再按中位角度装到结构件上。这样后面写代码的时候所有的关节角度都是相对于中位的偏移量逻辑会清晰很多。如果你跳过这一步后面调步态的时候就得在代码里加一堆补偿值越调越乱。3. 步态算法与运动控制原理3.1 从逆运动学说起四足机器人走路本质上就是控制四条腿的末端在空间中的位置。你告诉机器人“左脚往前迈 5 厘米”它得反推出髋关节和膝关节各转多少度这个反推的过程就是逆运动学。对于每条腿只有两个自由度的情况逆解可以简化成一个平面上的几何问题已知大腿长度 L1、小腿长度 L2、目标点相对于髋关节的坐标 (x, y)求两个关节角度。这个用余弦定理就能算出来公式大概是这样的import math def inverse_kinematics(x, y, L1, L2): # 计算目标点到髋关节的距离 dist math.sqrt(x**2 y**2) # 检查是否超出工作空间 if dist L1 L2: return None, None # 余弦定理求膝关节角度 cos_knee (L1**2 L2**2 - dist**2) / (2 * L1 * L2) knee_angle math.acos(cos_knee) # 求髋关节角度 cos_hip (L1**2 dist**2 - L2**2) / (2 * L1 * dist) hip_angle math.acos(cos_hip) math.atan2(y, x) return hip_angle, knee_angle这段代码看起来简单但实际用的时候有几个坑。第一个坑是角度范围限制舵机只能转 0 到 180 度你算出来的角度如果超出这个范围机器人就会卡住或者抖舵。第二个坑是坐标系定义x 轴朝前还是朝下y 轴朝上还是朝前不同的人写代码习惯不一样如果你参考的代码和你的硬件装配方式不一致算出来的角度就是错的。我的建议是先在纸上画清楚每条腿的坐标系标好原点、x 轴方向、y 轴方向然后再写代码。这个前期工作花十分钟后面能省你十个小时的调试时间。3.2 步态规划的基本逻辑逆运动学解决的是“腿怎么动”步态规划解决的是“什么时候动哪条腿”。四足动物走路有很多种步态最常见的是 walk、trot、pace、bound。Walk 是四条腿依次抬起每次只有一条腿离地稳定性最好但速度最慢。Trot 是对角线两条腿同时抬起比如左前和右后一组右前和左后一组速度快但稳定性稍差。Quaddle 如果走的是“Waddle”风格我猜它默认的步态可能是 pace 或者一种改良的 walk就是让身体左右摇摆来补偿重心的移动看起来像鸭子走路。步态规划的核心参数是占空比和相位差。占空比指的是一条腿在一个步态周期里处于支撑相的时间比例。Walk 的占空比通常是 0.75也就是四分之三的时间在支撑四分之一的时间在摆动。Trot 的占空比是 0.5一半支撑一半摆动。相位差指的是不同腿之间的动作时间差比如左前腿和右后腿的相位差是 0.5就意味着左前腿开始摆动的时候右后腿正好在支撑相中间。这些参数直接决定了机器人走路的稳定性和速度调起来非常考验耐心。我自己的经验是调步态的时候先把速度降到很低比如一个步态周期两秒钟然后观察机器人的重心变化。如果它在某条腿抬起的瞬间往那边倒说明重心没有提前移到对角线上。这时候你有两个选择一是调整身体的横向偏移让重心主动往支撑腿那边靠二是调整抬腿的高度和速度让摆动相更短、更干脆。我通常先调身体偏移因为这是最直接的改一个参数就能看到效果。等重心稳了再慢慢加快周期直到找到速度和稳定性的平衡点。3.3 IMU 反馈与姿态补偿光靠开环的步态规划机器人走平路还行一旦地面有点起伏或者你推它一下它就会倒。这时候就需要 IMU 出场了。IMU 是惯性测量单元通常包含加速度计和陀螺仪能测出机器人的俯仰角、横滚角和偏航角。有了这些数据你就可以做姿态补偿如果机器人往前倾了就让前腿伸得更长一点、后腿缩得更短一点把身体拉回来。这个补偿逻辑说起来简单做起来难。难点在于 IMU 的数据有噪声直接拿原始数据去调舵机机器人会抖得像筛糠。所以你需要做滤波最常见的是互补滤波或者卡尔曼滤波。互补滤波简单几行代码就能搞定适合算力有限的板子。卡尔曼滤波效果好但参数难调调不好反而引入延迟。我的建议是如果你刚开始玩先用互补滤波把高频噪声滤掉低频的姿态变化保留下来。等你有经验了再上卡尔曼。还有一个坑是 IMU 的安装位置。IMU 必须装在机器人的重心附近而且要和身体刚性连接不能有松动。如果 IMU 装在一条腿上那腿一动 IMU 就跟着动测出来的姿态全是错的。我见过有人把 IMU 用双面胶粘在背上走两步就掉了然后机器人就开始原地转圈。所以安装的时候一定要用螺丝固定或者至少用扎带绑紧。4. 软件开发环境与编程实操4.1 开发工具链搭建Petoi 的软件生态通常是基于 Arduino IDE 的你需要先装 Arduino IDE然后装对应的板级支持包和库文件。这个过程看起来简单但新手最容易卡在驱动安装上。尤其是 USB 转串口芯片不同批次的板子可能用不同的芯片CH340、CP2102、FTDI 都有可能。如果你插上板子发现电脑识别不到串口先别怀疑板子坏了大概率是驱动没装。Windows 上可以去设备管理器看有没有带黄色感叹号的设备有的话右键更新驱动手动指向你下载的驱动文件夹。装好驱动之后在 Arduino IDE 里选对板子和端口。板子型号选错了编译能过但上传会失败。端口选错了上传会提示“找不到设备”。这两个错误我都犯过尤其是电脑上插了好几个 USB 设备的时候端口号会变来变去。我的习惯是每次插上机器人之后先去设备管理器确认一下端口号然后在 IDE 里选对应的那个。如果你用的是 Mac 或者 Linux端口名通常是 /dev/tty.usbserial-xxxx 或者 /dev/ttyUSB0权限问题可能需要用 sudo 或者把用户加到 dialout 组里。4.2 舵机校准与中位设置代码上传成功之后第一件事不是急着让它走路而是校准舵机。校准的目的是让所有舵机在收到“中位”指令时机器人的腿处于一个标准的站立姿态。这个姿态通常是四条腿垂直支撑身体水平。校准的方法每个产品不太一样Petoi 通常会在例程里提供一个校准程序你运行之后机器人会进入一个放松状态然后你手动把腿摆到标准姿态再按某个按钮确认程序会把当前的角度值写入 EEPROM 作为中位偏移。这个步骤千万不能跳过。我见过有人拿到机器人直接跑默认例程结果机器人站起来的时候一条腿往前伸、一条腿往后伸像在劈叉。这就是因为舵机的中位没有校准出厂时的中位和结构件的装配角度不匹配。校准的时候还有一个小技巧先把所有的舵机臂拆下来通电让舵机转到中位然后再把舵机臂按标准姿态装回去。这样机械中位和电气中位就是一致的后面写代码会省很多事。4.3 步态参数调试实战校准完之后就可以开始调步态了。我通常会把步态参数分成三组几何参数、时间参数、补偿参数。几何参数包括大腿长度、小腿长度、站立高度、抬腿高度这些决定了机器人的运动空间。时间参数包括步态周期、占空比、相位差这些决定了机器人的节奏。补偿参数包括身体横向偏移、俯仰补偿系数、横滚补偿系数这些决定了机器人的稳定性。调试的顺序很重要。先调几何参数把站立高度设到一个合适的位置让腿既不完全伸直也不完全弯曲。完全伸直的话逆运动学解算会出现奇异点角度变化会非常剧烈完全弯曲的话力矩效率低舵机容易发热。我的经验是站立高度设成大腿加小腿总长的 70% 到 80% 比较合适。然后调时间参数先把周期设长一点比如 1.5 秒占空比设 0.75观察机器人走路的姿态。如果它走一步停一下说明相位差没调好如果它走着走着往一边偏说明左右腿的参数不对称。补偿参数是最后调的也是最需要耐心的。身体横向偏移通常需要根据步态周期动态变化比如左前腿抬起的时候身体要往右后腿那边偏。这个偏移量可以用正弦波来生成相位和步态周期同步。俯仰补偿和横滚补偿则需要 IMU 的数据把姿态误差乘以一个系数加到关节角度上。这个系数不能太大太大会震荡也不能太小太小没效果。我一般从 0.1 开始试每次加 0.05直到机器人能在外力推一下之后自己站稳。5. 常见问题排查与避坑指南5.1 舵机抖动与发热舵机抖动是四足机器人最常见的问题原因通常有三个电源供电不足、舵机中位不准、控制信号干扰。电源问题最好排查用万用表量一下舵机供电电压如果低于 5V 或者波动超过 0.5V那就是电池不行了或者线太细了。四足机器人瞬间电流能到好几安培细线压降很大建议用 18AWG 以上的硅胶线。中位不准的话重新校准一遍。信号干扰比较麻烦通常是舵机线和电源线捆在一起导致的把信号线和电源线分开走线或者给舵机加个磁环能改善不少。舵机发热通常是负载太大或者堵转。如果你发现某个舵机特别烫先检查那条腿是不是卡住了或者站立高度太低导致关节角度太极限。还有一种可能是舵机的死区设置太小导致它一直在微调位置电流持续偏高。数字舵机的死区通常可以编程设置把死区稍微调大一点比如从 2 微秒调到 5 微秒能明显降低发热。5.2 机器人走偏与步态不对称走偏这个问题我遇到过好几次每次原因都不一样。有一次是左前腿的舵机臂装错了一个齿导致左右腿的初始角度差了 5 度走起来就慢慢往左偏。还有一次是电池电量低的时候右侧舵机响应变慢机器人就往右偏。所以排查走偏的时候先检查机械装配再检查电池电量最后再怀疑代码。代码层面的话检查左右腿的步态参数是不是完全对称有时候你复制粘贴的时候改了一个参数忘了改另一个就会导致不对称。步态不对称还有一个隐蔽的原因地面摩擦系数不一致。如果你在光滑的桌面上调好了步态拿到地毯上走摩擦力变了步态就会乱。这时候要么重新调参数要么加一个足底摩擦力补偿。我的做法是在足底贴一层橡胶垫增加摩擦力这样在不同地面上的表现会一致很多。5.3 通信中断与程序烧录失败通信中断通常发生在蓝牙或者 WiFi 遥控的时候。如果你用的是手机 App 遥控走着走着突然没反应了先看手机和机器人的距离是不是太远或者中间有没有遮挡。蓝牙的穿墙能力很弱隔一堵墙就可能断。WiFi 的话如果路由器设置了 AP 隔离设备之间也通信不了。程序烧录失败的话最常见的原因是串口被占用了。比如你开着串口监视器同时又想上传代码就会冲突。关掉监视器再上传一般就能解决。还有一个坑是板子的复位电路。有些板子在上传的时候需要手动按复位键尤其是老款的 Arduino。如果你上传的时候一直提示“avrdude: stk500_recv(): programmer is not responding”试试按住复位键点上传等 IDE 显示“正在上传”的时候松开。这个时机需要练几次但掌握了之后就很顺手。5.4 常见问题速查表现象可能原因排查方法解决方案舵机抖动供电不足万用表测电压换粗线、换电池舵机发热负载过大或堵转手摸舵机温度调整站立高度、检查卡顿机器人走偏机械不对称或电量低检查舵机臂、测电压重新校准、充电通信中断距离远或有遮挡靠近试试缩短距离、换信道烧录失败串口被占用关掉监视器关监视器、按复位键步态不稳重心偏移不对观察抬腿瞬间调身体偏移参数IMU 数据跳变安装松动晃动 IMU螺丝固定、加滤波6. 扩展玩法与进阶改造6.1 加装传感器实现自主避障Quaddle 这类机器人如果只用来遥控玩两天就腻了。真正有意思的是给它加传感器让它自己感知环境。最简单的改造是加一个超声波模块比如 HC-SR04装在机器人头部。接线很简单VCC 接 5VGND 接地Trig 和 Echo 接两个数字引脚。代码里用 pulseIn 函数读回波时间换算成距离。当距离小于 20 厘米的时候让机器人后退或者转弯。超声波模块的坑在于它的波束角比较宽大概 15 度所以它测到的距离是前方一个锥形区域里最近物体的距离。如果你在机器人旁边放一堵墙它可能会误判前方有障碍。解决办法是装两个超声波模块一个朝前偏左一个朝前偏右取最小值作为前方障碍距离。或者用红外测距模块波束窄但受环境光影响大。我自己的选择是超声波加红外一起用取长补短。6.2 视觉模块与目标跟踪再进阶一点可以加一个摄像头模块比如 OpenMV 或者 ESP32-CAM。OpenMV 的好处是它自带图像处理库能直接输出色块坐标或者人脸检测结果你只需要通过串口把坐标发给主控就行。ESP32-CAM 便宜但图像处理得自己写算力也有限。我试过用 OpenMV 做颜色跟踪让机器人跟着一个红色小球走。效果还不错但延迟大概有 100 毫秒走快了会跟不上。视觉模块的安装位置很关键。装在头部的话机器人低头的时候摄像头也跟着低头视野会变。装在身体上方的话视野稳定但容易被腿挡住。我的做法是装在一个小云台上用两个微型舵机控制俯仰和偏航这样既能跟踪目标又能保持视野稳定。云台的控制逻辑和腿的控制逻辑类似也是逆运动学只不过维度更低。6.3 多机器人协同与群体行为如果你有两台以上的 Quaddle可以试试让它们协同工作。最简单的协同是编队行走一台跟着另一台走。实现方式可以是一台机器人广播自己的位置另一台根据相对位置调整自己的步态。通信可以用 ESP-NOW这是 ESP32 自带的一种低延迟无线通信协议不需要路由器点对点直接通信延迟能压到几毫秒。群体行为更有意思比如让三台机器人围成一个圈同时向中心移动。这个需要每台机器人知道自己的编号和相对位置然后根据一个统一的时钟信号同步步态。时钟同步可以用广播的方式一台主机每隔一段时间发一个同步包从机收到之后调整自己的步态相位。这个玩法对代码能力要求比较高但做出来之后视觉效果很震撼。7. 个人实操体会与建议我折腾四足机器人这几年最大的体会是硬件是骨架软件是灵魂但真正决定你能不能玩下去的是耐心。四足机器人的调试曲线很陡你可能花一整天调一个步态参数最后发现只好了那么一点点。但当你看到它稳稳地走完一圈那种成就感是别的项目给不了的。如果你刚入手 Quaddle我的建议是先把默认例程跑通别急着改代码。跑通之后把每个例程的代码都读一遍搞清楚每一行在干什么。然后从最简单的改起比如改一下步态周期看看机器人走路速度变了没有。再改一下抬腿高度看看通过性变了没有。这种小步快跑的方式比一上来就重写整个步态算法要高效得多。还有一个建议是加社区。Petoi 的社区里有很多人分享自己的步态参数和改造方案你遇到的问题大概率别人已经遇到过了。我很多调试技巧都是从社区帖子里学来的比如用示波器看舵机信号、用慢动作视频分析步态相位。这些经验如果靠自己摸索可能要花好几倍的时间。最后说一个我踩过的坑别在电量低的时候调步态。电池电压下降的时候舵机的响应速度和扭矩都会变你调好的参数换块满电的电池就完全不一样了。我现在的习惯是每次调步态之前先充满电调完之后再充一次确保参数是在满电状态下调的。这个习惯帮我省了很多返工的时间。