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

1. 坐标系 coordinate system

本部分源自:Using AirSim>>Core APIs>> AirSim APIs 官网

(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),右手法则
在这里插入图片描述

机体坐标系FLU
Note:图片来源:GAAS

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

在这里插入图片描述

在这里插入图片描述

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

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

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

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

设置车辆控制参数setCarControlsset 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* APIs1 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.
获取无人机状态参数getMultirotorState1 这个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论文
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值