参考博客:https://www.helywin.com/posts/20260605124741/
核心原则:
- 所有镜像源使用华为云加速(Ubuntu apt、ROS apt、Docker 容器镜像)
- 包管理只用
apt,不使用rosdep - 使用 Podman + Distrobox 运行 rootless Ubuntu 18.04 容器
一、宿主机准备(EndeavourOS)
1.1 安装 Podman 和 Distrobox
EndeavourOS(Arch 系)使用 pacman 安装:
BASH
sudo pacman -S --needed podman distrobox验证:
BASH
podman --version
distrobox --version1.2 用户组配置(串口/摄像头权限,可选)
如果需要使用串口或摄像头,在宿主机执行:
BASH
sudo usermod -aG dialout $USER # 串口权限
sudo usermod -aG video $USER # 摄像头/GPU 权限添加组后需要 完全注销并重新登录 才能生效。
二、创建 Ubuntu 18.04 容器
2.1 使用华为云镜像拉取 Ubuntu 18.04
华为云 SWR 提供 Docker Hub 镜像加速:
BASH
podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/ubuntu:18.04
podman tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/ubuntu:18.04 ubuntu:18.042.2 创建 Distrobox 容器
BASH
distrobox create \
--image ubuntu:18.04 \
--name ros-melodic-box \
--home ~/distrobox-homes/ros-melodic \
--yes2.3 首次进入容器(初始化)
BASH
distrobox enter ros-melodic-box首次进入会自动安装约 200 多个基础包,耗时 3~5 分钟,不要中断。
三、容器内配置
3.1 配置华为云 Ubuntu 镜像源
容器内基础镜像缺少 CA 证书,先使用 HTTP 源安装证书,再切换到 HTTPS:
BASH
# 先使用 HTTP 源
sudo tee /etc/apt/sources.list << 'EOF'
deb http://mirrors.huaweicloud.com/repository/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.huaweicloud.com/repository/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.huaweicloud.com/repository/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.huaweicloud.com/repository/ubuntu/ bionic-security main restricted universe multiverse
EOF
sudo apt update
sudo apt install -y ca-certificates
# 切换到 HTTPS 源
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.huaweicloud.com/repository/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.huaweicloud.com/repository/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.huaweicloud.com/repository/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.huaweicloud.com/repository/ubuntu/ bionic-security main restricted universe multiverse
EOF
sudo apt update3.2 安装基础工具
BASH
sudo apt install -y \
curl gnupg2 lsb-release software-properties-common \
git build-essential \
python-rosdep python-rosinstall \
python-rosinstall-generator python-wstool \
mesa-utilspython-catkin-tools 通过 pip 安装:
BASH
sudo apt install -y python-pip
sudo pip install catkin_tools四、安装 ROS Melodic
4.1 添加华为 ROS 镜像源
BASH
sudo tee /etc/apt/sources.list.d/ros-latest.list << 'EOF'
deb https://mirrors.huaweicloud.com/ros/ubuntu/ bionic main
EOF
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update4.2 安装 ROS Melodic 完整版
BASH
sudo DEBIAN_FRONTEND=noninteractive apt install -y ros-melodic-desktop-full安装包约 500MB,解压后约 2.3GB,请耐心等待。
4.3 修复依赖冲突
安装完成后可能出现 python-rospkg-modules / python-rosdistro-modules 与旧包文件冲突,执行:
BASH
sudo apt -o Dpkg::Options::=--force-overwrite install -y \
python-rospkg-modules python-rosdistro-modules python-catkin-pkg-modules
sudo apt --fix-broken install -y4.4 验证安装
BASH
dpkg -l | grep ros-melodic-desktop-full
# ii ros-melodic-desktop-full 1.4.1-0bionic.20230620.175308 amd64 ...五、环境变量配置
将 ROS 环境变量添加到 ~/.bashrc:
BASH
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc验证版本:
BASH
rosversion -d
# 输出:melodic六、创建 catkin 工作空间(可选)
BASH
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
# 在这里 git clone 需要的 ROS 包
cd ~/catkin_ws
catkin_make如果有工作空间,也加到 ~/.bashrc:
BASH
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc七、测试 ROS 环境
在容器内执行以下命令测试:
BASH
source /opt/ros/melodic/setup.bash
# 启动 ROS Master
roscore &
sleep 3
# 查看话题列表
rostopic list
# 预期输出:
# /rosout
# /rosout_agg
# 发布测试消息
rostopic pub -1 /test std_msgs/String 'data: "hello ros melodic"'
# 接收测试消息
rostopic echo -n 1 /test
# 预期输出:
# data: "hello ros melodic"
# ---
# 启动 talker / listener
rosrun roscpp_tutorials talker &
rosrun roscpp_tutorials listener如果 rostopic echo 能收到消息、talker/listener 正常输出,说明 ROS 环境配置成功。
八、日常使用
8.1 进入容器
BASH
distrobox enter ros-melodic-box8.2 在宿主机直接执行容器内 ROS 命令
BASH
# 编译工作空间
distrobox enter ros-melodic-box -- bash -c "source /opt/ros/melodic/setup.bash && cd ~/catkin_ws && catkin_make"
# 直接运行 launch 文件
distrobox enter ros-melodic-box -- bash -c "source /opt/ros/melodic/setup.bash && roslaunch your_package your.launch"8.3 停止/删除容器
BASH
# 停止
distrobox stop ros-melodic-box
# 删除容器(保留家目录数据)
distrobox rm ros-melodic-box
# 完全删除容器和数据
podman stop ros-melodic-box
podman rm ros-melodic-box
rm -rf ~/distrobox-homes/ros-melodic九、数据备份
所有代码和配置都保存在宿主机的 ~/distrobox-homes/ros-melodic/ 下:
BASH
# 备份整个环境
tar czvf ros-melodic-backup.tar.gz ~/distrobox-homes/ros-melodic/即使容器被删除,只要保留该目录,重建容器时指定同一个 --home 即可恢复。
十、常见问题
| 问题 | 解决 |
|---|---|
| 容器首次进入失败/退出 | 等待初始化完成(3~5 分钟),不要按 Ctrl+C |
apt update 证书错误 |
先换 HTTP 源安装 ca-certificates,再切 HTTPS |
python-rospkg-modules 文件冲突 |
使用 --force-overwrite 安装 |
| 串口无权限 | 宿主机执行 sudo usermod -aG dialout $USER,注销重新登录 |
| GUI 程序无法显示 | 确保在桌面环境运行,Distrobox 会自动透传 DISPLAY |
十一、为什么不用 rosdep?
本方案固定使用 Ubuntu 18.04,所有依赖均可通过 apt 直接安装。rosdep 在国内网络环境下经常初始化失败,因此本教程选择只用 apt 管理依赖,简化环境搭建流程。