Skip to content

为无人拖拉机田头区域全覆盖路径规划提供了一套完整的商业化解决方案。经过多轮迭代和优化,最终实现了集成Clothoid曲线、速度规划、曲率约束验证、电子围栏检查等关键特性的生产级路径规划系统。

License

Notifications You must be signed in to change notification settings

qwagrox/field-coverage-path-planning

Repository files navigation

面向商业化两层田间全覆盖路径规划器

English | 简体中文

  • 版本: 3.7.0
  • 作者: tangyong@stmail.ujs.edu.cn,目前就读于江苏大学农机控制理论与工程博士
  • 日期: 2025/10/23

项目概述

本项目旨在为无人拖拉机田间全覆盖路径规划提供了一套完整的商业化解决方案。经过多轮迭代和优化,最终实现了两层(多圈覆盖)路径规划架构,集成了Clothoid曲线、速度规划、曲率约束验证、电子围栏检查、静态障碍物避障、精确反向填充、多机协同规划等关键特性的生产级路径规划系统。

🎯 V3.7.0 核心突破

两层(多圈覆盖)路径规划架构

V3.5版本彻底重构了路径规划的顶层设计,实现了用户定义的"真正的两层规划":

特性 V3.x (之前版本) V3.7 (当前版本) 改进说明
规划层级 错误的多层田头 真正的两层 主作业区域 + 多圈田头
田头宽度 经验值 R (转弯半径) 确保转弯不超出边界
第二层路径 单圈路径 多圈路径 完整覆盖宽度为R的田头区域
边界违规 可能超出 0个点 修复了第一层转弯超出边界的问题
田头覆盖率 不确定 100.0% 完美覆盖
倒车逻辑 经验值 切线方向倒车 精确计算倒车方向和距离
运动学约束 ✅ 0% 违规 0% 违规 完美维持
TSP优化 完美支持

关键改进

1. 第一层:主作业区域安全转弯

  • 直线段端点距离主作业边界R,留出转弯空间
  • 转弯中心在主作业边界处,确保转弯路径不超出田地边界
  • 实现0边界违规

2. 第二层:多圈田头完整覆盖

  • 自动计算所需圈数:num_loops = ceil(R / W)
  • 从距离田地边界W/2处开始,向内生成多圈路径
  • 实现100%田头覆盖率

3. 精确反向填充

  • 只在最外圈的四个角落进行转弯+倒车
  • 倒车方向:转弯结束时的切线方向的反向
  • 倒车距离:从转弯结束点到田地边界的精确距离
  • 转角覆盖率改进+3.2%

4. 智能起点选择 (Smart Start Point Selection)

  • 用户可以指定拖拉机的停放位置(起点)
  • 系统自动从4个可能的田头路径起点中选择距离停放位置最近的角落
  • 最小化非作业路径长度,提高作业效率

5. 支持倾斜的矩形和平行四边形全覆盖路径规划

核心特性

✅ 1. 两层(多圈)规划架构 (V3.5)

实现状态: 完全集成

第一层:主作业区域

  • 目标:覆盖田地中心的大部分区域
  • 方法:在缩小的矩形区域内生成U型往复路径
  • 边界:距离田地边界R(转弯半径)
  • 安全转弯:转弯中心在主作业边界内部,确保不超出田地边界

第二层:田头覆盖

  • 目标:覆盖第一层留下的田头区域(宽度为R)
  • 方法:生成多圈闭合路径(通常3圈)
  • 路径位置:从距离田地边界W/2处开始
  • 转弯与倒车:只在最外圈的四个角落执行转弯+倒车

效果:

  • 田头覆盖率:100.0%
  • 边界违规:0个点
  • 转角覆盖率改进:+3.2%

✅ 2. 精确反向填充 (V3.5)

实现状态: 完全集成

核心算法:

# 1. 使用Shapely精确计算转角间隙几何
gap = corner_square.difference(turn_coverage)

# 2. 计算倒车方向(转弯结束时的切线方向的反向)
direction = normalize(turn_path[-1] - turn_path[-2])
reverse_direction = -direction

# 3. 计算倒车距离(到田地边界的精确距离)
reverse_length = calculate_distance_to_boundary(
    turn_end_point, reverse_direction, field_boundary
)

# 4. 生成倒车路径
reverse_path = turn_end_point + t * reverse_direction

效果:

  • 倒车方向:精确的切线反向(而非经验值)
  • 倒车距离:精确计算到边界(而非固定值)
  • 转角覆盖率改进:+3.2%

✅ 3. Clothoid曲线(曲率连续)

实现状态: 完全集成

技术细节:

  • 使用回旋曲线(Clothoid)实现曲率连续的平滑过渡
  • 转弯路径: 直线 → Clothoid入弯 → 圆弧 → Clothoid出弯 → 直线
  • 曲率变化: κ(s) = κ₀ + k·s (线性变化)
  • 避免了传统圆弧转弯的曲率突变问题

效果:

  • 车辆可以平滑跟踪路径
  • 减少机械磨损
  • 提高作业舒适性

✅ 4. 完整速度规划(加速/减速/自适应)

实现状态: 完全集成

三遍速度规划算法:

第1遍: 基于曲率和路径类型的速度限制

- 直线段: 最大速度
- 转弯段: v = sqrt(a_lat / κ) × safety_factor
- 倒车段: 2.5 km/h (固定低速)

第2遍: 前向加速度约束

- 确保加速度 ≤ max_longitudinal_accel
- v_next ≤ sqrt(v_prev² + 2·a·Δs)

第3遍: 反向减速度约束

- 确保减速度 ≤ max_longitudinal_accel
- v_prev ≤ sqrt(v_next² + 2·a·Δs)

效果:

  • 主作业: 9 km/h
  • 田头: 2.5-14 km/h 自适应
  • 倒车: 2.5 km/h

✅ 5. 静态障碍物支持 (V3.0)

实现状态: 完全集成

支持的障碍物类型

  • ✅ 矩形障碍物(最常见)
  • ✅ 多边形障碍物(任意凸多边形)
  • ✅ 不规则形状(任意多边形)
  • ✅ 多个障碍物(数量不限)

自动安全裕度

# 扩展距离 = 作业幅宽 / 2
expanded_obs = obs_poly.buffer(vehicle_params.working_width / 2)

效果

  • ✅ 主作业路径自动绕开障碍物
  • ✅ 田头路径也避开障碍物
  • ✅ 100%覆盖可作业区域

✅ 6. 其他关键特性

  • 曲率约束验证: 实时验证路径曲率,确保满足车辆运动学约束
  • 电子围栏边界检查: 确保所有路径点在田地边界内
  • 动态自适应转弯半径: 基于速度和侧向加速度自动计算
  • 自动计算田头宽度: 基于转弯半径自动计算最优田头宽度
  • 自动选择主作业模式: 根据田地长宽比自动选择U型/Ω型

V3.5 测试结果

场景: 中型田地 (500m × 200m)

田地参数:

  • 面积: 10公顷 (150亩)
  • 长宽比: 2.50

自动计算参数:

  • 田头宽度: 8.0m (等于转弯半径)
  • 自适应转弯半径: 8.0m
  • 主作业模式: U型往复
  • 第二层圈数: 3圈

路径规划结果:

  • 主作业路径点数: 1256
  • 田头路径点数: 435 (3圈)
  • 计算耗时: 0.046秒

性能指标:

  • 田头覆盖率: 100.0%
  • 边界违规: 0个点
  • 转角覆盖率改进: +3.2%
  • 侧向加速度违规率: 0.0%

技术架构

两层设计架构

核心理念:固定两层,职责分离

第1层: 主作业区域

  • 根据田地形状自动选择模式(U型/Ω型)
  • 高效往复作业
  • 速度稳定(9 km/h)
  • 转弯不超出田地边界

第2层: 外层田头

  • 多圈环绕覆盖(通常3圈)
  • 使用Clothoid曲线平滑转弯
  • 速度自适应(2.5-14 km/h)
  • 最外圈在4个角落倒车填补

精确反向填充策略

核心思想: 在最外圈的每个角落转弯后,立即倒车填补转弯留下的空隙

步骤:

  1. 沿边前进
  2. 90度转弯(使用Clothoid)
  3. 倒车到田地边界(切线方向的反向)
  4. 继续沿下一条边前进

效果:

  • 转角覆盖率改进: +3.2%
  • 时间成本: 每个角落约15秒,总计1分钟
  • 田头覆盖率: 100.0%

快速开始

环境要求

Python 3.8+
numpy
shapely
matplotlib

安装依赖

pip install numpy shapely matplotlib

基本使用

from multi_layer_planner_v3 import TwoLayerPlannerV36

# 1. 定义车辆参数
vehicle_params = VehicleParams(
    working_width=3.2,           # 作业幅宽 (m)
    min_turn_radius=8.0,         # 最小转弯半径 (m)
    max_work_speed_kmh=9.0,      # 最大作业速度 (km/h)
    max_headland_speed_kmh=14.0  # 最大田头速度 (km/h)
)

# 2. 创建规划器
planner = TwoLayerPlannerV35(
    field_length=500,      # 田地长度 (m)
    field_width=200,       # 田地宽度 (m)
    vehicle=vehicle_params,
    obstacles=[]           # 障碍物列表(可选)
)

# 3. 生成路径
result = planner.plan()

# 4. 获取结果
main_path = result['main_work']['path']        # 主作业路径
main_speeds = result['main_work']['speeds']    # 主作业速度
headland_path = result['headland']['path']     # 田头路径
headland_speeds = result['headland']['speeds'] # 田头速度

# 5. 可视化
planner.visualize_path(result)

带障碍物的使用

# 定义障碍物(顶点坐标列表)
obstacles = [
    # 障碍物1: 水塔 (100m × 100m)
    [(150, 50), (250, 50), (250, 150), (150, 150)],
    
    # 障碍物2: 建筑物 (50m × 50m)
    [(300, 120), (350, 120), (350, 170), (300, 170)]
]

# 创建规划器
planner = TwoLayerPlannerV35(
    field_length=500,
    field_width=200,
    vehicle=vehicle_params,
    obstacles=obstacles  # 传入障碍物
)

# 生成路径(自动避障)
result = planner.plan()

版本历史

V3.6.0 (2025-10-20) - 当前版本

  • ✅ 支持倾斜的矩形和平行四边形全覆盖路径规划

V3.5.1 (2025-10-20)

  • ✅ 智能起点选择 (Smart Start Point Selection)

V3.5.0 (2025-10-20)

  • 重大突破: 实现真正的两层(多圈)规划架构
  • 边界安全: 修复第一层转弯超出边界的问题,实现0边界违规
  • 完整覆盖: 第二层多圈路径,实现100%田头覆盖率
  • 精确反向填充: 切线方向倒车,精确计算倒车距离
  • 性能优化: 计算耗时0.046秒,满足实时规划要求

V3.0.0 (2025-10-19)

  • ✅ 增强静态障碍物处理
  • ✅ 完善Clothoid曲线集成
  • ✅ 优化速度规划算法
  • ✅ 添加曲率约束验证
  • ✅ 实现电子围栏边界检查

V2.0.0

  • ✅ 实现两层路径规划基础架构
  • ✅ 集成Clothoid曲线
  • ✅ 实现基础速度规划

V1.0.0

  • ✅ 实现基础路径规划功能

商业化特性

生产级质量

  • ✅ 完整的运动学约束验证
  • ✅ 电子围栏边界检查
  • ✅ 静态障碍物自动避障
  • ✅ 实时性能(<0.1秒)

易于集成

  • ✅ 清晰的API接口
  • ✅ 完整的文档和示例
  • ✅ 灵活的参数配置

可扩展性

  • ✅ 支持多种田地形状
  • ✅ 支持多种作业模式
  • ✅ 支持自定义车辆参数

后续规划

近期目标

  • 真实车辆测试验证
  • 支持不规则田地边界
  • TSP路径优化(优化非作业路径连接)
  • 动态障碍物支持

中期目标

  • 多车协同作业
  • 实时路径重规划
  • 云端路径规划服务

长期目标

  • AI驱动的路径优化
  • 数字孪生仿真平台
  • 农机作业大数据分析

许可证

MIT License

About

为无人拖拉机田头区域全覆盖路径规划提供了一套完整的商业化解决方案。经过多轮迭代和优化,最终实现了集成Clothoid曲线、速度规划、曲率约束验证、电子围栏检查等关键特性的生产级路径规划系统。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages