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 上发布的教程,原始地址是:
既然如此,为什么还需要做重复的说明呢?
第一,当然是因为国内的小伙伴,比较不方便。
第二,这中间的细节比较多,以至于在原视频中 Dr. Hatem Darweesh 漏讲了一两个细节,需要有心人去他的 github issue 页面上求教。
综上,希望尽可能用一篇教程(本文以及对应视频)来把可能的坑给填上。
好了,废话到此为止,干货开始。
首先,我知道很多人会要问我的系统参数,自觉放上来:
显卡是Nvidia RTX 3090,安装了 CUDA 11.x 和cudnn 8.x libary。(x具体是几不重要。)
图片:显卡相关配置
ROS同时安装了ROS Noetic和ROS2 Galactic版本。(题外话:安装多个版本的ROS是没有问题的,但是每次只能通过source激活一个。)
“不要编译…不要编译…不要编译…”。
除非你有客制化模拟器的需求,否则完全没有必要编译,费时费力。
图片:Carla 的官方 github 页面
如上图,进入到Carla的官方 github 页面,进入红色框中的 Releases 页面,下载最新的 Release 版本,也就是 Carla 0.9.13。
比如说,下载和解压到工作空间:~/workspaces/carla-0.9.13/
。
我会习惯把对应版本的 scenario_runner 也放到同一文件夹中,以便使用。
可以验证一下:
$ cd ~/workspaces/carla-0.9.13/CARLA_0.9.13
$ ./CarlaUE4.sh -quality-level=Epic -world-port=2000 -resx=800 -resy=600
参见官方文档:Autoware Documentation。这里我们需要选用 Source Installation 的方式,如果之后有机会验证 Docker Installation 也适用在运行在Carla Simulator的任务,我再更新上来。
那么,进入到 Source Installation 的介绍页面,如下图:
图片: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。
之后的步骤,与官方文档的介绍并没有不一样。
更新代码库:
$ cd autoware.universe.openplanner
$ mkdir src
$ vcs import src < autoware.repos
安装 ROS 依赖项:
$ source /opt/ros/galactic/setup.bash
$ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
编译
$ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
Source
$ source install/setup.bash
到这里,我们可以先单独运行 Autoware 验证一下,根据官方文档关于Planning Simulation部分的介绍,操作如下:
下载样板地图数据:
$ gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1499_nsbUbIeturZaDj7jhUownh5fvXHd'
$ unzip -d ~/autoware_map ~/autoware_map/sample-map-planning.zip
运行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 的初界面
当时,有兴趣的读者还可以继续试验文档介绍的几个 Planning Experiments:
因为不在本文的介绍范围之内,就不再赘述。
这里的地图数据来源,与 Carla-Autoware 使用的地图数据相同,通过如下命令下载:
$ cd ~/workspaces/autowarefoundation
$ mkdir map_data
$ git clone https://bitbucket.org/carla-simulator/autoware-contents.git
还需要做一步工作,比如从文件夹中找到 Town01 对应的点云地图和 Lanelet2 地图,并且放置到文件夹 Town01 中,重命名如下:
图片:重命名 Town01 地图数据
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
修改两个脚本文件:
op_bridge/op_scripts/run_exploration_mode_ros2.sh
export SIMULATOR_LOCAL_HOST="localhost"
# export SIMULATOR_LOCAL_HOST="192.168.11.5"
模拟器的host改成"localhost"。
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。
打开一个窗口,运行Carla simulator
$ cd ~/workspaces/carla-0.9.13/CARLA_0.9.13
$ ./CarlaUE4.sh -quality-level=Epic -world-port=2000 -resx=800 -resy=600
等待模拟器界面正常载入再进入下一步。
在另一个窗口运行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)
好像还不错,只是,自车好像不能正常定位。别着急,下面就是最后一步了。
这最后一步需要修改四个文件:
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
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"/>
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
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!