AirSim動態 | 你離學會AirSim還差最後一步!

經過其前面幾期的介紹,相信大家已經部署好AirSim的環境了,也看到很多人已經開始使用AirSim上手自己的研究了。AirSim作爲一個持續更新的開源項目,其社區在開發迭代中,不斷完善功能和修復bug,所提供的API也是AirSim應用這麼廣泛的一大原因,所以瞭解AirSim的API接口是非常有必要的,下面跟着阿木一起來看看官方對於AirSim的API接口介紹。 file 介紹 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.py import airsim import time

#connect to the AirSim simulator client = 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.py import airsim import os

#connect to the AirSim simulator client = 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 images 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 the 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(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

  • End - 技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬件推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公衆號,我們將持續發佈機器人行業最有價值的信息和技術。

阿木實驗室致力於前沿IT科技的教育和智能裝備,讓機器人研發更高效!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章