openstlinux上利用docker部署ros2humble

张开发
2026/4/7 7:40:10 15 分钟阅读

分享文章

openstlinux上利用docker部署ros2humble
STM32MP257F-DK 开发报告从零部署 OpenSTLinux 与 Docker 容器化 ROS 2 Humble1. 项目背景与硬件环境硬件平台STM32MP257F-DK (双核 Cortex-A35, 4GB RAM, 带 NPU)。存储介质32GB MicroSD 卡系统自动分区3.8GB 根分区 24GB 用户数据分区。操作系统OpenSTLinux (Starter Package v5.0.x / 内核 6.6 / 带 Weston 图形界面)。目标环境在 Docker 容器内运行完整的 ROS 2 Humble (Ubuntu 22.04 环境)。2. 关键操作步骤回顾第一阶段系统烧录与物理启动系统烧录使用STM32CubeProgrammer加载FlashLayout_sdcard_...tsv文件通过 USB-DRD 接口将镜像写入 MicroSD 卡。物理拨码开关 (SW1)烧录模式0000(全部 OFF)。SD 卡启动模式1000(仅第 1 位 ON拨向数字侧)。串口调试使用电脑连接板载 ST-LINK 接口通过sudo minicom -D /dev/ttyACM0 -b 115200观察系统启动日志。第二阶段手动部署 Docker 引擎 (由于系统无 apt)由于 OpenSTLinux 默认不带 Docker 且没有在线软件仓库我们采用了静态二进制部署方案环境检查确认内核已开启CONFIG_NAMESPACESy和Cgroups支持。二进制安装下载docker-static-aarch64.tgz解压并拷贝二进制文件至/usr/bin/。存储重定向原因根分区/仅 3GB 空间无法容纳 ROS 2 镜像。解决在 24GB 大分区创建目录mkdir -p /usr/local/docker。启动运行dockerd --data-root /usr/local/docker --storage-driveroverlay2 。第三阶段ROS 2 Humble 镜像“搬运”与运行架构对齐在 Ubuntu 电脑上使用docker pull --platform linux/arm64 arm64v8/ros:humble-ros-base下载镜像。离线传输使用docker save打包镜像为.tar文件通过scp拷贝至板子再在板子上执行docker load。环境修复解决stat /run/user/1000报错通过export XDG_RUNTIME_DIR/run/user/0修正 root 运行路径。成功运行进入容器并执行ros2 run demo_nodes_cpp talker验证通讯。3. 常见报错与故障排除 (Troubleshooting)报错信息根本原因分析最终解决方案mmc device 0 not found板子未识别 SD 卡或供电不足。确保 SD 卡插紧有咔哒声外接5V/3A电源。ERROR: No EFI system partition拨码开关不对板子尝试从 eMMC 启动。修正拨码开关为1000(SD 启动模式)。GnuTLS: Error in the pull function板子时间重置且缺少根证书。手动date -s 2024-xx-xx或使用--no-check-certificate。stat /run/user/1000: no such...Weston 环境残留变量与 root 身份冲突。执行export XDG_RUNTIME_DIR/run/user/0并mkdir该目录。no matching manifest for linux/amd64电脑与板子 CPU 架构不匹配。docker pull时显式指定--platform linux/arm64。Is the docker daemon running?dockerd进程崩溃或未启动。检查/usr/local/docker路径并前台运行dockerd查看具体报错。4. 重点下次重启后的“秒回”流程由于该开发环境为手动部署板子重启后请务必按照以下顺序操作即可快速进入 ROS 2步骤 1启动 Docker 引擎 (开机点火)杀掉可能残留的进程并后台启动killall dockerd 2/dev/nullnohup dockerd --data-root /usr/local/docker --storage-driveroverlay2 /var/log/docker.log 21 步骤 2修正运行环境 (环境修复)准备 root 的运行时目录并重定向变量mkdir -p /run/user/0chmod 700 /run/user/0export XDG_RUNTIME_DIR/run/user/0步骤 3启动并进入 ROS 2 容器 (瞬间穿越)方案 A如果您想进入之前“存档”的镜像 (推荐)docker run -it --privileged --nethost my_ros2_humble /bin/bash方案 B如果您想继续使用之前运行中的容器 (保留已装的软件)docker start 容器ID或名字docker exec -it 容器ID或名字 /bin/bash步骤 4初始化 ROS 2 环境 (容器内部)进入容器后执行source /opt/ros/humble/setup.bash

更多文章