카테고리 없음

C++와 ROS 완벽한 조화: 기초부터 실습까지 마스터하기

toreddream 2025. 3. 18. 20:57

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 노드는 높은 성능의 로봇 시스템 구현에 큰 도움을 줄 것입니다. 실습을 통해 더 깊은 이해를 도모하고, 다양한 응용 프로그램을 시도해 보시길 바랍니다.