C++와 ROS 연동해보기 기초부터 실습까지
최근 로봇 공학의 발전과 함께, C++와 ROS(Robotic Operating System)의 조합이 많은 주목을 받고 있습니다. 본 글에서는 C++와 ROS의 기본적인 개념을 소개하고, 실제로 연동하여 사용해보는 방법에 대해 알아보겠습니다. 이 글은 특히 초보자를 대상으로 하며, 기초부터 실습까지의 과정을 담고 있습니다.
C++와 ROS란 무엇인가?
C++의 개념
C++는 벨 연구소의 비야네 스트라우스투프에 의해 개발된 프로그래밍 언어로, 객체 지향 프로그래밍을 지원합니다. C++는 높은 성능을 요구하는 소프트웨어 개발에 적합하며, 많은 로봇 시스템의 제어 및 알고리즘 구현에 사용됩니다.
ROS의 개념
ROS는 로봇 소프트웨어 플랫폼으로, 로봇 애플리케이션을 개발하는 데 필요한 다양한 라이브러리와 도구를 제공합니다. ROS는 모듈화된 컴포넌트를 통해 여러 기기와의 연결을 용이하게 하며, 여러 언어(C++, Python 등)를 지원합니다.
ROS 설치하기
설치 전 준비 사항
ROS를 설치하기 위해서는 다음의 준비물이 필요합니다.
- Linux 운영체제 (우분투 추천)
- 기본적인 명령줄 조작 능력
- 인터넷 연결
우분투에 ROS 설치하기
우분투에 ROS를 설치하는 방법은 다음과 같습니다.
- 터미널을 열고, 패키지 인덱스를 업데이트합니다.
sudo apt update
명령어를 입력합니다.- 필요한 패키지를 설치합니다.
sudo apt install ros-[버전]-desktop-full
를 입력하여 ROS를 설치합니다.- 환경 변수를 설정합니다.
echo "source /opt/ros/[버전]/setup.bash" >> ~/.bashrc
를 입력하고,source ~/.bashrc
를 실행합니다.
C++ 환경 설정하기
C++ 개발 도구 설치하기
ROS와 함께 사용할 C++ 개발 도구를 설치해야 합니다. 가장 많이 사용되는 도구는 다음과 같습니다.
- g++: C++ 컴파일러
- catkin: ROS 패키지를 빌드하는 도구
catkin 워크스페이스 생성하기
catkin 워크스페이스는 ROS 패키지를 개발하는 공간입니다. 다음과 같은 절차로 워크스페이스를 생성할 수 있습니다.
- 터미널에서
mkdir -p ~/catkin_ws/src
를 입력하여 소스 디렉토리를 생성합니다. cd ~/catkin_ws/
로 이동합니다.catkin_make
명령어를 입력하여 워크스페이스를 초기화합니다.
ROS 패키지 생성하기
패키지 생성하기
이제 ROS 패키지를 생성해보겠습니다. 패키지를 생성하는 방법은 다음과 같습니다.
- src 디렉토리로 이동합니다:
cd ~/catkin_ws/src
- 패키지 생성 명령어 입력:
catkincreatepkg myfirstpackage std_msgs rospy roscpp
패키지 구조 이해하기
생성된 패키지는 다음과 같은 구조로 구성됩니다.
myfirstpackage/
|-
- CMakeLists.txt
|-
- package.xml
|-
- src/
|-
- <소스파일>
CMakeLists.txt와 package.xml 파일은 패키지의 메타데이터와 빌드 정보를 포함하고 있습니다.
C++로 ROS 노드 작성하기
기본 노드 구조
ROS 노드는 C++로 작성할 수 있으며, 기본적인 구조는 다음과 같습니다.
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv)
{
ros::init(argc, argv, "myfirstnode");
ros::NodeHandle n;
ros::Publisher chatterpub = n.advertise<stdmsgs::String>("chatter", 1000);
ros::Rate loop_rate(10);
while (ros::ok())
{
std_msgs::String msg;
msg.data = "안녕하세요, ROS!";
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
위의 코드에서 ros::init
은 노드를 초기화하고, ros::NodeHandle
은 ROS와의 통신을 담당합니다. ros::Publisher
는 메시지를 퍼블리시하는 역할을 맡습니다.
노드 컴파일하기
작성한 노드를 컴파일하기 위해서는 CMakeLists.txt 파일에 소스 코드를 추가해야 합니다. 아래와 같은 내용을 추가합니다:
addexecutable(myfirstnode src/myfirst_node.cpp)
targetlinklibraries(myfirstnode ${catkin_LIBRARIES})
그 후, 터미널에서 cd ~/catkinws
후 catkinmake
를 입력하여 컴파일합니다.
ROS 노드 실행하기
노드 실행하기
노드를 실행하기 위해서는 다음과 같은 명령어를 입력합니다.
- ROS 마스터 시작:
roscore
를 입력하여 실행합니다. - 다른 터미널에서
rosrun myfirstpackage myfirstnode
를 입력하여 노드를 실행합니다.
메시지 확인하기
퍼블리시되는 메시지를 확인하기 위해서는 다음 명령어를 입력합니다.
rostopic echo /chatter
결론
이와 같이 C++와 ROS의 연동을 통해 기본적인 노드를 작성하고 실행해보았습니다. ROS는 다양한 기능을 제공하며, 더 깊이 있는 공부가 필요합니다. 본 글을 통해 시작점을 마련하시길 바랍니다. 실습을 통해 점차적으로 이해도를 높여가시길 바랍니다.





