AirSim官方动态 | Airsim-API接口总结

Posted 阿木实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AirSim官方动态 | Airsim-API接口总结相关的知识,希望对你有一定的参考价值。

在上期我们带大家了解一些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】飞行载具有两种模式,通过参数设置进行选择:irsim.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 lookahead和adaptive_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/

  • End - 技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!

以上是关于AirSim官方动态 | Airsim-API接口总结的主要内容,如果未能解决你的问题,请参考以下文章

AirSim动态 | 你离学会AirSim还差最后一步!

AirSim动态 | 安装配置AirSim环境

Airsim动态 | ROS教程(AirSim ROS Tutorial)

AirSim动态 | 安装配置AirSim环境

Airsim动态 | 带你了解Airsim结构框架

Airsim动态 | 安装ROS包装器(AirSim ROS Wrapper)