1. ROS 용어 정리
1.1 Node
- ROS 시스템에서 실행 가능한 최소 단위의 프로세스
- 개발자가 기능별로 자유롭게 분할해 설계
- 각 노드는 독립적으로 유닛 테스트 가능
- ROS의 대표적인 특징 중 하나
1.2 Package
- 하나 이상의 노드와 실행 정보를 묶은 디렉토리 구조
- 종속 패키지들의 모음은 “메타 패키지(meta-package)”라고 칭함
1.3 Message
- 노드 간 데이터 통신을 위해 사용하는 데이터 구조
- 기본 자료형(int32, float64, bool 등)
- 메시지 내부에 다른 메시지를 포함하거나, 메시지 배열 형식도 정의 가능
메시지 타입
- Topic
- 연속적 단방향 통신
- 1:1, 1:N, N:1, N:N 모두 지원
- 네트워크·CPU 사용률이 높음(약 90%)
- Publisher: 토픽 송신자
- Subscriber: 토픽 수신자
- Service
- 일회성 양방향 통신
- 통신 후 세션 종료 → 재사용 시 재연결 필요
- 비교적 자원 활용 효율적(약 5%)
- Service Client: 서비스 요청자
- Service Server: 서비스 제공자
- Action
- Service보다 복잡하거나 장시간 수행되는 작업에 적합
- 중간 진행 상황(피드백) 제공
- Action Client: 액션 요청자
- Action Server: 액션 제공자
- Parameter Server
- 전역 변수(global parameter)를 네트워크 상에 저장
- 외부에서 변경하거나 실시간 조회 가능
- Master 기능의 일부
2. 메시지 통신 개념 및 순서
1. Master구동: XMLRPC(XML-Remote Procedure Call)
- $roscore
2. Node2 (ex- subscriber) 구동 - (Master: server, Node2: client)
- $rosrun 패키지이름 노드이름
3. Node1 (ex- publisher) 구동 - (Master: server, Node1: client)
- $rosrun 패키지이름 노드이름
4. publisher 정보 알림: Master는 subscriber Node에게 새로운 publisher 정보를 알림 - (Master: server, Node2: client)
5. publisher Node에 접속 요청: 마스터로부터 받은 publisher 정보를 이용하여 TCPROS 접속을 요청 - (Node1: server, Node2: client)
6. subscriber Node에 접속 응답: 접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송 - (Node1: server, Node2: client)
7. TCP 접속: TCPROS를 이용하여 publisher node와 직접연결 - (Node1: server, Node2: client)
8. 메시지 전송: 발행자 Node는 subscriber node에게 메시지를 전송(Topic) - (Node1: server, Node2: client)
9. 서비스 요청 및 응답: 1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다
3. 주요 ROS 명령어
3.1 ROS 셸 명령어( ' * ': 중요도)
- roscd***: 패키지 디렉토리로 이동
- rosls*: 패키지 내 파일 목록 확인
- rosed*: 패키지 파일 즉시 편집
- roscp*: 패키지 파일 복사
- rospd: 패키지 디렉토리 인덱스 추가
- rosd: 패키지 디렉토리 인덱스 조회
3.2 ROS 실행 명령어
- roscore***: Master·rosout·Parameter Server 실행
- rosrun***: 단일 노드 실행
- roslaunch***: 복수 노드 실행 및 옵션 설정
- rosclean**: 로그 파일 정리 및 삭제
3.3 ROS 정보 조회 명령어
- rostopic***: 토픽 정보 조회
- rosservice***: 서비스 정보 조회
- rosnode***: 노드 상태 조회
- rosparam***: 파라미터 정보 조회·수정
- rosbag***: 메시지 기록·재생
- rosmsg**: 메시지 타입 조회
- rossrv**: 서비스 타입 조회
- rosversion*: ROS 배포·패키지 버전 조회
- roswtf: 시스템 상태 진단
3.4 Catkin 빌드 명령어
- catkin_create_pkg***: 패키지 템플릿 생성
- catkin_make***: 빌드 시스템 실행
- catkin_find*: 패키지 경로 검색
- catkin_init_workspace: 작업 폴더 초기화
- catkin_prepare_release: 릴리즈 준비
- catkin_generate_changelog: CHANGELOG.rst 업데이트
3.5 패키지 관리 명령어
- rospack***: 패키지 정보 조회
- rosdep**: 의존성 설치
- rosinstall**: 외부 패키지 설치
- roslocate: 패키지 위치 검색
- rosmake: (구 rosbuild) 패키지 빌드
4. 주요 개발 도구
4.1 RViz
- 3D 시각화 툴
- 센서 데이터·포인트클라우드·카메라 영상·IMU 데이터 표시
- URDF 모델 시각화 및 경로 계획
- 실행 방법:
-
$ roscore
-
새로운 터미널 실행
-
$ rviz
4.2 RQT
- GUI 플러그인 기반 도구 모음
- rqt_graph, rqt_plot, rqt_bag 등 제공
- 실행 방법:
-
$ roscore
- 새로운 터미널 실행
-
$ rqt
4.3 Gazebo
- 물리 엔진 탑재 3D 시뮬레이터
- ROS와의 높은 호환성
- 노이즈 조정 및 다양한 로봇 시뮬레이션 지원
5. 추가 참조
- Topic·Service·Action 메시지 목록
- 표준 메시지(std_msgs)
- 사용자 정의 메시지 예제
- geometry_msgs/PoseStamped
http://docs.ros.org/api/geometry_msgs/html/msg/PoseStamped.html - sensor_msgs/LaserScan 배열 메시지
http://docs.ros.org/api/sensor_msgs/html/msg/LaserScan.html
- geometry_msgs/PoseStamped
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 조원영 #3주차- ROS 기본 프로그래밍 (0) | 2025.05.08 |
---|---|
[2025 ROS 스터디] 한상민 #3주차 - ROS 기본 프로그래밍 (0) | 2025.05.06 |
[2025 ROS 스터디] 장우혁 #3주차-ROS 기본 프로그래밍 (0) | 2025.05.01 |
[2025 ROS 스터디] 윤윤지 #3주차-ROS 기본 프로그래밍 (0) | 2025.05.01 |
[2025 ROS 스터디] 장우혁 #2주차 - ROS 중요 컨셉, 명령어, 도구 (1) | 2025.05.01 |