docker上运行ros

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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐