第1章:环境搭建与数据准备

做自动驾驶定位,第一件事不是调算法,而是把环境搭好。

我见过太多人,代码写得挺漂亮,结果一跑就报错——库版本冲突、Python环境乱成一锅粥。嗯,这其实完全可以避免。今天我们就从零开始,把开发环境收拾利索,再聊聊两个最常用的开源数据集。

1.1 Python虚拟环境配置

为什么非要用虚拟环境?说白了,就是隔离依赖。

你想想看,项目A需要numpy 1.19,项目B需要numpy 1.24。如果你直接在系统Python里装,早晚会出问题。我个人习惯,每个项目都建一个独立的虚拟环境,干净、可控、好管理。

推荐方案:使用 venv 或 conda

如果你只是做纯Python开发,venv 就够了。轻量、内置、不折腾。

# 创建虚拟环境
python -m venv urban_tracking_env

# 激活环境(Windows)
urban_tracking_env\Scripts\activate

# 激活环境(macOS/Linux)
source urban_tracking_env/bin/activate

如果你还要处理C++扩展、CUDA之类的,我建议直接用 conda。它不仅能管Python包,还能管系统级的库。

# 创建conda环境
conda create -n urban_tracking python=3.9

# 激活
conda activate urban_tracking
我的小习惯:环境名用项目缩写 + python版本,比如 urban_track_py39。这样一看就知道是干什么的。

1.2 依赖库安装

环境激活后,就该装库了。我们这个课程主要依赖以下几个库:

库名 版本建议 用途
numpy ≥1.21 数值计算、矩阵运算
pandas ≥1.3 数据读取、结构化处理
matplotlib ≥3.4 可视化、轨迹绘制
geopandas ≥0.10 地理空间数据处理

安装命令很简单,一行搞定:

pip install numpy pandas matplotlib geopandas
我曾经踩过的坑:geopandas 依赖 GDAL 和 Fiona,Windows 下经常装不上。后来我发现,先装 pip install wheel,再装 geopandas,成功率会高很多。如果还不行,去 Christoph Gohlke 的页面 下载对应的 .whl 文件手动安装。

装完之后,验证一下:

python -c "import numpy; print(numpy.__version__)"

如果没报错,说明环境已经就绪。

1.3 开源数据集介绍

数据是定位算法的粮食。没有好的数据,再牛的模型也白搭。目前业界最常用的两个数据集,一个是 nuScenes,一个是 KITTI。我分别说说它们的特点。

1.3.1 nuScenes

nuScenes 是 Motional 公司(原 nuTonomy)发布的。它最大的特点是——全。全到什么程度?

  • 1000 个场景,每个场景 20 秒
  • 6 个摄像头、5 个雷达、1 个激光雷达
  • GPS + IMU 数据齐全
  • 覆盖波士顿、新加坡两个城市

我个人特别喜欢 nuScenes 的一点是:它提供了 精标注的 3D 边界框,而且标注频率是 2Hz。这意味着你可以用它来做高精度的轨迹评估。

数据格式方面,nuScenes 用的是自己的 nuscenes-devkit 工具包。安装方式:

pip install nuscenes-devkit

加载数据也很直观:

from nuscenes import NuScenes

nusc = NuScenes(version='v1.0-trainval', dataroot='/data/nuscenes', verbose=True)
注意:nuScenes 的数据集体积很大,完整版大约 300GB。如果你只是学习,可以只下载 mini 版(约 5GB),足够跑通流程。

1.3.2 KITTI

KITTI 是卡尔斯鲁厄理工学院和丰田美国研究院联合发布的。它比 nuScenes 更早,2012 年就出来了,但至今仍是定位领域的标杆数据集。

KITTI 的特点:

  • 使用 Velodyne HDL-64E 激光雷达
  • 提供 11 个序列的 GPS/IMU 真值
  • 数据量相对较小(约 20GB)
  • 适合做轨迹精度评估(ATE、RPE)

KITTI 的数据格式比较原始,没有统一的 SDK。你需要自己解析 oxts 文件(GPS/IMU 数据)和 velodyne 点云文件。

我一般这样读取 KITTI 的 GPS 数据:

import numpy as np

def load_oxts(file_path):
    data = np.loadtxt(file_path)
    # 每行包含:lat, lon, alt, roll, pitch, yaw, vn, ve, vf, vl, vu, ...
    return data
避坑指南:KITTI 的 GPS 数据是 WGS84 经纬度格式,不能直接用来算距离。你需要先转成 UTM 坐标系。我曾经因为忘了这一步,算出来的轨迹误差大了两个数量级……嗯,后来再也不敢偷懒了。

1.4 知识体系总览

这一章的内容,其实就三块:环境、库、数据。它们之间的关系,我画了一张图:

第1章:环境搭建与数据准备 · 知识体系 Python虚拟环境 venv / conda 依赖库安装 numpy / pandas / matplotlib / geopandas 开源数据集 nuScenes / KITTI python -m venv conda create pip install 版本兼容性检查 nuScenes-devkit KITTI oxts解析 目标:搭建可复现的轨迹评估开发环境

这张图把本章的核心脉络串起来了。你先把环境搭好,库装齐,数据下载好,后面写代码的时候就不会被环境问题卡住。

1.5 本章小结

这一章我们做了三件事:

  • 用 venv 或 conda 创建了独立的 Python 虚拟环境
  • 安装了 numpy、pandas、matplotlib、geopandas 四个核心库
  • 了解了 nuScenes 和 KITTI 两个数据集的特点和读取方式

环境搭好了,数据也认识了。下一章,我们就开始真正动手——读取轨迹数据,看看它长什么样。


可可精品资料库