Ubuntu 18.04下,手把手教你搞定Eigen、OSQP和OSQP-EIGEN求解器全家桶(附CMake升级避坑指南)

张开发
2026/5/31 10:13:18 15 分钟阅读
Ubuntu 18.04下,手把手教你搞定Eigen、OSQP和OSQP-EIGEN求解器全家桶(附CMake升级避坑指南)
Ubuntu 18.04环境下Eigen与OSQP求解器全家桶深度配置指南在机器人控制与优化算法开发中数学求解器是不可或缺的基础工具。Eigen作为线性代数计算的黄金标准配合OSQP这一高效的二次规划求解器及其Eigen封装OSQP-EIGEN构成了现代机器人轨迹规划与控制的核心技术栈。本文将从一个真实项目实践者的角度带您完整走通从环境准备到问题排查的全流程。1. 环境准备与CMake升级策略Ubuntu 18.04默认的CMake 3.10.2版本在面对现代C项目时已显力不从心。我们先解决这个基础性问题wget https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0-linux-x86_64.tar.gz tar -xzvf cmake-3.21.0-linux-x86_64.tar.gz sudo mv cmake-3.21.0-linux-x86_64 /opt/cmake-3.21.0创建系统级软链接是保证全局可用的关键步骤sudo ln -sf /opt/cmake-3.21.0/bin/* /usr/bin/验证安装时建议使用组合命令确保路径正确which cmake cmake --version注意/opt目录需要sudo权限如果选择/usr/local目录安装后续可能需要调整PATH环境变量2. Eigen库的定制化安装Eigen作为纯头文件库安装过程看似简单却暗藏玄机。推荐从官方Git仓库获取稳定版本git clone https://gitlab.com/libeigen/eigen.git --branch 3.4.0标准安装流程如下mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX/usr/local sudo make install关键配置参数对比参数默认值推荐值作用CMAKE_INSTALL_PREFIX/usr/local/usr/local安装根目录EIGEN_TEST_NOQTOFFON禁用Qt测试模块BUILD_TESTINGONOFF关闭测试编译头文件部署策略直接影响后续开发体验sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include/3. OSQP求解器的深度编译OSQP的编译需要特别注意BLAS/LAPACK依赖sudo apt-get install build-essential libblas-dev liblapack-dev源码编译时的关键步骤git clone --recursive https://github.com/osqp/osqp cd osqp mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX/usr/local/osqp \ -DCMAKE_BUILD_TYPERelease \ -DENABLE_MKL_PARDISOOFF make -j$(nproc) sudo make install环境变量配置建议echo export OSQP_DIR/usr/local/osqp ~/.bashrc source ~/.bashrc4. OSQP-EIGEN的集成安装作为连接Eigen和OSQP的桥梁OSQP-EIGEN需要特别注意版本匹配git clone https://github.com/robotology/osqp-eigen.git cd osqp-eigen mkdir build cd build cmake .. -DCMAKE_PREFIX_PATH/usr/local;/usr/local/osqp \ -DCMAKE_INSTALL_PREFIX/usr/local/osqp-eigen make sudo make install验证安装成功的实用方法#include OsqpEigen/OsqpEigen.h #include iostream int main() { std::cout OSQP-Eigen version: OSQPEIGEN_VERSION_MAJOR . OSQPEIGEN_VERSION_MINOR std::endl; return 0; }5. 典型问题诊断与解决方案头文件路径冲突是最常见的问题之一。当出现fatal error: Eigen/Dense错误时可采用多维度解决方案符号链接方案sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen编译时指定路径cmake .. -DEigen3_DIR/usr/include/eigen3环境变量方案export CPLUS_INCLUDE_PATH/usr/include/eigen3:$CPLUS_INCLUDE_PATHCMake版本冲突的典型表现是配置阶段报错。可通过以下命令检查真实调用的CMake路径type -a cmake库链接问题往往表现为运行时错误。使用ldd工具诊断依赖关系ldd /usr/local/lib/libosqp.so6. 工程实践中的优化配置在真实机器人项目中推荐采用以下CMake配置模板find_package(Eigen3 REQUIRED) find_package(OsqpEigen REQUIRED) add_executable(mpc_controller src/mpc.cpp) target_include_directories(mpc_controller PRIVATE ${EIGEN3_INCLUDE_DIR} ${OSQP_INCLUDE_DIR} ${OSQP_EIGEN_INCLUDE_DIR} ) target_link_libraries(mpc_controller OsqpEigen::OsqpEigen )性能优化参数对比参数调试模式值发布模式值影响CMAKE_BUILD_TYPEDebugRelease代码优化级别OSQP_ALGEBRAbuiltinmkl矩阵运算后端EIGEN_NO_DEBUGOFFON禁用Eigen断言7. 开发环境深度集成对于ROS开发者建议在package.xml中明确定义依赖dependeigen3/depend build_dependosqp/build_depend build_dependosqp-eigen/build_dependCLion开发环境配置技巧在Toolchains中指定自定义CMake路径在CMake配置中添加-DEigen3_DIR参数设置环境变量OSQP_DIR指向安装目录VSCode配置要点{ cmake.configureArgs: [ -DEigen3_DIR/usr/include/eigen3, -DOSQP_DIR/usr/local/osqp ], C_Cpp.default.includePath: [ /usr/include/eigen3, /usr/local/osqp/include ] }8. 多版本管理策略对于需要切换不同版本的项目推荐使用符号链接版本管理sudo update-alternatives --install /usr/bin/cmake cmake /opt/cmake-3.21.0/bin/cmake 100 \ --slave /usr/bin/ctest ctest /opt/cmake-3.21.0/bin/ctest \ --slave /usr/bin/cpack cpack /opt/cmake-3.21.0/bin/cpackEigen多版本共存方案/usr/local/eigen/3.3.9 /usr/local/eigen/3.4.0通过环境变量切换版本export EIGEN3_INCLUDE_DIR/usr/local/eigen/3.4.0/include/eigen3在最近的一个四足机器人MPC控制项目中我们发现OSQP-EIGEN 0.7.0与Eigen 3.4.0的组合在实时性测试中表现最优比默认Ubuntu仓库中的版本性能提升约23%。特别是在处理稀疏矩阵时正确的编译选项能使求解速度产生显著差异。

更多文章