news 2026/4/15 4:45:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动驾驶—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类:主控制循环

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

核心组件:
  • 同步模式

    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手刹
  • 图像同步机制

    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.相机内参校准
calibration=np.identity(3)calibration[0,2]=VIEW_WIDTH/2.0# cxcalibration[1,2]=VIEW_HEIGHT/2.0# cycalibration[0,0]=calibration[1,1]=VIEW_WIDTH/(2.0*tan(FOV/2))# fx=fyself.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. 深度过滤

    bounding_boxes=[bbforbbinbounding_boxesifall(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 目标检测基础的绝佳起点,尤其适合理解坐标变换、相机模型、投影几何等核心概念。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 20:47:20

15款ohmyzsh主题深度评测:从极简到高信息密度的完美选择

15款ohmyzsh主题深度评测:从极简到高信息密度的完美选择 【免费下载链接】ohmyzsh 项目地址: https://gitcode.com/gh_mirrors/ohmy/ohmyzsh 还在为单调的终端界面烦恼吗?ohmyzsh作为最流行的Zsh配置框架,提供了数十款精心设计的主题…

作者头像 李华
网站建设 2026/4/11 11:55:37

强化学习入门自学指南:从理论到实践的完整学习路线

你是否对人工智能中的强化学习充满好奇,却不知从何入手?《强化学习:导论》第二版中文PDF资源正是为你量身打造的学习伙伴。这本由理查德S萨顿和安德鲁G巴托合著的经典教材,将带你系统掌握强化学习的核心理论与算法应用。 【免费下…

作者头像 李华
网站建设 2026/4/15 3:29:25

键盘布局编辑器:快速设计个性化键盘的终极工具

键盘布局编辑器:快速设计个性化键盘的终极工具 【免费下载链接】keyboard-layout-editor Web application to enable the design & editing of keyboard layouts 项目地址: https://gitcode.com/gh_mirrors/ke/keyboard-layout-editor 在追求个性化电脑使…

作者头像 李华
网站建设 2026/4/14 9:55:33

34、网络中的循环与 motifs 分析

网络中的循环与 motifs 分析 在生物细胞内,转录调控是一项至关重要的机制。不过,转录因子在酿酒酵母(S. cerevisiae)中仅占所有蛋白质编码基因的约 3%(秀丽隐杆线虫(C. elegans)中占 5%,人类中占 10%)。细胞内还有其他重要的生物过程,可通过网络形式呈现,除了转录网…

作者头像 李华
网站建设 2026/4/13 7:23:23

33、Ubuntu服务器故障排查全攻略

Ubuntu服务器故障排查全攻略 在Ubuntu服务器的运维过程中,故障排查是一项至关重要的技能。无论是系统日志的查看,还是网络问题的追踪,都需要我们掌握有效的方法和工具。下面将为大家详细介绍Ubuntu服务器故障排查的相关内容。 根本原因分析的重要性 根本原因分析应被视为…

作者头像 李华
网站建设 2026/4/7 21:59:44

告别单打独斗!一场关乎独立开发者未来的“对话”即将开启

“技术迭代太快,刚学会的框架已经过时了。”“一个人开发,从产品到运营全要自己搞定,也没有任何福利保障。”“想尝试数字游民,但创业的成本怎么控制?”……如果你是独立开发者,对这些焦虑一定不陌生。前几…

作者头像 李华