物联网autoware等仿真相关

搭建自动驾驶闭环仿真测试平台 LGSVL simulator +

2019-05-18  本文已影响576人  OurNote

引言

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

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

closed_loop.png

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

我们项目组之前一直用 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 官网 教程,如下图所示:

system_structure.png

整个系统包括两台电脑:

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

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

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

Windows 电脑

安装好了上述两个组件,应该可以通过方向盘控制 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。
choose_map.png

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

方向盘按键功能:

Ubuntu 电脑

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

完全按照官网的指导安装即可,这里没有遇到坑。先装 ROS (kinetic version) 和 Qt,然后按照指导下载、编译 Autoware。下载的 Autoware 默认是 master branch 上最新的 1.11 版本。按照指导,编译的时候要用 colcon 编译而不是 catkin_make。

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-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

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

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

.
├── 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

cd ~/Autoware/src/ros
./run

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

ip_port.png

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

设置两台电脑之间的通讯

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

测试效果

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

final_result.gif

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

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

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

上一篇下一篇

猜你喜欢

热点阅读