搭建自动驾驶闭环仿真测试平台 LGSVL simulator (release 2019.04 版本) + Autoware (1.11版本)

引言

这里所谓的“闭环”,就是测试平台中的仿真车辆将传感器检测数据发送给自动驾驶软件,自动驾驶软件经过一系列感知、定位、决策、控制环节,将最终的控制信号传递回仿真车辆,驱动汽车按照期望的路线行驶。来自车辆传感器的检测数据和来自自动驾驶软件的控制信号构成了一个闭合的信息流。

闭环仿真测试系统包括车辆仿真平台和自动驾驶软件两部分,基本框架如下:

搭建自动驾驶闭环仿真测试平台 LGSVL simulator (release 2019.04 版本) + Autoware (1.11版本)_第1张图片
closed_loop.png

其中自动驾驶软件部分应该尽量做到仿真车、实车无差别。也就是说,只要接口设置恰当,在仿真车辆上调试好的算法能够很容易地移植到实车上,从而加速算法开发和测试。对于自动驾驶研究来说,闭环仿真测试系统几乎是必不可少的,新的算法都应该经过初步的仿真测试才能进入实车验证阶段。

  • 车辆仿真平台
    车辆仿真平台种类很多,各有侧重点。有些是针对某一自动驾驶情景开发的仿真平台,例如 Udacity 发布的 Self-Driving Car Simulator,主要用来做端到端(摄像头画面到方向盘转角)的自动驾驶神经网络训练和测试。有些是全功能的仿真平台,例如机器人领域非常流行的 Gazebo,专门针对自动驾驶的 Carla,以及针对无人机和自动驾驶的 AirSim 等。读者可以参考Yue Kang 等人的最新综述文章,里面详细列举了 22 种仿真平台以及 37 个实车采集的数据集(例如 KITTI 和 Cityscapes)。该文章是 open access 的,可免费阅读。

  • 自动驾驶软件
    自动驾驶软件也有很多种。可以用一个 python 文件实现端到端自动驾驶,例如 Udacity 的 Behavioral Cloning 和 Carla 的 Conditional Imitation Learning ;也可以是一个非常庞大的软件套装,按部就班的实现自动驾驶的感知、定位、决策、控制等环节。目前来看,业内影响力比较大的自动驾驶软件主要是由名古屋大学研究人员开发的目前由 Tier IV 公司负责维护的 Autoware 和 百度发布的 Apollo。两者都是开源的,都有自己的开发社区。

我们项目组之前一直用 Gazebo 作为车辆仿真平台,它的优点是可配置性高,如果熟悉 SDF 或者 URDF,可以搭建出非常个性化的仿真环境。例如用 Gazebo 搭建的 M-city model ,几乎还原了 University of Michigan 的 M-city 测试场地。Gazebo 的一个缺点是,它是机器人的通用仿真平台,而不是针对自动驾驶的。尽管 Gazebo 中内置了一些车辆 model,我们一般还是要对这些 model 进行二次开发,例如添加传感器,才能满足自己的测试需求。如果不熟悉 Gazebo 的建模语言,这个过程可能比较耗时。另外,Gazebo 的仿真场景视觉效果比较粗糙,略显卡通化,可能无法满足那些基于摄像头的自动驾驶系统的训练要求。

最近,我们在研究一个新的车辆仿真平台 —— 由 LG Silicon Valley Lab 开发的 LGSVL Simulator。它有几个特点是目前其他仿真平台不具备的:

  1. 极其逼真的车内驾驶环境:
    先看图
cab.gif

由于我们的项目既有全自动驾驶部分,也有人机共驾部分,所以一个逼真的模拟驾驶环境是我们非常看中的。

  1. 与自动驾驶软件紧密结合:
    如何将车辆仿真平台与自动驾驶软件结合在一起、使它们能够互相通讯是搭建测试平台的核心问题之一。尽管其他常见的车辆仿真平台大都可以实现这个功能,但是这个结合过程可能是非常耗时的,很可能没有现成的教程可循,需要自己搜索资料,不断摸索。LGSVL Simulator 提供了官方教程,介绍如何与 Autoware 或者 Apollo 结合。这正是我们想要的。更重要的是,从 1.10 版本开始 Autoware 就已经将 LGSVL Simulator 嵌入到自己的系统,算是得到了 Autoware 的官方支持。总之,我们希望尽量减少在平台配置方面花费时间,把精力集中在更有创新性的研究工作中。

本文将基于我们的经验,介绍如何搭建 LGSVL simulator + Autoware 闭环仿真测试平台。尽管 LGSVL simulator 官网、Autoware 官网都给出了基本的指导教程,但是中间依然有不少坑。我们希望这篇文章能帮助其他从事自动驾驶的研究人员,少走弯路。

系统整体架构

我们采用的架构借鉴了 Autoware 官网 教程,如下图所示:

搭建自动驾驶闭环仿真测试平台 LGSVL simulator (release 2019.04 版本) + Autoware (1.11版本)_第2张图片
system_structure.png

整个系统包括两台电脑:

  1. 一台运行 Windows 10 系统,安装 LGSVL simulator (release 2019.04),并与 G29 罗技方向盘相连。
  2. 一台运行 Ubuntu 16.04,安装 Autoware 1.11 版本

实际上,如果电脑配置足够高,完全可以将所有程序装入同一台运行 Ubuntu 的电脑。但是基于我们的安装经验,上述架构一个明显的好处是对外接方向盘支持比较好。我们尝试了 G29 连接 Ubuntu 系统,问题比较多,比如没有反馈力、甚至 simulator 无法识别方向盘。罗技官网 也只提供了 Win 和 Mac 两类操作系统的驱动。所以,如果项目中用到了外接方向盘,最好与 Windows 系统连接,比较省心。

下边逐一介绍各台电脑中的安装流程。

Windows 电脑

  • 安装 LGSVL simulator:直接安装编译好的文件即可。
  • 连接罗技 G29 方向盘:首先要安装最新的驱动和控制软件。根据我们的经验,要先安装驱动再连接 G29,否则驱动程序可能会有问题。如果发现 G29 的离合踏板变成了油门,就是驱动出问题了。我们找到的解决办法是卸载 G29 驱动,清空注册表中带有 "g29" 的键值,重启系统,再安装驱动,最后连接 G29 方向盘,就应该可以解决问题了。

安装好了上述两个组件,应该可以通过方向盘控制 simulator 中的车辆了。步骤如下:

  1. 启动 simulator
  2. 选择分辨率和显示效果
  3. Input 设置:设置外接控制器,其中关键的是 steering, acceleration 和 braking。在我们的机子上,steering 值为 joystick axis 0, acceleration 值为 joystick axis 2, braking 值为 joystick axis 3.
  4. 选择 Free Roaming
  5. 选择地图 SanFrancisco,车辆选择 XE_Rigged-autoware
  6. 进入仿真环境:默认情况下 simulator 要与外部自动驾驶软件连接之后才能运行。如果要以 standalone mode 运行,需要按 shift + RUN。
搭建自动驾驶闭环仿真测试平台 LGSVL simulator (release 2019.04 版本) + Autoware (1.11版本)_第3张图片
choose_map.png

到此为止,Windows 电脑上的配置工作就结束了。如果一切顺利,应该可以用 G29 方向盘(PS4模式)操控仿真车辆了,就像普通的赛车游戏一样,效果如本文前边动图所示。

方向盘按键功能:

  • 方向键:变换天气状况
  • : 变换视角
  • ❌:调出屏幕菜单
  • L2 :近光/远光
  • R2:手刹
  • R3:开启引擎
  • “share” 键:前进/后退
  • “option” 键:雨刷

Ubuntu 电脑

这个电脑主要是安装 Autoware。Autoware 官方推荐用 Docker 安装方式,但是根据我们的安装经验,官方最新的 docker image 路径设置有问题,在 docker 中修改也比较麻烦,我们就直接从源码编译了。

完全按照官网的指导安装即可,这里没有遇到坑。先装 ROS (kinetic version) 和 Qt,然后按照指导下载、编译 Autoware。下载的 Autoware 默认是 master branch 上最新的 1.11 版本。按照指导,编译的时候要用 colcon 编译而不是 catkin_make。这篇文章将 colcon 编译工具的发展思路介绍的非常详细。简单来说,原本编译 ROS 有 catkin_make,编译 ROS 2 有 ament_tools,colcon 则是统一的编译工具。

catkin_make 编译与 colcon 编译的一个明显区别是,前者会生成 build 和 devel 文件夹,通过 source devel 文件夹中的 setup.bash 文件注册 ROS package 路径, package 的路径在 src 文件夹内 ,即用 roscd 会进入 src 内对应的 package 文件夹中;后者编译完生成 build 和 install 文件夹,通过 source install 文件夹中的 setup.bash 文件注册 package 路径, package 的路径在 install 文件夹内。

这里有个坑。追溯 Autoware release 历史可以发现,Autoware 1.10 版本加入了对 LGSVL simulator 的支持,在 Runtime_Manager / Simulation 界面添加了 LGSVL Simulator button,成为与 Gazebo 并列的官方支持的仿真平台。

搭建自动驾驶闭环仿真测试平台 LGSVL simulator (release 2019.04 版本) + Autoware (1.11版本)_第4张图片
lgsvl-button.png

LGSVL simulator 通过 Autoware 启动时需要一些辅助文件,主要是一些 python 脚本文件。在 Autoware 1.10 版本中,这些辅助文件都存放在 /Autoware/ros/src/simulation/lgsvl_simulator/lgsvl_simulator_bridge 路径下,这个路径也是 1.10 版本中的 lgsvl_simulator_bridge package 路径 (后边简称旧路径)。

到了最新的 1.11 版本中,开发人员对 Autoware 做了较大修改,尤其是编译系统采用了 colcon,编译之后 package 路径会定位到 install 文件夹下,例如 lgsvl_simulator_bridge package 的路径就是 /Autoware/ros/install/lgsvl_simulator_bridge/share/lgsvl_simulator_bridge (后边简称新路径),而不是原本的 src 文件夹下。可是,原本启动 simulator 需要的那些辅助文件还在老地方,这就导致了类似如下找不到文件的错误:

['sh', '-c', 'rosrun lgsvl_simulator_bridge rqt_lgsvl_simulator_configurator']
pid=1583
sched policy=OTHER prio=0
pid=1586
sched policy=OTHER prio=0
[rosrun] Couldn't find executable named rqt_lgsvl_simulator_configurator below /home/autoware/Autoware/ros/install/lgsvl_simulator_bridge/share/lgsvl_simulator_bridge

解决问题的方法就是把旧路径下的辅助文件都拷贝到新路径下,具体包括:

  • 旧路径下的整个 resource 文件夹拷贝到新路径下
  • 旧路径下的 plugin.xml 文件拷贝到新路径下
  • 旧路径下的整个 scripts 文件夹拷贝到新路径下
  • 旧路径下的 src/lgsvl_simulator_bridge 文件夹中的 configurator.py 拷贝到新路径的 scripts 文件夹中

最终,新路径下的文档结构应该如下所示:

.
├── cmake
│   ├── lgsvl_simulator_bridgeConfig.cmake
│   └── lgsvl_simulator_bridgeConfig-version.cmake
├── config
│   ├── sample.json
│   └── setting.dat
├── hook
│   ├── cmake_prefix_path.ps1
│   ├── cmake_prefix_path.sh
│   ├── pkg_config.ps1
│   ├── pkg_config.sh
│   ├── python2path.ps1
│   ├── python2path.sh
│   ├── ros_package_path.ps1
│   └── ros_package_path.sh
├── launch
│   ├── bridge.launch
│   └── lgsvl_simulator.launch
├── media
│   ├── autoware.png
│   └── lgsvl_simulator_bridge.png
├── package.bash
├── package.ps1
├── package.sh
├── package.xml
├── package.zsh
├── plugin.xml
├── resource
│   └── LgsvlSimulatorConfigratorPlugin.ui
├── rviz
│   └── lgsvl_simulator.rviz
└── scripts
    ├── configurator.py
    ├── launch_sim.bash
    └── rqt_lgsvl_simulator_configurator

  • 启动 Autoware
cd ~/Autoware/src/ros
./run

检查一下启动 LGSVL Simulator 是否出现如下配置界面,如果成功,则说明越过了这个坑。

搭建自动驾驶闭环仿真测试平台 LGSVL simulator (release 2019.04 版本) + Autoware (1.11版本)_第5张图片
ip_port.png

至此,ubuntu 电脑上的安装结束。

设置两台电脑之间的通讯

两台电脑之间不同的物理连接方式会有不同的设置方法,我们是用网线将两台电脑直接相连。这种情况下的设置为:

  • 获取 win 电脑的 ip 地址,例如 169.254.9.115
  • 在 win 上开启 LGSVL Simulator,查看它使用的端口(参考),例如 8181
  • 设置 ubuntu 的 ip 地址 (参考)。假设设置为 169.254.9.110
  • 测试一下双方能否互相 ping 通。我们设置的时候, win 可以 ping 通 ubuntu, 反过来不行。然后关掉 win firewall,设置了 network discoverable 就可以了 (参考)。
  • 在双方可以 ping 通的前提下,在 Autoware LGSVL Simulator 窗口中设置 Simulator Machine IPSimulator Machine Port,这里填写 Win 的 IP 和 simulator 程序占用的 Port,然后 Launch。这里可能会提示类似找不到 simulator 的错误,这是因为默认是通过这个 launch 按钮打开 simulator的,需要设置一个环境变量,指定 simulator 的位置。我们这里可以手动启动 simulator,可以不管这个错误,或者将调用它的命令屏蔽掉,不影响后边的使用。 在 Win LGSVL Simulator 中设置 Bridge address,这里填写 Ubuntu 电脑的 IP 地址。如果一切顺利,Simulator 中的状态应该从 "connecting" 变成了 "connected"。最后就可以 Run simulator 了。

测试效果

搭建好了上述闭环仿真平台,我们通过 Autoware 实现了一些基本的自动驾驶功能,算是对平台的简单测试,效果如下:

final_result.gif

其中台式机显示的是 simulator 中的画面,车辆通过 LiDAR 定位沿既定路径点行驶;笔记本中显示的是 RViz 中的点云地图、路径点、基于 pure-pursuit 算法得到的转向曲率等。

LGSVL Simulator 中车辆安装了常见的传感器,包括 LiDAR, GPS, RGB camera, Depth camera, Segmentation camera 等,还可以设置交通、行人、天气环境。基本上可以满足我们现阶段的研究需求。

未来我们会在博客中逐一介绍如何在该仿真测试平台上实现各种自动驾驶功能以及新算法的验证。希望对其他从事自动驾驶的研究人员有帮助!欢迎留言交流。

你可能感兴趣的:(搭建自动驾驶闭环仿真测试平台 LGSVL simulator (release 2019.04 版本) + Autoware (1.11版本))