Apollo
文章平均质量分 84
碎步の流年
这个作者很懒,什么都没留下…
展开
-
Apollo学习笔记(29)粒子滤波
粒子滤波原创 2022-08-18 15:31:24 · 395 阅读 · 0 评论 -
Apollo学习笔记(28)贝叶斯滤波
贝叶斯滤波原创 2022-08-04 14:56:03 · 318 阅读 · 0 评论 -
Apollo学习笔记(27)李群、李代数
李群李代数的基本概念,和相互转换原创 2022-06-27 18:26:43 · 275 阅读 · 0 评论 -
Apollo学习笔记(26)四元素详解
上一篇的四元素只是简单带过,简单的坐标转换计算,但是实际四元素的用法没有那么简单,这里对四元素进行了一些补充,尽我可能的找到一些四元素相关的知识点,系统的学习了四元素,这里做一个记录。四元素定义复数大家都了解,可以理解为一个二维空间,如果有两个复数,A=a+biB=c+di(1)A = a+b\bold{i} \\B = c+d\bold{i} \tag{1}A=a+biB=c+di(1)那么,有C=A+Bj=a+bi+cj+dk(2)C=A+B\bold{j} = a+b\.原创 2022-04-26 15:06:13 · 918 阅读 · 0 评论 -
Apollo学习笔记(25)旋转矩阵、欧拉角、四元数理论及其转换关系
1.概述做MPC控制的时候,需要把 map 坐标系下的相关坐标点转换到 car 坐标系中,由于是只考虑 xy 平面,所以计算比较简单。做完之后,考虑到三维空间的坐标系转换还是不太懂,主要是ROS系统中的tf变换,于是摸了两天鱼。今天详细的记录下来,旋转矩阵、四元素、欧拉角以及各个之间的转换关系。阅读了好几篇大神的文章,具体也找不到连接了,在此顶礼膜拜,如有相似的地方,那就相似吧,毕竟原理都一样...原创 2019-12-08 18:54:46 · 909 阅读 · 1 评论 -
Apollo学习笔记(24)基于采样的路径规划算法
之前的文章都是基于搜索的路径算法,这两天在又学习了一下基于采样的路径规划算法,这里做一下记录,最后会奉上大神的链接基于采样的路径规划算法大致可以分为综合查询方法和单一查询方法两种。前者首先构建路线图,先通过采样和碰撞检测建立完整的无向图,以得到构型空间的完整连接属性,再通过图搜索即可得到可行的路径。后者则从特定的初始构型出发局部建立路线图,在构型空间中延伸树型数据结构,最终使它们相连。其中,综合查询方法的代表性的方法就是概率路线图(Probabilistic Roadmap,PRM),单一查.原创 2021-10-29 18:07:59 · 1604 阅读 · 0 评论 -
Apollo学习笔记(23)A*与JPS算法
A*的原文地址:https://www.gamedev.net/reference/articles/article2003.aspA*算法背景之前的DFS,BFS和Dijskra算法都是一种纯搜索的算法,实际使用时,算力占用很多,搜索的效率却不高。先看一下BFS搜索(图片来源于网上),图片中红色点为起始点,蓝色点为终点,绿色点为搜索过的点。BFS以起点为圆心,先搜索周围的所有点,一圈一圈的搜索,直到搜索到蓝色的终点。另外再看以下DFS搜索算法,DFS搜索的思路是朝着终点方向进行搜索,尽量靠.原创 2021-10-23 16:36:06 · 2332 阅读 · 0 评论 -
Apollo学习笔记(22)Dijkstra算法
老规矩现奉上大神链接,https://blog.csdn.net/heroacool/article/details/51014824。基本思想Dijkstra算法是一种典型的最短路径搜索算法,和之前的BFS和DFS算法类似,Dijkstra本质上是一种BFS搜索算法。一般步骤如下:建立两个集合S和U,S中存放已经确定了最短距离的点,U中放未放入S中的点;在S中push起始点,U中放入其他的点;计算U中的所有点到起点之间的距离,起点与起点之间的距离记为0,与集合S中的点不相邻的点距离记为无.原创 2021-10-18 17:08:41 · 419 阅读 · 0 评论 -
Apollo学习笔记(21)图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
首先奉上大神链接,https://www.cnblogs.com/qzhc/p/10291430.html。由于最近在看轨迹规划的资料,图遍历是基础,故拜读了大神的一些文章,在此记录。深度优先遍历深度优先遍历(Depth First Search)的主要思想是:首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点;当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直至所有的顶点都被访问过。无向图的深度优先遍历图解以下"无向图"为例:对上无向图进.原创 2021-07-04 21:15:24 · 3866 阅读 · 2 评论 -
Apollo学习笔记(20)激光SLAM综述
激光SLAM的处理流程激光雷达数据处理激光数据帧间匹配(前段匹配)激光回环检测非线性最小二成优化(后端优化)激光数据的预处理激光雷达运动畸变去除里程计数据矫正不同系统之间的时间同步数据帧间匹配算法ICP(Iterrative Closest Point)PI-ICP(point to line Iterrative Closest Point)NDT(Normal Distribution Transformation)CSM(Correlation Scan Match原创 2022-04-01 15:39:43 · 3497 阅读 · 0 评论 -
Apollo学习笔记(19)UKF
之前说了卡尔曼,扩展卡尔曼,两种滤波方式,卡尔曼适用于线性系统,扩展卡尔曼适用于非线性不太强的系统,至于强非线性系统,本文就是为了解决这个问题。背景上文讨论的EKF方式,通过对系统方程或者观测方程进行泰勒展开后,仅保留其一阶近似项,这样的做法不可避免的会造成一些误差,如果系统的非线性程度不是很强的话,那还好说,误差可以忽略,强非线性系统的话,这种误差就必须要考虑了;另外,每次都要进行一次雅克比矩阵计算,很多计算平台做偏导计算是不太容易实现的。基于上面所述的两个缺点,UKF则完全没有这两个问题,不过.原创 2022-04-01 10:36:25 · 2030 阅读 · 0 评论 -
Apollo学习笔记(18)EKF
书接上回啊,上一篇详细的介绍了下标准卡尔曼滤波,使用卡尔曼滤波进行更新和预测都是建立在线性系统的基础上,因为高斯分布xkx_kxk预测后仍然是高斯分布,且高斯分布变换到观测空间后也仍然是符合高斯分布的。然而,实际工程中,极少有系统是线性系统,那这种情况怎么使用卡尔曼滤波呢?非线性处理学过数学的都知道,线性函数可以使用下式进行表达,f(x)=ax+b(1)f(x)=ax+b \tag{1}f(x)=ax+b(1)然而其他的函数,比如,f(x)=ax2+bx+cf(x)=ax^2+bx+cf原创 2022-03-23 18:16:57 · 683 阅读 · 0 评论 -
Apollo学习笔记(17)卡尔曼滤波
卡尔曼滤波(KF)和扩展卡尔曼滤波(EKF)是最常用的滤波器优化算法,本文主要是介绍一下卡尔曼滤波,从国外的一篇博客翻译过来的,如果有翻译的不当的地方,烦请指出,最后会给出原文链接,有大佬英文不错的话,推荐直接看原文。简介卡尔曼滤波为了更好的说明卡尔曼滤波,假设有一个小机器人在一片树林里,它需要准确的知道自己的位置以便于能够向着目标点移动。机器人的状态向量(位置和速度)用x⃗k\vec{x}_{k}xk表示,x⃗k=(p⃗,v⃗)(1)\vec{x}_{k}=(\vec{p},\vec{v})原创 2022-01-24 14:58:26 · 1850 阅读 · 0 评论 -
Apollo学习笔记(16)贝塞尔曲线
贝塞尔曲线是应用于二维图形应用程序的一种曲线。在1962年由法国工程师皮埃尔·贝济埃运用于汽车的主体设计。贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线.曲线由起始点、终点和控制点组成。通过调整控制点,贝塞尔曲线的形状会发生变化。贝塞尔曲线有很多特殊的性质,现在主要应用于图形设计和路径规划。贝塞尔曲线完全由控制点决定其形状,n个控制点对应着n-1阶的贝塞尔曲线,最重要的是,可以通过递归的方式来绘制。一阶曲线从图中可以看出,一阶的贝塞尔曲线是原创 2021-12-30 15:54:12 · 947 阅读 · 0 评论 -
Apollo学习笔记(15)Mini-Snap
老规矩首先上大神的链接 https://blog.csdn.net/q597967420/article/details/76099491。学习了深蓝学院的规划课程,以及拜读了大佬的博客后,做出的以下整理。1.背景知识机器人导航系统,是期望机器人从A点运动到B点,根据当前的物理环境规划出一条合适的路线,可以使得机器人可以移动到目标点的过程,就是运动规划。无人车其实也是机器人的一种,有着其独特的运动特性。无人车的运动规划一般分为两个步骤:routing:在地图(栅格地图,RRT地图,四叉树、八叉.原创 2021-12-16 13:56:57 · 1172 阅读 · 2 评论 -
Apollo学习笔记(14)混合A*
本文不做具体的细节描述,网上各位大神的文章都很好,本文仅仅作为记录。这里先奉上大神的链接:https://www.cnblogs.com/chuninggao/p/7281122.htmlhttps://blog.csdn.net/robinvista/article/details/106279968https://zhuanlan.zhihu.com/p/122544884https://zhuanlan.zhihu.com/p/120272035综上几篇文章看完后,应该会对 hybri.原创 2021-12-03 17:18:04 · 1904 阅读 · 0 评论 -
Apollo学习笔记(13)Lattice Planner与OBVP问题
本文是学习了深蓝科技相关课程与阅读了相关文献后,整理所得。论文为A computationally efficient motio primitive for quadrocopter trajectory generation。Lattice Planner算法的根本目标就是从车辆当前的位置,结合地图、定位、障碍物等信息,通过采样并搜索出一条设定的目标 cost function 值最小的一组坐标。这就和BVP问题很相像了,都是知道起始状态信息和最终信息(部分也可以),求解出满足要求的多阶曲线。如.原创 2021-11-29 11:02:47 · 1943 阅读 · 0 评论 -
Apollo学习笔记(12)Lattice Planner规划算法
本文主要参考Apollo开发者社区,以及一些大神的博客,在此膜拜,文末会奉上相关链接。Lattice Planner 规划算法简介之前的相关的规划的算法都是放在无人驾驶专栏下的,Lattice Planner 是Apollo中实际使用的算法,因此,放在Apollo专栏下,这里简单做一下说明。Lattice Planner 算法属于一种局部轨迹规划,其输入为定位信息,感知障碍物信息,以及静态参考线信息,输出为局部规划轨迹,输入到控制器,由控制器完成局部轨迹的跟踪控制。因此,Lattice Plann.原创 2021-11-18 11:04:34 · 9622 阅读 · 10 评论 -
Apollo学习笔记(11)MPC
关于MPC控制算法,在控制部分,已经有详细的MPC算法的详细解释和说明,这里就不再多说了,可以自行查阅。原创 2020-09-03 15:34:57 · 2832 阅读 · 13 评论 -
Apollo学习笔记(10)横向控制代码详读
Status LatController::ComputeControlCommand( const localization::LocalizationEstimate *localization, const canbus::Chassis *chassis, const planning::ADCTrajectory *planning_published_trajectory, ControlCommand *cmd) { auto vehicle_state =原创 2020-09-02 14:31:48 · 1675 阅读 · 1 评论 -
Apollo学习笔记(9)纵向控制代码详读
之前的大致说了一下纵向控制的原理,实际的代码中还有很多小细节需要注意的地方,这里就主要记录下来,阅读纵向控制代码中的一些体会。这里就直接在代码中加入一些笔记,这样比较好理解。Status LonController::ComputeControlCommand( const localization::LocalizationEstimate *localization, const canbus::Chassis *chassis, const planning::ADCTra原创 2020-09-01 15:13:42 · 1464 阅读 · 0 评论 -
Apollo学习笔记(8)车辆动力学模型
车辆动力学模型动力学主要研究作用于物体的力与物体运动的关系,车辆动力学模型一般用于分析车辆的平顺性和车辆操纵的稳定性。对于车来说,研究车辆动力学,主要是研究车辆轮胎及其相关部件的受力情况。正常情况下,车辆上的作用力沿着三个不同的轴分布:纵轴上的力包括驱动力和制动力,以及滚动阻力和拖拽阻力作滚摆运动(roll);横轴上的力包括转向力、离心力和侧风力,汽车绕横轴作俯仰运动(pitch);立轴上的力包括车辆上下振荡施加的力,汽车绕立轴作偏摆或转向运动(yaw);图1 车辆受原创 2020-07-09 11:38:49 · 8766 阅读 · 8 评论 -
Apollo学习笔记(7)车辆运动学模型
这里又整了一遍车辆运动学,之前在Autoware那会,已经在控制那一部分整过一次了,就当复习了吧。前言车辆的控制目前用的最广的有三种方式:PIDLQRMPC其中,PID是一种对模型无要求的控制算法,就算丝毫不了解其控制模型,都可以凭经验将其参数调试出来,并且保证其可靠性与精度。另外两种控制算法,要想实现对车辆的控制就必须了解,车辆的运动学或者动力学模型,在控制专栏下,也有描述过使用的相关模型,但是不同的人使用的控制方式不一样,建立的模型也不一致,这里主要是针对Apollo中的相关模型。A原创 2020-07-08 14:46:57 · 5640 阅读 · 1 评论 -
Apollo学习笔记(6)module control
这几篇都是阅读了各位大神的博客,转载了一部分,以及加上了一些自己的想法,如有侵权,请移步到大神博客自行观看。研究控制前,先了解一下Apollo项目的整体结构,如下图所示,它包含了感知、定位、决策、控制、通信等几大模块。其中,Apollo中使用了三种控制算法:纵向 PID横向 LQRMPC其中还包含了一些其他的控制算法,比如,lead/lag 、自适应等,需要一定的控制理论基础的,Apollo中的模型来自这本书 Vehicle Dynamics and Control,另外还需要对 F.原创 2020-07-01 14:03:07 · 1845 阅读 · 4 评论 -
Apollo学习笔记(5)module canbus
上个月换了工作,公司使用的开发软件平台也不一样了,现在主要使用 Apollo ,与 ROS 系统区别还是蛮大的,所以下面这一系列文章都是在百度 Apollo 系统下开发控制模块的记录。因为,车身本身的控制接口是 can 通讯, 所以拿到手的第一件工作,就是把上层控制与车身底盘的通讯模块开发出来。So,需要从canbus模块入手。一、系统架构Markdown: Text-to-HTML conversion toolAuthorsJohnLukeControlCommandCanFra原创 2020-06-29 19:13:22 · 3083 阅读 · 9 评论 -
Apollo学习笔记(4)坐标系
百度Apollo项目用到了多种坐标系,其中帮助文档提及的坐标系包括:全球地理坐标系(The Global Geographic coordinate system )局部坐标系—东-北-天坐标(The Local Frame – East-North-Up,ENU)车身坐标系—右-前-天坐标(The Vehicle Frame —Right-Forward-Up,RFU)车身坐标系—前-左-天坐标(The Vehicle Frame —Front-Left-Up,FLU)还有一种Frenet坐标原创 2020-06-29 19:13:01 · 4388 阅读 · 0 评论 -
Apollo学习笔记(3) Protocol Buffer语法
构建Protocol Buffer 的消息对象步骤详细介绍实例说明:构建一个Person类的数据结构,包含成员变量name、id、email等等,具体类包含变量如下:// c++类public class Person{ private String name; private Int id; private String email;...}通过 Protocol Buffer 语法 描述 需要存储的数据结构新建一个文件,命名规则为:文原创 2020-06-29 19:12:20 · 1167 阅读 · 1 评论 -
Apollo学习笔记(2) Ubuntu下Protocol Buffers的安装与测试
本文参考其他大神的博客,在此声明。Apollo中的消息,使用的是Google的protobuf,这里说明下其安装步骤,虽说官方给的docker里面有,但是详细的了解下总是没错的。安装依赖包使用sudo aptitude install 依次安装依赖包sudo aptitude install g++ git automake libtool libgc-dev bison flex libfl-dev libgmp-dev libboost-dev libboost-iostreams-dev .原创 2020-06-28 14:29:04 · 708 阅读 · 0 评论 -
Apollo学习笔记(1) 百度 Apollo Cyber RT简介、基本概念以及与 ROS 对照
一、背景ROS 应用于自动驾驶领域的不足:调度的不确定性:各节点以独立进程运行,节点运行顺序无法确定,因而业务逻辑的调度顺序无法保证;运行效率:ROS 为分布式系统,存在通信开销二、Cyber RT 框架从下到上依次为:基础库:高性能,无锁队列;通信层:Publish/Subscribe机制,Service/Client机制,服务自发现,自适应的通信机制(共享内存、Socket、进程内);数据层:数据缓存与融合。多路传感器之间数据需要融合,而且算法可能需要缓存一定的数据。比如典型的仿真应用原创 2020-06-28 14:15:34 · 2789 阅读 · 0 评论