2019년 6월 5일 수요일

우분투 기반 벨로다인 라이다와 ROS 설치, 연결 및 설정

로버나 드론 기반에서 LiDAR를 연결해 스캔하고 데이터를 처리하고자 할 때, NVIDIA TK2, 라즈베리파이, 오드로이드(ODROID)와 같은 임베디드 컴퓨터를 사용해야 하는 경우가 있다.

이 글은 NVIDIA TK2, 오드로이드 등 임베디드 보드에 연결된 벨로다인 VLP16을 이용해 스캔 데이터를 ROS RVIZ로 처리하는 방법을 간략히 정리한다. 참고로, 지난번 글에서는 윈도우에서 VPL16 LiDAR 설정 방법을 다루었었다. 참고로, 오드로이드는 이 설치방법을 참고하길 바란다. NVIDIA TK2나 인텔 호환 PC도 설치 방법은 동일하다.
Velodyne VLP16 ROS RViz 실행 모습(오드로이드)

ROS 벨로다인 LiDAR VPL16 설정 및 패키지 설치
벨로다인 설정 및 설치 방법은 아래 글을 참고하였다.
LiDAR 이더넷 연결 단계는 다음과 같다. 
  1. LiDAR 파워 연결
  2. LiDAR와 오드로이드 간 이더넷 케이블 연결
  3. 오드로이드 WiFi 끄기
  4. Networks Connections 실행. edit를 선택해 IPV4 설정 탭 선택. "Method"를 "Manual"로 변경
  5. add를 선택해 IP 주소 필드에 192.168.1.70 설정
  6. Netmask는 255.255.255.0, Gateway는 0.0.0.0 설정
  7. Routes > Use this connection only for resources on its network 선택 (for WiFi connection)
  8. OK > save 선택
IPv4 setting

Routes setting

LiDAR 설정단계는 다음과 같다.
  1. 터미널에서 다음 명령 입력. sudo ifconfig eth0 192.168.3.100
  2. LiDAR IP 주소에 고정 라운트를 추가함. IP주소는 제품 CD 케이스에 포함되어 있음 (참고로 벨로다인 VLP16 라이다에 기본 설정된 IP는 192.168.1.201 임). sudo route add 192.168.XX.YY eth0 
  3. LiDAR 설정 체크를 위해, 인터넷 브라우저에 192.168.XX.YY 입력해 세부 설정 화인
혹시 eth0가 안보인다면, 다음 파일에 eth0를 설정, 맵핑한다.
sudo gedit /etc/udev/rules.d/70-persistent-net.rules

편집 내용은 다음과 같다. 여기서, ATTR{address}는 벨로다인을 연결했을 때 mac 주소이며, KERNELS는 이더넷 PCI 장치 번호이다. 이 장치 번호는  lspci -D 명령을 통해 확인할 수 있다.
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="40:8D:5C:B1:D9:A0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNELS=="0000:02:00.0", NAME="eth0"

이제, VLP16 ROS 패키지를 다음과 같이 설치한다. 참고로 VERSION은 melodic이다.
sudo apt-get install ros-VERSION-velodyne

만약 제대로 설치되지 않으면, 다음과 같이 소스코드를 다운로드받아 직접 빌드한다. 
  1. cd ~/catkin_ws/src/ && git clone https://github.com/ros-drivers/velodyne.git
  2. cd ..
  3. rosdep install --from-paths src --ignore-src --rosdistro YOURDISTRO -y
  4. cd ~/catkin_ws/ && catkin_make
혹시 rospkg 등이 제대로 설치되지 않아 빌등 에러가 발생하면 해당 패키지를 다음과 같이 설치하고 재시도한다.
pip install rospkg

제대로 설치가 되면, 다음과 같이 터미널에서 ROS를 실행한다.
source ~/.bashrc
roscore
ROS 실행된 모습

터미널에서 다음과 같이 velodyne VLP16 노드와 토픽을 실행한다.
roslaunch velodyne_pointcloud VLP16_points.launch
rosnode list
rostopic echo /velodyne_points

velodyne pointcloud node 실행 후 rosnode list 결과

rostopic echo 실행 결과

rviz 를 다음과 같이 실행한다.
rosrun rviz rviz -f velodyne

RViz에서 다음과 같이 Point Cloud 토픽 데이터를 볼 수 있도록 설정한다.
  1. RViz > display > Add 선택 후 Point Cloud2 선택 확인
  2. Topic 필드에 Point Cloud2 탭에서 "/velodyne_points" 입력 후 확인
설정 후 다음 같이 벨로다인에서 획득한 포인트 클라우드를 확인할 수 있다.

RViz 실행 모습

추신 - 요즘 오랜만에 시간이 나서 1년동안 쌓여 있던 장비와 컨텐츠들을 꺼내 쌓인 먼지를 털고 기억을 떠올려가며 정리한다. 회사가 정출연이라 직업은 연구하는 것인데, 여기 저기서 행정으로 인터럽트가 걸리고, 정신차려보면 몇년이 흘러 있는 경우가 많음. 브랜드 기술력 쌓으며 연구하기 정말 어려운 환경. - 넌센스

추신 - 시스템 안전성 테스트를 위해 2019년 6월 5일부터 현재(6월 17일)까지 LiDAR를 실행해 보았다. 아직 잘 동작하고 있다.

부록: VeloView 설치 및 실행
다음 링크를 참고해 VeloView를 설치하고 실행한다. 단, VeloView 설치 파일은 아직 64비트만 지원하고 있어, 직접 소스코드를 빌드해야 한다. 이 경우, QT4 패키지 업데이트 부분이 있는 데, 이는 오드로이드의 EGL과 Segmentation fault를 유발한다. 이 경우, 여기를 참고해 QT를 다시 설정해야 한다.
레퍼런스

댓글 9개:

  1. 안녕하세요. 상세한 벨로다인 셋업 설명으로 많은 도움이 되었습니다. 포스트 내용을 보던 중에 궁금한 사항이 있어 댓글을 남깁니다. 벨로다인을 쓰려면 wifi 를 off 해야 하는데, 이 경우에 remote PC 연결이 안되게 되는데 이 경우에 어떻게 해야 할까요?.

    답글삭제
    답글
    1. wifi off 안하셔도 됩니다. 그냥 wifi 연결해도 velodyne IP에서 ros가 센서 받아 옵니다. 참고로 저는 ros로 밸로다인 데이터 받으며, hot spot으로 wifi 잘 쓰고 있습니다.

      삭제
    2. 감사합니다. 말씀하신대로 wifi 잘 되네요. "오드로이드 WiFi 끄기" 문구를 보고 계속 off 상태도 둔다고 생각했습니다.

      삭제
  2. vlp 16기반 C++로 객체와 객체사이 거리 측정하는 프로그램을 만들고싶은데 오드로이드가 필수적인가요?

    답글삭제
    답글
    1. 오드로이드가 필수는 아닙니다. 크기가 작고 오랫동안 한곳에서 동작할 때 필요해서 임베디드 사용한 것 뿐입니다.

      삭제
  3. 안녕하세요 veloview 설치는 우분투 16.04LTS 에서만 설치 가능한가요?

    답글삭제
    답글
    1. 개발하는 입장에서 이 질문에 대한 답변을 줄 수 있을 것 같아, 제가 아는 선에서 답변을 남깁니다. 우선 본 글에서 작성한 Rviz와 질문하신 Veloview는 다른 뷰어이며, 제 경험상 20.04에서 Velowview는 무엇 때문인지는 모르겠으나 연결이 되지 않았으며 현재 18.04LTS로 바꿔 잘 사용하고 있습니다. 따라서 최종적으로, 질문에 대한 답으로는 16.04LTS에서만 되는건 아닙니다. 본 답변이 도움이 되길 바랍니다.

      삭제
  4. VLP-16 처음 사용하는 입장에서 개발환경 구축하는 과정에서 많은 도움을 얻고 갑니다. 정말 감사합니다.

    답글삭제