LECTURE 01
ROS2
로봇 프로그래밍 기초
2026.09.11 | 정혜원

- 01오늘 사용할 개발환경 큰 그림
- 02ROS2란 무엇인가
- 03Topic / Service / Action / Parameter 비교
- 04ROS 프로그램 개발 흐름
01 Orientation
오늘 수업의 목표
ROS2를 전부 배우는 시간이 아니라, 실습을 시작하기 위한 구조를 잡는 시간
01 Orientation
요즘 개발 환경에서 더 중요해진 것
코드 생성 도구가 좋아져도, 구조를 이해하고 결과를 확인하는 능력은 개발자의 몫
02 Why ROS
로봇은 왜 복잡한가

02 Why ROS
기능을 나누어 개발하기
카메라, AI, 제어, 모터를 모두 한 코드에 넣으면 수정·교체·디버깅이 어려워진다.
03 Development Environment
오늘 사용할 개발환경 큰 그림
운영체제 위에 ROS2를 설치하고, VS Code와 Terminal로 작성·실행·확인한다.
03 Development Environment
Visual Studio Code란 무엇인가
VS Code는 ROS 코드를 작성하고, 파일 구조와 터미널을 함께 볼 수 있는 코드 편집기이다.

03 Development Environment
Terminal이란 무엇인가
명령어를 입력해 컴퓨터를 제어하는 텍스트 기반 인터페이스
03 Development Environment
Ubuntu란 무엇인가
Ubuntu는 Linux 기반 운영체제이자 개발 플랫폼이다.

04 ROS2 Basics
ROS2란 무엇인가
ROS2는 ROS 소프트웨어 두 번째 버전이며, 로봇 개발용 라이브러리·도구 집합이다.

04 ROS2 Basics
ROS2를 이해하는 문장
ROS2는 “여러 Node가 인터페이스를 통해 Message를 주고받으며 로봇 애플리케이션을 구성하는 구조”이다.
04 ROS2 Basics
ROS 개발 구조 큰 그림
ROS2 프로젝트는 보통 Workspace 안에 Package를 만들고, Package 안에 Node와 설정 파일을 둔다.
04 ROS2 Basics
Workspace란 무엇인가
Workspace는 ROS 프로젝트와 패키지들을 모아 두는 작업 공간이다.
04 ROS2 Basics
Package란 무엇인가
Package는 Node, 설정 파일, 실행 정보를 묶어 놓은 단위이다.
04 ROS2 Basics
Node란 무엇인가
Node는 ROS2에서 실제로 실행되는 하나의 프로그램이며, 보통 하나의 역할을 담당한다.
04 ROS2 Basics
Message란 무엇인가
Message는 Node 사이에서 주고받는 실제 데이터이며, Message Type은 그 데이터가 어떤 필드와 자료형으로 구성되는지 정의한다.
• Message Type은 Message에 어떤 필드가 있고, 각 필드가 어떤 자료형인지 정의한다.
05 Communication
Topic: Publish / Subscribe 통신
Topic은 Node들이 Message를 교환하기 위해 사용하는 Publish / Subscribe 통신 인터페이스이다.
05 Communication
Service: Request / Response 통신
Service는 요청을 보내고 그에 대한 응답을 받는 Request / Response 통신 인터페이스이다.
05 Communication
Action: Goal / Feedback / Result 통신
Action은 Goal을 요청하고, 진행 상태와 최종 결과를 다룰 수 있는 통신 인터페이스이다.
05 Communication
Parameter: Node의 설정값
Parameter는 Node에 연결된 configuration value, 즉 Node 설정값이다.
05 Communication
Topic / Service / Action / Parameter 비교
06 Development Flow
ROS2는 어떤 언어로 만들까
ROS2 Node는 주로 C++과 Python으로 작성하지만, 환경과 클라이언트 라이브러리에 따라 다른 언어로도 개발할 수 있다.
06 Development Flow
ROS 프로그램 개발 흐름
실습에서는 같은 흐름을 반복한다: 코드를 작성하고, build하고, source로 현재 Terminal 환경을 적용하고, 실행한 뒤 CLI로 확인한다.
06 Development Flow
Build란 무엇인가
Build는 작성한 Package를 처리하여 ROS2에서 실행 가능한 결과물을 준비하는 과정이다.
06 Development Flow
Source란 무엇인가
source는 setup.bash에 들어 있는 환경 설정을 현재 Terminal(shell)에 적용하는 명령이다.
06 Development Flow
Run: Node 실행하기
build와 source가 끝나면 ros2 run으로 특정 Package의 특정 Node를 실행한다.
07 CLI
공식 예제로 CLI 결과 확인하기
talker와 listener를 실행한 뒤, CLI로 관찰한다.



07 CLI
rqt_graph로 ROS Graph 보기
CLI로 확인한 Node와 Topic의 연결 관계를 GUI로도 확인할 수 있다.

07 CLI
rqt_plot으로 Topic 값 변화 보기
Topic Message 안의 숫자 필드를 시간에 따라 그래프로 확인할 수 있다.

07 CLI
로봇이 안 움직일 때 어디부터 볼까
현상만 보고 바로 코드를 고치기보다, 상태가 정상인지 먼저 확인한다.
08 Wrap-up
요즘 ROS 개발에서 중요한 것
도구가 코드를 빠르게 만들어줄 수 있어도, 개발자는 구조와 검증을 이해해야 한다.
08 Wrap-up
개념 정리
ROS2를 처음 시작할 때 가장 중요한 것은 전체 구조를 읽는 눈이다.
LECTURE 01
ROS2
로봇 프로그래밍 실습
2026.09.11 | 정혜원

- 01Workspace 만들기
- 02Mission 1-A: Publisher 만들기
- 03Mission 1-B: Subscriber 만들기
- 04실습 2: MuJoCo에서 로봇을 움직여보자
Practice Overview
오늘의 실습
• URDF / MJCF(XML) / scene 파일 확인
• wheel actuator 찾기
• W/A/S/D + Space 제어 구현
Lab 1 ROS2 Topic Communication
실습 1 목표
직접 만든 두 Node가 /cmd_vel Topic으로 Twist Message를 주고받게 합니다.
Lab 1 Terminal Warm-up
Terminal 기본 명령어
ROS2 실습에서 계속 사용하는 기본 조작만 짧게 확인합니다.
• ls : list
Lab 1 Environment Setup
bashrc란 무엇인가
bashrc는 새 Terminal을 열 때 Bash가 자동으로 읽는 사용자 설정 파일이다.
source /opt/ros/jazzy/setup.bash ##ROS2 jazzy 기본 설정 로드
export ROS_DOMAIN_ID=7 ##DDS의 도메인 아이디를 7로 설정
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp ##ROS2 통신 미들웨어 구현을 FastRTPS 사용
alias cw='cd $ROS_WS' ##ROS2 작업공간으로 이동하는 단축어
Lab 1 Environment Setup
Middleware, DDS, RMW 정의
ROS2 통신을 이해하기 위해 세 용어의 역할만 먼저 구분한다.
사용자 코드
Fast DDS 등
Lab 1 Workspace
Workspace 만들기
Workspace는 ROS2 프로젝트와 패키지를 모아두는 작업 공간입니다.
Lab 1 Package
첫 Package 만들기
ros2 pkg create는 새 ROS2 패키지의 기본 폴더와 설정 파일을 생성하는 명령어입니다.
Lab 1 Package Structure
Package 안에는 무엇이 생길까
ROS2 Python 패키지는 “패키지 정보”, “설치·실행 설정”, “실제 Python 코드”를 함께 가진다.
Lab 1 Build
Build 해보기
build를 하면 Workspace 안에 build / install / log 폴더가 생깁니다.
Lab 1 Source
Source 하기
source는 ROS2 명령어가 아니라 Bash 내장 명령어이며, setup.bash의 환경 설정을 현재 Terminal(shell)에 적용합니다.
Lab 1 Message
Message Type 자세히 보기 - Twist
Message Type은 Message가 가질 field 이름과 각 field의 data type을 정의합니다.
• geometry_msgs : package 이름
• msg : message interface 종류
• Twist : type 이름
Type은 어떤 field가 있고 각 field가 어떤 type인지 정의합니다.
Vector3 angular
Vector3
float64 x
float64 y
float64 z
angular = 각속도
이 실습에서는
linear.x : 전진/후진
angular.z : 좌/우 회전
geometry_msgs/msg/Twist = Message Type
→ Topic과 Message Type은 서로 다른 개념입니다.
Lab 1 Publisher
Mission 1-A: Publisher 만들기
코드는 직접 작성하거나 Agent를 활용해도 됩니다. 단, 요구사항은 반드시 만족해야 합니다.
Lab 1 Subscriber
Mission 1-B: Subscriber 만들기
/cmd_vel Topic을 구독하고, 들어오는 Twist 값을 터미널에 출력합니다.
Lab 1 Hint
코드 작성 위치와 실행 등록 힌트
Python Node는 파일을 만든 뒤 setup.py에 ros2 run 실행 이름을 등록해야 합니다.
Lab 1 Run Nodes
Build → Source → Run
작성한 Publisher와 Subscriber를 각각 다른 Terminal에서 실행합니다.
Lab 1 Verify
정말 ROS2 Topic으로 통신하고 있을까
print만 보는 것이 아니라 ROS2 시스템 안에서 Node와 Topic을 확인합니다.
Lab 1 Checkpoint
실습 1 완료 체크
아래 항목을 모두 확인하면 실습 1은 완료입니다.
Lab 2 MuJoCo Control
실습 2: MuJoCo에서 로봇을 움직여보자
제공된 로봇 모델과 scene을 실행하고, 키보드 입력을 바퀴 제어로 연결합니다.

Lab 2 Simulation
왜 시뮬레이션이 필요한가
실제 로봇을 바로 움직이기 전에 모델과 제어 로직을 반복해서 검증하기 위한 개발 환경입니다.
• 반복: 같은 초기 조건으로 여러 번 테스트 가능
• 관찰: joint, velocity, contact 등 내부 상태 확인
• 빠른 수정: 코드/모델을 바꾸고 즉시 다시 실행
따라서 목적은 실제 로봇을 “대체”하는 것이 아니라, 실제 적용 전에 제어 구조와 동작을 먼저 확인하는 것입니다.
Lab 2 MuJoCo
MuJoCo란 무엇인가
MuJoCo는 관절로 연결된 로봇과 접촉을 포함한 움직임을 계산하는 physics engine이다.
Lab 2 Model Files
XML, URDF, MJCF를 구분해서 보기
XML은 문법이고, URDF와 MJCF는 XML 문법을 사용하는 서로 다른 모델 형식이다.
Lab 2 Model Files
URDF란 무엇인가
URDF는 로봇을 link와 joint의 연결 구조로 설명하는 XML 기반 모델 형식이다.
Lab 2 Starter Files
mujoco 설치 명령어
Lab 2 Starter Files
제공되는 파일
실습 2 패키지 이름은 m1_test로 통일합니다. 로봇이 화면에 보이는 최소 실행 상태까지는 제공하고, 제어는 직접 구현합니다.
Lab 2 Read the Starter
키보드 입력은 어디에 연결할까
키 입력을 wheel actuator의 control 값으로 바꾸고, 그 값이 다음 simulation step에 반영되도록 연결한다.
Lab 2 Keyboard Control
Mission 2: Agent로 키보드 제어 완성하기
Starter code는 M1 로봇을 MuJoCo 화면에 띄우는 단계까지 제공된다. 과제는 키 입력을 바퀴 actuator 제어로 연결하는 것이다.
Wrap-up
오늘 실습 정리
두 실습은 각각 다른 것을 확인하지만, 모두 “입력 → 구조 → 실행 결과 확인”이라는 흐름을 가집니다.
• URDF와 MJCF(XML) 모델 형식 구분
• Keyboard → wheel actuator → mj_step → robot motion 연결