最近心血来潮,准备研究下Autoware,主要是基于ROS2的Autoware.auto,这里记录下第一波折腾的笔记 —— 安装、配置、测试。


首先说明我使用的软件环境:
系统:Ubuntu 20.04
ROS:ROS2 Foxy


接下来就开始啦。


一、安装Docker


如果之前安装过docker,需要先删除旧版本docker:

$ sudo apt-get remove docker docker-engine docker.io containerd runc


如果看到下图的提示,就没问题啦。


继续安装一些软件依赖:

$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release


设置秘钥:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


设置软件源:

$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$ (lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


现在就可以安装docker引擎了:

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io


验证docker是否安装成功:

$ sudo docker run hello-world


此时可能出现如下提示:Unable to find image ‘hello-world:latest’locally,并且等待一段时间后,也无法继续运行镜像。


这是因为docker在本地没有找到hello-world镜像,也没有办法从docker仓库中拉取镜像,这是因为docker服务器在国外,网络原因导致拉取失败,此时我们可以为docker设置国内阿里云的镜像加速器,创建一个配置文件/etc/docker/daemon.json,添加如下内容:

{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}


然后保存并退出,并且重启docker服务

$ systemctl restart docker


再次运行Hello world的镜像:

$ sudo docker run hello-world


一开始还是会提示本地没有,不过稍等片刻,就可以拉取成功了,运行画面如下,说明docker安装成功啦:


接下来将当前用户加入docker用户组:

# 将当前用户加入docker用户组,$USER改为自己的用户名
$ sudo usermod -aG docker $USER

# 重启电脑或者重启docker服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker


二、Autoware.auto容器安装


继续安装Autoware.auto,需要用到一个官方提供的配置工具——ADE。


ADE的安装步骤:

$ mkdir ~/adehome
$ cd ~/adehome
$ wget https://gitlab.com/ApexAI/ade-cli/-/jobs/1341322851/artifacts/raw/dist/ade+x86_64
$ mv ade+x86_64 ade
$ chmod +x ade
$ ./ade --version
4.3.0

$ sudo mv ade /usr/local/bin
$ which ade
/usr/local/bin/ade


此时就说明ADE安装成功啦。


继续安装Autoware容器:

$ touch .adehome
$ git clone --recurse-submodules https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto.git
$ cd AutowareAuto/
$ sudo ade start


接下来的过程会拉取镜像,消耗的时间稍长,耐心等待一下。


过程中可能会出现如下错误,提示:user ‘root’already exists:


此时可以按照以下指令解决:

# $USER改为自己的用户名
$ sudo usermod -aG docker $USER
$ sudo chmod 666 /var/run/docker.sock
$ ade start --update --enter


很快就可以进入镜像啦:


继续切换目录,下载Autoware.auto的一些代码:

ade$ cd AutowareAuto
ade$ vcs import < autoware.auto.$ROS_DISTRO.repos


此时大概率会出现github连接失败的报错:


这是因为网络连接不成功,可以更换网络多试试,我大概试了5次,才成功。


接下来就是编译代码了,使用ROS2的编译指令:

ade$ colcon build


编译的时间较长,将近1个小时,耐心等待了。。。


继续编译测试案例,也需要一个多小时,继续耐心等待。。。

ade$ colcon test


想要查看测试用例结果的话,可以这样:

ade$ colcon test-result


我这里有几个测试用例运行失败了,先不管了。


三、运行测试案例


这里使用一个车道线检测的案例作为测试,需要用到一个测试的视频。


测试用例与视频准备:

$ cd ~/adehome/AutowareAuto/
$ ade start
$ ade enter
$ git clone https://gitee.com/knowmefly/camera-hands-on-ws.git


下载视频文件:

链接:https://pan.baidu.com/s/1-PLjNF3fjMkpzF8o7ZnKdw 
提取码:jjbw 


然后编译这个例程:

$ ade enter
$ cd camera-hands-on-ws/
$ colcon build


很快就可以编译完成:


编译完成后就可以运行例程啦:


打开第一个终端,运行视频加载节点:

$ ade enter
$ cd camera-hands-on-ws/
$ source install/setup.bash
$ ros2 run lane_detection_data_loader lane_detection_data_loader_node

打开第二个终端,运行图像处理节点:

$ ade enter
$ cd camera-hands-on-ws/
$ source install/setup.bash
$ ros2 run lane_detection_projection lane_detection_projection_node

打开第三个节点。运行可视化节点:

$ ade enter
$ cd camera-hands-on-ws/
$ source install/setup.bash
$ ros2 run lane_detection_visualization lane_detection_visualization_node

打开第四个终端,运行Rviz可视化显示:

$ ade enter
$ rviz2

在Rviz2中,添加必要的显示内容,就可以看到车道线检测的效果啦


好啦,至此我们就完成了Autoware.auto docker版本的安装、配置和测试,步骤不少,中间编译的时间也很长,中间出现什么问题基本都可以Google找到答案。

以上所有操作均参考自以下链接:
https://docs.docker.com/engine/install/ubuntu/
https://gitlab.com/autowarefoundation/autoware.ai/autoware/-/wikis/docker-installation
https://gitlab.com/autowarefoundation/autoware.ai/autoware/-/wikis/Generic-x86-Docker
https://blog.csdn.net/baiyefenglin/article/details/122921360
https://blog.csdn.net/jiluonian/article/details/120267789 
https://blog.csdn.net/leoFY123/article/details/122184651