Docker容器内安装ROS以及gazebo
目前ROS并没有与Ubuntu23.10.1适配的版本,我们采用Docker进行安装,理论上说还存在两种解决办法分别是:手动编译安装,换系统。这两个都比较麻烦,我们先采用Docker安装进行。
Docker介绍:Docker
是一个开源的平台,用于开发、交付和运行应用程序。它利用容器化技术,使开发人员能够将应用程序及其依赖项打包成一个独立的可移植容器,从而实现快速部署、可靠性和跨平台性。以下是
Docker 的一些关键特性和概念: 容器化技术:Docker
使用容器化技术,通过容器将应用程序及其所有依赖项(例如代码、运行时、系统工具、系统库等)打包在一起。每个容器都是一个独立的、轻量级的运行环境,与主机和其他容器隔离。
镜像:Docker 镜像是容器的构建模块,包含应用程序运行所需的所有文件和设置。镜像可以被共享、存储和重新使用。用户可以使用
Dockerfile 来定义自定义镜像的构建过程。 容器:容器是 Docker
镜像的实例化对象,是一个运行时环境,其中可以运行应用程序。容器可以快速启动、停止、暂停和销毁,具有良好的可移植性。 Docker
引擎:Docker 引擎是 Docker
的核心组件,负责创建和管理容器。它包括一个守护进程(dockerd)和一组用于与守护进程交互的命令行工具(docker 命令)。
Docker Hub:Docker Hub 是 Docker 官方提供的公共镜像仓库,用户可以在其中找到和分享 Docker
镜像。它还提供了许多官方和社区维护的镜像,用户可以直接使用。 Docker Compose:Docker Compose
是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML
文件描述应用程序的服务、网络、卷等,并使用单个命令启动、停止和管理整个应用程序。 Docker Swarm:Docker Swarm 是
Docker 官方提供的容器编排和集群管理工具,用于在多个 Docker 主机上自动部署、扩展和管理容器化应用程序。
Docker安装步骤:
1.更新软件包索引:
`sudo apt-get update`
2.安装依赖包:
`sudo apt-get install apt-transport-https ca-certificates curl software-properties-common`
3.添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.添加 Docker 存储库:向系统中添加 Docker 的 APT 存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5.更新软件包索引:再次更新软件包索引以包含 Docker 存储库中的最新软件包:
sudo apt-get update
6.安装 Docker CE:
sudo apt-get install docker-ce
7.验证安装:
sudo docker --version
8.设置 Docker 用户权限(可选):如果不想每次运行 Docker 命令时都使用 sudo,可以将当前用户添加到 Docker 组中:
sudo usermod -aG docker ${USER}
(参考:https://blog.csdn.net/chunchun2021/article/details/134470202?spm=1001.2014.3001.5506
)
安装Portainer(选装):Portainer 个可视化的界面其实和ROS关系并不大,但是使用起来非常的方便,可以让我们更快速的利用Docker学习ROS,而不是要完整的学习完Docker的繁杂的命令再学习ROS。
(参考文档:https://www.hangge.com/blog/cache/detail_2597.html )
sudo systemctl restart docker
#下载Portainer的Docker镜像
sudo docker pull portainer/portainer
#运行Portainer容器;
sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
访问本机端口:设置的是9000,进入http://localhost:9000
在Docker中安装ROS步骤:
- 拉取 ROS Noetic Docker 镜像:
可以查看目前有哪些公共镜像:
sudo docker search ros
下载镜像:
sudo docker pull osrf/ros:noetic-desktop-full
- 编写Dockerfile,以便安装依赖环境:
mkdir ltx_docker
cd ltx_docker
gedit Dockerfile
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
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:用于在容器内编辑文件的文本编辑器。
3.构建容器:
sudo docker build -t ltx_docker . (有个点表示当前目录)
4.进入容器后执行:
###在运行容器后输入下面的命令,然后任意安装
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
sudo apt update
sudo apt install gedit
- 启动容器:
sudo xhost +local: (使用gazebo前需输入,若不输入会导致无权限)
sudo docker run -it --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix --env="DISPLAY=$DISPLAY" --name=ltx_docker osrf/ros:noetic-desktop-full /bin/bash
-
运行
./ros_entrypoint.sh
-
输入
roscore
启动
8.若需要开启gazebo则需要重新开启一个终端
sudo docker ps
###找到运行的rocker容器的id
####进入容器
sudo docker exec -it <id> /bin/bash
source /opt/ros/noetic/setup.bash
输入gazebo启动
9.使用vscode 插件 Dev Container 对容器进行开发
在vscode 进行安装Dev Container,并选择附加到正在运行的容器(需提前运行)