自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 资源 (5)
  • 收藏
  • 关注

原创 在Frenet坐标系下的动态障碍物避障

本文介绍如何实现基于Frenet坐标系的动态障碍物避障。其中包括:cubic spline generationFrenet transformation to gloval coordnatessampling-based search methodBezier curvecost function formalizationlazy collision checkingpure...

2020-01-03 15:14:53 4813 27

原创 Apollo planning论文解析(1)

本文解析Apollo发表于ITSC2019的一篇规划方面的论文:Optimal Trajectory Generation for Autonomous Vehicles Under Centripetal Acceleration Constraints for In-lane Driving Scenarios文章简述了规划模块的in lane driving 的纵向规划的最新方案之一,更确切的说是不带变道的部分。文章分为两个主要部分,第一部分是参考线生成,第二部分是如何生成一条path-time 轨

2021-04-18 08:50:10 272

原创 如何使用OSQP-Eigen

更多的关于Eigen的学习参考更多的关于OSQP的学习参考我们在github上找到了使用eigen库封装起来的OSQP库,比原来的OSQP写代码时更好用一些。我们对照mathworks对quadprog的例子解释对库的使用一个标准的QP问题可以以如下的标准形式进行描述:注意这里面的写法不同的书本有些不同的表达:H , f 有时候也被写成 P, q.接下来给出几个典型的不同约束的二次规划形式:1,具有线性约束的二次规划matlab的调用方法是:H = [1 -1; -1 2]; f =

2021-03-23 15:12:28 561 2

原创 使用QP方法解基于五次多项式形式的cost function minimization问题

我们在这里使用二次规划(QP)的方法解一个五次多项式形式的曲线的cost function minimization的问题。二次规划的标准形式如下:在之前的讨论的五次多项式的方法中,我们在采用空间上依旧有时间T信息,在这里时间T没有办法放进来,因此只适用于求解空间曲线,或者时间国定曲线的问题。标准的无阶多项式及其一阶导数,二阶导数的表达式如下:代价函数cost function中,我们只考虑横向偏移,以及jerk的大小:(当然我们还可以把比如横向速度和加速度考虑进来)那么写成矩阵形式为:对

2021-02-07 18:21:01 390

原创 自动驾驶论文解析(8)_motionPlanning

本文解析Optimal Vehicle Path Planning Using Quadratic Optimization for Baidu Apollo Open Platform,文章发表于IEEE-IV2020,出自百度。方法针对的场景是结构化道路上的因对静态或者低速障碍物的轨迹优化方法。文章主要论述的内容为:1)参考线的前处理2)道路边界的计算3)基于二次规划的轨迹优化文章的创新点是结合了Werling et al的解耦思路,降低了计算维度,在选择最优曲线上使用了二次规划的基于优化理论

2021-02-05 09:48:08 774 1

原创 针对Hybrid A*论文解析(5)中的方法的一些验证

用matlab试了一个论文分析5里面的一些方法,感觉还是有很多问题,并没有像文章说的那么好。curvature梯度方向的优化基本用不上,梯度的下降方向非常大,而且很不稳定,就算限制了梯度下降的步长,效果也不是很好。从开源代码里面也可以看到,curvature部分直接变成了0,说明代码里面也没用curvature这一项的优化。smoothness 方向的优化,只有当原始曲线噪声比较大的时候优化效果还可以,一旦原始曲线也比较平滑,优化效果也会一般。所谓的原始曲线的噪声比较大,如下如:如果对一条平滑曲线进

2020-11-14 13:55:18 654

原创 Hybrid A*论文解析(5)

本文解析论文Enhanced path smoothing based on conjugate gradient descent for firefighting robots in petrochemical complexes,文中依然在解决混合A* 加上梯度方法轨迹平滑的问题,但是对于CMU的方案中的轨迹优化部分,做出了很多改进建议。这里着重说一下这部分,A* 部分基本沿用了CMU方案,也就没什么要说的了。对于曲线的前提条件是:1,曲线的曲率要小于0.2,也就是曲率半径要比5m大。2,曲线要

2020-11-12 22:34:29 539 2

原创 1024

mark today

2020-10-24 17:39:28 219

原创 无人车制胜关键:Apollo决策系统全面剖析

2019年3月26日,AI前线社群邀请到了百度美研资深软件工程师 Yifei Jiang ,带来 《Apollo 决策技术分享(决策系统的设计和无人驾驶的实现)》 的内容分享。大家好!感谢大家来参与这次Apollo决策技术的分享,我是来自Apollo美研团队的工程师Yifei。在这次的分享中,我们会介绍Apollo是如何设计和实现无人驾驶的决策系统,包括以下5个部分:参考路径交规决策路径决策速度决策决策场景决策模块相当于无人驾驶系统的大脑,保障无人车的行车安全,同时也要理解和遵守交通规则

2020-10-23 13:20:12 510

原创 Effective C++阅读笔记

1,cpp的四个特点c, object-oriented cpp, template cpp, STL2, 不要用 #define使用 const, enum, inline替换define, 因为我们宁可以编译器替换预处理器。//定义常量charconst char* const autoName = "sm";const string authorName ("sm");在类中定义作用域仅在类中的常量:class GamePlayer{private: static const i

2020-10-22 20:43:36 140

原创 ROS在rviz中实时显示轨迹和点

记录一个简单的例子方便复制:通过使用nav_msgs::Pathgeometry_msgs::PoseStampedgeometry_msgs::PointStamped来实现rviz中可视化轨迹和轨迹点。首先创建工程:mkdir -p showpath/srccd srccatkin_create_pkg showpath roscpp rospy sensor_msgs std_msgs nav_msgs tfcd ..catkin_make 以及修改cmakelist:a

2020-09-10 15:20:45 1684 2

原创 ros::spin() 和 ros::spinOnce()

ROS的回调处理函数spin/spinOnce作用区别使用作用spin/spinOnce是ROS消息回调处理函数。它俩通常会出现在ROS的主循环中,程序需要不断调用ros::spin() 或 ros::spinOnce(),两者区别在于前者调用后不会再返回,也就是你的主程序到这儿就不往下执行了,而后者在调用后还可以继续执行之后的程序。如果你的程序写了相关的消息订阅函数,那么程序在执行过程中,除了主程序以外,ROS还会自动在后台按照你规定的格式,接受订阅的消息,但是所接到的消息并不是立刻就被处理,而是必

2020-09-08 10:19:24 110

原创 浅拷贝和深拷贝

浅拷贝是不会分配新的内存的,深拷贝才能分配。先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。举一个例子:#include <iostream>using namespace std;class Student{private: int num; char *name;public: Student(); ~Student();};Student:

2020-09-03 15:06:47 73

原创 C++计时器

在一个测试类中,我们重载了构造函数,用计时器观察不同构造函数的构造时间。#include <iostream>#include <ctime>using namespace std;class Test{public: Test() : a_(0), b_(0), c_(0)//列表初始化 { cout << "register constructor(default)." << endl; } T

2020-08-31 10:21:18 122

原创 ROS在类中发布和接受消息(自定义消息)

一开始建立pkg:mkdir -p ~/catkin_ws/srccd ~/catkin_ws/catkin_makecd ~/catkin_ws/srccatkin_create_pkg pub_sub_test std_msgs rospy roscppcd ..catkin_make我们现在有两个自定义消息:adm_lat.msguint8 Enable_latfloat32 GPS1_Curvature_cmdfloat32 V_desint8 Gear_desuint

2020-08-19 16:53:51 699

原创 ROS在类中发布和接受消息(标准消息)

作为模板写的时候方便查一下。本例生成两个节点talkerlisten1& 2, 互相接受对方消息,做了简单处理后在发出去。注意测试的时候先开B在开A。#include "ros/ros.h"#include "std_msgs/Float64.h"#include <unistd.h>class tl1{public: tl1(); void registerNodeHandle(ros::NodeHandle& _nh);//单独写出去注册nh

2020-08-19 16:13:44 486

原创 eigen库学习笔记(2)

这里主要整理矩阵运算相关内容。其中备注了与Matlab的命令对比。eigen库的矩阵运算Eigen 矩阵定义Eigen 基础使用Eigen 特殊矩阵生成Eigen 矩阵分块Eigen 矩阵元素交换Eigen 矩阵转置Eigen 矩阵乘积Eigen 矩阵单个元素操作Eigen 矩阵化简Eigen 矩阵点乘Eigen 矩阵类型转换Eigen 求解线性方程组 Ax = bEigen 矩阵特征值Eigen 矩阵定义#include <Eigen/Dense>Matrix<double,

2020-08-17 09:50:46 162

原创 庞特里亚金最小值原理求解能耗最小化的时间最优OBVP问题

本文依据论文A computationally efficient motion primitive for quadrocopter trajectory generation中所述的方法,整理出其中对OBVP问题的求解方法。所谓的OBVP即为optimal boundary value problem。OBVP是特殊的BVP问题,最简单的BVP问题就是state sampled lattice planning,这其实也是一种lattice planner方法。常见的例子比如:给定初始位置和终点位置,

2020-08-10 20:54:38 1578 4

原创 C++ vector库学习笔记

vector是C++标准模板库,它是一个多功能、能够操作多种数据结构和算法的模板类。vector是一个容器,能够像容器一样存放各种类型的对象。vector是一个能够存放任意类型的动态数组,能够增加和删除元素,可以完全替代C语言风格的动态数组,由于vector能够自动的管理内存,我们不需要考虑内存的增长和释放、具有很好的安全性。vector的初始化//定义具有10个整型元素的向量//(尖括号为元素类型名,它可以是任何合法的数据类型),//不具有初值,其值不确定vector<int>a(1

2020-08-02 14:59:22 200

原创 等式与不等式约束的序列二次规划(SQP)

最后介绍同时有等式约束和不等式约束的SQP解法。这里面的解法比之前的稍微复杂一点,用到了line search method以及BFGS下降。使用line search是为了增加搜索的鲁棒性,确保在任意的初始点都可以最后收敛到局部最优或者全局最优点。使用BFGS的作用是简化hessian的计算量。解如下问题:跟之前一样,这个问题的kkt条件为:依旧是要找到x,lamda, mu的增量,是的下一步的位置能够逼近kkt条件。以上的KKT条件离散化后改写为:这个KKT条件的源问题就是如下的QP问题

2020-07-30 18:08:24 826 1

原创 不等式约束的序列二次规划(SQP)

讲完等式约束的SQP,接下来就是不等式约束的SQP,其实两者的算法是完全没有区别的,唯一的就是因为引入了不等式约束,再推导上面就会去考虑近似KKT条件,从这个角度进行思考。解当前的问题就是解这个问题的对偶问题,两者在对偶间隙为0的时候取到最优点,取得的最优点满足KKT条件。接下来就是SQP with inequality constraints的推导,解如下的问题:离散化后,我们现在要做的就是在第K步的x_k和mu_k的基础上,找到一个方向,使得x_k+1和mu_k+1能够逼近下面的kkt条件:离

2020-07-30 16:31:20 1471 1

原创 等式约束的序列二次规划(SQP)

我们还是以陆吾生的Practical optimization algorithms and engineering applications第15章作为模板进行整理,讲的是真的清楚,对其中比较简洁的推导部分我手写了一部分方便初学者理解。这一节先介绍只有等式约束的SQP问题的解法。形如下式:根据一阶必要条件,我们知道在取得最优点的时候,拉格朗日函数取得0。假设我们在K步获得的x和lamda接近最优解,那么下一个k+1布需要做的就是找到delta x, delta lamda使得新的x, lamda

2020-07-29 10:49:45 974

原创 eigen库学习笔记

#简介Eigen是有关线性代数(矩阵、向量等)的c++模板库。支持SSE2/3/4, ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bit and 64-bit) instruction sets, S390x SIMD (ZVector)#简单的例子

2020-07-27 19:34:15 374

原创 Hybrid A*论文解析(4)

本文解析Autonomous driving in semi-structured environments: Mapping and planning,这篇文章其实是Hybrid A*论文解析(1)中的作者的文章的加强版,这个是上一篇文章基础上两年后作者发布的混合A*泊车方案。这里解析的内容就以两者的区别进行解析。1,variable resolution search通过叠加障碍物距离和voronoi边距两项值来判定向前拓展的弧长。这个方案的好处在于首先在宽阔区域能够拓展更远的距离,而在狭窄通道上拓

2020-07-26 20:33:55 942 1

原创 Hybrid A*论文解析(3)

本文解析论文Autonomous Parking using Optimization-Based Collision Avoidance。文章来自uc berkley,这个方案也是非常主流的混合A*泊车方案中的一种,百度也借鉴了这个方案来设计自己的在U型弯和停车场泊车中的功能。文中的方案也是已经开源到了作者GitHub,但这个是julia写的,感觉只有我数学系的老师金炳义才会用Julia,我港科数学系不是盖的好吧, 给数学系丢脸了。Julia这个我是真的没接触过,好在可以直接去读apollo的c++源码如

2020-07-17 19:20:46 941

原创 Hybrid A*论文解析(2)

本文解析Application of Hybrid A* to an Autonomous Mobile Robot for Path Planning in Unstructured Outdoor Environments文章是mathworks的混合A* planner唯二的参考文献之一。另一篇是上一个论文解析Hybrid A*论文解析(1)。而这篇文章里面提供的一系列工程中对混合A*的优化,由于没时间进行实现并不清楚方案是否有用,毕竟这里面提到的优化方案都是我没见过的非常规方案,等实现后更新本文。

2020-07-14 22:03:34 810

原创 Hybrid A*论文解析(1)

本文是对Practical Search Techniques in Path Planning for Autonomous Driving的解析。本文使用混合A方案结合共轭梯度法解决停车场泊车,U形弯掉头等场景的车辆规划问题。基本思路上:首先使用混合A规划出用车车辆泊车的带有前进后退的粗路径(我们以停车场泊车为例进行讲解)。这样的粗路径仅仅是局部最优的。第二部,在这个基础上,使用共轭梯度法进行收敛,大概率下可以获得全局最优解。最后这个路径对于车辆也不是最优的,因为任然有可能存在方向突变,然后再用一次

2020-07-14 18:51:15 1890

原创 自动泊车算法中混合A*粗路径的MATLAB实现

这里使用Matlab的navigation toolbox实现简单的混合A*粗路径。Load the cost values of cells in the vehicle costmap of a parking lot.load parkingLotCostVal.matCreate a binaryOccupancyMap with cost values.map = binaryOccupancyMap(costVal);Create a stateValidator object

2020-07-10 15:01:17 1581

原创 ReedShepp与Dubins path的matlab实现

RS和Dubins path网上都有很多解析,想了解深入的直接看原文是最好的:RS 曲线原文我在git上也找到了实现RS曲线的源码,已经放在我自己的仓库里了,有兴趣可以拉源码看看,毕竟dubins用的还真不多,所以没去找:本人git这里用matlab自带的RS and Dubins connection 来展示一下这两种曲线的实现。真正在用的时候没有必要去做源码实现,大概了解清楚原理即可,毕竟无论你用什么语言,py, cpp, m, julia都有这两种曲线的库。直接调用即可。- RS曲线//Co

2020-07-07 10:31:22 1563 1

转载 转载一个pythonA*实现

1 import numpy 2 from pylab import * 3 4 # 定义一个含有障碍物的20×20的栅格地图 5 # 10表示可通行点 6 # 0表示障碍物 7 # 7表示起点 8 # 5表示终点 9 map_grid = numpy.full((20, 20), int(10), dtype=numpy.int8) 10 # print(map_grid) 11 map_grid[3, 3:8] = 0 12 map_grid[3:10, 7]..

2020-07-04 11:38:07 262 1

原创 DWA泊车算法的实现

本文接DWA动态窗口法的原理及应用提供了基于DWA算法的仿真实现。但是DWA的弊端时很明显的,他对heading的实现是一个软约束,并不能够很好的在终点达到期望的heading.这个问题在对终点heading很敏感的泊车功能中是非常大的。通过修改泊车点的期望heading以及修改对应cost function中的weight,读者可以进行研究。% -------------------------------------------------------------------------%% Fi

2020-07-02 15:45:35 1032

原创 自动驾驶论文解析(7)

本文解析论文:A Practical Trajectory Planning Framework for Autonomous Ground Vehicles Driving in Urban Environments来自国防科大团队文章依旧沿用了经典的横向的空间规划,和纵向的速度规划。在横向上,横向位置是关于纵向距离S的三阶多项式。纵向上速度是关于时间T的四阶多项式。对速度的规划采用了典型的机器人速度规划方法,梯形速度规划,然后在做后处理进行速度平滑。另外,在对轨迹的前处理中,对车道中心线为代表的

2020-07-01 14:15:30 832 2

原创 基于BFS+DFS+CoordinateDescent的motion planning设计思路

作者受论文path planning for on-road autonoumous driving with concetrated iterative search的启发,设计了一个新的基于linear segments的motion planner.方法分为三部分:首先进行深度搜索,获得粗路径,再用广度搜多获得精确路径,再用CD迭代获得平滑路径。本文持续更新:基于BFS的搜索方案clcclear allobs = [4.5, 0.5; 5.5,0.5];point_ini = [0,0]

2020-06-24 14:56:05 229

原创 Git操作记录方便查阅

git clone后对远程分支的拉取:git checkout --track origin/<branch>#在本地仓库中自动生成一个与远程分支名相同的分支,并进行关联。git branch -d <branch># 删除本地的分支

2020-06-17 16:32:24 220

原创 polynomial plot

In this section, we provide a function that supports generate a quintic polynomial.xs = 3;vxs = 0.3;axs = 0;xe = 0;vxe = 0;axe = 0;T = 8;[a0, a1, a2, a3, a4,a5] = quintic_polynomial(xs, vxs, axs, xe, vxe, axe,T);figurefor t = 0:0.1:T d = a0

2020-05-19 14:04:24 194

原创 自动驾驶路径规划论文解析(6)

本文解析State Space Sampling of Feasible Motions for High-Performance Mobile Robot Navigation in Complex Environments文章对motion planning的方法进行了一个总结,并且提出了自己的state space sampling method.对于control sampling和state space sampling这两种方法 值得注意的几个总结如下:对于state space sam

2020-05-11 19:20:58 870

原创 c++内联函数解析(inline)

一、基本定义inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单。说到内联函数,这里给出比较常见的定义,内联函数是C++中的一种特殊函数,它可以像普通函数一样被调用,但是在调用时并不通过函数调用的机制而是通过将函数体直接插入调用处来实现的,这样可以大大减少由函数调用带来的开销,从而提高程序的运行效率。一般来说inline用于定义类的成员函...

2020-05-07 11:09:08 119

原创 DWA论文解析(CurvatureVelovityMethod)(3)

本文解析论文the curvature velocity method for local obstacle avoidance文章的思路和DWA一致,但是本文的侧重点在实时性能的提高上面。做了很多计算加速。对于DWA的部分我们略过,可以参考之前的博文DWA论文解析(2)DWA论文解析(1)DWA动态窗口法的原理及应用与论文中的DWA略有不同的是这里面有一项碰撞距离的cost func...

2020-05-06 17:26:09 435

原创 DWA论文解析(2)

本文解析 The Lane-Curvature Method for Local Obstacle Avoidance文章是将directional approach的优点加入了这个方法中。文中所谓的CVM method(curvature velocity method)也就是后面所谓的dwa,只是名字不同而已,都是采样rotational and transitional velocity,...

2020-04-12 14:18:34 452

原创 DWA论文解析(1)

本文解析Dynamic window based approach to mobile robot motion control in the presence of moving obstacles文章主旨:文章将全局规划FD*(focused D*)和DWA合起来一起用,由全局规划指导一条不发生碰撞的路径(更重要的是他不会落到局部最优解),然后再用dwa方法去做局部规划。对于局部最优问题...

2020-04-04 21:04:38 1259 3

obc-optimal_04Jan10.pdf

LQR原理的参考文献。我文章中的LQR原理介绍可以直接参考这里。

2019-10-03

GeelyControl0911B.slx

自动驾驶博文:自动驾驶车辆转向控制(通过扭矩控制实现方向盘转角控制)中的simulink模型,可以下载进行参考

2019-09-12

EPScontrol.slx

通常情况下,线控EPS可以支持转角控制,或者扭矩控制。现在本模型以支持转角控制的线控EPS为例,解释如何通过仅支持EPS转角控制的执行器实现转角速度控制。

2019-10-03

A Practical Trajectory Planning Framework for Autonomous Ground vehicles drving

A Practical Trajectory Planning Framework for Autonomous Ground vehicles drving in urban environments

2020-06-30

GPStrackingGeneral1009A.slx

博文中提到的资源,代码文档。https://blog.csdn.net/gophae/article/details/102469489

2019-10-09

空空如也

空空如也

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

TA关注的人 TA的粉丝

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