1. 从零到一:为什么选择3D打印来制作你的第一个机器人?
如果你对机器人、电子制作或者创客项目感兴趣,但又觉得入门门槛太高——需要复杂的机械加工、昂贵的金属零件、深奥的控制理论——那么,3D打印结合开源硬件的方案,可能是为你量身定做的“破局点”。我最初接触机器人制作时,也走过不少弯路,买过一堆用不上的零件,对着复杂的图纸无从下手。直到我开始尝试将3D打印作为主要的结构实现手段,整个制作过程才变得清晰、可控且充满乐趣。
这个“创意分享”的核心,就是利用3D打印的灵活性,来快速、低成本地实现一个“功能性”机器人。这里的“功能性”是关键,它区别于那些纯观赏性的模型,意味着这个机器人能完成某个具体的、可交互的任务,比如巡线、避障、抓取小物件,或者仅仅是一个能灵活走动的六足平台。3D打印让你可以自由设计并迭代机器人的骨骼(结构件),而像Arduino这样的开源微控制器,则赋予了它“大脑”和“神经”。伺服电机(舵机)作为“关节”和“肌肉”,负责执行动作。这三者结合,形成了一个完美的创意实现闭环:想法 → 3D建模 → 打印测试 → 电子控制 → 功能实现。
为什么说它“简单易制作”?首先,设计门槛被大幅降低。你不需要成为机械工程师才能画出零件图。使用像SketchUp、Fusion 360(个人版免费)或Tinkercad(在线,极其简单)这样的软件,你可以从零开始搭建,或者更常见地,在Thingiverse、Cults3D等开源模型社区找到海量的现成机器人设计文件进行学习和修改。这相当于站在了全球创客的肩膀上。其次,试错成本极低。一个零件设计不合理?在电脑上修改几分钟,重新打印一个就是了,材料成本可能只有几块钱。这种快速迭代的能力,在传统加工方式中是不可想象的。最后,集成变得标准化。Arduino生态有着极其丰富的教程、库函数和扩展板(Shield),驱动一个舵机、读取一个传感器,往往只需要几行代码。你不需要从晶体管放大电路开始焊起,焦点可以更多地放在逻辑和功能实现上。
所以,无论你是充满好奇心的学生,是希望带孩子一起动手的家长,还是想将创意实体化的设计师,这个项目都能为你提供一个绝佳的起点。它剥离了传统机器人制作中繁琐、专业的壁垒,让你能更专注于“让一个东西动起来并完成特定任务”这个核心的创造乐趣上。
2. 核心部件选型与设计哲学:不只是把零件拼起来
开始动手前,我们需要明确要做什么,以及用什么来做。一个典型的3D打印机器人,其核心模块可以分解为结构系统、驱动系统、控制系统和感知系统(可选)。我们的目标是搭建一个基础平台,因此先从必需的前三者开始。
2.1 结构系统:3D打印件的设计考量
结构是机器人的骨架,所有其他部件都安装在它上面。使用3D打印制作结构件,你必须考虑打印工艺本身的特性。
材料选择:对于入门级机器人,PLA材料是首选。它打印温度低、不易翘边、无异味、强度足够,且价格便宜。虽然它比较脆,不耐高温和冲击,但对于桌面级、低速运动的机器人原型来说完全够用。如果追求更好的韧性和抗疲劳性(比如用于关节频繁活动的部位),可以考虑PETG,它在保持了较好打印性的同时,强度和韧性优于PLA。
设计原则:
- 避免悬垂:FDM 3D打印是逐层堆积的,对于超过45度的悬空部分,打印质量会下降,需要添加支撑,既浪费材料又影响表面质量。设计时尽量让所有面都有一个合理的支撑角度,或者将模型巧妙地分割打印后再组装。
- 预留公差与装配间隙:这是新手最容易踩的坑。打印出来的零件会有尺寸误差(通常是正误差,即比设计尺寸略大)。对于需要紧密配合的轴孔,我通常会在设计软件中预留0.2mm-0.4mm的径向间隙。对于需要滑动的配合,间隙要放到0.5mm甚至更大。一个简单的验证方法是,先打印一个小样(比如一个带孔的方块和一个对应的轴)来测试你的打印机在当前材料和设置下的实际公差。
- 加强筋与壁厚:机器人结构件需要承受一定的力和振动。不能简单地用一个薄壳了事。对于受力部位,要合理设置壁厚(建议不少于2mm),并在受力方向添加加强筋。加强筋不需要很厚,但高度要足够,才能有效增加截面的惯性矩,提升抗弯能力。
- 嵌入件设计:很多地方需要连接其他标准件,比如螺丝、螺母、轴承。我强烈建议使用“热熔螺母”或“嵌入螺母”的设计。在打印件上设计一个略小于螺母外径的六角形或圆形孔,打印完成后,用电烙铁加热螺母并将其压入塑料中,塑料冷却后会紧紧包裹住螺母,形成极其牢固的金属螺纹孔,远比直接拧在塑料螺纹里可靠得多。
2.2 驱动系统:舵机的选择与控制逻辑
舵机是让机器人动起来的关键。对于多足、机械臂等需要精确角度控制的机器人,舵机几乎是唯一选择。
舵机类型:
- 模拟舵机:最常见,价格便宜。它通过PWM(脉冲宽度调制)信号控制,信号线持续发送50Hz的脉冲,脉冲宽度对应目标角度。缺点是存在死区、不同舵机中性点可能不一致、精度一般。
- 数字舵机:内部有微处理器,接收同样的PWM信号,但处理方式不同,响应更快、扭矩更大、精度更高、死区小,但价格更贵,功耗也稍高。
- 总线舵机:如DYNAMIXEL、STS3215等。它们通过TTL或RS485总线(如串口)通信,可以用一根数据线串联控制几十个舵机,并能反馈角度、温度、负载等信息,是高级机器人的选择,但成本和复杂度也高。
对于入门项目,推荐使用常见的MG90S、SG90这类金属齿轮的模拟舵机,性价比高,扭矩足够驱动小型塑料结构。购买时要注意“公斤·厘米”这个扭矩单位,例如1.5kg·cm表示在1cm力臂处能产生1.5kg的力。估算你的机器人关节所需扭矩时,要考虑负载重量和力臂长度。
供电是另一个关键:舵机在堵转或启动瞬间电流很大(可达1-2A)。绝对不要直接用Arduino板子的5V引脚给多个舵机供电!Arduino的稳压芯片根本无法提供这么大的电流,会导致板子重启或损坏。正确的做法是使用一个独立的5V稳压电源模块(如LM2596降压模块),接上动力电池(如2S/3S锂电池或大容量18650电池盒),用这个电源单独给所有舵机供电。舵机的电源正负极接在这个独立电源上,而信号线则接在Arduino的数字引脚上。同时,需要将Arduino的GND和这个独立电源的GND连接在一起,确保它们“共地”,信号才能正常传输。
2.3 控制系统:Arduino的大脑与扩展
Arduino Uno是绝佳的起点。它拥有14个数字I/O口(其中6个可做PWM输出,非常适合控制舵机),6个模拟输入口,以及简单的USB编程接口。
为什么是Arduino?因为它生态成熟。你需要让一组舵机按顺序运动,做出一个步态或动作。自己写时序控制代码会很繁琐。但利用Arduino的社区库,比如强大的<Servo.h>库,你可以轻松创建多个舵机对象,并用write()函数控制角度。对于更复杂的多舵机协同动作,可以使用<ServoEasing>库,它能让舵机以指定的速度和缓动曲线(如匀速、先加速后减速)运动,让机器人的动作看起来非常平滑、拟人化。
引脚规划:在画结构图之前,最好先规划一下电子部分。列出所有需要连接的舵机、传感器,并为它们在Arduino上分配好引脚。例如,一个六足机器人可能需要18个舵机(每条腿3个),这显然超过了Uno的直接驱动能力。此时你有两个选择:一是使用舵机控制板,如PCA9685,它通过I2C总线与Arduino通信,一块板子就能控制16路舵机,且自带晶振,控制精度比Arduino的软件模拟更高;二是升级到引脚更多的控制器,如Arduino Mega 2560。
我的经验是,对于超过6个舵机的项目,强烈建议使用PCA9685这类专用舵机驱动板。它不仅能解放Arduino的引脚和计算资源,还能提供更稳定、统一的PWM信号,避免因Arduino处理其他任务而导致舵机抖动。接线也变得更整洁:所有舵机的信号线集中插在驱动板上,电源统一从外部接入,Arduino只用两根I2C线(SDA, SCL)就能指挥所有舵机。
3. 从建模到实物的完整工作流:以一个简易六足机器人为例
让我们以一个具体的例子——制作一个能爬行的简易六足机器人——来串联整个流程。这个例子涵盖了从设计、打印到组装、编程的核心环节。
3.1 三维建模与文件准备:在SketchUp中从零搭建
虽然你可以下载现成模型,但理解设计过程至关重要。我们以SketchUp为例,因为它上手直观。
- 确定核心尺寸与布局:首先,决定机器人的大体尺寸。例如,身体部分设计为一个120mm x 80mm x 20mm的长方体。六条腿均匀分布在身体两侧。
- 设计单条腿:一条腿通常由2-3个舵机驱动,实现2-3个自由度。我们设计一个简单的两自由度腿:第一个舵机(髋关节)负责腿的前后摆动,安装在身体侧面;第二个舵机(膝关节)负责小腿的抬起和放下,通过一个连接件(舵盘)与大腿相连。
- 在SketchUp中,使用矩形和推拉工具创建大腿和小腿的连杆。连杆要做成中空的“U”型或“口”型以减重,但壁厚要保证(至少2mm)。
- 关键是要准确绘制舵机的安装位。测量你手头舵机的尺寸(通常是标准尺寸),创建一个刚好能卡入舵机的方槽,并在底部和侧面预留螺丝孔位。对于舵机的输出轴,要画一个能紧密套入舵盘(舵机自带)的十字或花键孔。
- 设计身体与总装:将六条腿的“髋关节”安装座,以正确的间距,用组件的方式装配到身体长方体上。在身体内部,要预留空间和卡槽用于放置Arduino、舵机驱动板、电池和开关。
- 导出为STL:检查所有零件没有破面、重复线后,将每一个需要单独打印的零件(如身体、左大腿、右大腿、小腿等)分别导出为STL文件。切记,在导出前,将每个零件以世界坐标系原点为中心放置,这能为后续切片软件省去调整位置的麻烦。
注意:SketchUp在导出精细的STL时有时会出问题。一个实用的技巧是,安装“Solid Inspector²”插件来检查和修复模型,确保它是“水密”的(没有缝隙),这对于3D打印至关重要。
3.2. 3D打印实战:切片参数与后处理
将STL文件导入切片软件(如Cura、PrusaSlicer)。打印质量直接决定机器人的强度和顺滑度。
关键切片参数设置:
- 层高:0.2mm是精度和速度的良好平衡。追求更光滑的表面可用0.15mm,但打印时间会大幅增加。
- 填充密度:对于受力结构件,建议20%-30%的网格填充。填充不是越高越好,超过30%后强度提升不明显,却会大量增加时间和耗材。
- 壁厚:至少设置2层壁厚,通常对应0.8mm-1.0mm。这是外壳的主要强度来源。
- 打印速度:外壁打印速度建议设在40-60mm/s,内壁和填充可以快一些(60-80mm/s)。速度太快容易导致层间粘合不牢,零件脆。
- 支撑:对于腿部与身体连接处可能存在的悬空部分,需要生成支撑。选择“可接触支撑”或“树状支撑”,后者更省材料且易拆除。
打印完成后的后处理:
- 去除支撑:使用水口钳或刻刀小心地去除支撑材料。对于内部难以触及的支撑,可能需要用到镊子。
- 打磨与修整:用砂纸(从粗到细)打磨掉毛刺和支撑残留的痕迹。特别是轴孔和配合面,适当的打磨能让装配更顺滑。
- 试装配:在安装电子件之前,先用手动的方式将所有结构件(用临时轴或螺丝)组装起来,检查各个关节转动是否顺畅,有无干涉。这是发现设计缺陷的最后机会。
3.3. 电子系统集成与布线艺术
整洁可靠的布线是机器人稳定运行的基础,混乱的线缆极易被关节夹住或扯断。
- 焊接与延长:舵机线通常很短。你需要购买杜邦线(公对母)来延长。建议使用硅胶线,它更柔软、耐弯折。对于电源线(VCC和GND),因为电流较大,最好使用较粗的线(如AWG22)或直接焊接。使用热缩管来保护焊点。
- 分层布置:
- 底层:放置最重的部件——电池。通常放在机器人重心附近的下方,有助于稳定。
- 中间层:放置舵机驱动板(PCA9685)和电压转换模块。
- 上层:放置Arduino主控板。这样分层便于接线和散热。
- 线缆管理:
- 使用扎带或尼龙搭扣将线缆捆扎成束,沿着身体结构固定。
- 对于需要随关节运动的线(如腿部的舵机线),要留出足够的余量,并形成自然的弧度,避免在极限位置被拉直或紧绷。可以用一小段螺旋缠绕管包裹运动部分的线束,既能保护又能保持整洁。
- 所有线束的走向应尽量横平竖直,避免斜拉,这样看起来专业,也减少意外钩挂的风险。
- 最终连接:
- 将外部5V电源的正负极接到PCA9685驱动板的VCC和GND端子排上。
- 将所有舵机的信号线(通常是黄线或白线)按规划好的顺序,插入PCA9685的PWM输出口(0-15)。
- 用4根杜邦线(VCC, GND, SDA, SCL)连接PCA9685和Arduino。注意,PCA9685的逻辑电平VCC可以接Arduino的5V,为其内部逻辑供电。
- 最后,将主电源(电池)通过开关,连接到给舵机供电的5V稳压模块的输入端。
4. 赋予生命:Arduino编程与基础步态实现
硬件组装完毕,接下来是编程,让机器人“活”起来。我们将编写一个让六足机器人实现交替三角步态爬行的程序。
4.1 开发环境搭建与库安装
首先确保安装了Arduino IDE。然后需要安装舵机驱动板的库。对于PCA9685,最常用的是Adafruit PWM Servo Driver Library。
- 在Arduino IDE中,点击「工具」->「管理库…」。
- 在搜索框中输入“Adafruit PWM Servo Driver”,找到并安装它。
- 这个库依赖于Adafruit BusIO库,如果提示,一并安装。
4.2 步态原理分析与舵机角度映射
六足机器人的交替三角步态是其稳定、高效的行走方式。它将六条腿分为两组(组1: 右前、左中、右后;组2: 左前、右中、左后)。行走时,一组腿(支撑相)保持不动支撑身体,另一组腿(摆动相)抬起、向前摆动、放下。然后两组角色互换,如此循环。
我们需要为机器人的每条腿定义两个舵机:舵机A(髋关节,控制前后摆动)和舵机B(膝关节,控制抬起放下)。并为其设定几个关键位置角度:
- 中立位置:机器人站立时,所有腿垂直向下的角度。这需要你根据实际组装情况,通过代码微调确定。
- 摆动相:
- 抬起:膝关节舵机B转动,使小腿抬起一定角度(如30度)。
- 前摆:髋关节舵机A转动,使整条腿向前摆动一定角度(如20度)。
- 放下与后摆:膝关节回到中立,同时髋关节向后摆动(如-20度),使腿在支撑身体的同时向后蹬,推动身体前进。
- 支撑相:腿保持在中立位置附近,随着身体前进,髋关节缓慢地微调角度以保持支撑。
4.3 代码实现与逐行解析
下面是一个简化的代码框架,演示如何利用Adafruit_PWMServoDriver库和ServoEasing库来实现基础运动。
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> #include <ServoEasing.h> // 用于平滑运动 // 初始化PCA9685对象,默认I2C地址是0x40 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // 定义每条腿的舵机索引。假设PCA9685的0-11号端口分别对应12个舵机。 // 腿序:0:右前, 1:右中, 2:右后, 3:左前, 4:左中, 5:左后 // 每个腿有两个舵机:索引0为髋关节(A),索引1为膝关节(B) int legServoIndex[6][2] = { {0, 1}, // 右前腿 {髋, 膝} {2, 3}, // 右中腿 {4, 5}, // 右后腿 {6, 7}, // 左前腿 {8, 9}, // 左中腿 {10, 11} // 左后腿 }; // 定义舵机角度范围(根据你的舵机型号和安装方式调整) #define SERVO_MIN_PULSE 150 // 对应0度 #define SERVO_MAX_PULSE 600 // 对应180度 // 定义步态关键角度 int hipNeutral = 90; int hipForward = 70; // 向前摆角度 int hipBackward = 110; // 向后摆角度 int kneeNeutral = 90; int kneeLift = 60; // 抬起角度 void setup() { Serial.begin(9600); pwm.begin(); pwm.setPWMFreq(60); // 模拟舵机通常使用50-60Hz的PWM频率 // 初始化所有舵机到中立位置 for (int leg = 0; leg < 6; leg++) { setServoAngle(leg, 0, hipNeutral); // 设置髋关节 setServoAngle(leg, 1, kneeNeutral); // 设置膝关节 } delay(2000); // 等待舵机就位 } void loop() { walkForward(5); // 走5步 delay(1000); // 可以添加 turnLeft(), turnRight(), walkBackward() 等函数 } // 设置指定腿的指定舵机到特定角度 void setServoAngle(int leg, int joint, int angle) { // joint: 0=髋关节, 1=膝关节 int servoNum = legServoIndex[leg][joint]; // 将角度(0-180)映射到PWM脉宽(150-600) int pulse = map(angle, 0, 180, SERVO_MIN_PULSE, SERVO_MAX_PULSE); pwm.setPWM(servoNum, 0, pulse); } // 一个简单的向前走步函数(简化版,非完整三角步态) void walkForward(int steps) { for (int s = 0; s < steps; s++) { // 步骤1:抬起右前、左中、右后腿(摆动相组1) setServoAngle(0, 1, kneeLift); // 右前膝抬起 setServoAngle(4, 1, kneeLift); // 左中膝抬起 setServoAngle(2, 1, kneeLift); // 右后膝抬起 delay(300); // 步骤2:摆动相组1的腿向前摆 setServoAngle(0, 0, hipForward); setServoAngle(4, 0, hipForward); setServoAngle(2, 0, hipForward); delay(300); // 步骤3:摆动相组1的腿放下并后蹬 setServoAngle(0, 1, kneeNeutral); // 放下 setServoAngle(4, 1, kneeNeutral); setServoAngle(2, 1, kneeNeutral); setServoAngle(0, 0, hipBackward); // 同时后蹬 setServoAngle(4, 0, hipBackward); setServoAngle(2, 0, hipBackward); delay(300); // 步骤4:所有腿回到中立(为下一步准备) setServoAngle(0, 0, hipNeutral); setServoAngle(4, 0, hipNeutral); setServoAngle(2, 0, hipNeutral); delay(200); // 然后重复以上步骤,但换成另一组腿(左前、右中、左后)作为摆动相 // ... 此处省略另一组腿的代码,逻辑相同 delay(500); } }代码要点解析:
map()函数是关键,它将我们直观的0-180度角度,映射到舵机控制器能理解的脉冲宽度值。SERVO_MIN_PULSE和SERVO_MAX_PULSE需要根据你的舵机实际性能微调。- 这个
walkForward函数是一个极度简化的顺序运动,并非流畅的三角步态。真正的三角步态需要让支撑相的腿在摆动相腿运动时,也同步进行缓慢的向后运动,以提供推进力。这需要更精细的时序控制和插值算法。你可以使用ServoEasing库的setEasingType()和startEaseTo()函数来实现多舵机非阻塞的平滑协同运动,这是下一步优化的方向。 - 调试技巧:在编写复杂步态前,先写一个测试函数,让每个舵机单独从0度运动到180度再回来,确保每个舵机接线正确、运动范围符合预期,并且没有机械干涉。用
Serial.println()输出关键变量值,是调试的不二法门。
5. 功能进阶与项目优化:让你的机器人更“聪明”
一个能走路的机器人已经很有趣了,但加上感知和交互,才能称之为“功能性”的升华。这里介绍几个易于实现的进阶方向。
5.1 感知环境:添加超声波与红外传感器
让机器人具备基础的避障或巡线能力,能极大提升项目的可玩性。
避障:使用HC-SR04超声波模块。它有四个引脚:VCC, GND, Trig(触发), Echo(回响)。将Trig和Echo连接到Arduino的数字引脚。编程逻辑是:给Trig一个10微秒的高电平脉冲,然后监听Echo引脚高电平的持续时间,这个时间与距离成正比。当检测到前方距离小于设定阈值(如20厘米)时,触发转向或后退行为。
- 注意事项:超声波模块对角度敏感,且可能被柔软织物吸收。安装时最好让其探测方向略微朝下,以避免检测到天花板。同时,在代码中增加多次测量取平均值的逻辑,以过滤偶然误差。
巡线:使用TCRT5000红外反射传感器模块。它由一个红外发射管和一个接收管组成。当下方是白色表面时,红外光反射强,接收管导通,输出低电平;当是黑线时,反射弱,输出高电平。通常在机器人底盘前部安装3-5个这样的模块,排成一排。
- 编程逻辑:读取这排传感器的值,形成一个二进制数组。例如
[0,0,1,0,0]表示黑线在正中间,机器人直行;[1,0,0,0,0]表示黑线在最左边,机器人需要左转。使用PID(比例-积分-微分)算法来处理这些输入,可以产生非常平滑的转向控制,让机器人稳稳地沿着黑线行走。
- 编程逻辑:读取这排传感器的值,形成一个二进制数组。例如
5.2 无线控制与交互:蓝牙与PS2手柄
摆脱线缆的束缚,用手机或手柄控制机器人,体验立刻升级。
- 蓝牙控制:HC-05或HC-06蓝牙模块是最常用的选择。它与Arduino通过串口(RX/TX)连接。你需要在手机上下载一个串口蓝牙助手APP(如“蓝牙串口”),就可以发送字符(如‘F’代表前进,‘B’代表后退)来控制机器人。Arduino代码中,在
setup()里初始化串口Serial.begin(9600),在loop()里用Serial.available()和Serial.read()来读取手机发送的指令,并执行对应的动作函数。 - PS2手柄控制:对于需要多通道、模拟量控制(如同时控制移动和机械臂)的场景,PS2手柄是性价比极高的选择。你需要一个PS2接收器模块,通过SPI接口与Arduino连接。网上有成熟的PS2X库,可以轻松读取手柄的所有按键和摇杆状态。通过映射摇杆的模拟值到舵机的运动速度或角度,你可以实现非常精准和直觉化的操控。
5.3 结构优化与常见问题排查
项目进行中,你肯定会遇到各种小问题。这里分享一些典型的排查经验和优化思路。
问题一:舵机抖动或发热严重
- 原因:电源功率不足是最常见原因。使用万用表测量舵机工作时的电源电压,在动作瞬间如果电压被拉低很多(如从5V掉到4V以下),说明电源带不动。也可能是PWM信号不稳定,或者机械负载过重导致堵转。
- 解决:确保使用独立、功率足够的5V电源(建议至少5V/3A)。检查所有机械关节是否转动顺畅,有无卡死。尝试在代码中为舵机动作增加微小延迟(
delay(10)),避免所有舵机同时启动造成瞬时电流过大。
问题二:3D打印件在螺丝孔处开裂
- 原因:打印件本身有内应力,或者螺丝拧得太紧,导致局部应力集中。
- 解决:打印时开启“钻孔孔径水平扩展”功能(在Cura中叫“孔洞水平扩展”),将孔略微扩大,方便螺丝轻松穿过。安装时,螺丝不要拧到死,感觉有阻力后再拧半圈即可。对于关键受力部位,使用前面提到的“热熔螺母”或“嵌入螺母”来提供金属螺纹,或者使用通孔+螺母+垫片的组合。
问题三:机器人行走不稳,容易侧翻
- 原因:重心太高,或者步态时序不合理,导致支撑相重心投影超出支撑多边形(即腿构成的支撑面)。
- 解决:
- 降低重心:将电池等重物尽可能放低。
- 优化步态:确保在任意时刻,处于支撑相的腿(至少三条)能形成一个稳定的三角形。摆动相腿的抬起和放下要快,而支撑相腿的支撑和蹬地过程要慢且平稳。可以调整代码中的延迟参数,让机器人的运动节奏更接近真实昆虫。
- 增加足底接触面积:在脚部粘贴一小块海绵或橡胶,增加摩擦力,防止打滑。
从一张草图、一个想法,到亲手制作出一个能响应你指令的机械生命体,这个过程带来的成就感是无与伦比的。3D打印机器人项目的魅力在于,它完美结合了数字设计与物理实现,将创意快速、低成本地转化为看得见、摸得着的成果。我自己的第一个六足机器人,在成功迈出第一步时,那种兴奋感至今难忘。不要害怕第一次的设计很简陋,或者代码有很多delay(),重要的是动手去做,在每一次打印、每一次焊接、每一次调试中积累经验。这个项目没有唯一的正确答案,你的每一个改进——无论是更流畅的步态、更坚固的结构,还是一个有趣的传感器应用——都是独一无二的创造。