RealSense D435를 사용한 Elastic Fusion

11389 단어 3DRealSenseSLAM
약 일주일 전에 3D Sensor advent 달력을 봤는데 아직 쓰기 어려울 것 같아서 구독 버튼만 누르고 가만히 봤는데 못 채운 것 같아요. 그리고 몇 달 전에 RealSense D435를 사서 viewer를 시작해서 이렇게 놓았어요.기세로 등록했어.
그래서 뭘 해야 할지 자꾸 SLAM이 하고 싶다는 생각에 D435에 도움이 되는 RGB-SLAM 기법 중 하나인 일라스틱 퓨전을 시작하기로 했다. 리얼센스로 조작할 수 있을 것 같았기 때문이다(그리고 갑자기 이동하는 일본어 블로그를 찾지 못했다).

필자의 환경


데스크톱 PC가 GPU에 찔려 RealSense D435에 연결되어 Docker에서 이동하는 구상입니다. 참고로 ElasticFusion은 GPU에 필수적입니다.
  • RealSense D435 (FW 05.12.01.00)
  • RealSense SDK 2.31.0
  • GTX 1080
  • CUDA 10.2
  • $ uname -a
    Linux ubuntu18 4.18.0-25-generic #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
    

    Fig.1 RealSense D435와 함께 1 부속 삼각대를 신기하게 세웠습니다.

    이번에 만든 코드.


    적어도 필자와 같은 환경에서 자신이 만든 아래의 창고를 사용하면 재현할 수 있을 것이다.
  • https://github.com/eduidl/ElasticFusion-Dockerfile
  • ElasticFusion이란?


    다음 논문에서 제시한 덴스 RGB-DSLAM의 기법.

  • ElasticFusion: Dense SLAM Without A Pose Graph , T. Whelan, S. Leutenegger, R. F. Salas-Moreno, B. Glocker and A. J. Davison, RSS '15

  • ElasticFusion: Real-Time Dense SLAM and Light Source Estimation , T. Whelan, R. F. Salas-Moreno, B. Glocker, A. J. Davison and S. Leutenegger, IJRR '16
  • 활동에 많은 시간이 걸려서 논문을 볼 시간이 없어서 해설할 수가 없다.
    관심 있는 사람은takminVisual SLAM 개요의 55번째 슬라이드부터 소개가 있습니다. 저쪽을 보거나 원논문을 읽어보세요.

    창고 정보


    기존 창고https://github.com/mp3guy/ElasticFusion, RealSense SDK2.0은 지원되지 않습니다.
    그러나 2.0에 대응하는PR이 상승하면서 그 홍보원https://github.com/Daichou/ElasticFusion을 사용하기로 했다.

    환경 구조


    환경을 오염시키고 싶지 않아 Docker file을 만들었습니다.
    응, 분할이 잘 안 되는 바람에 로컬에 한 번 설치했는데 더러워졌어...판골린은 없앨 수 없어. 실제로 판골린 uninstall이라는 제목issue이 올라갔어.
    ARG CUDA_VERSION=10.2
    FROM nvidia/cudagl:${CUDA_VERSION}-devel-ubuntu18.04
    
    RUN apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE \
     || apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
    RUN apt-get update && apt-get install -y --no-install-recommends \
        software-properties-common \
     && add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u \
     && apt-get update && apt-get install -y --no-install-recommends \
        cmake \
        freeglut3-dev \
        git \
        libeigen3-dev \
        libjpeg-dev \
        libgl1-mesa-dev \
        libglew-dev \
        librealsense2-dev \
        librealsense2-dkms \
        librealsense2-utils \
        libsuitesparse-dev \
        libudev-dev \
        libusb-1.0-0-dev \
        libxkbcommon-x11-dev \
        openjdk-8-jdk \
        zlib1g-dev \
     && rm -rf /var/lib/apt/lists/*
    
    WORKDIR /opt
    
    RUN git clone https://github.com/stevenlovegrove/Pangolin.git \
     && cd Pangolin \
     && mkdir build && cd build \
     && cmake .. -DAVFORMAT_INCLUDE_DIR="" \
     && cmake --build .
    
    RUN git clone https://github.com/occipital/OpenNI2.git \
     && cd OpenNI2 \
     && make -j8
    
    RUN ln -sf /usr/include/eigen3/Eigen /usr/include/Eigen \
     && ln -sf /usr/include/eigen3/unsupported /usr/include/unsupported
    
    RUN git clone https://github.com/Daichou/ElasticFusion.git \
     && cd ElasticFusion/Core \
     && mkdir build && cd build \
     && cmake ../src \
     && make -j8 \
     && cd ../../GUI \
     && mkdir build && cd build \
     && cmake -DWITH_REALSENSE=ON ../src \
     && make -j8
    
    ENV PATH $PATH:/opt/ElasticFusion/GUI/build/
    
    WORKDIR /workspace
    

    샘플 데이터


    ElasticFusion에서 제공한 샘플 데이터dyson_lab.klg
    가 있기 때문에 먼저 이렇게 실행합니다.
    root@ubuntu18:/workspace# ElasticFusion -l dyson_lab.klg
    
    다음은 실행 중인 상황입니다. 왼쪽 열은 옵션을 변경할 수도 있고, 일시 정지, 실행, 저장 등 작업을 할 수도 있습니다. 보시다시피 복원된 3차원 결과 등을 보여 줍니다.

    다음은 파이썬과 Open 3D를 사용하여 dyson_lab.klg 의 모든 데이터를 복원한 결과를 가시화한 결과입니다. 적어도 이 데이터에 관해서는 복원할 수 있다고 생각합니다.


    RealSense D435 사용


    방금 -l에서 데이터를 지정했지만 -l를 사용하지 않기 때문에 연결된 장치로 처리합니다.
    root@ubuntu18:/workspace# ElasticFusion 
    Creating live capture... failed!
    DeviceOpen using default: no devices found
    Creating live capture... start
    Intel RealSense D435 834412070784
    Auto Exposure enable
    This camera does not support Auto White Balance option.
    Auto White Balance disable
    terminate called after throwing an instance of 'rs2::backend_error'
      what():  set_xu(...). xioctl(UVCIOC_CTRL_QUERY) failed Last Error: Device or resource busy
    Aborted (core dumped)
    
    우리의 이유는 간단하다https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md
    The Realsense DKMS kernel drivers package (librealsense2-dkms) supports Ubuntu LTS kernels 4.4, 4.8, 4.10, 4.13, 4.15 and 4.18.
    자신이 사용한 5.0은 지원 범위에 있지 않기 때문에
    Configuring and building from the source code
    While we strongly recommend to use DKMS package whenever possible, there are certain cases where installing and patching the system manually is necessary:
    - Using SDK with non-LTS Ubuntu kernel versions: 4.16 and 5.0
    https://github.com/IntelRealSense/librealsense/issues/4586에서 말한 바와 같이 scripts/patch-realsense-ubuntu-lts.sh 패치를 하면 수정할 수 있지만 자기가 잘못했는지 결과는 순조롭지 못했다.
    마지막으로 Linux Kernel의 버전을 패치가 필요 없는 4.18로 낮추고 실행했다.
    자기 방 복원 결과가 좀 불편하다2. 그래서 이불책상에 올리는 3차원 복원 결과. 2장을 붙이는 것은 3D감을 표현하기 위해서다. gif를 원하지만 방해가 되는 것을 상영하지 않기 위해서는 어렵다.


    못다 하다


    대량으로 있다.
    이불의 결과는 괜찮았는데 실제로 방에서 꼬르륵꼬르륵 돌면 자세가 변형되어 무너진 방을 얻을 확률이 상당하다.
    이 점에 관해서는 교정이 잘 되지 않을 것 같아서 더 정확하거나 초파라미터 조정을 통해 개선될 수 있다.

    잡기

  • 리눅스의 내장 버전에 문제가 있는 사례는 이번이 내 인생에서 처음이다. (들어봤다고) 실제로도 이런 상황이 있다는 것을 직접 느꼈다.
  • 나는 원래 이렇게 작은 방에서 어떻게 3DRGB-DSLAM을 만들 수 있는지 의문이 있었다. 나는 이렇게 좁은 방의 데이터 집합을 본 적이 없다. 혼자서 센서를 들고 좁은 방을 돌아다니는 것도 슬프기 때문에 좀 더 큰 방을 원한다.
  • 이걸 쓸 때 CVPR 2019의 BAD 슬램창고.이 이동이 더 쉽죠?저는...
  • 책상의 재질(그것에 의해 결정되는 마찰계수라기보다는) 때문인지 자신의 PC 책상의 책상은 유리여서 일어설 수 없다
    솔직히 아무 문제 없죠?이런 마음도 있지만, 공개적인 일이잖아

    좋은 웹페이지 즐겨찾기