当前位置: 首页 > news >正文

autodl配置OpenREALM

AutoDL 上复现 OpenREALM + ROS1 Bridge 全流程记录(Ubuntu 20.04 + ROS Noetic + RTX 4090)

1. 复现环境

本次复现环境如下:

系统:Ubuntu 20.04.5 平台:AutoDL GPU:RTX 4090 CUDA:11.8 ROS:ROS Noetic 工作目录:/root/autodl-tmp/openrealm_ws 数据盘:/root/autodl-tmp,50GB,可写

前置状态:

roscore 可以正常启动 RViz 可以正常打开 VNC/noVNC 正常 rostopic list 可以看到: /rosout /tf /tf_static

由于 AutoDL 访问 GitHub 经常出现 443 超时,本次没有直接在服务器上git clone,而是选择在本地下载源码压缩包,再上传到 AutoDL。


2. 源码与依赖包准备

本地下载并上传到 AutoDL 的包如下:

OpenREALM-master.zip OpenREALM_ROS1_Bridge-master.zip PSL-master.zip openvslam-master.zip FBoW-master.zip g2o-9b41a4e.zip

其中:

OpenREALM-master.zip OpenREALM 主库 OpenREALM_ROS1_Bridge-master.zip ROS1 Bridge PSL-master.zip OpenREALM densifier 的子模块 openvslam-master.zip OpenVSLAM FBoW-master.zip OpenVSLAM 的 BoW 依赖 g2o-9b41a4e.zip OpenVSLAM / OpenREALM 需要的 g2o

上传后的目录:

cd /root/autodl-tmp/openrealm_ws ls -lh

我的结果大致如下:

OpenREALM-master.zip OpenREALM_ROS1_Bridge-master.zip PSL-master.zip openvslam-master.zip FBoW-master.zip g2o-9b41a4e.zip

3. 解压 OpenREALM 和 ROS1 Bridge

cd /root/autodl-tmp/openrealm_ws unzip OpenREALM-master.zip unzip OpenREALM_ROS1_Bridge-master.zip mv OpenREALM-master OpenREALM mkdir -p catkin_ws/src mv OpenREALM_ROS1_Bridge-master catkin_ws/src/OpenREALM_ROS1_Bridge

检查 ROS 包:

find catkin_ws/src/OpenREALM_ROS1_Bridge -maxdepth 2 -name package.xml

正常输出应包含:

catkin_ws/src/OpenREALM_ROS1_Bridge/realm_msgs/package.xml catkin_ws/src/OpenREALM_ROS1_Bridge/realm_ros/package.xml catkin_ws/src/OpenREALM_ROS1_Bridge/realm_rviz_plugin/package.xml

4. 检查 PSL 子模块是否为空

GitHub 页面直接 Download ZIP 时,通常不会包含 git submodule。

检查:

ls -lah /root/autodl-tmp/openrealm_ws/OpenREALM/modules/realm_densifier/realm_densifier_impl/psl

我的结果是空目录:

total 0 drwxr-xr-x 2 root root 10 ... drwxr-xr-x 3 root root 25 ...

这说明 PSL 子模块缺失,后续 OpenREALM CMake 会报:

does not contain a CMakeLists.txt file

因此需要手动补 PSL。


5. 安装基础 apt 依赖

先安装 OpenREALM / OpenVSLAM / ROS Bridge 可能用到的基础依赖:

sudo apt update sudo apt install -y \ build-essential cmake pkg-config git wget curl unzip \ apt-utils ca-certificates lsb-release gnupg2 \ libproj-dev libeigen3-dev gdal-bin \ libcgal-dev libcgal-qt5-dev \ libpcl-dev exiv2 libexiv2-dev \ libglew-dev libxkbcommon-dev libglu1-mesa-dev freeglut3-dev \ libxi-dev libxmu-dev libxmu-headers x11proto-input-dev \ libatlas-base-dev libsuitesparse-dev \ libgtk-3-dev ffmpeg \ libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev \ gfortran libyaml-cpp-dev libgoogle-glog-dev libgflags-dev \ libboost-all-dev libopencv-dev

如果安装mesa-common-dev时出现类似:

mesa-common-dev : Depends: libdrm-dev but it is not going to be installed

可以先跳过mesa-common-dev。我这里 RViz 已经能正常打开,所以没有继续纠结 Mesa 依赖。

ROS 相关依赖:

source /opt/ros/noetic/setup.bash sudo apt install -y \ python3-catkin-tools \ ros-noetic-geographic-msgs \ ros-noetic-geodesy \ ros-noetic-cv-bridge \ ros-noetic-rviz \ ros-noetic-pcl-ros \ ros-noetic-grid-map-core \ ros-noetic-grid-map-ros \ ros-noetic-grid-map-msgs \ ros-noetic-grid-map-rviz-plugin

6. 补 PSL 子模块

cd /root/autodl-tmp/openrealm_ws rm -rf /tmp/psl_unpack mkdir -p /tmp/psl_unpack unzip -q PSL-master.zip -d /tmp/psl_unpack rm -rf OpenREALM/modules/realm_densifier/realm_densifier_impl/psl mkdir -p OpenREALM/modules/realm_densifier/realm_densifier_impl mv /tmp/psl_unpack/PSL-master OpenREALM/modules/realm_densifier/realm_densifier_impl/psl test -f OpenREALM/modules/realm_densifier/realm_densifier_impl/psl/CMakeLists.txt && echo "PSL OK"

看到:

PSL OK

说明 PSL 已经补好。


7. 编译安装 g2o

解压 g2o:

cd /root/autodl-tmp/openrealm_ws mkdir -p deps rm -rf deps/g2o deps/g2o-* unzip -q g2o-9b41a4e.zip -d deps/ mv deps/g2o-* deps/g2o

配置:

cd /root/autodl-tmp/openrealm_ws/deps/g2o mkdir -p build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_CXX_FLAGS=-std=c++11 \ -DBUILD_SHARED_LIBS=ON \ -DBUILD_UNITTESTS=OFF \ -DG2O_USE_CHOLMOD=OFF \ -DG2O_USE_CSPARSE=ON \ -DG2O_USE_OPENGL=OFF \ -DG2O_USE_OPENMP=ON

第一次编译时我用了多线程,结果报:

c++: fatal error: Killed signal terminated program cc1plus

这是内存不够导致的。解决方法是开启 swap,并使用单线程编译。

创建 16G swap:

cd /root/autodl-tmp fallocate -l 16G /root/autodl-tmp/swapfile chmod 600 /root/autodl-tmp/swapfile mkswap /root/autodl-tmp/swapfile swapon /root/autodl-tmp/swapfile free -h swapon --show

如果fallocate不可用,可用:

dd if=/dev/zero of=/root/autodl-tmp/swapfile bs=1G count=16 status=progress chmod 600 /root/autodl-tmp/swapfile mkswap /root/autodl-tmp/swapfile swapon /root/autodl-tmp/swapfile

重新编译 g2o:

cd /root/autodl-tmp/openrealm_ws/deps/g2o/build make -j1 2>&1 | tee make_g2o_j1.log

成功后安装:

sudo make install sudo ldconfig

验证:

ls /usr/local/include/g2o ls /usr/local/lib | grep g2o | head

正常可以看到:

apps config.h core examples solvers stuff types libg2o_core.so libg2o_solver_dense.so libg2o_solver_eigen.so ...

注意:我一开始误输入了:

~sudo make install

导致:

bash: ~sudo: command not found

正确命令是:

sudo make install

8. 解压 OpenVSLAM 和 FBoW

cd /root/autodl-tmp/openrealm_ws rm -rf deps/openvslam deps/openvslam-* unzip -q openvslam-master.zip -d deps/ mv deps/openvslam-master deps/openvslam rm -rf /tmp/fbow_unpack mkdir -p /tmp/fbow_unpack unzip -q FBoW-master.zip -d /tmp/fbow_unpack rm -rf deps/openvslam/3rd/FBoW mkdir -p deps/openvslam/3rd mv /tmp/fbow_unpack/FBoW-master deps/openvslam/3rd/FBoW test -f deps/openvslam/3rd/FBoW/CMakeLists.txt && echo "FBoW OK"

看到:

FBoW OK

说明 FBoW 已经放到了 OpenVSLAM 的子模块位置。


9. 安装 Pangolin Viewer(可选但推荐)

如果开启 OpenVSLAM 的 Pangolin viewer,需要先安装 Pangolin。

我使用的 Pangolin 压缩包是:

Pangolin-ad8b5f8.zip

上传到:

/root/autodl-tmp/openrealm_ws

安装依赖:

sudo apt update sudo apt install -y \ libglew-dev \ libgl1-mesa-dev \ libegl1-mesa-dev \ libwayland-dev \ libxkbcommon-dev \ wayland-protocols \ libjpeg-dev \ libpng-dev \ libtiff-dev \ libopenexr-dev

解压编译:

cd /root/autodl-tmp/openrealm_ws mkdir -p deps rm -rf deps/Pangolin deps/Pangolin-* unzip -q Pangolin-ad8b5f8.zip -d deps/ mv deps/Pangolin-* deps/Pangolin cd deps/Pangolin mkdir -p build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DBUILD_EXAMPLES=OFF make -j1 sudo make install sudo ldconfig

验证:

ls /usr/local/include/pangolin find /usr/local -name "PangolinConfig.cmake" -o -name "pangolin-config.cmake"

如果不需要 Pangolin viewer,也可以在 OpenVSLAM 编译时关闭:

-DUSE_PANGOLIN_VIEWER=OFF -DINSTALL_PANGOLIN_VIEWER=OFF

10. 编译安装 OpenVSLAM

进入 OpenVSLAM:

cd /root/autodl-tmp/openrealm_ws/deps/openvslam rm -rf build mkdir build cd build

如果已经安装 Pangolin,可以开启 viewer:

cmake .. \ -DUSE_PANGOLIN_VIEWER=ON \ -DINSTALL_PANGOLIN_VIEWER=ON \ -DUSE_SOCKET_PUBLISHER=OFF \ -DUSE_STACK_TRACE_LOGGER=ON \ -DBUILD_TESTS=OFF \ -DBUILD_EXAMPLES=ON

如果没有安装 Pangolin,则关闭 viewer:

cmake .. \ -DUSE_PANGOLIN_VIEWER=OFF \ -DINSTALL_PANGOLIN_VIEWER=OFF \ -DUSE_SOCKET_PUBLISHER=OFF \ -DUSE_STACK_TRACE_LOGGER=ON \ -DBUILD_TESTS=OFF \ -DBUILD_EXAMPLES=OFF

编译安装:

make -j1 sudo make install sudo ldconfig

验证:

ls /usr/local/include/openvslam ls /usr/local/lib | grep openvslam

我的结果:

/usr/local/include/openvslam 下能看到 system.h、tracking_module.h 等 /usr/local/lib 下能看到 libopenvslam.so

说明 OpenVSLAM 安装成功。


11. 单独安装 FBoW

虽然 FBoW 已经作为 OpenVSLAM 的子模块参与编译,但 OpenREALM 后续 CMake 还需要能找到独立的fbowCMake package。

因此需要单独安装 FBoW:

cd /root/autodl-tmp/openrealm_ws/deps/openvslam/3rd/FBoW rm -rf build mkdir build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local make -j1 sudo make install sudo ldconfig

验证:

find /usr/local -iname "*fbow*" find /usr/local -name "*fbow*Config.cmake" -o -name "*FBoW*Config.cmake"

正常输出包括:

/usr/local/lib/libfbow.so /usr/local/share/cmake/fbow/fbowConfig.cmake /usr/local/include/fbow

12. 第一次 CMake OpenREALM 遇到的问题

进入 OpenREALM:

cd /root/autodl-tmp/openrealm_ws/OpenREALM rm -rf build mkdir build cd build cmake ..

一开始主要报两个错误:

12.1 PSL 为空

The source directory /root/autodl-tmp/openrealm_ws/OpenREALM/modules/realm_densifier/realm_densifier_impl/psl does not contain a CMakeLists.txt file.

解决方法:补 PSL 子模块,见第 6 节。

12.2 找不到 OpenVSLAM

Could not find a package configuration file provided by "openvslam"

解决方法:编译安装 OpenVSLAM,见第 10 节。


13. OpenREALM 的 fbow::fbow 报错修复

安装 OpenVSLAM 和 FBoW 后,OpenREALM CMake 仍可能报:

Target "realm_stages" links to target "fbow::fbow" but the target was not found. Target "realm_vslam_base" links to target "fbow::fbow" but the target was not found.

原因是 FBoW 安装后导出的 target 叫fbow,但 OpenREALM 链接时需要fbow::fbow

先查看 FBoW 导出的 target:

grep -n "add_library" /usr/local/share/cmake/fbow/fbowTargets.cmake

如果看到的是:

add_library(fbow SHARED IMPORTED)

就需要给 OpenREALM 补 alias。

修改 OpenREALM 两个 CMakeLists:

cd /root/autodl-tmp/openrealm_ws/OpenREALM cp modules/realm_vslam/realm_vslam_base/CMakeLists.txt \ modules/realm_vslam/realm_vslam_base/CMakeLists.txt.bak_fbow cp modules/realm_stages/CMakeLists.txt \ modules/realm_stages/CMakeLists.txt.bak_fbow grep -q "find_package(fbow REQUIRED)" modules/realm_vslam/realm_vslam_base/CMakeLists.txt || \ sed -i '/find_package(openvslam REQUIRED)/a find_package(fbow REQUIRED)\nif(TARGET fbow AND NOT TARGET fbow::fbow)\n add_library(fbow::fbow ALIAS fbow)\nendif()' \ modules/realm_vslam/realm_vslam_base/CMakeLists.txt grep -q "find_package(fbow REQUIRED)" modules/realm_stages/CMakeLists.txt || \ sed -i '/find_package(openvslam REQUIRED)/a find_package(fbow REQUIRED)\nif(TARGET fbow AND NOT TARGET fbow::fbow)\n add_library(fbow::fbow ALIAS fbow)\nendif()' \ modules/realm_stages/CMakeLists.txt

重新 CMake:

cd /root/autodl-tmp/openrealm_ws/OpenREALM rm -rf build mkdir build cd build cmake ..

14. 编译安装 OpenREALM 主库

CMake 通过后,使用单线程编译:

cd /root/autodl-tmp/openrealm_ws/OpenREALM/build make -j1 2>&1 | tee make_openrealm.log

我的编译最终成功,最后看到:

[100%] Built target realm_stages

安装:

sudo make install sudo ldconfig

验证:

ls /usr/local/lib | grep -E "realm|open_realm" find /usr/local/include -maxdepth 2 -iname "*realm*" | head -n 30

15. 编译 ROS1 Bridge

进入 catkin workspace:

source /opt/ros/noetic/setup.bash cd /root/autodl-tmp/openrealm_ws/catkin_ws rm -rf build devel

第一次编译:

catkin_make \ -DCMAKE_BUILD_TYPE=Release \ -DPYTHON_EXECUTABLE=/usr/bin/python3 \ 2>&1 | tee make_bridge.log

16. Bridge 编译问题 1:conda Python 导致找不到 empy

报错:

Could NOT find PY_em Unable to find either executable 'empy' or Python module 'em' try installing the package 'python3-empy'

同时日志显示:

Using PYTHON_EXECUTABLE: /root/miniconda3/bin/python3

说明 catkin 用了 conda 的 Python,而不是系统 Python。

安装 empy:

sudo apt update sudo apt install -y python3-empy

检查系统 Python:

/usr/bin/python3 -c "import em; print(em.__file__)"

重新编译时显式指定

http://www.jsqmd.com/news/1141115/

相关文章:

  • Hermes Agent与DeepSeek结合实践:模型选型的技术考量与优化策略
  • 深入理解Java并发编程:CompletableFuture 完全指南
  • 酒吧大屏互动系统怎么选?酒吧/夜店老板看这篇文章就够了
  • 本地部署AI工具:免费开源方案如何超越付费服务?
  • 商超烘焙模式的优势和痛点及数字化解决方案
  • Agent产品的工程化落地:从Demo到可交付系统的关键路径
  • 数据产业服务分类(39)——分类设计过程与实现——分类设计过程
  • 题解证明链检查:结论正确,也要说明为什么不能反例
  • Codex 最新版更新后一直在思考中?修复 Codex 更新后 Win10 加载混乱:升级系统并安装本地依赖项目空间指南
  • 连续与离散系统频率特性对比:3类滤波器零极点配置规律总结
  • 【无人机三维路径规划】基于A星 粒子群 RRT在城市 3D 环境中高效导航的无人机路径规划算法比较分析附Matlab代码
  • Cursor高阶实战:Slash Command意图编译与Plan决策链路解析
  • WinBtrfs完整指南:在Windows上无缝访问Linux Btrfs文件系统
  • STM32F412RE与MCP3551高精度ADC数据采集方案
  • open Harmony文件互传业务流程分析
  • 基于MKV42F128VLH16与MCP3202的锂电池电压平衡系统设计
  • 收藏!从零开始学习大模型,小白程序员必备的完整路线图
  • 系统分析师案例分析题常考知识点
  • 5分钟掌握:3DS游戏格式转换终极方案
  • Gemini 3.5 辅助单元测试实战:Jacoco+JUnit5 实现覆盖率从40%到90%跃升
  • 国产CPU 3大技术路线实战选型:ARM、x86、LoongArch在信创项目中的5点关键考量
  • 口碑好的家装门窗生产厂家
  • KMS智能激活脚本终极指南:三步实现Windows和Office永久激活
  • 计算机毕业设计之jsp面向智慧校园社区的班级管理系统
  • BetterNCM Installer:3步搞定网易云音乐插件安装的终极指南
  • BetterNCM安装器终极指南:从网易云音乐基础版到功能增强版的平滑升级方案
  • 如何高效获取Bilibili完整评论数据:新手完整指南
  • c语言的输入以及 为常量定义名字
  • DAB单移相控制、双有源桥DCDC变换器(电压闭环)仿真(附参考文献)
  • 2026年干细胞行业观察:细胞存储与健康管理服务的合规边界