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:
-
ChatGPT