1. 坐标系 coordinate system
本部分源自:Using AirSim>>Core APIs>> AirSim APIs 官网
(1) AirSim API的坐标系:NED 坐标系 with SI unit
该坐标系也是世界坐标系,world frame。
- 所有AirSim API使用NED坐标系统,即+X是北North,+Y是东East,+Z是下Down。这意味着Z值越高越负:如果原点在地面上,z值是零,地面以上是负的!
- 所有单位都是国际单位制。
- 请注意,不同于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
OriginGeoPoint这指定了放置在Unreal环境中的Player Start Component的纬度、经度和高度。车辆的原点(home point)是用这个变换计算出来的。请注意,所有通过API采用的坐标都使用了以SI单位表示的NED坐标系统,这意味着每辆车在NED系统中都从(0,0,0)开始启动。 —《OriginGeopoint》官网资料
(2) Unreal Engine的坐标系
- AirSim不同于Unreal Engine (UE)内部使用的坐标系统。在Unreal Engine中,+Z是向上Up而不是向下Down,长度单位是厘米cm而不是米m。
- 用户不必特别关系UE坐标系,因为AirSim已经处理好了这个问题,即只需要按照AirSim坐标系设置即可,包括Settings.json中的OriginGeopoint元素,AirSim会帮用户自动转换。
(3)AirSim全局坐标系=NED坐标系=世界坐标系
(4) AirSim的机体坐标系:Body Frame
本部分参考:airsim document
根据Airsim文档提供的说明, 机体坐标系body frame遵循Front Left Up (FLU),右手法则。 Note:图片来源:GAAS
Note:也有说法是认为FLU坐标系不对,应该是FRD坐标系。即机体坐标系的原点在机体的重心位置,x,y,z三个坐标轴的方向分别指向机体的前方、右方、下方. 点击此。
这种理解其实是不对的,AirSim不会犯这种低级错误。实际上,机体坐标系中的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:
- 上述状态量中,只有角速度和加速度的值(angular velocity and accelerations )是定义在Body frame中,其余状态量是在NED坐标系中,并且采用SI单位制。
- kinematics输出的位置信息和simGetGroundTruthEnvironment()接口的位置信息不一定完全相同,kinematics的结果是通过动力学物理引擎计算得到的,具体可以参考AirSim论文
|