Autoware.Universe:如何在Carla 0.9.13上运行

Autoware.Universe:如何在Carla 0.9.13上运行

  • 前言
    • 从 Autoware.AI 到 Autoware.Universe
  • 正文
    • 系统参数
    • 第一步:下载 Carla 0.9.13
    • 第二步:编译 Autoware.Universe.Openplanner
    • 第三步:下载Carla高精地图数据
    • 第四步:配置op_bridge和op_agent
    • 第五步:设置传感器参数

前言

从 Autoware.AI 到 Autoware.Universe

Autoware 作为第一款自动驾驶开源框架,自诞生以来就培养的一大批学习中的开发者。甚至对于一些机器人项目和自动驾驶项目,也起到了孵化作用,能够快速地帮助搭建一个可用的自动驾驶系统,以便在此基础上进行自研。

当然,也有一些值得吐槽的地方。Autoware 发展现如今 ROS2 的版本,算法显然是更新了,文档也更详尽。只是在这其中过渡中间,我注意到官方用来维护代码的平台,几番折腾,从 Github 到 GitLab 又回到Github,让人混淆。

为了区分,用 Autoware.AI 指代 ROS1 版本,而 Autoware.Unverse 是所谓的基于 ROS2 的最新版本。

我的观点是,尽量看最新的参考,无论是论文还是代码。所以,在两代 Autoware 框架上,即使你完全没有看过 Autoware.AI,也可以直接研读和参考 Autoware.Universe。当然,对于习惯于使用 ROS 的用户,也许觉得进入到 ROS2 的世界又需要经历一个学习曲线。我觉得大可不必。我始终认为,在算法面前,ROS 甚至 C++ 都是工具而已,而工具都是可以在使用中学会。

正文

本文的目标是以比较详尽的篇幅介绍如何使得 Autoware.Universe 运行于 Carla 0.9.13 上。

在写本文时,Autoware.Universe 和 Carla 0.9.13 都是其最新的版本。

需要说明的是,这篇分享或者教程,是依据 Dr. Hatem Darweesh 在 YouTube 上发布的教程,原始地址是:

  • CARLA - Autoware universe Tutorial 1
  • CARLA - Autoware universe Tutorial 2

既然如此,为什么还需要做重复的说明呢?

第一,当然是因为国内的小伙伴,比较不方便。

第二,这中间的细节比较多,以至于在原视频中 Dr. Hatem Darweesh 漏讲了一两个细节,需要有心人去他的 github issue 页面上求教。

综上,希望尽可能用一篇教程(本文以及对应视频)来把可能的坑给填上。

好了,废话到此为止,干货开始。

系统参数

首先,我知道很多人会要问我的系统参数,自觉放上来:

Autoware.Universe:如何在Carla 0.9.13上运行_第1张图片
图片:系统参数

显卡是Nvidia RTX 3090,安装了 CUDA 11.x 和cudnn 8.x libary。(x具体是几不重要。)
Autoware.Universe:如何在Carla 0.9.13上运行_第2张图片
图片:显卡相关配置

ROS同时安装了ROS Noetic和ROS2 Galactic版本。(题外话:安装多个版本的ROS是没有问题的,但是每次只能通过source激活一个。)

第一步:下载 Carla 0.9.13

“不要编译…不要编译…不要编译…”。

除非你有客制化模拟器的需求,否则完全没有必要编译,费时费力。

图片:Carla 的官方 github 页面

如上图,进入到Carla的官方 github 页面,进入红色框中的 Releases 页面,下载最新的 Release 版本,也就是 Carla 0.9.13。

比如说,下载和解压到工作空间:~/workspaces/carla-0.9.13/

我会习惯把对应版本的 scenario_runner 也放到同一文件夹中,以便使用。

Autoware.Universe:如何在Carla 0.9.13上运行_第3张图片
图片:Carla 0.9.13 工作目录

可以验证一下:

$ cd ~/workspaces/carla-0.9.13/CARLA_0.9.13
$ ./CarlaUE4.sh -quality-level=Epic -world-port=2000 -resx=800 -resy=600

Autoware.Universe:如何在Carla 0.9.13上运行_第4张图片
图片:打开 Carla Simulator

第二步:编译 Autoware.Universe.Openplanner

参见官方文档:Autoware Documentation。这里我们需要选用 Source Installation 的方式,如果之后有机会验证 Docker Installation 也适用在运行在Carla Simulator的任务,我再更新上来。

那么,进入到 Source Installation 的介绍页面,如下图:
Autoware.Universe:如何在Carla 0.9.13上运行_第5张图片
图片:Autoware 官方文档 Source Installation 页面

假定之前的 Dependencies 大家都正确安装。那么,下一步就是下载源代码并编译。

这里我们要去下载的是 Dr. Hatem 修改的 Autoware 版本。

$ cd ~/workspaces
$ mkdir autowarefoundation
$ cd autowarefoundation
$ git clone https://github.com/ZATiTech/autoware.universe.openplanner.git -b open-planner

其实,改动的篇幅也并不大,只是加入了 Dr. Hatem 自己的 open_planner。大家可以自行查看 diff。

之后的步骤,与官方文档的介绍并没有不一样。

  1. 更新代码库:

    $ cd autoware.universe.openplanner
    $ mkdir src
    $ vcs import src < autoware.repos
    
  2. 安装 ROS 依赖项:

    $ source /opt/ros/galactic/setup.bash
    $ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
    
  3. 编译

    $ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
    
  4. Source

    $ source install/setup.bash
    

到这里,我们可以先单独运行 Autoware 验证一下,根据官方文档关于Planning Simulation部分的介绍,操作如下:

  1. 下载样板地图数据:

    $ gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1499_nsbUbIeturZaDj7jhUownh5fvXHd'
    $ unzip -d ~/autoware_map ~/autoware_map/sample-map-planning.zip
    
  2. 运行Autoware:

    $ source ~/workspaces/autowarefoundation/autoware.universe.openplanner/install/setup.bash
    $ ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
    

一切顺利的话,就会看到 Rviz 的界面,同时能看到点云地图和高精地图:
Autoware.Universe:如何在Carla 0.9.13上运行_第6张图片
图片:运行 Autoware 的初界面

当时,有兴趣的读者还可以继续试验文档介绍的几个 Planning Experiments:

  • Lane driving scenario
  • Parking scenario
  • Placing dummy objects
  • Traffic light recognition simulation

因为不在本文的介绍范围之内,就不再赘述。

第三步:下载Carla高精地图数据

这里的地图数据来源,与 Carla-Autoware 使用的地图数据相同,通过如下命令下载:

$ cd ~/workspaces/autowarefoundation
$ mkdir map_data
$ git clone https://bitbucket.org/carla-simulator/autoware-contents.git

还需要做一步工作,比如从文件夹中找到 Town01 对应的点云地图和 Lanelet2 地图,并且放置到文件夹 Town01 中,重命名如下:
Autoware.Universe:如何在Carla 0.9.13上运行_第7张图片
图片:重命名 Town01 地图数据

第四步:配置op_bridge和op_agent

op_bridge 和op_agent 这两个 package 都来自于 Dr. Hatem 个人的 GitHub 页面。

下载到第二步相同的工作目录(单纯为了方便):

$ cd ~/workspaces/autowarefoundation
$ git clone https://github.com/hatem-darweesh/op_bridge.git -b ros2
$ git clone https://github.com/hatem-darweesh/op_agent.git -b ros2

根据REAMDE所示,设置环境变量如下,保存到 ~/.bashrc 文件:

export CARLA_ROOT=~/workspaces/carla-0.9.13/CARLA_0.9.13
export SCENARIO_RUNNER_ROOT=~/workspaces/carla-0.9.13/scenario_runner
export LEADERBOARD_ROOT=~/workspaces/autowarefoundation/op_bridge
export TEAM_CODE_ROOT=~/workspaces/autowarefoundation/op_agent
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/util
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/agents
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/dist/carla-0.9.13-py3.7-linux-x86_64.egg

修改两个脚本文件:

  1. op_bridge/op_scripts/run_exploration_mode_ros2.sh

    export SIMULATOR_LOCAL_HOST="localhost"
    # export SIMULATOR_LOCAL_HOST="192.168.11.5"
    

    模拟器的host改成"localhost"。

  2. op_agent/start_ros2.sh

    source /home/hatem/hatem-repos/autoware-universe/autoware/install/setup.bash
    

    替换为

    source /home/peng/workspaces/autowarefoundation/autoware.universe.openplanner/install/setup.bash
    

    以及

    ros2 launch /home/hatem/hatem-repos/autoware-universe/autoware/src/launcher/autoware_launch/autoware_launch/launch/autoware.launch.xml map_path:=/home/hatem/Data/autoware_uni_sample_data/${map_name} vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
    

    替换为

    ros2 launch /home/peng/workspaces/autowarefoundation/autoware.universe.openplanner/src/launcher/autoware_launch/autoware_launch/launch/autoware.launch.xml map_path:=/home/peng/workspaces/autowarefoundation/map_data/${map_name} vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit
    

到这里为止,我们已经很接近终点了。我知道,我们经历了很多麻烦到这里。这也是我写这篇分享的动机,免得漏掉一些细节。

我们来尝试一下,运行Carla和Autoware。

  1. 打开一个窗口,运行Carla simulator

    $ cd ~/workspaces/carla-0.9.13/CARLA_0.9.13
    $ ./CarlaUE4.sh -quality-level=Epic -world-port=2000 -resx=800 -resy=600
    

    等待模拟器界面正常载入再进入下一步。

  2. 在另一个窗口运行Autoware.universe.openplanner

    $ source ~/workspaces/autowarefoundation/autoware.universe.openplanner/install/setup.bash
    $ cd ~/workspaces/autowarefoundation/op_bridge/op_scripts
    $ ./run_exploration_mode_ros2.sh
    

同样,一切顺利的话,我们将会看到Rviz界面出现,点云地图和高精地图成功载入。

图片:在Carla Simulator上运行Autoware.universe的Rviz界面(Town01)

好像还不错,只是,自车好像不能正常定位。别着急,下面就是最后一步了。

第五步:设置传感器参数

这最后一步需要修改四个文件:

  1. autoware.universe.openplanner/src/launcher/autoware_launch/autoware_launch/launch/autoware.launch.xml

    如果懒得手动修改的话,可以直接复制下面文件的内容到上面的文件:

    autoware.universe.openplanner/src/universe/external/open_planner/op_launch/autoware-carla.launch.xml

  2. autoware.universe.openplanner/src/sensor_kit/sample_sensor_kit_launch/sample_sensor_kit_launch/launch/gnss.launch.xml

    修改第四行代码:

      <arg name="coordinate_system" default="1" description="0:UTM, 1:MGRS, 2:PLANE"/>
    

    为:

      <arg name="coordinate_system" default="2" description="0:UTM, 1:MGRS, 2:PLANE"/>
      <arg name="plane_zone" default="0"/>
    
  3. autoware.universe.openplanner/src/sensor_kit/sample_sensor_kit_launch/sample_sensor_kit_description/config/sensor_kit_calibration.yaml

    替换成以下代码:

    sensor_kit_base_link:
      camera0/camera_link:
        x: 0.7
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      camera1/camera_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      camera2/camera_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      camera3/camera_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      camera4/camera_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      camera5/camera_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      traffic_light_right_camera/camera_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      traffic_light_left_camera/camera_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      velodyne_top_base_link:
        x: 0.0
        y: 0.0
        z: 0.8
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      velodyne_left_base_link:
        x: -0.5
        y: 0.0
        z: 0.8
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      velodyne_right_base_link:
        x: 0.5
        y: 0.0
        z: 0.8
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      gnss_link:
        x: 0.0
        y: 0.0
        z: 0.8
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      tamagawa/imu_link:
        x: 0.0
        y: 0.0
        z: 0.8
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
    
  4. autoware.universe.openplanner/src/sensor_kit/sample_sensor_kit_launch/sample_sensor_kit_description/config/sensors_calibration.yaml

    替换成以下代码:

    base_link:
      sensor_kit_base_link:
        x: 0.0
        y: 0.0
        z: 1.6
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
      velodyne_rear_base_link:
        x: 0.0
        y: 0.0
        z: 0.0
        roll: 0.0
        pitch: 0.0
        yaw: 0.0
    

此时,再重复第四步最后的验证过程,这时自车就可以正常定位了,左下角也能看到 Camera 获取的图片显示出来。

图片:在 Carla Simulator正常运行的 Autoware.Universe

那么,Enjoy!

你可能感兴趣的:(自动驾驶)