DynSLAM編譯與執行
本文介紹2018年的一篇基於深度學習,同時具有稠密地圖的視覺SLAM------Dynslam.
標題:Robust Dense Mapping for Large-Scale Dynamic Environments
按照github上的編譯,下面介紹編譯過程中的其它錯誤和解決方案:
(1)安裝nvidia-docker2:
1:docker-ce安裝(由於我在直接安裝nvidia-docker2時報錯,說是這個沒有安裝,那就先裝一下吧O_O): # step 1: 安裝必要的一些系統工具 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common # step 2: 安裝GPG證書 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # Step 3: 寫入軟體源資訊 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # Step 4: 更新並安裝 Docker-CE sudo apt-get -y update sudo apt-get -y install docker-ce
# 安裝指定版本的Docker-CE:(沒試過) # Step 1: 查詢Docker-CE的版本: # apt-cache madison docker-ce # docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages # docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages # Step 2: 安裝指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial) # sudo apt-get -y install docker-ce=[VERSION] 2:獲取許可權(可以避免使用docker時新增sudo): sudo groupadd docker #新增docker使用者組 sudo gpasswd -a $USER docker #將登陸使用者加入到docker使用者組中 newgrp docker #更新使用者組 docker ps #測試docker命令是否可以使用sudo正常使用 3:安裝校驗: docker version 4:安裝nvidia-docker2("\"表示換行): docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f sudo apt-get purge -y nvidia-docker
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2 sudo pkill -SIGHUP dockerd 5:測試: docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
第五步由於時間太長,我就沒有測試了O_O
(2)編譯Pangolin
1:編譯出現-fPIC之類的錯誤的話,我的原因是安裝python3時沒有設定這個選項,重新安裝python3
./configure --prefix=/usr/local/ CFLAGS=-fPIC
make
make install
就不會報錯了.
2:編譯時如果出現examples和tools檔案編譯錯誤,註釋掉CMakeLists裡面的內容就行,不影響.
#if(BUILD_EXAMPLES)
#set(Pangolin_DIR ${Pangolin_BINARY_DIR}/src)
#add_subdirectory(examples)
#add_subdirectory(tools)
#endif()
(3)程式碼編譯:
(4)執行:
bash mkdir -p csv
./build/DynSLAMGUI --use_dispnet --dataset_root=data/mini-seq-06 --dataset_type=kitti-odometry
出現錯誤cudaSafeCall() Runtime API error : 2 | out of memory,原因可能是記憶體不夠
我的解決方法是:搜尋ITMLocalVBA.h,強制設定blockSize大小為64
ITMLocalVBA(MemoryDeviceType memoryType, int noBlocks, int blockSize)
{
this->memoryType = memoryType;
blockSize = 64;//強制改變
allocatedSize = noBlocks * blockSize;
printf("Building local VBA for storing the active map. noBlocks = %d, blockSize = %d\n",noBlocks, blockSize);
voxelBlocks = new ORUtils::MemoryBlock<TVoxel>(allocatedSize, memoryType);
allocationList = new ORUtils::MemoryBlock<int>(noBlocks, memoryType);
}
然後找到ITMLibDefines.h,設定如下:
#define SDF_BLOCK_SIZE 4 // SDF block size
#define SDF_BLOCK_SIZE3 64 // SDF_BLOCK_SIZE3 = SDF_BLOCK_SIZE * SDF_BLOCK_SIZE * SDF_BLOCK_SIZE
然後編譯執行就可以跑起來了,下面效果圖:
還不錯,哈哈,以上只是我遇到的情況,在此祝大家都能成功!!!!!