본문 바로가기

카테고리 없음

C++와 ROS를 활용한 로봇 프로그래밍의 기초와 실전 실습

C++와 ROS 연동해보기 기초부터 실습까지

최근 로봇 공학의 발전과 함께, C++와 ROS(Robotic Operating System)의 조합이 많은 주목을 받고 있습니다. 본 글에서는 C++와 ROS의 기본적인 개념을 소개하고, 실제로 연동하여 사용해보는 방법에 대해 알아보겠습니다. 이 글은 특히 초보자를 대상으로 하며, 기초부터 실습까지의 과정을 담고 있습니다.

C++와 ROS란 무엇인가?

C++의 개념

C++는 벨 연구소의 비야네 스트라우스투프에 의해 개발된 프로그래밍 언어로, 객체 지향 프로그래밍을 지원합니다. C++는 높은 성능을 요구하는 소프트웨어 개발에 적합하며, 많은 로봇 시스템의 제어 및 알고리즘 구현에 사용됩니다.

ROS의 개념

ROS는 로봇 소프트웨어 플랫폼으로, 로봇 애플리케이션을 개발하는 데 필요한 다양한 라이브러리와 도구를 제공합니다. ROS는 모듈화된 컴포넌트를 통해 여러 기기와의 연결을 용이하게 하며, 여러 언어(C++, Python 등)를 지원합니다.

ROS 설치하기

설치 전 준비 사항

ROS를 설치하기 위해서는 다음의 준비물이 필요합니다.

  • Linux 운영체제 (우분투 추천)
  • 기본적인 명령줄 조작 능력
  • 인터넷 연결

우분투에 ROS 설치하기

우분투에 ROS를 설치하는 방법은 다음과 같습니다.

  1. 터미널을 열고, 패키지 인덱스를 업데이트합니다.
  2. sudo apt update 명령어를 입력합니다.
  3. 필요한 패키지를 설치합니다.
  4. sudo apt install ros-[버전]-desktop-full를 입력하여 ROS를 설치합니다.
  5. 환경 변수를 설정합니다. echo "source /opt/ros/[버전]/setup.bash" >> ~/.bashrc를 입력하고, source ~/.bashrc를 실행합니다.

C++ 환경 설정하기

C++ 개발 도구 설치하기

ROS와 함께 사용할 C++ 개발 도구를 설치해야 합니다. 가장 많이 사용되는 도구는 다음과 같습니다.

  • g++: C++ 컴파일러
  • catkin: ROS 패키지를 빌드하는 도구

catkin 워크스페이스 생성하기

catkin 워크스페이스는 ROS 패키지를 개발하는 공간입니다. 다음과 같은 절차로 워크스페이스를 생성할 수 있습니다.

  1. 터미널에서 mkdir -p ~/catkin_ws/src를 입력하여 소스 디렉토리를 생성합니다.
  2. cd ~/catkin_ws/로 이동합니다.
  3. catkin_make 명령어를 입력하여 워크스페이스를 초기화합니다.

ROS 패키지 생성하기

패키지 생성하기

이제 ROS 패키지를 생성해보겠습니다. 패키지를 생성하는 방법은 다음과 같습니다.

  1. src 디렉토리로 이동합니다: cd ~/catkin_ws/src
  2. 패키지 생성 명령어 입력: 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 ~/catkinwscatkinmake를 입력하여 컴파일합니다.

ROS 노드 실행하기

노드 실행하기

노드를 실행하기 위해서는 다음과 같은 명령어를 입력합니다.

  1. ROS 마스터 시작: roscore를 입력하여 실행합니다.
  2. 다른 터미널에서 rosrun myfirstpackage myfirstnode를 입력하여 노드를 실행합니다.

메시지 확인하기

퍼블리시되는 메시지를 확인하기 위해서는 다음 명령어를 입력합니다.

rostopic echo /chatter

결론

이와 같이 C++와 ROS의 연동을 통해 기본적인 노드를 작성하고 실행해보았습니다. ROS는 다양한 기능을 제공하며, 더 깊이 있는 공부가 필요합니다. 본 글을 통해 시작점을 마련하시길 바랍니다. 실습을 통해 점차적으로 이해도를 높여가시길 바랍니다.