MacOS Apple Silicon Ortamında AirSim Kurulumu

MacOS Apple Silicon Ortamında AirSim Kurulumu

AirSim Microsoft Research ekibi tarafından 2017 yılında Yapay Zeka araştırmaları ve deneyleri için Unreal Engine motoruyla geliştirilmiştir. İşlevini tam anlamıyla yerine getiren simülasyon yapay zeka araştırmaları için sık kullanılan bir araç olmuştur. AirSim drone araştırmaları için de sıkça kullanılan bir tool olması sebebiyle ekibin araştırmasının bir parçası olmuştur. AirSim Simulasyon Programı PX4, ArduPilot ve Hardware-In-The-Loop desteklemesi sayesinde gerçekçi ve kaliteli bir drone simülasyonu oluşturmamıza yardımcı olmaktadır. Programda bunun dışında derin öğrenme (Deep Learning), Görüntü işleme (Computer Vision), yinelemeli öğrenme algoritmaları (Reinforcement Learning algorithms) gibi yöntemler ile otonom araçlar oluşturmamıza imkan sağlamaktadır. Programın sağladığı API’ler sayesinde ise verileri alıp araçları platformdan bağımsız bir şekilde kontrol etmemizi de sağlar. Kullanıcının programlamaya başlamadan önce bilgi edinme ve toplama ihtiyaçlarının hepsini yayınlanan open source kaynağından karşılayabilmesi programı kuran ekibe programı kullanmaya başlamaya karar verirken bir artı puan vermektedir.

AirSim (Ve daha doğrusu Unreal Engine’ın önceki sürümleri) Apple Silicon’un ARM ortamına uygun olmadığı için kurulum biraz daha zorlu hale gelmiştir. Bu yazıda amaç bu kurulum sürecini eksiksiz ve hatasız şekilde Türkçe olarak sunmaktır.

MacOS ve Apple Silicon ortamında AirSim kurulumu için Microsoft’un sunduğu tutorial takip edilmektedir.

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

AirSim Unreal Engine Ortamının Kurulması

AirSim ARM ortamına uygun olarak geliştirilmediği için Rosetta 2.0’ın etkinleştirilmesi gerekmektedir.

  • Rosetta 2.0’ı etkinleştirilir.
1
    /usr/sbin/softwareupdate --install-rosetta --agree-to-license

  • Etkinleştirdikten sonra eğer indirilmemişse Xcode Command Line Tools indirilmelidir.
1
    xcode-select --install

  • AirSim Unreal Engine motorunda çalıştığı için Unreal Engine’ın indirilmesi gerekmektedir. Bunun için Epic Games Launcher’ın indirilmesi gerekmektedir.

  • Epic Games Launcher kurulduktan sonra ve bir kullanıcı hesabı açılıp Epic Games’e giriş yapılmalıdır

  • Giriş yapıldıktan sonra AirSim için uygun olan versiyonunun kurulması gerekmektedir. Motor Sürümlerinin sağındaki + butonuna tıklayarak yeni bir kutu eklenmeli.

  • Uygun olan sürüm yani 4.27.2 kutucuktaki versiyon alanından seçilmelidir.

  • Uygun versiyon seçildiğinde kutucuktaki yükle butonuna tıklanır ve sürüm yüklenir.

  • Kurulum yapıldıktan sonra terminal üzerinden AirSim GitHub’tan klonlama işlemi gerçekleştirilir ve AirSim konumuna gidilir.

1
2
    git clone https://github.com/Microsoft/AirSim.git
    cd AirSim

  • AirSim’in klonlandığı konumdaki shell scriptleri sırayla çalıştırılır.
1
2
    ./setup.sh
    ./build.sh

  • Kurulum tamamlandıktan sonra AirSim’in build edilebilmesi için Xcode’un 13.4.1 sürümü kurulmalıdır. Xcode 14 ile build alınamamaktadır.

  • Xcode 13.4.1 sürümü https://xcodereleases.com/ sitesinden indirilir.

  • İndirildikten sonra indirildiği dizine gidilir ve Xcode_13.4.1.xip dosyasına çift tıklanarak xcode.app uygulaması çıkartılır.

  • Dosya çıkartıldıktan sonra xcode.app uygulamasının ismi değiştirilir.

1
    mv Xcode.app Xcode13.4.1.app

  • Uygulama applications dosyasına taşınır.
1
    mv ~/Downloads/Xcode13.4.1.app /Applications

  • Xcode command line tool’unun eski sürüm Xcode’a point ettiğinden emin olunur.
1
    sudo xcode-select -s /Applications/Xcode13.4.1.app/Contents/Developer/

  • Xcode’un bu sürümünü çalıştırabilmek için ilgili konum kullanılır.
1
    open /Applications/Xcode13.4.1.app/Contents/MacOS/Xcode

  • AirSim/Unreal/Environments/Blocks dizinine gidilir

  • Dizine gidildikten sonra ./GenerateProjectFiles.sh terminalden çalıştırılır. UE_PATH Unreal Engine'i kurduğunuz dizindir. Bu dizini kendiniz ayarlamadıysanız /Users/Shared/Epic\ Games/UE_4.27/ dizinini kullanabilirsiniz.

  • Bu dizinde Blocks.xcworkspace Xcode 13.4.1 ile açılır.

  • target.cs dosyalarında alakalı kod eklenir.

1
2
    bOverrideBuildEnvironment = true;
    AdditionalCompilerArguments = "-Wno-unused-but-set-variable";

  • Açıldıktan sonra Blocks projesi için Info.plist dosyasının otomatik oluşturulması sağlanır.
  • Command+B ile build işlemi gerçekleştilir.

  • Bu yapıldıktan sonra Unreal Engine açılır ve shaderların derlenmesi için biraz beklemeniz gerekmektedir.

  • Shaderlar kurulduktan sonra More butonuna tıklanır ve sağ aşağıdaki browse tuşuna tıklayarak AirSim/Unreal/Environments/Blocks dizinindeki Blocks.uproject dosyası seçilir.

  • Seçildikten sonra eğer farklı bir versiyonda unreal engine kullanıldığına dair bir uyarı çıkarsa “More Options…” seçeneği seçilir ve ardından “Convert in-place” seçeneği seçilir.

  • Ortamın yüklenmesi ve shaderların derlenmesi beklenir.

  • Unreal Editor’un açılmasını beklerken Car kullanıp kullanmayacağımız sorulur ve “No” seçeneğini seçeriz.

Python gereksinimlerinin indirilmesi için.

  • AirSim’in python ortamının oluşturulması için Anaconda’nın indirilmesi gerekmektedir.

  • Anaconda indirildikten sonra airsim sanal ortamı oluşturulur ve alakalı ortam aktif edilir.

1
2
    conda create --name airsim python=3.8
    conda activate airsim

  • pyaudio’nun Apple Silicon işlemcili cihazlarda çalışabilmesi için önce alakalı işlemlerin gerçekleştirilmesi gerekmektedir.

  • Önce brew ile portaudio indirilir.

1
    brew install portaudio

  • portaudio link edilir.
1
    brew link portaudio

  • portaudio’nun kurulu olduğu dizin sonradan kullanım için bulunur ve kopyalanır.
1
    brew --prefix portaudio

  • home dizininde .pydistutils.cfg dosyası oluşturulur.
1
    sudo nano $HOME/.pydistutils.cfg

  • Ve önceden kopyaladığımız portaudio’nun dizinini alakalı yere yapıştırarak aşağıdaki bilgileri konfigürasyon dosyasının içine ekleriz ve dosyayı kaydederiz.
1
2
3
    [build_ext]
    include_dirs=<PORTAUDIO'NUN DİZİNİ>/include/
    library_dirs=<PORTAUDIO'NUN DİZİNİ>/lib/

  • Bu tamamlandıktan sonra AirSim’in altındaki PythonClient dizinine gidilir ve python gereksinimleri indirilir.
1
pip install -r requirements.txt

AirSim’in Apple Silicon ortamında çalıştırılması

Unreal Engine motoruyla proje açılır ve karşımıza ekran çıkar.

  • Karşımıza çıkan bu ekranda şimdilik bir şeye dokunmadan direkt olarak play’e basabiliriz.

  • Dosyanın altında ise settings.json adında dosya olacak, o dosyada konfigürasyon yapmamız gerekmektedir.

  • Dosyayı aşağıdakine uygun şekilde konfigüre etmemiz gerekmektedir.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    {
      "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/main/docs/settings.md",
      "SettingsVersion": 1.2,
    
      "SimMode": "Multirotor",
    
      "Vehicles": {
       "Agent_0": {
         "VehicleType": "SimpleFlight",
         "X": 2.0,
         "Y": 0.0,
         "Z": 1.7,
         "Yaw": 0.0
       }
    }
    }
  • Bu ayarı yaptıktan sonra ise drone ile iletişime geçebilecek hale geliriz.

  • Bu ayar sonrasında simülasyonu durdurup baştan çalıştırmamız gerekmektedir.

  • Play’e bastığımız anda bir şey gerçekleşmeyecek. Gerçekleşmesi için ortamdaki drone ile iletişim kurmamız gerekmektedir.

  • Bunun için de bir Python scripti yazıp çalıştırmamız gerekmektedir. Bu yazıda sadece ufak bir hareket etme scripti yazılacaktır.

  • Hareket etme scriptini çalıştırmak için uygun Python ortamı gerekmektedir. (Bir önceki Python gereksinimlerinin indirilmesi için adımında bu anlatılmıştır.)

  • Conda airsim ortamına geçmemiz gerekir, bunun için aşağıdaki komut kullanılır.

1
    conda activate airsim
  • Airsim ortamına geçtiğimizi şekildeki gibi anlayabiliriz.
1
    (airsim) user@MacBook ~ %
  • Bu tamamlandıktan sonra Airsim kütüphanesinin indirildiğinden emin olunulur. Bu pip kullanılarak indirilmelidir. Pip adresine bu link üzerinden ulaşılabilir.
1
    pip install airsim
  • En sonda conda list komutu çalıştırılarak şu paketlerin indirildiğinden emin olunulur.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    (airsim) user@MacBook ~ % conda list
    # packages in environment at /Users/user/anaconda3/envs/airsim:
    #
    # Name                    Version                   Build  Channel
    airsim                    1.8.1                    pypi_0    pypi
    ca-certificates           2023.01.10           hca03da5_0
    libcxx                    14.0.6               h848a8c0_0
    libffi                    3.4.4                hca03da5_0
    msgpack-python            0.5.6                    pypi_0    pypi
    msgpack-rpc-python        0.4.1                    pypi_0    pypi
    ncurses                   6.4                  h313beb8_0
    numpy                     1.24.3                   pypi_0    pypi
    opencv-contrib-python     4.7.0.72                 pypi_0    pypi
    openssl                   1.1.1t               h1a28f6b_0
    pip                       23.0.1           py38hca03da5_0
    pyaudio                   0.2.13                   pypi_0    pypi
    python                    3.8.16               hc0d8a6c_3
    readline                  8.2                  h1a28f6b_0
    setuptools                66.0.0           py38hca03da5_0
    sqlite                    3.41.2               h80987f9_0
    tk                        8.6.12               hb8d0fd4_0
    tornado                   4.5.3                    pypi_0    pypi
    wheel                     0.38.4           py38hca03da5_0
    xz                        5.4.2                h80987f9_0
    zlib                      1.2.13               h5a0b063_0

  • Bundan emin olunduktan sonra aşağıdaki script çalıştırılabilir. Bu kodlarda detaya inilmeyecek, sadece AirSim’in başarıyla çalışıp çalışmadığı kontrol edilecektir.
1
2
3
4
5
6
7
8
9
    import airsim
    
    client = airsim.MultirotorClient() client.confirmConnection() client.enableApiControl(True, "Agent_0") client.armDisarm(True, "Agent_0")
    
    client.takeoffAsync(vehicle_name = "Agent_0").join()
    
    client.moveToPositionAsync(10, -10, 10, 10, vehicle_name="Agent_0")
    
    client.landAsync(vehicle_name= "Agent_0").join()
  • Bu python scriptini aşağıdaki komut kullanılarak çalıştırabiliriz. (Unutmayın bu adımda unreal engine’da açık olan projenin çalışır vaziyette olması gerekmektedir yoksa iletişim kurulması gerçekleşemez.)
1
2
3
    (airsim) user@MacBook yte-airsim % Python Moving.py
    Connected!
    Client Ver:1 (Min Req: 1), Server Ver:1 (Min Req: 1)

Drone şekildeki gibi hareket edecektir.

Okuduğunuz için teşekkürler.

Kaynaklar: