ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

智能小车设计方案:从硬件选型到主控程序与调参避坑全解析

智能小车设计方案:从硬件选型到主控程序与调参避坑全解析 做智能小车十个人里有八个第一反应是上网买一套散件回来拼另外两个会直接翻单片机的例程改一改。结果往往是车能跑但换个场景就翻车地上有根黑线就乱冲墙稍微近点就死转电池一掉压直接复位重启。这篇智能小车设计方案不是组装教程也不是单纯贴代码。我想把整个设计链路拆开讲清楚——从需求分层、硬件选型、底盘动力匹配到感知模块怎么排布、主控程序怎么写才不容易崩再到实测中真正会遇到的调参问题。无论你是在准备课程设计、校级比赛还是纯粹想DIY一辆能玩的小车这篇文章都能帮你少走很多弯路。1. 开局前的知识清单明确你要做的是一台什么样的车1.1 智能小车的本质是一套嵌入式实时系统很多人做小车容易陷入“堆功能”的误区——看到超声波觉得要加看到摄像头也想上最后线束缠成一团代码里上百个状态标志位。我自己的体会是动手之前先想清楚一个框架一辆智能小车无论多复杂永远逃不开四个层。感知层超声波测距、红外循迹、陀螺仪姿态、编码器测速负责把物理世界转成电信号。决策层主控芯片MCU根据感知数据跑算法逻辑输出控制指令。执行层电机驱动板、直流电机、舵机等把指令变成轮子转动。供电层电池、稳压模块、滤波电容给前面所有层提供干净稳定的电源。这四个层缺一不可而且大部分翻车事故都出在供电层——不是算法不行是电源扛不住电机的瞬时电流导致MCU复位。你可以把人脑的运作方式类比过来眼睛是感知层大脑是决策层手脚是执行层心脏和血管是供电层。做方案设计时每加一个功能模块都要同时问自己三个问题它由谁供电它和主控怎么通信它会不会抢CPU时间能把这三个问题答清楚方案基本就站得住脚了。1.2 核心硬件清单与选型理由我不建议一上来就列几十个模块。第一版方案越简单越好把主链路跑通再扩展。以下是我后来复盘的推荐配置按“稳定优先、成本可控”的原则选型功能推荐器件通用型号选型理由主控STM32F103C8T6或兼容开发板主频72MHz有足够定时器和PWM通道资料多IO够用电机带减速箱的TT马达×2便宜、扭矩适中1:48减速比适合室内速度驱动TB6612FNG或DRV8833相比L298N压降低、发热小能输出PWM调速超声波HC-SR04测距范围2cm~400cm10块钱左右精度足够避障循迹TCRT5000红外反射模块×2~4对黑白灰度反射差异敏感数字输出调阈值方便姿态MPU6050六轴可测加速度和角速度用于走直线校正和转向角积分测速霍尔编码器版TT马达编码器接定时器外部中断能测轮速做闭环控制底盘亚克力或3D打印双层板轻、好打孔双层结构方便固定驱动板和电池电池两节18650锂电池串联7.4V容量和放电倍率平衡经降压模块给主控供电选STM32而不是Arduino核心原因不是性能差距那么大而是学习深度。用Arduino确实上手快但很多细节被框架隐藏了比如定时器配置、中断优先级、PWM频率选择出了问题反而难排查。用STM32标准库或HAL库写虽然第一天多花两个小时但后面每踩一个坑都是在涨真本事。1.3 需求分层把功能拆成V1、V2、V3做方案最忌讳“一步到位”。我在项目里采用版本递进的方式每版都能单独跑通V1基础版双电机差速驱动 红外循迹 手动遥控串口或蓝牙目标是能稳定沿黑线行驶不冲出赛道。V2避障版在V1基础上增加超声波传感器和避障状态机目标是遇到障碍物能自主绕行后回归循迹。V3进阶版增加编码器测速闭环、陀螺仪方向校正、摄像头视觉识别或简单SLAM适合参加比赛或进一步做科研。每一版都是上一版的自然延伸。先让V1跑一个星期把电池、接线、PWM频率这些底子打牢再动V2。否则你会在调试时出现一个经典困境车跑歪了分不清是循迹传感器没调好还是电机速度差太大还是电压不稳。版本越简单变量越少问题越好定位。2. 底盘与动力电机选型、驱动电路与调速原理2.1 电机选型的核心矛盾是转速与扭矩小车上最容易被忽略的参数是减速比。同样一个马达不带减速箱时转速可以到每分钟几千转但扭矩小到用手就能捏住轴加了减速箱后转速降下来了扭矩却上去了车才能正常爬坡和起步。我做了一个小测试用裸轴马达驱动车轮车在平整木地板上勉强能起步但遇到地毯边缘直接卡死换成1:48减速比的带减速箱马达后同样的电压爬小坡完全没压力。所以选电机一定要算一下最终的车速和驱动力。粗略估算方法假设轮径65mm减速比1:48马达满速约每分钟240转那么车轮转速约每分钟240/485转对应线速度≈π×0.065m×5≈1.0m/s。这个速度对室内小车刚好合适——太快了传感器来不及反应太慢了又没有“智能”的感觉。2.2 电机驱动模块对比L298N为什么不适合后来者很多人入门时被推荐L298N我的建议是能不用就不用尤其是电池电压不高的场景。原因看数据就明白参数L298NTB6612FNGDRV8833导通压降约1.5V~2V约0.5V约0.3V最大电流2A1.2A1.5A驱动方式双H桥双H桥双H桥发热较大小小接口复杂度需要跳线帽和使能端6根信号线6根信号线7.4V的电池经过L298N后到电机两端可能只剩5.5V左右电机直接没力而且模块烫得能煎蛋。TB6612和DRV8833的导通损耗小很多同样7.4V供电几乎没有明显压降。我第一次用L298N时候还以为是电池不行换了一组新的18650依旧无力后来用万用表量电机端电压才发现是驱动板吃掉太多电压。从那以后我对驱动选型就一个标准用低压差MOS管方案的模块。2.3 PWM调速占空比决定有效电压频率决定手感调速的思路不是调电压而是靠PWM脉冲宽度调制控制“通电和断电”的时间比例。举个生活化的例子水龙头如果只让开一半时间、关一半时间那么平均水流就是全开的一半。PWM的“占空比”就是这个时间比例比如占空比50%表示一个周期内高电平占一半。对于电机来说等效电压≈电源电压×占空比。代码上常用定时器输出PWM核心参数有两个频率和占空比。占空比好理解频率反而容易被人忽略。频率太低时电机会发出明显的“嗡嗡”声甚至一顿一顿地转频率太高时驱动芯片的开关损耗增加也会发热。我实测下来5kHz到20kHz之间比较合适听不到明显噪声电机响应也线性。代码示例基于STM32的HAL库// 假设已初始化TIM2的Channel1为PWM输出 // 设置占空比为25%ARR999, CCR250 __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, 250); HAL_TIM_PWM_Start(htim2, TIM_CHANNEL_1);2.4 转向方式首选差速驱动而非阿克曼转向小车转向有两大流派一种是像汽车那样的阿克曼转向前轮转角度后轮驱动另一种是坦克式差速转向左右轮速度不同就形成曲线运动。对于室内小车我强烈建议用差速驱动。原因很直接机械结构简单不用管前轮转向连杆的虚位转向半径甚至可以做得很小——左轮正转右轮反转车可以原地转圈。而阿克曼转向的最小转弯半径受轮距和最大转角限制在狭窄赛道里非常吃亏。差速转向的几何关系也很清晰设轮距为L左轮速度为V_left右轮速度为V_right则瞬时转向半径R ≈ (L/2)×(V_right V_left)/(V_right - V_left)。左右轮速度相等时分母为0车走直线左右轮速度方向相反时车原地旋转。所以在代码里调整转弯强度其实就是给左右轮分别乘以一个比例系数。2.5 电源分配主控与电机必须分开供电这是我最想强调的一点。很多人把电池直接并联给电机驱动板和单片机供电结果一启动电机瞬间大电流把电源电压拉低单片机当场复位。解决方法是分级供电电池7.4V→ 驱动板电源输入端直接给电机供电。电池7.4V→ 降压模块AMS1117-5.0或DC-DC降压至5V→ 给主控板和传感器供电。同时在电源两端并联一大一小两个电容1000μF电解电容吸收电机启动的浪涌电流0.1μF陶瓷电容滤高频干扰。我实测过加了电容之后单片机复位问题基本消失超声波偶尔的误触发也少了很多。3. 感知模块选型与排布超声波、红外循迹和陀螺仪的实测取舍3.1 超声波模块是避障主力但别忽略盲区和测量角度HC-SR04的工作原理是主控给Trig引脚一个10μs以上的高电平脉冲模块自动发射超声波收到回波后把Echo引脚拉高Echo维持高电平的时间就是声音往返的总时间。距离计算公式很简单距离 (cm) 高电平时间(μs) / 58为什么除以58因为声速约340m/s往返时间除以2得到单程时间再乘以声速。比如Echo高电平持续时间约1160μs距离就是1160/5820cm。这个公式实测非常准。但是有坑HC-SR04的盲区大约2cm也就是说障碍物贴到传感器2cm以内时测量值反而可能跳变到最大值导致避障失效。所以安装时最好让传感器突出车头3cm以上测到障碍时留出制动距离。另一个问题是测量角度窄——传感器对正前方的障碍物最灵敏斜着来的墙面可能测不到。所以做避障时不要只装一个超声波前方120°范围内至少分布两到三个或者让超声波云台左右扫动。我的V2方案是固定安装左前、右前两个超声波中间位置留给循迹传感器和摄像头实测比单个传感器灵活得多。3.2 红外循迹模块的阈值调节不是装上就能用TCRT5000模块本质上是一个红外发射管配一个红外接收管它发出红外线打到地面反射回来被接收端检测到。白色表面反射强输出高电平黑色表面吸光输出低电平。很多新手装好模块后直接跑发现车到了黑线就乱扭其实是没调对阈值。模块板子上通常有一颗电位器旋转可以改变比较器翻转阈值。调试方法很老套但很有效把模块放在白色地面上用螺丝刀缓慢旋转电位器直到模块上的指示灯刚好从不亮变亮再把模块放到黑色线条上确认指示灯熄灭。开机状态下实际距离要模拟小车行驶高度不能拿着模块在手上调。我这个项目里安装高度在1cm到1.5cm之间再高就走样了。循迹传感器的排布也讲究左右两组传感器之间的距离要等于赛道上黑线的宽度或者略宽一点这样车压线时左右传感器的输出组合才有效。3.3 陀螺仪和编码器从“瞎走直线”到“感知姿态”如果只是做个循迹小车不加陀螺仪也跑得起来但如果你想让它走更长的直线或者更平滑地转弯陀螺仪就变得很重要。MPU6050能同时输出三轴加速度和三轴角速度关键问题是原始数据有零漂——静止时陀螺仪Z轴角速度也不是0积分出来的角度会慢慢飘走。处理办法有两种一是用MPU6050自带的DMP库直接在模块内部算出四元数再转欧拉角省心省力二是在主控里做互补滤波或卡尔曼滤波。我实际做的时候先用官方DMP库后来发现DMP库占用内存不小而且部分兼容芯片初始化会失败就换成了互补滤波代码只花了几十行效果也够用float angle 0.98f * (angle gyroZ * dt) 0.02f * accelAngle;这个公式的思路是陀螺仪短期准但会漂加速度计长期准但有噪声所以把两者按权重融合。0.98和0.02的比例可以调如果你发现角度跟随慢就把0.98调大一点。编码器就更直接了。带霍尔编码器的电机轮子每转一圈会输出若干脉冲主控用定时器外部中断模式数脉冲就知道轮子实际转了多少。有了轮速数据就能做闭环控制设定目标速度PID调节PWM输出让左右轮速度一致。我第一次做闭环时的感受是开环时左右轮哪怕只是轮胎直径差0.5mm车走10米就能偏出一个车道闭环后直线性能脱胎换骨。这翻体验让我理解了那句老话——传感器不是拿来炫耀的是拿来减少系统不确定性的。3.4 传感器数量不是越多越好排布方向才是关键这里得泼一盆冷水小车又不是积木堆传感器会让主控处理不过来让接线复杂化最后反而降低稳定性。选型时按功能倒推要循迹就至少2到4个红外循迹模块要避障就至少2个超声波要走直线校准就加一个MPU6050和编码器要视觉就加一个摄像头。每一个传感器都要明确“它服务哪个状态、交给哪个算法用”。否则就是重复劳动。安装方向上也有讲究超声波要朝前不朝下最好略微向下倾斜5°到10°这样能更早感知到矮小障碍物循迹模块则必须正对地面不能歪。用扎带或3D打印支架固定好之后在正式测试前先用手动遥控把车从赛道上推一遍观察所有传感器的输出是否和目标一致这一步能省掉后面大量的玄学debug时间。4. 主控程序架构状态机、中断与时序调度的避坑设计4.1 为什么第一件事是画状态机而不是写循环有很多人写小车程序喜欢用一长串if-else比如if前方有障碍就左转else if左边黑线就右转。功能少的时候能跑功能一多就乱了——转向过程中还要检测障碍避障又要判断是否回到循迹线优先级根本理不清。我的建议是开工前先画一张状态迁移表别急着敲代码。以V2避障版为例最少要定义这么几个状态IDLE等待启动指令所有输出关闭。TRACE循迹模式根据循迹传感器偏差调整左右轮速度。AVOID障碍物检测到进入避障动作急停、左转或右转、前进探查。MANUAL手动遥控模式接收蓝牙或串口指令屏蔽自动避障逻辑。RETURN电量过低或收到返回指令原路返回起点。状态之间要有明确的触发条件例如从TRACE进入AVOID的条件是“前向超声波距离 20cm 且持续了50ms”。加50ms持续判断是为了防抖——短于一发的噪声信号不会让车误动作。从AVOID回到TRACE的条件是“转入角度达到90°且前方距离 30cm”。把条件写清楚之后代码就变成了一个switch-case的骨架逻辑非常清晰。4.2 中断、定时器与主循环的职责分工小车程序的经典死法之一是在主循环里等超声波超声波的Echo信号一边等一边把电机控制也卡住了。传感器的读取、电机控制、状态更新其实对实时性要求不同所以不能全堆在一个循环里。我的分工方式是外部中断编码器脉冲计数每次脉冲触发一次只做 counter不做任何复杂计算。定时器中断每1ms产生一次系统心跳用于速度环PID计算和状态机节拍管理。主循环慢速任务比如超声波测距因为它要等待Echo天然是阻塞型、蓝牙数据解析、OLED显示刷新。PWM输出由定时器硬件自动完成不需要CPU干预。这样分工的好处是CPU在不同速率的任务之间不会互相卡死。比如超声波主循环里阻塞的2ms不影响定时器中断里跑速度环电机依然平稳输出。实测中我发现只要把编码器中断优先级设为最高速度环周期稳定在1ms车跑起来就非常跟手。4.3 一段能跑通的核心控制伪代码下面是我V2版简化后的主控框架按实际项目风格缩写方便你理解状态机的具体写法// 主函数 int main(void) { // 初始化外设、传感器、PWM、串口 setup(); uint8_t state IDLE; while(1) { // 每50ms刷新一次传感器数据 if (flag_50ms) { distance_front read_ultrasonic(ULTRASONIC_FRONT); line_left read_tracing(TRACE_LEFT); line_right read_tracing(TRACE_RIGHT); flag_50ms 0; } switch(state) { case IDLE: if (start_command_received) state TRACE; break; case TRACE: // 循迹策略左右传感器都不压线则直行 // 左传感器压线则右轮加速右传感器压线则左轮加速 if (distance_front 20) { state AVOID; avoid_timer 0; } break; case AVOID: avoid_timer 10; // 先停车左转350ms再直行500ms if (avoid_timer 350) { set_motor(LEFT, -50); set_motor(RIGHT, 50); } else if (avoid_timer 850) { set_motor(LEFT, 40); set_motor(RIGHT, 40); } else { state TRACE; } break; case MANUAL: // 解析蓝牙指令直接给PWM赋值 break; } } }这套代码虽然简陋但跑起来很稳。原因就在于状态机的每个分支都只处理一件事时序上不会互相干扰。等你把功能扩充到视觉循迹时只需要在TRACE状态里增加一个视觉偏差输入不需要重写整个架构。4.4 传感器数据别直接用滑动窗口与限幅滤波直接使用传感器原始数据会让小车表现得像个神经质——差一点点值就猛地打方向车头左右乱晃超声波偶尔飘一个超出范围的异常值避障就误触发。处理手法有两种都很便宜一是限幅滤波。只接受“与上一次结果差不超过某个阈值”的数据比如相邻两次超声波测距差值超过30cm就算异常丢弃本次数据沿用上次的值。二是滑动窗口平均。取最近3到5次数据求和平均能有效消除随机噪声。我常用的组合是“限幅滑动平均”先限幅再用窗口滤波uint16_t ultrasonic_filtered(uint16_t new_value) { static uint16_t buffer[5]; static uint8_t index 0; // 限幅与上一次相差太大则丢弃 if (abs((int)new_value - buffer[(index 4) % 5]) 30) return buffer[(index 4) % 5]; buffer[index] new_value; index (index 1) % 5; uint32_t sum 0; for (uint8_t i 0; i 5; i) sum buffer[i]; return sum / 5; }这个滤波函数让我少掉了很多头发。调通后小车行驶明显“稳”了不是数据本身有多精准而是控制量不再频繁跳变。5. 进阶玩法蓝牙遥控、摄像头循迹与自主回充的扩展思路5.1 蓝牙模块与通信协议设计给小车加遥控最低成本方案是蓝牙串口模块HC-05/06。HC-05主从一体HC-06只能做从机如果只是手机控制方面HC-06就够了。模块和主控之间就是UART发指令字符串主控解析后控制状态切换。通信协议别乱起名直接用最简单健壮的格式帧头 命令类型 数值 结束符。比如“CMD:LINE:LEFT:SPEED:80”这种虽然看着啰嗦但解析时不容易错。我在这个项目里用了一个更短的协议单字符命令例如‘F’表示前进‘L’表示左转‘S’表示停止再加两个数字表示速度百分比。代码层面用串口接收中断把数据存入环形缓冲区主循环再逐字节解析。注意别在主循环里用阻塞式的HAL_UART_Receive阻塞接收那样会卡住状态机。5.2 摄像头视觉循迹从OpenMV到轻量方案当红外循迹在复杂光照或彩线赛道上不够用的时候就该上视觉方案了。常见的选择是OpenMV摄像头或树莓派加普通USB摄像头。OpenMV的优势是内置了图像处理库直接输出色块中心坐标主控只需要接收UART或I2C传来的目标偏移值再做PID转向控制。视觉循迹的算法核心特别简单把图像上一行或者几行的像素点做一个二维坐标加权平均黑色线在图像中的重心位置和目标中心位置的差值就是偏差E。然后转向控制量 Kp×E Kd×(E - E_last)把这个控制量叠加到左右轮PWM上。摄像头安装高度和俯仰角决定了能看到的画面范围装得太高线在图像里太小太低又看不到远处。我的经验是安装高度15cm到20cm略微俯视巡检地面让黑线出现在图像底部三分之一处。这里说一个容易翻车的细节摄像头的帧率一般只有30fps左右换算下来每帧33ms这个延迟在小车速度过快时会明显导致震荡。所以视觉循迹的车速不能和红外循迹一样快要么降速要么对图像做前瞻预测不然就是蛇形走位。5.3 自动回充与低成本SLAM的边界在哪里自动回充是很多智能小车最后会碰到的功能——玩着玩着没电了如果能自己找充电桩充电体验会完整很多。最朴素的实现方式是用红外发射管在充电桩上发射定向红外信号小车上装一个红外接收头接收到信号后调整方向向信标移动最后靠物理导向槽对接充电触点。这个方案的难点不在于传感器而在于对接时的低速微调需要把速度PID调得非常柔和。再往上走的自主建图导航就进入SLAM领域了。实用派的做法是给小车加一个低成本二维激光雷达在ROS机器人操作系统框架下跑gmapping 或cartographer算法生成二维栅格地图再用A*或DWA算法做路径规划。但我要提醒一句这条路的学习曲线非常陡成本也不低。如果是为了比赛先把激光雷达的驱动、里程计标定、IMU融合这三件事做好比折腾一大堆理论要实在得多。先有稳定的底盘和准确的定位才有后续的智能导航这跟建房子先打地基是一个道理。6. 实测调参与典型翻车点从打滑、抖动到追线丢失6.1 六类高频故障的排查步骤我在跑车过程中收集了一些具备代表性的问题按“现象—原因—定位—解决”列出来你可以直接当排查手册用现象可能原因定位方法解决方式电机不转驱动板使能引脚没拉高PWM通道没启动万用表量电机两端电压检查IN引脚逻辑和PWM启动代码上电后MCU反复重启电机启动电流拉低系统电压示波器或万用表观察VCC跌落分电源供电加1000μF电容循迹时左右乱扭循迹传感器距离地面太高用示波器量模块输出波形降低安装高度重置电位器阈值超声波偶发最大值误报供电噪声干扰Echo信号ECHO引脚用逻辑分析仪看毛刺加RC滤波或在软件里做限幅转向后找不到黑线转向时间过长/过短串口打印状态切换时间戳把避障动作改为分段小步逼近蓝牙指令时灵时不灵波特率配错或协议无帧头回环测试统一波特率接收异常时丢弃错误帧6.2 避障策略的实测参数调整避障策略不能拍脑袋写死调参顺序应该是先测电机再测转向时间最后设传感器阈值。我的V2版在普通木地板上实测的起始参数如下车速PWM占空比40%约0.35m/s障碍触发距离20cm避障动作急停100ms左转350ms再直行500ms然后恢复循迹但换了一块地砖间隙较大的地面后同样的左转时间会让车转向过头导致回到循迹后追不上黑线。原因是地砖缝隙会让轮子短暂打滑。解决办法是把单次大角度转向拆成多段左转100ms前进100ms左转100ms……边转边看传感器直到前方距离持续大于30cm再退出。这种“分段逼近”策略虽然动作没那么利落但适应性强得多。如果你要参加比赛建议把这套参数做成可调变量存进EEPROM现场改参数不用重新烧录固件。6.3 循迹十字路口和断线处理循迹小车遇到十字路口是个经典难题四个传感器全部压黑线车如果继续直行就冲出去了。我的处理逻辑很简单——先判断优先级。如果现有任务只是“沿黑线走”那么十字路口处默认直行如果任务是“找黑线并追踪”则十字路口要停车确认。比赛里如果有指定路线通常会有“左转/右转”的标志位指令配合例程使用。断线处理就更常见了。小车速度稍快在传感器间隙处短暂看不到黑线车就会不知所措。我用的方法是记忆上次有效偏差如果传感器全白且持续时间小于200ms就沿用上次的转向方向和强度继续打方向相当于“凭记忆走一截”一旦重新看到黑线立即切回正常循迹。这个200ms的值很关键太短了跟不上线太长了会飞出去。你用串口监控实测车跑得越慢这个值可以越大。6.4 热成像测温与驱动板发热驱动模块发热是必考题。跑了几分钟之后摸一下驱动板如果烫到不能持续按住那要么电流太大、要么散热不够。TB6612正常小负载下温升不明显DRV8833也不太热。如果你用的是L298N那发热是常态。降低发热的办法一是提高PWM频率让MOS管开关损耗均摊二是确保电源线足够粗别用细杜邦线硬扛好几安培的电流三是给驱动板加一片小型铝散热片。我还试过把PWM输出频率从1kHz提到10kHz发热明显改善电机噪音也变小了。7. 物料清单、成本核算与版本演进建议7.1 分版本物料清单参考以下是不含视觉和高阶传感器的基础物料价格区间方便你做预算时心里有数物料V1基础版V2避障版V3进阶版主控板20-30元20-30元40-80元电机编码器×240-80元40-80元80-150元电机驱动15-30元15-30元25-50元超声波模块—10-30元20-50元循迹模块×2-410-30元10-30元20-40元MPU6050—10-20元15-30元摄像头/激光雷达——100-500元底盘轮子30-60元30-60元50-100元电池及充电50-80元50-80元80-120元线材、开关、降压10-20元15-30元20-40元合计估算175-330元200-430元430-1110元预算浮动很大主要看你手里有没有现成的电池、电机和模块。很多器件是通用的V3版里有一部分弯路可以靠买二手或复用旧件来省钱。比如激光雷达买个入门款的二手也能跑只要标定认真做效果并没有差太多。7.2 版本演进路径每一版怎么改才算有效我强烈不建议跳版本也就是不带着V1的底盘直接上V3的软件中间一定要把V2的避障和状态机跑熟。实践中我的路径是这样的V1用面包板杜邦线搭电路花两天把电机PID和循迹逻辑跑通。这个阶段重点不是稳定而是熟悉烧录、调试、打印日志的整套流程。V2把电路焊到洞洞板或画PCB固定线束增加超声波避障状态。这个阶段重点是练排查能力用串口把每次避障触发的距离和时间打印出来对照慢放视频找出策略盲区。V3在V2硬件基础上换主控或加协处理器增加视觉采集与图像识别把控制闭环做得更精细。这个阶段重点是算法和系统集成不再纠结于接线和电源干扰。每次升级只动一个变量。不要同时换主控和换电机否则出问题你根本分不清是哪一环先坏的。我在V2升V3那段时间同时换了主控和摄像头调试时出了个LED闪烁的怪问题排查了整整一晚最后发现是不同通信接口的波特率配置冲突。如果不同时换主控这个问题一眼就能定位。7.3 一句最坦诚的建议如果你只让我说一句建议我会说先把一辆只干一件事的小车调到能稳定跑完10圈再去追求那些花哨的功能。稳定性、可复现性、易调试性永远比看起来“智能”重要得多。我在这一路做下来最值钱的东西反而不是车最终能不能避障或者视觉循迹而是那一整套调试排错的思考习惯——从现象推原因从原因找证据再以最小代价去验证。这套方法放在任何嵌入式项目里都通用。如果你也想动手做我建议今天就先把需求分好层确定你是要循迹、避障、遥控还是视觉画一张状态迁移图列一份5项以内的V1物料清单然后直接开焊。别因为没想得足够“全”而不开始做出来第一辆会抖、会闯、会从赛道上飞出去的车你的方案迭代就正式开始了。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表