自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(252)
  • 资源 (8)
  • 收藏
  • 关注

原创 自动驾驶工程应用中的关键技术点总结

1,车位融合模块即获取4个车位角点坐标(不知道坐标与FL,FR,RL,RR的对应关系)以及车辆坐标点,判断车位类型以及4个角点所处的位置,即获取的4个车位角点坐标与FL,FR,RL,RR的对应关系。2,判断车辆与障碍物是否碰撞,即车辆的顶点是否与障碍物凸多边形有交点。...

2022-03-03 11:48:29 1423 1

原创 SL/ST的理解

Apollo3.5 取消了SL/ST的迭代,因为车辆速度变化较为频繁,幅度较大,导致预测的轨迹变化较大,则ST变化较大.若ST影响SL,则SL变化较大,即PATH变化较大,这是我们不希望看到的,PATH必须相对稳定.因为只有障碍物速度对于EGO我们才会考虑它,若障碍物速度高于ego,一般情况下障碍物不会影响EGO.

2023-05-11 10:39:45 756 1

转载 Apollo决策技术分享

决策技术的分享

2022-07-27 10:22:39 2105

原创 基于车辆运动学模型的LQR横向控制算法

一,车辆运动学模型的建立如图所示,对于横向控制而言,因变量为,自变量为将速度沿轴分解得车辆的模型为:即:其中,因为是横向控制,故假设是常数上述车辆运动学模型为非线性模型:二,车辆运动学模型的线性化:泰勒展开在参考点处的泰勒展开公式,忽略高次项为:其中,令,则上式可表示为:三,车辆运动学模型的离散化:前向欧拉其中,四,基于LQR模型,求解控制量LQR的代价函数为:假设,..

2022-05-08 22:15:19 4943

原创 决策规划算法四:Piecewise Jerk Path Optimizer

一,问题分析路径规划的本质目的:规划出一条安全(无碰撞),舒适(平滑),符合车辆运动学的轨迹。如下图所示,决策算法开辟凸空间后,路径规划算法用数值优化的方法搜索出一条最优路径,即将问题转化为二次规划的问题,采用二次规划的求解器进行求解。二次规划问题的求解顺序:1,确定优化变量2,确定目标函数3,确定约束条件4,将目标函数和约束条件变形为二次规划的标准形式5,用二次规划求解器进行求解,获得优化变量的序列,使得目标函数取得最小值。注:路径的最终表达式为:,..

2022-05-07 20:39:52 5989 4

原创 决策规划算法二:生成参考线(FEM_POS_DEVIATION_SMOOTHING)

Apollo的的规划算法基于Frenet坐标系,因此道路中心线的平滑性控制着车辆是否左右频繁晃动,而高精地图的道路中心线往往不够平滑。离散点平滑法,包括1,FEM_POS_DEVIATION_SMOOTHING有限元位置差异2,COS_THETA_SMOOTHING余弦)3,QpSplineReferenceLineSmoother(三次样条插值法)4,SpiralReferenceLineSmoother(螺旋曲线法)本文只讲解FEM_POS_DEVIATION_SMOOTHIN.

2022-05-07 16:17:48 1619

原创 决策规划算法三:DP与分层状态机2种决策算法的对比

决策算法的本质目的就是开辟凸空间,便于后期使用二次规划QP搜索出一条符合约束条件的最优路径。最优路径的含义:使目标函数最小化的路径。路径规划本质就是求曲线方程:。开辟凸空间的方法有很多:1,重决策的策略:分层状态机,深度学习等。根据经验规则进行决策。2,轻决策:DP。根据代价Cost进行决策。一,DP决策算法:根据代价Cost进行决策DP的过程:在frenet坐标系中,在均匀固定的的方向均匀撒点,并用5次曲线(或者其他曲线)连接各点。每条曲线的方程为:..

2022-05-06 18:16:49 2327

原创 决策规划算法二:生成参考线(FEM_POS_DEVIATION_SMOOTHING)

一,为什么需要重新生成参考线导航路径存在的问题:1,导航路径过长;2,不平滑导致的结果:1,不利于主车以及障碍物寻找投影点,甚至出现多个投影点。2,原本的导航路径不平滑,车辆无法直接进行轨迹跟踪。解决方案:根据导航路径,生成参考线。二,生成参考线的具体步骤与方法...

2022-05-01 21:55:12 1728

原创 决策规划算法一:整体框架步骤

决策规划算法的整体框架步骤:1,根据定位以及导航路径生成参考线2,将障碍物投影到参考线上3,根据障碍物的投影,决策模块开辟凸空间(往左,往右等决策)4,规划算法在凸空间上搜索一条最优化路径5,将最优化路径点转化为笛卡尔坐标,并下发给控制模块。...

2022-05-01 21:27:44 1730

原创 求车辆在Frenet坐标系上投影点的坐标

Reference line一般是离散点,如下图所示,故投影点为近似投影。投影点求解步骤:1,在Reference line上找距离车辆最近的点,作为匹配点match point,坐标记为

2022-05-01 15:11:03 1018

原创 MPC与LQR的详细对比分析

从以下几个方面进行阐述:一,研究对象:是否线性二,状态方程:离散化三,目标函数:误差和控制量的极小值四,工作时域:预测时域,控制时域,滚动优化,求解一次五,求解方法:QP求解器,变分法求解黎卡提方程六,LQR和MPC的优缺点:滚动优化,求解时域,实时性,算力,工程常用方法一, 研究对象:是否线性MPC:线性和非线性系统均可LQR:线性系统非线性系统 通过泰勒展开的方法进行近似离散化为线性系统:其中x 为状态的误差, u为控制量二, 状态方程:离散化**MPC:**1,对非线性

2022-04-29 21:40:33 14086 5

原创 路径/轨迹规划常见算法的演变和原理

PRM:输入:全局地图过程:在全局地图上随机撒点,去除与障碍物重合的点,然后进行路径搜索输出:连接采样点的路径RRT输入:局部环境地图过程:贪心算法A *Hybrid A*D *

2022-04-25 18:28:54 986

原创 不同数据结构解决问题时的常用方法

数组:1,常用方法:双指针,滑动窗口(本质也是双指针)2,排序,对于很多问题,排完序后处理起来会方便很多

2022-04-25 18:17:54 868

原创 Hybrid A start

一 Open Space Planner采用分层的思路:第 1 层:利用路径规划算法,输出一条无碰撞的粗略轨迹。此处采用Hybrid A start(下文用 Hybrid A *代替)。第 2 层:利用数值优化的方法,输出一条平滑,无碰撞的轨迹。此处采用QP。二 Hybrid A *的输入,即前提条件:栅格地图二 Hybrid A *的2大关键点:**1,扩展节点的方式:**考虑车辆的运动学模型**2,Cost的设计:**采用RS曲线,动态规划,考虑方向盘角度输入(可以更偏向于直行),考虑前进后

2022-04-17 18:35:43 1228

原创 Apollo代码解析:代码结构与运行流程

一 总体概括按场景Scenario来划分问题,一个场景包含多个Stage,一个Stage包含多个Task。ScenarioManager:负责管理Scenario的切换与选择。**Scenario:**某个场景或某个问题。**Stage:**解决某个场景问题的步骤,一般是一连串的Stage实现某个Scenario.**Task:**实现某个步骤的具体方法过程,一般是一连串的Task实现某个步骤。即解决某个Scenario场景问题时,先循环遍历Scenario下的每个Stage,每个Stage再循

2022-04-17 17:44:50 1563

原创 类模板,函数模板,及其特化

一 使用模板的意义当我们进行int型数据交换时调用swap函数:void swap(int &a , int &b){ *a ^= *b; *b ^= *a; *a ^= *b;}但该函数面对double,char,long等其他类型时,不适用。解决办法:重载void swap(double &a , double &b){ *a ^= *b; *b ^= *a; *a ^= *b;}void swap(char &a , char

2022-04-14 22:25:55 1112

原创 删除链表的第N个节点

1,删除链表节点时,删除头节点和其他节点的操作不一样,为了统一删除节点的操作,增加虚拟头节点将大大简化操作。2,双指针对于处理数组和链表的问题较为方便和快捷。#include <iostream>using namespace std;struct link_list{ int data; link_list * next; link_list(int val = 0,link_list * ptr = nullptr):data(val),next(ptr)

2022-04-07 18:11:41 1765

原创 list基础

链表是由一系列连接在一起的结点构成,其中的每个结点都是一个数据结构,一般是动态分配、使用和删除的链表的结点通常是动态分配、使用和删除的,允许链表在程序运行时增大或缩小。如果需要将新信息添加到链表中,则程序只需分配另一个结点并将其插入到系列中。如果需要从链表中删除特定的信息块,则程序将删除包含该信息的结点。链表对数组和矢量的优点:删除和添加元素的速度快尽管链表的编码和管理比数组更复杂,但它们有一些明显的优势。首先,链表可以容易地扩大或缩小。实际上,程序员并不需要知道链表中有多少个结点。它们只是根据需要在

2022-04-07 18:07:11 1474

原创 Apollo代码解析:QP二次规划(凸优化)

自动驾驶算法工程师在工程实践中使用QP二次规划时的注意事项:工程实践中的求解应用过程:将实际的工程问题模型转化为二次规划模型,调用已有的二次规划求解器(matlab或者C++均有对应的成熟的求解器可调用),并将转化后的二次规划模型对应的数据结构输入求解器,求解出需要的解即可,不需要深入研究求解器是如何求解及推导的。**类比举例(易于理解):**类似于初中求解一元二次方程的解,将已知的方程转化为一元二次方程的形式,然后根据已有的解公式代入对应的系数即可求解出方程的解。而无需关心解的公式是如何推导出来的,

2022-03-25 16:19:57 2456

原创 自动驾驶决策规划算法:概述

自动驾驶6个等级:L0:无自动驾驶功能。L1:有横向或纵向的功能,横纵向不能联合控制;L2:横纵向能联合控制,但驾驶员对一切场景负责;L3:功能与L2基本相同,最大区别在于L3在部分场景不需要驾驶员负责;L4:大部分场景不需要驾驶员负责;L5:所有场景都不需要驾驶员负责。划分等级的因素:1,功能。(L0-L2)2,责任。(L3-L5)...

2022-03-22 20:10:49 2583

原创 常见横向控制算法的适用场景及其优缺点

工程实践中,中低速场景一般使用Stanley。中高速场景一般用LQR。

2022-03-07 11:57:33 4720 1

原创 Apollo代码解析longitudinal Control:纵向控制算法与流程图

基于电动车的纵向控制电机扭矩示意图:

2022-03-04 15:08:46 3201 1

原创 五次多项式进行路径规划的工程化实例应用及C++源码分析

设5次曲线的方程表达式为:其中:故上式可写为:

2022-02-22 17:30:19 3194 6

原创 C/C++反三角函数使用注意事项

最近写的东西用到了数学库中的acos函数,但是代码在运行的时候有时候会出莫名其妙的错误,比如返回值是个特别大的数。最后在debug 的时候发现acos返回的数据很奇怪,但是传入的参数明明没有问题,可以保证是[-1,1]。回想起,double类型的末尾数据时不确定的,当double类型数据alpha = 1.0时其真实值可能是1.00001;这明明是很早就知道的,但是在写代码的时候有时候却很容易忘记。所以在acos部分加入界限判别部分acos((alpha > 1.0) ? 1.0: (a.

2022-02-22 17:04:17 1265

原创 局部路径规划:五次多项式

重点注意:进行曲线插值时,分2步:1,确定所用的曲线类型,即确定曲线的表达式方程,比如多项式曲线,双圆弧段曲线,正弦函数曲线,贝塞尔曲线,B样条曲线等。2,用现有点的已知条件(位置,速度,加速度等)求解曲线的未知系数,一旦未知系数确定,则曲线的表达式就唯一的确定了。横纵向解耦分别用多项式曲线进行分别规划,即横纵向分别对应着2个不同的多项式曲线,然后进行合并即可得到横纵向联合控制的曲线。...

2022-02-19 21:20:41 5519

原创 路径规划算法:动态规划

如上图所示的实例中,寻找点A到点E代价最小的路径,这是典型的动态规划的应用场景,逆向寻优,正向求解一般分为3步,即三层循环:第一层循环:遍历每一个阶段;第二层循环:遍历第i个阶段的每一个状态;第三层循环:遍历第i+1个阶段的每一个状态最终倒叙求得最优解。...

2022-02-18 21:32:49 2978

原创 Apollo代码解析Lateral Control:横向控制算法与流程图(基于动力学模型的LQR)

LQR:一、满足3大假设时:1,小角度;2,匀速;3,不考虑环境因素车辆动力学模型状态方程:令:则可得到状态方程为:但因为需要使用计算机进行数值计算,推导截至到上面的连续模型还不够,还需要对上述模型进行近似离散化,近似离散化后的模型为:其中:...

2022-02-17 23:01:41 6889 3

转载 vector的几种初始化及赋值方式

C++的初始化方法很多,各种初始化方法有一些不同。(1): vector ilist1;默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。(2): vector ilist2(ilist);vector ilist2 = ilist;两种方式等价 ,ilist2 初始化为ilist 的拷贝,ilist必须与ilist2 类型相同,也就是同为int的vect

2022-02-17 22:08:04 4721

原创 机器人路径规划和轨迹优化导论

一,轨迹规划的思路,2步走:1,路径规划2,轨迹优化二, 路径规划和轨迹优化常用算法:三,基于搜索的路径规划:1,Dijkstra与A*的区别与联系:扩展的方式相同(均是周围的8个点作为备选点),但Cost不同Dijkstra : F(n) = G(n)A* : F(n) = G(n) + H(n)...

2022-02-17 22:05:38 1735

原创 Clothoid回旋曲线在APA路径优化中的工程应用实例及其C++源码分析与下载

回旋曲线的定义回旋曲线是缓和曲线的一种,而缓和曲线的线型多种多样,如回旋线、三次抛物线、七次四项式型、半波正弦型、一波正弦型、双纽线、多心复曲线……,公路中推荐使用的是回旋曲线,因为回旋曲线的曲率变化率是定值,故在遇到直线驶入圆弧或者圆弧驶入直线的场景下,方向盘转角匀速变化,符合人类驾驶习惯且行驶较为顺滑。回旋曲线也叫羊角螺线(clothoid),本质特点是:曲率与长度成线性关系。

2022-01-28 14:17:41 3247 5

转载 A Review of Motion Planning Techniques for Automated Vehicles论文核心提取

自动驾驶体系结构常见规划算法概述常见规划算法优缺点对比

2022-01-26 17:30:02 356

原创 APA轨迹规划常见算法

一、几何法1,固定几何轨迹2,不固定几何轨迹二、Hybrid_A_Startapollo采用此方法,并对原始算法进行改良优化,以提高轨迹平滑性、实时性和算法计算效率。整体思路:先用Hybrid_A_Start搜索一条粗略的可行路径,再通过轨迹优化算法得到平滑的轨迹。...

2022-01-21 17:45:41 1255

原创 路径优化常用的算法

全局平滑:一般用Nurbs插值或者拟合曲线的形式。**局部过渡:局部平滑一般是 小线段间转接过渡的形式。**通常是在两条直线或其他曲线的转接点处,常用贝塞尔曲线、B-Spline曲线、PH曲线、圆弧等过渡。1,圆弧/3D圆弧/圆柱螺旋线2,贝塞尔曲线:https://pomax.github.io/bezierinfo/3,b样条曲线4,ph曲线5,biarcs曲线:https://www.ryanjuckett.com/biarc-interpolation/6,dubins曲线7,

2022-01-21 11:24:00 3664

转载 OSQP求解凸优化问题的步骤及实例

OSQP是一种求解QP问题的数值优化软件,以下简单介绍OSQP软件的使用方法一、 概述首先是凸优化问题的定义以及两种典型的特例(线性规划与二次规划),如下图所示。这里不介绍QP问题的拓展形式如SOCP等OSQP软件的核心是ADMM算法Ø交替方向乘子法(Alternating Direction Method of Multipliers,ADMM)是一种求解优化问题的计算框架, 适用于求解分布式凸优化问题如果仅仅是简单的使用,不需要了解ADMM算法,但是如果调试OSQP软件的参数,就需要深入

2022-01-11 14:54:56 3396 1

原创 Apollo横纵向控制算法

纵向默认控制器是双环PID横向默认控制器是LQR

2022-01-10 18:49:06 988

原创 APA规划和控制算法开发遇到的问题及解决方案

轨迹规划算法轨迹规划采用五次多项式曲线、半径为最小转弯半径的圆弧、直线构成。控制算法纵向控制采用PID横向控制采用纯跟踪、Stanley并融合车辆运动学原理(适用场景:低速,曲率较大)。出现的问题问题1:不管是纯跟踪还是Stanley都具有预瞄距离,导致车辆不能较好的达到预期轨迹终点处,而产生误差,影响后续的控制。轨迹的圆弧半径均是最小转弯半径,故如上图所示,第一段轨迹跟踪过程中只要车辆未能到达指定轨迹终点处,则后面车辆肯定不能较好的跟踪RS曲线,因为最小转弯半径的限制,车辆只能在RS曲线

2022-01-10 15:15:32 2491 3

原创 凸优化和非凸优化

在工程实践中,无需关心 二次规划/凸优化的细节,工程师 只需要 调相应的第三方成熟软件包计算二次规划/凸优化的结果即可。当然,更重要的是知道算法的使用条件、优缺点、使用场景。决策规划算法的输出目标:输出一条满足约束条件的最优轨迹。(用代价函数来量化最优性)最优的评价指标:1,平滑2,舒适3,耗时短约束:1,轨迹连续2,无碰撞3,遵守交通规则4,满足车辆动力学、运动学约束一、迭代法求高维复杂约束函数的最小值回顾高中数学,求连续可导函数F(x)在定区间[a,b]上的最小值。步骤:

2022-01-07 18:03:56 6166 1

原创 自动驾驶决策规划算法概述

一、级别分类L0横纵向都需要人操控,系统无法控制横向或者纵向L1系统只能操控横向或者纵向,系统能控制横向或者纵向中的一个,但横纵向无法联合控制

2022-01-06 17:59:48 6631

转载 AVP概述

0. 引言在无人驾驶各低速场景中,与矿山、港口、环卫等To B、To G的业务相比,属于私家车体系的AVP(自主代客泊车)无疑有着更多的用户/关注者。针对AVP目前的发展现状,市场上很少有文章进行系统地梳理。《九章智驾》希望能从AVP概述、竞争格局、技术路线、场景应用的难点与挑战以及未来的发展趋势等几个维度,全面系统地剖析AVP当前的发展情况,让大家能更加直观地了解AVP。这段时间以来,非常感谢接受《九章智驾》的采访的专家,同样也非常感谢参与到《九章智驾》AVP沙龙论坛的各位专家。在此,我们整理了各位

2022-01-05 11:26:38 6514

转载 Apollo 6.0 QP(二次规划)算法解析

这篇文章主要详细地解读一下Apollo 6.0中的piecewise jerk path optimizer这个task。上一篇文章大概阐述了Apollo中的整体框架结构,是分为多场景(scenario)调度,每个scenario又包含一个或者多个阶段(stage),每个stage包含多个具有独立功能的小模块-任务(task)。task是Apollo中的任务概念,每个阶段都会按照配置参数里的顺序,依次调用每个task,每个task都实现了一个独立的功能。在Apollo 5.0之后,task主要拆分成了两.

2021-12-31 12:01:18 5210 3

已知起点和终点的坐标,切线角和曲率,求解五次多项式的C++源码

笛卡尔坐标系XOY下,已知起点和终点的坐标,切线角和曲率,求解五次多项式的C++源码

2022-02-23

自动泊车APA规划的路径由圆弧和直线组成,导致曲率不连续,故需要采用回旋曲线Clothiod平滑圆弧和直线,使得整个路径曲率连续

自动泊车APA满足3个约束条件的回旋曲线QT源代码. 3个约束条件: 1,坐标:起点为(x1,y1) = (0,0),终点为(x2,y2)=(10,5), 2,曲率:起点的曲率为0,终点的曲率为R = 4.0, 3,方向角度:起点为0(0度方向),终点为pi/2(90度方向)

2022-02-21

AUTOSAR架构以及开发流程详细介绍(Vector公司制作-中文版)

AUTOSAR架构以及开发流程详细介绍(Vector公司制作-中文版),非常适合初学者以及从事AUTOSAR开发的研究者和工作人员

2018-08-05

AUTOSAR故障诊断系统设计以及通信模块的设计与实现

主要介绍基于AUTOSAR的汽车故障诊断系统的设计与实现以及基于AUTOSAR的通信模块的研究与实现

2018-08-05

C/C++开发实战笔记

笔者详细记录了学习C/C++过程中的心得与实战编程的注意事项与语法规则,希望通过实战中的经验帮助更多人快速动手进行编程。

2018-05-08

库函数驱动外设的应用实例:应用STM32的GPIO控制LED灯的亮灭,实现闪亮、跑马灯、流水灯等效果

例题:使用STM32的GPIOB口控制8个LED灯的亮灭。STM32有7个GPIO口,每个GPIO口有16个引脚,使用其中的8-15引脚对8个LED灯进行控制,可以实现闪亮、跑马灯、流水灯等效果。开发工具为Keil MDK5(最新版本),兼容低版本(本例题程序使用库函数:GPIO_SetBits和GPIO_ResetBits实现对LED亮灭的控制)

2018-05-08

STM32固件库函数说明手册(中文版),STM32F10xxxx数据手册(中文版)

文档包括开发STM32查阅最频繁的2个文件(均为中文版),分别为STM32固件库函数说明和STM32F10XXXX数据手册。其中STM32固件库函数说明详尽地介绍了每个外设初始化配置的函数使用说明,并包括大量的使用示例,直观易懂,能够快速上手进行个性化开发。STM32F10XXXX数据手册详细地介绍了STM32F10XXX的具体架构及各个外设的整体概况。上述2个文档在嵌入式开发过程中起着举足轻重的作用,工程师必须根据自己的开发需求进行反复查阅,故在此处进行归纳,以求快速的完成项目开发。

2018-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除