从零搭建SLAM环境:Sophus模板类安装与C++11配置实战

Sophus库安装踩坑(SLAM十四讲) 学习slam十四讲(第二版),自行git安装sophus库,但是需要做准备工作 注意,如果看网上的其他教程可能会出错,因为大部分教程是根据第一版的书,使用的是非模板类,但是这里使用的是模板类的sophus 0.准备工作 因为sophus的使用必须依赖eigen库,因此先下载eigen,但是如果你有3.3以下的版本的eigen,那么请先卸载: 0.0 如果你有以前的eigen版本,则先卸载 (1)如... 阅读详情

从零搭建SLAM环境:Sophus模板类安装与C++11配置实战

在SLAM(Simultaneous Localization and Mapping)开发中,Sophus库作为李群和李代数的重要数学工具,扮演着不可或缺的角色。然而,随着SLAM技术的演进,Sophus库也从早期的非模板版本升级为更现代的模板类实现,这给许多开发者的环境配置带来了新的挑战。本文将手把手带你完成从Eigen库准备到Sophus模板类成功安装的全过程,特别针对C++11环境的配置和常见陷阱进行深入解析。

1. 环境准备:Eigen库的正确安装

Sophus模板类必须依赖Eigen 3.3及以上版本才能正常工作。许多安装问题都源于Eigen版本不匹配,因此我们需要彻底清理旧版本并安装正确的新版本。

检查现有Eigen版本:

# 查找已安装的Eigen文件
sudo updatedb
locate eigen3 | grep -i version

如果发现3.3以下版本,必须完全卸载:

sudo rm -rf /usr/include/eigen3 \
            /usr/lib/cmake/eigen3 \
            /usr/share/doc/libeigen3-dev \
            /usr/share/pkgconfig/eigen3.pc \
            /var/lib/dpkg/info/libeigen3-dev.*

注意:直接使用apt-get install libeigen3-dev通常会安装过时的3.2版本,这是导致后续Sophus编译失败的常见原因。

从源码安装Eigen 3.3+:

  1. 从官方仓库下载最新稳定版(如3.4.0):
    wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.bz2
    tar -xvjf eigen-3.4.0.tar.bz2
    
  2. 编译安装:
    cd eigen-3.4.0
    mkdir build && cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
    make && sudo make install
    

验证安装是否成功:

// test_eigen.cpp
#include <Eigen/Dense>
#include <iostream>

int main() {
    std::cout << "Eigen version: " 
              << EIGEN_WORLD_VERSION << "." 
              << EIGEN_MAJOR_VERSION << "." 
              << EIGEN_MINOR_VERSION << std::endl;
    return 0;
}

编译并运行:

g++ -std=c++11 test_eigen.cpp -o test_eigen && ./test_eigen

2. C++11编译环境配置

Sophus模板类充分利用了C++11特性,因此必须确保开发环境支持C++11标准。不同构建工具需要不同的配置方式:

CMake项目配置:

cmake_minimum_required(VERSION 3.1)
project(YourSLAMProject)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

GCC/Clang编译器选项:

# 显式指定C++11标准
g++ -std=c++11 your_program.cpp -o your_program

主流IDE配置对比:

开发环境配置位置关键参数
KDevelopProject → Open Configuration → C++ Support添加-std=c++11到CMake参数
CLionFile → Settings → Build → CMake在CMake options中添加-DCMAKE_CXX_STANDARD=11
VS Code.vscode/settings.json添加"C_Cpp.default.cppStandard": "c++11"

提示:在Docker环境中构建时,确保基础镜像包含gcc-5或更高版本。可运行gcc --version确认。

3. 解决Sophus的fmt依赖问题

现代Sophus版本新增了对fmt库的依赖,这是许多新手容易忽略的关键环节。

fmt库安装步骤:

git clone https://github.com/fmtlib/fmt.git
cd fmt
mkdir build && cd build
cmake -DFMT_TEST=OFF ..
make -j$(nproc)
sudo make install

常见问题排查:

  • 如果遇到fmt/format.h: No such file错误,尝试:
    sudo ldconfig  # 更新动态链接库缓存
    
  • 检查安装路径是否正确:
    # 确认头文件位置
    find /usr -name "format.h" | grep fmt
    # 确认库文件位置
    ldconfig -p | grep fmt
    

4. Sophus模板类安装全流程

现在我们可以开始安装Sophus模板类了,特别注意要避免回退到非模板版本。

完整安装命令:

git clone https://github.com/strasdat/Sophus.git
cd Sophus
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install  # 必须执行这步!

重要警告:网上许多教程会建议执行git checkout a621ff回退到非模板版本,这会导致与新版Eigen不兼容,绝对不要执行此操作!

验证安装:

  1. 检查安装文件:
    ls /usr/local/include/sophus  # 应看到se3.hpp等头文件
    
  2. 创建测试项目:
    cmake_minimum_required(VERSION 3.1)
    project(SophusTest)
    
    find_package(Eigen3 REQUIRED)
    find_package(Sophus REQUIRED)
    find_package(fmt REQUIRED)
    
    add_executable(sophus_test test.cpp)
    target_link_libraries(sophus_test Sophus::Sophus Eigen3::Eigen fmt::fmt)
    
  3. 测试代码:
    #include <iostream>
    #include <sophus/se3.hpp>
    
    int main() {
        Sophus::SE3d SE3;  // 默认构造单位变换
        std::cout << "测试成功!SE3变换矩阵:\n" 
                  << SE3.matrix() << std::endl;
        return 0;
    }
    

5. 实际项目集成技巧

将Sophus正确集成到SLAM项目中需要注意以下关键点:

CMake最佳实践:

# 现代CMake推荐写法
find_package(Eigen3 3.3 REQUIRED NO_MODULE)
find_package(Sophus REQUIRED)
find_package(fmt REQUIRED)

add_executable(your_target main.cpp)
target_link_libraries(your_target 
    PRIVATE 
    Eigen3::Eigen
    Sophus::Sophus
    fmt::fmt
)

多平台兼容处理:

  • 如果自定义了Eigen或Sophus的安装路径,需要指定查找路径:
    list(APPEND CMAKE_MODULE_PATH "/custom/path/to/sophus/cmake")
    set(Eigen3_DIR "/custom/path/to/eigen/share/eigen3/cmake")
    

性能优化选项:

# 编译Sophus时启用SSE优化
cd Sophus/build
cmake -DUSE_SSE=ON ..
make -j$(nproc)

6. 高级调试与问题排查

即使按照流程安装,仍可能遇到各种奇怪问题。以下是几个典型场景的解决方案:

问题1:SE3成员访问编译错误

Sophus::SE3d SE3;
auto R = SE3.rotationMatrix();  // 报错

解决方案:确保包含正确的头文件:

#include <sophus/se3.hpp>  // 不是sophus/so3.hpp!

问题2:Eigen对齐错误

error: static assertion failed: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES

解决方法:在包含Eigen头文件前定义:

#define EIGEN_DONT_ALIGN_STATICALLY 1
#include <Eigen/Dense>

问题3:fmt链接错误

undefined reference to `fmt::v8::detail::error_handler::on_error(char const*)'

解决方法:确保CMake中正确链接fmt库:

target_link_libraries(your_target PRIVATE fmt::fmt)

7. 现代SLAM项目中的Sophus应用

了解安装只是第一步,真正发挥Sophus威力需要掌握其核心功能:

常用操作示例:

// 创建随机SE3变换
Sophus::SE3d T = Sophus::SE3d::exp(Sophus::Vector6d::Random());

// 李代数与李群转换
Sophus::Vector6d xi = T.log();  // 李代数
Sophus::SE3d T2 = Sophus::SE3d::exp(xi);  // 重建

// 变换点云
Eigen::Vector3d p(1,0,0);
Eigen::Vector3d p_transformed = T * p;

与PCL点云库集成:

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>

void transformCloud(const Sophus::SE3d& T, 
                   pcl::PointCloud<pcl::PointXYZ>::Ptr cloud) {
    for (auto& point : cloud->points) {
        Eigen::Vector3d p(point.x, point.y, point.z);
        p = T * p;
        point.x = p.x();
        point.y = p.y();
        point.z = p.z();
    }
}

性能关键型代码优化:

// 使用Eigen::Map避免内存拷贝
void processTrajectory(const std::vector<Sophus::SE3d>& trajectory) {
    Eigen::Map<const Eigen::Matrix<double, 7, Eigen::Dynamic>> 
        map(trajectory.data()->data(), 7, trajectory.size());
    // 直接操作连续内存数据...
}

在实际SLAM系统中,我们通常会结合Sophus与Ceres Solver等优化库使用。例如构建位姿图优化问题时,可以直接使用Sophus提供的李代数局部参数化:

struct PoseGraphCostFunction {
    template <typename T>
    bool operator()(const T* const pose1, const T* const pose2, T* residuals) const {
        Sophus::SE3<T> T1 = Sophus::SE3<T>::exp(Eigen::Map<const Eigen::Matrix<T,6,1>>(pose1));
        Sophus::SE3<T> T2 = Sophus::SE3<T>::exp(Eigen::Map<const Eigen::Matrix<T,6,1>>(pose2));
        Sophus::SE3<T> error = measurement_.inverse() * T1.inverse() * T2;
        Eigen::Map<Eigen::Matrix<T,6,1>>(residuals) = error.log();
        return true;
    }
    
    Sophus::SE3d measurement_;
};
slam的环境配置大全--保姆教学 本文参照哔哩大学的视频【高翔x助教黑熊x深蓝学院】视觉SLAM理论与实践环境搭建,我黑熊又来了! 但是他那个没有安装包,而且视频中间出错一次。我这个根据安装无数遍后的踩坑而总结,根据每一步链接应该可以完成。 首先每,个库的版本都很重要,把每个库都重新安装一遍最好。 1、 ... 阅读详情

相关推荐

《视觉SLAM十四讲》用到的第三方依赖库——配置与安装

以下所有的操作指令依赖的硬件平台是Thinkpad,软件平台是Ubuntu 16.04LTS。 Eigen Eigen is a C++ template library for linear algebra. 安装:ubuntu软件源中已经提供 sudo apt-get insatll libeigen3-dev 头文件与库文件:Eigen是一个纯用头文件搭建起来的库(没有库文件...

jiangchuanhu的博客 3613

安装Sophus库,线性代数运算库(视觉SLAM十四讲用到)

不要使用git checkout a621ff,否则会安装老版本的非模板sophus,报错。

weixin_43159220的博客 982

ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行---Ubuntu20.04

所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;需要下载数据集dataset-room1_512_16和rgbd_dataset_freiburg1_desk。在一键安装ROS后,只需要再安装Pangolin即可,其他所有的需要都已经存在。用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。第二条命令中的${ROS_PACKAGE_PATH}是自己文件的路径。其采用的相机和IMU传感器,在硬件上进行了时间同步。

琉璃轻纱的博客 1万+

SLAM新手必看:Sophus模板类安装全流程(附Eigen 3.3.7配置避坑指南)

本文为SLAM新手提供了Sophus模板类库的完整安装指南,重点解析了其核心依赖Eigen 3.3+版本的配置要点,并附带了详细的避坑说明。文章详细介绍了从清理旧版本、编译安装Eigen 3.3.7和fmt库,到正确安装模板类Sophus的全流程,最后通过一个完整的CMake项目测试,确保读者能一次性成功配置环境,将精力专注于SLAM算法学习。

gray5的博客 914

视觉SLAM十四讲笔记(超级通俗易懂哦~)

第二讲 初识SLAM 传感器 Sensors 两类传感器: 安装于环境中的:二维码,GPS, 携带于机器人本体的: 对比激光和相机两大类传感器,激光建图基本上已经研究清楚,视觉SLAM还没有稳定可靠运行 摄像头:轻便、便宜、信息丰富 缺点:遮挡、受光照影响、计算量大、 单目,双目,深度相机(TOF/结构光) ...

qq_41883714的博客 2万+

SLAM开发环境搭建:VSCode配置C++与CUDA完整指南

在计算机视觉与机器人领域,即时定位与地图构建(SLAM)是实现自主导航的核心技术。其算法原理依赖于对传感器数据的实时处理与复杂数学运算,因此对开发环境的计算性能有极高要求。为提升计算效率,开发者常利用GPU并行计算能力进行加速,这便引入了CUDA编程模型。一个配置得当的C++开发环境,能提供高效的代码补全、语法检查和调试支持,是保障算法快速迭代与工程落地的技术基础。本文聚焦于SLAM开发中的关键环节,详细讲解如何在轻量且强大的VSCode编辑器中,系统性地配置支持CUDA加速的C++开发环境,涵盖从编译器、

weixin_42554151的博客 241

slam十四讲~环境安装以及问题记录

整理 ubuntu 安装slam环境,运行slam十四讲代码时遇到的部分问题以及解决方法。

40891629的博客 5526

告别虚拟机!用ZYNQ7000和PYNQ 2.6.0打造一个能实时识别人脸的“智能摄像头”

本文详细介绍了如何利用Xilinx ZYNQ7000开发板和PYNQ 2.6.0框架构建实时人脸识别系统。通过硬件加速和嵌入式开发技术,该系统实现了低延迟、低功耗的独立运行能力,适用于边缘计算和物联网应用。文章包含从环境搭建到核心功能实现的完整指南,并提供了性能优化和问题排查的实用技巧。

weixin_42543046的博客 391

从Eigen到Sophus:SLAM开发环境搭建的完整配置流程(含C++11支持调整)

本文详细介绍了从Eigen到Sophus的SLAM开发环境搭建全流程,包括Eigen库的安装与卸载、C++11标准支持配置以及Sophus模板类的编译与安装。特别针对版本兼容性问题提供了解决方案,帮助开发者高效完成环境配置,确保SLAM算法实现的稳定性与效率。

weixin_30892037的博客 451

UDS(三)网络层时间参数

网络层定义了N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs六个时间参数。 网络层在检测到错误的时间传递至上层使用者 1.当N_As 超时时,即发送方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.comfirm指示 2.当N_Ar超时时,即接收方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.co

weixin_44522306的博客 1万+

揭秘 Chat Template 如何驱动 AI Agent?以Qwen3为例详解LLM的聊天模板

bos_token: null (没有使用特殊的文档开始符)eos_token<|im_end|>(作为每个对话回合的结束符)pad_token: 对话回合开始<|im_end|>: 对话回合结束非特殊但关键的控制 Token (在词汇表中定义): 包裹模型生成的工具调用请求。: 包裹外部工具返回的执行结果。<think></think>: 包裹模型的内部思考或推理过程。

ljp1919的专栏 1352

【视觉SLAM十四讲】各种库的安装及代码实践

在学习高博的《视觉SLAM十四讲》的过程中,遇到了各种问题。虽说在网上都能找到对应的解决方案,但没有一篇是详细列尽遇到的问题的文章。于是,打算自己写一篇记录学习过程中遇到的一系列问题。希望能为后续的学习提供一点帮助!(自己也是新手小白,还是有很多不懂的地方。

2302_80099075的博客 6054

USB摄像头开发避坑指南:UVC协议中的Alternate Setting详解

本文深入解析UVC协议中的Alternate Setting机制,这是USB摄像头开发中影响视频流稳定性的关键。文章通过实际案例,详解了Alternate Setting如何管理USB带宽分配,并分析了帧率不达标、图像花屏等典型问题的根源与排查方法,为开发者提供实用的避坑指南和调试技巧。

meat5的博客 240

SLAM新手必看:Sophus库安装全流程指南(附Eigen 3.3.7配置避坑)

本文为SLAM新手提供Sophus库安装全流程指南,重点解决Eigen 3.3.7配置中的常见问题。通过详细的步骤说明和避坑建议,帮助读者顺利完成Sophus库及其依赖项的安装与验证,为SLAM开发奠定坚实基础。

weixin_28745821的博客 412

知识图谱_知识图谱 | 知识图谱做用户画像

导读:最近一直在思考怎么用知识图谱做推荐,但是目前能知道的内容都是基于路径的推荐和基于图特征的推荐,所以能不能换一个角度,探究一下用知识图谱怎么做用户画像,因为画像也是推荐系统重要的一部分。现在的知识图谱+推荐怎么做的传统的用户画像怎么做现在的知识图谱+推荐怎么做的?基于路径:可以理解成基于图谱的多路径召回,或者多路径推荐,然后根据路径的转移概率进行排序从而达到推荐的效果,基于路径比较适合简单的推...

weixin_28801659的博客 1460

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。 按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间...

Radia的专栏 1万+

视觉SLAM十四讲Sophus模板库安装避坑指南(附fmt-8.1.1配置全流程)

本文详细解析了《视觉SLAM十四讲》中Sophus模板库的安装流程与常见问题。重点介绍了其核心依赖fmt-8.1.1库的配置全流程,并提供了CMakeLists.txt的完整配置示例,旨在帮助开发者一次性成功搭建视觉SLAM学习环境,避开编译与链接的常见陷阱。

mqtt6iot的博客 937

QGIS将经纬度坐标转成点

QGIS绘制一张地图

weixin_46713695的博客 6056

在docker环境下从头搭建openvslam/orb_slam3的流程记录以及问题总结

为了方便后续的重复部署以及给读者朋友做一个参考,因此,我记录了在服务器上通过docker搭建openvslam以及orb_slam3的全部过程,并且整理了遇到的编译问题。

目前涉及领域:目标检测,语义分割以及数字图像处理 3342

Unity 热更新技术 | (二) AssetBundle - 完整系列教程学习

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来从 AssetBundle - 完整系列教程学习 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ORB_SLAM3 ROS编译及使用D435I运行

本文介绍ORB_SLAM3编译、运行中遇到问题,尤其涉及到ORB_SLAM3 ROS编译遇到的问题。最后通过使用D435I完成在室内环境下运行。

u010196944的博客 8152

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ORB-SLAM3 复现避坑大全:解决 Pangolin、Sophus、OpenCV 版本冲突的实战经验

本文详细解析了ORB-SLAM3复现过程中常见的依赖冲突问题,特别是Pangolin、Sophus和OpenCV的版本兼容性问题。通过实战验证的解决方案和优化配置,帮助开发者顺利完成环境搭建和系统编译,提升视觉SLAM项目的开发效率。

weixin_30315435的博客 488

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

visual studio 2022下sophus(非模版类)使用

最近正在看《视觉SLAM十四讲》,因为需要在Windows系统上使用,所以将原本在Ubuntu下的示例代码移动至Windows下进行运行。本篇主要讲述我在配置Sophus这个库时候所遇到问题。

GFCLJY的博客 1554

Ubuntu18.04配置视觉SLAM十四讲代码运行环境

1.安装Pangolin:参考教程 https://blog.youkuaiyun.com/l243225530/article/details/105900272 第6步; 2.安装engine3:参考上述教程第7步; 3.安装g2o:https://github.com/RainerKuemmerle/g2o 下载源码,安装步骤安装即可; 4.安装boost依赖:sudo apt-get install libboost-all-dev 5.安装Sophus git clone https://github.co

seabear008的专栏 2826

如何搭建RGBD GS-ICP SLAM环境以及如何与自己编的pcl并存

最近深度学习SLAM又出来一个分支,3D gaussion splatting做slam的操作,之前我们给读者讲过如何使用C++做。这里最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡2.6元,月卡只需要1.7元每小时,并附带200G的免费磁盘空间。暂时已经满足我的使用需求了,同时支持访问加速,独立IP等功能,能够更快的完成项目搭建。

lovely_yoshino的博客 1872

从零配置SLAM开发环境:Ubuntu20.04安装Eigen3.3.7+Sophus+Ceres全流程实录

本文详细指导在Ubuntu20.04系统上配置SLAM开发环境,包括Eigen3.3.7线性代数库、模板类Sophus李群库和非线性优化工具Ceres Solver的安装与调试。通过精准版本选择和关键编译参数设置,帮助开发者避免常见依赖问题,快速搭建稳定的SLAM开发平台。

3c4x5z6v7b的博客 312
上一篇: PyCharm通过SSH连接Docker容器实现Python远程开发与调试
下一篇: 【OTFS技术前沿】基于压缩感知的MIMO-OTFS信道估计优化策略
sql99
博客等级 码龄19年 168粉丝 1905原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值