自動駕駛模擬工具CARLA的安裝

最近研究了一下自動駕駛的模擬器Airsim和CARLA,準備搭建一個學習環境來學習自動駕駛的相關知識。

Airsim最初是微軟推出的一個模擬飛行的平臺,之後增加了模擬駕駛的內容,這個平臺據網上的資料是微軟的一個較小的開源項目,因此也沒有得到太大的重視,我看了一下平臺好像也好久沒有更新了,平臺上的問題也沒有什麼人解答。我在Linux環境上下載的City Environment始終解壓有問題,看到平臺上也沒有人答覆,因此暫時放棄。

CARLA是Intel和西班牙的一個實驗室的合作項目,也是目前比較出名的一個開源的模擬駕駛平臺,因此我目前是選擇了這個項目來搭建我的模擬駕駛平臺。我的環境是由一臺Linux PC(裝配了1個GTX1070Ti和1個GTX2080Ti顯卡,沒有配置顯示器),另外一臺Windows PC遠程接入進行控制。CARLA在Linux的安裝可以直接在https://github.com/carla-simulator/carla上下載編譯好的文件,也可以自己下載源代碼進行編譯,下面介紹一下這兩種方式。

1. 直接下載編譯好的文件

推薦這種方式。把下載好的文件解壓縮到CARLA文件夾後,即可直接運行CarlaUE4.sh來啓動CARLA服務器。因爲我的Linux PC沒有接顯示器,因此我需要把圖形輸出定向到我的Windows PC,以下是配置過程:

  • 在Linux PC上配置虛擬顯示器,運行sudo nvidia-xconfig -s -a --force-generate --allow-empty-initial-configuration --cool-bits=12 --registry-dwords="PerfLevelSrc=0x2222" --no-sli --connected-monitor="DFP-0",修改/etc/X11/xorg.conf文件,增加虛擬顯示器的EDID(這個可以自己在有連接顯示器的PC上生成或者網上下載),修改後的xorg.conf文件如下:
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 410.48

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    Screen      1  "Screen1" RightOf "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 1070 Ti"
    BusID          "PCI:1:0:0"
    Option "ConnectedMonitor" "DFP"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce RTX 2080 Ti"
    BusID          "PCI:38:0:0"
    Option "ConnectedMonitor" "DFP"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Coolbits" "12"
    Option         "ConnectedMonitor" "DFP-0"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
    Option         "RegistryDwords" "PerfLevelSrc=0x2222"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth    24
    Option         "Coolbits" "12"
    Option         "ConnectedMonitor" "DFP-0"
    Option "CustomEDID" "DFP-0:/etc/X11/edid.bin"
    Option         "RegistryDwords" "PerfLevelSrc=0x2222"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
  • 編寫調整顯卡轉速的腳本文件。因爲在Linux裏面只用圖形界面才能調整風扇轉速,通過上面的配置,我們不需要接顯示器也能調整風扇轉速:
export DISPLAY=:0
xhost +
nvidia-settings -a "[gpu]/GPUFanControlState=1" -a "[fan]/GPUTargetFanSpeed=90"
  • 安裝CARLA的python庫。在CARLA->PythonAPI->carla->dist目錄裏面有2個egg文件。我的Linux安裝的是Anaconda的3.7的Python,因此用easy_install來安裝3.5的那個egg文件。
  • 配置VirtualGL和TurboVNC,按照CARLA的介紹配置即可https://carla.readthedocs.io/en/latest/carla_headless/, 只是其中的“Configure your X”這裏的命令不需要執行,因爲在前面我們已經用另一種方式配置過了(這個原因是我發現按照這裏的命令來執行則無法通過nvidia-settings來設置顯卡的風扇轉速)
  • 運行sudo nohup Xorg :7 &,這個命令運行之後有可能會自動stop,不太清楚是什麼原因,一般可以運行sudo service lightdm status之後再運行就沒問題了。之後運行/opt/TurboVNC/bin/vncserver :8,然後運行DISPLAY=:8 vglrun -d :7.0 ./CarlaUE4.sh -carla-server -benchmark -fps=50 -windowed -ResX=80 -ResY=60, 這樣就可以通過TurboVNC連接:8端口來顯示CARLA Server。要運行CARLA的Python客戶端,可以運行/opt/TurboVNC/bin/vncserver :9,然後運行DISPLAY=:9 vglrun -d :7.1 python PythonAPI/examples/manual_control.py,這樣就可以通過TurboVNC連接:9端口來模擬控制車。另外,可以運行python spawn_npc.py -n 80來自動增加一些車和行人。

2. 下載CARLA的源代碼進行編譯

參考官網的這個文檔:

https://carla.readthedocs.io/en/latest/how_to_build_on_linux/

Unreal Engine 4.22的安裝

這個按照官網的步驟安裝即可,沒有遇到問題。需要注意的是,要從UE4的Github上面把代碼克隆下來,但是Github實在是太慢了,可以在碼雲gitee.com上面來複制一個倉庫,這樣就快很多。

CARLA的安裝

首先是克隆CARLA的Github倉庫,同理可以在gitee.com上面複製一份。執行./Update.sh,這個操作會下載CARLA的UE4資源,大概有6個多G,建議下載完後把這個Content目錄保存一下,以後重裝的時候直接用回這個目錄的數據即可,不用再運行./Update.sh

然後執行make launch,這裏我就遇到了pyconfig.h無法找到的問題。我用的是Anaconda的python 3.7的環境,因爲CARLA建議的是python 3.5,因此創建一個3.5的環境,執行conda create --name carla python=3.5, conda activate carla

環境創建完成後,還要再輸入命令export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:path/to/your/Anaconda3/include/python3.5m

之後再執行make launch即可

然後是make PythonAPI, 這裏會出現問題說在PythonAPI/carla/dependicies/lib裏面找不到libboost_python35.a文件,看了Github的 issues裏面提到了可以把libboost_python27.a拷貝一份爲libboost_python35.a,但是我試過了雖然可以make成功,但是之後執行Python,import carla就會報錯, Pystring_type not define。我研究了一下Util/BuildTools/Setup.sh文件,在其中和boost相關的部分我們可以看到對於python3的安裝,有以下語句:

./b2 toolset="${BOOST_TOOLSET}" cxxflags="${BOOST_CFLAGS}" --prefix="../${BOOST_BASENAME}-install" -j

在這一句裏面增加

--with-python include="path/to/your/anaconda3/envs/carla/include/python3.5m/"

然後再編譯即可。

注意如果之前採用拷貝libboost_python27.a爲libboost_python35.a的方式編譯過,那麼需要把path/to/your/anaconda3/envs/carla/lib/python3.5/site-packages裏面的carlaXXX.egg文件刪掉,把easy-install.pth裏面相應的那行也刪掉。

最後編譯make package,應該就沒有遇到什麼問題了。可以增加-j10的參數(10表示用10個CPU核心來make,加快速度,根據你的環境來設置)

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