当前位置: 首页 > news >正文

自动驾驶—CARLA仿真(6)vehicle_galler demo

测试用例:
PythonAPI/examples/vehicle_gallery.py

该测试用例是一个车辆模型展示工具
依次在 CARLA 仿真世界中同一位置生成所有可用的车辆类型,并让观察者视角(Spectator)围绕每辆车做环绕飞行,用于直观查看不同车辆的外观。


🔑 主要模块解析

1.get_transform(vehicle_location, angle, d=6.4)
  • 作用:计算观察者(Spectator)在环绕车辆时应处的位置与朝向。
  • 参数
    • vehicle_location:车辆当前位置(carla.Location
    • angle:环绕角度(单位:度,0° 表示正右方)
    • d=6.4:环绕半径(米)
  • 实现逻辑
    • 在车辆周围 X-Y 平面上以半径d做圆周运动
    • Z 坐标固定为 2.0 米(略高于车辆)
    • 摄像机始终朝向车辆中心(通过yaw=180 + angle实现)
    • 同时设置俯视角-15°pitch=-15),获得更自然的观察视角
  • 返回值:一个完整的carla.Transform(包含位置和旋转)

✅ 这是典型的第三人称环绕相机(Orbit Camera)实现。


2.连接与初始化
client=carla.Client('localhost',2000)world=client.get_world()spectator=world.get_spectator()
  • 连接到指定 IP 和端口的 CARLA 服务器
  • 获取仿真世界(world)和主视角观察者(spectator

3.车辆蓝图遍历
vehicle_blueprints=world.get_blueprint_library().filter('vehicle')location=random.choice(world.get_map().get_spawn_points()).location
  • 获取所有车辆类型的蓝图(如轿车、卡车、摩托车等)
  • 随机选择一个地图出生点的位置(仅位置,忽略原始朝向)

4.主展示循环
forblueprintinvehicle_blueprints:# 在固定位置生成当前车辆transform=carla.Transform(location,carla.Rotation(yaw=-45.0))vehicle=world.spawn_actor(blueprint,transform)try:print(vehicle.type_id)# 打印当前车辆类型angle=0whileangle<356:# 等待仿真推进一帧timestamp=world.wait_for_tick().timestamp# 按仿真时间增量更新角度(60度/秒)angle+=timestamp.delta_seconds*60.0# 更新观察者视角spectator.set_transform(get_transform(vehicle.get_location(),angle-90))finally:vehicle.destroy()# 确保车辆被销毁
  • 逐个生成车辆:所有车辆出现在同一位置,朝向-45°
  • 同步环绕
    • 使用world.wait_for_tick()保证与仿真步长同步
    • 角速度 = 60 度/秒 → 约 6 秒完成一圈
    • 初始偏移-90°使起始视角位于车辆正前方
  • 安全清理:无论是否异常,车辆都会被销毁,避免残留

🎯 核心机制总结

机制说明
环绕相机通过三角函数计算观察者位置,结合 yaw 控制朝向,实现平滑环绕
仿真同步使用wait_for_tick()获取精确时间步长,确保旋转速度稳定
批量展示遍历所有vehicle蓝图,自动切换模型
资源管理finally块确保每个车辆在展示后被销毁

该脚本是 CARLA 中展示Actor 控制、Transform 操作、同步仿真的典型官方示例,常用于快速预览车辆资产或演示环绕视角效果。

💾自测结果

carla_1

http://www.cnnetsun.cn/news/64221.html

相关文章:

  • 技术实践:用大模型平台重构医疗数据分析Pipeline
  • 智元AGIBOT荣登具身智能机器人技术研发排行榜TOP1
  • Gitee vs GitHub 2025深度评测:国产代码托管平台的崛起与超越
  • JVM 安全与沙箱深度解析
  • t-SNE快速降维算法详解与实现
  • Python编程入门从零开始掌握基础语法一
  • 20、BusyBox:嵌入式系统的强大工具
  • python 生成psd文件
  • 25、Linux内核调试全攻略:挑战与解决方案
  • 30、Linux移植与实时性:从定制平台到实时系统的深入解析
  • 【界面案例】火语言RPA读取Excel文件,循环写入界面表格
  • 【JAVA进阶】鸿蒙开发与SpringBoot深度融合:从接口设计到服务部署全解析
  • [C#][winform]基于yolov11的水下目标检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
  • 【睿擎派】云端一体,多种通信协议构建机械臂运动控制系统
  • 4.1用户空间RTOSAPI
  • 11、嵌入式Linux开发:内核日志存储、追踪系统与设备树管理
  • 17、Yocto项目软件层与应用开发全解析
  • 宁波紧固件产业集群的外向型制造与装备升级路径
  • AI赋能工业4.0:数据堂一站式数据服务加速制造智能化落地
  • 如何打造吸睛动态头像?GIF动态头像制作指南
  • 评估AI的终极答案:LLM-As-a-Judge!AI时代,谁来评判AI?答案是AI自己!
  • Meta封闭技术大门:开源先锋为何倒向闭源阵营?
  • HRNet:深度高分辨率表示学习用于人体姿态估计-k学长深度学习专栏
  • Miniconda环境隔离机制揭秘:保障模型复现精准性
  • 颠覆认知:实测6款AI工具,论文写作“专用”比“通用”强在哪?
  • 【自动控制】自动控制原理中,最小相位系统是什么?
  • 从MySQL到TiDB:迁移经验与效率提升300%的秘诀
  • ComfyUI工作流完全入门指南:零基础到精通
  • AI如何自动修复安装包完整性校验失败问题
  • 用AI加速Manim动画开发:从零到精通的智能辅助