基于docker一键安装ros环境(gazebo&rviz)

举报
Hermit_Rabbit 发表于 2022/08/04 11:05:10 2022/08/04
【摘要】 docker作为一种开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。之前网上存在一些使用docker去安装ros的相关教程。但是目前网上的教程都无法装载GAZEBO RVIZ等常用的一些软件。在做纯编译开发时,我们不需要对CPP/Python代码进行编译,这时候能够一键安装环境的Docker就显得十分有必要,这样的方式不会考虑环境配置的差异,而且能够快速的搭建好环境。...

docker作为一种开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。之前网上存在一些使用docker去安装ros的相关教程。但是目前网上的教程都无法装载GAZEBO RVIZ等常用的一些软件。

在做纯编译开发时,我们不需要对CPP/Python代码进行编译,这时候能够一键安装环境的Docker就显得十分有必要,这样的方式不会考虑环境配置的差异,而且能够快速的搭建好环境。
在这里插入图片描述

创建python文件来运行程序

build

import argparse
import docker_utils as ut
import os

def main():
    # Parse arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('-g', '--gazebo', dest="gazebo_version", default="9")
    parser.add_argument('-r1', '--ros1', dest="ros1_version", default="melodic")
    parser.add_argument('-r2', '--ros2', dest="ros2_version", default="")
    args = parser.parse_args()

    gz_version_tag = '9'
    # If ROS 2 is not defined, ROS 1 is compiled
    if args.ros2_version == "":
        # Compile ROS 1
        ros_version_name = 'ros1'
        ros_version_tag  = args.ros1_version
        gz_version_tag = args.gazebo_version
    else:
        # Compile ROS 2
        ros_version_name = 'ros2'
        ros_version_tag  = args.ros2_version
        if not (args.gazebo_version == "9"):
            print("Gazebo 9 is only supported. Using this version by default.")

    # Select image to compile
    image_name = '{}'.format(ros_version_name)

    # Build selected image
    command = 'cd {} && ROS_VERSION={} GZ_VERSION={} make {}'.format(
            ut.get_repo_root(), ros_version_tag, gz_version_tag, image_name)
    ut.run_command(command)

if __name__ == '__main__':
    main()

该文件是我们启动安装的入口,在输入./build后则执行到安装ros的指令中。
ros1/Dockfile

FROM ubuntu_18

ARG ros1
ENV ROS1_DISTRO ${ros1}
ARG gz
ENV GZ_VERSION ${gz}
ENV USER docker_ros

USER root

# Setup environment
RUN apt-get update && apt-get install -y locales
RUN locale-gen en_US.UTF-8
ENV \
  LANG=en_US.UTF-8 \
  DEBIAN_FRONTEND=noninteractive \
  TERM=xterm

RUN apt-get remove -y --purge xserver-xorg

RUN apt-get update && \
    apt-get install --no-install-recommends -y \
    gnupg2 \
    mesa-utils \
    sudo \
    tmux \
    wget \
    xserver-xorg

RUN dpkg-reconfigure xserver-xorg

# Add ROS keys
# https://discourse.ros.org/t/new-gpg-keys-deployed-for-packages-ros-org/9454
RUN echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list
RUN apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# Add Gazebo keys
RUN echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" > /etc/apt/sources.list.d/gazebo-stable.list
RUN wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

# Install bootstrap tools
RUN apt-get update && apt-get install --no-install-recommends -y \
    python-rosdep \
    python-rosinstall

# Install ROS packages
RUN apt-get update && \
    apt-get install -y \
    ros-${ROS1_DISTRO}-desktop

RUN apt-get update && \
    apt-get install -y \
    gazebo${GZ_VERSION} \
    libgazebo${GZ_VERSION}-dev

# Install dependencies
# https://unix.stackexchange.com/a/391112
COPY packages.txt packages.txt
RUN apt-get update && \
    xargs -a packages.txt apt-get install -y

# ==================

RUN rosdep init
USER $USER
RUN echo ". /opt/ros/${ROS1_DISTRO}/setup.bash" >> /home/${USER}/.bashrc
RUN rosdep update
USER root

# Workspace
RUN mkdir -p /catkin_ws/src/ && \
    chown -R $USER /catkin_ws

WORKDIR /catkin_ws/

RUN usermod -a -G video $USER
RUN usermod -a -G dialout $USER

RUN apt-get update

USER $USER

该文件主要是Docker安装的指令合集,通过build文件传入基础的ros版本以及gazebo版本来方便动态安装管理。

ros1/packages.txt

…详情请参考古月居文章

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。