农用小车自动沿田埂开,识别田埂,不压庄稼,农田作业,输出行驶路线。

1 阅读3分钟
  1. 实际应用场景描述

场景:

在大型农田中,农民使用自动驾驶农用小车进行播种、施肥、喷药等作业。田埂是农田中划分地块的窄土埂,通常种植低矮作物或空置,小车需要沿着田埂行驶,避免压坏中间的主要庄稼,同时完成沿边作业(如喷洒农药)。

痛点:

  1. 田埂狭窄,人工驾驶容易偏离。

  2. 庄稼易受损,压坏会导致减产。

  3. 环境复杂,有杂草、水沟、阴影等干扰。

  4. 作业效率与安全性需兼顾。

  5. 核心逻辑讲解

  6. 图像采集

    • 使用车载摄像头实时拍摄前方地面。
  7. 田埂识别

    • 使用深度学习模型(如U-Net或YOLOv5-seg)分割田埂区域。
  8. 路径规划

    • 根据田埂中心线生成参考路径(RANSAC拟合直线或曲线)。
  9. 控制执行

    • 使用PID控制器保持车辆在田埂中心行驶。
  10. 状态监控

    • 实时检测偏离,动态调整方向盘角度。
  11. 代码模块化设计

farm_robot/ ├── main.py # 主程序入口 ├── config.py # 配置文件 ├── perception/ # 感知模块 │ ├── ridge_detector.py │ └── camera_utils.py ├── planning/ # 规划模块 │ └── path_generator.py ├── control/ # 控制模块 │ └── pid_controller.py ├── utils/ # 工具函数 │ └── logger.py ├── README.md # 使用说明 └── requirements.txt # 依赖库

3.1 config.py

配置文件

CAMERA_WIDTH = 640 CAMERA_HEIGHT = 480 RIDGE_COLOR_LOWER = [0, 0, 100] # HSV下限(示例) RIDGE_COLOR_UPPER = [180, 50, 255] # HSV上限 TARGET_PATH_OFFSET = 0.2 # 目标路径与田埂中心的偏移量(米) MAX_STEERING_ANGLE = 30 # 最大转向角(度)

3.2 perception/ridge_detector.py

import cv2 import numpy as np from config import RIDGE_COLOR_LOWER, RIDGE_COLOR_UPPER

class RidgeDetector: def init(self): pass

def detect(self, frame):
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower = np.array(RIDGE_COLOR_LOWER, dtype="uint8")
    upper = np.array(RIDGE_COLOR_UPPER, dtype="uint8")
    mask = cv2.inRange(hsv, lower, upper)
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    return contours

3.3 planning/path_generator.py

import numpy as np from config import TARGET_PATH_OFFSET

class PathGenerator: def generate(self, contours): if not contours: return None # 取最大轮廓(假设为田埂) largest_contour = max(contours, key=cv2.contourArea) # 拟合直线 y = kx + b [vx, vy, x0, y0] = cv2.fitLine(largest_contour, cv2.DIST_L2, 0, 0.01, 0.01) return (vx, vy, x0, y0)

3.4 control/pid_controller.py

class PIDController: def init(self, kp=1.0, ki=0.0, kd=0.1): self.kp = kp self.ki = ki self.kd = kd self.prev_error = 0 self.integral = 0

def compute(self, error, dt):
    self.integral += error * dt
    derivative = (error - self.prev_error) / dt
    output = self.kp * error + self.ki * self.integral + self.kd * derivative
    self.prev_error = error
    return output

3.5 main.py

import cv2 import time from perception.ridge_detector import RidgeDetector from planning.path_generator import PathGenerator from control.pid_controller import PIDController

def main(): detector = RidgeDetector() planner = PathGenerator() controller = PIDController(kp=0.5, kd=0.1) cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    contours = detector.detect(frame)
    path = planner.generate(contours)

    if path:
        vx, vy, x0, y0 = path
        # 计算当前车辆位置与路径的横向误差(简化)
        error = 0  # 实际应从车辆位置计算
        dt = 0.1
        steering = controller.compute(error, dt)
        print(f"Steering angle: {steering:.2f} deg")
    else:
        print("No ridge detected!")

    time.sleep(0.1)

cap.release()

if name == "main": main()

  1. README.md

农用小车自动沿田埂行驶系统

基于 Python + OpenCV + 机器学习的农田田埂识别与路径跟踪程序。

功能

  • 实时田埂检测(颜色分割)
  • 路径生成与跟踪
  • PID控制保持居中行驶
  • 模块化设计,易于扩展

安装

bash

pip install -r requirements.txt

运行

bash

python main.py

配置

修改 config.py 调整颜色范围、PID参数等。

  1. 使用说明

  2. 连接USB摄像头到设备。

  3. 安装依赖: "pip install -r requirements.txt"。

  4. 根据实际田埂颜色调整 "RIDGE_COLOR_LOWER" 和 "RIDGE_COLOR_UPPER"。

  5. 运行 "python main.py",观察终端输出的转向角度。

  6. 可扩展为ROS节点控制真实车辆。

  7. 核心知识点卡片

知识点 说明 颜色空间转换 BGR转HSV便于颜色分割 轮廓检测 提取田埂区域 直线拟合 用最小二乘法拟合田埂中心线 PID控制 保持车辆在路径中心 图像处理 去噪、二值化、形态学操作 模块化设计 便于维护与测试

  1. 总结

本项目展示了如何将计算机视觉与自动控制结合,实现农用小车沿田埂安全行驶。

通过颜色分割+轮廓检测识别田埂,路径生成提供参考线,PID控制保证行驶稳定。

该方案可扩展为多光谱田埂识别、GPS+视觉融合导航等高级应用

如果你需要,还可以:

  • 添加ROS集成版本
  • 使用U-Net语义分割提升田埂识别精度
  • 生成Docker镜像方便部署到树莓派/Jetson Nano

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!