系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理
文章目录
- 系列文章目录
- 前言
- 一、机器人决策规划岗位的本质的认识
-
- 0、规划确定场景与需求
- 1.不同领域对规划控制的理解
- 2.路径规划的目的
- 3.规划算法的发展历史自己的看法
- 4.对于规划的算法看待
- 5.导航(路径规划)岗位要求
- 二、机器人决策规划的基础理论方向
-
- 1.【Trajectory_planning】机械臂轨迹规划
-
- (1)机械臂执行器轨迹规划理论
- (2)偏向于机械臂规划的应用库
- (3)熟悉机械臂/狗腿常见的轨迹规划算法
- 2.【mission_planning–navigation】导航任务决策规划
-
- (1)导航任务决策模块设计的介绍
- (2)行为决策算法部署的业务场景(仅供参考)
- (3)行为决策算法实现的工具
- (4)参考资料
- 3.【path_finding】前端路径搜索
-
- (1)路径探索的介绍
- (2)前端路径探索的业务场景算法方向
-
- (1)覆盖式路径探索CCPP(Complete Coverage Path Planning)方向
- (2)矢量地图巡线选择式路径探索算法方向
- (3)(两/多点)约束式路径探索算法方向
- 4.【motion_planning】后端轨迹处理
-
- (1)路径点和轨迹点的理解
- (2)对base_waypoints进行简单逻辑处理、设置/插值/平滑方向
-
- 1)全局路径的逻辑处理方向举例)
- 2)路径点属性设置/插值/平滑处理方向
- (3)曲线拟合优化方向
- (4)对base_waypoints轨迹优化选择方向
- (5)进行对应功能的replan方向
-
- (1)replan类型
- (2)replan进入条件
- (3)replan预处理【实现replan的初始条件】
- 5.【trajectory_following】路径巡航、跟踪控制
-
- (1)路径跟踪控制输入输出
- (2)建立机器人底盘运动学和动力学模型,及其状态方程(举例)
- (3)熟悉坐标空间变换原理及实现(TF、eigen)
- (4)路径跟踪算法类型
- 6.【tuw_multi_robot】多机器人规划算法
-
- 多机器人协同作业冲突问题
- 三、机器人决策规划的工程部署步骤部分
-
- 1.根据场景业务层、机器人载体模型层,相关模块与系统支持层、算法技术原理层进行导航方案的选型
-
- (1)场景需求层【不同场景的局部规划避障的方案不一样】
- (2)机器人载体模型层【不同车底盘模型的局部规划避障方案不一样】
- (3)相关模块与系统支持层【规划 与 控制&定位&地图&感知】
- (4)算法理论技术层
- 【具体问题具体分析】
- 2.进行算法工程验证与部署
- 3.路径规划算法评价方法
-
- 具体评价指标如下:
- 四、机器人决策规划的导航架构demo&&规划库部分
-
- 1.运动规划库
-
- OPML库的学习与使用
- 2.【挖坟】导航架构参考demo
-
- (1)飞机的导航框架demo
- (2)无人车的导航框架demo
- (3)机器人的导航框架demo
- 总结(规划相关)
-
- (1)场景业务需求思考上
- (2)系统其他模块支持思考上
- (3)规划算法原理思考上
- (4)导航框架设计思考上
- (5)算法部署形式思考上
- (6)规划的难点思考上
- (7)区分全局规划、局部规划、行为规划、路线规划、运动规划的由来
- (8)无人车规划与机器人规划的关系
- 参考资料
-
- (0)规划概览
- (1)较好的博客资料总结
- (2)算法及论文
- (3)运动规划仿真的开源项目
- (4)书籍
- (5)路径规划比较好的路径规划课题组
前言
认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!
提示:以下是本篇文章正文内容
一、机器人决策规划岗位的本质的认识
0、规划确定场景与需求
(1)机器人和自动驾驶兼容的场景需求
1、巡航
2、动静态障碍物的避障,停障
3、纠偏
4、跟人
5、通过狭窄道路
(2)自动驾驶场景需求
1、巡航
2、动静态障碍物的避障,停障
3,换道,超车
4、侧方,倒车泊车
5、纠偏
6、跟人
1.不同领域对规划控制的理解
规划问题的本质
->规划问题的本质一个搜索问题(给你一个函数,你找到最优解的问题)
->根据你当前的状态state,映射到一个行为动作action【防盗标记–盒子君hzj】
->给定一个环境地图,一个起始点、一个或者多个目标点,搜索一条满足需求(最优)的路径去实现
我从这三个角度定义不知道会不会很抽象呢~~我再好好想想,还是以具体领域去定义好呢~
(1)机器人\自动驾驶规划领域的理解
给定一个环境地图,一个起始点、一个或者多个目标点,搜索一条满足需求(最优)的路径去实现
找到一条从起点到达终点的轨迹–A*、RRT、D*Lite、lattice_planning等等
1、前端路径搜索(path finding\glabol_planning\route_planning)
2、后端的轨迹优化(motion_planning/locat_planning)
3、mission_planning属于决策部分。
.
(2)控制领域的理解
动态系统规划去达到目标问题MPC,LQR等等【轨迹跟踪方面】
.
(3)AI深度学习领域的理解
->根据你当前的状态state,映射到一个行为动作action
生成状态映射到动作–强化学习等等
强化学习RL、端到端的神经网络
.
.
2.路径规划的目的
一般由于机器人移动的空间环境约束,【防盗标记–盒子君hzj】关于其路径规划一般会分为离散和连续路径规划两种方式,移动机器人的路径规划是为了帮机器人规划线路从起点最终到达终点,并且所选择的路径运行方式能避开路径中的障碍物,且路径选择达到最佳
规划算法的思想其实和人的思维式一样的,根据当前的状态state,映射到一个行为动作action,给定一个环境地图,一个起始点、一个或者多个目标点,搜索一条满足需求(最优)的路径去实现,规划问题的本质一个搜索问题(给你一个函数代价约束,你找到最优解的问题)
.
.
3.规划算法的发展历史自己的看法
看论文会发现路径规划的论文非常多,【防盗标记–盒子君hzj】如果是针对于机器人的路径规划,从最开始的基于图搜索的算法,但后来基于采样的算法,从13年开始两种类型的算法开始走向结合,15年之后开始解决有动力学约束的算法,再后来根据场景设计路径探索方法,再后来出现基于优化和曲线拟合的后端轨迹规划,再后来…
.
.
4.对于规划的算法看待
路径规划模块性能的高低直接关系车辆行驶路径选择的优劣和行驶的流畅度,而路径规划算法的性能优劣很大程度上取决于规划算法的优劣
对于规划做深的,感觉每个团队都有每个团队的定义,【防盗标记–盒子君hzj】但是能实现的功能和实现的方法都有共通之处,反正能通过各种原理的规划算法实现场景的导航规划需求就行
.
.
5.导航(路径规划)岗位要求
产品需求理解,配合其它工程师完成机器人算法的开发、调参与测试、优化迭代重构
(我觉得这是形容得最最最贴切的了~,别喷我,要脸)
.
.
二、机器人决策规划的基础理论方向
具体理论和源码分析我写在其他专栏博客,这里我仅仅做个方向科普介绍
规划算法的分类
(1)曲线插值拟合的方法【这个一般可以通过库或者移植源码实现】
(2)轨迹优化平滑的方法【这个涉及优化理论】
(3)图搜索的方法
(4)增量采样的方法
车辆的安全行为的逻辑决策比较复杂的!使用的就是HFSM的分层决策状态机
.
1.【Trajectory_planning】机械臂轨迹规划
通常是说机械臂的路径规划
.
(1)机械臂执行器轨迹规划理论
具体参考我机械臂/多足机器人轨迹规划专栏,请转战:
.
(2)偏向于机械臂规划的应用库
1)Open Motion Planning Library(OMPL)库
内置了RRT实现的各种算法(把算法打包成了库直接用就行)
官网链接:https://ompl.kavrakilab.org/
2)机械臂控制moveit规划库
官网链接:https://moveit.ros.org/
https://industrial-training-master.readthedocs.io/en/melodic/_source/session4/Motion-Planning-CPP.html
.
(3)熟悉机械臂/狗腿常见的轨迹规划算法
贝塞尔曲线\B样条、正弦余弦函数拟合、多项式函数拟合
.
.
2.【mission_planning–navigation】导航任务决策规划
(1)导航任务决策模块设计的介绍
我认为,任务决策模块比较偏业务层了,具体的根据机器人/无人驾驶业务层得需求进行设计,根据业务量的复杂程度,选用不同的任务决策工具和方法,实现既能满足现在的业务需求,又能又一定的拓展性
.
.
(2)行为决策算法部署的业务场景(仅供参考)
(1)自动驾驶航线业务决策【behavioral_planning】
包括如下:
1)(交规)业务决策 :交通灯、斑马线、转弯、停障、避障、脱困、回充等等【防盗标记–盒子君hzj】
2)横向换道移动决策
3)纵向换道移动决策
…
(2)多场景组合规划切换导航方案决策【Combinatorial Planning】
同一个机器人适应不同的规划场景可以像autoware这样,【防盗标记–盒子君hzj】结构化场景用矢量地图,非结构化场景用A*路径探索的方法。在不同场景切换不同的全局规划器和不同的局部规划器
路径探索可以根据场景进行切换全局规划器,局部规划器也可以根据场景进行切换,路径探索可以多方案切换,轨迹优化replan也可以多方案切换,基础知识学牢,根据场景具体问题具体分析!
(3)执行应用机构业务决策【function_planning】
执行应用机构我是这样理解的,车底盘和机器人底盘执行导航业务,【防盗标记–盒子君hzj】底盘上连接的执行应用机构(如机械臂)执行功能业务
(1)机械臂配合底盘的决策
(2)人机交互作业决策
…等等
.
.
(3)行为决策算法实现的工具
(1)嵌入式软件系统方式(ROS的话题、服务、action机制、定时器、中断时间)
(2)简单C/C++语法方式(if-else、switch)
(3)有限状态机FSM
(4)MDP
(5)行为决策模型(POMDP)
(6)决策树decision tree/行为树behaviar tree
(7)ROS的任务级状态机smach
…
根据任务是否复杂进行选择工具,能满足需求就行…
我用的比较多的还是有限状态机(fsm),其他的我另开博客写吧,本问只做科普
.
.
(4)参考资料
自动驾驶中的行为决策
https://blog.csdn.net/Travis_X/article/details/118995187
https://blog.csdn.net/Travis_X/article/details/87791457
.
.
3.【path_finding】前端路径搜索
(1)路径探索的介绍
全局路径规划算法难度不算复杂,一般根据高精度地图、栅格地图或者其他地图格式,从出发点到目标点之间的纯几何路径规划,无关时间序列,无关车辆动力学(位置速度加速度),得到一条可通行的路径
由于其只考虑了环境几何信息,【防盗标记–盒子君hzj】往往忽略了无人机本身的运动学与动力学模型。路径探索一般得到的都是折线,折线的低阶的,因此得到的轨迹往往显得比较“突兀”,并不适合直接作为无人机的控制指令,因此,后面还会有一个轨迹优化的过程
路径探索有很多方法,轨迹生成/优化也有很多方法,可以从路径探索和轨迹生成/优化中各选取一种方法组合使用。当然也可以只用路径搜索,不用轨迹优化,或者融合多种规划算法,看场景定
(1)路径探索的输入:地图、当前定位、坐标点【起始点、目标点、(或许要中间点)】
(2)路径探索的输出:一系列路径点定义的轨迹,每个路径点(x,y)分配一个时间戳和速度,然后用一条曲线将这些路径点进行拟合生成轨迹的几何表征【防盗标记–盒子君hzj】
.
(2)前端路径探索的业务场景算法方向
(1)覆盖式路径探索CCPP(Complete Coverage Path Planning)方向
适用场景:【覆盖巡航场景】如:农用车、农用飞机、扫地机器人
内容较多,转战我博客链接
https://editor.csdn.net/md/?articleId=120594927#4_125
.
.
(2)矢量地图巡线选择式路径探索算法方向
适用场景:【结构化场景–巡线、换行、停障】如:无人驾驶、园区巡逻机器人
内容较多,转战我其他博客链接
介绍如何只做矢量地图链接:
矢量地图用于巡航链接:【防盗标记–盒子君hzj】
.
.
(3)(两/多点)约束式路径探索算法方向
适用场景:【非结构化场景–最短距离,耗能最低,动力学、避障】如:物流、无人驾驶车
内容较多,转战我其他博客链接:https://editor.csdn.net/md/?articleId=120601101
.
.
4.【motion_planning】后端轨迹处理
(1)路径点和轨迹点的理解
waypoint路径点–路径点仅仅包含位置/位姿信息,轨迹点既包含位置/位姿信息也包含时间信息。
一般路径探索得到的点称为路径点,轨迹优化得到的点称为轨迹点
**路径表达:**以环境模型中的结点序列组成或由直线段序列组成
**路径平滑:**根据机器人运动学或动力学约束,形成机器人可跟踪执行的运动轨迹
**运动学约束:**路径轨迹的一阶导数应连续
**动力学约束:**路径轨迹的二阶导数应连续【防盗标记–盒子君hzj】
(2)对base_waypoints进行简单逻辑处理、设置/插值/平滑方向
1)全局路径的逻辑处理方向举例)
2)路径点属性设置/插值/平滑处理方向
(1)路径点属性设置/插值/平滑需求
(2)路径点属性设置/插值/平滑方向工具
(3)效果
【路径简单处理】轨迹优化
https://www.bilibili.com/video/BV1T54y1E7BR?spm_id_from=333.999.0.0
【路径简单处理】路径平滑处理
https://www.bilibili.com/video/BV1yh411B78a?spm_id_from=333.999.0.0
【路径简单处理】跟踪绘制的路径
https://www.bilibili.com/video/BV1MX4y1F7PG?spm_id_from=333.999.0.0
.
.
.
(3)曲线拟合优化方向
具体看我发表曲线的博客,详细的在里面论述了,转战场:
.
.
.
(4)对base_waypoints轨迹优化选择方向
(1)闭式解–数值优化
(2)设计代价函数进行评分、然后选择代价最低的
(3)梯度下降的函数优化
(4)硬约束(飞行走廊)轨迹优化
(5)软约束(人工势场–esdf地图)轨迹优化
(6)感知(视觉深度学习)融合优化
上面的理论和源码具体看我发表曲线的博客,详细的在里面论述了,转战场:
.
.
(5)进行对应功能的replan方向
(1)replan类型
【1】进行停障replan
【2】进行避障replan
【3】进行纠偏replan
【4】进行换道replan
【5】进行自动泊车replan
【6】进行穿过狭窄道路replan
这里replan的一般方法我写在另外一个博客了,转战场:
(2)replan进入条件
机器人没有遇到障碍物的时候,执行静态全局规划;
机器人若是遇到了障碍物的时候,启动局部规划replan,输出实时的局部路径
若不用遇到障碍物条件作为触发,一直运行实时局部规划,非常耗算力,有可能不能很好的跟踪到全局路径
要不要实时运行局部规划的轨迹优化其实也得看场景,【防盗标记–盒子君hzj】场景是否复杂要求较高得准确性,车速是否很高等等,一般来说,要进行是否可以replan的一系列判断
全局规划与局部规划的运行方式既可以用地图检测障碍物来触发,也可以用串行的方式:
(1)全局规划 -> 控制
(2)全局规划 -> 局部规划 -> 控制
(3)全局规划 -> (detect) -> 控制
(detect) ->局部规划 -> 控制
碰撞检测算法:
(1)地图的的方法(栅格地图分辨率的判断)
//判断路径点(x.y)是否与障碍物相撞【通过地图判断】bool isCloseCollisionfloat x, float y){int index_x = int)roundx - occupancyMap2D.info.origin.position.x) / _mapResolution);//计算水平方向距离int index_y = int)roundy - occupancyMap2D.info.origin.position.y) / _mapResolution);//计算垂直方向距离int index = index_x + index_y * occupancyMap2D.info.width;//(x,y)点超出了地图边界if index_x < 0 || index_x >= occupancyMap2D.info.width ||index_y < 0 || index_y >= occupancyMap2D.info.height)return false;//查询index对应的栅格代价值,若大于50,认为与障碍物相撞if occupancyMap2D.data[index] > 50)return true;elsereturn false;}
(2)感知的方法
(3)其他的方法
FCL算法、PQP算法、YAOBI算法、Bullet算法
(4)判断两个bounded box的相交情况
(3)replan预处理【实现replan的初始条件】
进行避障的动作之前一般要把速度降下来,路径规划于控制也是要满足一定的条件【防盗标记–盒子君hzj】,这样能较大的提高规划的效果和安全性
控制模块(1)降速操作(2)校正位姿操作
等等,具体看导航系统设计
.
.
.
5.【trajectory_following】路径巡航、跟踪控制
(1)路径跟踪控制输入输出
控制器的输入:目标轨迹和车辆状态
控制器输出:控制车辆(转向、加速和制动)的值
(2)建立机器人底盘运动学和动力学模型,及其状态方程(举例)
(0)质点模型x,y)
(1)阿克曼小车【自行车模型(x,y,yaw)】
(2)双阿克曼小车
(3)四轮差速小车
(4)麦轮小车
(5)四轮四转变结构小车
(3)熟悉坐标空间变换原理及实现(TF、eigen)
待整理,就是TF(ROS)用eigen实现的方法
.
.
(4)路径跟踪算法类型
轨迹跟踪是:根据轨迹和机器人当前状态(当前位置、速度、加速度),【防盗标记–盒子君hzj】输出机器人控制指令(速度、加速度、角速度等),控制机器人沿着轨迹运动。有很多种跟踪方法
(1)特定场景通用PID控制
(2)无人车几何解算–纯追踪算法pure pursuit
(3)无人车模型预测–MPC算法
(4)无人机–微分平坦
(5)强化学习相关算法
(6)ffsteeringcontrol
每种方法具体的我写在了其他博客上
参考资料:
Pure Pursuit纯路径跟踪算法:
https://blog.csdn.net/Travis_X/article/details/115000150
模型预测控制:
https://blog.csdn.net/Travis_X/article/details/115593493
如何使用Pure Pursuit和MPC进行路径追踪:
https://blog.csdn.net/Travis_X/article/details/106116998
6.【tuw_multi_robot】多机器人规划算法
多机器人协同作业冲突问题
(1)介绍
多机器人系统就是当工作较为复杂时,单个机器人不能胜任此工作,多个机器人一同来完成,机器人各司其职、团结协作共同完成某一项任务。多机器人系统因拥有更高的灵活性和更快的工作效率,可以完成更为复杂的工作,因而得到了极大的发展。多机器人协同作业的核心技术在于:解决机器人之间的冲突和对抗。【防盗标记–盒子君hzj】最大程度的发挥整体系统的潜能,处理更加复杂的动态任务
(2)多机器人系统的优点
1)具备时间、空间、功能、信息和资源上的分布性。即多个机器人可以在工作空间不同的区域同时工作;在同一时间可执行不同的任务。
2)具有较好的鲁棒性。当机器人系统中的某一个体发生故障时,该系统仍可以完成预先分配的任务。
3)具有较高的工作效率和柔性,更适合于先进制造在柔性、智能化及网络化等方面的要求。
4)具有较好的灵活性。
5)降低系统造价与复杂度。多机器人系统可以对某一项任务提供多种解决方案,针对需求,选择合适的方案
(3)冲突的定义
对于单机器人而言,在沿着路径规划运动时仅需考虑避开障碍物,【防盗标记–盒子君hzj】不会发生机器人运行中的碰撞冲突等问题,所以无需考虑如何避开其他移动机器人的问题。但是对于多个机器人来说,运行系统较为复杂,调度不合理或有意外情况发生时都将会导致机器人发生碰撞或者冲突严重的将会导致系统瘫痪
冲突是指机器人沿着路径规划运动时,【防盗标记–盒子君hzj】由于空间和时间的缘故存在路径交叉的现象。冲突具体表现为在同一个空间中两个机器人在同一时刻同一地点存在相遇或有相遇趋势的情况,导致死锁现象.
(4)冲突的类型
1)相向相遇冲突
2)相向相遇冲突
3)占位冲突
4)占位冲突
5)占位冲突
(5)冲突解决策略
1)预测方法
即提前推测机器人在运行过程中可能遇到的障碍物,并根据障碍的类型采用相应的避障策略,该算法仅适应于静态环境,在复杂的环境中往往很难解决多机器人冲突问题;更不适应于动态环境
2)反应式方法
即机器人在运行过程中,系统根据当前机器人行驶的路径状态分段确定机器人的路径,实现避障。其特点是反应速度比较快
3)时间窗方法
可以准确的规划出每一个机器人的行驶路径,且该路径不存在碰撞与冲突的可能,【防盗标记–盒子君hzj】对于新任务反应迅速,同时又减少了计算的复杂度。该方法的应用条件较为苛刻,必须在理想环境下进行。且该方法的使用会增加系统的复杂程度,降低工作效率
(6)多机协同作业的核心技术
1)平均分配任务量的同时为每台机具制定作业路线
当多个农机位于同一工作区域中,路径规划算法需要将整片区域均分,然后规划路径,确保每台农机的工作量一致,提高多机协同的工作效率。
2)对机器人—机器人,机器人—障碍物的相对位置判定
在多机协同作业过程中,单台农机需要避开移动的其他农机以及静止的障碍物,【防盗标记–盒子君hzj】因此在多机协同作业过程中单台工作农机需要获取其他物体的实时位置,实现动态避障。实现上述目标需要的核心技术有实时信息传输,适于大田工作的通信方式以及集体智慧技术
.
.
.
三、机器人决策规划的工程部署步骤部分
1.根据场景业务层、机器人载体模型层,相关模块与系统支持层、算法技术原理层进行导航方案的选型
(1)场景需求层【不同场景的局部规划避障的方案不一样】
(1)约束场景
1)静态结构环境下的路径规划
静态信息一般是从高精度地图模块(矢量地图、栅格地图)中获得的,【防盗标记–盒子君hzj】用于快速理解道路的信息(车道的类型及连接、交通灯位置等等)【离线处理】
农场园区、停车场
2)动态已知环境下的路径规划
动态信息一般是从定位模块(rtk、gps、车底层里程计、IMU)、感知模块(点云、图像)获得的,用于快速处理突变的状况【在线处理】
高速公路、普通公路
3)动态不确定环境下的路径规划
4)道路交通规则/园区场景规则
5)路径规划中的障碍物的分类
(1)旁边式的障碍(partially obseved)
(2)占据式的障碍(fully obseved)
(2)需求功能
.
.
.
(2)机器人载体模型层【不同车底盘模型的局部规划避障方案不一样】
(1)小车底盘规划
1)双阿克曼小车
2)阿克曼小车
3)四轮差速
4)麦轮小车
5)四轮四转变结构小车
(2)硬件计算的实时性要求
道路上的规划标准是0.2~0.3秒左右【司机的一般反应时间是0.4-0.5秒】
在有限的时间内找到一个可行解,不一定是最优解了
工具要用到C++或者C实现,因为这种语言比较块
(3)相关模块与系统支持层【规划 与 控制&定位&地图&感知】
(1)规划算法与其他模块支持
在实际的开发过程中,更多地需要考虑机器人自身其他模块的性能,【防盗标记–盒子君hzj】例如电机能够提供的最大加速度,定位算法模块的精度等,地图模块以什么格式给到规划
(2)规划算法和部署平台的支持
这个平台我指的是嵌入式硬件平台和嵌入式系统(如ROS或者公司自己的平台)
(4)算法理论技术层
上面的理论
【具体问题具体分析】
综合考虑所有的分类,进行算法方案选型
每种算法都是针对一种场景的,一般的算法的通用性都不强【防盗标记–盒子君hzj】,每种算法都有它的优势,都有他的适应场景,自己总结出来(不存在通用绝对好的算法)
.
.
.
2.进行算法工程验证与部署
(1)【挖坟】仿真各种开源demo、项目demo
(2)部署实验小车验证、或者仿真验证
(3)部署产品验证
.
.
.
3.路径规划算法评价方法
以机器人实时位姿估计为轨迹起始状态,导航目标为终止状态,生成符合动力学模型,且保证安全性的运动轨迹。规划模块要求生成轨迹的安全性、光滑性、动力学可行性
轨迹应能免于碰撞、舒适(路径点之间的过度以及速度的任何变化都必须平滑)【防盗标记–盒子君hzj】、路径点对车辆应实际可行、轨迹应该合法
具体评价指标如下:
(0)算法理论是否完备
产品稳不稳定除了看效果,还要关注实现过程中算法理论的正确性(当然后者一般都不公开,但是研发人员必须要清楚,一个产品算法理论或者逻辑上有问题,验收通过也是暂时的,返修的几率很大!!!)
(1)计算成本最低
计算效率最高,以最快的速度找到最优解,好的算法是功能更强大,计算更简单
(2)安全性(safelly)
能避障
(3)平滑性(smoothly)【位置、速度、加速度】
零阶导数、一阶导数、二阶导数、三阶导数甚至高阶导数时候可导,没有折点【防盗标记–盒子君hzj】,阶数越高平滑性越好,对车辆控制的输入更理想
节省能量,提升运动的连续性
(4)实时性(real time)
(5)准确性
(6)动力学可行性
可执行、可控制
.
.
.
四、机器人决策规划的导航架构demo&&规划库部分
1.运动规划库
OPML库的学习与使用
(1)安装:sudo apt-get install ros-melodic-opml
(2)使用:在cmakelist中的find pack)中添加这个库,并在源码中添加他的.h文件,编程的API查阅他的官方手册
(3)opml库内置了很多路径规划的功能包,如RRT类
一个算法可以使用源码实现,也可以使用库编译出来的可执行文件实现!
ompl库和move_base库的避障功能都是用到cost_map地图的,但是ompl库不提供状态机
2.【挖坟】导航架构参考demo
学习每个demo的原理都要进行总结和拆分,可以下载多几个demo,工程验证出来做几个基本的验证,再简单的阅读原理和代码记录下来,以备以后用到!!用到再详细部署考虑
每个算法原理都值得分析他的理论、提炼出核心思想与实现手段,【防盗标记–盒子君hzj】理解它的核心思想,做planning的方法储备!
规划效果越好的planner用的思想越多!学习规划建议还是从基础学起来,导航算法的每个模块原理都掌握后,都可以进行融合,基础的工程能力掌握后,后续自己什么都能干。起步很难,后面的路就越走越宽了!
每个规划的方法都有它的优缺点,读完每一个demo后都要对原理进行解剖分类。因为规划要实现一个业务功能往往要对场景进行细致的划分,针对每个场景使用不同的规划方法(open_planner+hybrid A*+r曲线)等等
(1)飞机的导航框架demo
1、Fast Planner
视频:https://www.bilibili.com/video/BV1zv411K7DF?spm_id_from=333.999.0.0
2、fast_tracker
视频:
https://www.bilibili.com/video/BV1mh411H7nf?spm_id_from=333.999.0.0
github:
https://github.com/HKUST-Aerial-Robotics/Fast-Planner
https://github.com/HKUST-Aerial-Robotics/Btraj
https://github.com/HKUST-Aerial-Robotics/grad_traj_optimization
论文:
https://www.researchgate.net/publication/288835622_INTELLI_2015_The_Fourth_International_Conference_on_Intelligent_Systems_and_Applications#page=109
F Gao, W Wu, Y Lin, S Shen,Online safe trajectory generation for quadrotors using fast marching method and bernstein basis polynomial
Gradient-Based Online Safe Trajectory Generation for Quadrotor Flight in Complex Environments, Fei Gao et al.
Online Safe Trajectory Generation For Quadrotors Using Fast Marching Method and Bernstein Basis Polynomial, Fei Gao et al.
Gradient-Based Online Safe Trajectory Generation for Quadrotor Flight in Complex Environments, Fei Gao et al
参考网站:
https://blog.csdn.net/Travis_X/article/details/115709442
3、Ego Planner
https://www.bilibili.com/video/BV1e54y177Aa?spm_id_from=333.999.0.0
4、导航中重规划和层级规划的方法【港大框架】
https://blog.csdn.net/Travis_X/article/details/115739543
5、Teach-Repeat-Replan System
.
.
.
(2)无人车的导航框架demo
1、autoware的无人驾驶规划demo
2、apollo无人驾驶demo
3、目标运动预测和轨迹跟踪规划【浙大实验室】
论文:
Fast-Tracker: A Robust Aerial System for Tracking Agile
Target in Cluttered Environments
参考网站:
https://arxiv.org/pdf/2011.03968v1.pdf
https://blog.csdn.net/Travis_X/article/details/118243555
代码
https://github.com/ZJU-FAST-Lab/Fast-tracker
4、CoInCar-Sim项目
5、CarND-path planning项目
…
.
.
.
(3)机器人的导航框架demo
1、move_base机器人的规划demo
Move_base中添加自定义全局规划器
https://blog.csdn.net/Travis_X/article/details/102373538
2、自己公司的方案
…
总结(规划相关)
(1)场景业务需求思考上
导航应用在物流和无人驾驶,还有机器人上,每个规划的方法都有它的优缺点,【防盗标记–盒子君hzj】读完每一个demo后都要对原理进行解剖分类。因为规划要实现一个业务功能往往要对场景进行细致的划分,针对每个场景使用不同的规划方法(open_planner+hybrid A*+r曲线)等等
规划的方法都是相通的,只是部署的场景不一样,路径规划的积累应该按场景需求来!!路径规划的方案和算法受场景的约束很大!我要根据每种场景区分路径规划算法,而不是算法理论去区分算法
说到底,代码算法设计目的还是要响应场景业务需求
.
.
(2)系统其他模块支持思考上
无人驾驶的决策规划模块需要其他多模块的支持的,单单自己一个模块时无法部署下来的
好的规划算法都需要多个模块进行好的支持,【防盗标记–盒子君hzj】把自己规划那部分在仿真中先实现出来,部署要考虑很多个模块的,要一起推进,规划做输出主要看公司支持的模块做调整
【规划&&地图】
规划的原理其实都是那几种,主要是看在什么地图上去,规划必须依赖地图,像素占据地图?点云图?代价图?esdf图?等等
像素占据地图做规划也能做避障,给到路径航线就行!(静态规划而已,用曲线拟合的方式做避障而已),东西学到核心精髓都是融汇贯通,灵活运用的
【规划&&控制】
无人机和无人车的等不同载体路径规划的需求是不一样的
机械和硬件嵌入式决定了无人车的最高速度,【防盗标记–盒子君hzj】算法不断优化只是迫近这个最好速度,当算法性能突破了这个最高速度后,车辆就不可控了,因为算法超越了机械和硬件嵌入式的模型约束了,所以说,做机器人机械和硬件很重要,调试算法是看综合的重要
【规划&&定位】
【规划&&感知】
.
.
(3)规划算法原理思考上
【1】发展都是一步一步踩着积累的平台来的
举例:
-> 高飞实验室现在比较好的成果都是博士期间港科大积累下来的,通过组合于寻找落地点产出更好的应用
-> PRM是A与Dijkstra上加入采样的算法发展而来的,采样部分,【防盗标记–盒子君hzj】搜索部分有用这种思想!
-> lexicographic_planner是继承open_planner还是PRM还是A呢?都有参考
规划效果越好的planner用的思想越多!学习规划建议还是从基础学起来,导航算法的每个模块原理都掌握后,都可以进行融合,基础的工程能力掌握后,后续自己什么都能干。起步很难,后面的路就越走越宽了!
基础算法要打好,工具要用好!!系统要用好,知识要全,各方面场景和方案要积累下来,慢慢推进
【2】规划要掌握核心的思想
每一种规划算法都是从最基础的图搜索、采样、动力学的传统思想演变过来,或许是某一种算法扩展,或许是几种传统思想融合在一起
不同的图搜索算法,计算速度有快有慢,得到的最终路径有好有不好!记住每种算法的特征,在适用的场景选择合适特征的算法就好
规划也有任务分配的,前端效果做出来了,后端任务就不用这么重了,规划架构都是很灵活的,一般在路径探索前端就考虑动力学,在后端优化的时候就不用处理这么多问题了,【防盗标记–盒子君hzj】注意考虑什么功能放在规划什么位置比较好
一个算法至少能解决一个问题,有可能也可以解决多种问题的,深入理解,组合算法使用
【3】算法组合实现
路径规划可以仅有路径探索部分【A*】,也可以仅有轨迹优化部分【TEB_planner】,更可以有路径探索+轨迹优化部分【hybrid A*】,能解决需求就行!
全局规划与局部规划式层级,路径探索与路径处理是实现
(4)导航框架设计思考上
规划的落地业务和方案可以有很多,把各个模块根据场景进行选择,【防盗标记–盒子君hzj】嵌入进去实现导航系统的定制,有多少模块就能设计出什么样功能的系统
规划的一个模块或者demo可能同时拥有几种规划的基本功能,因为路径规划的功能式通过组合进行定制的
举例
-> Apollo中的规划渐渐的以一个个的场景为主体来组织,针对特定场景的特定解决方案与调优是必需的,那么“通用基础规划方法”和“特定场景特定方案特定调优”的结合和分界
-> move_base这种机器人导航的全局规划是不会像矢量地图这样先单独给出全局航线的,因为场景比较小,光靠路径探索出来的动态小段路径就可以满足且动态性较高。路径探索的航线就是全局航线
.
.
(5)算法部署形式思考上
【实时路径规划&离线路径规划】路径规划不一定只用在线实时路径规划,【防盗标记–盒子君hzj】也可以用离线的路径规划
【机载传感器&外部传感器】路径规划的部分传感器(激光雷达、相机)不一定只能用机载的传感器,也可以用外部传感器(极侠)
(6)规划的难点思考上
(1)应对复杂场景
(2)动力学可行性
(3)有限传感器
(4)有限算力
(5)多模块支持
(6)开发实际无人驾驶的路径规划器存在的问题
…
.
(7)区分全局规划、局部规划、行为规划、路线规划、运动规划的由来
(在规划中不同的场景要求是不一样的,因此延伸出来很多概念,但是本质思想都是一样的,把握住输入输出就好!)
全局规划和局部规划是针对机器人的,行为规划、路线规划、运动规划是针对自动驾驶的
区分全局规划还是局部规划最重要的标志是有没有参考路径lane
.
(8)无人车规划与机器人规划的关系
直观理解就是无人车规划是机器人规划的升级版本,场景和技术更富复杂
机器人的全局规划global_planner升级为无人车的导航规划routing_planner,机器人的局部规划locat_planner升级为无人车的运动规划motion_planner,机器人的行为规划behavior_planner升级为无人车的mission_planner
.
参考资料
(0)规划概览
https://blog.csdn.net/Travis_X/article/details/104668396
https://zhuanlan.zhihu.com/p/51372134
(1)较好的博客资料总结
https://blog.csdn.net/Travis_X/article/details/118601336
参看链接
https://zhuanlan.zhihu.com/p/124232080?utm_source=wechat_session&utm_medium=social&utm_oi=718002858552741888&utm_campaign=shareopn
https://zhuanlan.zhihu.com/p/364923943?utm_source=wechat_session&utm_medium=social&utm_oi=718002858552741888&utm_campaign=shareopn
https://zhuanlan.zhihu.com/p/334421409?utm_source=wechat_session&utm_medium=social&utm_oi=718002858552741888&utm_campaign=shareopn
(2)算法及论文
https://github.com/zhm-real/PathPlanning
https://zhuanlan.zhihu.com/p/68337127
(3)运动规划仿真的开源项目
https://zhuanlan.zhihu.com/p/60960135
(4)书籍
(1)Planning Algorithms《规划算法》
(2)Principles of Robot Motion Theory, Algorithms, and Implementations
(3)The DARPA Urban Challenge: autonomous vehicles in city traffic
(4)Springer handbook of robotics有中文版