본 포스팅에서는 ROS 공식 문서를 참조하여 Velodyne VLP16의 센서 데이터를 받을 수 있는 과정에 대해 다루겠다. 이는 Ubuntu 20.04의 ROS noetic환경과 VLP16 Lidar를 활용하여 진행되었다.
velodyne/Tutorials/Getting Started with the Velodyne VLP16 - ROS Wiki
Note: This tutorial pretends to use the INDIGO ROS distribuition, make sure you have it installed in your system.. Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this
wiki.ros.org
먼저, 라이다를 연결하고자 하는 PC나 임베디드 시스템에 연결하는 과정을 진행해야한다.
12V 전원 어댑터로 (기억이 가물가물하지만 12V였던 것 같다) 라이다에 전원을 공급해주고 랜선으로 라이다와 PC를 연결해준다.
1. 네트워크 설정
이제 네트워크 설정을 통해 통신 환경을 설정해줘야 한다.
이 때 WIFI는 꺼줘야한다. (최초 연결이 완료된 후에는 WIFI를 사용해도 무관하다.)
Ubuntu Setting에 들어가서 Networks Connections에서 연결되어 있는 네트워크의 이름을 구분할 수 있도록 바꿔준다. 나의 경우에는 " Velodyne "으로 설정했으며 인터넷 포트는 정말 단순하게 " Internet "으로 구분하였다.
맘에 드는 이름으로 바꾼 후, 아래 사진과 같이 [IPv4 Settings]에 들어가서 [Method]를 [Manual]로 변경한 뒤 [Add]를 클릭해서 [Address]는 192.168.1.100으로, [Netmask]는 255.255.255.0으로 [Gateway]는 0.0.0.0으로 설정해준다.
[Apply] 후에 Terminal을 열고 다음 명령어를 입력해준다.
sudo ifconfig eth0 192.168.3.100
sudo route add 192.168.XX.YY eth0
이 때 etho0를 그대로 치면 안되고 ifconfig 명령어를 터미널에서 실행한 뒤 나오는 첫번째 인터페이스를 가져다 대체해줘야한다.
sudo apt install net-tools
ifconfig
또한 두번째 커맨드의 192.168.XX.YY는 VLP16의 CD 케이스에 있는 IP address로 연결해주면 되는데 일반적으로 192.168.1.201로 설정하면 된다.
예를 들어 ifconfig를 친 후, enp0s3가 첫번째 인터페이스라면 다음과 같이 입력하면 된다.
sudo ifconfig enp0s3 192.168.3.100
sudo route add 192.168.1.201 enp0s3
첫번째 커맨드는 해당 포트에 192.168.3.x범위의 IP를 정적으로 할당해주는 과정이고, 두번째 커맨드는 static route, 즉 정적 루트를 추가해주는 과정이다.
이제 인터넷 브라우저를 열고 http://192.168.1.201/로 이동하면 다음과 같은 설정창이 나올 것이다. (나만 그런지는 모르겠지만 명령어를 입력하고 내 경우엔 30분에서 1시간 정도가 지나야 통신이 되었었다. 정확히 왜그런지는 모르겠지만 이더넷을 잡는 시간이라나 뭐라나...)
2. ROS dependencies 설치하기
sudo apt-get install ros-VERSION-velodyne
VERSION에 자신의 ROS버전에 맞는 버전이름을 입력해주면 된다. 나는 noetic version을 사용 중이기에 다음과 같이 입력했다.
sudo apt-get install ros-noetic-velodyne
3. VLP16 driver 설치하기
(이는 ROS환경에 driver를 설치해본 사람이라면 지긋지긋할 정도로 익숙한 작업일 것이다. 내가 그렇다.. ㅇㅅㅇ)
cd ~/catkin_ws/src/ && git clone https://github.com/ros-drivers/velodyne.git
cd ..
rosdep install --from-paths src --ignore-src --rosdistro YOURDISTRO -y
(잡설이긴 하지만 ROS2 foxy의 경우 위 명령어에서 오류가 난다면 -r을 붙여보길 추천한다. 마법같이 해결될 것이다. 참고로 나는 ROS2 bag data 포맷이 정말 쓰기 어렵게 되어있어서 정신건강을 위해 미련없이 버린 후 ROS1에 정착했다.)
cd ~/catkin_ws/ && catkin_make
아래는 혹시모를 ROS2 유저를 위한 rosdep 커맨드이다.
rosdep install --from-paths src --ignore-src --rosdistro YOURDISTRO -y -r
4. Data 시각화
roslaunch velodyne_pointcloud VLP16_points.launch
rosnode list
rostopic echo /velodyne_points
rosrun rviz rviz -f velodyne
이제 rviz를 통해 간지나는 3d 데이터를 확인할 수 있을 것이다. (rviz에서 Fixed Frame의 이름은 velodyne이어야 연결이 된다.)
좌측 하단의 [Add]버튼을 누르고 PointCloud2를 추가해준다.
이후 Topic에서 /velodyne_points를 선택하면 라이다 센서 정보를 시각적으로 볼 수 있다.
rostopic echo /velodyne_points
/velodyne_points 토픽을 발행해보면 다음과 같이 3d 포인트들이 잘 수집되고 있음을 확인할 수 있다.
이게 끝났다면 이제 Velodyne Lidar 데이터를 활용할 수 있는 첫걸음이 끝난것이다. 조만간 이 데이터를 PCL이나 Open3d로 처리하는 방법에 대해 정리해보겠다. 근데 Open3d가 velodyne lidar를 공식적으로 지원해주지 않아서 아마 PCL을 중심으로 포스팅이 진행될 것이다. open3d는 코드나 문법이 PCL에 비해 매우 간단하고 쉽기 때문에 3d 데이터를 처리하는 개념이나 이론을 설명할 때 사용할 듯 싶다.
여기까지 잘 따라온 당신은 라이다를 다루는 사람들 중 상위 99%이다. 아직 갈 길이 멀었다는 뜻이다. 내가 그렇다.
질문은 언제나 환영이고 조언 및 틀린 부분 지적도 언제나 감사히 받고 있다. 일단 내 글을 읽어준다는 것부터가 감사하다.