본문 바로가기

research

kinfu large scale 설치 과정

pcl(pointclouds.org)에서 제공하는 kinect fusion large scale 


먼저 키넥트 설치(sensor kinect, nite, openni 등등) 후, simpleViewer가 문제없이 작동하는 것을 보고 아래와 같이 진행한다.

작업환경 windows 7 (64bit). vs2010(32bit), gtx650 ti

<참고로 가능하면 닷넷프레임워크 4.0 -> windows sdk 7.1 -> vs2010 -> sp1 -> windows sdk 7.1용 msvs 2010 sp1 컴파일러 업데이트(http://www.microsoft.com/ko-kr/download/details.aspx?id=4422) 설치>


참고문서 : 

Compiling_PCL.pdf



1. Dependencies 를 다 깐다.

http://sourceforge.net/projects/pointclouds/files/dependencies/

여기에서 BOOST 1.50, eigen 3.0.5, flann 1.7.1, QT 4.8,qhull 6.2.0, gtest를 다운받아 설치한다. 

(gtest는 나중에 src가 필요할 수 있는데 그러면 gtest 전체를 다운받아서 src 폴더만 복사해다가 위에서 다운받았던 gtest root안에 갖다가 붙여넣기하면 된다. )

(http://pointclouds.org/documentation/tutorials/compiling_pcl_dependencies_windows.php#compiling-pcl-dependencies-windows 참조)

괜히 src 파일이나 여타 다른 걸로 받으면 결국 빌드를 다 해줘야되는데, 그전에 cmake 해야되고 어쩌고 저쩌고 할게 많기 때문에 dependencies는 왠만하면 .exe로 다운받아서 깐다. 당연히 컴퓨터 환경에 맞는 것으로 깔아야 한다.

 vtk 5.8는 exe말고 따로 http://www.vtk.org/VTK/resources/software.html 여기로 가서 다운받아 cmake와 build를 해준다.

vtk는 폴더 안에 cmake 할 수 있는 프레임워크가 다 있기 때문에 걍 경로를 환경변수 설정해주고 cmake 하면 에러없이 쭉 넘어간다.

다만 pcl 공홈에서 dependencies 컴파일하는 설명 나온 위쪽에 링크해놓은 저 사이트에 설명이 되어있듯이 쿠다 사용한다는 체크박스에 체크하고 configure, 그러면 생기는 opengl관련된 체크박스에도 체크해주고 configure.

cmake 하는 법은 아래 3번 설명을 참고한다. cmake가 끝나고 vtk.sln 생기면 그걸 빌드하면 된다. debug와 release모드 둘다 한다.

저것들 외에 추가적으로 필요한 mpi, nsis, python, cuda 도 깔아준다. 난 cuda 5.0을 깔았다.

다 깔면 각 폴더의 위치를 환경변수로 지정한다. path에다가 다 추가한다. bin이 있으면 bin으로 해주고 없으면 root로 해준다.

(vtk는 bin\debug 안에 dll 이 생겨야 된다. 간혹 컴파일을 다 완료 했는데도 안생기는 경우가 있는데 cmake 시에혹시 빨간글씨가 잔뜩 떴다면 잘 읽어보고 해결한 후에 다시 빌드한다.)


2. PCL을 다운받는다. 

이건 소스를 받아서 깐다. 받으려는게 이미 올려진 소스 그대로 돌리기만 하고 싶어서 다운받는 사람은 없을 것이기 때문에.. 

https://windows.github.com/ 여기에서 github 프로그램을 다운받는다.

다운받아서 github를 실행시키고, https://github.com/PointCloudLibrary/pcl.git 페이지에 들어가서 주소창을 클릭한 상태로 github 창으로 드래그하면 자동으로 다운받아 진다. 

단, 웹 브라우저를 크롬으로 써서 난 잘됐는데, IE를 쓰는 다른애는 잘 안되는건지.. 걍 아예 안되는건지.. 안됐다. 안되나보다.

만약 github 쓰기 싫고 그냥 PCL 공식 사이트내에서 다운받고싶다면 1.7. 

1.6은 라지스케일이 없는듯


3. PCL을 cmake 한다.

pcl을 다운받아서 드가보면 그 하위에 엄청나게 많은 애들이 생긴다. pcl 에 trunk라는 폴더를 하나 만들어서 pcl안에 들어있는걸 다 통째로 집어 넣는다. 그럼 GitHub/pcl/trunk/ 안에 다 들어있게 되는거다. 

그럼 cmake를 다운받는다. http://cmake.org/cmake/resources/software.html

3.0 받으면된다. 2.8 로 pcl 공홈에서는 보여준거 같은데.. 

암튼 난 3.0으로 했다. 

cmake 실행을 시키면 아래같은 창이 뜬다. 내용물은 완료됐을때 나오는 것이고.. 


위에 where is the source code에 pcl/ trunk 폴더를 넣는다. 위에 설명한 대로의 폴더라면 C:/Users/<계정이름>/Documents/Github/pcl/trunk 로 표시될 것이고.

그 아래 where to build the binaries 에는 pcl 폴더를 넣는다. 역시 위 설명대로라면 C:/Users/<계정이름>/Documents/Github/pcl 이 될 것이다.

그 상태로 configure를 클릭하면 Generator를 선택해야하는데 나는 visual studio 10 2010 Win 64를 선택했다. 맞는걸 선택하면 된다.

확인을 누르면 저 사진처럼 하얀화면이 나오는게 아니고 하얀 화면이 빨갛게 된다. 환경 변수 설정이 잘되어있다면 특별히 저 창안에서 경로 설정을 해야할일이 없다. 단지 BUILD에서는 BUILD_all_in_one_installer를 제외하고 나는 BUILD의 모든 체크박스에 다 체크를 했다. 만약 본인이 필요하지 않다고 생각하는 것이 있으면 체크를 하지 않아도 될듯. 다만 kinfu large scale을 위해서는 디폴트 상태로 configure하면 안되니 체크항목을 잘 살피길.. 모르겠으면 build 안에 _all_in_one_installer랑 pcl global test라는거랑 pcl example 이라고 되있는 체크박스 빼고 다 체크한다. 그리고 configure.

configure를 누를때마다 항목도 늘어나고 알아서 경로도 찾는다.

위 사진에서 아래 상태 창을 보면 The following subsystems will not be built : 의 아래에 .. 그러니까 빌트가 안될거가 저 시뮬레이션 어쩌구만 있어야 된다.

Configuring done이 뜨면 Configure 옆에 있는 Generate를 누르면 된다. 

그럼 Generating done.

그럼 pcl 폴더 안에 PCL.sln이 생긴다. 이걸 빌드하면 된다.


4. c++코드 에러

빌드할때나 cmake할 때 에러만 잡다가 지치는 경우가 있는데.. 제대로 설치가 됐다면 그닥 에러가 많이 나지 않는다. 

cmake는 설치만 제대로 되있고 경로 설정이나 버전만 맞게 설치되있다면 거의 에러 팝업 한번 못보고 done done 이고, 그것보다는 빌드 에러가 골치아프다.

빌드하면 된다. 라고 간단히 썼지만 무수한 에러와 마주하게된다.

특히 라이브러리 충돌이나 debug/release 모드 에러가 나는 경우는 진짜 짜증.. 

여러 곳을 참고한 결과로는 vs2010의 버그인거 같기도하고.. 잘 모르겠으나... 

오류 한줄한줄 정독을 해보니 VTK 관련 오류가 많아서 VTK 빌드된 결과물을 봤는데 

있어야 될 파일들이 몇 개 빠져있는것을 봤다.

그래서 vtk를 다시 cmake하고 다시 빌드해서 오류없이 끝냈더니 필요한 파일들이 생겼다.

특히 debug 하고서 .dll 파일들을 system32에 갔다가 다 넣어버렸다. 

그랬더니 불일치 에러나 충돌에러는 다 사라졌다. 

그래도 최종으로 326개중에 4개는 빌드가 안된다. ㅡ_ㅡ

nurb feature 관련된 2개랑 test 관련된거 2개.. 2001 링크에러가 계속나는데 별 상관없을거 같아서 걍 내비뒀다...; 


5. cuda 코드 & GPU 동기화 에러

cuda 코드에서 에러가 계속 나는데 safe 함수였나.. 이름이 정확히 기억 안나는데 암튼 그 함수 호출에서 에러가 났다.

여러 cuda 코드에서 같은 에러가 났기 때문에 뭔가 문제가 있나 봤더니 

내 그래픽카드가 넘 좋은거라(GTX 850) cuda 5.0으로는 안되는듯

GTX 750부터는 cuda 6.0을 쓰라고 나와서 cuda 6.0으로 바꾸고 환경변수도 바꾸고 ..

그리고 GPU architecture를 업하라고 나오는데, 보니까 cmake 할때 CUDA_ARCH_BIN을 set할때 해줘야 되는가보다.

pcl_find_cuda.cmake에 set하는 부분이 있는데 거기에다가 GTX 850의 compute capa인 5.0 까지로 set하고, 

sm 하나당 코어 개수도 set해줘야된다. 

capa는 cuda 공홈에 들어가보면 있다. http://developer.nvidia.com/cuda-gpus

긍까 2.0 2.1(2.0) 3.0 3.5 5.0 이렇게 set했다. 원래는 3.0 까지만 되있다.

gpu/containers/src/initialization.cpp 에서 sm_50에 대한 core 128을 set한다.

(118번째 줄에 gpuArchCoresPerSM[]에서 하면된다.) 

그런데 raycasting 결과물.. ray tracing에서 노이즈가 섞인다. 

케플러까지는 core 하나당 alu가 1개인데, gtx 750부터 바뀐 맥스웰 아키텍쳐에서는 core하나당 alu가 2개다.

그래서 결과적으로 core 개수는 케플러보다 줄었지만 alu는 늘은것이 된다. 그래서 추가로 더 셋해야 되는 부분이 있는건지

대체 되지가 않아서 골치아프다. pcl 2.0이 나올때까지 기다렸다가 노트북은 돌려야되는가....


그래서 노트북은 잠시 버려두고 gtx 650 ti 데스크탑에서 실행했더니 문제없이 된다. 

데스크탑에서는 실행완료.












'research' 카테고리의 다른 글

Jenkins install (AWS EC2)  (0) 2019.04.23
특징 학습 中  (0) 2015.02.05
기존 SLAM 시스템들의 단점(?)  (0) 2014.12.15
odometry 시스템 비교  (0) 2014.10.08
[논문] deformation-based loop closure for large scale dense RGB-D SLAM  (0) 2014.07.10