Autoware 培训笔记 No. 3——录制航迹点
1.前言
航迹点用于知道汽车运行,autoware的每个航迹点包含x, y, z, yaw, velocity信息。
航迹点录制有两种方式,可以开车录制航迹点,也可以采集数据包,线下录制航迹点,我分开介绍(分开介绍的原因——如果有实车跑你就知道了^_^)。
录制航迹点非常考验老司机的车技,车要开的稳,尤其是弯道,尽量要开成圆弧,而且要尽量远离马路牙,我们的老司机开车还是很稳的。
本章内容有和No. 1与No. 2重复的内容,为了方便自己调试,我将重复的内容也贴出来。
注意:所有需要在 [Simulation] 菜单下加载的数据,都需要在所有操作之前操作,否则在RViz显示时,会出现frame_id错误。
2. 仿真数据录制航迹点
在我们的项目中,航迹点是车在运动过程中,车载lidar与地图匹配形成的一系列的位置信息构成的。所以定位就是录制航迹点的基础。
2.1 打开runtime manager
2.2 打开地图要定位的数据(在百度网盘中有,这是我们录制的用于定位的数据)(No. 2重复)
进入 [Simulaton] 页面,点击界面右上方 [Ref] 按钮,加载录制用于定位的 bag 文件。
点击 [Play] 然后点击 [Pause]暂停。
注意:请一定要先做这一步,这是因为要同步时间。如果在后面做,会产生关于stamped的错误。
2.3 加载地图,加载world到map以及base_link到velodyne的TF变化(No. 2重复)
(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 设置相关滤波器(No. 2重复)
选择 [Sensing] 页面,点击 [Points Downsampler] 下 [voxel_grid_filter] 的 app,设置一些参数,[voxel_grid_filter] 是一种将采样方法,将点云数据用质心近似(用于降采用),如下图:
这里,[Voxel Leaf Size] 参数值为2,意义是2米的立方体内的全部点近似用1个质心代替。[Measurement Range]的参数值为2,意义是点云的有效的距离为200米。
[Points Downsampler] 下的四个滤波器都可以选,但我只看了 [voxel_grid_filter] 滤波器,其他三个暂时没看,后续会陆续补充。
2.5 设置从map到base_link的转换(NDT_MATCHING)(No. 2重复)
找到 [Computing] 左菜单栏下的 [ndt_matching] 选项,打开 [app] ,如下所示:
确保 [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(后面会讲,先挖个坑)。
2.6 启动[vel_pose_connect](No. 2重复)
找到 [Computing] 左菜单栏下的 [vel_pose_connect] ,打开 [app] 并确保选项 [Simulation_Mode] 没有被勾选(默认不勾选),退出并勾选 [vel_pose_connect]。
2.7 记录航迹点
在菜单栏 [Computing] 右边的 [waypoint_maker] 下的 [waypoint_saver]。点击 [app] 按钮,在打开的界面中点击 [Ref] 指定保存路径和文件名后点击 [OK] 。如下所示:
[app]在勾选框 [Save/current_velocity],可以保存waypoint的速度,参数[Interval]中的值表示采点间隔,默认1m,可以修改为不同的值,我们用默认值效果还不错。退出并勾选 [waypoint_saver], 如上图片右侧所示。
2.8 显示数据
打开 [Rviz], 在 [file] 菜单中的 [open config] 选择路径:autoware/ros/src/.config/rviz/default.rviz 的文件。这是回到runtime manager,进入 [Simulaton] 页面,点击 [Pause]开始。这时可以从RViz中看到一辆黑色的带有激光雷达数据的汽车停在地图的右下方,如下图所示:
如果车子不在预想的位置上,那么点击RViz的工具 [2D Pose Estimate] 重新为车子选择上图的位置和方向。
2.9 在RViz显示waypoints记录过程
打开 [Rviz] ,在 Rviz 左下方找到 [Add]。弹出的显示框中找到图示 [By topic] 下 话题 /waypoint_saver_marker 的 [MakerArray] 并添加。如下所示:
2.10 保存记录数据
返回 runtime manager 的 [Simulation] 菜单,点击 [Pause] 按钮,这时可以看到车子在地图中开始运动,车子停止后,回到 runtime manager的 [Computing] 菜单栏下,取消 [waypoint_saver] 勾选(自动保存waypoint)。
注意:确保在此之前更改了文件名和保存路径,在指定的路径下将会看到对应文件。
如果一切正常,会看到如下效果:
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.3 加载、设置参数
重复本节
3.2 启动航迹点记录
运行本节2.2~2.6的内容
3.3 发动汽车到要录制航迹点的起点
3.4 开启记录航迹点
运行本节2.7的内容
3.5 打开RViz,查看定位
打开 [Rviz], 在 [file] 菜单中的 [open config] 选择路径:autoware/ros/src/.config/rviz/default.rviz 的文件。此时在地图上会显示真车在地图上的实际位置。如下所示:
与上一节定位显示类似,但是有时候由于初始位置与 map TF 有一定的距离,所以导致定位晃动无法准确与地图绑定,这时需要借助 Rviz 中上菜单栏里的 [2D Pose Estimate] 箭头进行辅助定位。
3.6 在RViz显示waypoints记录过程
执行本节2.9的操作。
3.7 保存记录数据
老司机开车,到达目标后,回到 runtime manager的 [Computing] 菜单栏下,取消 [waypoint_saver] 勾选(自动保存waypoint)。
在老司机看车的过程中,可以同时看到航迹点在地图上逐渐显示出来。
注意:确保在此之前更改了文件名和保存路径,在指定的路径下将会看到对应文件。
引用:
autoware.ai
dowson.live
原创文章,转载请引用。
Autoware 培训笔记 No. 3——录制航迹点的更多相关文章
- Autoware 培训笔记 No. 4——寻迹
1. 前言 好多初创公司公布出来的视频明显都是寻迹的效果,不是说寻迹不好,相反可以证明,寻迹是自动技术开始的第一步. 自动驾驶寻迹:一种能够自动按照给定的路线(通常是采用不同颜色或者其他信号标记来引导 ...
- Autoware 培训笔记 No. 2——基于点云的定位
1. 前言 构建出地图后,应该测试点云地图定位效果,这里用到ndt的scan_matching方法,这是一种scan-to-map方法.这里用的是我们自己采集的数据进行仿真. 本章内容有和No. 1重 ...
- Autoware 培训笔记 No. 1——构建点云地图
1. 首记 相信许多刚开始玩无人驾驶的人都用过Autoware,对runtime manager都比较熟悉,虽然可以通过各种渠道了解到有些设置,甚至有些设置的app下参数的含义,但是,在真车的使用过程 ...
- Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台)
ylbtech-Train-Alypay-Cloud:蚂蚁大数据平台培训开课通知(第三次)- 培训笔记3(机器学习平台) 机器学习平台 一站式可视化机器学习 https://pai.cloud.ali ...
- 《Linux就该这么学》培训笔记_ch02_一些必须掌握的Linux命令
本文在原来作者的基础上做一些符合自己的修改.原文参考: <Linux就该这么学>培训笔记_ch02_一些必须掌握的Linux命令. 本章的内容虽然多,基本都是书本原话,但是笔记能精 ...
- 《Linux就该这么学》培训笔记_ch00_认识Linux系统和红帽认证
<Linux就该这么学>培训笔记_ch00_认识Linux系统和红帽认证 文章最后会post上书本的笔记照片. 文章主要内容: 认识开源 Linux系统的种类及优势特性 认识红帽系统及红帽 ...
- 《Linux就该这么学》培训笔记_ch01_部署虚拟环境安装Linux系统
<Linux就该这么学>培训笔记_ch01_部署虚拟环境安装Linux系统 文章最后会post上书本的笔记照片. 文章主要内容: 在虚拟机中安装红帽RHEL7系统 在Linux系统中找回r ...
- 《Linux就该这么学》培训笔记_ch03_管道符、重定向与环境变量
<Linux就该这么学>培训笔记_ch03_管道符.重定向与环境变量 文章最后会post上书本的笔记照片. 文章主要内容: 输入输出重定向 管道命令符 命令行的通配符 常用的转义字符 重要 ...
- 《Linux就该这么学》培训笔记_ch04_Vim编辑器与Shell命令脚本
<Linux就该这么学>培训笔记_ch04_Vim编辑器与Shell命令脚本 文章最后会post上书本的笔记照片. 文章主要内容: Vim编辑器 Shell脚本 流程控制语句 if语句 f ...
随机推荐
- 教妹学 Java:动态伴侣 Groovy
00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没 ...
- 数据库——SQL-SERVER练习(5) 供应关系
以下题目用到工程供应数据库关系模式:供应商(供应商号,供应商名,城市) S(Sno,Sname,City)零件(零件号,零件名,零件颜色) P(Pno,Pname,Color)工 ...
- XAML属性和事件
1.元素属性 XAML是一种声明性语言,XAML编译器会为每一个标签创建一个与之对应的对象.对象创建出来之后要对它的属性进行必要的初始化之后才有使用意义.因为XAML语言不能写程序运行逻辑,所以一份X ...
- HashMap框架源码深入解读,面试不用愁
在Java Collections Framework的体系中中,主要有两个重要的接口,一个是List.Set和Queue所属的Collection,还有一个就是Map接口了.在上一篇文章中介绍了Li ...
- DataGridView怎样实现添加、删除、上移、下移一行
场景 在Winform中使用DataGridView实现添加一行.删除一行.上移一行.下移一行. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi ...
- 车联网APP,安全设施薄弱的山寨品
- HDIT 来到该公司官网,打开任意一个云平台的链接,很显眼地能看见APP的下载按钮,下载,安装,抓包,使用,完全的套路,熟门熟路是不是. 再看抓取的报文,满目的HTTP协议数据: 完全没有对APP ...
- Android多module下重复jar包问题
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/166 Android多module下重复jar包问题 An ...
- SparkSql 整合 Hive
SparkSql整合Hive 需要Hive的元数据,hive的元数据存储在Mysql里,sparkSql替换了yarn,不需要启动yarn,需要启动hdfs 首先你得有hive,然后你得有spark, ...
- emacs semantic,speedbar,gdb汇总
在emacs 里使用gdb emacs speedbar功能介绍 semantic功能介绍 上面3篇文章精华,都汇总到下面的.emacs文件里了. ;;启动semantic功能 (semantic-m ...
- 简单的shell脚本
1.1每隔一秒向屏幕输出一个数字,并且每次加1. #/bin/bashfor((i=1;i<=100;i++)) do echo -en " $i\n"; sleep 1;d ...