自动驾驶—CARLA仿真(18)lidar_to_camera demo

📌 测试用例

PythonAPI/examples/lidar_to_camera.py

LiDAR 点云投影到 RGB 图像的同步可视化示例,用于:

  1. 同步采集 LiDAR 与摄像头数据
  2. 将 3D 点云精确投影到 2D 图像平面
  3. 用颜色编码点云强度并叠加显示

适用于 多传感器融合、感知算法调试、数据集生成
在这里插入图片描述


🔑 主要模块解析

1. 同步数据采集机制
# 启用同步模式(关键!)
settings.synchronous_mode = True
settings.fixed_delta_seconds = 3.0

# 使用 Queue 存储传感器数据
image_queue = Queue()
lidar_queue = Queue()
camera.listen(lambda data: sensor_callback(data, image_queue))
lidar.listen(lambda data: sensor_callback(data, lidar_queue))

# 同步获取数据
world.tick()
image_data = image_queue.get()
lidar_data = lidar_queue.get()
assert image_data.frame == lidar_data.frame  # 确保帧对齐
  • 核心价值:避免异步采集导致的 运动模糊/错位问题
  • 生产级实践:使用线程安全队列处理传感器回调

2. 相机内参矩阵构建
# 计算焦距(focal length)
focal = image_w / (2.0 * tan(fov * π / 360.0))

# 构建 3x3 相机内参矩阵 K
K = [[Fx,  0, image_w/2],
     [ 0, Fy, image_h/2],
     [ 0,  0,         1]]
  • 假设:像素宽高比为 1(Fx = Fy
  • 用途:后续 3D→2D 投影的核心参数

3. LiDAR → 相机坐标变换链(核心数学)

完整的坐标变换流程:

步骤变换代码实现
1. LiDAR 局部坐标(x,y,z)p_cloud[:, :3]
2. → 世界坐标通过 LiDAR 位姿np.dot(lidar_2_world, local_points)
3. → 相机坐标通过相机逆位姿np.dot(world_2_camera, world_points)
4. CARLA → 标准 CV 坐标系(x,y,z) → (y, -z, x)point_in_camera_coords = [sensor_points[1], -sensor_points[2], sensor_points[0]]
5. → 2D 像素坐标通过 K 矩阵np.dot(K, point_in_camera_coords)

关键处理
正确转换 CARLA 左手坐标系(X=前, Y=右, Z=上)到标准计算机视觉坐标系(X=右, Y=下, Z=前)


4. 点云可视化增强
  • 强度着色

    intensity = 4 * intensity - 3  # 归一化调整
    color_map = np.interp(intensity, VID_RANGE, VIRIDIS)  # Viridis 色图
    
    • 使用 Viridis 色图(对色盲友好,感知均匀)
    • 强度值映射为 RGB 颜色
  • 点绘制方式

    if dot_extent <= 0:
        im_array[v, u] = color  # 单像素点
    else:
        im_array[v-ext:v+ext, u-ext:u+ext] = color  # 方形区域(更易见)
    

5. 有效点过滤
points_in_canvas_mask = (
    (x > 0) & (x < image_w) & 
    (y > 0) & (y < image_h) & 
    (z > 0)  # 排除相机后方的点
)
  • 三重过滤
    1. X/Y 在图像范围内
    2. Z > 0(深度为正,排除后方点)
  • 避免无效投影(如负深度导致的坐标翻转)

🎯 核心应用场景

应用如何利用本脚本
2D-3D 对齐验证检查投影点是否准确落在物体边缘
点云标注辅助在 RGB 图上直接标注 3D 点对应区域
传感器标定验证通过投影误差反推外参精度
合成数据生成生成带精确 2D-3D 对应关系的数据集

⚠️ 技术点

  1. 完整的坐标系处理

    • 显式处理 CARLA 特有的坐标系转换
    • 避免常见投影错误(如左右镜像、上下颠倒)
  2. 物理一致的同步采集

    • 严格帧对齐确保动态场景下的投影准确性
  3. 可配置的 LiDAR 参数

    • 支持调整 FOV、通道数、噪声等(--no-noise 移除 dropoff)
  4. 高效可视化

    • 使用 NumPy 向量化操作(仅小范围用循环画大方块)

✅ 总结

该脚本是 CARLA 多传感器融合的教科书级示例,展示了:

  1. 如何 同步采集 LiDAR 与摄像头数据
  2. 如何 实现鲁棒的 3D→2D 投影管线
  3. 如何 可视化点云强度信息

它是开发 自动驾驶感知系统(如 3D 目标检测、SLAM)的基础工具,特别适合需要 精确 2D-3D 对应关系 的任务。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoannaJuanCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值