1、方法一:使用小鱼的一键安装工具:
wget http://fishros.com/install -O fishros && . fishros
优点:快速、便捷
缺点:我在虚拟机上构建docker容器后可以顺利运行,并可以顺利运行rviz和和gazebo;但是在双系统的ubuntu18上构建docker容器后无法运行rviz和docker,估计是显卡驱动这一块的问题,折腾了一天,没解决,放弃!
2、方法二:使用wiki社区的方法
注意:这个是在nvidia-docker2上进行构建的
1)创建目录并构建Dockerfile文本
mkdir my_melodic_image
cd my_melodic_image
touch Dockerfile
2)进入Dockerfile文件,并将以下文本复制到Dockerfile
sudo gedit Dockerfile
FROM osrf/ros:melodic-desktop-full
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES \
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
3)在my_melodic_image文件夹下编译Dockerfile
cd my_melodic_image/
docker build -t my_melodic_image .
4)创建运行镜像的bash脚本并将以下文本复制到里面
sudo gedit run_my_image.bash
XAUTH=/tmp/.docker.xauth
if [ ! -f $XAUTH ]
then
xauth_list=$(xauth nlist :0 | sed -e 's/^..../ffff/')
if [ ! -z "$xauth_list" ]
then
echo $xauth_list | xauth -f $XAUTH nmerge -
else
touch $XAUTH
fi
chmod a+r $XAUTH
fi
docker run -it \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--env="XAUTHORITY=$XAUTH" \
--volume="$XAUTH:$XAUTH" \
--runtime=nvidia \
my_melodic_image \
bash
5)更改脚本权限,使脚本可以运行
chmod a+x run_my_image.bash
6)执行脚本
./run_my_image.bash
7)最后进入容器并运行rviz
roscore > /dev/null & rosrun rviz rviz
注意:wiki社区提供的方法有nvidia-docker1跟nvidia-docker2两种,可以根据自己电脑安装的nvidia-docker版本来选择对应的方法
我使用了这种方法,顺利在docker容器中运行rviz和gazebo
相关资料:
1)https://zhuanlan.zhihu.com/p/493274143
2)http://wiki.ros.org/docker/Tutorials/Hardware%20Acceleration#nvidia-docker2