4、Python环境搭建与工具链:NumPy、SciPy、Matplotlib、evo、pytransform3d库安装与简介

做SLAM轨迹评估,说白了就是跟数据打交道。你手里有几十万帧的位姿数据,要算误差、画曲线、做可视化。这时候Python就是最趁手的工具。我个人习惯用Anaconda来管理环境,省心,不容易把系统搞乱。

嗯,这里要注意:千万别图省事直接在base环境里装一堆包。我见过太多人因为依赖冲突,最后把整个Python搞崩了。老老实实建个虚拟环境,花不了两分钟。

4.1 环境搭建:从零开始

先装Anaconda,这个没什么好说的。装完之后,打开终端(Windows用户用Anaconda Prompt),敲下面这行:

conda create -n slam_eval python=3.8 -y
conda activate slam_eval

为什么选Python 3.8?不是3.9也不是3.10?我在项目里踩过坑——evo这个库对3.9以上的支持不太好,有些依赖包还没跟上。3.8是最稳妥的选择。

小提示:如果你用的是M1/M2芯片的Mac,记得装miniforge而不是Anaconda。原生支持ARM架构,省去一堆兼容性问题。

4.2 核心科学计算库:NumPy & SciPy

这两个是SLAM轨迹评估的基石。NumPy处理矩阵运算,SciPy提供各种数学工具。

pip install numpy scipy

装完之后,我建议你立刻验证一下:

import numpy as np
print(np.__version__)  # 应该看到 1.24.x 或类似版本

# 快速测试:创建一个旋转矩阵
R = np.array([[0, -1, 0],
              [1,  0, 0],
              [0,  0, 1]])
print("旋转矩阵的行列式:", np.linalg.det(R))  # 应该接近1.0

为什么会强调这个?我曾经在项目里遇到过一个坑——有人用了一个旧版本的NumPy,结果np.linalg.det()在计算某些特殊矩阵时精度有问题,导致后续的轨迹对齐全错了。所以版本一定要确认好。

4.3 可视化利器:Matplotlib

画轨迹图、误差图、散点图,都靠它。安装很简单:

pip install matplotlib

我个人习惯把绘图配置写在脚本开头:

import matplotlib.pyplot as plt

# 设置中文字体,避免乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 设置全局绘图风格
plt.style.use('seaborn-v0_8-whitegrid')

嗯,这里有个坑:如果你在Linux服务器上跑,可能没有SimHei字体。我一般用plt.rcParams['font.family'] = 'DejaVu Sans'作为备选。

4.4 SLAM评估专用工具:evo

evo是SLAM轨迹评估的标配。它封装了ATE(绝对轨迹误差)和RPE(相对位姿误差)的计算,还自带可视化功能。

pip install evo

装完之后,你可以用命令行快速验证:

evo_ape --help

如果看到帮助信息,说明装好了。我曾经遇到过一个情况——evo装上了,但运行时报错说缺少pandas。这是因为evo的某些依赖没自动装上。解决办法:

pip install evo --upgrade --no-deps
pip install pandas scikit-learn
警告:evo的默认安装可能会拉取旧版本的NumPy。建议先装NumPy再装evo,或者用--no-deps参数手动管理依赖。

4.5 3D变换可视化:pytransform3d

这个库可能有些人不太熟,但它在可视化坐标系、旋转、平移变换时特别好用。

pip install pytransform3d

来看个简单的例子——画一个坐标系:

import pytransform3d.visualizer as pv

fig = pv.figure()
fig.plot_basis(scale=0.5)  # 画一个长度为0.5的坐标系
fig.view_init(elev=30, azim=45)
fig.show()

你想想看,在调试SLAM算法时,能直观看到两个坐标系之间的相对位姿,是不是比看一堆数字舒服多了?

4.6 知识体系总览

下面这张图概括了本章的核心内容:

SLAM轨迹评估Python工具链 Python 3.8 + Anaconda NumPy 矩阵运算、线性代数 旋转矩阵、四元数 SciPy 优化、插值、滤波 轨迹对齐(Umeyama) Matplotlib 轨迹图、误差图 散点图、柱状图 evo ATE、RPE计算 轨迹对齐、可视化 pytransform3d 3D坐标系可视化 变换矩阵调试 核心原则:虚拟环境隔离 + 版本锁定 + 逐库验证

4.7 一键安装脚本

为了方便,我整理了一个安装脚本。你直接复制到终端运行就行:

# 创建并激活环境
conda create -n slam_eval python=3.8 -y
conda activate slam_eval

# 安装核心库
pip install numpy==1.24.3
pip install scipy==1.10.1
pip install matplotlib==3.7.1
pip install pandas==1.5.3

# 安装SLAM专用工具
pip install evo==1.12.0
pip install pytransform3d==2.4.0

# 验证安装
python -c "import numpy; print('NumPy:', numpy.__version__)"
python -c "import scipy; print('SciPy:', scipy.__version__)"
python -c "import matplotlib; print('Matplotlib:', matplotlib.__version__)"
python -c "import evo; print('evo:', evo.__version__)"
python -c "import pytransform3d; print('pytransform3d:', pytransform3d.__version__)"
重要提醒:版本号不是随便写的。我测试过,上面这组版本搭配能完美兼容,不会出现依赖冲突。如果你非要尝鲜用最新版,出了问题别来找我(笑)。

4.8 常见问题与避坑

  • 装evo时卡住? 试试先装pip install cython,再装evo。有些依赖需要Cython编译。
  • Matplotlib中文乱码? 检查系统是否有中文字体。没有的话,用plt.rcParams['font.family'] = 'sans-serif'配合plt.rcParams['font.sans-serif'] = ['SimHei']。
  • pytransform3d报错说缺OpenGL? 在Linux上需要sudo apt-get install freeglut3-dev。Windows和Mac一般不用管。
  • Anaconda下载太慢? 换清华镜像源:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

好了,环境搭好了,工具链齐了。下一章我们就要真刀真枪地处理轨迹数据了。到时候你会发现,今天花这十几分钟装环境,绝对值。

可可精品资料库