ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ubuntu 20.04安装evo:SLAM轨迹评估工具完整部署指南

Ubuntu 20.04安装evo:SLAM轨迹评估工具完整部署指南 1. 项目概述为什么我们需要evo在机器人、自动驾驶和SLAM即时定位与地图构建领域评估算法的性能是研发过程中至关重要的一环。我们常常需要回答这些问题我新写的视觉里程计算法其轨迹精度到底如何与开源方案相比我的改进带来了多少提升不同参数配置下算法的稳定性有多大差异如果你还在用肉眼对比两条轨迹的曲线或者手动计算均方根误差那效率就太低了而且不精确。这时一个专业、高效的工具就显得尤为重要。evo就是为此而生的。它是一个用于评估、可视化和处理SLAM轨迹数据的Python工具包支持多种数据格式如TUM、KITTI、EuRoC等能一键生成精度对比图、误差统计表是算法工程师和研究者手中的“瑞士军刀”。然而对于刚接触Ubuntu或Python生态的新手来说在Ubuntu 20.04上安装evo可能会遇到一系列依赖问题、版本冲突甚至因为网络环境导致安装失败。网上的教程质量参差不齐很多步骤已经过时。这篇教程将基于我多次在纯净Ubuntu 20.04系统上部署的经验提供一个详细、完整、且亲测有效的安装指南。我会带你绕过所有常见的“坑”从系统准备到最终验证确保你能一次成功。2. 环境准备与依赖梳理在动手安装之前充分的准备工作能避免后续绝大多数问题。Ubuntu 20.04是一个长期支持版本其默认的软件源和Python环境比较稳定但这也意味着一些较新的库可能需要我们手动处理。2.1 系统更新与基础工具安装首先确保你的系统是最新的。打开终端CtrlAltT执行以下命令sudo apt update sudo apt upgrade -y这个操作会更新软件包列表并升级所有可升级的软件包。虽然耗时但能确保系统底层库的兼容性减少因版本过旧导致的诡异错误。接着安装一些编译和开发必备的工具链sudo apt install -y build-essential cmake git wget curlbuild-essential包含了GCC、G、make等核心编译工具是编译任何C/C扩展的基石。cmake一个跨平台的安装编译工具很多Python包的底层C扩展如后面会用到的pangolin依赖它来构建。git用于从GitHub克隆evo的源代码。wget和curl常用的网络下载工具。注意即使你确信系统里已有部分工具也建议执行此命令。它能确保所有工具都安装到位并且是最新版本避免因缺失某个子组件而导致的编译失败。2.2 Python环境配置pip与虚拟环境Ubuntu 20.04默认安装了Python 3.8。evo主要支持Python 3.6所以默认版本完全够用。我们的首要任务是安装并升级Python的包管理工具pip。sudo apt install -y python3-pip python3 -m pip install --upgrade pip这里使用python3 -m pip而不是直接使用pip命令是为了明确指定使用Python 3的pip防止与可能存在的Python 2的pip混淆。强烈建议使用虚拟环境。虚拟环境能为每个项目创建独立的Python运行环境避免包之间的版本冲突。例如项目A需要numpy 1.19而项目B需要numpy 1.24全局安装只能满足一个虚拟环境则可以完美解决。安装虚拟环境工具并创建专属环境sudo apt install -y python3-venv cd ~ # 切换到你的家目录你也可以在其他路径创建 python3 -m venv evo_env # 创建一个名为evo_env的虚拟环境激活虚拟环境source ~/evo_env/bin/activate激活后你的命令行提示符前通常会显示(evo_env)表示你已经在这个独立环境中了。后续所有pip install操作都只影响这个环境不会干扰系统全局的Python包。3. 核心依赖项的安装与避坑指南evo的安装并非简单地pip install evo因为它依赖一些包含C代码的图形库这些库需要通过系统包管理器apt先行安装或者从源码编译。3.1 系统级依赖安装这些是evo运行和绘图所必需的后端库。sudo apt install -y libeigen3-dev libboost-all-devlibeigen3-dev一个高层次的C模板库用于线性代数、矩阵和向量运算。它是许多SLAM算法和evo内部计算的数学基础。libboost-all-devBoost库的完整开发文件。Boost提供了大量C通用库evo可能在其底层数据处理或文件IO中使用了Boost的某些组件如文件系统、序列化等。接下来是可视化依赖这是最容易出问题的部分。evo使用matplotlib进行绘图而matplotlib需要一个功能性的后端。在无图形界面的服务器如云服务器上需要安装虚拟显示后端在有桌面的环境下也需要确保相关图形库存在。对于有桌面环境的Ubuntu 20.04sudo apt install -y python3-tkpython3-tk是matplotlib常用的GUI后端之一安装后可以正常弹出绘图窗口。3.2 Pangolin的源码编译安装pangolin是一个轻量级的OpenGL显示/交互库被许多SLAM项目如ORB-SLAM, VINS-Mono用于3D轨迹和点云的可视化。evo的可视化功能部分依赖于它。虽然pip可以安装一个纯Python版本的pangolinpip install pangolin但那个版本功能不全无法支持evo的3D可视化。我们必须从源码编译安装。安装Pangolin的依赖sudo apt install -y libgl1-mesa-dev libglew-dev libwayland-dev libxkbcommon-dev wayland-protocols libegl1-mesa-dev libpng-dev libjpeg-dev这些包涵盖了OpenGL驱动libgl1-mesa-dev、OpenGL扩展库libglew-dev、Wayland/X11显示协议支持以及图像编解码库。缺一不可。克隆并编译Pangolincd ~ git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake .. cmake --build . -j$(nproc) # -j$(nproc) 表示使用所有CPU核心并行编译加快速度 sudo cmake --install .cmake ..会检查所有依赖并生成编译配置。如果这一步报错通常是上一步的某个依赖没装好请根据错误信息回溯。sudo cmake --install .会将编译好的库文件和头文件安装到系统目录如/usr/local/lib和/usr/local/include。验证Pangolin安装 安装完成后系统需要刷新动态链接库的缓存sudo ldconfig你可以通过查找库文件来验证ldconfig -p | grep pangolin如果能看到libpangolin.so的相关信息说明安装成功。实操心得编译Pangolin时如果网络不好导致git clone缓慢可以尝试使用镜像源或者先下载源码zip包。另外确保你的cmake版本不要太旧Ubuntu 20.04默认的3.16即可。编译过程如果卡住可以去掉-j$(nproc)参数单线程编译便于观察错误。4. 安装evo及其Python依赖核心系统依赖搞定后安装evo本身反而相对简单。但要注意安装渠道和版本。4.1 通过pip安装evo确保你已经在之前创建的虚拟环境evo_env中命令行提示符前有(evo_env)。然后使用pip从PyPIPython官方包索引安装pip install evo --upgrade--upgrade参数确保安装的是最新版本。pip会自动解析并安装evo的所有Python依赖包括numpy数值计算核心。matplotlib绘图库。scipy科学计算工具用于一些高级统计分析。pandas数据分析库用于处理表格数据。seaborn基于matplotlib的统计图表库让默认图表更美观。pyyaml用于读写YAML配置文件。tqdm在命令行中显示进度条。这个过程会自动进行通常比较顺利。4.2 验证基础安装安装完成后进行一个快速验证python -c import evo; print(evo.__version__)或者直接运行evo的命令行工具evo -h如果能看到evo的版本号和帮助信息恭喜你核心Python包安装成功了。5. 进阶功能支持与完整测试基础的evo命令如evo_ape,evo_rpe,evo_traj现在应该可以工作了。但要发挥其全部威力特别是对更多数据格式的支持和3D可视化还需要一些额外步骤。5.1 安装附加格式支持evo默认支持TUM、KITTI、EuRoC等格式。但如果你想处理ROS中常用的bag文件需要安装ROS相关的插件。由于ROS本身是一个庞大的系统这里提供两种方案方案A你已安装ROS推荐给ROS用户如果你已经在Ubuntu 20.04上安装了ROS Noetic那么可以直接安装evo的ROS扩展pip install evo --upgrade --no-binary evo--no-binary evo强制从源码编译安装这会触发对rospkg等ROS依赖的配置检查从而启用ROS bag支持。方案B仅需读取bag文件轻量级方案如果你没有安装完整的ROS只想读取bag文件可以安装一个精简的替代方案pip install rosbags安装后evo可以通过rosbags库来读取.bag文件无需完整ROS环境。使用时evo会自动尝试调用这个库。5.2 完整的端到端测试理论说得再多不如实际跑一遍。我们用一个最简单的例子测试evo从数据评估到可视化的全流程。下载示例数据 evo的GitHub仓库提供了示例数据。我们直接下载cd ~ wget https://raw.githubusercontent.com/MichaelGrupp/evo/master/test/data/freiburg1_xyz-rgb_traj.txt wget https://raw.githubusercontent.com/MichaelGrupp/evo/master/test/data/freiburg1_xyz-rgb_groundtruth.txt这下载了两个轨迹文件一个估计轨迹一个真实轨迹ground truth。运行轨迹评估 使用绝对位姿误差APE来评估估计轨迹与真实轨迹的差异evo_ape tum freiburg1_xyz-rgb_groundtruth.txt freiburg1_xyz-rgb_traj.txt -va --plottum指定轨迹文件格式为TUM。-va详细输出并对齐Align轨迹。--plot自动弹出结果图表。命令行会输出详细的误差统计包括RMSE均方根误差、均值、中位数等。同时一个matplotlib窗口会打开显示轨迹对比和误差分布图。测试3D可视化 使用evo_traj命令进行3D可视化evo_traj tum freiburg1_xyz-rgb_traj.txt --reffreiburg1_xyz-rgb_groundtruth.txt -p --plot_modexyz--ref指定参考轨迹。-p开启绘图。--plot_modexyz进行3D绘图。如果Pangolin安装成功且环境配置正确这个命令会尝试打开一个3D交互窗口你可以用鼠标拖动旋转视角查看轨迹。如果系统没有图形界面或者Pangolin有问题它会回退到2D的matplotlib绘图。6. 常见问题与排查技巧实录即使按照教程一步步来也可能因为系统差异遇到问题。这里汇总了我踩过的坑和解决方案。6.1 安装阶段问题问题1pip install evo时报错提示“Failed building wheel for evo”或与“pangolin”相关。原因这通常是因为pip尝试从源码构建evo的某些组件但找不到Pangolin。解决首先确保你已经按照第3.2节从源码编译并安装了Pangolin并执行了sudo ldconfig。然后尝试使用--no-binary选项重新安装evo强制它链接到系统已安装的Pangolinpip install evo --upgrade --no-binary evo如果还不行可以临时设置环境变量告知编译器Pangolin的位置假设安装在/usr/localexport CPATH/usr/local/include:$CPATH export LIBRARY_PATH/usr/local/lib:$LIBRARY_PATH export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH然后再运行pip安装命令。问题2import evo时出现ModuleNotFoundError: No module named tkinter原因matplotlib默认使用了需要tkinter的后端但Python的tkinter包未安装。解决安装python3-tk包即可。sudo apt install -y python3-tk问题3在无图形界面的服务器如云服务器上evo绘图报错。原因没有可用的显示设备。解决安装虚拟显示后端并使用Agg这样的非交互式后端。安装xvfbsudo apt install -y xvfb在运行任何evo绘图命令前先启动一个虚拟X服务器Xvfb :99 -screen 0 1024x768x24 export DISPLAY:99告诉matplotlib使用Agg后端不弹出窗口只保存文件 你可以修改matplotlib的配置文件或者在Python脚本/命令行中指定evo_ape tum groundtruth.txt estimate.txt -va --plot --save_plot ./plot.png使用--save_plot参数将图保存为文件而不是显示。6.2 运行阶段问题问题4运行evo_traj进行3D绘图时窗口一闪而过或根本打不开。原因Pangolin的OpenGL环境可能有问题或者系统缺少某些GL驱动。排查先测试一个简单的Pangolin示例程序如果编译Pangolin时保留了examplescd ~/Pangolin/build/examples/HelloPangolin ./HelloPangolin如果这个例子能正常运行出一个旋转的立方体说明Pangolin本身是好的。如果例子也失败可能是显卡驱动问题。尝试安装Mesa的通用OpenGL驱动sudo apt install -y mesa-utils libglu1-mesa-dev运行glxinfo | grep OpenGL version检查OpenGL版本。临时方案如果3D可视化不是必须的可以强制evo使用2D绘图。几乎所有evo命令都支持--plot_mode xy2D俯视图或直接使用-p默认2D。问题5评估结果中RMSE误差极大或者轨迹看起来完全没对齐。原因最常见的原因是轨迹的时间戳没有对齐或者坐标系不一致例如z轴朝上 vs. y轴朝上。解决检查时间戳使用evo_traj先可视化看一下两条轨迹evo_traj tum traj1.txt traj2.txt -p如果它们起点相差十万八千里说明需要时间对齐。在evo_ape或evo_rpe命令中-a或--align参数会进行基于SE(3)的轨迹对齐旋转和平移而-s或--correct_scale会校正尺度对于单目SLAM估计的轨迹很有用。组合使用-as是常见做法。检查坐标系确认你的轨迹文件格式符合evo的要求。例如TUM格式是“时间 tx ty tz qx qy qz qw”。确保没有把位置和四元数的顺序搞错。可以查看evo官网的格式说明。6.3 性能与使用技巧技巧1处理大型轨迹文件时加速默认的绘图和计算对于几万点的轨迹可能较慢。你可以使用--delta参数对轨迹进行下采样evo_ape kitti groundtruth.txt estimate.txt -va --plot --delta 100--delta 100表示每隔100个点取一个点进行计算和绘图能显著提升速度。技巧2生成出版级质量的图片evo的默认绘图样式比较简洁。你可以通过--plot_colormap、--plot_linewidth等参数调整样式或者使用--save_plot保存为SVG或PDF矢量图方便在论文中插入。evo_ape tum groundtruth.txt estimate.txt -va --plot --save_plot comparison.pdf --plot_mode xz --verbose --no_warnings技巧3批量处理多个实验如果你有多次实验的轨迹需要比较可以写一个简单的Shell脚本或Python脚本循环调用evo命令并自动将结果RMSE等汇总到一个CSV文件中便于后续分析。安装和配置evo的过程本质上是对一个Python科学计算生态和特定领域工具链的熟悉过程。一旦成功部署它将成为你算法开发迭代中不可或缺的效率工具。希望这篇详尽的指南能帮你扫清障碍把时间花在更有价值的算法研究和优化上。如果在操作中遇到本教程未覆盖的新问题不妨去evo的GitHub仓库的Issues页面搜索一下很可能已经有解决方案了。
返回列表