C++와 ROS 연동해보기 기초부터 실습까지
로봇 운영 체제(ROS)는 로봇 소프트웨어 개발을 위한 강력한 프레임워크입니다. C++는 고성능 응용 프로그램을 개발하는 데 널리 사용되는 프로그래밍 언어입니다. 본 글에서는 C++와 ROS를 연동하여 간단한 로봇 응용 프로그램을 개발하는 방법을 알아보겠습니다.
ROS란 무엇인가?
로봇 운영 체제(ROS)는 로봇 소프트웨어를 개발하기 위한 오픈 소스 프레임워크입니다. ROS는 모듈화된 컴포넌트 구조를 통해 다양한 로봇 시스템을 구축할 수 있게 해줍니다. ROS는 다음과 같은 주요 기능을 제공합니다.
- 메시지 전달: 노드 간의 메시지 전달을 위한 서비스를 제공합니다.
- 패키지 관리: 다양한 기능을 구현하기 위한 패키지 관리 시스템을 제공합니다.
- 시뮬레이션: 실험 및 프로토타이핑을 위한 시뮬레이션 환경을 지원합니다.
C++와 ROS의 연동 필요성
C++는 ROS에서 가장 많이 사용되는 프로그래밍 언어 중 하나입니다. 그 이유는 다음과 같습니다.
- 성능: C++는 높은 성능과 효율성을 제공합니다. 로봇 제어와 같은 실시간 응용 프로그램에 적합합니다.
- 객체 지향 프로그래밍: C++는 객체 지향 프로그래밍 언어로, 복잡한 로봇 시스템의 구현을 용이하게 합니다.
- 확장성: C++의 강력한 라이브러리와 커뮤니티 지원으로 다양한 기능을 확장할 수 있습니다.
ROS 설치하기
ROS를 사용하기 위해서는 먼저 ROS를 설치해야 합니다. 다음은 ROS 설치를 위한 기본 단계입니다.
1. 시스템 요구 사항
- 우분투 20.04 LTS 이상
- 적어도 2GB의 RAM
- 적어도 5GB의 여유 디스크 공간
2. ROS 설치 방법
다음 명령어를 터미널에 입력하여 ROS를 설치합니다.
sudo apt update
sudo apt install ros-noetic-desktop-full
설치가 완료되면, ROS의 환경 설정을 위해 다음 명령어를 입력합니다.
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
3. 필요한 패키지 설치
기본적으로 필요한 패키지를 설치합니다.
sudo apt install python-rosdep
sudo rosdep init
rosdep update
C++ 개발 환경 설정하기
이제 C++ 코드를 작성하는 데 필요한 개발 환경을 설정합니다.
1. catkin 워크스페이스 생성
catkin은 ROS의 빌드 시스템입니다. 다음 명령어로 catkin 워크스페이스를 생성합니다.
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
2. 환경 설정
생성한 catkin 워크스페이스를 환경 설정에 추가합니다.
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
첫 번째 ROS 패키지 만들기
이제 첫 번째 ROS 패키지를 만들어 보겠습니다.
1. 패키지 생성
src 디렉터리로 이동한 후, 다음 명령어로 패키지를 만듭니다.
cd ~/catkin_ws/src
catkincreatepkg myfirstpkg std_msgs rospy roscpp
2. 패키지 구조
생성된 패키지의 기본 구조는 다음과 같습니다.
- myfirstpkg
- CMakeLists.txt
- package.xml
- src
3. 코드 작성
src 디렉터리 안에 C++ 코드 파일을 작성합니다. 이를 위해 텍스트 편집기를 열고 아래 코드를 입력합니다.
#include "ros/ros.h"
int main(int argc, char **argv)
{
ros::init(argc, argv, "hello_ros");
ros::NodeHandle nh;
ROS_INFO("Hello, ROS and C++!");
ros::spin();
return 0;
}
4. CMakeLists.txt 수정
CMakeLists.txt 파일을 열어 아래와 같이 수정합니다.
addexecutable(helloros src/hello_ros.cpp)
targetlinklibraries(helloros ${catkinLIBRARIES})
5. 패키지 빌드
다시 catkin_ws 디렉터리로 이동하여 패키지를 빌드합니다.
cd ~/catkin_ws
catkin_make
6. 실행
ROS 마스터를 시작한 후, 작성한 노드를 실행합니다.
roscore
rosrun myfirstpkg hello_ros
추가 실습
기본적인 "Hello, ROS" 노드를 성공적으로 실행한 후, 추가적인 기능을 구현해볼 수 있습니다. 다음은 몇 가지 제안 사항입니다.
1. 토픽 구독 및 발행
ROS의 강력한 기능 중 하나는 토픽을 통해 데이터를 발행(publishing)하고 구독(subscribing)하는 것입니다. 이를 구현하기 위해 추가적인 C++ 코드를 작성할 수 있습니다.
2. 서비스 구현
서비스는 요청과 응답을 통해 통신을 이루는 ROS의 또 다른 중요한 기능입니다. 원하는 기능을 서비스로 구현해볼 수 있습니다.
3. 매개변수 서버 활용
ROS에서는 매개변수 서버를 통해 전역 매개변수를 관리할 수 있습니다. 이를 활용하여 보다 동적인 노드를 구현할 수 있습니다.
마무리
이 글에서는 C++와 ROS를 연동하여 첫 번째 로봇 응용 프로그램을 만드는 과정을 단계별로 설명하였습니다. C++로 개발된 ROS 노드는 높은 성능의 로봇 시스템 구현에 큰 도움을 줄 것입니다. 실습을 통해 더 깊은 이해를 도모하고, 다양한 응용 프로그램을 시도해 보시길 바랍니다.





