👁️ 机器人感知专题:相机、激光雷达与点云

面向已有 ROS2 基础、想系统搞懂「机器人怎么看世界」的读者:从针孔相机模型、深度相机原理,到机械式/固态激光雷达,再到点云滤波、分割、配准与融合,并落到宇树、智元、Figure 等真机传感器方案
相机标定 深度相机 激光雷达 点云处理 PCL/Open3D 感知融合 ROS2 PointCloud2
🎯 本页学习目标
1. 能说出针孔相机模型的四大内参(fx、fy、cx、cy)与畸变系数(k1~k3、p1~p2)分别「管什么」,并复述棋盘格/ChArUco 标定的基本流程
2. 能对比结构光、ToF、双目视差三种深度相机原理的精度、量程、抗光性,并说出 RealSense 与 Orbbec 各自主力型号的定位
3. 能区分机械式/固态/混合固态激光雷达,解释「线数」与「近密远疏」的点云特性,说出速腾、禾赛、镭神、览沃的代表产品线
4. 能用 Open3D/PCL 独立完成一条点云流水线:体素降采样 → 直通/半径滤波 → RANSAC 地面分割 → 欧式/DBSCAN 聚类 → 法线与 BBox 提取
5. 能解释 ICP/NDT 配准、点云到占据栅格/代价地图的衔接,以及激光-相机联合标定的核心思路
6. 能说出人形机器人上相机 + 激光雷达融合、语义感知的基本套路,并列举点云带宽、时间同步、外参漂移三大常见坑
建议用时:约 50 分钟(含动手跑通一个点云 demo)

1 感知总览:人形机器人怎么「看世界」

感知(Perception)回答的是机器人与物理世界之间的第一层问题:我周围有什么、它们在哪、长什么样、能不能走、能不能抓。上一页(04-06 视觉 SLAM)讲的是「我在哪、地图长什么样」,本页往下钻一层,讲「这些信息最初是怎么从传感器里被测量、被处理、被融合出来的」

1.1 人形机器人的典型传感器配置

一台完整的人形机器人,通常在头部集中布置主传感器(视野与人眼对齐,兼顾环视),在躯干放 IMU,在脚底/关节放编码器与力传感器。典型清单如下:

传感器典型安装位置测量输出在感知里的角色
RGB-D 深度相机头部(双眼位)彩色图 + 逐像素深度近距离物体识别、抓取、室内建图的主力
3D 激光雷达 LiDAR头部/躯干顶部三维点云(距离 + 角度)远距离、全天候避障与几何建图
RGB 相机(单目/广角/鱼眼)头部、背部、手部彩色图像语义识别、目标检测、远程遥操作视角
IMU(惯性测量单元)躯干(质心附近)三轴角速度 + 加速度高频姿态、跌倒检测、与视觉/雷达融合
麦克风阵列头部环形布置多路音频语音交互、声源定位(判断「谁在说话、在哪」)
关节编码器 / 足底力传感器全身关节、脚底角度 / 力本体感知(proprioception),与外部感知互补

1.2 感知任务分类:同一份数据,五件事

💡 一条主线:所有感知任务最终都归结为「把传感器数据变换到同一个坐标系下、给出带几何 + 语义信息的可靠表达」。相机给「颜色 + 近距离深度」,LiDAR 给「远距离几何」,两者互为补充——这就是后面要讲的融合的动机。

2 相机模型:针孔、内外参与畸变

相机是感知的地基。几乎所有视觉算法都假设相机可以用针孔模型(pinhole model)近似:三维空间点 P 通过光心投影到成像平面上。理解了内参、外参、畸变三件事,读任何视觉代码都不会再被矩阵吓住。

2.1 内参:从「米」到「像素」

内参矩阵 K 把相机坐标系下的三维点投影到像素坐标:

K = [ fx 0 cx ]
[ 0 fy cy ]
[ 0 0 1 ]

2.2 外参:从「世界」到「相机」

外参描述相机本体在世界坐标系(或机器人基座坐标系)中的位置与朝向,是一个 [R | t] 变换:P_cam = R · P_world + t。其中 R 是 3×3 旋转矩阵, t 是 3×1 平移向量。对机器人而言,外参就是「相机装在头上哪个位置、朝哪看」——它把相机测量对齐到机器人坐标系,是后面激光-相机联合标定、手眼标定的核心对象。

2.3 畸变:镜头不完美造成的弯曲

类型系数成因与表现
径向畸变(Radial)k1、k2、k3镜片是曲面,光线离中心越远偏折越强;表现为「桶形」(广角)或「枕形」(长焦)
切向畸变(Tangential)p1、p2镜片与成像平面装配不平行;表现为画面一侧被「拉伸」

工程上常用 Brown-Conrady 模型把两者写成一组多项式:dist = [k1, k2, p1, p2, k3]。做标定的目标就是解出这组系数,之后用 cv2.undistort 把图像「拉直」。

2.4 相机标定:原理与工具

标定的经典方法是张正友标定法:用一张已知几何尺寸的平面标定板,从多个角度拍若干张图,通过「已知角点世界坐标 ↔ 检测到的角点像素坐标」这一堆对应关系,解出内参 K 和畸变系数。两张常见标定板:

ROS2 里最方便的是 camera_calibration 包的标定器;纯视觉则用 OpenCV。先跑标定器,再拿着板子多角度移动:

# ROS2 棋盘格标定(9x6 内角点,格子边长 0.025 m)
ros2 run camera_calibration cameracalibrator \
    --size 9x6 --square 0.025 --k 4 --r 4 \
    image:=/camera/image_raw

# OpenCV(Python)标定核心流程
import cv2, numpy as np
objp = np.zeros((9*6, 3), np.float32)
objp[:, :2] = np.mgrid[0:9, 0:6].T.reshape(-1, 2)   # 世界坐标角点
objpoints, imgpoints = [], []                       # 逐图检测角点并 append
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(
    objpoints, imgpoints, gray.shape[::-1], None, None)
# mtx = 内参 K;dist = 畸变 [k1,k2,p1,p2,k3]
⚠️ 标定质量决定系统下限:标定板要平整、反光要弱、要多角度(尤其要覆盖画面边缘)。标定结果里 ret 是平均重投影误差,越小越好;如果畸变系数大得离谱,先检查角点检测有没有错位。

3 深度相机:结构光 / ToF / 双目

普通 RGB 相机只能得到「每个像素是什么颜色」,不知道「每个像素有多远」。深度相机(RGB-D)额外输出一张深度图(depth map)——每个像素对应一个真实距离。得到深度有三条主流技术路线,各有优劣:

原理怎么测距优点短板代表型号
结构光(Structured Light)投射已知图案(散斑/条纹),图案形变反推深度近距离精度高、成本低、帧率高怕强阳光(图案被冲淡)、量程短、反光表面失效Kinect v1、RealSense SR300、Orbbec Astra
ToF(Time of Flight)发射调制红外光,测往返时间/相位差深度均匀、抗环境光较好、无纹理依赖多径干扰、边缘「飞点」、分辨率略低Azure Kinect、Orbbec Femto Bolt、RealSense L515
双目视差(Stereo)左右两相机视差 + 三角测距被动测距、可室外、量程可调(靠基线)依赖纹理,白墙弱纹理失效;近距离精度受基线限制RealSense D435/D455、Orbbec Gemini 2/330、ZED 2i

注:RealSense D435/D455 是「主动红外点阵投影 + 双目」的混合方案——红外点阵给弱纹理场景「人造纹理」,再由双目视差计算深度,因此室内弱纹理也能工作。

3.1 RealSense 与 Orbbec 主力型号速览

型号厂商原理一句话定位
D435 / D435iIntel主动红外双目机器人入门标配;D435i 内置 IMU,常作人形头部深度相机
D455Intel主动红外双目D435 升级版:更长基线、更宽视场,中远距离精度更好
L515IntelToF体积小、功耗低,近距高精度,适合桌面/近场操作
Gemini 2 / 330 系列Orbbec双目高性价比双目,330 系列为 2024 年新品,ROS2 支持好
Femto BoltOrbbecToFAzure Kinect 兼容形态,适合「Kinect 生态」迁移
Femto MegaOrbbecToF集成 NVIDIA 计算单元,端侧深度 + 推理一体
💡 选型直觉:室内人形头部主深度相机,主流是「双目/主动双目」类(D435i、Gemini 330)——兼顾室内精度与成本;若追求远距离抗光或户外,再上 ToF 或 LiDAR。深度相机的主动光都怕强阳光与镜面/黑体表面,这是共性短板。

4 激光雷达:机械式、固态与线数

LiDAR(Light Detection and Ranging,激光雷达)主动发射激光脉冲,测量「光线飞出去再弹回来的时间」得到距离,再配上发射角度,拼出三维点云。它不依赖环境光照、测距远、精度高,是避障与几何建图的「硬通货」。

4.1 三类结构:机械式 / 固态 / 混合固态

4.2 单线 vs 多线:线数决定「立体程度」

线数指垂直方向同时有多少条扫描线:单线只能扫一个平面(得到 2D 数据,用于平面建图/避障);多线(16/32/64/128 线)垂直堆叠多束激光,直接得到 3D 点云。线数越多、垂直分辨率越高,但点云数据量、功耗、价格也同步上涨。

线数典型用途数据量与算力需求
单线(2D)扫地机、AGV 平面避障、2D SLAM极低,嵌入式即可
16 线轻量 3D 感知、低速移动机器人较低,数十万点/秒
32 线服务机器人、园区巡检中等,~百万点/秒量级
64 线Robotaxi、重载移动平台较高,需降采样处理
128 线L4 自动驾驶、高端科研平台很高,百万级点/秒,强依赖 GPU

4.3 测距原理与点云特性

4.4 主要厂商产品线(数据经联网核实,约 2025~2026)

厂商代表产品线结构 / 线数定位
速腾聚创 RoboSenseRS-LiDAR-16、RS-Helios、RS-Ruby机械式;16 / 32 / 128 线机器人到 Robotaxi 全覆盖,RS-Ruby 为 128 线高端
禾赛 HesaiPandar64 / Pandar128、QT128、AT128、XT16 / XT32Pandar 机械式、AT 转镜式、XT 机器人线Pandar128 为 128 线「机皇」;AT128 车规半固态;XT 面向机器人/工业
镭神智能 LeiShenC16、C32、LS 系列、CH 混合固态机械式 16 / 32 线 + 混合固态国产高性价比,多用于 AGV/巡检/测绘
大疆览沃 LivoxMid-40 / Mid-70、Mid-360、HAP棱镜非重复扫描(混合固态)Mid-360 体积小、重量轻,是人形机器人头部常见选择
思岚 SLAMTECRPLIDAR A1/A2/A3、S 系列单线 2D(三角/ToF)2D 建图避障的入门性价比之选
💡 Livox Mid-360 为什么常见于人形头部:它用非重复扫描——每帧光斑位置不固定,随时间累积可「填满」视场,得到比同价位机械式更细的等效分辨率;水平 360°、重量约 265 g(官方数据,约),适合装在头顶而不破坏整机重心。具体参数以 Livox 官方规格页 为准。

5 点云处理:格式、库与核心算法

点云是 LiDAR 与深度相机的共同产物——一堆带坐标(x, y, z)的点,可能还带强度(intensity)、颜色(rgb)、法线(normal)等属性。处理点云,本质上是「在无序、稀疏、带噪声的离散点上,提取结构与语义」。

5.1 三种数据格式

格式来源特点
PCD(Point Cloud Data)PCL 原生头文件 + 数据体,支持 ASCII/二进制;字段可自定义(x/y/z/intensity/rgb)
PLY(Polygon File Format)斯坦福,通用 3D点 + 面,兼容性好,常用于扫描仪与网格软件
sensor_msgs/PointCloud2ROS2二进制消息,靠 fields/point_step/row_step 描述点布局,是 ROS2 感知的标准载体

ROS2 里点云在话题上以 sensor_msgs/msg/PointCloud2 传输,常用命令:

ros2 topic echo /points --field data          # 看原始点云(数据量大,慎用)
ros2 topic hz /points                          # 看点云发布频率
ros2 run pcl_ros pointcloud_to_pcd input:=/points   # 存成 .pcd 文件离线处理

5.2 两大处理库:PCL 与 Open3D

5.3 核心算法一条龙(附代码)

处理原始点云的标准套路:先降采样 + 去噪,再分割地面,再对非地面点聚类,最后对每个簇提特征/框。用 Open3D(Python)串起来:

import open3d as o3d
import numpy as np

pcd = o3d.io.read_point_cloud("scene.pcd")
pcd = pcd.voxel_down_sample(voxel_size=0.05)          # ① 体素降采样
pcd, _ = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)  # ② 统计滤波去噪

# ③ RANSAC 拟合平面(通常就是地面)
plane_model, inliers = pcd.segment_plane(distance_threshold=0.03,
                                         ransac_n=3, num_iterations=1000)
[a, b, c, d] = plane_model
ground = pcd.select_by_index(inliers)                 # 地面点
obstacles = pcd.select_by_index(inliers, invert=True) # 非地面 = 障碍物

# ④ DBSCAN 聚类(把障碍物分成一个个物体)
labels = np.array(obstacles.cluster_dbscan(eps=0.3, min_points=10))
max_label = labels.max()
print(f"聚类出 {max_label + 1} 个物体")

对应的 PCL(C++)经典写法(思路完全一致):

#include <pcl/filters/voxel_grid.h>
#include <pcl/segmentation/sac_segmentation.h>
pcl::VoxelGrid<pcl::PointXYZ> vg;
vg.setInputCloud(cloud);
vg.setLeafSize(0.05f, 0.05f, 0.05f);
vg.filter(*cloud_filtered);                          // 体素降采样

pcl::SACSegmentation<pcl::PointXYZ> seg;
seg.setModelType(pcl::SACMODEL_PLANE);               // RANSAC 平面
seg.setMethodType(pcl::SAC_RANSAC);
seg.setDistanceThreshold(0.03);
seg.setInputCloud(cloud_filtered);
seg.segment(*inliers, *coefficients);                // 地面内点
算法解决什么一句话原理
体素降采样 VoxelGrid点太多、密度不均把空间切成小立方体,每格用一个质心点代表
直通滤波 PassThrough只关心某范围按 x/y/z 轴区间裁剪点
半径/统计滤波孤立噪点邻域点太少(半径)或偏离均值太远(统计)就删
RANSAC 平面分割找地面随机抽 3 点拟平面,统计支持点数,迭代取最优
欧式聚类 / DBSCAN把点分成「物体」距离小于阈值(eps)的点归为一簇
法线估计表面朝向邻域点做 PCA,最小特征值方向即法线
BBox 提取物体外包盒AABB 轴对齐框 / OBB 主轴方向框(惯性矩法)

6 配准、占据栅格与多传感器标定

6.1 点云配准:ICP 与 NDT

配准(Registration)求解两帧点云之间的刚体变换,让它们「对齐」。经典两招:

💡 经验:先粗配准(NDT 或特征配准)给个大致初值,再细配准(ICP)精修。SLAM 前端(见 04-06)本质上就是「逐帧配准」,配准质量直接决定里程计漂移。

6.2 点云 → 占据栅格 / 代价地图(衔接 Nav2)

导航栈(本系列 11_Navigation2 实战)不直接消费原始点云,而是消费代价地图(costmap)。点云到代价地图的经典链路:

1采集点云
LiDAR/深度相机发布 PointCloud2
2体素投影
把 3D 点投到 2D 栅格(取高度在机器人可通行范围内的点)
3标记占据/未知/空闲
有障碍点→占据;无观测→未知;扫过且空→空闲
4膨胀(inflation)
按机器人半径 + 安全余量膨胀障碍物
5全局/局部代价地图
喂给 Nav2 的 planner / controller

Nav2 里由 costmap_2dobstacle 层(2D 投影)或 voxel 层(3D 体素,能识别「悬空物与低矮障碍」)订阅点云话题完成这一步;3D 建图则常用 octomap(八叉树)做可压缩、可更新的体素地图。

6.3 激光-相机联合标定:把「点」涂上「颜色」的前提

要把 LiDAR 点云与相机图像对齐,需要求解激光雷达 ↔ 相机之间的外参(R, t)。经典做法是拿一块有棋盘格/标定孔洞的标定板,在两种传感器里同时被观测:从图像里检测角点、从点云里检测标定板平面及其角点,再最小化「点云角点经外参投影到图像后与图像角点的重投影误差」。工程上常用 Autoware 标定工具 或手动 targetless(基于互信息)标定。

⚠️ 标定是一次性的,但外参会「漂」:机器人行走震动、撞击、温变都可能让相机/LiDAR 安装位姿微变,导致外参失效。因此量产机器人要么做坚固一体化安装,要么提供「在线自检 + 定期重标定」机制(见第 9 节常见坑)。

7 感知融合:相机 + 激光雷达 + 语义

单传感器都有盲区:相机怕暗、怕逆光、缺精确尺度;LiDAR 没有颜色、分不清「红绿灯和广告牌」。融合的目标是用几何补语义、用语义补几何

7.1 三种融合层次

7.2 图像投影到点云:让点云「有颜色」

这是最直观的融合入门实验。利用相机内参 K 与外参 [R|t],把每个 3D 点投影到图像平面取颜色:

p_img = K · [R | t] · P_lidar ,再归一化除以深度分量

投影后,原本「只有几何」的点云变得可读:一眼就能看出哪里是人、哪里是墙,后续标注、调试、演示都清晰很多。反向也可以:把 2D 检测框的像素反投影到 3D,给目标框「量尺寸、定位姿」。

7.3 语义感知:YOLO 检测 + 点云分割

💡 落地顺序建议:先做「2D YOLO + 深度/点云提 3D 位姿」跑通抓取 demo(快、成本低),再视算力上 3D 点云检测。不要一上来就上最重的 3D 网络——端侧算力是人形的硬约束(见第 9 节)。

8 人形机器人感知实践:真机方案与 pipeline

8.1 主流机型传感器方案(经联网核实,未公开处标注「约」)

机型已公开/拆解可见的传感器方案备注
宇树 H1头部 3D 激光雷达(Livox Mid-360 类)+ 深度相机(RealSense D435i 类)+ IMU(约)H1 主打通用运动能力,头部集成 LiDAR + 深度相机
宇树 G1头部 RealSense D435i 深度相机 + Livox Mid-360 激光雷达 + 麦克风/扬声器;主控 RK3588 / Jetson Orin NX(约,据拆解报告)感知方案与 H1 同源,成本更克制
智元 远征 A2头部多相机 + 激光雷达(具体型号约/官方未公布)远征系列多款「均配备激光雷达」,强调交互 + 抓取
智元 灵犀 X1开源平台,提供 RGB-D + 计算单元方案(具体以官方开源为准)面向开发者的低成本开源人形
Figure 02多路车载 RGB 相机(官方口径约 6 路)+ 车载 VLM(Helix);未公开 LiDAR 配置强调端到端 VLA,视觉为主

注:以上传感器型号随批次与版本变动,「约」表示官方未逐项公布或仅见于第三方拆解,请以各厂商官方规格页为准。

⚠️ 别把「官方演示视频」当配置清单:人形机器人厂商的传感器选型迭代很快,同一型号不同批次可能换相机/换雷达。写调研报告时务必区分「官方文档明确」与「第三方拆解推测」。

8.2 ROS2 感知 pipeline 示例

一套最小可跑的 ROS2 感知链路,常用到这几个官方包:

包 / 节点作用
pcl_rosPCL 与 ROS2 的桥:点云格式转换、滤波、分割、配准等节点
depthimage_to_laserscan把深度图「压扁」成 2D 激光扫描,供 2D 导航/避障复用
pointcloud_to_laserscan把 3D 点云压成 2D 激光扫描(取某一高度切片)
image_proc / image_pipeline图像去畸变、双目视差、深度注册等基础处理
rtabmapRGB-D/LiDAR 的 3D SLAM + 稠密建图(见 04-06)
# 深度图 → 2D 激光扫描(把头部深度相机用于 2D 避障)
ros2 run depthimage_to_laserscan depthimage_to_laserscan_node \
    --ros-args -r image:=/camera/depth/image_rect_raw \
               -r scan:=/scan

# 点云 → 2D 激光(取机器人高度附近切片,用于 Nav2 局部代价地图)
ros2 run pointcloud_to_laserscan pointcloud_to_laserscan_node \
    --ros-args -r cloud_in:=/points -r scan:=/scan_3d

# 观察数据流
ros2 topic list | grep -E "points|scan|image"
rviz2    # 添加 PointCloud2 / LaserScan / Image 显示
💡 一个实用技巧:很多 2D 导航栈只吃 sensor_msgs/LaserScan,而人形机器人头部装的是 3D 深度相机/雷达。用 depthimage_to_laserscanpointcloud_to_laserscan 把 3D 数据「压」成 2D 扫描,就能无缝复用成熟的 2D 避障与建图算法——这是从「轮式」迁移到「人形」时最省事的桥。

9 常见坑:带宽、时间同步、外参与算力

现象对策
点云带宽与帧率128 线雷达每秒数百万点,PointCloud2 消息巨大,网络/CPU 被打爆源头降采样、按需限频、只在必要时订阅原始点云;用 ros2 topic hz 监控
时间戳同步相机与 LiDAR 帧对不上,融合结果「错位」硬件同步触发(硬同步)或 message_filters 的 ApproximateTimeSynchronizer(软同步);校准各传感器时钟偏差
外参漂移运行一段时间后,点云与图像逐渐「错开」坚固一体化安装;启动自检;定期用标定板重标定或在线外参估计
回环与重定位长时间行走累积漂移,回到原点认不出引入回环检测(SLAM 侧,见 04-06);感知侧用场景指纹/视觉词袋做重定位
算力瓶颈与端侧推理YOLO + 点云分割吃满 GPU,整机卡顿、发热模型量化/剪枝、TensorRT 部署、按需触发(靠近才推理)、把重活放到板载 Jetson Orin 等算力单元
🚨 最高频翻车点——时间戳:多传感器融合系统里,「数据对不上」往往比「数据不准」更致命。点云是 100 ms 前的、图像是现在的,融合出来必然错位。上线前一定先做时间对齐自检:把同一标定板/同一个运动物体在两个传感器里回放,确认轨迹/边缘在时间轴上吻合。

10 学习路线与资源

1相机基础
跑通 OpenCV 标定 + 去畸变,理解 K 与畸变
2深度相机
用 D435i 发 RGB-D,跑 depthimage_to_laserscan
3点云入门
用 Open3D 读 PCD,做降采样/滤波/RANSAC/聚类
4配准与建图
ICP/NDT 对齐两帧,点云转 octomap/代价地图
5融合与语义
YOLO + 点云投影给目标上色,做 3D 位姿

官方文档与开源仓库见下方「参考来源」小节。学点云,最忌讳「只看不动手」——建议下载一个公开点云(如 KITTI、SemanticKITTI 或自己用 D435i 采一段),把第 5 节的流水线完整跑一遍,再谈进阶。

11 本节自测

1. 针孔相机内参矩阵 K 中,fx 的物理含义是?
💡 解析:fx = f·α,是「水平方向焦距(像素)」;cx、cy 才是主点坐标;外参才管世界→相机的平移。焦距决定「同样距离的物体在图上多大」。
2. 下列哪种深度相机原理对「环境纹理」的依赖最弱(即白墙场景下仍能测深)?
💡 解析:ToF 靠测量光往返时间,不依赖表面纹理;纯被动双目靠左右图匹配视差,白墙无纹理会失效;结构光靠投影图案,也不依赖物体自身纹理(但怕强光)。所以「纹理依赖最弱」选 ToF。
3. 关于多线激光雷达点云,下列说法正确的是?
💡 解析:点云是无序的(顺序无意义,PointNet 用对称算子处理);同束激光近处点密、远处点稀;线数越多垂直分辨率越高。D 是点云三大特性的准确概括。
4. 用 RANSAC 对室内机器人点云做平面分割,最典型的用途是?
💡 解析:室内场景中最大的平面通常是地面,用 RANSAC 拟合并剔除地面点后,剩下的就是墙壁、家具、人等障碍物,再送去聚类。这是点云处理里「地面分割」的经典套路。
5. ICP 与 NDT 这两种算法共同属于哪类任务?
💡 解析:ICP(最近点迭代)与 NDT(正态分布变换)都是配准算法,求解两帧点云间的 R、t 使其对齐。降采样是 VoxelGrid,去畸变是 cv2.undistort,语义分割是 PointNet++ 等。
6. ROS2 里 depthimage_to_laserscan 节点的作用是?
💡 解析:该节点把 RGB-D 相机输出的深度图转换成一帧 LaserScan(2D 扫描),让只支持 2D 雷达的导航栈也能用深度相机避障——是「轮式方案迁移到人形」时的高频桥接节点。
7. 多传感器融合系统里,最常导致「融合结果错位」的工程问题是?
💡 解析:融合要求「同一时刻、同一坐标系」的数据。时间戳对不齐(数据错时)与外参不准(坐标系错位)会直接让点云和图像错位,是比数据噪声更致命的工程坑。
8. 关于相机畸变,下列说法正确的是?
💡 解析:径向畸变(k1、k2、k3)由镜片曲面导致,光线离中心越远偏折越强,表现为桶形/枕形;切向畸变(p1、p2)才由镜片与成像平面装配不平行造成(见 2.3 节)。把两者成因记反是最常见的错误认知。
9. 下列哪种激光雷达属于「混合固态(半固态)」?
💡 解析:混合固态用转镜/棱镜/MEMS 微振镜做「小幅度扫描」取代整机旋转,代表有禾赛 AT128 与 Livox Mid-360(棱镜非重复扫描);RS-Ruby、Pandar128 是机械式,RPLIDAR A1 是单线 2D 雷达(见 4.1、4.4 节)。
10. 把 LiDAR 点云投影到相机图像上「上色」,让点云带颜色,需要的关键参数是?
💡 解析:投影公式 p_img = K·[R|t]·P_lidar,再归一化除以深度分量——需要相机内参 K 与激光↔相机外参 [R|t],两者缺一不可(见 7.2 节)。只靠分辨率/强度/畸变/法线都无法把 3D 点映射到像素。
📌 本节要点速查:①相机 = 针孔模型:内参 K(fx/fy/cx/cy) + 外参 [R|t] + 畸变(k1~k3 径向、p1~p2 切向),用棋盘格/ChArUco + 张正友法标定;②深度相机三路线:结构光(近距高精度、怕强光)、ToF(无纹理依赖、抗光较好)、双目视差(依赖纹理、可室外);③激光雷达分机械式/纯固态/混合固态,线数决定立体程度,点云「稀疏、无序、近密远疏」;④点云流水线:体素降采样→直通/半径滤波→RANSAC 地面分割→欧式/DBSCAN 聚类→法线与 BBox;⑤配准用 ICP(对初值敏感)/NDT(更鲁棒),点云经体素投影转占据栅格/代价地图喂 Nav2;⑥融合分数据级/特征级/决策级,「2D YOLO + 点云提 3D 位姿」是落地最短路径;⑦四大坑:点云带宽、时间戳同步、外参漂移、端侧算力——「数据对不上」比「数据不准」更致命。
📌 本节小结:感知 = 用传感器把物理世界变成「带几何 + 语义的可靠表达」。相机由针孔模型刻画(内参 K、外参 [R|t]、畸变 k/p),标定用棋盘格/ChArUco + 张正友法;深度相机分结构光/ToF/双目三路线,RealSense 与 Orbbec 各有主力;激光雷达分机械式/固态/混合固态,线数与「近密远疏」决定数据形态,速腾、禾赛、镭神、览沃分占不同赛道;点云处理靠 PCL/Open3D,标准流水线是「降采样→滤波→地面分割→聚类→特征/框」;配准(ICP/NDT)、点云转占据栅格、激光-相机联合标定是把点云「用起来」的关键;融合分数据级/特征级/决策级,2D YOLO + 3D 点云是落地最短路径;真机方案可看宇树 H1/G1、智元、Figure;最后,时间同步、外参漂移、带宽与算力是四个最该提前规避的坑。
🤔 思考题: 1. 为什么「主动红外双目」(如 RealSense D435)在室内白墙上能测深,而「纯被动双目」不行?红外点阵起什么作用?
2. 如果把人形机器人从室内搬到强阳光下,原本的深度相机方案会怎样退化?你会换成什么传感器组合?
3. 点云是「无序」的——想一想,为什么 PointNet 用对称的 max-pooling 就能处理无序点云,而普通 CNN 处理不了?
4. 一台机器人的 LiDAR 与相机外参「漂」了 1°,在 10 米外会造成多大的投影误差?这为什么比传感器本身的测量噪声更危险?

13 参考来源

以下链接为官方文档 / 开源仓库 / 权威拆解报告,关键事实已通过联网检索核实(资料整理更新至 2026-08);标注「约」处为官方未逐项公布或仅见于第三方拆解。