文章目录
写在前面
自己的测试环境:
Ubuntu20.04,docker-27.3.1
1. 背景描述
由于测试ROS代码出现不同的环境,但是自己的电脑安装了 Ubuntu20.04,自己电脑只能安装 ROS-Noetic, 但是测试其他代码的时候需要 ROS-Humble。为了能够最快地搭建 ROS-Humble 的环境,这里借助 docker 实现。
docker 镜像网站中 Open Source Robotics Foundation 已经维护了多个版本的包含ros的系统:https://hub.docker.com/r/osrf/ros,可以根据需要查看
2. 安装步骤
首先确保在本机已经安装好 docker。
2.1 允许本地机器上的用户或进程连接到 X server
下述命令用于在 Linux 系统中修改 X server 的访问控制策略,允许本地机器上的用户或进程连接到 X server,从而允许它们显示图形界面。这个命令通常用于 Docker 容器与宿主机之间的图形界面共享。
sudo xhost +local:
2.2 拉取 docker 镜像
使用docker pull
命令拉取包含 ROS-Humble 的镜像:
docker pull osrf/ros:humble-desktop-full-jammy
等待拉取完毕之后,使用 docker images
验证该镜像是否拉取成功。如果出现类似于下述的结果,说明镜像拉取成功。
2.3 使用镜像osrf/ros:humble-desktop-full-jammy创建并运行容器
docker run -it --gpus all --env="NVIDIA_DRIVER_CAPABILITIES=all" --volume=/tmp/.X11-unix:/tmp/.X11-unix --volume=/dev/dri:/dev/dri --device=/dev/snd --device=/dev/dri --env="DISPLAY=$DISPLAY" --name=ros2_humble_test osrf/ros:humble-desktop-full-jammy
这条指令的解释:
这条 docker run 命令用于启动一个名为 melodic_test 的 Docker 容器,并且针对运行 ROS (Robot Operating System) 桌面完整版镜像进行了一些特定的配置,以支持 GPU 加速和图形界面显示。下面是每个参数的详细解释:
docker run:Docker 命令,用于创建并启动一个新的容器。
-it:两个参数,-i 表示交互模式,保持 STDIN 打开,即使不附加到容器终端;-t 分配一个伪终端,为容器提供一个文本命令行界面。
–gpus all:允许容器访问宿主机上所有的 GPU 设备。这通常需要 NVIDIA Container Toolkit 的支持。
–env=“NVIDIA_DRIVER_CAPABILITIES=all”:设置环境变量,指示 Docker 容器需要完整的 NVIDIA 驱动能力,这通常用于启用 GPU 加速。
–volume=/tmp/.X11-unix:/tmp/.X11-unix:挂载卷,将宿主机的 /tmp/.X11-unix 目录挂载到容器的相同路径,这个目录包含了 X11 服务器的 UNIX 域套接字,用于图形界面的通信。
–volume=/dev/dri:/dev/dri:挂载卷,将宿主机的 /dev/dri 目录挂载到容器的相同路径,这个目录包含了 Direct Rendering Infrastructure (DRI) 设备文件,用于 GPU 硬件的直接访问。
–device=/dev/snd:授予容器访问宿主机的 /dev/snd 设备的权限,这是声卡设备文件,用于音频输入输出。
–device=/dev/dri:再次授予容器访问宿主机的 /dev/dri 设备的权限。这个参数和上面的 --volume 参数一起确保容器可以访问 GPU 设备。
–env=“DISPLAY=$DISPLAY”:设置环境变量 DISPLAY,用于图形界面的显示。这里使用宿主机的 DISPLAY 环境变量值,使得容器内的图形界面程序可以在宿主机上显示。
–name=ros2_humble_test:为容器指定一个名称,这里名称为 ros2_humble_test。
osrf/ros:humble-desktop-full-jammy:指定要使用的 Docker 镜像,这里是 ROS (Robot Operating System) 的 humble 桌面完整版镜像。
在本机执行docker ps -a
验证是否创建成功,如果出现下列的输出,说明创建成功:
2.4 运行 rviz
以交互命令进入容器:
docker exec -it ros2_humble_test bash
在容器内部执行下列指令配置ros的环境变量,并运行rviz2
:
(注意:ROS2 不需要运行 roscore
,直接运行节点程序即可)
source ./ros_entrypoint.sh
rviz2
# 或者 ros2 run rviz2 rviz2
出现rviz界面即视为配置成功。
参考链接
[1] 深圳市进化图灵智能科技有限公司. Docker 安装ros 使用rviz 等等图形化程序 [EB/OL]. https://turingevo.blog.csdn.net/article/details/140425464, 2024-07-14/2024-10-13.