质心跟随实现机器跟线走

133 阅读2分钟

GitHub链接

1. 解决方案介绍

关键实现要点:

  • 目标:使机器人能够自主巡线
  • 核心理念:在线上检测并创建一个"球"供机器人跟随 - 这就是质心检测
  • 技术实现:使用OpenCV进行基于颜色的图像处理识别
  • 特殊功能:包含避障和其他特殊情况处理

2. 解决方案框架和流程

图片描述

图片描述

3. 质心检测原理

3.1 二值化处理

  • 图像仅包含黄色和黑色
  • 将图像转换为二值矩阵:黑色表示"0",黄色表示"1"
  • 二值化处理便于后续数学计算

图片描述

3.2 图像矩计算

在黄色区域中,计算以下内容:

  • 零阶矩(M00):表示总面积
  • 一阶矩(M10, M01):x轴和y轴的加权和

计算公式:

M00=I(x,y)M_{00} = \sum\sum I(x,y)

M10=xI(x,y)M_{10} = \sum\sum x \cdot I(x,y)

M01=yI(x,y)M_{01} = \sum\sum y \cdot I(x,y)

3.3 质心坐标计算

使用计算得到的矩,我们可以获得黄色区域的质心坐标(cx, cy):

cx=M10M00cx = \frac{M_{10}}{M_{00}}

cy=M01M00cy = \frac{M_{01}}{M_{00}}

图片描述

图片描述

4. 运动控制实现

4.1 误差计算

为确保准确巡线,计算质心与图像中心的误差:

error=cxwidth2error = cx - \frac{width}{2}

其中:

  • cx:检测到的质心x坐标
  • width:图像宽度
  • error:与中心的偏差

图片描述

4.2 P控制器

基于实际测试,仅使用P控制器就能达到良好的控制效果:

angularspeed=Kperrorangular_speed = -K_p \cdot error

注意事项:

  • 使用简单的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. 系统局限性

  • 颜色识别限制:
    • 仅支持特定颜色线条检测
    • 对多色线条或实际道路存在挑战
  • 避障约束:
    • 避障过程中可能丢失原始线条
    • 缺乏线条记忆和重定位能力