机器人入门,到底卡在哪
很多学计算机和自动化的同学,看到"机器人"这三个字,第一反应是高大上——机械臂、无人车、人形机器人,感觉离自己很远。但实际接触之后你会发现,机器人的底层逻辑并不玄乎,无非是"感知—决策—执行"三个环节不断循环。感知靠传感器,决策靠算法,执行靠电机和机械结构。计算机科学负责其中的算法和系统,自动化负责其中的控制与反馈,两者拼在一起,就是一个完整的机器人。
这篇是"计算机科学与自动化"系列里机器人方向的第一篇,主要面向两类人:一类是有编程基础、但对硬件不熟的同学,想搞清楚机器人到底怎么从零跑起来;另一类是学过自动控制原理、但没亲手做过整机集成的同学,想知道控制理论是怎么在真实机器人上落地的。我会结合实际调试经验,把机器人拆成硬件、软件、控制、通信、建图导航这几大块,讲清楚它们是如何配合的,也会给出踩坑记录。不管你是想搞毕设、参加竞赛,还是单纯自己捣鼓一台机器人,这篇都能给你一个能直接上手的起点。
1. 整体设计思路:先别急着写代码,先搞懂机器人在干什么
1.1 机器人的本质是"感知—决策—执行"闭环
一台最简单的轮式机器人,本质上就是一个会移动的嵌入式系统。它通过传感器感知周围环境,比如激光雷达测距、IMU测姿态、编码器测轮子转了多少圈;然后由主控芯片或上位机根据这些数据做决策,比如"前方有障碍物,需要左转";最后把决策结果发给电机驱动器,让电机转起来,带动轮子移动。移动之后,传感器数据又变了,于是进入下一轮循环。
这个闭环听起来简单,但每个环节都有细节。拿感知来说,激光雷达的数据是一圈一圈的扫描点,每个点有角度和距离信息。如果你用的是单线雷达,数据量还好,但如果你用RGB-D相机,数据量直接暴增,主控处理不过来就得丢帧、延迟,整个系统就会"反应迟钝"。所以做机器人第一步不是选最强的传感器,而是先想清楚:我的机器人要完成什么任务?在这个任务里,哪些传感器是必需的,哪些是可选的?
1.2 计算机科学和自动化在机器人里各管什么
计算机科学在机器人里的角色,主要体现在系统架构、算法和软件工程上。比如你要在机器人上跑SLAM(同步定位与建图),就涉及数据关联、状态估计、图优化等算法;你要让机器人和上位机通信,就涉及Socket、ROS的Topic机制、消息序列化;你要让多个传感器数据同步,就涉及时间戳对齐、缓冲队列管理。这些本质上都是计算机领域的问题。
自动化在机器人里的角色,则体现在底层控制上。电机转速不是你想让它转多快它就转多快,得有PID控制器不断调整PWM占空比,让实际转速逼近目标转速。机器人走直线也不是想当然——两个轮子的直径差、地面摩擦差异都会导致偏航,这时候就得靠编码器反馈做闭环修正。再往上,运动学解算、轨迹跟踪、避障规划,也都是自动控制理论在机器人上的应用。
我见过不少计算机背景的同学,一上来就奔着SLAM、深度学习去看,结果机器人动都动不稳,因为底层的PID根本没调好。反过来,也有自动化背景的同学,控制理论背得滚瓜烂熟,却写不好一个多线程通信程序,导致传感器数据不同步。真实做机器人,两边都得会一点,不要求都精通,但至少得知道对方在说什么。
1.3 从零起步的技术路线:怎么选最稳
我给新人的建议是,不要一上来就搞六轴机械臂或者双足机器人,那些机构复杂度和控制难度对新手极不友好。先从轮式机器人开始,它结构简单、成本可控、调试方便,而且涵盖了机器人最核心的几个模块:运动控制、传感器融合、建图导航。
具体路线可以分四步走:
- 第一步:搞定底盘。买一个或者自己搭一个两轮差速底盘,配上编码器电机和驱动板。目标只有一个:让机器人能直行、转弯、原地旋转,并且能通过编码器读出轮子转了多少。
- 第二步:接上感知。装一个单线激光雷达或者IMU,把数据读出来,在电脑上可视化一下,看看扫描出来的环境长什么样。
- 第三步:跑通SLAM建图。用手柄或者遥控器控制机器人把房间逛一圈,让它边移动边建图,最后得到一张二维栅格地图。
- 第四步:实现导航。在地图上给定一个目标点,让机器人自己规划路径、避障、走过去。
这四步走完,你就已经掌握了移动机器人的核心内容。后面再想搞机械臂、无人机、双足,很多东西都是相通的。而且每一步踩的坑,都会成为你后面调试复杂机器人的宝贵经验。
2. 核心硬件解析:选型与安装要点
2.1 电机与驱动:机器人的"肌肉"
电机是机器人的动力来源,选型直接决定机器人的速度、负载和可控性。对于入门级轮式机器人,最常见的选择是带编码器的直流减速电机。减速箱的作用是把电机的高速小扭矩输出转换成低速大扭矩输出,让机器人既有劲又可控。编码器则用来测量电机的转速和转角,是闭环控制的关键反馈元件。
选电机时,你要关注三个参数:额定电压、减速比、额定扭矩。额定电压要和主控供电方案匹配,一般来说12V是比较通用的选择。减速比决定了转速和扭矩的权衡,减速比越大,转速越慢、扭矩越大。额定扭矩要留出至少1.5倍裕量,因为机器人启动瞬间和爬坡时电流会飙升,扭矩不足就会卡死。
电机的驱动模块一般叫电机驱动器,常见的有两种类型:一种是直接集成在底盘控制板上的,你只需要给它PWM和方向信号;另一种是独立的驱动模块,比如常见的BTN7971或DRV8825方案,需要通过GPIO控制。要注意的是,电机驱动器的电流容量一定要大于电机堵转电流,否则一卡死就会烧驱动芯片。
我实测下来,很多新手第一次接电机驱动,最容易犯的错是电源共地没接好。电机是大电流设备,控制板是弱电设备,如果两者不共地,信号电平就乱套了,症状表现为电机无故抖动、转速不稳。所以接线的时候,电机电源负极、控制板GND、驱动器GND必须连在一起。
2.2 传感器:机器人的"五官"
最基础也是最重要的传感器有三个:
编码器:安装在电机尾部,测量轮子转速。它输出的是两路正交的方波信号(A相和B相),通过判断两路信号的相位差可以知道转动方向,通过计数脉冲可以知道转动量。注意,编码器有单脉冲和双脉冲模式的区别,单脉冲模式下每个脉冲代表一个计数单位,双脉冲模式下每个脉冲在上升沿和下降沿都计数,精度翻倍但数据量也翻倍。
IMU(惯性测量单元):测量机器人的加速度和角速度。它里面通常有一个加速度计和一个陀螺仪,有的还带磁力计。IMU的作用是在轮子打滑或编码器失效时,提供短时间的姿态和位移参考。但IMU有零漂问题,静止时读数也会缓慢变化,所以不能单独用来定位,必须和其他传感器融合。
激光雷达:测量周围障碍物的距离,是目前移动机器人建图和导航最可靠的环境感知传感器。入门级常用的是单线机械式激光雷达,扫描范围一般是360度,测距半径在8到12米之间。选雷达时看两个参数,一个是测距半径,太小了导航时来不及避障;另一个是扫描频率,常见的是10Hz左右,频率太低会导致地图变形。
2.3 主控板选型:机器人的"大脑"
主控板是机器人的计算中心,负责处理传感器数据、运行算法、下发控制指令。入门阶段常用的是树莓派或者Jetson Nano这类带Linux系统的开发板,因为它们可以跑完整的ROS系统,生态成熟,资料多。如果你的算法不涉及深度学习,树莓派级别的算力就够用了;如果后面要跑视觉识别、目标检测,那就得考虑Jetson系列。
主控板和底盘控制板之间的通信,常见的是串口USART或CAN总线。串口简单可靠,适合数据量不大的场景;CAN总线抗干扰强、支持多设备挂载,适合更复杂的机器人系统。新手刚开始用串口就够了,注意设置好波特率,两边一致才能通信。
还有一个容易忽略的点是供电。主控板、传感器、电机尽量分开供电,避免电机启动时的大电流拉低主控电压导致重启。我给机器人的供电方案是:电池输出12V给电机驱动,同时用一块DC-DC降压模块转换成5V给主控板,3.3V给传感器和编码器供电。这样即使电机电流波动,也不会影响主控稳定运行。
2.4 机械结构:别小看这块板子
机械结构包括底盘、轮子、联轴器、支架等。入门阶段最简单的是直接用亚克力板或铝合金板加四个铜柱搭一个两层结构,上层放主控和雷达,下层放电机和电池,重心越低越稳。轮子建议用橡胶轮或者全向轮,不要用硬塑料轮,硬轮子在瓷砖上打滑严重,编码器读数虚高,会严重影响导航精度。
联轴器要特别说明一下——电机轴和车轮轴之间必须用弹性联轴器连接,不要硬拧。因为电机轴和轮轴的同心度做不到完全一致,硬性连接会产生振动和额外阻力,时间长了还会磨损电机轴承。弹性联轴器能吸收一定的偏心误差,让运行更顺滑。
3. 软件与算法核心:从底层控制到智能导航
3.1 PID控制:让电机听你的话
要让机器人精确运动,PID控制是绕不开的。PID控制器的思路很简单:根据目标值和实际值的偏差,计算出一个控制量,让实际值不断逼近目标值。它由三部分组成:比例项P、积分项I、微分项D。
- P项:偏差越大,输出越大。只靠P项,系统会震荡,因为输出总是过冲。
- I项:对过去的偏差累积。可以消除稳态误差,但如果I太强,会导致超调。
- D项:预测偏差的走势,抑制震荡。D太强则会放大噪声。
在代码里,最基础的PID函数只占十几行:
class PID: def __init__(self, kp, ki, kd, target=0): self.kp = kp self.ki = ki self.kd = kd self.target = target self.last_error = 0 self.integral = 0 def update(self, current, dt): error = self.target - current self.integral += error * dt derivative = (error - self.last_error) / dt output = self.kp * error + self.ki * self.integral + self.kd * derivative self.last_error = error return outputPID参数整定是有规律可循的。我的经验是:先调P,从小到大增加,直到电机开始震荡,记录下这个临界值,然后把P设为临界值的一半;之后加上一点D来抑制超调;最后再适量加I来消除静态误差。这个流程俗称"Ziegler-Nichols方法",虽然不算精确,但作为起步足够了。
3.2 运动学模型:机器人怎么走
差速驱动是入门机器人最常用的底盘结构,它有两个驱动轮,通过左右轮的速度差实现转向。运动学模型要解决的问题是:已知左右轮的转速,如何计算出机器人的线速度和角速度;反过来,已知目标线速度和角速度,如何分配左右轮各自的转速。
正向运动学公式如下(设轮间距为L,轮半径为r):
- 线速度 v = (v_left + v_right) / 2
- 角速度 ω = (v_right - v_left) / L
反向运动学公式:
- v_left = v - (ω * L) / 2
- v_right = v + (ω * L) / 2
这些公式看起来没什么,但在实际调试中,轮间距L的数值并不完全等于两个轮子之间的物理中心距,因为存在轮子打滑、轮胎有效半径变化等因素。更准确的做法是:用卷尺量一个大致的L,然后让机器人执行一个原地旋转360度的指令,看它实际转了多少度,再用比例关系修正L。
3.3 SLAM建图:从零开始认识环境
SLAM(Simultaneous Localization and Mapping)指的是机器人在未知环境中一边移动一边建立地图,同时估计自己在地图中的位置。最经典的方案是"激光雷达+里程计"融合:里程计提供短时间内的运动预测,雷达扫描数据与已有地图进行匹配来修正累积误差。
在ROS里跑SLAM,一般流程是:
- 启动激光雷达驱动节点,发布雷达扫描话题。
- 启动底盘驱动节点,发布里程计话题。
- 启动SLAM算法节点(比如gmapping或cartographer),订阅雷达和里程计数据,输出地图话题。
- 启动可视化工具,查看建图过程。
gmapping对里程计质量比较敏感,轮子打滑会导致地图错位。Cartographer则内建了扫描匹配机制,对里程计误差的容忍度更高,但配置更复杂。新手先用gmapping跑通流程,后面再切cartographer做精度优化。
3.4 导航避障:让机器人自己找路
导航分两步:全局路径规划和局部避障。全局规划在做好的静态地图上搜索一条从起点到目标点的可行路径,常用算法是A*或Dijkstra。局部避障则依靠实时传感器数据,在沿全局路径前进时避开突然出现的障碍物,常用方法有动态窗口法(DWA)。
在ROS里,导航功能包集成了这两个模块。你需要在地图上给出机器人的起始位姿,然后给定目标点,机器人就会自动规划并执行。但这个环节坑非常多,最常见的是"机器人重定位失败"——因为SLAM建图和导航启动时的初始位姿不一致,机器人不知道自己在哪里,自然没法规划路径。解决办法是启动导航后,先手动调整机器人在地图上的初始位姿,或者用自适应蒙特卡洛定位(AMCL)让机器人自己估算位置。
3.5 通信架构:机器人的"神经系统"
一台机器人内部有多个模块,它们之间的通信方式决定了系统的实时性和扩展性。最主流的架构是ROS的发布-订阅通信模型:每个传感器数据都以Topic的形式发布,任何需要这些数据的模块都可以订阅,模块之间完全解耦。
比如底盘的里程计数据发布到 /odom 话题,激光雷达数据发布到 /scan,SLAM节点订阅这两个话题,发布地图到 /map,导航节点订阅地图和雷达,发布速度指令到 /cmd_vel,底盘节点又订阅 /cmd_vel 来执行电机控制。每个环节都是"生产者和消费者"的关系,新增一个传感器,只需要写一个新节点,不必改动其他模块。
ROS2相比ROS1,增加了分布式通信、生命周期管理和更完善的安全机制,而且解决了ROS1中心节点宕机导致全系统瘫痪的问题。新项目建议直接上手ROS2,虽然资料比ROS1少一些,但未来趋势已经很清晰了。
4. 实操过程记录:从零件到能跑的完整记录
4.1 硬件组装阶段的实测记录
我这里说的是一台两轮差速底盘的轮式机器人组装。底盘部件包括铝合金底盘、两个带编码器的直流减速电机、四个支撑轮、一块树莓派4B主控、一块STM32底盘控制板、一个单线激光雷达、一块12V锂电池,以及DC-DC降压模块若干。
组装顺序很关键,我的步骤是:
- 先装电机和驱动板。电机固定在底盘两侧,引线接到驱动板上,暂时不要让电机通电,先手动转动轮子,确认转动顺滑无卡滞。
- 接编码器线。编码器一般有6根线:电源正负、A相、B相、还有一个索引信号(有的没有)。A相和B相要接到控制板的外部中断引脚上。
- 装配主控和传感器。树莓派固定在底盘上层,激光雷达装在机器人的正中心上方,IMU固定在尽量靠近几何中心的位置。
- 供电接线。电池正极先经过一个开关,再分两路:一路直连电机驱动板的电源端,另一路接降压模块降成5V给主控供电。接好之后反复检查电源极性,确认无误再上电。
上电后第一件事,不是去跑SLAM,而是先用简单的固件测试:给电机一个固定的PWM值,听电机声音是否平稳;把轮子抬离地面,让电机空转,观察编码器读数是否线性增加。这一步能滤掉一大半的硬件问题。
4.2 底盘控制固件:如何写出可用的底层驱动
底盘控制板上的固件,职责是:接收上位机发来的目标速度指令,通过PID算出每个电机的PWM输出,同时采集编码器数据,计算实际速度并发送回上位机。
通信协议我自定义了一个简单的文本帧格式:
$SPD,0.30,0.05*5A其中$SPD是帧头,0.30是目标线速度(m/s),0.05是目标角速度(rad/s),末尾的*5A是CRC校验。上位机解析时先拿帧头,再取有效数据,最后校验CRC是否一致,不一致就丢弃整帧。这种方式虽然不如二进制协议高效,但调试时可以用串口助手直接读到可读文本,排错非常方便。
电机PID的采样频率建议设在100Hz左右,也就是每10ms执行一次速度闭环。PID输出要限制在PWM的有效范围内,同时要做积分限幅,防止机器人卡死时积分项疯狂累积。
4.3 建图实操:跑一遍才知道的细节
建图前,先要把机器人的各个话题都确认一遍。我习惯先跑ros2 topic list看看所有话题是否都在,再跑ros2 topic echo /scan --once看雷达数据是否正常,最后跑ros2 topic echo /odom --once确认里程计在机器人移动时是否有变化。
建图过程中最容易犯的错是:手柄控制机器人转弯太急。激光雷达扫描一圈需要一定时间,转速太快会导致扫描点变形,建出来的地图墙角全是锯齿。正确的做法是:缓慢移动,转弯时最好让机器人原地旋转,不要边走边大幅度转,这样雷达扫描到同一面墙的时间差不会太大,点云匹配更准确。
建图完成后,保存地图:
ros2 run nav2_map_server map_saver_cli -f ~/robo_map这个命令会生成两个文件:robo_map.pgm是图像格式的地图,直接可以打开看;robo_map.yaml是地图的元数据文件,包含分辨率、原点坐标和占用阈值等参数,导航启动时读的就是这个文件。地图保存成功后,一定要在图像浏览器里打开确认一下,看看有没有明显的重影或错位,如果有就说明建图过程中出现了打滑或雷达畸变,重新建比后期修复划算得多。
4.4 导航实测:从A点到B点,远比想象中难
导航启动后,第一步是给机器人一个初始位姿。我使用RViz2工具的 "2D Pose Estimate"工具,在地图上大致点一下机器人的位置和朝向。这一步很关键,初始位姿如果偏差超过30厘米或15度,AMCL很可能收敛失败,机器人在导航开始时会原地乱转。
定位收敛后,用 "2D Goal Pose" 指定目标点,机器人的全局规划器会在地图上搜索一条路径,然后通过控制器跟踪这条路径,同时局部规划器实时避障。
我第一次跑导航时遇到的典型问题是:机器人走到一半突然停顿,然后原地转圈,大概持续一两秒又继续前进。排查发现是局部规划器的膨胀半径设得过大,地图上被判定为"不可通行"的区域太多,导致局部路径经常无解。把膨胀半径从0.3米调小到0.15米之后,问题就解决了。
这给新人一个很重要的启示:导航参数的调整,很大程度上是调各种"半径"——机器人半径、膨胀半径、代价地图的障碍物半径。这些值如果和机器人实际尺寸不匹配,要么撞墙,要么绕远路。
4.5 实际性能体会
调完整个系统后,我的感受是:机器人能跑起来容易,但能长时间稳定跑、不跑偏、不丢定位,非常考验系统工程的细节。比如编码器安装得稍微偏心一点,里程计就会周期性波动;雷达支架松动一点,地图就会在某个方向持续漂移。这些硬件上的小瑕疵,软件怎么调都补不回来。
我把从零开始到跑通导航的整体耗时记录了一下,大概是这样:硬件组装和接线1天,底盘控制固件和PID整定1.5天,ROS2通信和驱动调试1天,SLAM建图流程0.5天,导航参数调试1天。也就是说,一个计算机或自动化背景的初学者,在没有人指导的情况下,大约需要5个整天,才能让一台自主导航机器人稳定运行。这个周期仅供参考,但可以让心里没底的同学有个概念。
5. 常见问题与排查技巧实录
5.1 硬件层面的典型问题排查
现象一:电机抖动不转
这个多半是编码器接线不对,或者使能信号没给对。有些驱动板需要通过一个EN引脚使能电机驱动芯片,如果使能信号悬空,输出端处于高阻状态,电机只会有微弱的抖动。用示波器或者万用表量一下EN引脚电压,确保在高电平。
现象二:编码器读数跳变
编码器是数字信号,如果线缆过长或者布线靠近电机大电流线,就会受到电磁干扰。我遇到过一次编码器读数在静止时也在跳变,排查发现是编码器线和电机线绑在同一个扎带里,电机启动瞬间的电磁干扰直接耦合进编码器信号。解决办法是把编码器线单独走,或者套上屏蔽线。
现象三:超声波传感器没反应
现在很多超声波传感器模块是5V逻辑电平,而树莓派的GPIO是3.3V电平,直接连接会造成信号不匹配甚至烧坏GPIO。需要接一个电平转换模块。更稳妥的做法是:买之前先看好传感器模块是否支持3.3V供电和逻辑,或者在信号线上串联电阻分压。
5.2 软件层面的典型问题排查
现象一:里程计"越跑越偏"
机器人走直线越走越偏,要么是左右轮速不一致,要么是轮间距参数不准。先用卷尺校正轮间距,再检查左右电机对应的PWM是否一致。很多时候,左右电机虽然型号相同,但内部摩擦差异会导致相同PWM下转速不同,所以必须靠PID闭环到相同的转速,而不是直接给相同的占空比。
现象二:建图时地图错位
地图出现重影,或者墙壁变成双重线,最常见的原因是SLAM的扫描匹配失败。每次匹配失败,机器人的位姿就会多一个误差,第二次遇到类似场景时就可能匹配到错误的位置。解决办法:降低机器人移动速度,尤其是旋转速度;再一个就是检查里程计噪声参数,COVARIANCE设置得太小会让算法过度信任里程计,反而会掩盖雷达匹配的修正作用。
现象三:导航时机器人原地转圈
AMCL定位丢失或者"绑架"问题(机器人被抱起挪了个位置)会导致原地旋转试图重新定位。如果转圈超过10秒还没恢复,基本可以判断定位已经彻底丢失,需要手动重新给定初始位姿。频繁出现这种情况,建议检查雷达数据质量——如果雷达扫描的地图特征太少(比如空旷场地),定位本来就很困难,可以考虑增加环境特征或者使用视觉辅助定位。
5.3 机器人调试的独家心得
调试机器人,最忌讳的是"一次改多个变量"。比如你同时改了PID的Kp和雷达的扫描频率,结果系统变好了,但你根本不知道是哪个改动起了作用,或者两个改动互相抵消了。我给自己定的规矩是:一次只改一个参数,改完记录观察结果,不理想就回滚再换一个参数试。
日志记录也是很重要的一环。ROS本身提供了ros2 bag record录包工具,可以把运行期间所有话题数据都记录下来。后续分析问题时,可以回放日志,逐帧确认故障发生时刻各话题的状态。有一次我排查一个偶发性的转向异常,就是靠回放日志发现电机驱动板在某个瞬间发出了一个异常大的PWM指令,追溯上去是底盘控制固件中一个定时器溢出导致的速度计算错误。
另外,调试过程中一定要保护好自己的设备。锂电池充电要有人照看,放置电池的地方远离易燃物;电机运转时不要去摸轮子缝隙,防止手套或手指绞入。新手第一次做机器人,安全上的习惯必须从一开始就养好。
5.4 常见问题速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 电机抖动不转 | 使能信号异常/编码器接线错误 | 查EN引脚电压、查编码器A/B相接线 |
| 编码器数字跳变 | 电磁干扰/供电不稳 | 信号线远离功率线、加强滤波电容 |
| 串口通信乱码 | 波特率不一致/TTL电平不匹配 | 核对波特率、加电平转换模块 |
| SLAM地图重影 | 雷达畸变/里程计不准 | 降低移动速度、校正轮间距、检查雷达安装 |
| 激光雷达某方向无数据 | 雷达被遮挡/旋转结构卡住 | 检查雷达机械旋转部分 |
| 导航原地转圈 | AMCL初始位姿不准/环境特征稀疏 | 重新给定初始位姿、增加特征、检查雷达数据 |
| /cmd_vel 有数据但车轮不动 | 底盘控制板未启动/协议解析失败 | 检查串口接线、核对协议帧头与CRC |
这里有个小技巧:出现问题之前刚要排查,可以先把所有话题数据录一段包,然后自由实验。问题复现后不用慌,回放录好的包,逐帧看各话题之间的因果关系,大多数诡异问题都是这样定位到根因的。我之前遇到一次倒车时偶发抖动,看了一年日志才发现是PWM初始化时默认值为0、但某些情况下控制板启动后未在PWM引脚配置输出模式,导致引脚浮空,信号被噪声拉到不确定电平。这种问题,不看日志光靠"看一眼代码"很难发现。
6. 给新手的避坑总结与后续建议
现在回看整个机器人入门过程,最值得分享的经验就是一条:不要贪快,按层次递进。很多人觉得机器人很酷,直接上来就搞深度学习视觉导航,结果积木没搭好就开始装修,最后每天在底层硬件的泥潭里挣扎。我的建议是,先做一个功能明确的小机器人,跑通全流程,再去追求高级功能。
具体来说,只要把这几件事按顺序做好,新手完全可以避免大多数坑:
- 第一,硬件组装完不要急着上电,先把所有接线核对三遍,电源极性、信号线、共地关系都确认无误再通电。
- 第二,先做电机开环测试,再做闭环PID,最后才上SLAM和导航。这个顺序能让你在每一层都建立信心。
- 第三,每次改参数前拍照记录原始值,改完验证效果,不要凭感觉乱调一气。
- 第四,日志和录包功能是排查问题的利器,一定要养成习惯。
- 第五,碰到问题,先怀疑硬件,再怀疑通信,最后才查算法,因为硬件和通信问题占了机器人大大小小问题的一大半。
机器人这个方向,入门门槛其实没有想象中高。计算机科学提供的是系统思维和算法工具,自动化提供的是控制理论和工程实践,两者缺一不可。只要你愿意花几天时间坐在地板上拧螺丝、焊线、调参,亲眼看着自己组装的机器人动起来、认路、走到目标点,那种成就感是纯粹的写代码很难替代的。
下一篇我会继续讲机器人专题的进阶内容——底层的电机控制精度优化与传感器标定方法。这些内容是让机器人从"能动"到"动得好"的分水岭,也是很多竞赛和实际项目中真正的难点所在。如果你已经跑通了一台轮式机器人的建图导航,下一篇的内容应该正合你的进度。