4. 标定环境与工具链搭建
传感器标定的精度上限,往往在写第一行标定代码之前就已经被环境决定了。一个典型的 NVIDIA DRIVE 标定工作台,需要同时满足四类约束:底层算力与驱动(GPU、CUDA、TensorRT)、中间件与算法框架(DRIVE SDK / DriveWorks)、数据与消息通道(相机、LiDAR、CAN、ROS 桥接),以及物理参照物(标定板与靶标)。本节按“从下到上、从软到硬”的顺序,把这套工具链搭起来,并给出可直接对照的版本与参数示例。
一、工具链的分层关系
先建立整体认知:DRIVE SDK 是面向 DRIVE 平台(如 DRIVE AGX Orin/Xavier)的板端软件栈,包含驱动、固件、传感器抽象层与安全相关组件;DriveWorks 是构建在其上的 SDK,提供传感器标定、里程计、目标检测、点云处理等模块化 API;CUDA 与 TensorRT 负责把标定中的重投影、点云配准、神经网络推理放到 GPU 上;ROS/ROS 2 桥接则把车端数据流与上位机标定工具、可视化(如 RViz)连接起来。它们不是并列关系,而是有明确的依赖方向。
二、软件环境搭建要点
在 DRIVE AGX 开发板上,DRIVE SDK 通常以 BSP(Board Support Package)形式刷写,版本必须与 DriveWorks 严格对应。例如 DRIVE OS 6.0.6 对应 DriveWorks 5.8,混用版本会导致标定模块加载失败。刷机后先确认基础环境:
# 查看 DRIVE OS 版本
cat /etc/nv_tegra_release
# 确认 CUDA 与 TensorRT
nvcc --version
dpkg -l | grep tensorrt
# 检查 DriveWorks 安装路径
ls /usr/local/driveworks-5.8/
DriveWorks 的标定能力集中在 dw::calibration 命名空间,相机内参标定使用 CameraIntrinsicsCalibrator,相机- LiDAR 外参使用 CameraLidarCalibrator。上位机侧建议安装 CUDA Toolkit 12.x 与对应驱动,用于离线跑重投影误差计算和点云配准验证。ROS 桥接方面,DRIVE 平台通过 driveworks_ros 或自研 bridge 节点把 dwSensor 数据发布为 sensor_msgs/Image、sensor_msgs/PointCloud2 和 sensor_msgs/Imu,时间戳统一使用 PTP 或 GPS 秒脉冲对齐,否则后续外参求解会出现系统性偏差。
ros2 topic hz 和 ros2 topic delay 检查各传感器话题的实际频率与延迟,确认相机 30 Hz、LiDAR 10 Hz、IMU 100 Hz 的典型配置是否稳定,延迟抖动应控制在单帧周期以内。三、标定板与靶标选择
标定板的选择直接决定标定精度和可重复性。相机内参标定常用棋盘格或圆点阵列:棋盘格角点检测精度高,适合焦距、主点、畸变系数求解;圆点阵列对模糊和光照更鲁棒,适合广角或鱼眼相机。相机-LiDAR 外参标定则需要同时被相机和 LiDAR 清晰观测的靶标,常见方案有三类:
- 棋盘格 + 平面板:LiDAR 扫描平面得到点云平面,相机检测角点,通过平面约束求解外参。成本低,但需要多姿态采集。
- ArUco / AprilTag 靶标:提供唯一 ID 和 6DoF 位姿,适合多相机与 LiDAR 联合标定,检测稳定,适合自动化流程。
- 专用立体靶标:如带孔洞的 V 型板或球形靶标,LiDAR 点云特征更明显,适合远距离或低分辨率 LiDAR。
尺寸选择上,棋盘格方格边长建议为相机视场中靶标成像宽度的 1/10 左右。以 1920×1080、60° 水平 FOV 的相机为例,若靶标距离 3 m,成像宽度约 3.4 m,则方格边长取 30~40 mm 较合适。LiDAR 标定靶标尺寸应保证在 10 m 处仍有至少 5~8 个激光点落在靶标平面上,常见 1 m × 1 m 的平面板配合 0.8 m 棋盘格是工程中较稳妥的组合。
四、环境验证与标定前检查
工具链搭好后,不要直接进入正式标定,先做一次“空跑”验证:用 DriveWorks 的 sample 程序读取一路相机和一路 LiDAR,确认数据能正常回调;用 ROS 桥接发布话题,在 RViz 中确认图像与点云空间关系大致正确;再用一张已知尺寸的棋盘格做单相机内参标定,观察重投影误差是否收敛到 0.3 像素以内。若误差偏大,优先排查镜头畸变模型选择、标定板平整度和采集姿态覆盖是否充分,而不是急于调整外参。