LeGO-LOAM Docker for ROS Noetic
LeGO-LOAM Docker for ROS Noetic
这是一个为 LeGO-LOAM 准备的、开箱即用的 Docker 环境。
该镜像基于 ROS Noetic (Ubuntu 20.04),并包含了所有运行 LeGO-LOAM 所需的核心依赖和图形库,让你无需经历繁琐的环境配置,即可快速启动并运行算法。
github项目地址:LY-zhang-yi-hao/LeGO-LOAM
这个 Docker 镜像托管在 Docker Hub 上:zyhlearning/zyh_lego_loam_noetic
效果图
✨ 特性
- 环境完整:基于官方
osrf/ros:noetic-desktop-full
镜像,包含了 RViz 等常用工具。 - 依赖齐全:预装了
GTSAM
,METIS
,PCL
等所有 LeGO-LOAM 的编译和运行依赖。 - 图形支持:内置了必要的 OpenGL 库,解决了常见的 RViz 启动问题。
- 开箱即用:拉取镜像,运行容器,即可开始你的 LeGO-LOAM 之旅。
🚀 快速开始
请按照以下步骤来运行 LeGO-LOAM。
1. 准备工作
在开始之前,请确保你的系统已满足以下要求:
- 安装 Docker: 请参考 Docker 官方文档 安装 Docker Engine。
- NVIDIA GPU 用户 (可选,但推荐): 如果你的电脑有 NVIDIA 显卡,请安装 NVIDIA Container Toolkit 以启用硬件加速。
- 准备数据集:
- 创建一个文件夹来存放你的
.bag
数据文件。例如:
mkdir -p ~/loam_data
- 下载或将你的
.bag
文件放入这个文件夹。:
https://www.123912.com/s/kqwxjv-YqfD3?提取码:2j2y
2. 拉取 Docker 镜像
从 Docker Hub 拉取本项目的镜像:
docker pull zyhlearning/zyh_lego_loam_noetic
3. 运行 Docker 容器
这是最关键的一步。我们将启动一个配置好的容器,并将你的数据集和图形界面连接到容器中。
对于 Linux 用户
- 授权 X Server (允许容器显示图形界面):
xhost +local:docker
- 运行容器:
docker run -it --rm \
--name lego_loam_container \
-e DISPLAY=$DISPLAY \
-e QT_X11_NO_MITSHM=1 \
--device=/dev/dri \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/loam_data:/root/data \
zyhlearning/zyh_lego_loam_noetic
💡 命令解释:
--rm
: 容器退出后自动删除,保持系统干净。如果想保留容器,请去掉此参数。-e DISPLAY...
&-v /tmp/...
: 用于将容器的图形界面显示在你的宿主机屏幕上。--device=/dev/dri
: 将显卡设备映射给容器以启用硬件加速(推荐)。-v ~/loam_data:/root/data
: (重要!) 将你的数据文件夹挂载到容器的/root/data
目录。请确保~/loam_data
是你存放.bag
文件的真实路径。
4. 在容器内运行 LeGO-LOAM
执行完上面的 docker run
命令后,你就进入了容器的终端。
- 启动 LeGO-LOAM:
镜像已经配置好环境,直接运行即可:
roslaunch lego_loam run.launch
如果一切顺利,一个 RViz 窗口应该会弹出。
- 播放数据包 (Bag File):
- 在你的宿主机上新开一个终端。
- 使用
docker exec
进入同一个正在运行的容器:
docker exec -it lego_loam_container bash
- 在这个新的终端里,播放你的
.bag
文件:
rosbag play /root/data/your_bag_file.bag --clock
注意: 请将
your_bag_file.bag
替换成你自己的文件名。--clock
参数是必须的!
现在,你可以在 RViz 窗口里看到 LeGO-LOAM 正在实时构建地图了!🎉
🤔 常见问题与排查 (FAQ)
- Q: RViz 窗口没有弹出,或报错
cannot open display
/GLXContext
错误。 - A:
- 确认你在宿主机上运行了
xhost +local:docker
。 - 确认
docker run
命令包含了所有-e DISPLAY
和-v /tmp/.X11-unix
参数。 - 如果你的系统没有
/dev/dri
设备(例如在虚拟机中),请去掉--device=/dev/dri
参数,并尝试在docker run
中添加-e LIBGL_ALWAYS_SOFTWARE=1
来强制软件渲染。
-
Q:
mapOptmization
或其他节点崩溃。 -
A: 这个镜像已经包含了所有已知的依赖。如果仍然崩溃,请检查你的
.bag
文件中的话题名称是否与LeGO-LOAM/launch/run.launch
文件中订阅的话题名称一致。 -
Q: 如何停止并退出?
-
A: 在两个容器终端里分别按
Ctrl+C
停止rosbag
和roslaunch
。然后在其中一个终端里输入exit
退出。如果你在docker run
时使用了--rm
参数,容器会自动被删除。