新闻中心 新闻
AirSim官方动态 | Airsim-API接口总结
新闻 2021-10-26 11:16:45

在上期我们带大家了解一些Airsim常用API接口,以及使用一些简单的API接口模拟控制模型。接下来我们将会带来一些在世界(地图)界面使用的API接口介绍、获取模型系统状态的API,以及如何添加新的API。


一、地图界面相关API

1.1 视线和世界范围 API

要测试模拟中从车辆到一个点或两点之间的视线,请分别参见

simTestLineOfSightToPoint(point, Vehicle_name) 

和 simTestLineOfSightBetweenPoints(point1, point2)

这两个API,都是模拟世界范围,以两个 GeoPoints 向量的形式,可以使用

【simGetWorldExtents()】

检索。




1.2 天气API

默认情况下,禁用所有天气效果。要启用天气效果,首先调用:


simEnableWeather(True)

可以使用以下simSetWeatherParameter方法启用各种天气效果WeatherParameter,例如:


client.simSetWeatherParameter(airsim.WeatherParameter.Rain, 0.25);

第二个参数值从 0 到 1。第一个参数提供以下选项:


class WeatherParameter:  
Rain = 0    
Roadwetness = 1    
Snow = 2    
RoadSnow = 3    
MapleLeaf = 4   
RoadLeaf = 5   
Dust = 6    
Fog = 7

更多详细信息,请参阅示例代码:

https://github.com/Microsoft/AirSim/blob/master/PythonClient/environment/weather.py



1.3 录制API

录制API可以通过控制API接口记录数据,可以通过settings来制定需要记录的数据。

若要开始录制,请输入:


client.startRecording()

同样,要停止录制,请使用:


client.stopRecording()

要检查 Recording 是否正在运行,请调用:


client.isRecording()

此 API 与使用R按钮(可切换录制状态)一起配合,如果使用R键启用录制,

【isRecording()】

将返回True,并且可以使用

【stopRecording()】。

同样,如果在视口中按下 R 键,则使用 API 开始的录制将停止。使用 API 开始或停止记录,LogMessage 也会出现在视口的左上角。



1.4 风API

API:【simSetWind()】

该API可以在模拟过程中改变风的状态

风在世界框架、NED 方向和风速都可以使用这个API制定

例如要在北(即向前的)方向设置20,m/s的风:


# Set wind to (20,0,0) in NED (forward direction)
wind = airsim.Vector3r(20, 0, 0)
client.simSetWind(wind)


更多相关消息请参阅实例:

https://github.com/Microsoft/AirSim/blob/master/PythonClient/multirotor/set_wind.py



1.5 激光雷达API

AirSim 提供 API 以从车辆上的激光雷达传感器检索点云数据。您可以在settings.json中设置通道数、每秒点数、水平和垂直 FOV 等参数。

有关激光雷达 API 和设置以及传感器设置的更多信息请参考下方网址:

激光雷达API设置:

https://microsoft.github.io/AirSim/lidar/

传感器设置:

https://microsoft.github.io/AirSim/sensors/



1.6 坐标系

所有AirSim API使用的是NED坐标系,即+X为北,+Y为东,+Z为下。所有单位均采用SI系统。


请注意,这与虚幻引擎内部使用的坐标系不同。在虚幻引擎中,+Z 是向上而不是向下,长度单位是厘米而不是米。


AirSim API 负责适当的转换。车辆的起点始终是 NED 系统中的坐标 (0, 0, 0)。因此,当从 Unreal 坐标转换为 NED 时,我们首先减去起始偏移量,然后缩放 100 以进行 cm 到 m 的转换。载具在虚拟引擎中使用 Player Start 组件生成。在settings.json 中有一个设置叫OriginGeopoint,它专为 Player Start 组件分配地理经度、经度和高度。




二、用于控制器模型的API

2.1 汽车API

Car 有以下 API 可用:

  • setCarControls:这允许您设置油门、转向、手刹以及自动或手动档位。

  • getCarState:这将检索状态信息,包括速度、当前齿轮和 6 个运动学量:位置、方向、线速度和角速度、线速度和角加速度。所有量都在 NED 坐标系中,世界坐标系中的 SI 单位除了角速度和加速度在体坐标系中。

  • 图像 API(参考上期介绍


2.2 多旋翼API

多旋翼可以通过指定角度、速度矢量、目标位置或这些的某种组合来进行控制。move*为此有相应的API对应。在做位置控制时,我们需要用到一些路径跟随算法。默认情况下,AirSim 使用carrot following算法。“高级控制”——只需要指定高级目标,其余的由固件处理。目前 AirSim 中可用的最低级别控制是【moveByAngleThrottleAsyncAPI】。



2.3 获取多旋翼状态

获取多旋翼状态的 API只需要一次调用即可返回多旋翼状态。此处状态包括:碰撞、估计运动学(即通过融合传感器计算的运动学)和时间戳(自纪元以来的纳秒)。这里的运动学对应6个元素:位置、方向、线速度和角速度、线速度和角加速度。所有量都在NED坐标系中,世界地图里坐标系的SI单位,除了角速度和加速度都在体坐标系中。



2.4 异步方法、持续时间和 max_wait_seconds参数

许多 API 都有名为后缀“Async”的参数;例如:【takeoffAsync】API。这些参数表示在AirSim中启动任务后会立即返回,以便代码可以在执行该任务时执行其他操作。如果想等待这个任务完成,可以调用【waitOnLastTask】,例如:


//C++
client.takeoffAsync()->waitOnLastTask();


# Python
client.takeoffAsync().join()

 如果启动另一个命令,则会自动取消上一个任务并启动新命令。每个新发布的轨迹都会取消之前的轨迹,从而允许代码在新传感器数据到达时不断进行更新。



2.5 传动系统(drivetrain)

API:【drivetrain】

飞行载具有两种模式,通过参数设置进行选择:

airsim.DrivetrainType.ForwardOnly或

airsim.DrivetrainType.MaxDegreeOfFreedom。


①当您指定 ForwardOnly 时,说明车辆的前部应始终指向行驶方向。所以如果想让无人机左转,那么它首先会旋转,所以前部指向左边。当您只有前置摄像头并且使用 FPV 视图操作车辆时,此模式很有用。

②MaxDegreeOfFreedom 意味着不需要关心前面指向的位置。所以当你左转时,所以多旋翼无人机可以向任何方向前进,视角不会收到影响。


2.6  偏航模式(yaw_mode)

yaw_mode是一个有两个字段的结构体,yaw_or_rate和is_rate。如果is_ratefield 为 True,则yaw_or_ratefield 是指为以度/秒为单位的角速度,此时模型在移动时以该角速度围绕其轴连续旋转。如果is_rate为 False,则yaw_or_rate为以度为单位的角度,此时模型旋转到特定角度(即偏航)并在移动时保持该角度。



2.7 lookaheadadaptive_lookahead

在设置跟随路径时,AirSim 使用“carrot following”算法。该算法通过向前看路径并调整其速度矢量来运行。该算法的参数由lookahead和指定adaptive_lookahead。




三、添加新的API接口

添加新 API 需要修改源代码。AirSim 支持的各种抽象级别都需要进行大量更改。下面描述了需要修改的主要文件。此外,如果不确定如何进行更改或获得反馈,请不要犹豫打开问题或 PR 草案。



3.1 实现 API

在添加调用和处理 API 之前,需要先将添加的API实现。下面给出了几个示例:


(1)基于车辆的 API

【moveByVelocityBodyFrameAsync】API是用于多旋翼 XY 坐标系中基于速度的运动调节。


在某些情况下,可能需要额外的结构来存储数据,【getRotorStates】API就是一个很好的例子,这里RotorStates在 2 个地方定义了结构,主要用于从RPC到内部代码的转换。但它还需要在AirLib和Unreal/Plugins中进行修改才能实现。


(2)环境相关的API

这些有关环境的API需要与模拟环境本身进行交互,通常会在Unreal/Plugins文件夹内实现,比如:

  • 【simCreateVoxelGrid】

    API主要用于生成和保存 binvox 格式的环境网格 - WorldSimApi.cpp

  • 【simAddVehicle】

    API用于在运行时创建车辆 - SimMode*、WorldSimApi 文件


更多有关Airsim创建新的API接口,请参阅网址:

https://microsoft.github.io/AirSim/adding_new_apis/





结束语

本期关于AirSim的所有API介绍到这里就结束了。作为一个能够在电脑端就能实现深度学习、计算机视觉和强化学习算法,拥有着高性能、真实虚拟世界地图仿真,AirSim研究平台的确富有前景。其中所提供的API接口也是Airsim能够得到广泛应用的关键,所以这两期有关API接口的介绍也是至关重要的,希望关注Airsim的同学们可以认真看看文章或者官网。



官方资料

本期PX4更新内容网址:

https://microsoft.github.io/AirSim/apis/

  

阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!


公众号:阿木实验室 ( 领取免费资料包)

官方淘宝店:阿木实验室(可购买硬件配件)

硬件咨询:yanyue199506(欢迎洽谈合作)

课程咨询:jiayue199506 (免费领取机器人工程师学习计划)





- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。


您的浏览器版本过低,建议下载更换以下浏览器:

官方店铺

 阿木实验室

联系电话

028-87872048

扫一扫,快速加入

硬件评测

群号652692981

课程学习

群号652692981