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

引言

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

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

closed_loop.png

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

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

  • 自动驾驶软件
    自动驾驶软件也有很多种。可以用一个 python 文件实现端到端自动驾驶,例如 Udacity 的 Behavioral CloningCarla 的 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 官网 教程,如下图所示:

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。
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-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 是否出现如下配置界面,如果成功,则说明越过了这个坑。

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 等,还可以设置交通、行人、天气环境。基本上可以满足我们现阶段的研究需求。

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

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

推荐阅读更多精彩内容