第一章:传感器基础与Jetson平台概览

各位同学,欢迎来到《Jetson传感器数据融合与同步实战》的第一课。

说实话,每次带新人入门,我都要先问一个问题:你手头有什么传感器?你准备用哪块Jetson板子?这两个问题搞不清楚,后面的数据融合、时间同步全是空中楼阁。今天我们就先把地基打牢。

1.1 常见传感器类型:你得知道它们是什么脾气

做机器人或者自动驾驶,传感器就是我们的眼睛和耳朵。我这些年摸过的传感器少说也有几十种,但真正常用的,其实就四大类。

1.1.1 IMU(惯性测量单元)

IMU这玩意儿,说白了就是测量加速度和角速度的。它由加速度计和陀螺仪组成,有的还带磁力计。加速度计告诉你「我现在是平躺还是竖着」,陀螺仪告诉你「我在往哪个方向转」。

关键参数:

  • 采样率:常见的有100Hz、200Hz、400Hz。我建议做数据融合时,IMU采样率至少200Hz以上,否则姿态解算会滞后。
  • 量程:加速度计一般±2g到±16g,陀螺仪±250°/s到±2000°/s。做无人机选大量程,做AGV小车选小量程就行。
  • 零偏稳定性:这个参数很关键。我踩过坑——有一次用了个便宜的IMU,零偏漂移严重,卡尔曼滤波怎么调都压不住,最后换了传感器才解决。
我的经验:新手别一上来就买最贵的IMU。先拿MPU6050或者BMI088练手,成本低,资料多。等搞懂了数据融合的流程,再上工业级的ADIS16470或者Xsens。

1.1.2 GPS(全球定位系统)

GPS提供绝对位置信息,但精度嘛……看价格。民用单频GPS误差在2-5米,RTK(实时动态差分)可以做到厘米级。

关键点:

  • 更新率:普通GPS是10Hz,RTK能做到20Hz。但注意,GPS更新率远低于IMU,所以融合时要用IMU做高频预测,GPS做低频修正。
  • 信号遮挡:我在隧道、高架桥下吃过亏——GPS信号一丢,位置直接飞掉。所以一定要和IMU、轮速计做组合导航。
  • 坐标系:GPS输出的是WGS-84经纬度,要转成UTM或者局部笛卡尔坐标系才能用。这个后面章节会细讲。

1.1.3 激光雷达(LiDAR)

激光雷达是现在自动驾驶和机器人的标配。它通过发射激光束测量距离,生成点云数据。

常见类型:

  • 单线激光雷达:比如RPLIDAR A1/A2,只扫一个平面,适合做SLAM建图和避障。便宜,几百块。
  • 多线激光雷达:比如Velodyne VLP-16(16线)、Ouster OS1(64线)。能扫出3D点云,但价格感人,动辄几万。
  • 固态激光雷达:比如Livox Mid-40,没有旋转部件,寿命长,但视场角小一些。
注意:激光雷达的数据量很大。16线雷达每秒产生30万个点,处理不好CPU直接拉满。我建议在Jetson上先用硬件加速(比如Orin的DLA)做点云预处理,别一股脑全扔给CPU。

1.1.4 摄像头

摄像头提供最丰富的视觉信息,但也是最难处理的传感器。光照变化、运动模糊、遮挡……问题一大堆。

关键参数:

  • 分辨率:640x480够用,1920x1080更好。但分辨率越高,处理延迟越大。我一般用1280x720做视觉SLAM,平衡了精度和速度。
  • 帧率:30fps是底线,60fps更好。做目标检测时,帧率太低会导致漏检。
  • 快门类型:全局快门比卷帘快门好。卷帘快门在快速运动时会产生果冻效应,IMU和图像时间戳对不齐,融合起来很头疼。

1.2 Jetson系列硬件对比:选对板子,事半功倍

Jetson是NVIDIA推出的嵌入式AI计算平台。我这些年用过Nano、TX2、Xavier NX,到现在的Orin系列。每个型号都有自己的定位。

型号 AI算力 内存 功耗 适用场景
Jetson Nano 472 GFLOPS 4GB 5-10W 入门学习、简单视觉处理
Jetson TX2 1.33 TFLOPS 8GB 7.5-15W 无人机、小型机器人
Jetson Orin NX 70 TOPS 8/16GB 10-25W 多传感器融合、实时SLAM
Jetson Orin AGX 275 TOPS 32/64GB 15-60W 自动驾驶、高端机器人

我的建议:

  • 如果你是学生或者刚入门,买一块Jetson Nano就够了。跑跑ROS2、调调IMU和摄像头,完全够用。别一上来就上Orin,浪费钱。
  • 如果你要做多传感器融合(IMU+GPS+LiDAR+摄像头),至少上Orin NX 16GB。Nano的内存太小,跑个点云处理就爆了。
  • 如果你要做自动驾驶或者高端机器人,直接上Orin AGX。算力管够,省心。
避坑指南:我曾经用TX2跑一个多线激光雷达+IMU+摄像头的融合项目,结果CPU占用率长期在90%以上,动不动就掉帧。后来换了Orin NX,同样的算法,CPU占用率降到40%。所以,算力这东西,宁可多不能少。

1.3 Jetson系统环境初始化:从零开始搭环境

拿到一块新的Jetson板子,第一件事就是刷系统。我习惯用NVIDIA官方的SDK Manager,省事。

1.3.1 刷机步骤

  1. 下载并安装NVIDIA SDK Manager(需要Ubuntu主机)。
  2. 用USB线连接Jetson板子和主机,给板子上电(进入强制恢复模式)。
  3. 在SDK Manager中选择对应的Jetson型号和JetPack版本。
  4. 选择要安装的组件:我一般全选——CUDA、cuDNN、TensorRT、OpenCV、ROS2(如果支持的话)。
  5. 点击安装,等20-30分钟。嗯,去喝杯咖啡吧。
小技巧:刷机时一定要用原装电源。我见过有人用普通手机充电器给Orin供电,刷到一半直接断电,板子变砖。后来用跳线恢复才救回来。

1.3.2 安装ROS2

我们这门课主要用ROS2(Humble或Foxy版本)。Jetson上安装ROS2有两种方式:

  • 方法一:用SDK Manager直接勾选ROS2组件。最简单,但版本可能不是最新的。
  • 方法二:手动安装。我推荐这个,因为可以自己控制版本和依赖。

手动安装命令如下:

# 设置locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 安装ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop

# 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

1.3.3 验证环境

装完之后,跑个小例子验证一下:

# 终端1:启动talker
ros2 run demo_nodes_cpp talker

# 终端2:启动listener
ros2 run demo_nodes_py listener

如果能看到「I heard: Hello World」之类的输出,恭喜你,环境搭好了。

注意:Jetson的ARM架构和x86不一样,有些ROS2包可能没有预编译版本。遇到这种情况,别慌,用colcon build --symlink-install从源码编译。我编译过几次,虽然慢,但都能成功。

1.4 本章小结

这一章我们聊了四大传感器的脾气秉性,对比了Jetson各型号的定位,最后手把手搭好了开发环境。说白了,传感器是硬件基础,Jetson是计算核心,ROS2是软件框架——这三样搞定了,后面的数据融合才有得玩。

下一章,我们会深入IMU的数据读取和预处理。到时候我会分享一个我踩过的坑——IMU的零偏校准没做好,导致整个融合系统发散。嗯,到时候细说。

课后作业:
  1. 列出你手头有的传感器类型和型号。
  2. 在Jetson上完成ROS2安装,并运行talker/listener示例。
  3. 思考:如果你的项目需要同时使用IMU和摄像头,你会如何选择Jetson型号?为什么?

好了,今天就到这里。有问题随时交流。