二哈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
取值范围:
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耗电)单独供电。
【成果展示】
https://www.bilibili.com/video/BV1gDxXzJEnV/?share_source=copy_web【结语】
通过“三段区间→P→PI”的递进调试,我们不仅得到了一辆会“咬人”的小履带车,更在 Mind+ 的可视化环境里把抽象的 PID 公式变成了肉眼可见的曲线。希望这篇文章能为正在做视觉跟随的同学提供一条“不踩坑”的捷径,也欢迎你把改进后的代码回传到社区,一起让小车“跟”得更稳、“跟”得更远!
页:
[1]