碰撞检测技术介绍

本文介绍了自动驾驶决策规划中常用的碰撞检测算法,包括Box和Point、Box和Box的碰撞检测方法,并对比了不同算法的性能和精度。

自动驾驶决策规划模块中会经常使用到碰撞检测计算分析Ego vehicle行为的安全性,并且可以用在planning计算的多个方面。例如下图中第一幅图,黄色车辆为主车,灰色车辆为交通参与车辆,其中一辆车辆在前方静止,另一辆车辆意图向右变道行驶。在此场景下,碰撞检测算法可以用来计算路径规划的SL边界值,如下图中第二幅图。也可以用来计算路径的安全走廊,如下图中的第三幅图。也可计算速度规划的ST图,如下图中的第四幅图等等。虽然碰撞检测在planning中是一个小算法模块,但是却至关重要。
在这里插入图片描述
本文将对常用的碰撞检测算法进行介绍,并简要的进行benchmark。在planning中一般将主车以及障碍物处理为凸多边形(Polygon/Box),因此碰撞检测多是检测两个Polygon是否重叠,但是为了不失一般性,本文也将介绍Polygon和Point的位置关系计算方法,因为在两个Polygon的位置关系计算中可能会用到。
本文介绍的碰撞检测方法有:

  • Box和Point的碰撞检测:
    • OpenCV方法;
    • 射线法;
    • 轮廓六分圆法;
  • Box和Box的碰撞检测:
    • OpenCV方法;
    • SAT(分离轴定理);
    • GJK;

1. Box和Point的碰撞检测

1.1 OpenCV

此方法使用了OpenCV开源库中的图像处理的方法,可以简要分为以下计算步骤:

  • 根据碰撞检测环境范围(矩形),建立两个cv::Mat数据;
  • 将ADC位置或者轨迹车辆投影转化到cv::Mat中,被ADC占据位置数据设置为1(非零),其他为0;
  • 将障碍物投影转化到cv::Mat中,被据位置数据设置为1 (非零) ,其他为0;
  • 两个cv::Mat进行求与操作,得到的cv::Mat中数据如果有非0数据,则发生碰撞;

在这里插入图片描述

1.2 射线法

判断一个点是否在多边形内,我们可以从该点引出一条水平射线(任意射线都可,但水平便于计算),观察射线与多变形的交点个数,如果交点个数为奇数,则该点在多边形内,如果为偶数则在多边形外。如下左图所示,判断点P和多边形的关系,从点P得到一个水平向右的射线,通过多边形的每两个相邻顶点可以得到边的直线方程,例如 P 1 P 2 P_1P_2 P1P2,有 y 0 y_0 y0可以计算得到点B的坐标,就可以判断射线是否与 P 1 P 2 P_1P_2 P1P2相交了。此方法对多边形的凸凹性没有要求,但是如果点P在多边形边上或者顶点需要特殊处理。
在这里插入图片描述

struct Point{
   
   
  double x, y;
};
bool IsInPolygon(Point p,Point *ptPolygon,int ncount) {
   
   
  int ncro
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值