0


基于Docker的ROS开发

本文主要介绍如何使用Docker在Windows和Linux环境中部署并使用ROS,通过Docker Container运行ROS,可以方便我们在一个本地环境中运行多个ROS版本。
更多内容,访问专栏目录获取实时更新。

关于ROS的版本

参考ROS1 Distribution Wiki和ROS2 Distribution Wiki,推荐使用:

  • ROS1 Noetic 版本(2020/05发布,支持到2025/05)
  • ROS2 Humble版本(2022/05发布,支持到2027/05)

拉取ROS镜像并运行ROS容器

要求阅读者需要具有基础的Docker使用经验
关于ROS的镜像,可以访问Docker Hub查找对应版本的脚本,本文里我们以ROS1 Noetic和ROS2 Humble为例演示。

环境要求
在Windows环境中,需要安装Docker Desktop,并且可以通过命令行执行docker命令:
在这里插入图片描述
Linux环境使用的是Ubuntu 22,同样已经提前安装了docker:
在这里插入图片描述

拉取镜像
在Windows环境中,需要首先启动Docker Desktop。然后执行下面的脚本,可以拉取ROS1和ROS2的镜像文件:

docker pull osrf/ros:noetic-desktop
docker pull osrf/ros:humble-desktop

执行完成后,通过指令查看已拉取的镜像文件:

docker images

在这里插入图片描述
运行容器

docker run --name <container-name> -it <image-name:tag>

上面的指令是运行一个容器,容器名为’container-name’的替换内容,使用’image-name:tag’指定的镜像文件,并运行在交互模式下(-it),指令示例:

docker run --name noetic-gui -it osrf:noetic-desktop

指令运行以后,命令行将会进行到该容器的交互模式下,在Docker Desktop中,能看到当前运行的容器:
在这里插入图片描述
在这里插入图片描述

运行ROS

当前我们已经启动了ROS Noetic的Docker容器,并进入了交互模式,在命令行中执行

roscore

来启动ROS Master (仅针对ROS1版本需要)
在这里插入图片描述
如果你也在命令行中看到了上述的内容,说明ROS1运行成功。
Windows中启动另一个命令行,执行下面的命令,进入到一个已启动容器的交互模式:

docker exec -it <container-name> bash

在这里插入图片描述
然后执行:

source /opt/ros/noetic/setup.bash
printenv | grep ROS
rostopic list

第一条指令在每启动一个shell时都需要执行一下(除非你将该指令加入到了.bashrc文件中),它能配置你的shell让你获取到ROS的程序和帮助这些程序找到依赖的包。
第二,三条指令分别是查看已安装ROS的环境变量和当前的ROS Topic列表,如果已正确完成了上述步骤,你可以看到下图类似的内容:
在这里插入图片描述

Docker容器中的GUI程序

如果我们运行的ROS程序需要打开一些用户交互界面,比如Gazebo,RViz等,在Docker容器中要怎么办呢?

以经典的小乌龟(turtlesim)为例,演示如何在docker容器中使用GUI。

rosrun turtlesim turtlesim_node

我相信执行完上面的指令后你将会得到下面的错误:
在这里插入图片描述
这时就需要我们安装XLaunch来实现界面的显示,你可以访问Xming网站获取,或通过SourceForge下载。在安装时基本不许要任何配置,仅注意同时安装XLaunch即可。
在这里插入图片描述
安装完成后,启动XLaunch,只需要在下图标注的步骤修改值为0,其他一直点击下一步直至结束在这里插入图片描述
这时在电脑的状态栏里你应该能够看到启动的XServer.
在这里插入图片描述
确保XServer正常运行,这时再重新运行Noetic的容器,不过通过下面的指令运行:

docker run --name noetic-gui -e DISPLAY=host.docker.internal:0.0 -it osrf/ros:noetic-desktop

然后运行

roscore

并在另一个命令行中重复之前的命令(不要忘记source一下),启动turtlesim

rosrun turtlesim turtlesim_node

在这里插入图片描述
我们的小乌龟就正常的显示在桌面上了。
启动另一个命令行,我们来通过键盘上下左右控制小乌龟:

rosrun turtlesim turtle_teleop_key

在这里插入图片描述
在Ubuntu中,步骤基本类似,在启动ROS时,建议通过一个bash文件来启动容器,run_noetic_gui.bash:

xhost local:root

XAUTH=/tmp/.docker.xauth

docker run -it \
    --name=noetic-gui \
    --env="DISPLAY=$DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    --env="XAUTHORITY=$XAUTH" \
    --volume="$XAUTH:$XAUTH" \
    --net=host \
    --privileged \
    osrf/ros:noetic-desktop \
    bash

echo "Done."

如何访问Docker容器中的文件

在之后的开发中,我们需要创建工作空间并创建自己的工程项目,而当前的ROS运行在Docker容器中,要怎样访问的到呢。

这里推荐使用VisualStudio Code,并安装插件Dev Container
在这里插入图片描述
成功安装了插件后,我们就可以通过VS Code打开一个Docker Container的文件目录啦。
在这里插入图片描述
在这里插入图片描述
至此,我们成功的在Windows或Ubuntu环境下,通过Docker中运行了ROS Noetic,并且能够显示用户界面,并且通过VS Code访问容器中的文件和工程。

如有错误,欢迎留言或来信指正:[email protected]
标签: ros docker

本文转载自: https://blog.csdn.net/hbin5110209161/article/details/139226112
版权归原作者 AI-driven Robotics 所有, 如有侵权,请联系我们删除。

“基于Docker的ROS开发”的评论:

还没有评论