自动驾驶-轨迹碰撞检测方法

目录

1.自动驾驶的碰撞检测怎么做

2.基于圆形的检测方法

3.基于AABB方法

4.基于OBB方法


1.自动驾驶的碰撞检测怎么做

 

如上图所示,自动驾驶系统中,通过感知模块,针对周围环境的障碍物,如人-车-自行车等,会输出一个长方体 框住,而感知模块则是将长方体的尺寸和坐标输入给下游的规划模块,用于给规划模块在生成轨迹时,做碰撞检测,那么规划模块是如何进行碰撞检测的呢?

自动驾驶场景,主要是针对一个二维平面在做碰撞检测,以下介绍几种典型的碰撞检测方法。

2.基于圆形的检测方法

典型的是用三圆包裹车辆,如上图所示,采用三个半径为1.3m的圆,那么可以计算各个圆心之间的距离,碰撞检查为:

所有的distance  > 2R 则表示无碰撞风险。

方法优缺点:计算速度快,但精度较低。

3.基于AABB方法

AABB :Axis Aligned Bounding Box,即轴对齐的边界框

如图所示,这种方法为计算两个方框在二维平面的是否碰撞,计算方法很简单,

分别计算两个物体在X轴上的最小和最大值 X1min  X1max  以及 X2min  X2max

同时计算Y轴上的最小和最大值,Y1min, Y1max ,Y2min,Y2max

通过比较各个轴上的最大最小值是否有重叠的部分,若有任一轴上不存在重叠,则认为无碰撞。

4.基于OBB方法

OBB:Oriented Bounding Box  有方向的边界框

与AABB不同的是,OBB获取的方框是吻合到物体的方向,如红色框所示,这个时候选择的投影轴则有四个,如下图所示:

因此问题转化为,坐标点,到某一直线的投影,同样检测各个线段投影是否重叠判断是否存在碰撞,若任一一条投影不重叠,则认为不存在碰撞。

可进一步参考Appllo代码了解详情:

bool Box2d::HasOverlap(const Box2d &box) const {
  if (box.max_x() < min_x() || box.min_x() > max_x() || box.max_y() < min_y() ||
      box.min_y() > max_y()) {
    return false;
  }

  const double shift_x = box.center_x() - center_.x();
  const double shift_y = box.center_y() - center_.y();

  const double dx1 = cos_heading_ * half_length_;
  const double dy1 = sin_heading_ * half_length_;
  const double dx2 = sin_heading_ * half_width_;
  const double dy2 = -cos_heading_ * half_width_;
  const double dx3 = box.cos_heading() * box.half_length();
  const double dy3 = box.sin_heading() * box.half_length();
  const double dx4 = box.sin_heading() * box.half_width();
  const double dy4 = -box.cos_heading() * box.half_width();

  return std::abs(shift_x * cos_heading_ + shift_y * sin_heading_) <=
             std::abs(dx3 * cos_heading_ + dy3 * sin_heading_) +
                 std::abs(dx4 * cos_heading_ + dy4 * sin_heading_) +
                 half_length_ &&
         std::abs(shift_x * sin_heading_ - shift_y * cos_heading_) <=
             std::abs(dx3 * sin_heading_ - dy3 * cos_heading_) +
                 std::abs(dx4 * sin_heading_ - dy4 * cos_heading_) +
                 half_width_ &&
         std::abs(shift_x * box.cos_heading() + shift_y * box.sin_heading()) <=
             std::abs(dx1 * box.cos_heading() + dy1 * box.sin_heading()) +
                 std::abs(dx2 * box.cos_heading() + dy2 * box.sin_heading()) +
                 box.half_length() &&
         std::abs(shift_x * box.sin_heading() - shift_y * box.cos_heading()) <=
             std::abs(dx1 * box.sin_heading() - dy1 * box.cos_heading()) +
                 std::abs(dx2 * box.sin_heading() - dy2 * box.cos_heading()) +
                 box.half_width();
}

https://github.com/ApolloAuto/apollo/blob/576222dcc3a3d844f0385ec57fa85e1b2e515e7a/modules/common/math/box2d.cc

 

  • 3
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动驾驶汽车硬件系统概述.pdf 目前绝大多数自动驾驶研发车都是改装车辆,相关传感器加装到 车顶,改变车辆的动力学模型;改装车辆的刹车和转向系统,也缺乏 不同的工况和两冬一夏的测试。图中Uber研发用车是SUV车型自身 重心就较高,车顶加装的设备进一步造成重心上移,在避让转向的过 程中转向过急过度,发生碰撞时都会比原车更容易侧翻 硬件在环 司机在环 甚于模器仿真 基于车辆执行 基于实腭道 基于必要的硬件平台 软件在环 车辆在环 自动驾驶研发仿真测试流程 所以在自动驾驶中,安全是自动驾驶技术开发的第一天条。为了 降低和避免实际道路测试中的风险,在实际道路测试前要做好充分的 仿真、台架、封闭场地的测试验证。 软件在环( Software in loop),通过软件仿真来构建自动驾驶 所需的各类场景,复现真实世界道路交通环境,从而进行自动驾驶技 术的开发测试工作。软件在环效率取决于仿真软件可复现场景的程度。 对交通环境与场景的模拟,包括复杂交通场景、真实交通流、自然天 气(雨、雪、雾、夜晚、灯光等)各种交通参与者(汽车、摩托车、 自行车、行人等)。采用软件对交通场景、道路、以及传感器模拟仿 真可以给自动驾驶的环境感知提供卡富的输入可以对算法进行验证 和测试 硬件在环(Hard- ware in1oop),各种传感器类似人的眼睛和 耳朵,作为自动驾驶系统的感知部分,该部分的性能决定了自动驾驶 车辆能否适应复杂多变的交通环境。包括,摄像头、毫米波雷达、超 声波雷达、激光雷达。针对不同的传感器,硬件在环会根据不同的传 感器和环境因素来部署。 车辆在环( Vehicle in loop),车辆执行系统向传动系统发出 执行命令来控制车辆,在自动驾驶中取代了人类的手脚。自动驾驶系 统的执行控制优劣决定了车辆是否能够安仝舒适的行驶。车辆运行在 空旷的场地上,自动驾驶系统感知系统模拟的虚拟场景,自动驾驶系 统根据虚拟的场景发出控制指令,再通过传感器将车辆的实轨迹反 馈到虚拟环境中,实珌真车与虚拟环境的融合,从而进行车辆操控的 验证 司机在环( Driver in loop),基于实时仿真技术开发,结合驾 驶员的实际行为,可以实现对车辆和自动驾驶技术开发测试做出主观 的评价。可机在环,可以一方面获得司机的主观评价,另一方面可以 验证人机共驾驶的功能。 自动驾驶系统的硬件架构 就整体而言,汽车是个全社会化管理的产品,其固有的行业特点 是相对保守的。在人工智能的大潮下,面对造车新势力和消费者需求 变化的冲击,传统汽车行业渐进式的创新方法已经面临巨大的挑战。 急需改变传统的架构和方法不断创新。自动驾驶幣体的硬件架构不光 要考虑系统本身也要考虑人的因素 腰性 酒 司 全雪 快冒 计算单元 m 感知 决策 控制 自动驾驶的硬件架构 自动驾驶系统主要包含三个部分:感知、决策、控制。从整个 硬件的架构上也要充分考虑系统感知、决策、控制的功能要求。整 体设计和生产上要符合相关车规级标准,如IS026262、AECQ-100、 TS16949等相关认证和标准。目前L1、L2、ADAS系统的硬件架构体 系和供应链相对完善符合车规级要求。 感知层:依赖大量传感器的数据,分为车辆运动、环境感知、 驾驶员检测三大类。 车辆运动传感器:速度和角度传感器提供车辆线控系统的相关横 行和纵向信息。惯性导航+全球定位系统=组合导航,提供全姿态信息 参数和高精度定位信息。 环境感知传感器:负责环境感知的传感器类似于人的视觉和听觉, 如果没有环境感知传感器的支撑,将无法实现自动驾驶功能。主要依 靠激光雷达、摄像头、亳米波雷达的数据融合提供给计算单元进行算 法处理。w2X就是周围一切能与车辆发生关的事物进行通信,包括V2V 车辆通信技术、V2Ⅰ与基础设施如红绿灯的通信技术、V2P车辆与行 人的通信。 驾驶员监测传感器:基于摄像头的非接触式和基于生物电传感器 的接触式。通过方向盘和仪表台内集成的传感器,将驾驶员的面部细 节以及心脏、脑电等部位的数据进行收集,再根据这些部位数据变化, 判断驾驶员是否处于走神和疲劳驾驶状态。 计算单元部分:各类传感器采集的数据统一到计算单元处理,为 了保证自动驾驶的实时性要求,软件响应最大延迟必须在可接受的 围内,这对计算的要求非常高。目前主流的解决方案有基于GPU、FPGA ASIC等 车辆控制:自动驾驶需要用电信号控制车辆的转向、制动、油门 系统,其中涉及到车辆地盘的线控改装,目前在具备自适应巡航、紧 急制动、白动泊车功能的车上可以直接借用原车的系统,通过CAN总 线控制而不需要过度改装 警告系统:主要是通过声音、图像、振动提醒司机注意,通过HMI 的设计有效减少司机困倦、分心的行为。 、自动驾驶的传感器 光雷詁 围憬头 毫来述 组合导 自动驾驶的传感
### 回答1: 自动驾驶技术中的轨迹规划是指通过算法确定车辆在行驶过程中的最佳路径,使其能够安全、有效地到达目的地。其中,RRT算法(Rapidly-exploring Random Tree)是一种常见的轨迹规划算法。 RRT算法是一种以树结构为基础的算法,它基于随机采样的方式在环境中逐渐扩展并探索可能的轨迹。RRT算法的主要步骤如下: 1. 初始化树结构,将起点放入树中。 2. 随机采样一个点,并在树中找到离该采样点最近的节点。 3. 在该最近节点和采样点之间插入新的节点,形成一条轨迹。 4. 检查新轨迹是否与环境中的障碍物相交,如果相交,则抛弃该轨迹;如果不相交,则将新节点插入树中。 5. 重复2-4步骤,直到生成的轨迹连接到目标点或达到最大迭代次数。 RRT算法的优点是可以在高维复杂环境中进行轨迹规划,而且能够对环境进行自适应学习,适应环境变化。它的生成轨迹的速度较快,在实时应用中表现良好。 不过,RRT算法也存在一些缺点。由于随机采样的方式,它可能生成的轨迹并不是最优解,而是局部最优解。同时,RRT算法在环境中有大量的障碍物时,也可能存在搜索效率低下的问题。为了解决这些问题,可以通过改进RRT算法,如RRT*算法,来提高轨迹的质量以及搜索效率。 综上所述,RRT算法是一种自动驾驶轨迹规划中常用的算法,通过随机采样的方式在环境中探索可能的轨迹,并逐渐生成最佳路径。它具有较快的生成速度和适应复杂环境的能力,但同时也存在局部最优解和搜索效率低下的问题。 ### 回答2: 自动驾驶轨迹规划是指在自动驾驶系统中,通过算法来确定车辆的行驶轨迹。其中一个常用的算法是RRT(Rapidly-exploring Random Trees)算法。 RRT算法通过随机采样的方式在地图上构建一棵随机探索树,树的节点代表车辆在地图上的位置,树的边代表车辆在不同位置之间的移动轨迹。算法初始化时,将起始位置作为树的根节点,然后不断迭代执行以下步骤,直到找到一条符合要求的路径: 1. 随机采样:根据地图的特点和限制条件,随机采样一个点作为新的节点。 2. 寻找最近节点:从树中已有的节点中找到离采样点最近的节点,作为起始节点。 3. 扩展树:以起始节点为起点,按照一定步长,在地图上搜索一条从起始节点到采样点的路径,将路径上的点作为新增的节点加入树中。 4. 碰撞检测:对新增的节点进行碰撞检测,判断是否与障碍物相交。 5. 连接节点:如果新增节点通过碰撞检测,没有与障碍物相交,且与目标点的距离小于阈值,则将新增节点与目标点直接连接。 6. 重复以上步骤,直到找到一条从起始点到目标点且不与障碍物相交的路径。 通过上述步骤,RRT算法可以在较短的时间内找到一条符合要求的车辆轨迹。然而,RRT算法存在一些缺点,如对于复杂环境需要较长的时间来找到一条路径,而且路径的质量可能不够优化。因此,研究者们也在不断改进和优化RRT算法,以提高自动驾驶系统的性能和安全性。 ### 回答3: 自动驾驶轨迹规划是指通过算法来确定车辆在道路上行驶的最佳路径,使得车辆能够安全、高效地达到目的地。其中,rrt(Rapidly-exploring Random Tree)算法是一种常见的路径规划算法。 rrt算法的基本思想是通过随机采样的方式,探索和扩展树结构,直到找到符合要求的路径。具体过程如下: 1. 初始化:将起点设置为树的起始节点,并将其加入树中。 2. 随机采样:根据特定的采样策略,在地图区域内产生一个随机的采样点,作为目标点。 3. 搜索:从树中选择最近邻的节点(树中距离目标点最近的节点),并通过运动模型生成一个新的节点。 4. 碰撞检测:判断新节点与障碍物是否有碰撞,如果有碰撞,则重复第3步。 5. 节点连接:将新节点添加到树中,并与最近邻节点进行连接。 6. 判断终点:判断新节点是否接近目标点,如果满足条件,则结束搜索。 7. 循环:重复第2至第6步,直到找到有效路径或达到最大搜索次数。 通过rrt算法进行自动驾驶轨迹规划,能够快速探索潜在的路径,同时有效避开障碍物。其优点是适用于复杂的环境和动态障碍物,能够找到可行解。然而,rrt算法也存在一些不足之处,例如路径不一定是最短路径,而且搜索过程中可能出现偏差。因此,实际应用中通常会结合其他算法对路径进行优化和改进,以提高路径规划的准确性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值