做具身智能相关项目时,很多人第一步要解决的并不是算法,而是“机械臂从哪来”。买成品机械臂省事,但价格高、结构封闭;自己从零加工金属件,又需要机加工设备和经验。RIG-Arm 这类开源方案刚好卡在中间:数模开源、结构件 3D 打印、5 自由度、支持二次开发,非常适合作为入门级具身智能机械臂平台。
这篇笔记围绕“从拿到 3D 打印数模,到最终上电开机”的完整流程展开,覆盖打印参数、物料清单、本体组装、电子接线、电机调试、固件验证和常见排错。无论你是做毕业设计,还是准备搭建一套用于 ROS、强化学习或视觉抓取的实验平台,都可以按这个流程走一遍。
1. RIG-Arm 是什么:5 自由度机械臂与具身智能的关系
1.1 5 自由度意味着什么
RIG-Arm 是一只 5 自由度的机械臂。“自由度”指的是机械臂能够独立运动的关节数量。每个旋转关节或移动关节可以看作一个自由度,5 自由度意味着机械臂有 5 个可以主动控制的运动轴,常见构型包括腰部旋转、大臂俯仰、小臂俯仰、腕部俯仰和腕部旋转。
从运动学角度理解,5 自由度机械臂末端可以在三维空间中到达一定范围内的位置,并调整末端的姿态。它比 4 自由度机械臂多一个姿态调节能力,又比 6 自由度机械臂少一个冗余自由度。6 自由度机械臂通常可以实现在保持末端位置不变的情况下调整姿态,而 5 自由度机械臂一般需要位置和姿态之间做一定取舍。
对入门项目来说,5 自由度是一个很实用的折中:
- 结构复杂度适中,3D 打印件数量和装配难度可控。
- 电机数量和成本低于 6 轴方案。
- 可以完成抓取、搬运、轨迹演示等典型任务。
- 学习 DH 参数、正逆运动学时,计算量比 6 轴小,但逻辑完整。
1.2 为什么从 3D 打印机械臂入手
具身智能强调“智能体需要通过与真实环境的交互来学习”,普通的仿真环境不能完全替代真实物理世界。机械臂正是最常见的具身智能载体之一,但从仿真到真机之间存在一条很长的工程链路:机械结构、电机驱动、固件控制、运动学解算、感知算法。
RIG-Arm 这类 3D 打印机械臂的价值在于,它把这条链路中的“机械结构”门槛降下来了:
- 数模开源,可以直接在 Printables、Thingiverse 等平台找到。
- 结构件通过 FDM 打印机即可制作,不需要开模或机加工。
- BOM 中的电机、驱动板、主控板都是常见标准件。
- 坏了某个结构件,重新打印即可,维修成本低。
因此,它特别适合高校实验室、个人开发者和毕业设计场景。你可以在它上面跑 ROS 驱动、Gazebo 或 MuJoCo 仿真、视觉抓取、强化学习等方向的研究。
2. 准备工作:数模、打印与物料清单
2.1 获取 RIG-Arm 数模
RIG-Arm 的 3D 数模通常以 STL 或 STEP 格式发布。STL 适合直接切片打印,STEP 适合用 CAD 软件查看和修改尺寸。
获取数模后,先不要急着打印,建议按下面顺序检查:
- 打开 STL 文件,确认零件数量和装配关系。
- 查看项目附带的 BOM 表,确认需要买哪些电机、轴承、螺丝。
- 确认是否存在左右对称件,避免只打印了一半。
- 确认打印方向建议,有些项目会在 README 中标注“此零件竖着打印强度更高”。
如果数模文件中包含装配体(Assembly),可以用 FreeCAD 或在线 3D 查看器先旋转看一遍,了解哪些零件之间有配合关系。这个习惯可以避免后期打印出一堆“不知道装在哪”的零件。
2.2 3D 打印参数建议
打印材料方面,PLA 最容易打印,尺寸稳定性好,适合验证装配;PETG 韧性更好,适合受力较大的关节连接件;ABS/ASA 耐热性更好,但打印时容易翘边,需要加热床和封闭舱。对于入门阶段,推荐先用 PLA 打印一套,装配验证通过后,再考虑用 PETG 重新打印关键受力件。
以下是适合机械臂结构件的常见打印参数,具体需要根据你的打印机和切片软件微调:
| 参数项 | 建议值 | 说明 |
|---|---|---|
| 层高 | 0.2 mm | 兼顾精度和打印速度 |
| 壁厚 | 4 层以上 | 保证结构强度 |
| 填充率 | 40% - 60% | 受力件建议 60%,外观件可降低 |
| 支撑 | 按需开启 | 悬垂角度大于 45° 时建议加支撑 |
| 打印速度 | 40 - 60 mm/s | 太快容易拉丝和层间结合不良 |
| 热床 | PLA 50 - 60°C,PETG 70 - 80°C | 减少翘边 |
打印时建议每个零件先用“低填充、低速度”打一个样品验证尺寸,确认配合没问题后再批量打印。机械臂关节孔位如果打印出来偏小,后期扩孔会很痛苦,提前验证比后期补救效率高得多。
2.3 标准物料与工具清单
机械臂的 BOM 会因版本不同而有所差异,但通常包含以下类别:
| 类别 | 典型清单 | 作用 |
|---|---|---|
| 结构件 | 3D 打印件、金属法兰/支架(按需) | 机械本体 |
| 电机 | 关节电机/舵机、减速器(如行星减速箱) | 提供关节扭矩 |
| 驱动板 | 舵机驱动板、电机驱动模块 | 放大控制信号 |
| 主控板 | Arduino、ESP32、STM32 或树莓派等 | 运行控制固件 |
| 电源 | 适配器、降压模块、电源开关 | 供电 |
| 线材 | 杜邦线、硅胶线、端子、扎带 | 布线 |
| 紧固件 | M3/M4 螺丝、螺母、铜柱、轴承 | 装配固定 |
| 末端工具 | 夹爪、吸盘(按需) | 执行抓取任务 |
工具方面,建议准备内六角扳手套装、十字螺丝刀、尖嘴钳、镊子、万用表、剥线钳、热缩管和电烙铁。调试阶段还需要一根可靠的 USB 数据线,很多“串口连不上”的问题其实是数据线只能充电不能传数据导致的。
3. 打印件后处理与检查
3.1 拆支撑与拉丝清理
打印完成后,先拆除支撑结构。拆支撑时不要用力过猛,尤其是细小的卡扣和轴承座附近,容易直接掰断。建议先用剪钳把大块支撑剪掉,再用美工刀修整残余的支撑接触面。
拉丝是低温打印或回抽设置不佳导致的常见问题。少量拉丝可以用打火机快速掠过表面去除,但要注意控制距离,避免烤化零件。如果拉丝非常严重,说明切片参数中回抽速度或温度需要调整,而不是单纯靠后期清理。
3.2 装配公差调整
FDM 打印件的尺寸存在公差,常见的两个问题是孔位偏小和轴类零件过紧。
孔位偏小时,先不要强行用螺丝拧入,容易导致打印件开裂。正确做法是:
- 用稍大一号的钻头手动扩孔,每次只扩一点点。
- 边扩边试装,直到螺丝可以顺畅拧入。
- 如果孔位是配合轴承的,扩孔时要保证垂直,避免轴承歪斜。
轴类零件过紧时,可以用砂纸打磨配合面。打磨后记得清理粉末,防止粉末进入轴承或电机内部。
3.3 强度与关键尺寸复核
装配前可以用游标卡尺对关键尺寸做抽检。需要重点检查的位置包括:
- 电机安装孔的间距是否与电机法兰一致。
- 轴承座内径是否能放入轴承。
- 相邻两个零件的配合面是否平整。
- 大臂、小臂等长尺寸零件是否在打印过程中发生翘曲。
如果发现某个结构件明显强度不足,可以考虑提高填充率后重新打印,或者在受力位置增加金属嵌件、加长螺丝加固。不要带着隐患进入装配环节,机械臂运动起来之后,结构失效的后果比装配时发现更严重。
4. 机械臂本体组装
4.1 组装顺序:从固定端到末端
机械臂组装的通用原则是“从固定端到末端”,也就是先装底座,再装腰部、大臂、小臂、腕部,最后装末端夹爪。这样做的好处是每一级安装时,都有已经固定的部分作为支撑,方便调整角度和锁紧螺丝。
建议先进行“假组”,也就是不锁紧螺丝,把所有零件摆到正确位置,确认结构合理后再逐级紧固。假组可以发现很多问题,比如某根线材走线不合理、某个关节运动时会碰到相邻零件,这些问题在螺丝锁死后处理起来非常麻烦。
4.2 底座与腰部关节组装
底座负责承受整个机械臂的重量,组装时要特别注意:
- 底座与桌面固定方式要稳固,推荐用底座预留孔位固定在铝型材或木板上。
- 腰部旋转关节的轴承安装要到位,旋转时不能有卡顿。
- 电机输出轴与关节轴之间的连接件(联轴器或法兰)要锁紧,但不要过度用力导致滑丝。
腰部关节是整臂扭矩最大的位置之一,也是 3D 打印结构最容易碎裂的位置。如果发现底座零件壁厚较薄,建议在打印阶段就提高填充率,或者在装配时增加金属垫片分散应力。
4.3 大臂、小臂与腕部组装
大臂和小臂通常各承担一个俯仰关节,这部分组装的核心是保证左右两侧的侧板平行且同轴。如果两侧侧板不平行,关节转动时会偏摆,导致电机负载增大,甚至卡死。
安装俯仰关节时,建议按以下步骤操作:
- 先装入电机,接线端朝外,方便后期接线。
- 再安装轴承和旋转轴,确保旋转顺畅。
- 最后连接大臂侧板,先对角拧入螺丝,不要一次性锁死。
- 手动转动关节,确认无卡涩后,再逐颗锁紧螺丝。
腕部关节位于手臂末端,承受的力矩较小,但线材往往从这里经过,安装时要预留足够空间,避免运动时压线。
4.4 末端夹爪与走线
末端夹爪是机械臂直接执行抓取动作的部件,常见类型有平行夹爪和连杆夹爪。平行夹爪适合抓取规则物体,连杆夹爪更适合抓取圆球或不规则物体。夹爪的安装方向要与腕部关节的旋转轴对齐,否则抓取时物体会倾斜。
走线是整个组装过程中最容易被忽略又最影响体验的部分。建议:
- 所有线材沿机械臂外侧或中空通道走线,不要横跨关节运动区域。
- 每隔一段距离用扎带或线夹固定。
- 电机线、编码器线、电源线分开布置,避免干扰。
- 给运动关节预留足够的线材余量,避免转动时拉扯线缆。
走线时可以把机械臂手动旋转到极限位置,检查线材是否被拉伸或挤压。这一步虽然繁琐,但能避免后期大量“关节一转到某个角度就卡死”的问题。
5. 电子接线与电机调试
5.1 主控与驱动方案确认
RIG-Arm 的控制方案通常分两类:
一类是舵机方案,主控板直接通过 PWM 信号控制舵机角度,接线简单,适合入门。另一类是直流减速电机加编码器方案,需要电机驱动模块和 PID 闭环控制,扭矩更大,控制精度更高,但调试复杂度也明显增加。
主控板的选择取决于你的使用场景:
- 只想做基础角度控制和轨迹演示,Arduino、ESP32 这类 MCU 足够。
- 需要跑 ROS 2、视觉识别或强化学习,一般需要树莓派或 Jetson 这类 Linux 开发板作为上位机,MCU 只负责底层电机控制。
- 如果使用 ROS,还需要确认主控与上位机之间的通讯方式,常见的有串口、CAN 和 ROS Serial。
在确认方案之前,先仔细阅读 RIG-Arm 项目自带的 BOM 表和固件说明,尽量选择与示例固件兼容的主控平台,可以省去大量移植工作。
5.2 电源分配与安全上电
电源是整个系统最容易出问题的地方。机械臂包含多个电机,启动瞬间和堵转时电流会远超额定值。如果电源功率不足,会出现“舵机抖动、复位、无力”等现象。
上电前必须检查以下几点:
- 电源电压是否在电机/驱动板允许范围内。
- 电源额定电流是否大于所有电机同时工作时的总电流。
- 主控板与电机是否分开供电,避免电机大电流拉低主控电压导致死机。
- 电源正负极是否接反,是否串入保险丝或急停开关。
强烈建议在电源输入端增加一个自锁开关或急停按钮,位置放在操作者顺手能碰到的地方。调试过程中一旦出现异常,第一时间断电比任何代码保护都可靠。
5.3 关节方向与零位调试
机械臂上电后,第一件事不是直接跑复杂的运动控制,而是确认每个关节的方向和零位。
先写一个最简单的测试程序,让每个关节逐个运动到中位。观察实际转动方向与预期方向是否一致。如果方向反了,可以通过程序取反,或者交换电机两根控制线来修正。但要注意,不同的电机驱动方式修正方法不同,不要盲目换线。
对于舵机,零位通常对应一个特定的 PWM 脉宽(常见为 1500us)。装配时最好让机械臂在零位 PWM 状态下进行机械调零,也就是先把舵机臂手动放到中间位置,再安装结构件。这样可以避免后期在代码里写入很大的角度补偿值。
下面是一个舵机调零的 Arduino 示例,思路是逐个关节输出零位 PWM,确认机械零位:
// 文件路径:firmware/servo_zero_test/servo_zero_test.ino // 作用:逐个关节输出零位 PWM,确认机械零位与运动方向 #include <Servo.h> Servo joint[5]; // 根据实际接线修改引脚编号 const int jointPins[5] = {3, 5, 6, 9, 10}; const int zeroPwm = 1500; // 典型中位,单位 us,按实际舵机规格调整 void setup() { Serial.begin(115200); for (int i = 0; i < 5; i++) { joint[i].attach(jointPins[i]); joint[i].writeMicroseconds(zeroPwm); delay(500); } Serial.println("All joints have been set to zero position."); } void loop() { // 可以在上位机中逐步增大或减小 PWM 值,确认每个关节的方向 // 确认后记录正反向映射,再写入正式控制代码 }如果你使用的是直流减速电机加驱动器,零位调试通常需要配合编码器读数。先把电机输出轴手动转到机械零位,然后读取编码器值,并把这个值记录为软件零位。后续所有位置控制都基于这个零位偏移计算。
5.4 电机扭矩估算与堵转保护
在调试过程中,如果某个关节频繁抖动、发热或者丢步,很可能是电机扭矩不足。电机扭矩选型是一个静态和动态都涉及的问题,入门阶段可以通过简化的静力学公式做估算:
# 文件路径:tools/torque_check.py # 作用:粗略估算转动关节所需扭矩,用于选型与安全检查 import math G = 9.81 # 重力加速度,m/s^2 def joint_torque(m_link, l_cg, m_load, l_load, safety=1.8): """ m_link : 关节上方所有结构件总质量,kg l_cg : 结构件质心到关节旋转轴的水平距离,m m_load : 末端负载质量,kg l_load : 负载中心到关节旋转轴的水平距离,m safety : 安全系数,考虑加速、摩擦和惯量 """ tau = m_link * G * l_cg + m_load * G * l_load return tau * safety if __name__ == "__main__": # 以肩部某个关节为例,示例参数按实际称重结果修改 t = joint_torque(m_link=0.8, l_cg=0.12, m_load=0.2, l_load=0.35) print(f"估算所需扭矩: {t:.3f} N·m")这个公式忽略了动态加速力矩和结构惯性,但作为选型初算是足够的。实际工程中,建议再乘 1.5 到 2 倍的安全系数。如果计算出来的扭矩明显超过电机额定值,就需要考虑换更大扭矩的电机、减轻结构件重量,或者缩短力臂。
堵转保护同样重要。机械臂在运动过程中如果撞到障碍物,电机会瞬间进入堵转状态,电流急剧上升,可能导致电机烧毁或驱动板损坏。常见的保护方式有:
- 在固件中设置电流上限或位置误差上限,超过阈值立即停止。
- 在电源回路中串联保险丝或使用带过流保护的驱动板。
- 调试阶段把运动速度限制在很低的范围内,先验证逻辑再提速度。
6. 固件下载与开机验证
6.1 最小系统上电测试
在把整只机械臂接入系统前,建议先做一次“最小系统上电测试”:只连接主控板、一个关节电机和电源,确认单关节能正常控制。这样可以把问题隔离在最小范围内,避免整臂上电时多个电机同时工作,出了问题难以定位。
最小系统测试通过后,再逐步增加关节。每增加一个关节,都要重新验证一次:
- 该关节能否正常回零。
- 运动方向是否正确。
- 是否影响其他已调试关节。
- 电源供电是否稳定。
这个过程虽然繁琐,但比一次接满 5 个关节再排查问题要快得多。
6.2 串口环境与设备确认
大多数机械臂主控板通过 USB 串口与上位机通信。上电前先确认电脑已经安装了对应主控板的 USB 驱动。插上 USB 线后,可以用 Python 的 pyserial 库扫描当前可用的串口设备:
# 文件路径:tools/scan_serial.py # 作用:扫描当前串口设备,确认机械臂主控对应的 COM/TTY import serial.tools.list_ports ports = serial.tools.list_ports.comports() for p in ports: print(f"{p.device} - {p.description}")运行前需要安装 pyserial:
pip install pyserial在 Windows 上,设备通常显示为COM3、COM4等;在 Linux 上通常显示为/dev/ttyUSB0、/dev/ttyACM0等。如果在列表中找不到设备,先检查 USB 线是否支持数据传输,再检查驱动是否安装。
6.3 关节初始化测试
固件下载完成后,机械臂上电会自动执行初始化流程。判断“开机成功”的标准不只是 LED 亮起来,而是:
- 主控板完成自检,串口能正常收到心跳或状态信息。
- 所有关节回到初始零位。
- 上位机可以读取到每个关节的当前角度。
- 控制指令可以正常下发并得到机械响应。
这里需要说明,“开机”在不同项目中有不同含义。如果是裸机 MCU 方案,开机就是固件开始运行;如果是 ROS 方案,开机通常还包括上位机节点启动和机械臂状态发布。
固件烧录方式取决于主控芯片类型,Arduino 使用 IDE 直接烧录,ESP32 通常需要通过串口进入下载模式,STM32 可能使用 ST-Link 或 DFU。具体操作以你的主控板文档为准。烧录成功后,建议先通过串口助手发送一条简单的关节指令,比如让 1 号关节转动到 30°,观察是否执行,再继续后面的测试。
6.4 进入上层调试:上位机与 ROS
当底层关节控制稳定后,就可以进入上层调试。如果你计划使用 ROS 或 ROS 2 做开发,常见的思路是:
- 在机械臂主控上运行底层固件,负责关节角度闭环。
- 在上位机上运行 ROS 节点,通过串口或 CAN 与主控通信。
- 在上位机中建立 URDF 模型,实现可视化。
- 通过 MoveIt 或自研运动学节点做轨迹规划。
调试 ROS 节点时,建议先用 Rviz 查看机械臂模型与真实机械臂是否一致,再尝试发送轨迹指令。如果 Rviz 中的模型旋转方向和真实机械臂不一致,通常是关节正负方向和零位偏移定义错误,需要回到第 5.3 节重新核对。
7. 常见问题与排查思路
7.1 打印阶段问题
打印阶段最常见的问题有:
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 零件翘边、底面不平 | 热床温度不足、首层附着差 | 提高热床温度、涂固体胶/美纹纸 |
| 孔位偏小,螺丝装不进 | FDM 收缩、打印补偿不足 | 用钻头扩孔,或调大水平扩张补偿 |
| 拉丝严重 | 温度偏高、回抽参数不合理 | 降低打印温度,增大回抽距离 |
| 层间开裂 | 打印温度偏低、层间粘结不足 | 提高打印温度,降低打印速度 |
| 支撑难拆、损坏零件 | 支撑密度过高、间距太小 | 调整支撑 Z 距离,用剪钳小心拆除 |
7.2 装配阶段问题
装配阶段最常见的五个问题分别是:
- 左右侧板不平行,导致关节转动偏摆。排查时先松开全部螺丝,重新对齐后再对角紧固。
- 轴承安装歪斜,转动卡顿。如果是过盈配合,不要用锤子硬砸,可以用压入工装或加热打印件后装配。
- 螺丝滑丝,常见于 PLA 材料。解决方法是换更大一号的螺丝,或者在孔内嵌入金属螺纹套。
- 电机轴与关节轴不同轴,导致转动费力。需要通过联轴器或法兰的安装位置调整。
- 线材被运动关节压住,导致转动到一定角度后卡停。走线时必须预留余量并固定线束。
7.3 上电调试问题
上电调试阶段的问题排查表如下:
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 上电后主控无反应 | 电源未接通、稳压模块损坏、接线反接 | 用万用表测电压,检查电源指示灯 |
| 电机抖动但不转动 | 供电不足、PWM 频率不对、堵转 | 检查电源电流,降低负载,检查驱动设置 |
| 关节运动方向相反 | 控制逻辑反向 | 在固件中取反,或调整电机接线 |
| 串口连不上 | USB 线只充电、驱动未装、串口号错误 | 换数据线,安装驱动,扫描实际串口号 |
| 机械臂运行中突然复位 | 电机电流过大拉低主控电压 | 分开供电,增加电源功率,加电容滤波 |
| 某个关节角度不准确 | 零位偏了、编码器数据异常 | 重新机械调零,校准编码器零位 |
7.4 排查顺序建议
遇到问题时,建议按“电源 → 接线 → 固件 → 机械”的顺序排查。很多开发者一上来就怀疑代码,但实际情况中,供电不足和接线错误占的比例非常高。
具体排查顺序如下:
- 用万用表确认各点电压正常。
- 确认主控板与驱动板之间的控制线序正确。
- 查看固件日志或串口数据,确认控制指令是否到达。
- 手动转动关节,确认机械传动部分没有卡滞。
- 逐关节隔离测试,缩小故障范围。
8. 最佳实践与后续学习路线
8.1 组装与调试安全建议
机械臂虽然不是高危设备,但调试过程中仍然需要注意安全:
- 通电后不要把手伸到机械臂运动范围内,尤其是夹爪和关节交汇处。
- 调试阶段把最大速度和最大加速度限制在很低水平。
- 身边准备急停开关,出现异常立刻断电。
- 不要用手强行阻挡运动中的关节,容易损坏结构件和电机。
- 使用锂电池或大功率电源时,注意散热和放置安全。
另外,机械臂的螺丝属于易松动部件。运动一段时间后,建议定期检查所有紧固件,尤其是底座和肩部关节。可以在螺丝上做标记线,方便一眼看出是否松动。
8.2 工程化配置管理
当机械臂逐渐从“能转”走向“好用”,建议把零散的角度值、限位、方向等参数集中管理。一个简单的 YAML 配置示例:
# 文件路径:config/joints.yaml # 作用:记录每个关节的限位、方向、零位 PWM,便于后续运动学调试 joints: - name: joint1 min_deg: -90 max_deg: 90 zero_pwm: 1500 direction: 1 - name: joint2 min_deg: -45 max_deg: 135 zero_pwm: 1500 direction: -1 - name: joint3 min_deg: -60 max_deg: 60 zero_pwm: 1500 direction: 1把机械参数、控制参数、标定参数分开管理,后续换电机、改结构时只需要更新配置,不需要改控制逻辑。这也是从“手工作坊式开发”走向“工程化开发”的关键一步。
8.3 从机械臂到具身智能的学习路线
RIG-Arm 只是机械臂学习的起点。把这只 5 自由度机械臂跑通后,可以沿着以下路线继续深入:
第一步,学习运动学。根据机械臂的实际尺寸建立 DH 参数表,区分标准 DH 和改进 DH 的区别。有了 DH 参数,就可以自己编写正运动学程序,输入关节角度计算末端位姿。逆运动学可以从几何法入手,再过渡到数值解法。
第二步,学习仿真。在 Gazebo 或 MuJoCo 中搭建机械臂模型,导入 URDF 后做轨迹规划仿真。仿真环境的最大价值是可以快速验证算法,避免在真机上反复调试带来的损耗。
第三步,学习 ROS 2 与 MoveIt。用 MoveIt 做运动规划,用 Rviz 做可视化,再通过 ROS 2 话题控制真实机械臂。这是目前机械臂开发的主流技术栈。
第四步,加入感知模块。在机械臂上方安装 RGB 相机或深度相机,实现目标检测、位姿估计和视觉抓取。可以用 ArUco 标记做入门标定,再逐步过渡到 YOLO、PointNet 等模型。
第五步,尝试强化学习。在 MuJoCo 等仿真环境中训练抓取策略,再迁移到真实机械臂上。RIG-Arm 虽然精度不如工业机械臂,但作为学习平台已经完全足够。
最后提醒一句:机械臂调试不要追求一步到位。先把硬件跑稳定,再谈运动和算法。从 3D 打印到开机的每一步,都是在为后面的智能控制积累经验。