• ubuntu20.04在docker下运行ros-noetic进行开发


    经常折腾虚拟机各双系统 , 想着不如把docker利用起来,下面算是一个初学者使用docker运行ros的记录:

    1. 安装

    使用官方安装脚本自动安装

     curl -fsSL https://test.docker.com -o test-docker.sh
     sudo sh test-docker.sh
    
    • 1
    • 2

    验证是否安装成功

    docker version
    
    • 1

    Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组

    sudo usermod -aG docker $USER
    
    • 1

    Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动

    # service 命令的用法
    sudo service docker start
    # systemctl 命令的用法
    sudo systemctl start docker
    
    • 1
    • 2
    • 3
    • 4

    2. 在docker中运行ros-noetic

    [参考] (https://blog.csdn.net/qq_40695642/article/details/117607446)

    2.1 安装Portainer

    Portainer 个可视化的界面其实和ROS关系并不大,但是使用起来非常的方便,可以让我们更快速的利用Docker学习ROS,而不是要完整的学习完Docker的繁杂的命令再学习ROS。

    sudo systemctl restart docker
    sudo docker pull portainer/portainer
    sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
    
    • 1
    • 2
    • 3

    (执行上面的命令如果有报错的话 , 建议 魔法先关闭 )

    2.2 如果出现超时什么的 重启容器

    使用sudo docker ps来查看正在运行的容器

    sudo docker ps
    
    • 1

    该命令将列出所有正在运行的容器。
    运行以下命令停止 Portainer 容器:

    sudo docker stop <container_id>
    
    • 1

    替换为实际的 Portainer 容器的 ID 或名称
    使用以下命令再次启动 Portainer 容器:

    sudo docker start <container_id>
    
    • 1

    同样,将 替换为 Portainer 容器的 ID 或名称。
    等待一段时间,让容器重新启动

    2.3 访问本机9000端口

    运行上述命令等待执行成功后,放行防火墙,访问本机的9000端口进入Portainer,创建账号密码之后即可登录到控制台。
    本机的9000端口: http://localhost:9000
    在这里我们可以查看到运行容器内部的信息,也可以快速的删除废弃的容器及镜像。也可以构建虚拟网络实现容器间隔离
    Portainer 学习参考: https://www.hangge.com/blog/cache/detail_2597.html

    2.2 在docker中运行ros-noetic

    首先我们可以使用

    sudo docker search ros
    
    • 1

    来查看目前docker hub上有哪些大神上传的公共镜像

    选择pull ros-neotic的 docker 镜像

    sudo docker pull osrf/ros:noetic-desktop-full
    
    • 1

    在这里插入图片描述
    接下来我们需要写一个Dockerfile,来帮我们完成一些简单的环境依赖安装工作:

    mkdir cwc_docker
    cd cwc_docker
    gedit Dockerfile
    
    • 1
    • 2
    • 3

    下面是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
    
    RUN apt-get update && \
        apt-get install -y \
        build-essential \
        libgl1-mesa-dev \
        libglew-dev \
        libsdl2-dev \
        libsdl2-image-dev \
        libglm-dev \
        libfreetype6-dev \
        libglfw3-dev \
        libglfw3 \
        libglu1-mesa-dev \
        freeglut3-dev \
        gedit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    接下来使用下面的命令来构建容器:(同样 我关闭了我的魔法)

    sudo docker build -t cwc_docker . 
    
    • 1

    在这里插入图片描述以下是 Dockerfile 的具体功能说明:

    设置环境变量 NVIDIA_VISIBLE_DEVICES 和 NVIDIA_DRIVER_CAPABILITIES,用于配置 NVIDIA 设备的可见性和驱动程序的能力。
    使用 apt-get 更新软件包列表,并安装以下软件包:
        build-essential:包含了 gcc 和 make 等基本的构建工具。
        libgl1-mesa-dev:Mesa OpenGL 库的开发文件。
        libglew-dev:GLEW 库的开发文件。
        libsdl2-dev:SDL2 库的开发文件。
        libsdl2-image-dev:SDL2_image 库的开发文件。
        libglm-dev:GLM 库的开发文件。
        libfreetype6-dev:FreeType 库的开发文件。
        libglfw3-dev 和 libglfw3:GLFW 库的开发文件和运行时库。
        libglu1-mesa-dev:Mesa GLU 库的开发文件。
        freeglut3-dev:FreeGLUT 库的开发文件。
        gedit:用于在容器内编辑文件的文本编辑器。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这些软件包通常用于图形编程和开发。使用该 Dockerfile 构建镜像后,可以将其作为基础镜像来运行具备图形能力的 ROS 应用程序。
    如果上面Dockerfile的下面安装部分安装不成功的话也没有关系,删除RUN节,只剩下:

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    然后继续进入容器再安装:

    ###在运行容器后输入下面的命令,然后任意安装
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
    sudo apt update
    sudo apt install gedit
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    经过漫长的等待 ,容器构建成功, 下面启动容器

    sudo xhost +local:
    sudo docker run -it --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY"  --name=rocker osrf/ros:noetic-desktop-full  /bin/bash
    
    • 1
    • 2

    运行上述命令即可进入容器的内部:
    在这里插入图片描述

    在容器内部有一个ros_entrypoint.sh的文件,./ros_entrypoint.sh执行这个脚本

    然后就可以正常使用roscore和rviz了
    在这里插入图片描述

    在使用rviz的时候我们当然需要再开启一个终端,那么对应的我们要进入启动roscore的这个容器

    sudo docker ps
    ###找到运行的rocker容器的id
    
    ####进入容器
    sudo docker exec -it dc3224c8d60e /bin/bash
    
    source /opt/ros/noetic/setup.bash
    
    rviz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    即打开了rviz
    在这里插入图片描述启动小乌龟
    每次开启终端不知道为什么 都要

    source  /opt/ros/noetic/setup.bash
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    Linux系统无法发送组播消息
    Tensorflow2.x版本initializer正态化变量输出函数
    Ubuntu终端指令
    ✅技术社区项目—JWT身份验证
    【用unity实现100个游戏之7】从零开始制作一个仿杀戮尖塔卡牌回合制游戏
    移远_M25_通话音量_DTMF测试
    AI工具在工作中的“大作用”
    Kotlin Files readAllBytes readAllLines readString
    sleep和wait的区别
    java基础 韩顺平老师的 面向对象(中级) 自己记的部分笔记
  • 原文地址:https://blog.csdn.net/chunchun2021/article/details/134470202