移动机器人农田机器人全覆盖路径规划

鉴于目前网上对于全覆盖路径规划方面的资料比较少,本次博客内容主要分享下拖拉机在农田里面作业的路径规划,以及轨迹优化。(提供有偿代码开发和算法讲解,也可以在论文创新上给点建议)

目录

1. 什么是全覆盖路径规划

2. 实用案例

3. 农田作业机器人

如何获取地图

如何规划出全覆盖的路径

如何确保规划出来的路径是符合车辆动力学要求的



1. 什么是全覆盖路径规划

  1. 遍历工作区域内的所有面积
  2. 移动过程中要避开障碍物
  3. 保证覆盖率,避免重复路径

2. 实用案例

  1. 扫地机器人,割草机器人,排雷机器人,农田作业等。

3. 农田作业机器人

如何获取地图

        农田作业机器人和室内作业机器人的区别是,农田作业的面积是很大的,并且周边没有围墙,树木之类的,因此无法像扫地机器人那样通过SLAM建立农田的地图,农田的优势就是,环境比较单一,障碍物比较少或者无障碍物,这对于规划来说也是比较友善的,因此为了获取农田的地块,一般是采用GPS打点的形式,也就是拿着RTK模块,去农田边上走一圈,就可以获取得到农田在地球表面的坐标了。

如何规划出全覆盖的路径

        规划全覆盖路径,和一般的路径规划是不一样的,全覆盖规划不是点到点的规划,所以一般的图搜索算法例如A star, RRT等,都是用不上的。 

        在探讨如何规划全覆盖的作业路径之前,首先了解下,农业机器人在农田内是如何工作的,以及其工作的内容有哪些。举个例子,比如,深松,靶地,起垄,旋耕等,这些都是农机比较常见的作业,他们都有一些共同的特点,主要的路径都是直线+掉头+直线+掉头的形式。所以对于这种形式的全覆盖规划,使用高中学的几何知识就可以完成了,首先选择一个方向,然后找一条与该方向平行的直线,从地图的一边尽头往另一边平移,直线与边界的交点就是直线路线的两个端点,专业一点的话,这种直线段被称为垄,如下图1所示,直线段都称为垄, 掉头的地方,直接将直线段的端点相连接即可。这是简单的的全覆盖规划方法了,还有一些比较复杂的地图,比如图2,图3。

        从一下图中可以看到,掉头区域出现很多尖角,对于阿克曼形式的移动机器人来说,这是比较致命的,农业拖拉机多数也是阿克曼形式的底盘,转弯是有最大转弯角度约束的,这种尖角形式的轨迹是不适合拖拉机正常跟随的,因此还需要对下面的path作进一步的轨迹优化,是的path每一个点的曲率都满足车辆动力学要求。

图1

图2

图3(地图内有三个障碍物,分别是圆形和矩形障碍物)

如何确保规划出来的路径是符合车辆动力学要求的

对于使用差速轮作为底盘的移动机器人,规划出直线段轨迹后,还需要进一步平滑,平滑轨迹的方式可以采用b样条曲线,因为这种差速轮形式的机器人,在跟踪轨迹的时候是不会受到曲线的曲率影响的,因为当线速度无穷小的时候,差速轮的转弯能力无穷大,也就是原地转弯,但是如果采用B样条进行拟合直线的话,有可能会出现平滑后的轨迹是穿过障碍物的情况,这种情况的话,可能就要使用一些优化算法了,比如参考高飞老师的开源项目,ego planner,简介可以看下下面的知乎大佬写的内容。大体上可以知道是干嘛的。这个算法没有加入曲率的约束,所以对于车辆来说是不行的,应该车辆有方向盘打角约束。对于车辆的轨迹优化,我参考的是混合A*的算法,掉头区域可以用混合A*搜索出一条轨迹,最后再加一个平滑, 结果图4, 图5,后续有人感兴趣的话,在更新实现部分内容。https://zhuanlan.zhihu.com/p/513312955https://zhuanlan.zhihu.com/p/513312955https://zhuanlan.zhihu.com/p/513312955 

 图4   

 

 图5


鸽了好久没更新了

前面说到如何获取地图,一般商用阶段都是手持RTK模块,或者无人机啥的绕着田边打点,但是这是有硬件加持的情况,对于普通人来说如何获取真实的地块信息呢,可以去google earth, 在google earth不仅可以看到你的家, 还可以把你家门前的地块经纬度给获取到(不准就是了,不过不影响算法测试), 打开google earth,new project, new features, features可以选择 draw line, 这个时候就可以把农田边界以及障碍物给勾勒出来,如下图6, 勾勒之后,保存并输出成kml文件即可, 地块的经纬度海拔信息就存放在kml文件中,读取这个kml文件可以用python来读方便简单。 具体的步骤如下

  1. 在google earth选中一块地
  2. 输出地图经纬度信息
  3. 用python解析kml文件并把经纬度转换成局部笛卡尔坐标系
  4. 规划算法读取解析的地图位置并开始规划
  5. 把规划算法的结果转换成经纬度坐标系
  6. 按照kml的文件格式把规划数据写进.kml文件
  7. 在google earth上加载规划的数据

图6   

图7

图8

                                                                图9

        图10

使用qt+百度地图api获取地图信息

最近工作比较闲了,想把这个项目完善一下,之前是通过手动去google earth上选择地块,下载kml数据,然后加载到全覆盖规划算法里面,规划路线后再输出.kml路径文件,最后在去google earth上加载.kml文件进行显示, 最近刚好工作学习了下qt界面的制作,记录下

1. 首先qt的工作就是打开百度地图,找到地块,绘制边界和障碍物轮廓

2. 通过javascript和qt的webchannel传到qt并解析出经纬度坐标系

3. 把地图信息通过lcm或者ros传递到规划模块进行规划

4. 订阅规划模块传回的路线,并通过QWebEngineView把轨迹传送到百度地图上显示

目前只是做了上面的部分,后续还打算开发一些功能,比如可以选择规划方式包括多机,单机,梨形掉头,鱼尾掉头, 梨形+鱼尾混合掉头方式,设置车辆属性,转弯半径之类的。

待更!!!

REFERENCE       

Path Planning for Autonomous Vehicles in Unknown Semi-structured Environments

### 无人拖拉机覆盖路径规划算法 #### 路径规划的重要性 为了确保农田能够被高效而面地耕作,路径规划对于无人拖拉机至关重要。良好的路径规划不仅有助于节省燃料和时间,还能提升作业质量并保护土壤结构。 #### 基本原理 覆盖路径规划的目标是在给定区域内创建一条或多条轨迹,使得机器人的运动范围完覆盖该区域的同时尽可能减少重复覆盖面积。针对不同形状的田地(矩形、不规则多边形),有不同的策略可以选择[^1]。 #### 主要方法概述 一种常用的覆盖路径规划方式是基于栅格地图的方法: - **初始化阶段** - 将整个工作区划分为若干个小单元(像素),形成一张二维离散化网格图。 - **边界检测与处理** - 对于非标准几何形态的工作区,需识别其轮廓线,并据此调整内部路径设计逻辑。 - **路径生成** - 使用回溯扫描模式或螺旋式扩展等方式构建初始路径框架;其中,Boustrophedon分解是最常见的技术之一——它模仿传统犁地的方式,在平行线上来回移动以完成覆盖任务。 - **优化改进** - 针对特定应用场景下的特殊需求(比如障碍物规避),可通过引入启发式搜索算法(A*)、遗传算法等手段进一步精炼最终方案。 ```python import numpy as np def boustrophedon_coverage(width, height): path = [] direction = 1 for y in range(height): row = list(range(y * width, (y + 1) * width)) if direction == -1: row.reverse() path.extend(row) direction *= -1 return path width = 5 height = 4 print(boustrophedon_coverage(width, height)) ``` 此代码片段展示了如何在一个简单的矩形区域内应用Boustrophedon分解来进行覆盖路径规划。实际操作中还需要考虑更多因素如转弯半径限制、速度控制等问题。
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值