• 基于Docker的ROS开发


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

    关于ROS的版本

    参考ROS1 Distribution WikiROS2 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  -it 
    

    上面的指令是运行一个容器,容器名为’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  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访问容器中的文件和工程。

    如有错误,欢迎留言或来信指正:hbin6358@163.com
    
  • 相关阅读:
    每日4道算法题——第005天
    Oracle day9
    如何避免Facebook账号被封,要注意哪些地方?
    27、用户操作srv、web服务实现
    nodejs+vue游戏测评交流系统elementui
    pdf增强插件 Enfocus PitStop Pro 2022 mac中文版功能介绍
    低代码开发项目
    【OFDM通信】基于深度学习的OFDM系统信号检测附matlab代码
    复现一个循环问题以及两个循环问题
    React项目——withTranslation (HOC) 高阶组件使用ref遇到的问题
  • 原文地址:https://blog.csdn.net/hbin5110209161/article/details/139226112