1. 解决方案介绍
关键实现要点:
- 目标:使机器人能够自主巡线
- 核心理念:在线上检测并创建一个"球"供机器人跟随 - 这就是质心检测
- 技术实现:使用OpenCV进行基于颜色的图像处理识别
- 特殊功能:包含避障和其他特殊情况处理
2. 解决方案框架和流程
3. 质心检测原理
3.1 二值化处理
- 图像仅包含黄色和黑色
- 将图像转换为二值矩阵:黑色表示"0",黄色表示"1"
- 二值化处理便于后续数学计算
3.2 图像矩计算
在黄色区域中,计算以下内容:
- 零阶矩(M00):表示总面积
- 一阶矩(M10, M01):x轴和y轴的加权和
计算公式:
3.3 质心坐标计算
使用计算得到的矩,我们可以获得黄色区域的质心坐标(cx, cy):
4. 运动控制实现
4.1 误差计算
为确保准确巡线,计算质心与图像中心的误差:
其中:
- cx:检测到的质心x坐标
- width:图像宽度
- error:与中心的偏差
4.2 P控制器
基于实际测试,仅使用P控制器就能达到良好的控制效果:
注意事项:
- 使用简单的P控制而不是完整的PID控制
- 测试表明在此场景下单独使用P控制效果更好
- 可以通过调整Kp值来调节机器人的响应灵敏度
5. 多状态决策实现
5.1 状态定义
系统定义了三个基本状态:
- 状态1(巡线):黄线检测状态
- 状态2(避障):障碍物检测状态
- 状态3(探索):探索状态
5.2 状态转换逻辑
if detect_line():
# 检测到线,使用P控制跟随质心
follow_centroid()
elif not (detect_line() or detect_obstacle() or is_exploring):
# 未检测到线且不在探索模式,旋转搜索
rotate_search()
if search_timeout():
set_explore_mode(True)
elif not (detect_line() or detect_obstacle()) and is_exploring:
# 探索模式,向前移动寻找目标
move_forward()
else:
# 遇到障碍物,使用左手法则进行避障
left_wall_follower()
6. 系统局限性
- 颜色识别限制:
- 仅支持特定颜色线条检测
- 对多色线条或实际道路存在挑战
- 避障约束:
- 避障过程中可能丢失原始线条
- 缺乏线条记忆和重定位能力