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是最稳妥的选择。
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
--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 知识体系总览
下面这张图概括了本章的核心内容:
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/
好了,环境搭好了,工具链齐了。下一章我们就要真刀真枪地处理轨迹数据了。到时候你会发现,今天花这十几分钟装环境,绝对值。