首页 > 编程语言 >Apollo 计算几何算法

Apollo 计算几何算法

时间:2024-05-26 21:33:03浏览次数:16  
标签:线段 路径 modules 算法 3.2 几何 UML Apollo math

Apollo 计算几何算法

1. 介绍

Planning 模块中, 路径和速度曲线都被抽象成 Polyline, 障碍物被抽象成 Polygon. 在碰撞检测、投影计算距离、平滑曲线等方面都大量运用到了几何算法. 在本文中, 将介绍 Apollo 所用到的计算几何相关的基础库, 包括LineSegment2d Box2dAABox2d Polygon2d, 样条曲线, 螺旋线等等.

附赠自动驾驶最全的学习资料和量产经验以及100T的资源分享:链接

2. 几何算法

2.1. 线段

线段的相关类, 文件路径: modules/common/math/line_segment2d.h

LineSegment2d: 大部分成员函数比较简单, 可自行查阅相关代码.

  1. 成员变量: 两点确定一条直线. start_表示线段的起点, end_表示线段的终点.

  2. double DistanceTo(const Vec2d &point, Vec2d *const nearest_pt) const;给定一个点, 计算到线段的最短距离, 同时返回最近的点(过给定点的垂线与原线段的交点, 或者线段的端点).

2.2. 包围盒

在二维平面上, Box 特指矩形包围盒. 在 Planning 模块, 经常将自车和障碍物抽象成一个矩形框, 从而简化计算.

Box2d: 普通矩形包围盒. 文件路径: modules/common/math/box2d.h

image

AABox2d: axes-aligned bounding boxes, 其矩形边都是沿着 XY 坐标轴的. 文件路径: modules/common/math/aabox2d.h

2.3. 多边形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3. 数值分析

3.1. 样条曲线

在数值分析中, 样条(Spline)是一种特殊的函数, 由多项式分段定义.[1] 在一些情况下, 比如直角弯或者 U 形掉头时, 使用一个多项式无法精确描绘轨迹的形状, 所以需要进行分段连接. 多项式的连接通过连接点一阶导二阶导相等来保证光滑性.

相关文件路径: modules/planning/math/smoothing_spline/

相关类的UML关系如图 3.1 所示:

image

图 3.1 Spline UML

Spline1d为例:

  1. image

3.2. 螺旋线

3.2.1. 螺旋线的构造

image

image

3.2.3. 代码解析

相关文件路径: modules/planning/math/curve1d/

相关类的UML关系如图 3.2 所示:

image

图 3.2 Spiral UML

QuinticSpiralPath:

  1. 成员函数: coef_deriv_, 用于求偏导.

  2. 构造函数: 利用公式 3.3 计算coef_deriv_

QuinticSpiralPathWithDerivation:

  1. image

标签:线段,路径,modules,算法,3.2,几何,UML,Apollo,math
From: https://blog.csdn.net/liuphahaha/article/details/139153532

相关文章

  • 算法刷题笔记 前缀和(C++实现)
    文章目录题目描述基本思路实现代码题目描述输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l,r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数......
  • 算法刷题笔记 数的范围(C++实现)(二分法重要例题)
    文章目录题目描述题目思路题目代码(C++)题目感想题目描述给定一个按照升序排列的长度为n的整数数组,以及q个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回-1-1。输入格式:第一行包含整数n和q,表示数组长度和询......
  • 二叉树遍历算法与堆数据结构详解(C语言)
    目录树的概念及结构二叉树的概念及结构概念二叉树的性质满二叉树和完全二叉树满二叉树完全二叉树深度的计算二叉树顺序结构及实现顺序存储堆的概念数组建堆向下调整堆的实现完整代码Heap.hHeap.cTest.c堆的初始化(实现小堆为例)插入数据删除堆顶的数据 ......
  • C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
    //写一个代码,判断n是否是2的次方数//if(n&(n-1))==0/*2的0次方是1---二进制12的1次方是2---二进制102的2次方是4---二进制1002的一次方-1是1---二进制是12的二次方-1是3---二进制是112的三次方-1是7---二进制是111n与n-1按位与后&是0就是0,两个1才是1所以if(n&(n-1......
  • 算法课程笔记——KMP&字符串哈希
    算法课程笔记——KMP&字符串哈希就是模板题aba是前后缀,真前后缀就只有a/b /a避免出现不同字符有相同的值相当于进制如果你能熟练掌握正则表达式,用库还能更快......
  • 「贪心算法」摆动序列
    力扣原题链接,点击跳转。如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。简单来说,摆动序列的特点是:后一个数交替地比前一个数大或者小。给你一个数组,请......
  • 【路径规划】基于遗传算法求解带时间窗容量限制的单配送中心多骑手外卖配送路径规划问
    研究背景:随着外卖业务的快速发展,如何合理安排多骑手的配送路径,减少配送时间和成本,成为外卖平台需要解决的重要问题。在实际操作中,骑手需要在一定的时间窗内完成配送,并且配送中心的配送能力也有限,因此需要考虑时间窗和容量限制的多骑手外卖配送路径规划问题。研究步骤:理解......
  • 【机器学习-23】关联规则(Apriori)算法:介绍、应用与实现
    在现代数据分析中,经常需要从大规模数据集中挖掘有用的信息。关联规则挖掘是一种强大的技术,可以揭示数据中的隐藏关系和规律。本文将介绍如何使用Python进行关联规则挖掘,以帮助您发现数据中的有趣模式。一、引言1.简要介绍关联规则学习的概念和重要性关联规则学习是一种......
  • 数据结构中的算法-KMP算法
    一、KMP算法串的模式匹配操作是指在当前串(主串)中寻找子串(模式串)的过程。当在主串中找到了和模式串相同的子串时,模式匹配成功;否则,模式匹配失败。当模式匹配成功时,返回模式串的首字符在主串中的位置;否则,返回-1。1.1暴力模式匹配算法(Brute-Force)假设有主串S和模式串T,T的长度为......
  • 算法设计与分析 头哥educoder 批处理作业调度
     给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。所有任务必须先由机器1处理完成后,才能由机器2处理,并且在机器2的处理顺序必须与机器1的处理顺序一致,处理顺序一旦确定不能改变。设作业Ji需要机器1的处理时间为Ai,需要机器2的处理时间为Bi,怎样安......