单电机双足机器人:凸轮连杆与差速转向的极致机械设计
1. 项目概述一个电机如何让机器人“走”起来最近在DF创客社区看到第65期周刊里有个项目标题叫“第一个单电机的可操纵双足机器人”当时就眼前一亮。一个电机双足还能操纵方向这听起来几乎违背了我们对双足机器人的基本认知。通常一个能稳定行走、甚至转向的双足机器人至少需要三到四个舵机或电机来分别控制髋关节和膝关节的摆动。这个项目却声称只用了一个普通的直流电机就实现了这背后的机械设计和控制逻辑绝对值得深挖。这个项目的核心价值在于它用极致的简单和低成本挑战了双足机器人领域的入门门槛。对于很多机器人爱好者、学生创客或者教育工作者来说复杂的多关节控制、昂贵的伺服系统以及令人头疼的步态算法往往是拦路虎。而这个“单电机方案”就像是一个精巧的机械谜题它剥离了复杂的电子控制将问题回归到最本质的机械结构创新上。它要解决的就是如何让一个连续旋转的动力源转化出两条腿交替抬腿、迈步、并实现转向的间歇性运动。这不仅仅是做一个玩具更是一次对基础机械原理如凸轮、连杆、差速机构的创造性应用教学。我自己也尝试过搭建各种双足机器人从用Arduino控制多个舵机模仿人类步态到用更复杂的STM32主控配合IMU传感器做平衡。过程很有趣但成本和复杂度确实不低。所以当我看到这个“单电机”方案时第一反应是怀疑紧接着就是强烈的好奇它到底是怎么工作的稳定性如何能不能真的走直线甚至转弯这期内容我就结合自己的理解和一些拓展思考来彻底拆解这个充满巧思的项目无论你是想复现一个有趣的桌面伙伴还是想从中汲取机械设计的灵感相信都能有所收获。2. 核心机械结构设计与原理拆解2.1 动力传递与步态生成的核心凸轮-连杆机构整个机器人的灵魂在于如何将一个电机的连续旋转分解并传递成两条腿的交替抬腿和踏步动作。这里最可能采用的核心机构是凸轮与连杆的组合。为什么是凸轮因为我们需要的是周期性的、特定轨迹的运动。电机的输出轴是匀速圆周运动而腿部的运动要求是一条腿抬起摆动相时另一条腿支撑支撑相并向后蹬地然后交替。这种非匀速的、有停顿的间歇运动非常适合用凸轮轮廓来控制。一个简单的偏心轮一种特殊的凸轮就可以将旋转运动转化为连杆的往复直线运动。具体是如何工作的我们可以设想这样一个结构电机的输出轴上安装了一个双面凸轮或一套共轴但相位差180度的凸轮组。每一个凸轮通过一个从动件可能是一个轴承或滑块连接到一个摇杆或连杆上而这条连杆最终连接到机器人的一条“大腿”上。当凸轮旋转时其特定的轮廓会推动从动件进而带动连杆做上下或前后的往复运动。由于两个凸轮相位相差180度当凸轮A推动左腿连杆到达最高点抬腿时凸轮B带动右腿连杆正好处于最低点并略微向后支撑蹬地。半圈之后情况完全相反。如此循环就形成了最基础的两足交替步态。注意这里的“腿”可能不是我们想象中有关节的腿而更可能是两根直接由连杆驱动的“脚杆”。抬腿动作实际上是脚底离开地面向前摆动支撑动作是脚底接触地面并相对机身向后运动从而产生向前的推力。这是很多简易步行机构采用的“桨式”步态。2.2 实现可操纵性的关键差速转向机制如果只能直走那这个机器人还谈不上“可操纵”。标题中“可操纵”三个字暗示了它具备转向能力。在只有一个动力源的情况下如何实现转向答案很可能借鉴了坦克或履带车辆的差速转向原理但在这里是用纯机械方式实现的。差速转向的机械实现猜想机器人的两条“腿”可能被设计成具有微小的不同。例如在驱动两条腿的传动路径上引入一个可调节的“阻力”或“速度调节”机构。当我们想让它右转时可以通过一个简单的舵机注意这是用于转向控制的不算在行走动力电机内或者手动拨杆轻微“制动”或“减慢”左腿的摆动幅度或速度。由于左腿的有效步幅变小或蹬地力减弱而右腿保持正常机器人就会以左腿为轴心向右侧发生偏转。另一种更巧妙的纯机械方式是在传动系统中加入一个差速器类似于汽车后桥的差速器但由一个额外的、小型的转向舵机来控制差速器的锁止或差速比。行走主电机提供前进动力差速器将动力分配给两腿。转向舵机通过调节差速器状态使两腿获得不同速度从而实现转向。这样行走和转向的控制就在机械结构上分离开了但动力源仍然主要是一个行走电机。2.3 整体结构布局与材料选择这样一个机器人其结构必然是高度集成的。主体框架很可能由激光切割的亚克力板或3D打印的PLA件构成这些材料易于加工、轻便且成本低。所有传动轴、凸轮、连杆需要精确对齐轴承和轴套必不可少用以减少摩擦确保运动流畅。电控部分则极度精简一个提供动力的直流电机可能带减速箱以增加扭矩一个用于转向控制的小型舵机一块电池如18650锂电池以及一个最基础的控制板可能只是一个带稳压的电机驱动模块甚至直接用电位器手动控制电机转速和转向舵机角度。如果追求极简转向控制甚至可以用纯机械拉线的方式用手柄远程操纵。这种设计思路清晰地划分了层次机械负责“复杂”的步态生成和动力传递电子负责“简单”的启停和方向调节。这与现代机器人中“电子负责复杂计算机械执行简单动作”的思路恰恰相反却也展现了机械设计的永恒魅力。3. 核心细节解析与实操要点3.1 凸轮轮廓的设计与计算凸轮的设计是整个项目成败的关键。你不能随便拿一个圆形偏心轮就用需要计算或模拟出能让机器人平稳行走的轮廓线。1. 运动规律选择对于步行机器人这种低速、重载相对自身重量的场合从动件的运动规律不宜有刚性冲击。通常采用简谐运动规律或等加速等减速运动规律。简谐运动规律冲击小运行平稳计算也相对简单是首推方案。这意味着凸轮的轮廓线不是简单的圆弧而是一条根据余弦或正弦函数计算出来的曲线。2. 关键参数确定行程 (h):即“腿”抬起的高度。太高则重心起伏大不稳定太低则可能无法完全离地导致拖步。通常根据机器人脚掌尺寸和预期步幅来定一般在10-25毫米之间。推程运动角 (Φ) 和回程运动角 (Φ’):凸轮旋转多少角度完成“抬腿”推程和“落腿”回程。为了实现左右腿交替支撑通常推程角和回程角各占180度。但为了在支撑相有更长的稳定时间可能会采用“远休止”角即凸轮有一段轮廓是同心圆弧在此期间从动件静止腿处于完全支撑状态。基圆半径 (r0):凸轮的最小半径。它决定了凸轮的整体尺寸和结构紧凑性需要大于安装轴的半径并留出足够强度。实操心得对于初次尝试者不必从零开始计算凸轮轮廓。可以使用一些免费的工具软件如“凸轮设计工具”或甚至通用的CAD软件如Fusion 360的凸轮生成插件。你只需要输入上述关键参数和选择的运动规律软件就能生成轮廓线然后直接用于激光切割或3D打印的图纸。一个重要的检查点生成轮廓后一定要检查最大压力角。压力角是凸轮轮廓某点法线与从动件运动方向的夹角压力角过大会导致机构自锁或需要极大的驱动力。对于摆动从动件建议最大压力角不超过40度。3.2 连杆机构的尺寸与传动比优化连杆将凸轮的往复运动传递给“腿”。这里涉及几个关键尺寸连杆长度影响腿的摆动幅度和最终脚掌的运动轨迹。需要通过几何作图或软件模拟确保脚掌在支撑相能有一段接近直线的向后运动以提供向前的推力在摆动相能干净利落地抬离地面并向前摆动。传动比如果电机扭矩不足可能需要加入齿轮组进行减速增扭。减速比的选择取决于电机空载转速、机器人重量和地面摩擦系数。一个简单的测试方法是组装好机械部分后用手转动电机轴感受带动机构运动所需的扭矩然后选择扭矩余量至少2倍以上的电机和减速比。常见问题与排查问题机器人走路“一瘸一拐”步幅不均匀。排查首先检查左右两套凸轮-连杆机构是否完全对称安装相位是否严格相差180度。其次检查所有关节轴与孔、连杆连接处是否存在过大的间隙。间隙是步行机构的天敌会严重消耗运动精度。问题电机发热严重或堵转。排查立即断电用手动转动各环节检查是否有地方卡死或摩擦阻力过大。重点检查凸轮与从动件接触面是否润滑不足各转动轴是否与结构件发生干涉。确保所有运动部件在未通电时都能顺畅运动。3.3 重心配置与稳定性保障双足步行无论是人还是机器人核心挑战都是动态平衡。这个单电机机器人没有电子陀螺仪和复杂的控制算法来主动平衡因此其稳定性完全依赖于机械设计和重心配置。1. 低重心原则电池、电机等重物应尽可能安装在机身下部。这降低了整体的重心高度使得在单腿支撑相时重心投影更容易落在支撑脚构成的稳定区域内。2. 足底面积与形状机器人的“脚掌”不能是一个点或一条线需要有一定的面积。通常设计成近似长方形或椭圆形且长度方向前后方向应大于宽度方向左右方向以增强前进方向上的稳定性。有时还会在脚底粘贴橡胶片以增加摩擦。3. 步态与速度的匹配行走速度电机转速不能太快。速度过快惯性力会增大容易导致机器人向前或向后倾倒。需要通过实验找到一个稳定的转速区间。通常这种机器人的步频都比较低给人一种“慢悠悠”但很稳重的感觉。重要提示在调试初期务必在机器人上方连接一个临时的、可调节的配重块如一小块橡皮泥。通过前后左右移动配重块的位置你可以直观地观察到重心变化对行走稳定性的巨大影响这是调整结构设计最有效的方法之一。4. 实操过程与核心环节实现4.1 材料准备与零件加工清单要复现这样一个机器人你需要准备以下核心材料和零件类别物品规格/备注结构件亚克力板/椴木板/3D打印耗材厚度3-5mm用于激光切割或打印机身框架、凸轮、连杆。动力系统直流减速电机建议工作电压3-6V转速100-200RPM扭矩足够如1kg.cm以上。转向系统微型舵机9g或类似小型舵机用于控制差速或转向机构。传动件轴承内径3mm或5mm用于转动轴支撑减少摩擦。金属轴直径与轴承内径匹配长度根据设计定。联轴器连接电机轴与凸轮轴可选。螺丝螺母套装M2或M3规格用于紧固。电控电机驱动模块如L298N、TB6612用于控制直流电机正反转和调速。舵机控制板/单片机最简单可用一个 Arduino Nano接收指令并控制电机驱动和舵机。电池7.4V 2S锂电池或18650电池盒为整个系统供电。开关、导线若干。辅助工具螺丝刀、钳子、烙铁、万用表组装和调试必备。润滑油硅脂或轻质机油用于凸轮接触面和轴承。4.2 机械部分组装步骤详解第一步框架组装。按照设计图纸将切割或打印好的侧板、底板、隔板等用螺丝和立柱组装起来形成机器人的主体骨架。确保框架方正没有扭曲。第二步安装动力总成。将直流减速电机牢固地安装在框架的指定位置。然后安装电机输出轴上的主动齿轮或联轴器。第三步安装凸轮-连杆系统。这是最精细的一步。将两个凸轮相位差180度固定在同一根主传动轴上。将传动轴通过轴承安装在框架上确保它能自由转动。将电机动力通过齿轮或皮带传递到这根传动轴上。为每个凸轮安装从动件如滚子轴承并将其与对应的连杆连接。将连杆的另一端与机器人的“大腿”或“脚杆”连接。手动旋转传动轴仔细观察左右两套机构的运动是否对称、流畅脚掌的运动轨迹是否符合预期先抬离地面向前摆动然后落地向后蹬地。第四步集成转向机构。根据你选择的转向方案如差速器或单侧制动安装转向舵机及其联动装置。例如如果是制动式转向需要在一条腿的传动路径上安装一个由舵机控制的摩擦片。确保舵机在中间位置时不影响正常行走在左右极限位置时能对单侧产生明显的减速效果。第五步总装与配重。安装好电池盒和电路板可先临时固定。接通电源让机器人空载低速运行观察整体运动。此时机器人可能站不稳。在机身上方临时添加配重块前后左右移动直到找到机器人行走最平稳的重心位置。记录下这个位置作为永久安装电池和电路板的依据。4.3 电路连接与控制程序逻辑电路部分非常简单核心是让 Arduino 读取控制信号比如来自蓝牙模块、红外遥控器或者简单的两个按键然后相应地控制电机驱动板和转向舵机。电路连接示意图文字描述Arduino的5V和GND连接至电机驱动模块的逻辑电源端和舵机。电池正负极连接至电机驱动模块的电机电源输入端。电机两根线连接至电机驱动模块的输出端。Arduino的两个PWM引脚分别连接电机驱动模块的输入控制端IN1, IN2用于控制电机转速和方向。舵机信号线连接至Arduino的另一个PWM引脚。控制信号源如蓝牙模块的TX/RX连接至Arduino的串口引脚。控制程序逻辑Arduino伪代码思路// 定义引脚 int motorSpeedPin 5; // PWM控制速度 int motorDirPin1 4; int motorDirPin2 3; int steeringServoPin 9; #include Servo.h Servo steeringServo; int currentSpeed 150; // 默认速度 (0-255) int currentAngle 90; // 舵机中位角 void setup() { pinMode(motorDirPin1, OUTPUT); pinMode(motorDirPin2, OUTPUT); steeringServo.attach(steeringServoPin); steeringServo.write(currentAngle); // 初始化串口通信如果使用蓝牙 Serial.begin(9600); } void loop() { // 1. 检查是否有控制指令从串口或按键 if (Serial.available()) { char command Serial.read(); // 2. 解析指令 switch(command) { case F: // 前进 digitalWrite(motorDirPin1, HIGH); digitalWrite(motorDirPin2, LOW); analogWrite(motorSpeedPin, currentSpeed); break; case B: // 后退 digitalWrite(motorDirPin1, LOW); digitalWrite(motorDirPin2, HIGH); analogWrite(motorSpeedPin, currentSpeed); break; case S: // 停止 analogWrite(motorSpeedPin, 0); break; case L: // 左转 currentAngle constrain(currentAngle 10, 70, 110); // 限制角度范围 steeringServo.write(currentAngle); break; case R: // 右转 currentAngle constrain(currentAngle - 10, 70, 110); steeringServo.write(currentAngle); break; // 可以增加 I 加速 D 减速等命令 } } // 保持当前状态 }这个程序框架实现了最基本的无线遥控前进、后退、停止和左右转向。你可以通过手机APP发送字符指令来控制它。5. 调试优化与性能提升进阶5.1 行走稳定性精细调试组装完成后机器人可能走得不直、摇晃或者容易摔倒。需要进行精细调试“八字脚”或“内八字”调整观察机器人脚掌落地时的姿态。如果它向外撇八字脚可能导致横向不稳定向内撇则可能绊倒自己。可以通过微调连杆与脚掌的连接角度或者轻微弯曲“小腿”部分来纠正。目标是让脚掌在支撑相尽可能平贴地面且运动方向与机身中轴线平行。步幅同步性校准让机器人在地上走直线测量其走一段距离后向左或向右的偏移量。如果总是向一侧偏说明左右腿的步幅不等长。调整方法是微调其中一侧凸轮在传动轴上的相位角。松开凸轮的固定螺丝将其沿旋转方向稍微提前或推迟一个极小角度如2-5度再紧固测试。这是一个需要耐心的迭代过程。地面适应性调整在不同地面光滑桌面、地毯、地板上测试。在地毯上可能需要更大的扭矩或更慢的速度。如果发现打滑严重可以更换脚底材料如粘上电工胶布或硅胶垫。5.2 转向灵敏度与线性度优化转向机构调试的目标是让机器人转弯平滑、可控且能保持转弯半径的相对稳定。舵机中立位校准确保当舵机角度在90度假设范围是0-180时转向机构处于“直行”状态即不对任何一侧的腿施加额外阻力或差速。这可能需要物理调整舵机摇臂的安装角度。转向死区设置在控制程序中可以为舵机角度设置一个死区Dead Zone。例如当控制角度在85-95度之间时程序都将其设置为90度。这可以避免因为遥控器微小的抖动或信号噪声导致机器人不停微调方向。转向曲线映射简单的线性控制遥控杆量直接对应舵机角度可能并不理想。你可以建立一个映射曲线让在小幅度操纵时转向更柔和大幅度操纵时转向更灵敏。这可以通过一个查找表或简单的二次函数在程序中实现。5.3 扩展功能设想与挑战这个基础平台有很大的扩展潜力增加传感器反馈加入一个超声波传感器或红外测距传感器在机器人前方就可以实现简单的避障功能。当检测到障碍物时Arduino可以控制机器人转向或后退。实现自主巡线在底盘加装2-3个红外反射式传感器配合经典的PID控制算法就能让这个单电机机器人沿着地上的黑线行走。这对于理解反馈控制是一个极好的实践项目。步态升级挑战目前的步态是固定的由凸轮形状决定。一个终极挑战是能否设计一种可变形凸轮或可变连杆机构通过另一个舵机在行走过程中动态调整凸轮有效轮廓或连杆比例从而实现不同地形下的自适应步态如上下坡、跨小沟这将是机械设计上的一个飞跃。最后一点个人体会制作这个机器人的过程最大的收获不是最终让它走起来的那一下而是在反复调试中对连杆运动死点、凸轮压力角、重心与稳定域这些书本上的概念有了血肉般的真实理解。它让我意识到在智能算法大行其道的今天精妙的机械结构本身依然散发着不可替代的智慧光芒。当你看到自己设计切割的凸轮精准地将旋转转化为协调的步履时那种成就感是纯粹的、属于制造者的快乐。如果你在复现过程中被卡住不妨回到最基础的原理用手一步步推动它的零件观察力的传递路径问题往往就迎刃而解了。