新闻中心 新闻
AirSim动态 | 你离学会AirSim还差最后一步!
新闻 2021-10-19 09:56:02

经过其前面几期的介绍,相信大家已经部署好AirSim的环境了,也看到很多人已经开始使用AirSim上手自己的研究了。AirSim作为一个持续更新的开源项目,其社区在开发迭代中,不断完善功能和修复bug,所提供的API也是AirSim应用这么广泛的一大原因,所以了解AirSim的API接口是非常有必要的,下面跟着阿木一起来看看官方对于AirSim的API接口介绍。


介绍

AirSim公开了一些API,让用户可以在模拟中以编程方式与设备交互。用户可以使用这些 API 来检索图像、获取状态、控制设备等。AirSim中的API按照功能可以分为如下几类,具体介绍可参照下文。


  • 图像类API :获取各种类型的图像、控制云台等;

  • 控制仿真运行 :可以控制仿真暂停或继续;

  • 碰撞API :获取碰撞信息,包括碰撞次数、位置、表面信息、渗透深度等;

  • 环境时间API :主要是控制太阳在天空中的位置;

  • 环境天气API :控制环境中的天气:下雨、雪、灰尘、雾气、道路湿滑程度等;

  • 环境风API :控制环境中的风速和风向等;

  • 雷达API :添加和控制环境中的雷达传感器;

  • 无人机或车辆的API :控制运动、获取状态等,




Python 快速入门

如果您想使用 Python 调用 AirSim API,我们建议将 Anaconda 与 Python (需要3.5 或更高版本)一起使用。


首先安装这个包:


pip install msgpack-rpc-python

您可以从发行版中获取 AirSim 二进制文件,也可以从源代码(Windows、Linux)进行编译。一旦可以运行 AirSim,选择 Car 作为车辆,然后导航到PythonClient\car\文件夹并运行:


python hello_car.py

如果您使用的是 Visual Studio 2019,那么只需打开 AirSim.sln,将 PythonClient 设置为启动项目并选择【car\hello_car.py】作为您的启动脚本。




安装 AirSim 包

您也可以使用下面的代码简单地安装airsim这个软件包:


pip install airsim

你可以【PythonClient】在你的 repo 的文件夹中找到这个包的源代码和示例。


NOTE:

①您可能会注意到在【setup_path.py】我们的示例文件夹中有一个文件。这个文件有简单的代码来检测airsim包是否在父文件夹中可用。

②AirSim 仍在大量开发中,这意味着您可能经常需要更新包以使用新的 API。

③如果你是C++ 用户,想参考使用 C++ API的示例,请参阅C++ API 指南


C++API示例网址:

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

里面包含有如何使用C++ API,控制模拟飞行器或者模拟汽车。



Hello Car

以下是如何使用 AirSim API+Python 来控制模拟汽车(C++ 示例请参考上方网址):


# ready to run example: PythonClient/car/hello_car.pyimport airsimimport time
# connect to the AirSim simulatorclient = airsim.CarClient()client.confirmConnection()client.enableApiControl(True)car_controls = airsim.CarControls()
while True:    # get state of the car    car_state = client.getCarState()    print("Speed %d, Gear %d" % (car_state.speed, car_state.gear))
   # set the controls for car    car_controls.throttle = 1    car_controls.steering = 1    client.setCarControls(car_controls)
   # let car drive a bit    time.sleep(1)
   # get camera images from the car    responses = client.simGetImages([        airsim.ImageRequest(0, airsim.ImageType.DepthVis),        airsim.ImageRequest(1, airsim.ImageType.DepthPlanar, True)])    print('Retrieved images: %d', len(responses))
   # do something with images    for response in responses:        if response.pixels_as_float:            print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))            airsim.write_pfm('py1.pfm', airsim.get_pfm_array(response))        else:            print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))            airsim.write_file('py1.png', response.image_data_uint8)

Hello Drone

以下是如何使用 AirSim API+Python 来控制模拟四旋翼(C++ 示例请参考上方网址):


# ready to run example: PythonClient/multirotor/hello_drone.pyimport airsimimport os
# connect to the AirSim simulatorclient = airsim.MultirotorClient()client.confirmConnection()client.enableApiControl(True)client.armDisarm(True)
# Async methods returns Future. Call join() to wait for task to complete.client.takeoffAsync().join()client.moveToPositionAsync(-10, 10, -10, 5).join()
# take imagesresponses = client.simGetImages([    airsim.ImageRequest("0", airsim.ImageType.DepthVis),    airsim.ImageRequest("1", airsim.ImageType.DepthPlanar, True)])print('Retrieved images: %d', len(responses))
# do something with the imagesfor response in responses:    if response.pixels_as_float:        print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))        airsim.write_pfm(os.path.normpath('/temp/py1.pfm'), airsim.get_pfm_array(response))    else:        print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))        airsim.write_file(os.path.normpath('/temp/py1.png'), response.image_data_uint8)



常用API

  • reset:重置为其原始启动状态。

  • confirmConnection:每 1 秒检查一次连接状态并在控制台中报告,以便用户可以查看连接进度。

  • enableApiControl:出于安全原因,默认情况下未启用API 控制,操作者拥有完全控制权(通过RC或模拟操作杆等)。如需用API控制,客户端必须进行此调用以通过API请求控制。

  • isApiControlEnabled:如果建立了 API 控制,则返回 true。如果为 false,则表示API调用将被忽略。

  • ping: 如果连接已建立,则此调用将返回 true 否则它将被阻塞直到超时。

  • simPrintLogMessage:在模拟器的窗口中打印指定的消息。

  • simGetObjectPose, simSetObjectPose: 获取和设置虚幻环境中指定物体的姿态。




图像/计算机视觉 API

AirSim 提供全面的图像 API,可从多个摄像头中检索同步图像以及地面实况,包括深度、视差、表面法线和视觉。您可以在settings.json中设置分辨率、FOV、运动模糊等参数。还有用于检测碰撞状态的 API。


另请参阅官网完整代码,该代码生成指定数量的立体图像和地面实况深度,并对相机平面进行归一化,计算视差图像并将其保存为pfm 格式。


官网完整代码:

https://github.com/Microsoft/AirSim/tree/master/Examples/DataCollection/StereoImageGenerator.hpp


图像API和计算机视觉模式更多信息:

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




暂停和继续API

AirSim 允许通过“pause(is_paused)”API暂停和继续模拟。暂停模拟用“pause(True)”,继续模拟用“pause(False)”。

具体用法,请参见pause_continue_car.py:

https://github.com/Microsoft/AirSim/tree/master/PythonClient//car/pause_continue_car.py


和pause_continue_drone.py:

https://github.com/Microsoft/AirSim/tree/master/PythonClient//multirotor/pause_continue_drone.py




碰撞API

碰撞信息可以通过simGetCollisionInfoAPI获取。此调用返回一个结构体,该结构体不仅包含是否发生碰撞,还包含碰撞位置、表面法线、穿透深度等信息。




时间 API

AirSim 假设EngineSky/BP_Sky_Sphere您的环境中存在具有ADirectionalLight actor 的天空球体。默认情况下,场景中太阳的位置不随时间移动。您可以使用settings来设置 AirSim 用来计算场景中太阳位置的纬度、经度、日期和时间。

您还可以使用以下 API 调用根据给定的日期时间设置太阳位置:


simSetTimeOfDay(self, is_enabled, start_datetime = "", is_start_datetime_dst = F



结束语

AirSim作为一个建立在Unreal引擎上的人工智能研究平台,用于实验有关深度学习、计算机视觉和强化学习算法,该模拟器提供工具并利用物理学和感知计算方面的最新进展来创建准确的真实世界模拟。尽管四旋翼飞行器是AirSim目前唯一的飞行器,但是AIR表示,未来它将预装常用的空中机器人模拟和多个传感器。此外,由于AirSim是一个开源项目,用户可以向模拟器添加自定义机器人模型和新传感器。




官方资料:

1.本期PX4更新内容网址:

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

2.AirSim教程(四):

https://zhuanlan.zhihu.com/p/295284556



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


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

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

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

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




- End -

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


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

官方店铺

 阿木实验室

联系电话

028-87872048

扫一扫,快速加入

硬件评测

群号652692981

课程学习

群号652692981