目录

  • 1. 坐标系 coordinate system
  • (1) AirSim API的坐标系:NED 坐标系 with SI unit
  • (2) Unreal Engine的坐标系
  • (3)AirSim全局坐标系=NED坐标系=世界坐标系
  • (4) AirSim的机体坐标系:Body Frame
  • 2. AirSim APIs for 车辆和无人机的状态

1. 坐标系 coordinate system

(1) AirSim API的坐标系:NED 坐标系 with SI unit

该坐标系也是世界坐标系,world frame。

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

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

(2) Unreal Engine的坐标系

  1. AirSim不同于Unreal Engine (UE)内部使用的坐标系统。在Unreal Engine中,+Z是向上Up而不是向下Down,长度单位是厘米cm而不是米m。
  2. 用户不必特别关系UE坐标系,因为AirSim已经处理好了这个问题,即只需要按照AirSim坐标系设置即可,包括Settings.json中的OriginGeopoint元素,AirSim会帮用户自动转换。

(3)AirSim全局坐标系=NED坐标系=世界坐标系

(4) AirSim的机体坐标系:Body Frame

本部分参考:airsim document

根据Airsim文档提供的说明, 机体坐标系body frame遵循Front Left Up (FLU),右手法则。

Amesim key_自动驾驶

Amesim key_ubuntu_02

Note:图片来源:GAAS

Note2: 上述FLU坐标系为右手坐标系。判断绕某个旋转轴i 的旋转正方向的方法为:右手坐标系: 右手握拳,大拇指伸直指向旋转轴i的正方向(箭头方向),其余四指指尖所朝向的方向即为正方向(等效于从旋转轴i正方向箭头端逆向看过去,或者旋转轴i正方向箭头射进你的眼睛,这时看到的逆时针旋转方向为绕i轴的正方向)。

Amesim key_ubuntu_03

Amesim key_自动驾驶_04

Note:也有说法是认为FLU坐标系不对,应该是FRD坐标系。即机体坐标系的原点在机体的重心位置,x,y,z三个坐标轴的方向分别指向机体的前方、右方、下方. 点击此。

2. AirSim APIs for 车辆和无人机的状态

本部分内容:Using AirSim>>Core APIs: APIs for Car

Airsim提供了两个API函数来进行车辆的控制、获取车辆状态

设置车辆控制参数

setCarControls

set throttle, steering, handbrake and auto or manual gear.

获取车辆状态参数

getCarState

获取如下的状态信息: speed, current gear,6 kinematics quantities: position, orientation, linear and angular velocity, linear and angular acceleration.

设置无人机控制参数

move* APIs

1 Multirotor can be controlled by specifying angles, velocity vector, destination position or some combination of these.

2 当进行position control时, 需要path following算法,其中AirSim 默认采用carrot following algorithm,这部分通常被认为是 “high level control” ,因为只需要指定 high level goal,the firmware会自动完成其余功能。

3 当前AirSim提供的底层控制 lowest level control 是API函数: moveByAngleThrottleAsync API.

获取无人机状态参数

getMultirotorState

1 这个API在一个调用中返回车辆的状态。

2 状态包括:collision、estimated kinematics(即通过融合传感器计算的运动学)和timestamp(自每个epoch以来的纳秒时间)。3. 这里的kinematics运动学指的是6个量:position, orientation, linear and angular velocity, linear and angular acceleration。

4请注意,simple_slight目前不支持state estimator,这意味着simple_flight模式下估计运动学值和地面真实运动学值是相同的

获取真实vehicle和环境状态

simGetGroundTruthEnvironment

(vehicle_name=‘’

一般是Ground Truth值)

该函数返回class airsim.types.EnvironmentState,包含环境状态:

-大气密度air_density;

-大气压air_pressure;

-PlayerStart的起始地理信息geo_point;

-重力gravity;

-无人机位置in NED position;

-温度temperature.

Note:gravity是环境的重力,NED坐标系中为z轴正方向一致,因此可得到类似9.8的结果。

获取vehicle估计的运动学状态

simGetGroundTruthKinematics

(vehicle_name=‘’)

指的是kinematics估计值

该函数返回airsim.types.KinematicsState,包含信息:

1. 角加速度:angular_acceleration

2. 角速度:angular_velocity

3. 加速度:linear_acceleration

4. 速度:linear_velocity

5. 姿态四元数:orientation

6. 位置:position

Note:1-2: body frame; 3-6: NED frame

Note:

  1. 上述状态量中,只有角速度和加速度的值(angular velocity and accelerations )是定义在Body frame中,其余状态量是在NED坐标系中,并且采用SI单位制。
  2. kinematics输出的位置信息和simGetGroundTruthEnvironment()接口的位置信息不一定完全相同,kinematics的结果是通过动力学物理引擎计算得到的,具体可以参考AirSim论文