无人驾驶路径规划

使用迪杰斯特拉算法
对下面的图片进行路径规划
网上图片
OpenCV的边缘检测将物体边缘标记

//灰度化,滤波,Canny边缘检测  
 
 cvtColor(srcImage, maskWaterShed, COLOR_RGB2GRAY );//灰度转换  
 GaussianBlur(maskWaterShed, maskWaterShed, Size(5, 5), 2);   //高斯滤波  
 //imshow("Gray Image", maskWaterShed);
 Canny(maskWaterShed, maskWaterShed, 80, 150);

运行截图

通过对面积大小进行分类
在这里插入图片描述

运行截图
通过改变不同面积大小,寻找到合适的范围,可视化发现,为避免遗漏,可在原图上进行标记

Mat showBinarySearch=srcImage;//Mat(maskImage.size(), CV_8UC3);

默认构函,只是浅拷贝,共享一份内存空间,即在新图像做出改变会导致原图改变。
应用opencv拷贝函数。

Mat showBinarySearch=srcImage.clone();//Mat(maskImage.size(), CV_8UC3);

可以看到,在面积设置为800时,所有的物体轮廓基本覆盖完毕

运行截图

当然,由于图片分辨率的问题,个别行人的轮廓没有得到检测,也便未能显示,这在实际应用中必是万万不可的,但考虑到这只是一种方案的理论实践,暂且忽略这个问题。

再通过随机点分出的不同区域进行判定
找到可行的最短路径

运行截图

通过边缘检测后
应用现有规划路径功能,只需将具有物体区域设置为不可行区域,并将路径以质心间画线做为显示

运行截图

修改成功
在这里插入图片描述

下面只需通过交互方式标定起始点和终止点,并将识别为人和车的区域规避即可。

窗体坐标为标题右上角

运行截图
通过计算找到图像对应坐标的表达式
通过计算找到图片

运行截图实现在鼠标点击处标记,绘制起点图样

运行截图

交互设置起点和终点
运行截图

牛刀小试
运行截图

这次会成功吗?

运行截图

发现位置并不对

int ProcessPicture::findArea(int j, int i)
{
 int index = maskImage.at<int>(i, j);
 while(index <= 0 || index2Serial[index] <= 0)
 {
  index = maskImage.at<int>(i, --j);
 }
 return index2Serial[index];
}

原因在这里!!!我又忘记一个关键问题,OpenCV中的像素点矩阵坐标并非按照行优先,而是列优先,因此永远会出问题,如果不是想到当时绘制地铁线路图时同样出现过这个问题,恐怕又要想破脑袋!谨记

老老实实调试

运行截图
好像没有什么问题

运行截图
另一张图也没有问题

运行截图

点数增加也没有问题
那便是对应正确

运行截图

有闪避出现

运行截图

实现躲避车辆

运行截图

发布了30 篇原创文章 · 获赞 2 · 访问量 777

猜你喜欢

转载自blog.csdn.net/cascara/article/details/103097216