docker容器中安装ROS1

docker容器中安装ROS1

docker是一种虚拟化容器技术。docker基于镜像,可以秒级启动各种容器,每一种容器都是一个完整的运行环境,容器之间互相隔离。

一、安装docker

建议直接使用小鱼的一键安装

执行一键安装命令之后,会出现选择安装选项,输入8选择安装docker。安装完成之后,可以输入

bash 复制代码
docker --version

查看docker版本。

启动docker守护进程

bash 复制代码
# 启动 Docker 守护进程
sudo systemctl start docker

验证docker是否守护进程成功

bash 复制代码
sudo systemctl status docker

若输出包含activate(running)(绿色字体),说明docker守护进程正常运行

二、拉取ROS镜像

我拉取的是noetic版本的

bash 复制代码
sudo docker pull osrf/ros:noetic-desktop-full

拉取镜像时出现报错:Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
原因:docker的官方源国内封了,导致无法拉取到镜像。

拉取ROS镜像一直超时

配置加速地址:适用于Ubuntu 16.04+、Debian 8+、CentOS 7+

使用以下命令设置registry mirror:但是需要重启docker服务

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

查看镜像名:

bash 复制代码
sudo docker images

会出现:

三、创建+启动ROS容器

<your_name>:创建容器的名字

<your_username>:当前用户名

bash 复制代码
sudo docker run -dit \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
--name=<your_name> \
-v /dev:/dev \
-v /home/<your_username>:/home/<your_username> \
-v /tmp/.X11-unix:/tmp/.X11-unix  \
-e DISPLAY=unix$DISPLAY \
-w /home/<your_username> \
osrf/ros:noetic-desktop-full
Tip1:上一行对应自己的镜像名,需要修改,通过sudo docker images查看
Tip2: 后面可以跟一些容器启动后想运行的命令(如果有命令上一行最后别忘了加换行符)

# 可选参数:
--privileged  \
--net=host \
--restart=xxx \

由于我使用的是虚拟机,没有GPU,因此我输入的是:

bash 复制代码
sudo docker run -dit \
--name=ros1_noetic_livox \
--privileged \
--net=host \
--restart=unless-stopped \
-v /dev:/dev \
-v /home/reenrr:/home/reenrr \
-v /tmp/.X11-unix:/tmp/.X11-unix  \
-e DISPLAY=unix$DISPLAY \
-w /home/reenrr \
osrf/ros:noetic-desktop-full

这是创建和启动一体化的docker命令。可通过:

bash 复制代码
sudo docker ps

查看是否启动了该容器,若能看到 ros1_noetic_livox 对应的记录,状态为 Up,说明容器启动成功。

如果是已有容器了,只启动容器的话,输入:

bash 复制代码
sudo docker start 容器id/名称

四、使用容器

进入容器:

bash 复制代码
sudo docker exec -it 容器名称 /bin/bash
# (输入 exit 可以退出容器)

验证ROS环境

进入容器后,执行以下命令激活ROS并启动核心节点:

bash 复制代码
source /opt/ros/noetic/setup.bash
roscore

保持roscore运行,这个终端窗口不要关闭(roscore是ROS节点通信的核心,关闭后其他节点无法正常工作),后续操作打开新的终端。

打开两个新的终端,都需要进入容器,并且激活ROS,然后可以分别输入以下命令:

bash 复制代码
rosrun turtlesim turtlesim_node
bash 复制代码
rosrun turtlesim turtle_teleop_key

就可以实现ROS的小乌龟操作了

相关推荐
Leinwin1 天前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382501 天前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇1 天前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7591 天前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣1 天前
智能体选型实战指南
运维·人工智能
yy55271 天前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 天前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔1 天前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密1 天前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20151 天前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑