Airsim 坐标系

参考:

airsim系列(五) - 控制四旋翼的飞行(core api) - 知乎

AirSim(五)---理解篇: Airsim世界坐标系、NED坐标系、机体坐标系以及控制相关API接口函数-优快云博客

【学习笔记】Airsim中的坐标系 - 知乎

AirSim相机、IMU内外参分析(VIO、vSLAM)_imu与相机-优快云博客

一.

1.UE坐标系

(1) 特点

  • 左手坐标系
  • z轴向上
  • 单位是厘米
  • 原点是无人机的 playerstart(有待商议)

用户不必特别关系UE坐标系,因为AirSim已经处理好了这个问题,即只需要按照AirSim坐标系设置即可,包括Settings.json中的OriginGeopoint元素,AirSim会帮用户自动转换。

(2)解释

打点的时候,在 UE 里看到的点都是 UE 坐标系下的点,而当从 UE 坐标系转换到 AirSim NED 坐标系时,我们首先减去起始点偏移量(原点是无人机的playerstart),然后缩放100 实现cm到m的转换。


2.AirSim API的坐标系:NED 坐标系, 世界坐标系(world frame)

AirSim全局坐标系=NED坐标系=世界坐标系

  • 右手坐标系
  • 所有AirSim API使用NED坐标系统,即+X是北North,+Y是东East,+Z是下Down。这意味着Z值越高越负:如果原点在地面上,z值是零,地面以上是负的!
  • 所有单位都是国际单位制(All units are in SI system.),即长度单位是米
  • 请注意,不同于Unreal Engine (UE)内部使用的坐标系统。在Unreal Engine中,+Z是向上Up而不是向下Down,长度单位是厘米cm而不是米m。
  • AirSim API 来完成从 Unreal Engine 的 NEU 坐标系到 AirSim 的 NED 坐标系的适当转换。
  • 在AirSim NED 系统中,车辆的起始点总是坐标 (0,0,0)。因此,当从 UE 坐标系转换到 AirSim NED坐标系时,我们首先减去起始点偏移量,然后缩放100实现cm到m的转换。
  • 在 UE 环境中,车辆由 Player Start component 放置的地方生成或衍生而来,在 Settings.json配置文件中有一个设置项元素为 OriginGeopoint,可以将地理经度、纬度和海拔分配给 Player Start Component
  • 无人机的起始点坐标作为NED坐标系的原点,即无人机起始位置的坐标为 ( 0 , 0 , 0 )

OriginGeoPoint这指定了放置在Unreal环境中的Player Start Component的纬度、经度和高度。车辆的原点(home point)是用这个变换计算出来的。请注意,所有通过API采用的坐标都使用了以SI单位表示的NED坐标系统,这意味着每辆车在NED系统中都从(0,0,0)开始启动。
—《OriginGeopoint》官网资料


3.AirSim的机体坐标系:Body Frame

(1) 特点

  • x轴指向旋翼机的前方
  • y轴指向右侧
  • z轴向下
  • 也是右手坐标系

本部分参考:airsim document


二.例子

1.

def simGetVehiclePose(self, vehicle_name = ''):
    """
    The position inside the returned Pose is in the frame of the vehicle's starting point
    
    Args:
        vehicle_name (str, optional): Name of the vehicle to get the Pose of

    Returns:
        Pose:
    """
    pose = self.client.call('simGetVehiclePose', vehicle_name)
    return Pose.from_msgpack(pose)

根据AirSim文档中对 simGetVehiclePose 函数的描述,该函数返回的是车辆(或指定车辆)的姿态信息,包括位置和方向。在这个函数中,返回的姿态信息通常是相对于车辆起始点或参考点的位置和方向,因此它描述的是车辆在全局坐标系中的位置和方向。

换句话说,simGetVehiclePose 函数返回的位置和方向是相对于AirSim仿真环境中的全局坐标系的,而不是相对于特定车辆的局部坐标系的。这意味着返回的位置和方向表示车辆在整个仿真环境中的绝对位置和方向。

2.在无人机位于 UE 的起点处( Player Start component 放置的地方)时打印

3.在无人机位于 UE 的起点处( Player Start component 放置的地方)时打印

### AirSim 中外部相机的配置和集成 在AirSim环境中,为了实现多视角或多传感器融合的任务需求,可以利用外部相机来增强感知能力。通过设置不同的视点位置以及调整参数,这些额外安装的摄像头能够提供更加丰富的视觉信息用于环境监测、物体识别等应用。 #### 配置文件修改 要在AirSim中加入自定义的外部相机设备,主要工作集中在编辑`settings.json`文件上。此JSON格式文档位于模拟器根目录下,默认情况下已经包含了若干预设好的摄像机组件实例作为模板供开发者参考学习之用[^1]。 ```json { "SettingsVersion": 1.2, "CameraDefaults": { "CaptureSettings": [ { "ImageType": 0, // ImageType::Scene "Width": 800, "Height": 600 } ] }, "Vehicles": { "PhysXCar": { "VehicleType": "PhysXCar", "Cameras": { "external_camera_1": { "CaptureSettings": [{ "ImageType": 0, "Width": 800, "Height": 600 }], "X": 0.5, "Y": 0.0, "Z": -0.7, "Pitch": 0, "Roll": 0, "Yaw": 90 } } } } } ``` 上述代码片段展示了如何向车辆对象添加一个新的名为`external_camera_1`的外部相机组件,并设置了其相对于车身坐标系的具体方位与姿态角度(XYZ轴位移及三自由度旋转角)。这使得可以从特定的角度捕捉周围环境的画面,从而满足不同应用场景下的特殊观测需求。 #### Python API 调用示例 除了静态配置外,还可以借助AirSim提供的Python客户端库动态创建并操作临时性的虚拟摄影机资源。下面给出了一段简单的脚本用来展示这一过程: ```python import airsim client = airsim.CarClient() client.confirmConnection() responses = client.simGetImages([ airsim.ImageRequest("external_camera_1", airsim.ImageType.Scene), ]) for response in responses: img1d = np.fromstring(response.image_data_uint8, dtype=np.uint8) img_rgb = img1d.reshape(response.height, response.width, 3) cv2.imshow("External Camera View", img_rgb) cv2.waitKey(0); ``` 这段程序首先建立了与仿真平台之间的连接通道;接着请求获取由之前设定好的名称标识符所指向的那个外部相机构造出来的最新一帧彩色图像数据流;最后经过转换处理后将其呈现给用户查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

leaf_leaves_leaf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值