自动驾驶—CARLA仿真(12)client_bounding_boxes demo

📌测试用例

PythonAPI/examples/client_bounding_boxes.py

客户端侧 3D 边界框(Client-Side Bounding Boxes)可视化示例,用于:

  1. 手动驾驶一辆主车(WASD 控制)
  2. 实时计算并绘制周围车辆的 3D 边界框
  3. 所有边界框计算在 客户端(Python)完成,不依赖 CARLA 服务端

🔑 主要模块解析

1. ClientSideBoundingBoxes 类:3D 边界框核心引擎

这是脚本的核心技术模块,完全在客户端实现 3D→2D 投影。

核心方法:
  • get_bounding_box(vehicle, camera)

    • 获取车辆 8 个 3D 顶点的世界坐标
    • 通过 世界→相机坐标变换相机内参投影归一化设备坐标
    • 返回 8 个 2D 像素点 + 深度值
  • _create_bb_points(vehicle)

    • 根据 vehicle.bounding_box.extent 生成局部坐标系下的 8 个顶点
    • 顺序:底面 4 点(顺时针)+ 顶面 4 点(对应底面)
  • 坐标变换链
    车辆局部坐标世界坐标相机坐标2D 像素

  • draw_bounding_boxes()

    • 使用 pygame.draw.line 绘制 12 条边(底面 4 + 顶面 4 + 竖边 4)
    • 颜色固定为 BB_COLOR = (248, 64, 24)(橙红色)

关键优势

不依赖 CARLA 的实例分割传感器,仅需 RGB 摄像头 + 车辆列表即可生成 3D 框。


2. BasicSynchronousClient 类:主控制循环

管理仿真、渲染和用户输入。

核心组件:
  • 同步模式

    python 复制代码
    self.set_synchronous_mode(True)
    • 确保每帧精确控制,避免传感器数据错位
  • 自定义摄像头

    • 分辨率:960x540(1920/2 x 1080/2)
    • FOV:90°
    • 位置:车后方 5.5 米,高度 2.8 米,俯角 -15°(第三人称视角)
  • 手动控制逻辑

    按键 功能
    W 前进(throttle=1, reverse=False)
    S 倒车(throttle=1, reverse=True)
    A/D 左/右转向(±0.05 增量)
    Space 手刹
  • 图像同步机制

    python 复制代码
    self.capture = True  # 请求下一帧
    # 回调中: if self.capture: self.image = img; self.capture = False
    • 避免多线程竞争,确保渲染与控制同步

3. **坐标系处理

脚本完整实现了 CARLA 坐标系到标准计算机视觉坐标系的转换

步骤 变换
1. 车辆局部坐标 (x,y,z) (CARLA 标准)
2. 世界坐标 通过 vehicle.get_transform()
3. 相机坐标 通过 camera.get_transform().get_inverse_matrix()
4. CV 坐标系 (x,y,z) → (y, -z, x)(关键!)
5. 2D 投影 K * [y, -z, x]^T

💡 注释中的 cords_y_minus_z_x 正是这一步转换。


4. 相机内参校准
python 复制代码
calibration = np.identity(3)
calibration[0, 2] = VIEW_WIDTH / 2.0   # cx
calibration[1, 2] = VIEW_HEIGHT / 2.0  # cy
calibration[0, 0] = calibration[1, 1] = VIEW_WIDTH / (2.0 * tan(FOV/2))  # fx=fy
self.camera.calibration = calibration
  • 手动构建 3x3 相机内参矩阵 K
  • 用于 get_bounding_box() 中的 3D→2D 投影

🎯 与服务端方案对比

特性 客户端方案(本脚本) 服务端方案(instance_segmentation)
依赖 仅需 RGB 摄像头 + 车辆列表 需要 instance_segmentation 传感器
精度 基于车辆真实 bounding_box 基于像素分割,可能有锯齿
性能 CPU 计算投影(Python) GPU 渲染分割图

⚠️ 注意事项

  1. 仅显示其他车辆

    • vehicles = self.world.get_actors().filter('vehicle.*') 包含所有车
    • 但未过滤主车,主车自身也会显示边界框 (可通过 if vehicle.id != self.car.id 过滤)
  2. 深度过滤

    python 复制代码
    bounding_boxes = [bb for bb in bounding_boxes if all(bb[:, 2] > 0)]
    • 移除相机后方的物体(深度 ≤ 0)
  3. 坐标系假设

    • 假设车辆 bounding_box 中心在 (0,0,0)(CARLA 默认)
    • 若车辆模型偏移,需调整 _vehicle_to_world

✅ 总结

该脚本是 CARLA 客户端 3D 感知的经典实现,展示了:

  1. 如何从 车辆物理属性(bounding_box)生成 3D 顶点
  2. 如何实现 完整的 3D→2D 投影管线
  3. 如何在 纯 Python 客户端 实现 3D 边界框可视化

它是学习 自动驾驶 3D 目标检测基础 的绝佳起点,尤其适合理解 坐标变换、相机模型、投影几何 等核心概念。

相关推荐
聆风吟º4 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
Codebee6 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º7 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys7 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_56787 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子7 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能8 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_160144878 小时前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile8 小时前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算
人工不智能5778 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert