26| 0
|
二哈2——“如影随形”PI视觉跟随履带车 |
本帖最后由 云天 于 2025-10-8 17:22 编辑 【项目简介】 本项目基于 Arduino UNO + L298N 双路电机驱动板,搭配 DFRobot HuskyLens 2 AI 视觉传感器,实现“看得见”的履带小车。通过 HuskyLens2 内置的“人体姿态识别”算法,实时获取人物在画面中的中心坐标 (X, Y) 以及人体框高/宽。整套控制系统采用 PI 算法: 1. 水平方向以画面中心 X=320 为基准,计算误差后输出差速 PWM,使车头始终“盯人”; 2. 深度方向以人体框高、宽作为“距离”参考,当目标小于安全阈值时,主动前进;大于阈值时,原地待命。 整个开发过程在 Mind+ 图形化环境中完成,分三阶段递进调试,既适合新手理解 PID 思想,又能直接落地为“如影随形”的跟随小车。 ![]() 1. Arduino UNO R3 ×1 +IO扩展板 2. L298N 双路电机驱动板 ×1 3. 履带小车底盘(带 2×TT 电机) ×1 4. HuskyLens 2 人工智能摄像头 ×1 5. 7.4 V 2200 mAh 锂电池组 ×2 (分别给L289N和Arduino供电) 7. 杜邦线、螺丝、魔术扎带若干 【硬件连线】 - 电机接口:左电机 → L298N OUT1/OUT2;右电机 → OUT3/OUT4。 - 电源接口:电池+ → L298N +12 V;电池– → L298N GND;并与Arduino共地。 - 信号接口: – HuskyLens SDA → A4,SCL → A5(I²C 通信) – L298N 输入端:IN1~IN4 分别接 D7、D8、D9、D10(Mind+ 图形块默认引脚)。 – PWM 调速:ENA→D5,ENB→D3(支持 0~255 级调速)。 ![]() 【软件环境】 Mind+ v2.0版本,主控选择“Arduino UNO”,扩展库加载“HuskyLens2”。图形块可转 Arduino C,方便后续迁移到 VSCode/PlatformIO。 ![]() ![]() 1. 误差定义 error = X_center – 320 取值范围:[0, 640] 2. 比例项 P Kp = 250 / 320 ≈ 0.78 Vp_turn = Kp × error 直接决定小车的“瞬时”转向力度。 3. 积分项 I integral = integral + error × dt (dt 在 Mind+ 主循环里近似为 20 ms) Ki 取 0.0002 (根据个人小车实际情况进行调整) Vi_turn = Ki × integral 作用:消除“差一点就正”的稳定误差,防止小车在目标前方左右摇摆。 4. 抗积分饱和 当 |integral| > 5000 时强制归零,避免电池低压或人为抱起小车时积分暴走。 5. 深度方向策略 当人体框高度 > 400 像素 或 宽度 > 300 像素,判定“过近”,原地待命; 仅执行转向,不前进。 否则,判定“过远”,直线前进; 【三阶段调试日志】 阶段一:三段区间 控制 - 代码:if(X<280) 左转; if(X>360) 右转; 否则刹车。 - 现象:小车像“磕头机”,左右猛拐,无法静止。 ![]() 阶段二:纯比例 P - 现象:振荡幅度明显减小,但车头有可能始终偏离目标 10~15°,存在稳态误差。 ![]() 阶段三:PI 合击 - 加入积分项后,稳态误差在 3 s 内收敛到 ±2°,即使地面摩擦力不均也能保持“盯人”。 ![]() - 深度方向策略叠加后,小车在 1.5~3 m 范围内自动保持“社交距离”,人物后退它跟随,人物靠近它停止。 ![]() 【关键参数整定表】 Kp = 0.78,Ki = 0.0002,采样周期 T ≈ 20 ms,积分限幅 ±5000,PWM 基速 30/255。 【常见问题 FAQ】 Q1. 电池电压掉到 6 V 以下,小车无力? A:L298N 的 5 V 逻辑端会随电池下降而降低,导致 HuskyLens 重启。务必给 Arduino UNO(HuskyLens2耗电)单独供电。 【成果展示】 通过“三段区间→P→PI”的递进调试,我们不仅得到了一辆会“咬人”的小履带车,更在 Mind+ 的可视化环境里把抽象的 PID 公式变成了肉眼可见的曲线。希望这篇文章能为正在做视觉跟随的同学提供一条“不踩坑”的捷径,也欢迎你把改进后的代码回传到社区,一起让小车“跟”得更稳、“跟”得更远! |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed