[연재 안내] ROS2 Mastery: 대학생 & 연구원을 위한 ROS2 가이드
안녕하세요! 마케팅팀 에이든(Aiden)입니다.
로봇 공학을 전공하는 대학생 여러분, 그리고 현장에서 로봇 시스템을 연구하고 개발하시는 연구원 여러분. 로봇 운영체제(ROS2)의 세계에 오신 것을 환영합니다!
현대의 로봇 개발에서 ROS2는 선택이 아닌 필수가 되었습니다. 하지만 처음 ROS2를 접할 때 느껴지는 방대한 개념들과 복잡한 설정들은 종종 우리를 좌절하게 만듭니다. 이번 “ROS2 Mastery” 연재 블로그에서는 ROS2 Jazzy 버전을 기반으로, 개발 환경 구성부터 노드 통신, TF2 좌표계 변환, 그리고 URDF를 이용한 로봇 모델링까지 단계별로 친절하게 안내해 드릴 예정입니다.
앞으로 연재될 핵심 내용들의 개요를 미리 살펴볼까요?

1부: ROS2 핵심 프로그래밍 및 Turtlesim 자율주행 제어
1부에서는 ROS2의 기본기를 다지고, 귀여운 거북이 시뮬레이터(Turtlesim)를 이용해 직접 코드를 작성하며 로봇 제어의 감을 잡습니다.
1. 개발 환경 구성과 작업 공간(Workspace)의 이해
ROS2는 여러 패키지를 묶어서 관리하는 작업 공간(Workspace) 개념을 사용합니다. 가장 먼저 할 일은 나만의 작업 공간을 만들고 빌드 시스템인 colcon을 활용하는 방법을 배우는 것입니다.
# 새로운 작업 공간 디렉토리 생성
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
# 작업 공간 빌드하기
cd ~/ros2_ws
colcon build --symlink-install위와 같이 colcon build 명령어를 통해 패키지를 빌드하고 나면, 오버레이(Overlay) 설정 파일을 소싱(source install/setup.bash)하여 터미널 환경에 적용하는 방법도 자세히 다룰 예정입니다

2. Node, Topic, Service 통신 메커니즘 정복
로봇 시스템은 수많은 노드(Node)들의 통신으로 이루어집니다. my_robot_controller라는 나만의 패키지를 직접 생성하고, Python을 이용해 Publisher(발행자)와 Subscriber(구독자)를 만들어봅니다.
- Topic 통신:
/turtle1/cmd_vel토픽에geometry_msgs/msg/Twist메시지를 주기적으로 발행하여 거북이가 원을 그리며 돌게 만듭니다. - Service 통신:
/turtle1/set_pen서비스를 호출하여, 거북이가 화면의 왼쪽을 지날 때는 빨간색, 오른쪽을 지날 때는 초록색으로 펜 색상을 실시간으로 변경하는 재미있는 예제를 구현합니다.

[미리 보는 예제 코드: 거북이를 원형으로 움직이게 하는 Publisher 노드]
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
class DrawCircleNode(Node):
def __init__(self):
super().__init__('draw_circle')
# Twist 타입의 토픽을 발행하는 Publisher 생성
self.cmd_vel_pub_ = self.create_publisher(Twist, '/turtle1/cmd_vel', 10)
# 0.5초마다 콜백 함수 실행
self.timer_ = self.create_timer(0.5, self.send_velocity_command)
def send_velocity_command(self):
msg = Twist()
msg.linear.x = 2.0 # 전진 속도
msg.angular.z = 1.0 # 회전 속도
self.cmd_vel_pub_.publish(msg)
def main(args=None):
rclpy.init(args=args)
node = DrawCircleNode()
rclpy.spin(node)
rclpy.shutdown()이 코드를 발전시켜, 나중에는 거북이의 실시간 위치(pose.x, pose.y)를 구독(Subscribe)하고 벽에 부딪히기 전에 스스로 방향을 전환하는 자율주행 거북이 컨트롤러까지 완성해 볼 것입니다.
2부: TF2 (Transform System) – 로봇 좌표계 변환 완벽 가이드
로봇 공학 연구원이라면 ‘좌표 변환’의 중요성을 누구보다 잘 아실 것입니다. 모바일 로봇이 목표물을 찾거나, 매니퓰레이터(로봇팔) 카메라가 목표물을 발견했을 때 그리퍼가 목표물로 정확히 이동하려면 각 부품(프레임) 간의 위치 관계를 알아야 합니다.
1. TF2 트리의 이해
ROS2는 이러한 복잡한 로봇 수학을 처리하기 위해 TF2(Transform 버전 2) 시스템을 제공합니다. TF2는 트리(Tree) 구조로 이루어지며, 닫힌 루프(Closed loop)를 허용하지 않아 각 프레임은 단 하나의 부모 프레임만을 가집니다.

2. 정적(Static) 및 동적(Dynamic) 프레임 브로드캐스팅
본 연재에서는 Python을 사용하여 직접 TF2 브로드캐스터(Broadcaster)와 리스너(Listener)를 프로그래밍합니다.
- 정적 변환: 벽이나 고정된 장애물처럼 시간에 따라 변하지 않는 변환입니다.
StaticTransformBroadcaster를 활용해 거북이 앞에 목표물인carrot1프레임을 고정시킵니다. - 동적 변환: 관절이 움직이는 로봇이나 주행 중인 로봇의 변환입니다.
sin(),cos()같은 수학 함수를 활용하여 시간에 따라 궤적이 지속적으로 변하는 동적 프레임을 구현해 봅니다.
연구 중 TF 프레임이 꼬이거나 문제가 생겼을 때는 어떻게 할까요? tf2_tools 패키지의 view_frames 명령어를 통해 변환 트리를 frames.pdf 파일로 생성하여 시각적으로 디버깅하는 실무 꿀팁도 배울 수 있습니다.
3부: URDF를 이용한 나만의 로봇 모델링
로봇 하드웨어를 제작하기 전에 컴퓨터 환경에서 로봇을 시뮬레이션하는 것은 필수입니다. 3부에서는 URDF(Universal Robot Description Format)를 학습합니다
1. 시각적 모델링(Visual)과 충돌(Collision) 속성
URDF는 로봇의 기구학적 구조를 기술하는 XML 파일입니다. 실린더, 박스, 구 형태의 기하학적 요소(Geometry)를 조합하여 로봇의 외형(<visual>)을 만듭니다.
하지만 눈에 보이는 것이 다가 아닙니다! 실제 로봇이나 Gazebo 같은 물리 시뮬레이터에서 로봇이 벽을 뚫고 지나가지 않게 하려면 <collision> 태그를 설정해야 합니다. 충돌 연산을 가볍게 하기 위해 복잡한 메쉬(Mesh) 대신 단순한 도형을 사용하거나, 안전 구역 설정을 위해 로봇 머리 주변에 가상의 원통형 충돌 범위를 지정하는 고급 노하우를 소개합니다.

2. Xacro를 이용한 스마트한 코드 작성과 상태 발행
URDF 파일은 로봇이 복잡해질수록 코드가 기하급수적으로 길어집니다. 이를 해결하기 위해 XML 매크로 언어인 Xacro를 도입합니다. 상수를 정의하고(예: 다리 길이), 수학 연산과 매크로 기능을 활용하여 반복되는 코드를 획기적으로 줄여 유지보수를 쉽게 만듭니다.
완성된 모델은 robot_state_publisher 노드를 통해 /tf2 및 /robot_description 토픽으로 배포되며, joint_state_publisher_gui의 슬라이더를 움직여 화면 속 로봇의 관절을 마음대로 꺾어보는 테스트를 진행하게 됩니다.
[미리 보는 예제 코드: Xacro를 활용한 상수 정의 및 수학 연산]
<!-- xacro 네임스페이스 선언 후 상수 정의 -->
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="my_robot">
<xacro:property name="leg_length" value="0.6" />
<xacro:property name="leg_radius" value="0.2" />
<!-- 상수를 수학 연산에 활용하여 실린더 크기 지정 -->
<link name="left_leg">
<visual>
<geometry>
<cylinder length="${leg_length}" radius="${leg_radius}"/>
</geometry>
</visual>
</link>
</robot>이번 “ROS2 Mastery” 연재는 단순히 코드를 따라 치는 것을 넘어, 로봇 소프트웨어의 ‘뼈대’가 되는 통신(Topic/Service), ‘수학적 뇌’가 되는 좌표 변환(TF2), 그리고 ‘가상의 몸’을 만드는 모델링(URDF)의 핵심 원리를 연구원 수준으로 깊이 있게 이해하도록 돕기 위해 기획되었습니다.
다음 포스트부터는 “1편: ROS2 Jazzy 개발환경 구성 및 작업공간 만들기”를 주제로 본격적인 실습에 돌입하겠습니다. 로봇 공학 전문가로 성장하기 위한 여러분의 첫걸음을 진심으로 응원합니다. 다음 글에서 뵙겠습니다!

작성자: 에이든(Aiden), 쿼드(QUAD) 드론연구소 마케팅팀
기고일: 2026.03.29
