目录
- OpenPlanner使用教程--从RuntimeManager面板进入
- 加载vector map
- Rviz中的设置
- 生成多条roll-outs trajectory供local planner选择
- 所有设置
- 每项设置的分析
- Sensing
- Computing
- Localization -> autoware_connector -> **ndt_matching** (可以不选?)
- Localization -> autoware_connector -> **vel_pose_connect**
- Detection -> lidar_detector -> **lidar_euclidean_cluster_detect**
- Detection -> lidar_tracker -> **lidar_kf_coutour_track**(可以不选?)
- Mission Planning -> OpenPlanner - Global Planning -> **op_global_planner**
- Motion Planning -> waypoint_follower -> **pure_pursuit**
- Motion Planning -> waypoint_follower -> **twist_filter**
- Motion Planing -> OpenPlanner - Local planning -> **op_common_params**
- Motion Planing -> OpenPlanner - Local planning -> **op_trajectory_generator**
- Motion Planing -> OpenPlanner - Local planning -> **op_motion_predictor**
- Motion Planing -> OpenPlanner - Local planning -> **op_trajectory_evaluator**
- Motion Planing -> OpenPlanner - Local planning -> **op_behavior_selector**
- Rviz中的设置
- 使用Simulator
- 历史error记录
OpenPlanner使用教程–从RuntimeManager面板进入
本文操作基于Autoware.ai版本
笔者也是从另外两篇找到的比较好的帖子学习的,分别是
- Autoware open-planner路径规划 这位作者还有bilibili的配套视频哈哈,链接在这里autoware-openplanner
- Autoware 笔记 No. 6,基于openplanner的避障
在这两位大佬的教程基础上,进行了总结,以及一些其他的尝试。
比较确定的是,只用第一篇帖子里的方法是不太行的,不够全面。可以标出global 路径,但是选中后面的op_common_params这些参数之后就出错了,有一些该设置的,需要subscribe的topic没有设置到。
关于OpenPlanner的原理,可以参考上一篇帖子中的论文总结【论文阅读】Open Source Integrated Planner for Autonomous Navigation in Highly Dynamic Environments
加载vector map
OpenPlanner是基于vector map的,因此首先要加载vector map,并导入相应的tf关系。
在Runtime Manager的Map页中,加载.autoware文件夹下的vector map文件,并点击该按钮呈现深色,即加载文件。点击TF按钮为深色,即加载tf.launch文件。
选择右侧OpenPlanner - Global Planning
下的op_global_planner
Rviz中的设置
点击Rviz按钮进入可视化界面。
在左下角点击Add,选择By Topic,选择最后一个Topic ``,可以看到原本的vector map上出现了lane的中线。(必须选了op_gloal_planner才可以显示这个中线topic信息)
点击2D Pose Esitimate
按钮,选择靠近道路中线的位置作为起点,再点击2D Nav Goal
按钮,选择终点。Rviz中会自动出现一条蓝色的线,这就是Open Global Planner为设置的起点到终点规划的全局路径。
此时查看各个node和topic之间的关系,点击RQT,可以发现。
生成多条roll-outs trajectory供local planner选择
要进行这一步,需要回到Runtime Manager面板里面重新做一些设置,但是发现如果没有提前在Runtime Manager里面设置好,而是规划好全局路径后,再回到Runtime Manager中勾选需要的选项时,常常出现rviz中显示不到的问题,以及一些其他的error。所以建议,如果需要做local planner规划,建议在打开rviz之前,一步到位在Runtime Manager页面中选好所有需要的选项,然后再到Rviz里面设置起点终点等。
所有设置
Setup
- TF (默认值)
- Vehicle Model (默认值)
Map
- Vector Map
- TF
这两个和上面仅有global planner的一样
Sensing
- Points Downsampler -> voxel_grid_filter
Computing
- Localization -> lidar_localizer -> ndt_matching
- Localization -> autoware_connector ->vel_pose_connect
- Detection -> lidar_detector -> lidar_euclidean_cluster_detect
- Mission Planning -> OpenPlanner - Global Planning -> op_global_planner
- Motion Planning -> waypoint_follower -> pure_pursuit + twist_filter
- Motion Planing -> OpenPlanner - Local planning -> op_common_params + op_trajectory_generator + op_motion_predictor + op_trajectory_evaluator + op_behavior_selector
经过尝试,上面的这些设置都是缺一不可,而且并没有冗余。—还需要继续试几次看是否如此。
每项设置的分析
针对上面的每项分析,做一些具体的分析。没有直接写在上面的部分是为了阅读的方便,使看操作步骤的时候更清晰简洁。且Setup页和Map页的内容不再赘述。
Sensing
- Points Downsampler -> voxel_grid_filter
设置相关滤波器
选择 [Sensing] 页面,点击 [Points Downsampler] 下 [voxel_grid_filter] 的
app,设置一些参数,[voxel_grid_filter] 是一种降采样方法,将点云数据用质心近似(用于降采用),如下图:
这里,[Voxel Leaf Size] 参数值为2,意义是2米的立方体内的全部点近似用1个质心代替。[Measurement Range]的参数值为200,意义是点云的有效的距离为200米。
[Points Downsampler] 下的四个滤波器都可以选,但我只看了 [voxel_grid_filter] 滤波器,其他三个暂时没看,后续会陆续补充。
[ring_filter] 与 [ring_ground_filter] 联合来用,才会过滤掉地面,如果大家去看 [computing] 菜单下的 [astar planner] 下的 [velocity set] 选项下的 [app]
设置会发现这个选项要接收的topic为points_no_ground 只有这两个选项都开启时,这个选项才会生效。 [velocity set] 实际上就是跟斑马线及障碍物相关的速度设置。
这段文字来自文章
Computing
Localization -> autoware_connector -> ndt_matching (可以不选?)
设置map到base_link的转换,将GNSS设置改为Initial Pos,里面的数值没有改变。
确保 [topic:/config/ndt] 选项处于 [Initial_Pose] 处,勾选 [Initial Pos],x,y,z,roll,pitch,yaw的值表示激光的初始位置,我们这里用默认的0,0,0,0,0,0。如果有GPU(还是一定有),那么[Method Type]可以选择pcl_anh_gpu用GPU帮助运算。其他参数用默认值。
我们用的车只有16线激光雷达与摄像头,所以没有勾选Odom与IMU等选项。
如果有GNSS设备可以选择GNSS(后面会讲,先挖个坑)。
这段文字来自文章
Localization -> autoware_connector -> vel_pose_connect
找到 [Computing] 左菜单栏下的 [vel_pose_connect] ,打开 [app] 并确保选项 [Simulation_Mode] 没有被勾选(默认不勾选),退出并勾选 [vel_pose_connect]。
Vector Map Filter Distance用于检测障碍物到路径的距离,如下图所示,黑色的粗线为航迹,那么障碍物在轨迹前或后方时,小于两倍的设置距离会被跟踪,而在轨迹范围内时,小于1倍的设置距离会被跟踪。
Detection -> lidar_detector -> lidar_euclidean_cluster_detect
障碍物检测,笛卡尔聚类方法
Detection -> lidar_tracker -> lidar_kf_coutour_track(可以不选?)
lidar_tracker项目需要勾选lidar_kf_contour_track(跟踪障碍物),相应的app配置为默认
lidar_kf_contour_track障碍物通过消息 ClouldCluster发出的,所以对应lidar_kf_contour_track接收
这里引用中的这句不太懂
Mission Planning -> OpenPlanner - Global Planning -> op_global_planner
具体设置如下
Replanning用于到达目标点后,可以重新规划到下一个目标点。如果有了两个目标点,那么会循环,下方修改代码后,可以不循环。
Smooth用于平滑全局路径。
Motion Planning -> waypoint_follower -> pure_pursuit
这里使用寻迹模式,需要采用Waypoint模式,而Waypoint采用航继点的速度,也可以改代码相关的内容。这里还没有研究到那一步。
Motion Planning -> waypoint_follower -> twist_filter
Motion Planing -> OpenPlanner - Local planning -> op_common_params
p_common_params的app设置
Plan Ditance用于设置朱路径两侧的衍生出的局部轨迹的长度;
Path Density用于局部轨迹上两个轨迹点的距;
Horizontal Density用于设置两个局部轨迹的间距;
Rollouts Number用于设置局部轨迹的数量;
Max Velocity轨迹上的执行速度,避障时局部轨迹速度减半,单位m/s;
Follow DIstance关键参数,沿着轨迹设置从多远检测障碍物;
Avoid Distance感知到路径上的障碍物,判断多远开始绕行;
Avoidance Limit停车是,障碍物距离多远可以开车;
Lateral Safety与Longitudinal Safty设置安全框尺寸,分别代表车辆安全框宽与长。
Motion Planing -> OpenPlanner - Local planning -> op_trajectory_generator
Tip Margin用于设置车身到路径分叉点的距离;
Roll In Margin用于设置局部轨迹弯折的距离;
Motion Planing -> OpenPlanner - Local planning -> op_motion_predictor
Detect curbs from map用于将路沿判定为障碍物。
Motion Planing -> OpenPlanner - Local planning -> op_trajectory_evaluator
Motion Planing -> OpenPlanner - Local planning -> op_behavior_selector
Rviz中的设置
添加一个Topic /vector_map_center_lines_rviz
,原因和上一部分一样,不再赘述。
同样的方法选择起点和终点,看到蓝色的global path。
再添加一个Topic /local_trajectories_gen_rviz
,即可以看到绿色的线,这就是规划出来的roll-outs,每条线是一个local trajectory。
使用Simulator
Computing
- Motion Planning -> OpenPlanner - Simulator -> op_percetion_simulator+op_car_simulator
重新在rviz里面设置一次起点和终点,可以看到一个仿真小车沿着设置的路线行驶。
此时的rqt关系图如下:
其中需要重点关注的是下面的图中/op_behavior_selector
node的输入topic,/local_weighted_trajectories
和/current_behavior
以及下图中node /op_behavior_selector
相关的输入输出流
至此,我们可以使用Autoware中RuntimeManager面板上提供的OpenPlanner功能,进行一个全局和局部的路径规划。但是还有很多其他的设置细节,使用方法等需要继续学习。
历史error记录
- [/rviz] wants topic /visualization_markers to have datatype/md5sum
- default rviz file wants wants topic op_trajectory_generator to have message type visualization_msgs/MarkerArray instead of autoware_msgs/LaneArray
- assertion ‘_gtk_widget_get_visible (widget) || _gtk_widget_is_toplevel (widget)’ failed
- Reopen window throws Gtk-CRITICAL **: gtk_widget_get_window: assertion ‘GTK_IS_WIDGET (widget)’ failed