1. 前言

好多初创公司公布出来的视频明显都是寻迹的效果,不是说寻迹不好,相反可以证明,寻迹是自动技术开始的第一步。

自动驾驶寻迹:一种能够自动按照给定的路线(通常是采用不同颜色或者其他信号标记来引导)进行移动的汽车。

本章内容有和No. 1、No. 2与No. 3重复的内容,为了方便自己调试,我将重复的内容也贴出来。

注意:所有需要在 [Simulation] 菜单下加载的数据,都需要在所有操作之前操作,否则在RViz显示时,会出现frame_id错误。

采用寻迹方式,首先要做的就是要确定汽车离航迹点集上的那个点最近,然后通过control算法将车辆移动到该航迹点上。所以寻迹寻迹方法最核心的操作同样是定位。

本节寻迹我们同样仿真数据与真车实测两个方式来介绍

2. 仿真数据寻迹

2.1 打开runtime manager

2.2 打开地图要定位的数据(在百度网盘中有,这是我们录制的用于定位的数据)

进入 [Simulaton] 页面,点击界面右上方 [Ref] 按钮,加载录制用于定位的 bag 文件。

点击 [Play] 然后点击 [Pause]暂停。

2.3 加载地图,加载world到map以及base_link到velodyne的TF变化

(1) 设置从base_link到velodyne坐标系的TF(与No. 1重复)

在 [Setup] 菜单中,确保 [Localizer] 下选项为 [Velodyne],在 [Baselink to Localizer] 中设置好各个参数之后点击 TF 按钮,其中x、y、z、yaw、pitch、roll表示真车雷达中心点与车身后轴中心点的相对位置关系(右手坐标系,真车后车轴为原点),此时可以点击[Vehicle Model],如果[Vehicle Model]为空,那么会加载一个默认模型(在rviz显示时,如果有激光雷达数据,车辆会显示为黑色)。如下所示。

(2)设置从world到map转换(与No. 1重复)

点击 [Map] 页面,点击 [TF] 的 [ref] 选择 autoware/ros/src/.config/tf/tf_local.launch 文件,这是加载默认world到map的坐标转换,打开tf_local.launch文件如下:

<launch>

    <node pkg="tf" type="static_transform_publisher" name="world_to_map" args="0 0 0 0 0 0 /world /map 10" />

</launch>

args的参数“0 0 0 0 0 0 /world /map 10”表示:从/world坐标系转换到/map坐标系的x, y, z, roll, pitch, yaw转换,且频率为10Hz。

点击 [TF] 按钮,如下图:

(2)加载地图

选择runtime manager的 [Map] 菜单,点击 [Point Cloud] 按钮的 [ref],加载培训笔记 No. 1产生的.pcd文件(点云地图),并点击 [Point Cloud] 按钮,进度条显示OK,则加载完毕,如下所示:

2.4 设置相关滤波器

选择 [Sensing] 页面,点击 [Points Downsampler] 下 [voxel_grid_filter] 的 app,设置一些参数,[voxel_grid_filter] 是一种将采样方法,将点云数据用质心近似(用于降采用),如下图:

           

这里,[Voxel Leaf Size] 参数值为2,意义是2米的立方体内的全部点近似用1个质心代替。[Measurement Range]的参数值为2,意义是点云的有效的距离为200米。

在[Sensing] 菜单下的 [Points Preprocesser] 下 [ring_ground_filter],[app]设置如下:

              

[ring_ground_filter]用于区分地面与障碍物。参数描述如下:

[Sensor Model]参数为激光雷达的线扫条数,我们项目用的是16线激光雷达,这里我们选16;

[Sensor Height]参数表示传感器距离地面高度;

[Max Slope]表示最大的坡度,根据Alex如果不给出好坡度,容易将坡识别为障碍物;

[Vertical Thres]表示障碍物和地面的差异度,如果大于这个值则被认为是障碍。(这里还要看代码)

我们场地大约有一个5度的坡,所以需要设置这个参数。

[Points Downsampler] 下的四个滤波器都可以选,但我只看了 [voxel_grid_filter] 滤波器,其他三个暂时没看,后续会陆续补充。

[ring_filter] 与 [ring_ground_filter] 联合来用,才会过滤掉地面,如果大家去看 [computing] 菜单下的 [astar planner] 下的 [velocity set] 选项下的 [app] 设置会发现这个选项要接收的topic为points_no_ground 只有这两个选项都开启时,这个选项才会生效。 [velocity set] 实际上就是跟斑马线及障碍物相关的速度设置。

所以 [ring_filter] 与 [ring_ground_filter] 也要勾选。

如果采用非velodyne的激光雷达,勾选 [ring_filter] Failed to find match for field 'ring' 的错误,问题没有解决,如果哪位大神知道是什么问题,欢迎在下面留言告诉我。

2.5 设置导航

(1)在 [Computing] 菜单栏右侧 [Mission Planning] 中勾选 [lane_rule],[lane_stop],[lane_select] 三个选项,如下图所示:

[lane_rule]表示设置当红灯亮时,停止线之前与之后点的个数。具体参数如上图:

[Acceleration]表示到达/通过停止线的加速度;

[Stopline Search Radius]表示搜索停止线圆心,半径1m的waypoints;

[Number of zeros ahead]/[Number of zeros behind]表示停止线前/后的waypoints个数,用于修改停止线前后waypoints的速度/加速度;

[Number_of_smoothing_count]用于平滑waypoints。

[lane_stop]用于识别红绿等,根据红绿灯的结果将停止线的waypoints变为红色(停止)或者绿色(继续形式)。

[Traffic Light]下的Red Light与Green Light用与手动调整当前路径处在红灯状态还是绿灯状态;

[Lane Change]用于变道,[<<Left Lane]与[Right Lane>>]用于变道的按钮。

[Current Lane]下的[Keep at]表示当前Lane保持的速度,[Stop in]表示停止时距离Stopline的最大距离。

[lane_select]用于将汽车行驶在可以选择的Lane上,如果 [waypoint_loader] 仅有一条Lane可以选择,那么选择这条路径。

[Distance threshold to neighbor lanes]表示表示检测当前路径周围的有效通道的阈值。 超过此阈值的车道不会被识别为车道;

[Lane Change Interval After Lane merge]指示在更改车道后可以运行多少米的值,您可以再次更改车道;

[Lane Change Target Ratio](这个暂时还不太明白作用)

[Lane Change Target minimum(m)]表示讲变道到目标车道上目标点的最小距离;

[Vector Length of Hermite Curve(m)]表示用Hermite曲线上waypoints的向量长度;

上述三个设置全部用默认值。

(2)在菜单栏 [Computing] 右侧的 [astar_planner] 下的 [obstacle_avold], [velocity_set] 并勾选,如下所示:

[obstacle_avold]表示避障的相关参数;

[velocity_set]表示避障速度设置的相关参数。

上面 [app] 参数还在看代码,日后补充

以上参数全部采用默认值。

(3)在菜单栏 [Computing] 右侧的 [waypoint_maker] 下的 [waypoint_loader] 加载waypoints。

选择 [Ref] 加载之前保存下来的路点文件,并点击 [Close] 关闭页面。勾选 [waypoint_loader] ,如下图所示:

这里需要勾选[disable_decision_maker]。

(4)在 [Computing] 菜单栏,找到 [waypoint_follower] 下 [pure_pursuit] 与 [twist_filter] 的 [app] 进行设置。

                  

[waypoint_follower] 的 [app] 在打开的菜单栏如上左图所示,勾选 [Dlalog] 选项,确保 [Velocity]( 手动设置速度 ) 选项值不能太大,因为这里是路点跟随中设置速度的地方,[Waypoint] 模式下速度即是制作路点文件中记录的 bag 文件的车速,已经被写入路点文件中,而 [Dlalog] 模式则可以手动设置车辆速度。

[waypoint_follower] (详细参数还没有看,日后补充)

PS:如果你希望车子检测到障碍物会停下来,需要勾线[Sensing]菜单栏中的 [ray_ground_filter] ,同时在 [Computing]菜单栏中的[pure_pursuit] 的 [app] 下勾选 [Waypoint],这时车辆会按照你在No.3中记录的航迹点速度在跑。如果你在No.3的2.7节中没有勾选[Save/current_velocity] 那么需要你手动修改你录制航迹点中的速度值。

2.6 运行仿真数据

打开 [Rviz], 在 [file] 菜单中的 [open config] 选择路径:autoware/ros/src/.config/rviz/default.rviz 的文件。这是回到runtime manager,进入 [Simulaton] 页面,点击 [Pause]开始。这时可以从RViz中看到一辆黑色的带有激光雷达数据的汽车停在地图的右下方,如下图所示:

运行效果如下:

3. 真车寻迹

真车寻迹与仿真寻迹类似,差别在于仿真定位采用事先记录的数据,真车定位采用实际的激光雷达。

3.1 打开runtime manager

3.2 启动激光雷达(与No.1 重复内容)

(1)针对velodyne 多线lidar

如果你有velodyne激光可以启动默认配置:[Sensing] 页面下 [Lidars] 选项下针对你的velodyne选择,velodyne激光对应的发布的点云topic:/velodyne_packets,frame_id:velodyne,topic会被重映射成为/points_raw。

例如:假如你有16线激光,点选 [velodyne VLP-16] 的 [config],点选[ref],加载/home/pix/Autoware/ros/src/sensing/drivers/lid ar/packages/velodyne/velodyne_pointcloud/param s/VLP16db.yaml路径下的配置文件(自己多线激光雷达可以针对这个配置改写),退出 [config],勾选 [velodyne VLP-16] 选项(一般的操作都是先修改config或者app下的配置或参数文件,然后勾选选项)。

                

查看点云输出。

(2)针对其他品牌多线lidar

如果你有其他品牌的激光,他们发布的topic不是/velodyne_packets,且frame_id同样不对应,这时可以自己写个程序转一下,参照:https://www.cnblogs.com/hgl0417/p/11067660.html。然后单独运行你的lidar driver node,将你的点云数据模拟成velodyne数据。此时,不需要点选runtime manager上的lidar配置文件(每个配置文件对应一个package或者node,意义在于将对应的topic发布,此时你已经发布了topic,所以不需要在点选上述配置文件)。

3.2 加载地图,开启相关设置

重复上述2.2~2.5的操作

3.3 启动底盘连接

由于我们的车底盘的CAN已经做好了,所以在这里,我们只需点击 [Interface] 菜单下的 [Gateway] 按钮就可以链接底盘。

3.4 启动汽车的自动驾驶

我们轿车为了安全,启动环节比较复杂,感谢老司机每天重复这样的操作

自动驾驶成功。

引用:

autoware.ai

dowson.live

原创文章,转载请引用。

Autoware 培训笔记 No. 4——寻迹的更多相关文章

  1. Autoware 培训笔记 No. 3——录制航迹点

    1.前言 航迹点用于知道汽车运行,autoware的每个航迹点包含x, y, z, yaw, velocity信息. 航迹点录制有两种方式,可以开车录制航迹点,也可以采集数据包,线下录制航迹点,我分开 ...

  2. Autoware 培训笔记 No. 2——基于点云的定位

    1. 前言 构建出地图后,应该测试点云地图定位效果,这里用到ndt的scan_matching方法,这是一种scan-to-map方法.这里用的是我们自己采集的数据进行仿真. 本章内容有和No. 1重 ...

  3. Autoware 培训笔记 No. 1——构建点云地图

    1. 首记 相信许多刚开始玩无人驾驶的人都用过Autoware,对runtime manager都比较熟悉,虽然可以通过各种渠道了解到有些设置,甚至有些设置的app下参数的含义,但是,在真车的使用过程 ...

  4. MicroPython教程之TPYBoard开发板DIY红外寻迹小车

    智能小车现在差不多是电子竞赛或者DIY中的主流了,寻迹,壁障,遥控什么的,相信大家也都见得很多了,这次就大家探讨一下寻迹小车的制作方法,不同于以往的是这次的程序不用C语言写,而是要使用python语言 ...

  5. Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台)

    ylbtech-Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台) 机器学习平台 一站式可视化机器学习 https://pai.cloud.ali ...

  6. 《Linux就该这么学》培训笔记_ch02_一些必须掌握的Linux命令

    本文在原来作者的基础上做一些符合自己的修改.原文参考: <Linux就该这么学>培训笔记_ch02_一些必须掌握的Linux命令.     本章的内容虽然多,基本都是书本原话,但是笔记能精 ...

  7. 《Linux就该这么学》培训笔记_ch00_认识Linux系统和红帽认证

    <Linux就该这么学>培训笔记_ch00_认识Linux系统和红帽认证 文章最后会post上书本的笔记照片. 文章主要内容: 认识开源 Linux系统的种类及优势特性 认识红帽系统及红帽 ...

  8. 《Linux就该这么学》培训笔记_ch01_部署虚拟环境安装Linux系统

    <Linux就该这么学>培训笔记_ch01_部署虚拟环境安装Linux系统 文章最后会post上书本的笔记照片. 文章主要内容: 在虚拟机中安装红帽RHEL7系统 在Linux系统中找回r ...

  9. 《Linux就该这么学》培训笔记_ch03_管道符、重定向与环境变量

    <Linux就该这么学>培训笔记_ch03_管道符.重定向与环境变量 文章最后会post上书本的笔记照片. 文章主要内容: 输入输出重定向 管道命令符 命令行的通配符 常用的转义字符 重要 ...

随机推荐

  1. tomcat9上传文件失败错误

    项目上线正常运行一段时间后,有一天突然所有的附件上传都出现了错误,查找项目本身的日志系统也一致没有跟踪到错误.经过几番折腾,在tomcat9-stdout.log日志中发现如下异常: ERROR or ...

  2. SpringBoot2.0中的事务@Transactional

    在SpringBoot2.0中使用使用需要注意的地方. 1. 加@Transactional的方法不能是private和protected修饰,private会直接报编译错误,protected不会报 ...

  3. python爬取昵称并保存为csv

    代码: import sys import io import re sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') ...

  4. Vue实现简单的列表金额计算效果(简易购物车)

    效果图: 使用技术:v-for v-bind v-on实现简单的列表选中绑定操作 代码: <!DOCTYPE html> <html> <head> <met ...

  5. abp实战-ContosoUniversity Abp版-1运行项目

    1. 去abp官网下载模板工程,当前最新版本是abp5.0,基于.net core 3.0 https://aspnetboilerplate.com/ 项目名称为ContosoAbp 这里使用的是n ...

  6. 数据库-用户管理与pymysql

    mysql用户管理 !这是dba的活儿!,但是万一公司没有dba? mysql用户指的是什么? 我们每一次在操作前都需要指定账号和密码,这个账号就是mysql的用户; 为什么要管理? 一个公司不可能只 ...

  7. Winform中双击DevExpress的TreeList的树形节点怎样获取当前节点

    场景 DevExpress的TreeList怎样设置数据源,从实例入手: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10254 ...

  8. Spring之 JDBC 异常

    JDBC异常抽象 Spring会将数据操作的异常转换为DataAccessException 解析错误码 SQLErrorCodeSQLExceptionTranslator ErrorCode定义 ...

  9. CSS符合选择器

    CSS复合选择器 后代选择器 后代选择器又称为包含选择器,可以选择父元素里面的子元素.其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔,当标签发生嵌套时,内层标签就成为外层标签的后代 元 ...

  10. Android 安全攻防(一):SEAndroid的编译

    转自:http://blog.csdn.net/yiyaaixuexi/article/details/8330645 SEAndroid概述   SEAndroid(Security-Enhance ...