人工智能的發(fā)展離不開數(shù)據(jù)的積累,在一些涉及到飛行器或自動(dòng)駕駛交通工具的項(xiàng)目里,如果使用實(shí)體的測(cè)試設(shè)備來收集訓(xùn)練數(shù)據(jù)的話,成本會(huì)變得很高,一旦在測(cè)試時(shí)出現(xiàn)墜落或撞墻,損失會(huì)較為慘重。為了降低數(shù)據(jù)收集的成本,微軟研發(fā)團(tuán)隊(duì)于今年 2 月份在 Github 上開源了一套基于虛幻引擎 4(Unreal Engine 4,以下簡(jiǎn)稱 UE4)構(gòu)建的無人機(jī)模擬飛行插件——AirSim,方便大家能以「不炸機(jī)」的方式收集用于深度學(xué)習(xí)和人工智能研究的數(shù)據(jù)。

UE4 在游戲開發(fā)上的表現(xiàn)極為出色,而 AirSim 則內(nèi)置了 UE4 商城里的一個(gè)名為「Modular Neighborhood Pack」環(huán)境包,里面高度還原了一個(gè)逼真虛擬環(huán)境,模擬了陰影、陽光炫光、陰霾和道路表面積水等真實(shí)世界的環(huán)境細(xì)節(jié),使用者可以在里面模擬無人機(jī)的操作。

使用方法
添加遙控器操作
安裝好 AirSim 后,你可以使用外接遙控器進(jìn)行模擬飛行。按照 AirSim 文檔里 Remote Control 的描述,AirSim 支持 DJI、PX4 等無人機(jī)的遙控器及一些可用的控制器,包括 XBox 360、Playstation 3 的游戲手柄,但如果要接入這些外接遙控器,就必須在電腦上進(jìn)行相應(yīng)的配置。幸好,在最新的代碼中,AirSim 內(nèi)置了名為「simple_flight」的模擬遙控器,你可以跳過配置外接遙控器的繁瑣事了。

程序控制
AirSim 允許你通過 APIs 與虛擬的飛行器進(jìn)行操作交互。如下面的 hello_drone.py 中,設(shè)置了「按任意鍵以 5m/s 的速度飛往(-10,10,-10)的坐標(biāo)點(diǎn)上」以及「按任意鍵拍照」的功能:
from PythonClient import *
# connect to the AirSim simulator
client = AirSimClient()
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)
AirSimClient.wait_key('Press any key to takeoff')
client.takeoff()
AirSimClient.wait_key('Press any key to move vehicle to (-10, 10, -10) at 5 m/s')
client.moveToPosition(-10, 10, -10, 5)
AirSimClient.wait_key('Press any key to take images')
responses = client.simGetImages([
ImageRequest(0, AirSimImageType.DepthVis),
ImageRequest(1, AirSimImageType.DepthMeters, True)])
print('Retrieved images: %d', len(responses))
for response in responses:
if response.pixels_as_float:
print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))
AirSimClient.write_pfm(os.path.normpath('/temp/py1.pfm'), AirSimClient.getPfmArray(response))
else:
print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))
AirSimClient.write_file(os.path.normpath('/temp/py1.png'), response.image_data_uint8)
收集訓(xùn)練數(shù)據(jù)
從 AirSim 中生成用于深度學(xué)習(xí)的數(shù)據(jù),最簡(jiǎn)單的方法是按右下角的記錄按鈕,點(diǎn)擊后,系統(tǒng)會(huì)記錄并寫入每一幀的飛行姿態(tài)和圖像信息。當(dāng)然,你也可以接入其 APIs,根據(jù)訓(xùn)練項(xiàng)目的需求,獲取你想要的訓(xùn)練數(shù)據(jù)。

計(jì)算機(jī)視覺模式
在該模式下,你可以通過鍵盤或 APIs 代碼指令來控制飛行器的姿態(tài)并獲取當(dāng)前顯示圖像的深度、視差、地面法線、圖像分割等信息,你還可以設(shè)置分辨率、人稱視角、動(dòng)態(tài)模糊等參數(shù)。

小結(jié)
如果只是用 AirSim 來練習(xí)飛行技巧的話,就有點(diǎn)「大材小用」了,微軟開發(fā) AirSim 的初衷是希望幫助你做些 AI-things。AirSim 的 APIs 采用 RPC 協(xié)議,支持 C++,Python,C# 和 Java 等多種語言。同時(shí),APIs 被封裝成獨(dú)立的跨平臺(tái)庫,模擬器的執(zhí)行代碼也可以在真實(shí)的無人機(jī)上進(jìn)行編譯執(zhí)行,所以訓(xùn)練數(shù)據(jù)是可以互通的。
AirSim 可以記錄使用者的操控行為,并作為深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù),比如通過大量記錄使用者躲避障礙物的操控方式,可以讓 AI 學(xué)習(xí)區(qū)分陰影與深色墻壁的差別。雖然虛擬環(huán)境不能完全替代現(xiàn)實(shí)環(huán)境下的測(cè)試,但能以這種低成本的方式獲得海量的數(shù)據(jù),對(duì)于要開發(fā)無人機(jī)或自動(dòng)駕駛技術(shù)的公司來說,簡(jiǎn)直是一項(xiàng)大福利。
最后說句,因?yàn)殓姷路颍ň褪?DroneDev 啦)上周出差了,所以拖延了一把,本來文章里還會(huì)提到 AirSim 的安裝方法,不過沒曾想單是 UE4 在 Mac OS 上的環(huán)境配置就有那么多坑,所以具體的配置方法和上手體驗(yàn)會(huì)放到下一篇推送里,嘿嘿。