自动驾驶场景实现:路径点跟踪

引言

之前的文章介绍了如何使用 LG 和 Autoware 搭建自动驾驶仿真平台。文章的最后用一个简单的自动驾驶场景测试了这个平台的有效性。本文就介绍一下实现该场景的具体操作细节。

Autoware 作为一个自动驾驶套装,将 SLAM 建图、定位、决策、控制等自动驾驶环节整合在一起,并且提供了操作非常方便的图形界面 Runtime Manager。在设置自动驾驶的整个过程中,不需要输入任何代码,只要在图形界面中选择相应的功能即可。

Autoware manual 中介绍了如何操作 Autoware,不过那里是基于实车的操作,我们是基于仿真平台,细节有些区别,基本流程差不多。

收集数据

  • 按照之前的文章设置好 LG + Autoware 的仿真环境,确保两者已经连通。

  • 在 LG 中选择一个城市环境,这里我们用 SimpleMap 。城市的选择并不影响操作过程。

  • 进入 LG 的驾驶界面。在本文实现的场景中,只需要启用 LIDAR 。可以通过 Sensor Effect 确认一下 LIDAR 是否开启。如果车身周围出现放射状的红点,则说明 LIDAR 已启用。

  • 在 Autoware 所在电脑上,保险起见可以通过如下命令再次确认一下 Autoware 能接收到 LIDAR 的数据

     rostopic echo /points_raw
    

    如果出现了密密麻麻的 0~255 之间的数字,则说明 Autoware 能接收到 LIDAR 数据。
    这一步确认也可以不用 ROS 命令。Autoware 为我们提供了 rostopic echo 的功能。操作如下:
    Runtime Manager -> Topics -> Refresh -> 选择 /point_raw -> Echo
    同样的,如果有数字显示,则表示能接收到 LIDAR 数据。

  • 记录 LIDAR 数据。在 Runtime Manager 的右下角点击 ROSBAG,refresh 之后选择 /points_raw topic,设定好数据包的名字,点击 start 开始记录数据。

  • 手动驾驶汽车,收集 LIDAR 数据。在 LG 中驾驶汽车行驶一段路,这一段路就是之后希望汽车自动驾驶的路段,手动驾驶汽车行驶的路线也就是自动驾驶时要跟踪的路线。

  • 驾驶结束,在 ROSBAG 中停止记录数据。假设得到的数据包名字为 lidar.bag。

建图

  • 首先要关闭 LG 端的 LIDAR,否则会干扰建图。然后进行后边的操作。

  • 在 Runtime Manager -- Setup 界面中 TF 设置为 x: 1.2, y: 0, z: 2. 这是 LIDAR 传感器在车身坐标系中的位置。设置这一 transform 是为了建立 LIDAR 坐标系与车身坐标系的转换关系。

  • 在 Computing 界面选择 ndt_mapping。这里是借助 NDT 算法实现 SLAM。

  • 在 Simulation 界面选择刚才生成的数据包 lidar.bag,点击 play。等待结束,点 stop.

  • 在 Computing 界面选择 ndt_mapping[app],设定保存点云地图 (point cloud data map) 的路径,然后点击 PCD OUTPUT,等待建图结束。

  • 在建图过程中,为了确认建图成功,可以打开 rviz,选择配置文件 Autoware/ros/src/.config/rviz/ndt_mapping.rviz
    如果一切顺利,应该可以在 rviz 中看到 pcd 地图逐步建立的过程。

  • 建图不一定每次都成功,有时候 NDT 算法匹配的不好,地图可能很混乱。我们的经验是,在收集 LIDAR 数据的时候车辆行驶慢一些,如果建图不成功,就多尝试几次,每次都重新收集一次数据,另外,运行 Autoware 的电脑配置也应该足够高,至少达到 Autoware 的推荐配置,如下:

Recommended System Specifications

Number of CPU cores: 8
RAM size: 32GB
Storage size: 64GB+

生成路径点

  • 在 Runtime Manager -- Setup 界面中 TF 设置为 x: 1.2, y: 0, z: 2

  • 在 Map 界面加载刚才创建的 Point Cloud 地图

  • 在 Map 界面加载 TF 文件。这个文件可以在Autoware 官方 demo 文件中找到,可以用如下命令下载

     wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_data.tar.gz
    

    要加载的文件为 data/tf/tf.launch,但是要将其中的参数修改为

    name="world_to_map" args="0 0 0 0 0 0 /world /map 10" 
    

    这个文件中的 transform 是将 map 坐标系和 world 坐标系关联起来。这里可以令 map 坐标系与 world 坐标系重合,也就是 tf 中 x,y,z,roll,pitch,yaw 都为 0.

  • 在 Sensing 界面选择 Point Downsampler 中的 voxel_grid_filter

  • 在 Computing 界面选择 lidar_localizer 中的 ndt_matching,这里要注意,要在 app 中选择 initial pose,数值全为 0.

  • 在 Computing 界面选择 autoware connector 中的 vel_pose_connect ,这里是将 ndt 估计出的 pose 和 velocity 名字改为 current_pose, current_velocity,以便后续 pure-pursuit node 使用.

  • 在 Computing 界面选择 waypoing_maker 中的 waypoint_saver,设置好路径点文件的名字和保存路径。

  • 再次在 Simulation 界面选择数据包 lidar.bag,点击 play。等待结束,点 stop。如果一切顺利,应该可以看到在指定位置生成了路径点文件,扩展名为 .csv。如果对某些路径点不太满意,可以修改这个 csv 文件,调整路径点的位置和期望速度。

路径点跟踪

最后要实现的就是让汽车通过 LIDAR 定位,自动沿路径点行驶。

  • 在 Setup 界面设置 TF,与前边相同

  • 在 Map 界面加载 pcd 地图以及 TF 文件,与前边相同

  • 在 LG 中启动 LIDAR。

  • 在 Sensing 界面选择 Point Downsampler 中的 voxel_grid_filter

  • 在 Computing 界面选择 lidar_localizer 中的 ndt_matching,这里还是要注意,在 app 中选择 initial pose,数值全为 0,这是 NDT 点云匹配的初始位置。相应的, LG 中的车辆也应该在 pcd 地图的初始位置,两者相近才更容易实现点云匹配。

  • 在 Computing 界面选择 autoware connector 中的 vel_pose_connect

  • 在 Computing 界面选择 waypoing_maker 中的 waypoint_loader,加载刚才生成的路径点文件。

  • 在 Computing 界面选择 lane_planner 中的 lane_rulelane_select

  • 在 Computing 界面选择 lattice_planner 中的 lattice_velocity_setpath_select

  • 在 Computing 界面选择 waypoint_follower 中的 pure_pursuittwist_filter

如果一切顺利,此时 LG 端的车辆会进入自动驾驶状态,通过 LIDAR 定位,沿给定的路径点行驶。

总结

Autoware 基本操作非常简单(如果你知道该选择 Runtime Manager 中哪些功能的话)。Autoware 本质上是一大堆 ROS node 的集合,每个 node 包含了实现某些特定功能的算法程序。每次选择 Runtime Manager 中的某个功能,实际上在 terminal 中都会有对应的 ROS 命令。借助图形界面,Autoware 隐藏了输入命令的过程。如果要通过 Autoware 深入学习自动驾驶,依然需要深入到 ROS node 层面,理清系统结构,然后尝试在某些 node 中改进算法或者加入自己全新的 node,让自动驾驶功能更完善!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342