由于工作需要需要学习一下autoware这个框架,但是在安装的时候遇到了数不进的坑,网上的教程基本都跑不起来。自己搞了好半天,终于跑起了个demo,记录一下踩坑的过程。
本次要安装的是Autoware.ai这个版本,他是基于ROS1 Melodic的,需要Ubuntu 18.04的环境,由于我的系统是Ubuntu 20.04,因此需要在Docker中运行ROS1 Melodic环境。
一、安装Docker
首先验证系统上没有安装旧版本或不兼容版本的Docker
sudo apt-get remove docker docker-engine docker.io
看到以下提示就没问题
继续安装一些依赖:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
然后设置密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
接下来设置软件源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
接下来就可以安装Docker了
sudo apt-get install docker-ce
二、安装docker-nvidia
如果电脑没有英伟达独显则跳过这一步。有独显的话先确保已经安装了nvidia显卡驱动,输入nvidia-smi即可确定是否已经成功安装。
确保有nvidia驱动后,安装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 install -y nvidia-docker2
三、安装Autoware Docker镜像
先git clone一下源码
git clone https://gitlab.com/autowarefoundation/autoware.ai/docker.git
cd docker/generic
sudo ./run.sh
如果没有独显没有装docker-nvidia 会显示以下报错:
使用如下命令关闭cuda的支持就可以了:
sudo ./run.sh -c off
如果报以下错误“usermod: UID '0' already exists”则需要修改run.sh,加入以下语句
USER_ID="$(id -u)"
if [ USER_ID != 0 ]; then
USER_ID=1000;
else
USER_ID=${USER_ID};
fi
加入的位置如下图中的红色框所示
四、编译
在docker环境下输入以下指令:
cd /home/autoware/Autoware
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
编译需要耐心等一段时间,视电脑性能而定。
五、下载rosbag数据集
编译完成后就可以运行官方的rosbag实例,先要下载稍后会用到的测试数据:
wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_data.tar.gz
wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_150324.tar.gz
如果无法科学上网下载太慢的话,可通过以下百度网盘下载
链接:https://pan.baidu.com/s/1lg0lnjVwmdOb8r9U_bEsXA
提取码:i0v5
我看网上其他教程都是下载完后用docker cp命令从主机拷贝到docker镜像中,然后在docker中解压,我一开始就是这样干的,但是后来再打开docker后发现拷贝过来解压的文件都不见了!后来才了解到Docker 的容器使用容器层文件系统,退出容器后文件层会被删除和清空,重启docker后,之前运行的容器都会退出,容器层文件系统被清空,docker cp 拷贝的文件就都丢失了。
其实运行run.sh后,安装完会在主机目录下生成shared_dir文件夹,方便传文件到docker,其实这是通过挂载宿主机目录的方式实现数据的永久保存。当然你也可以自己挂载一个目录,在run.sh脚本里找到这几行:
VOLUMES="--volume=$XSOCK:$XSOCK:rw
--volume=$XAUTH:$XAUTH:rw
--volume=$SHARED_HOST_DIR:$SHARED_DOCKER_DIR:rw
在其下面加入你要挂载的目录,前面是你主机文件夹的路径,冒号后面的是docker里的路径。
-v /home/leo/autoware_rosbag:/home/autoware/rosbag" # 加入挂载数据目录
解压命令为:
tar zxfv sample_moriyama_150324.tar.gz
tar zxfv sample_moriyama_data.tar.gz
六、运行demo实例
在docker中进入Autoware文件夹下然后运行
source install/setup.bash
roslaunch runtime_manager runtime_manager.launch
运行后可显示出可视化配置界面
然后网上的教程都是直接加载bag与launch文件运行,但实际上遇到很多问题导致这样跑不起来。
于是在autoware项目issue里看到了一个正确的配置顺序。
注意Point Cloud与Vctor Map要鼠标左键拖住全选,这两个最好最后等rviz加载出来后再点击加载。
按顺序点击完后,再点击“Pause”继续播放rosbag包,一开始车辆会乱飘,这是ndt在匹配,等ndt点云匹配完车辆就会在道路上正常行驶
你好,没有什么办法能够让他运行之后不自动删除吗
我文章i了应该有写,你找一下有没有shared_dir这个文件夹,放这个文件夹里就不会被删除了,或者你自己挂载一个目录