使用docker进行ros2开发

1、运行小乌龟

docker的安装可以参考: [linux小白] Ubuntu22安装Docker
避免每次输入docker命令都要用sudo: sudo usermod -aG docker $USER
如果出现拉取镜像失败Error response from daemon 参考 Docker拉取镜像报错:Error response from daemon,问题解决,记住要重启电脑否则可能暂时不会生效。

首先拉取基础镜像:

docker pull osrf/ros:humble-desktop-full

用docker run 基于镜像创建容器并且运行:

docker run -it --name ros2-humble --net=host --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" osrf/ros:humble-desktop-full /bin/bash
docker run -it --name ros2-humble --net=host --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" -v /home/lwh/code:/home/lwh/code osrf/ros:humble-desktop-full /bin/bash

设置环境变量:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

启动小乌龟…

ros2 run turtlesim turtlesim_node

接着再开启一个终端,此时因为容器已经运行,所以用docker start开启容器:

docker start ros2-humble

进入该容器的bash终端:

docker exec -it ros2-humble /bin/bash

启动键盘控制:

ros2 run turtlesim turtle_teleop_key

在这里插入图片描述

这里再介绍一下正在运行的容器如何停止以及删除,这个实际操作中肯定能用得到。
首先通过下述命令查看当前存在哪些容器:

docker ps -a				// 查看有哪些docker容器,正在运行+历史运行
docker ps					// 查看正在运行的容器

在这里插入图片描述接着:

docker stop containerId			// 停止容器
docker rm containerId			// 删除一个已停止的容器
docker rm -f containerId		// 删除一个正在运行的容器,否则会占内存 -f强制

在这里插入图片描述
如果出现下面问题:

root@lwh-Lenovo-XiaoXin-CHAO7000-13:/code/robot_ws# ros2 run turtlesim turtlesim_node 
No protocol specified
qt.qpa.xcb: could not connect to display :0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

[ros2run]: Aborted

请退出docker 执行

xhost +local:`docker inspect --format='{{ .Config.Hostname }}' ros2-humble`

如果执行这条命令出现没有权限的问题,请执行,并且重启动电脑。
vscode的dev-container 也可能出现连接不到docker容器的情况,同样这样处理。

2、载入基础工程

将本地的基础工程导入到容器中,为开发做准备…

docker cp local_path containerId:file_path			// host到docker

在这里插入图片描述接着尝试编译一下…

在这里插入图片描述编译不通过,这是很正常的,这只是一个初始的容器,接下来我们需要自行安装依赖。

3、安装依赖

安装依赖的同时也需要把dockerfile写一下,安装一个依赖补充一句dockerfile,dockerfile的编写应该持续到整个工程部署运行结束。

todo:
为什么在docker容器中开发,使用vscode(dev-container插件)编辑代码时,一旦代码编译成功再继续修改代码就没用了,cmake将不会用修改的代码进行编译,但是如果用vim编辑代码的话就不会有这个问题。

### 使用 Docker 安装 ROS 2 的教程 以下是基于 Mac M1 和通用 Linux 平台的 Docker 安装 ROS 2 的方法: #### 准备工作 确保已安装最新版本的 Docker Desktop,并启用对 Apple Silicon (M1 芯片) 的支持[^1]。对于其他平台,只需确认 Docker 已正确配置。 #### 创建自定义 Dockerfile 为了适配 ROS 2 版本的需求,可以创建一个定制化的 `Dockerfile` 文件来构建环境。以下是一个适用于 Foxy 版本的示例文件: ```dockerfile FROM osrf/ros:foxy-desktop # 设置时区和其他基础设置 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y --no-install-recommends tzdata locales && \ ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime && dpkg-reconfigure -f noninteractive tzdata # 配置 ROS 环境变量 ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 # 可选:预加载一些常用工具包 RUN apt-get update && \ apt-get install -y python3-colcon-common-extensions python3-rosdep ros-foxy-rviz2 && \ rm -rf /var/lib/apt/lists/* CMD ["bash"] ``` 此脚本会拉取官方的 ROS Foxy 镜像作为基底,并额外安装 RViz2 等必要组件。 #### 构建与运行容器 保存上述内容到名为 `Dockerfile` 的文件中,在同一目录下执行如下命令完成镜像制作: ```bash docker build -t my_ros2_foxy . ``` 之后可以通过下面的方式启动交互式的终端界面访问该开发环境: ```bash docker run -it --rm --name ros2_container my_ros2_foxy bash ``` 如果目标设备为 ARM64架构(如苹果M系列芯片),则需特别注意所选用的基础镜像是否兼容ARM处理器类型[^2]。通常情况下,建议查阅最新的官方文档或者社区维护的相关资源链接获取最匹配的支持版本信息。 #### 启动 RViz2 进入容器内部后可以直接调用 rviz2 命令开启图形化界面用于机器人仿真展示等功能测试。 ```bash rviz2 ``` 以上过程涵盖了从准备阶段直至实际操作的具体指导说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值