PCL(Point Cloud Library)와 ROS 조합으로 3D 센서 다루기
최근 몇 년 간, 로봇공학과 컴퓨터 비전 분야에서 3D 센서의 활용이 급격히 증가하고 있습니다. 이러한 기술들은 로봇이 주변 환경을 인식하고 상호작용하는 데 필수적인 역할을 합니다. PCL(Point Cloud Library)와 ROS(Robot Operating System)를 결합하여 3D 센서를 다루는 방법은 초보자들에게 매우 유익한 주제입니다. 이번 글에서는 PCL과 ROS의 기본 개념, 이를 활용한 3D 센서의 데이터 처리 방법, 그리고 실질적인 예제를 통해 초보자들이 쉽게 이해할 수 있도록 설명하겠습니다.
PCL(Point Cloud Library)란?
PCL은 3D 데이터 처리를 위한 오픈소스 라이브러리로, 다양한 알고리즘과 데이터 구조를 제공합니다. PCL은 주로 다음과 같은 기능을 포함합니다:
- 포인트 클라우드 데이터 처리
- 필터링 및 분할
- 특징 추출
- 모델 피팅
- 서페이스 리컨스트럭션
PCL은 C++로 작성되었으며, 고성능의 3D 데이터 처리에 최적화되어 있습니다. 이를 통해 사용자들은 다양한 3D 센서로부터 수집된 데이터를 효율적으로 처리할 수 있습니다.
ROS(Robot Operating System)란?
ROS는 로봇 소프트웨어 개발을 위한 오픈소스 플랫폼입니다. ROS는 다양한 기능을 제공하여 개발자들이 로봇 시스템을 쉽게 구현하고 관리할 수 있도록 도와줍니다. ROS의 주요 특징은 다음과 같습니다:
- 모듈화된 소프트웨어 아키텍처
- 다양한 센서 및 하드웨어 드라이버 지원
- 분산 시스템 지원
- 강력한 커뮤니티와 풍부한 문서화
ROS는 다양한 로봇 애플리케이션을 위한 생태계를 제공하며, 특히 PCL과 같은 라이브러리와 결합했을 때 그 진가를 발휘합니다.
PCL과 ROS의 결합
PCL과 ROS의 통합을 통해 사용자들은 로봇이 3D 환경을 인식하고 이해할 수 있도록 다양한 솔루션을 구현할 수 있습니다. 이 조합은 3D 센서에서 수집한 포인트 클라우드 데이터를 ROS 시스템으로 쉽게 전송하고 처리할 수 있게 합니다.
3D 센서 이해하기
3D 센서는 공간의 깊이 정보를 측정하여 물체의 형상과 위치를 파악하는 장비입니다. 다양한 종류의 3D 센서가 존재하지만, 가장 일반적으로 사용되는 센서들은 다음과 같습니다:
- LiDAR (Light Detection and Ranging)
- Stereo Camera
- Depth Camera (예: Intel RealSense, Microsoft Kinect)
이들 센서는 각각의 원리와 특성을 가지고 있으며, 활용 목적에 따라 적절한 센서를 선택하는 것이 중요합니다. PCL은 이러한 다양한 3D 센서에서 생성된 포인트 클라우드 데이터를 처리하기 위한 필수 도구로 자리잡고 있습니다.
PCL과 ROS 설치하기
PCL과 ROS를 설치하기 위해서는 먼저 시스템에 필요한 종속성을 설치하여야 합니다. 여기서는 Ubuntu 시스템을 기준으로 설명하겠습니다.
1. ROS 설치하기
우선 ROS를 설치하기 위해 아래의 명령어를 통해 필요한 패키지를 설치합니다:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full
설치가 완료되면 ROS 환경을 설정하기 위해 다음 명령어를 입력합니다:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
2. PCL 설치하기
PCL의 설치를 위해서는 다음의 명령어를 사용합니다:
sudo apt install libpcl-dev
3. ROS-PCL 브리지 설치하기
PCL과 ROS 간의 통신을 위해서는 ROS-PCL 브리지를 설치해야 합니다. 이를 위해 다음 명령어를 사용합니다:
sudo apt install ros-noetic-pcl-ros
포인트 클라우드 데이터 처리하기
PCL과 ROS가 설치되었다면, 이제 포인트 클라우드 데이터를 수집하고 처리하는 방법을 살펴보겠습니다. 포인트 클라우드 데이터를 수신하기 위해 ROS 노드를 작성해야 합니다.
1. ROS 패키지 생성하기
먼저 새로운 ROS 패키지를 생성합니다:
cd ~/catkin_ws/src
catkincreatepkg pclexample stdmsgs rospy roscpp pcl_ros
패키지를 생성한 후, 다음 명령어로 빌드합니다:
cd ~/catkin_ws
catkin_make
2. 포인트 클라우드 노드 작성하기
패키지 디렉토리 안에 노드를 만들기 위해 다음의 코드를 작성합니다:
cd ~/catkinws/src/pclexample/src
touch points_filter.cpp
이제 points_filter.cpp 파일을 열어 아래와 같이 코드를 작성합니다:
#include <ros/ros.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/filters/filter.h>
#include <pcl/ros/point_cloud.h>
코드의 주요 기능은 포인트 클라우드 데이터를 필터링하는 것입니다. 사용자가 정의한 조건대로 데이터를 필터링하여 더 유용한 정보를 추출합니다.
3. 데이터 수신 및 처리하기
노드에서 수신된 포인트 클라우드 데이터를 filter() 함수로 처리할 수 있습니다. 작성한 소스 코드를 빌드하고 실행하여 결과를 확인합니다.
rosrun pclexample pointsfilter
결론
PCL과 ROS의 결합은 3D 센서를 효과적으로 활용하기 위한 강력한 조합입니다. 초보자는 이 두 가지 도구를 사용하여 3D 데이터를 처리하는 기본적인 이해를 쌓을 수 있습니다. 앞으로 더 깊이 있는 연구와 실습을 통해 이 기술들을 더욱 활용할 수 있을 것입니다.
본 블로그 글이 여러분의 3D 센서 활용에 도움이 되길 바랍니다. 더 나아가 PCL과 ROS를 활용한 다양한 프로젝트에 도전해보시기 바랍니다.





