前言
今天想要跟大家介紹一個很酷的自駕車模擬環境 - CARLA,而且可以用 Amazon AWS 來建立環境,所以就算是沒有 Ubuntu 的朋友,也可以很方便地上手。如果你想試試看 Windows 版本也行,CARLA 有 Windows 版本。
CARLA 簡介
CARLA (Car Learning to Act) 是一個為了方便 developer 發展自駕車所開發的模擬器,而且 CARLA 是使用 Unreal Engine 4 開發的,畫面非常的漂亮,可以模擬各種場景、天氣,也有不錯的物理引擎,讓測試環境盡可能逼真。
CARLA 更讚的地方是,他完全開源,如果你有自己的特殊需求,也改得動程式碼的話,你可以直接外帶一份 source code 開始修改。
CARLA 有很多很棒的 feature,講幾個我覺得特別讚的:
- 支援 Multi-client:也就是說可以有多個程式連到 server,操控模擬環境中不同的 actor。所以如果我想測試多種版本的自駕系統,我可以讓這多個版本同時連上 CARLA,每個版本都是一台車
- 應該盡有的 sensor 支援:自駕車常用到的 camera、lidar、radar、IMU、GNSS 等等都有
- 可以更快速地模擬 planning & control:如果只想看 planning 跟 control 的表現,就可以把 rendering 關掉,減少資源消耗
- 可以控制環境中的交通狀況:CARLA 提供很大的客製化空間,甚至連有多少 % 的車會不遵守紅綠燈都可以設置
CARLA 環境
簡介完之後,想必大家都躍躍欲試,我是用 AWS 來跑 CARLA,基本的安裝方法可以參考這個網頁:
https://github.com/jbnunn/CARLADesktop
要連上機器,可以參考一下這個頁面:
用 ssh 連上機器的指令是:
ssh -i /path/my-key-pair.pem(local path) my-instance-user-name@my-instance-public-dns-name
如果是 Ubuntu,my-instance-user-name 就是 ubuntu。另外要記得 chmod 400 /path/my-key-pair.pem
不然會因為權限問題無法連上。
安裝 CARLA 後遇到的問題
我照著上面的步驟安裝完之後,會啟動失敗,原因是找不到某個 symbol file - "/opt/carla-simulator/CarlaUE4/Binaries/Linux/CarlaUE4-Linux-Shipping.sym":
ubuntu@ip-172-31-31-121:/opt/carla-simulator/bin$ SDL_VIDEODRIVER=offscreen ./CarlaUE4.sh
4.22.3-0+++UE4+Release-4.22 517 0
Disabling core dumps.
Signal 11 caught.
Malloc Size=65538 LargeMemoryPoolOffset=65554
CommonUnixCrashHandler: Signal=11
Malloc Size=65535 LargeMemoryPoolOffset=131119
Malloc Size=120416 LargeMemoryPoolOffset=251552
Failed to find symbol file, expected location:
"/opt/carla-simulator/CarlaUE4/Binaries/Linux/CarlaUE4-Linux-Shipping.sym"
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
Signal 11 caught.
Malloc Size=65538 LargeMemoryPoolOffset=65554
CommonUnixCrashHandler: Signal=11
Malloc Size=65535 LargeMemoryPoolOffset=131119
Malloc Size=120416 LargeMemoryPoolOffset=251552
Failed to find symbol file, expected location:
"/opt/carla-simulator/CarlaUE4/Binaries/Linux/CarlaUE4-Linux-Shipping.sym"
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
ubuntu@ip-172-31-31-121:/opt/carla-simulator/bin$ DISPLAY= ./CarlaUE4.sh -opengl -carla-port=2000
4.22.3-0+++UE4+Release-4.22 517 0
Disabling core dumps.
Signal 11 caught.
Malloc Size=65538 LargeMemoryPoolOffset=65554
CommonUnixCrashHandler: Signal=11
Malloc Size=65535 LargeMemoryPoolOffset=131119
Malloc Size=107920 LargeMemoryPoolOffset=239056
Failed to find symbol file, expected location:
"/opt/carla-simulator/CarlaUE4/Binaries/Linux/CarlaUE4-Linux-Shipping.sym"
Engine crash handling finished; re-raising signal 11 for the default handler. Good bye.
Segmentation fault (core dumped)
不知道為啥出錯,這時候就要來首歌,放鬆一下:
解決方法
弄了一下還是無法成功,一氣之下直接 用 docker:
安裝 command:docker pull carlasim/carla:0.9.8
執行 command:docker run -p 2000-2002:2000-2002 --runtime=nvidia --gpus all carlasim/carla:0.9.8
測試是否能跑,開一個新分頁,:
cd /opt/carla-simulator/PythonAPI/examples
conda activate carla
python manual_control.py
跑起來應該就會看到模擬的場景囉。
然後就可以用 WASD 來玩你的車車啦!Manual mode 裡面的各種按鍵,可以參考這個 cheat sheet(一定要按按看 Backspace,還可以變出腳踏車,笑死了)。
也許你開一開會覺得孤單,怎麼連在 CARLA 裡面都被隔離,可以用先產生出一些 NPC,多一點假的朋友:
cd /opt/carla-simulator/PythonAPI/examples
conda activate carla
python3 spawn_npc.py
再用下面的 example code 讓天氣變化,看看不同的風景!
cd /opt/carla-simulator/PythonAPI/examples
conda activate carla
python3 spawn_npc.py
關掉 simulator:
docker ps # look up container name
docker stop <container_name>
總結
今天介紹了一個很簡單的玩 CARLA 方法,就算你沒有環境,對 Linux 不熟,用 AWS + docker 就可以跑起模擬環境,非常 user-friendly,之後有機會再介紹一些 CARLA 的進階功能!