【Ubuntu 18.04 LTS】AirSim 仿真基礎配置(v1.3.1+UE 4.24)

對於Linux系統,目前AirSim官方測試過的系統版本爲Ubuntu 18.04LTS,推薦使用該版本。

1.虛幻引擎4安裝

1.1 在虛幻引擎4官方網站,註冊並登錄Epic Games賬戶

網址:https://www.unrealengine.com/

1.2 賬號關聯

  在個人設置中,關聯自己的GitHub帳號,之後GitHub中的Epic Games會團隊會邀請加入到開發團隊中,之後即可查看或者下載Unreal Engine

網址:https://github.com/EpicGames/UnrealEngine

1.3.安裝(AirSim官方當前官方支持的虛幻引擎版本爲4.24,其他版本並不建議,可能會出現不兼容的情況)

git clone -b 4.24 https://github.com/EpicGames/UnrealEngine.git
cd UnrealEngine
./Setup.sh
./GenerateProjectFiles.sh
make

2.AirSim安裝

git clone https://github.com/Microsoft/AirSim.git
cd AirSim
./setup.sh
./build.sh

  在執行./setup.sh時,會下載car_assets.zip,這可能會花費很長時間,如果僅進行無人機仿真的話,可以使用下面的命令來代替:

./setup.sh --no-full-poly-car

3.虛幻引擎仿真環境的準備

AirSim已經準備了一個稱之爲Blocks的簡單仿真環境,當然,這並不一定滿足您的需求,您還可以自行購買或者創建自己的仿真環境,不過值得一提的是,如果要購買仿真場景的話,只能在Windows的虛幻商城中下載,之後可以遷移到Ubuntu中。

如果您需要自行創建或者配置自己的仿真場景,可以參考:
https://qiuming.blog.csdn.net/article/details/104327689

下面我們對使用內置的Blocks場景進行簡單的介紹:

3.1 內置的Blocks場景位於…/AirSim/Unreal/Environments/Blocks路徑下,雙擊Blocks.uproject即打開虛幻引擎場景。

在這裏插入圖片描述

3.2 對其做以簡單的設置,點擊Play右側的向下的小三角,而後點擊Advanced Settings,搜索CPU,取消後臺運行時使用較少CPU的勾選,如下圖所示。

在這裏插入圖片描述

3.3 點擊Play,即可看到一架無人機出現在場景中,並且已經解鎖,下面使用代碼進行測試

在這裏插入圖片描述

3.4 打開終端,更改路徑到Python控制程序(AirSim內置,根據自己防止的AirSim進行適當修改)處:

cd ~/AirSim/PythonClient/multirotor/
python hello_drone.py 

此時可能出錯:

No module named msgpackrpc

執行下面的命令安裝缺少的包:

pip install msgpack-rpc-python

而後,重新執行python hello_drone.py,即可看到終端輸出

fire@fire-P7xxTM1:~/AirSim/PythonClient/multirotor$ python hello_drone.py 
Connected!
Client Ver:1 (Min Req: 1), Server Ver:1 (Min Req: 1)
state: <instance> {   u'collision': <instance> {   u'has_collided': False,
    u'impact_point': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'normal': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'object_id': -1,
    u'object_name': u'',
    u'penetration_depth': 0.0,
    u'position': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'time_stamp': 0},
    u'gps_location': <instance> {   u'altitude': 123.34492492675781,
    u'latitude': 47.64197914136834,
    u'longitude': -122.14017833284416},
    u'kinematics_estimated': <instance> {   u'angular_acceleration': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'angular_velocity': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'linear_acceleration': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'linear_velocity': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'orientation': <instance> {   u'w_val': 1.0,
    u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'position': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.6750681400299072}},
    u'landed_state': 0,
    u'rc_data': <instance> {   u'is_initialized': False,
    u'is_valid': False,
    u'left_z': 0.0,
    u'pitch': 0.0,
    u'right_z': 0.0,
    u'roll': 0.0,
    u'switches': 0,
    u'throttle': 0.0,
    u'timestamp': 0,
    u'vendor_id': u'',
    u'yaw': 0.0},
    u'timestamp': 1591066842833506816}
imu_data: <instance> {   u'angular_velocity': <instance> {   u'x_val': -0.001506683649495244,
    u'y_val': 0.0007826467626728117,
    u'z_val': -0.0007805040804669261},
    u'linear_acceleration': <instance> {   u'x_val': 0.04153737053275108,
    u'y_val': -0.050786156207323074,
    u'z_val': -9.817627906799316},
    u'orientation': <instance> {   u'w_val': 1.0,
    u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0},
    u'time_stamp': 1591066842836506880}
barometer_data: <instance> {   u'altitude': 123.32682800292969,
    u'pressure': 99851.5859375,
    u'qnh': 1013.25,
    u'time_stamp': 1591066842824506624}
magnetometer_data: <instance> {   u'magnetic_field_body': <instance> {   u'x_val': 0.24743011593818665,
    u'y_val': 0.03551159054040909,
    u'z_val': 0.36682388186454773},
    u'magnetic_field_covariance': [   ],
    u'time_stamp': 1591066842824506624}
gps_data: <instance> {   u'gnss': <instance> {   u'eph': 0.3000044822692871,
    u'epv': 0.40000447630882263,
    u'fix_type': 3,
    u'geo_point': <instance> {   u'altitude': 123.34492492675781,
    u'latitude': 47.64197914136834,
    u'longitude': -122.14017833284416},
    u'time_utc': 1591066842608502,
    u'velocity': <instance> {   u'x_val': 0.0,
    u'y_val': 0.0,
    u'z_val': 0.0}},
    u'is_valid': True,
    u'time_stamp': 1591066842608502016}
Press any key to takeoff

我們即可根據終端信息提示,進行操作,下面是一張飛行截圖
在這裏插入圖片描述
hello_drone.py的代碼如下:

# ready to run example: PythonClient/multirotor/hello_drone.py
import airsim
# 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.DepthPlanner, 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.getPfmArray(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)

參考文獻:

1.Build AirSim on Linux

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