系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理
前言
认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!
本文先对**【autoware的决策规划模块】**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
一、决策规划算法概述
规划算法的分类
(1)曲线插值拟合的方法【这个一般可以通过库或者移植源码实现】 (2)轨迹优化平滑的方法【这个涉及优化理论】 (3)图搜索的方法 (4)增量采样的方法
车辆的安全行为的逻辑决策比较复杂的!使用的就是HFSM的分层决策状态机
. .
二、决策规划模块功能介绍
1.规划常用任务
(场景很多,要一个一个场景的突破去做)
1.地图中点到点的全局路径规划(道路级别)
2.在行进过程中的局部路径规划(轨迹级别)
(1)根据红绿灯信号的车辆启停 (2)前方障碍物的减速、避障、停止 (3)换道 (4)跟车 (5)危险情况的紧急制动
转弯、倒车、换道、巡航、避障都是决策给出信息的,同时感知、地图、定位也有辅助
三、决策规划方案介绍【四个demo】
1.巡航换道停障lane_planner的规划方案【结构型道路–车道级规划–全局规划】
【lane_planner、waypoint_maker两个功能包的配合–实现从车道的角度进行规划】
(1)功能包原理介绍
【lane_planner、waypoint_maker两个功能包的配合–实现从车道的角度进行规划】
lane_planner功能包对应的节点
lane_navi
lane_rule
lane_select
lane_stop
waypoint_maker功能包对应的节点
waypoints_loader
waypoints_make_publish
lane_planner的功能是输出一条整体的全局路径/base_waypoints
给定的全局路径的获取方式可以通过lane_planner中的lane_navi解析vector_map得到,也可以通过waypoints_make中的waypoints_loader把path.txt解析出来,还可以通过Astar等全局规划出来的waypoints得到
得到/lane_waypoints_array就是我们之前规划得全局轨迹,可以仅有一条也可以有多条(主要看vector_map和path.txt提供了几条可供选择的候选路路径)
waypoints_make中的waypoints_make_publish把/lane_waypoints_array话题可视化到rviz中
lane_planner中的lane_rule根据红绿灯情况输出各种速度不同的路径轨迹,其中/red_waypoints_array的速度为0,/green_waypoints_array为正常的速度,/traffic_waypoints_array为交规指定的最终执行速度
lane_select根据vector_map地图中的左右转信息决定车辆换道,走那一条路线
经过上述一系列操作,最终输出一条可执行的base_waypoints,base_waypoints就是最终执行的全局路径,局部路径都是基于这条base_waypoints进行的
.
(2)功能包代码解析及注释【重点】
【rqt_graph可以查看核对一下的】 我把注释后的代码上传到给github了
. .
2.避障waypoint_planner(astar)规划方案【结构型道路–车道级规划+轨迹级规划】
(A*是负责基于栅格地图的规划探索)
(1)功能包原理介绍
要启动astar进行局部规划,仅仅需要把astar的标志位置为true就可以了(在对应的launch文件中)
在之前lane_planner规划的全局路径**/base_waypoints的基础上,使用waypoint_planner中的astar算法进行局部避障,输出一条安全的路径/safety_waypoints** 其中,astar_search是算法的实现,astar_avoid是针对astar的一些前置决策 /safety_waypoints可用于车辆控制模块
waypoint_planner功能包对应的节点
astar_avoid
astar_search
.
(2)功能包代码解析及注释【重点】
【rqt_graph可以查看核对一下的】 我把注释后的代码上传到给github了 . .
3.避障open_planner规划方案【结构型道路–轨迹级规划】
(open_planner是基于语义地图和占据地图进行采样的局部规划优化)
(1)功能包原理流程介绍
(1)轨迹生成/op_trajectory_generator 注意的是,是参考vector_map中的多条/lane_waypoints_array进行生成轨迹的
. (2)轨迹代价评分/op_trajectory_Evaluator 在open_planner中会根据全局路径生成多个候选路径,每条路径通过代价函数进行评分具有代价,选择代价最低的来走,红色线的是不可行驶的,open_planner是实时运行的
(2)功能包代码解析及注释【重点】
open_planner的原理
. .
4.避障freespace_planner(astar)规划方案–手动指定目标点goal【非结构化道路–轨迹级规划】
【生成代价地图实现】
(1)功能包原理流程介绍
根据vector的/point_lane和雷达感知的障碍物,生成一张代价地图costmap【属于地图生成的范畴】
costmap_gennerator输出一张分割的占据栅格地图,同时freespace_planner功能包中的astar_navi是针对astar的一些前置决策,astar_search是算法的具体实现
最终输出多条可执行的路径/lane_waypoints_array
.
(2)功能包代码解析及注释【重点】
freespace_planner功能包的节点
astar_avoid
astar_navi
astar_search
(1)astar算法的前置决策astar_avoid 这种决策是通过if-else进行的简单逻辑决策,有planning\stop\replan等几种状态 根据障碍物obsta的位置确定规划的终点target(可设置多个目标点goal进行尝试),起点可以通过当前定位得到
(2)astar算法的前置决策astar_navi astar_navi比较简单,原来的版本是一直进行局部规划的,改过的版本是仅仅进行局部规划一次的!,改动逻辑就好
(3)astar算法的实现astar_search
.
总结
如果和实现一直进行局部规划–改一改lane_navi逻辑就好了!
规划一般直接用到的是代价地图costmap,还有矢量地图vector_map,但是这两种地图都是从点云地图和高精度度地图中提取出来的
参考资料
综述论文
|