在NVIDIA Jetson TX2上安装Autoware,并实车测试激光SLAM建图
2019年01月15日 23:23:01 W_Tortoise 阅读数 2084更多
分类专栏: SLAM
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/learning_tortosie/article/details/86484505
Autoware是世界上第一款用于自动驾驶汽车的“一体化”开源软件,主要适用于城市,但也可以涵盖公路,高速公路等。
Autoware的代码库受BSD许可证保护。请自行决定使用它。
为了安全使用,Autoware为那些没有真正自动驾驶汽车的人提供基于ROSBAG的仿真环境。
如果计划将Autoware与真实的自动驾驶汽车一起使用,请在现场测试前制定安全措施和风险评估。
1 Autoware是什么?
Autoware提供丰富的自动驾驶模块,包括传感,计算和驱动功能。下图描述了这些功能。
关键词包括定位,建图,目标检测和跟踪,交通灯识别,任务和运动规划,轨迹生成,车道检测和选择,车辆控制,传感器融合,摄像机,激光雷达,雷达,深度学习,基于规则的系统,连接导航,日志,虚拟现实等。
用户手册:https://github.com/CPFL/Autoware-Manuals
2 推荐的系统配置
- Number of CPU cores: 8
- RAM size: 32GB
- Storage size: 64GB+
注意:这里只是推荐的配置,如果能达到这个配置,就可以更好的运行Autoware,发挥其最大功能,但是配置低点也是能运行的,只是效果会有差距,比如,可以在NVIDIA Jetson TX2上安装并运行Autoware。
3 安装
是不是很炫酷?
等安装完成,你会发现还有精心设计UI界面,操作十分简单。
还等什么,赶紧开始吧!
安装方式分Docker和源码两种方式,这里以源码方式为例。
3.1 要求
- ROS indigo (Ubuntu 14.04) or ROS jade (Ubuntu 15.04) or ROS kinetic (Ubuntu 16.04)
- OpenCV 2.4.10 or higher
- Qt 5.2.1 or higher
- CUDA (可选)
- FlyCapture2 (可选,PointGrey相机SDK)
- Armadillo (可选,Armadillo是一个用于C ++语言的高质量线性代数库,旨在实现速度和易用性之间的良好平衡)
注:我用的TX2,出厂预装的Ubuntu 16.04系统,没有刷机装一些库,只安装了ROS,然后安装Autoware时自动安装了OpenCV 2.4.9.1,有悖第二条要求,但是运行没有问题。
3.2 为Ubuntu 14.04 Indigo安装系统依赖项
sudo apt-get install -y python-catkin-pkg python-rosdep python-wstool ros-$ROS_DISTRO-catkin
sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install libmosquitto-dev
- 1
- 2
- 3
- 4
注意:请不要安装ros-indigo-velodyne-pointcloud软件包。如果已经安装,请卸载。
3.2 为Ubuntu 16.04 Kinetic安装系统依赖项
sudo apt-get update
sudo apt-get install -y python-catkin-pkg python-rosdep python-wstool ros-$ROS_DISTRO-catkin libmosquitto-dev gksu
- 1
- 2
注意:ROS Kinetic不支持以下软件包。
- gazebo
- orb slam
- dpm ocv
3.3 编译
(1)克隆仓库
cd $HOME
git clone https://github.com/CPFL/Autoware.git --recurse-submodules
- 1
- 2
如果之前下载过旧版本,可运行git submodule update --init --recursive
进行升级。
(2)初始化工作空间,让rosdep安装缺少的依赖项并编译
cd ~/Autoware/ros/src
catkin_init_workspace
cd ../
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
./catkin_make_release
- 1
- 2
- 3
- 4
- 5
注意:如果想最简单地安装Autoware,只需要提前安装好ROS,这里会把缺少的依赖项一并安装。
3.4 基于DNN的节点
几个基于DNN的节点(如RCNN,SSD和Yolo)不会自动构建。
要构建这些节点,请遵循相应节点的README,SSD Darknet现已包含在Autoware的感知部分中。
3.5 启动
cd $HOME/Autoware/ros
./run
- 1
- 2
然后根据下面的教学视频学习使用方法。
4 教学视频
最好的方法就是跟着教学视频操作了。
地址:https://github.com/CPFL/Autoware/wiki/videos (需要*)
包括以下内容:
- 快速开始
- 建图
- 加载地图
- 使用GNSS进行定位
- 没有GNSS的定位
- 使用SSD进行目标检测
- 使用Yolo2进行目标检测
- 使用Yolo3进行目标检测
- 使用DPM进行目标检测
- 欧几里德聚类检测
- 交通灯识别
- 使用ROSBAG进行规划
- 使用wf_simulator进行规划
- 使用混合状态A*进行规划
- 标定工具包
- bag文件的数据处理器
- Ftrace
5 现场测试
Autoware的一个显著优势是,一旦3D LiDAR传感器安装在车辆上,就可以在一天内开始对自动驾驶车辆进行现场测试。
可以使用Autoware构建3D地图,制作路线并自动跟踪它。
另外,还需要相机和带有全套Autoware模块的专业3D地图。
但是,第一次进行现场测试时,可以从以下简单测试开始。
5.1 构建点云图
Autoware提供基于同时定位与建图(SLAM)的3D建图模块。它在手动驾驶车辆时构建局部坐标点云地图。应该注意回环检测的约束。如果距离原点太远,则生成的点云地图可能与实际地理要素不对齐,除非使用Graph SLAM方法。也就是说,Autoware单独构建的点云地图不应该是大规模的。
5.2 在点云地图中制作路线
一旦点云地图创建完成,就可以创建一个你想要自主跟随的路线。
制定路线最直接的方法是在路线上手动驾驶一次并记录车辆位置。这些车辆位置的轨迹可以保存为路径点(waypoints)。
你所要做的就是跟随这些路径点,也就是寻迹。
另一方面,更智能的方法是使用VectorMapper将道路特征添加到点云地图中,并跟随包含路线车道中心线的路点;然而,这是一项耗时的任务。
5.3 跟随路线上的路径点
一旦制作了一个带有路径点的路线,你所要做的就是跟随这些路径点,根据定位和检测结果控制速度/油门和角度/转向。
在公共道路上,需要激活更多模块,例如目标跟踪器,交通灯识别器和决策器。
实际上,还可以假设路径点是由一些高精度导航服务生成的,Autoware.AI将支持这些服务。路径点准备就绪后,在此尝试的练习将适用于任何测试领域。
6 实车测试
1.硬件
- 自动驾驶汽车
- TX2
- 速腾聚创16线激光雷达
2.软件
- Autoware
- ROS Kinetic
- Ubuntu 16.04
3.步骤
- 在TX2上配置好Autoware(很顺利,没遇到问题)
- 人工驾驶装有激光雷达的汽车采集bag数据
- 根据教学视频的建图部分操作
4.测试结果
部分俯视图如下图所示,是不是看着还不错?
再看看这个侧视图,垂直方向明显存在很大的误差,这就有点尴尬了哦。
5.分析
- Autoware的SLAM没有类似视觉中消除累计误差的回环检测模块,因此不适合大场景,那到底多大的场景算大?
- TX2性能不足,因此我尝试在性能更好的计算平台上安装Autoware,但是遇到一些问题,待更新。
- 数据问题,采集数据时车速过快,转弯时也较快。
6.注意事项
- 现在的方案是提前录制好bag,然后播放bag进行建图。如果不提前录制bag,而是直接启动激光雷达驱动,那么将无法建图,就算静止时也会发飘,呈半圆弧状无限旋转运动。具体原因是什么,我还不清楚。
- Autoware的Lidar topic为
points_raw
,而Velodyne、镭神智能、速腾聚创等激光雷达发布的topic均不是这个,因此需要修改。一种方法是修改驱动,将发布的topic改为points_raw
;另一种方法是录制bag,然后在播放时将驱动默认的topic改为points_raw
。以速腾聚创激光雷达为例:rosbag play *.bag /rslidar_points:=/points_raw
7. TO DO
- 重新采集数据,放慢车速,以及转弯速度
- 在性能更好的计算平台上安装Autoware,然后建张好图并保存
- 加载地图进行定位
- 记录轨迹
- 寻迹
7 总结
Autoware是一个围绕完整无人驾驶打造的系统,与Apollo类似,有必要深入学习一下。
也可以根据某部分需求,去扒一扒Autoware是如何实现的,然后借鉴过来。
比如,如果只需要激光SLAM建图和导航这部分功能,就要将其剥离出来。