整整安装了两周的autoware终于安装好了,中途遇上了太多问题,踩了太多坑。所以我决定记录这次成功的过程,让像我一样的小白能少走弯路。技术小白的成长之路--嘎嘎嘎
先放几个介绍非常清楚的其他博主的教程:
【Ubuntu18.04】Autoware安装_ubuntu18.04安装autoware-CSDN博客
ubuntu18.04安装Autoware1.14---GPU版 最全环境配置说明_autoware1.14安装教程-CSDN博客
简单总结一下:
安装Autoware有两种方式,分别是
- 源码安装与编译
- 在docker环境中安装Autoware镜像。
利用“源码安装与编译”相较而言更加复杂一些,安装前需要安装特别多的依赖包,比如说ROS、Qt5.14.2、opencv 、GCC、G++、Melodic,对Python环境还有非常严格的要求,比如说在退出anaconda的情况下使用python2.7环境。当然了,你以为解决上述问题就完了?无奈的是在安装完成这些依赖包以后,正式安装Autoware时还会产生各种报错问题,这也是给我整崩溃的导火索。一度准备去淘宝找别人安装了,咨询过程中我发现卖家都是通过这两种方式安装的,源码安装更贵一点,这当然是因为这种方法更难啊。这时我的救兵来了,我发现还可以通过“在docker环境中安装Autoware镜像”的简单方法(可以说,便宜有他便宜的道理啊,docker帮我们把环境都搭好了,直接用起来啊)。之前一直不用这种方法的原因是不太了解docker,docker怎么启动我都不太懂,更别说里面容器的使用方式了。
闲话少说,具体通过“在docker环境中安装Autoware镜像”并启动autoware容器的实操现在开始。
1,安装docker
参考笔者的博客即可:10分钟学会Docker的安装和使用_docker安装-CSDN博客
一些基本的docker操作:
# 启动docker
sudo systemctl start docker
# 查看镜像
docker images
# 查看容器
docker ps -a
# 启动容器 谨慎使用,每使用一次创建一个容器,不小心创建多个的话得删一会了
docker run -it <镜像名> /bin/bash
# 进入容器 想要进入之前启动过的容器的话可以使用的命令
docker attach <容器 ID>
# 退出容器
exit
# 暂停容器
docker stop <容器 ID>
# 启动一个已停止的容器
docker start <容器 ID>
docker restart <容器 ID>
# 删除容器 删除钱需要先暂停容器
docker rm -f <容器 ID>
注意:启动都可会出现服务器端启动失败的问题,即
使用如下方法解决即可:
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $XXX docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,taozi
sudo gpasswd -a $USER docker #将当前用户添加至docker用户组,其中$USER不用改
newgrp docker #更新docker用户组
2,安装docker-nvidia
运行以下指令:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
3,安装autoware的docker版本
git clone https://gitlab.com/autowarefoundation/autoware.ai/docker.git
cd docker/generic
./run.sh
注意:安装autoware过程中一定要启动docker。
安装完成后编译一下:
cd /home/autoware/Autoware (此目录为工程目录)
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release #可以忽略,因为docker版本已经编译好了。
编译后再“工程目录”下运行autoware:
source install/setup.bash
roslaunch runtime_manager runtime_manager.launch
注意:若遇到启动后没有弹出可视化界面,并报错:
No protocol specified
Unable to init server: Could not connect: Connection refused
解决方法:将roslaunch添加到访问控制列表即可,在新的命令框中输入以下命令:
xhost local:roslaunch
4,运行autoware时,复制主机数据到容器目录下
多写了这一步的原因是容器它有自己的环境,通过容器启动的autoware仅可以访问容器内部的目录及数据,这样的话没办法使用我准备好的数据。在使用./run.sh进入容器后,退出容器时,容器就会消失,通过docker ps -a就查不到了,所以我只能选择在运行autoware时,将主机目录的数据复制到容器目录下的这种方式。使用的命令如下:
docker cp /path/to/host/file.txt my-container:/path/to/container/
其中,“/path/to/host/file.txt”为主机目录下的文件,“/path/to/container/”为启动容器后容器的目录路径