参考:
airsim系列(五) - 控制四旋翼的飞行(core api) - 知乎
AirSim(五)---理解篇: Airsim世界坐标系、NED坐标系、机体坐标系以及控制相关API接口函数-CSDN博客
AirSim相机、IMU内外参分析(VIO、vSLAM)_imu与相机-CSDN博客
一.
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仿真环境中的全局坐标系的,而不是相对于特定车辆的局部坐标系的。这意味着返回的位置和方向表示车辆在整个仿真环境中的绝对位置和方向。