news 2026/4/18 14:43:32

自动驾驶—CARLA仿真(3) 坐标和坐标变换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动驾驶—CARLA仿真(3) 坐标和坐标变换

官方文档

全局坐标系

CARLA 基于 Unreal Engine 4.26 构建,采用与之相同的左手坐标系。更多关于 Unreal Engine 坐标系的细节,请参阅 Unreal Engine 官方文档。

对于站在原点、面朝X 轴正方向的观察者,坐标轴关系如下:

  • Z 轴:向上(Up)
  • X 轴:向前(Forward)
  • Y 轴:向右(Right)

在整个 CARLA API 中,距离单位为米(meters)角度单位为度(degrees)。因此,当 CARLA 与其他使用右手坐标系、弧度制角度、厘米或英制单位的应用程序交互时,必须进行相应的单位转换。


参与者(Actor)坐标系

车辆、行人等参与者(Actors)拥有各自的局部坐标系,用于维护传感器位置等局部一致的坐标关系。

按照惯例,CARLA 中的车辆坐标系定义如下:

  • 车头指向X 轴正方向
  • 车辆右侧指向Y 轴正方向
  • 车顶指向Z 轴正方向
  • 坐标原点通常位于车辆包围盒在 X、Y 方向的中心附近,Z 方向则非常接近包围盒的最低面。

CARLA 行人的坐标系类似设定:

  • 面朝X 轴正方向
  • 右臂指向Y 轴正方向
  • 头部朝向Z 轴正方向
  • 坐标原点通常位于静止姿态下包围盒的中心。

通过 CARLA API 处理坐标

CARLA API 提供了多个工具类,用于处理坐标及坐标变换。

Location(位置)

Location对象用于定义坐标,并在变换、生成或移动对象时使用。

以下代码展示了如何创建一个表示X=10m, Y=10m, Z=1m的位置对象:

# 使用位置参数的默认构造函数location=carla.Location(10,10,1)# 使用关键字参数location=carla.Location(x=10,y=10,z=1)# 无参数构造(默认原点)location=carla.Location()# x=y=z=0

可省略任意或全部关键字参数,未指定的轴将被设为 0。


Rotation(旋转)

Rotation对象用于定义 CARLA 坐标系中的旋转。旋转以欧拉角(Euler angles)形式表示,包含roll(滚转)、pitch(俯仰)、yaw(偏航),单位为度(degrees)
旋转按yaw → pitch → roll的顺序内旋(intrinsic rotation)应用。

以下代码创建一个roll=10°, pitch=10°, yaw=90°的旋转对象:

# 使用位置参数(顺序:pitch, yaw, roll)rotation=carla.Rotation(10,90,10)# 使用关键字参数rotation=carla.Rotation(pitch=10,yaw=90,roll=10)# 无参数构造(默认无旋转)rotation=carla.Rotation()# pitch=yaw=roll=0

可省略任意或全部关键字参数,未指定的角度将被设为 0。


Transform(变换)

Transform对象用于完整描述一个物体的位姿(pose),包含其 3D 位置和旋转。

可通过LocationRotation创建Transform

# 定义位置和旋转location=carla.Location(10,10,1)rotation=carla.Rotation(yaw=90)# 创建变换transform=carla.Transform(location,rotation)

该变换可用于生成参与者(如车辆):

vehicle=world.spawn_actor(vehicle_bp,transform)

可通过get_transform()查询参与者的变换,并访问其位置和旋转属性:

print(vehicle.get_transform())print(vehicle.get_transform().location)print(vehicle.get_transform().rotation)# 输出示例:# Transform(Location(x=10, y=10, z=1.0), Rotation(pitch=0.0, yaw=90, roll=0.0))# Location(x=10, y=10, z=1.0)# Rotation(pitch=0.0, yaw=90, roll=0.0)

Transform对象提供实用方法,用于对其他坐标应用变换:

  • transform():将局部坐标转换为全局坐标
    例如,计算安装在车辆上的传感器在全局坐标系中的位置:

    sensor_local_coord=carla.Location(1,0,0)# 传感器在车体坐标系中的位置vehicle_transform=vehicle.get_transform()sensor_global_coord=vehicle_transform.transform(sensor_local_coord)# 输出:Vector3D(x=10.0, y=11.0, z=1.0)
  • inverse_transform():将全局坐标转换为局部坐标
    例如,将世界中某物体的位置转换到车辆的局部坐标系(常用于自动驾驶感知系统):

    location=carla.Location(1,0,0)# 全局坐标vehicle_transform=vehicle.get_transform()transformed_location=vehicle_transform.inverse_transform(location)

地理坐标(Geocoordinates)

地理坐标是大地坐标(geodetic coordinates),以纬度(latitude)、经度(longitude)、海拔(altitude)表示地球表面位置。

CARLA 地图的 OpenDRIVE 定义文件(.xodr)可在元数据中包含地理参考(georeference)。OpenDRIVE 标准中地理参考的详细信息请参阅相关文档。

在 OpenDRIVE 文件中,地理参考信息位于<header>标签内:

<?xml version="1.0" encoding="UTF-8"?><OpenDRIVE><header...><geoReference><![CDATA[+proj=tmerc +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84]]></geoReference>...</header>...</OpenDRIVE>

CARLA 的Map对象利用此地理参考信息,通过地图投影实现CARLA 世界坐标 ↔ 地理坐标的相互转换。geoReference中的参数定义了所用投影类型及 CARLA 地图中心(X=Y=Z=0 点)对应的地理坐标。

将 CARLA 坐标转换为地理坐标:
carla_map=world.get_map()location=carla.Location(0,0,0)print(carla_map.transform_to_geolocation(location))# 输出示例:# GeoLocation(latitude=0.000099, longitude=0.000090, altitude=1.000000)
将地理坐标转换为 CARLA 坐标:
geolocation=carla.GeoLocation(latitude=0.000099,longitude=0.000090,altitude=1.000000)carla_map=world.get_map()print(carla_map.geolocation_to_transform(geolocation))# 输出示例:# Location(x=10.014747, y=11.016221, z=1.000000)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:19:09

iOS设备调试兼容性终极解决方案:iOSDeviceSupport项目完整指南

iOS设备调试兼容性终极解决方案&#xff1a;iOSDeviceSupport项目完整指南 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 你是否曾遇到过这样的困境&#xff1a;iPhone已经升级…

作者头像 李华
网站建设 2026/4/18 7:02:15

视频分析神器video-analyzer:3步教你用AI看懂任何视频内容

视频分析神器video-analyzer&#xff1a;3步教你用AI看懂任何视频内容 【免费下载链接】video-analyzer A comprehensive video analysis tool that combines computer vision, audio transcription, and natural language processing to generate detailed descriptions of vi…

作者头像 李华
网站建设 2026/4/18 2:32:39

TVM量化部署实战:CUDA平台上的模型压缩与推理优化

TVM量化部署实战&#xff1a;CUDA平台上的模型压缩与推理优化 【免费下载链接】tvm-cn TVM Documentation in Chinese Simplified / TVM 中文文档 项目地址: https://gitcode.com/gh_mirrors/tv/tvm-cn 量化原理深度解析 模型量化就像把高清视频转成标清格式——虽然损…

作者头像 李华
网站建设 2026/4/18 5:34:30

Windows系统依赖组件一键修复终极指南:快速解决软件运行难题

Windows系统依赖组件一键修复终极指南&#xff1a;快速解决软件运行难题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库是Windows系统中至关重要…

作者头像 李华
网站建设 2026/4/18 6:56:47

6、深入实践 I/O、重定向、管道和过滤器

深入实践 I/O、重定向、管道和过滤器 在命令行操作中,I/O、重定向、管道和过滤器是非常实用的工具。它们可以帮助我们更高效地处理数据、管理文件和监控系统。下面将详细介绍这些工具的使用方法和应用场景。 1. 使用 tee 命令输出到标准输出并追加到文件 tee 命令允许我们…

作者头像 李华
网站建设 2026/4/18 7:26:42

抖音无水印下载器终极指南:轻松保存高清原画质视频

你是不是经常在抖音上看到精彩视频想要保存&#xff0c;却苦于水印破坏画面美感&#xff1f;&#x1f914; 别担心&#xff0c;今天我要为你介绍一款超实用的抖音无水印下载神器&#xff0c;让你轻松收藏每一个心动瞬间&#xff01; 【免费下载链接】douyin_downloader 抖音短视…

作者头像 李华