IT 개발/ROS

ROS 에서 PointCloud2 데이터를 PCD 로 저장하기 (feat. LOAM)

KimDol2 2023. 6. 8. 14:26

 

 

이전 포스팅 에서 Velodyne VLP-16 라이다를 사용하여 LOAM (LiDAR Odometry and Mapping) 을 실행해 봤다. 이번에는 저장된 pcap 파일을 사용하여 LOAM 알고리즘을 실행 해 보고, LOAM 으로부터 생성된 map 데이터를 pcd 파일로 저장해 보고자 한다. 

 

먼저 pcap 파일은 packet capture 의 약어로 네트워크 패킷을 캡쳐한 파일이다. VLP-16 라이다 센서는 LAN 으로 3차원 공간 정보를 전송하는데 VeloView 나 네티워크 패킷 캡쳐 라이브러리인 libpcap 을 사용하여 pcap 파일을 저장할 수 있다. 예제로 사용할 수 있는 VLP-16 라이다 센서의 pcap 파일은 아래 링크에서 다운 받을 수 있다.

https://velodynesupport.zendesk.com/hc/en-us/articles/115003531294-Veloview-Sample-Data-VLP-16-Sensor

 

 

 

이제 다운로드 받은 pcap 파일을 사용하여 LOAM 을 실행해 보자.

$ roslaunch velodyne_pointcloud VLP16_points.launch pcap:="/home/kbk/Downloads/2014-11-10-10-36-54_Velodyne-VLP_10Hz-County Fair.pcap"
$ roslaunch loam_velodyne loam_velodyne.launch

위와 같이 velodyne_pointcloud 패키지의 VLP16_points.launch 런처를 실행 할 때 pcap:="FULL_PATH" 파라미터를 추가하고 loam_velodyne 런처를 실행하면 pcap 파일을 읽어서 LOAM 알고리즘을 수행한다.

 

 

이제 위의 동영상과 같이 매핑된 포인트 클라우드 데이터를 pcd 파일로 저장해 보자.

 

기본적으로 ROS 를 설치하게 되면 pcl_ros 패키지가 설치된다. 설치된 ROS 패키지를 확인하려면 rospack list 명령어를 통해 확인 할 수 있다. 아래 그림 중간에 pcl_ros 패키지가 설치된 것을 확인 할 수 있다.

 

 

pcl_ros 패키지의 pointcloud_to_pcd 노드를 아래와 같이 실행시킨다. 이때 PointCloud 데이터가 연속적으로 저장되므로, 아래 명령어는 pcd 파일이 저장될 폴더에서 실행 시키는 것이 좋다.

 

$ rosrun pcl_ros pointcloud_to_pcd input:="/velodyne_cloud_registered"

 

pointcloud_to_pcd 노드의 input 파라미터로 들어가는 "/velodyne_cloud_registered" 토픽은 LOAM 런처의  laser_mapping 노드를 통해 출력되는 pcl::PointCloud2 데이터 이다.  아래와 같이 rqt_graph 를 통해 /laser_mapping 노드에서 /velodyne_cloud_registered 가 출력되는 것을 확인 할 수 있다. 

 

 

이제 저장된 pcd 파일을 확인 해 보자. 저장된 파일명의 기준이 뭔지는 잘 모르겠으나, 정상적으로 pcd 파일이 생성된 것을 확인 할 수 있다. 

 

 

간단하게 pcl_viewer 를 통해 pcd 파일을 확인해 보자. 만약 pcl_viewer 가 설치 되지 않았다면 먼저  pcl-tools 를 설치한다.

 

$ sudo apt install pcl-tools 
$ pcl_viewer [파일명.pcd]

 

아래는 pcd 파일을 Visualization 한 결과이다.

 

 

그런데 저장된 map 이 전체 registered 된 map 이 아니라 현재 위치를 기준으로만 저장이 된다.. 내가 원했던 결과는 전체 맵을 저장하는 건데 말이다. 관련해서 구글 검색해보니 다음과 같이 git 에 해당 이슈가 있는 것을 확인했다.. 아마도 전체 맵을 저장하기 위해서는 loam_velodyne ROS 패키지의 코드 레벨에서 수정이 필요할 듯 싶다.

 

 

How to show the complete map in Rviz? · Issue #41 · laboshinl/loam_velodyne

I want to build a big outdoor map by using the Loam. But in the rviz, it just show a fixed-size map. Actually all the points cloud still exist in the rviz but it just show the sub map around the ca...

github.com

 

 

 

반응형