카테고리 없음

ROS 라이브러리 완벽 가이드: 제작에서 배포까지의 모든 과정

toreddream 2025. 5. 8. 11:36

제작부터 배포까지 ROS 라이브러리 사용법

ROS(Robotic Operating System)는 로봇 응용 프로그램 개발을 위한 시스템입니다. ROS는 다양한 기능을 제공하여 로봇 소프트웨어를 보다 쉽게 개발하고 테스트할 수 있도록 돕습니다. 이 블로그 글에서는 ROS 라이브러리를 제작하는 방법부터 배포하는 방법까지 단계별로 안내하겠습니다. ROS를 처음 접하는 초보자가 이해하기 쉽게 설명하겠습니다.

ROS란 무엇인가?

ROS는 다양한 로봇 프로젝트에 사용되는 오픈 소스 프레임워크입니다. 이는 여러 로봇 시스템 간의 통신을 가능하게 하고, 각기 다른 하드웨어를 통합할 수 있도록 도와줍니다. ROS는 다음과 같은 기능을 포함합니다.

  • 하드웨어 추상화
  • 저수준 장치 제어
  • 상위 수준 기능 구현
  • 패키지 관리
  • 시뮬레이션 도구

ROS 설치하기

ROS를 사용하기 위해 먼저 설치해야 합니다. ROS는 Ubuntu 리눅스에서 가장 많이 사용되므로 해당 환경에서의 설치 방법에 대해 설명하겠습니다.

시스템 요구 사항

ROS를 설치하기 위해서는 다음과 같은 시스템 요구 사항이 필요합니다.

  • 운영체제: Ubuntu 20.04 LTS 또는 22.04 LTS
  • 메모리: 최소 2GB 이상
  • 디스크 공간: 10GB 이상의 여유 공간

ROS 설치 과정

아래의 절차에 따라 ROS 멜로디 버전을 설치할 수 있습니다.

    1. 패키지 목록 업데이트:
sudo apt update
    1. 필요한 패키지 설치:
sudo apt install -y curl gnupg2 lsb-release
    1. ROS GPG 키 추가:
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo apt-key add -
    1. ROS 패키지 저장소 추가:
echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros-latest.list
    1. 패키지 목록 업데이트:
sudo apt update
    1. ROS 설치:
sudo apt install ros-melodic-desktop-full

설치가 완료되면 ROS 환경 변수를 설정해야 합니다. 다음 명령어를 실행하세요:

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

ROS 패키지 구조 이해하기

패키지는 ROS의 기본 단위로, 노드, 라이브러리, 실행 파일 등을 포함합니다. ROS 패키지의 구조는 다음과 같습니다.

파일/디렉토리 설명
package.xml 패키지의 메타 정보를 포함
CMakeLists.txt 패키지를 빌드하는 데 필요한 정보 제공
src/ 소스 코드 파일을 포함하는 디렉토리
include/ 헤더 파일을 포함하는 디렉토리
launch/ 노드를 실행하기 위한 설정 파일을 포함

ROS 패키지 생성하기

자신의 ROS 패키지를 생성하기 위해서는 다음 절차를 따릅니다.

패키지 생성 명령어

다음 명령어를 터미널에 입력하여 ROS 패키지를 생성합니다.

catkincreatepkg <패키지명> [의존성]

여기서 <패키지명>은 생성할 패키지의 이름이며, [의존성]은 해당 패키지가 의존하는 ROS 패키지의 목록입니다. 예를 들어, std_msgs와 rospy에 의존하는 패키지를 생성하고자 한다면:

catkincreatepkg myrobot stdmsgs rospy

패키지 디렉토리 구조

위 명령어로 생성한 패키지는 다음과 같은 구조를 가집니다.

  • my_robot/
    • package.xml
    • CMakeLists.txt
    • src/
    • include/
    • launch/

ROS 노드 작성하기

패키지를 생성한 후에는 코드를 작성하여 노드를 구현해야 합니다. 간단한 ROS 노드를 작성하는 방법을 살펴보겠습니다.

Python으로 노드 작성하기

다음은 ROS 노드를 Python으로 작성한 코드입니다:

#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def talker():
    pub = rospy.Publisher('chatter', String, queue_size=10)
    rospy.init_node('talker', anonymous=True)
    rate = rospy.Rate(10)

10hz

    while not rospy.is_shutdown():
        hellostr = "안녕하세요, ROS입니다! %s" % rospy.gettime()
        rospy.loginfo(hello_str)
        pub.publish(hello_str)
        rate.sleep()

if name == 'main':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

위 코드는 "chatter"라는 주제로 메시지를 지속적으로 발행하는 간단한 ROS 노드입니다. rospy.loginfo를 사용하여 정보를 출력하고 있습니다.

노드 실행하기

노드를 실행하기 전에 ROS 마스터를 실행해야 합니다. 다음 명령어로 ROS 마스터를 실행합니다:

roscore

이후 새로운 터미널을 열고 생성한 노드를 실행합니다:

rosrun my_robot talker.py

ROS 메시지 사용하기

ROS는 다양한 데이터 타입을 지원하며, 메시지를 통한 데이터 전송이 가능합니다. ROS의 기본 메시지 타입으로는 다음이 있습니다.

  • std_msgs/String
  • std_msgs/Int32
  • geometry_msgs/Twist

사용해야 할 메시지 타입은 특정 애플리케이션에 따라 다릅니다. 예를 들어, 센서 데이터는 sensor_msgs 패키지에서 제공하는 메시지들을 사용해야 합니다.

ROS 서비스 및 액션 사용하기

ROS는 서비스와 액션 개념을 통해 노드 간의 동기화된 통신을 지원합니다. 서비스는 요청-응답 메커니즘에 기반하여 동작하며, 액션은 비동기적 작업을 지원합니다.

서비스 작성하기

서비스를 작성하기 위해 간단한 예제를 사용하겠습니다. 다음은 두 수를 더하는 서비스를 구현한 예입니다:

#!/usr/bin/env python
from my_robot.srv import AddTwoInts, AddTwoIntsResponse
import rospy

def handleaddtwo_ints(req):
    return AddTwoIntsResponse(req.a + req.b)

def addtwoints_server():
    rospy.initnode('addtwointsserver')
    s = rospy.Service('addtwoints', AddTwoInts, handleaddtwo_ints)
    rospy.spin()

if name == 'main':
    addtwoints_server()

서비스를 실행한 후, 클라이언트가 요청을 보내 결과를 받을 수 있습니다.

액션 서버와 클라이언트

액션 서버를 설정하는 방법은 서비스와 유사하지만, 목표를 지정하고 실행 상태를 추적할 수 있습니다. 이를 통해 긴 작업을 수행할 수 있습니다.

ROS 패키지 배포하기

자신의 패키지를 완성한 후, 다른 사람들과 공유하기 위해 패키지를 배포할 수 있습니다. 패키지 배포를 위한 절차는 다음과 같습니다.

패키지 빌드하기

다음 명령어를 통해 패키지를 빌드할 수 있습니다.

catkin_make

상위 디렉토리에서 이 명령어를 실행하면, ROS 패키지가 빌드됩니다.

패키지 배포하기

패키지를 배포하기 위해서는 GitHub와 같은 플랫폼을 사용할 수 있습니다. 자신의 패키지를 원격 저장소에 푸시하여 다른 사람들이 쉽게 접근할 수 있도록 해야 합니다.

마무리

ROS를 이용한 로봇 응용 프로그램 개발은 복잡할 수 있지만, 단계별로 접근하면 훨씬 수월하게 진행할 수 있습니다. 이번 글에서는 ROS의 설치부터 패키지 생성, 노드 작성, 통신, 배포까지 다양한 내용을 다루었습니다. ROS는 오픈 소스이기 때문에 많은 개발자들과 커뮤니티의 도움을 받을 수 있습니다. 계속해서 학습하고 실습하여 여러분만의 멋진 로봇 프로젝트를 만들어 보시기 바랍니다.