<Ch 4. ROS의 중요 컨셉>
Node (노드)
- ROS에서 가장 작은 실행 단위로, 하나의 실행 가능한 독립적인 프로그램이다.
- 로봇의 특정 기능을 담당한다. (ex. 센서 입력, 모터 제어, 데이터 처리 등)
- 여러 노드가 서로 메시지를 주고받으며 협업 → 모듈화된 구조 형성.
Package (패키지)
- 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶은 소스코드 단위.
- 여러 패키지를 묶은 것은 메타패키지(meta-package)라 하며 따로 분리함.
Message (메시지)
- 노드 간 통신을 위한 데이터 형식 (ex. int, float, bool 등 변수 형태).
- 간단한 데이터 구조 및 메시지들의 배열 형태도 사용 가능.
*Message (메시지) 통신 방식
- Topic (토픽)
- 단방향, 연속성을 갖는 통신 방식
- 1:1, 1:N, N:1, N:N 구조 모두 가능하며, 전체 통신의 대부분을 차지함.
- Publisher : 메시지를 보내는 노드
- Subscriber : 메시지를 받는 노드
- Service (서비스)
- 서비스 요청(Request) - 서비스 응답(Response) 구조를 갖는 동기 통신 방식
- 일회성 처리에 적합
- Service Server / Service Client 구조
- Action (액션)
- Service와 비슷하지만, 중간 피드백을 받을 수 있다는 장점이 있음.
- 시간이 오래 걸리는 작업에 적합
- Action Server / Action Client 구조로 구성됨
- 내부적으로 여러 토픽을 조합해 작동하며, cancel도 가능함
메시지 통신의 절차
① 마스터 구동 (roscore)
- 모든 노드 간 통신의 등록 및 연결을 중개
- XMLRPC 기반으로 노드 정보를 관리함
② Subscriber 노드 구동 ($rosrun 패키지이름 노드이름) → 마스터에 등록
③ Publisher 노드 구동 ($rosrun 패키지이름 노드이름) → 마스터에 등록
④ 마스터는 Subscriber에게 새로운 Publisher 정보를 알림
⑤ Subscriber가 Publisher에 TCPROS 접속 요청
⑥ Publisher가 TCP URI와 포트로 응답
⑦ TCPROS를 통한 직접 연결
⑧ 메시지 전송 (토픽 기반)
⑨ Service는 일회성으로 연결 후 종료
Name
- 노드, 메시지, 토픽, 서비스 등은 모두 고유 식별자(Name)를 가짐
- Global Name: /name
- Private Name: ~name
- ROS는 그래프 형태의 추상적 데이터 구조를 사용함
좌표 변환 (TF)
- 각 조인트 간 상대적인 좌표 정보를 트리 형태로 구성
- 다양한 프레임(World, Base_link, Sensor 등) 간 관계를 관리
- 위치 추정, 로봇 제어에 필수적으로 사용
클라이언트 라이브러리
- 다양한 언어 지원 → roscpp(C++), rospy(Python), rosjava(Java), roslisp, rosgo 등
<Ch 5. ROS 명령어 정리>
ROS 셸 명령어
- roscd : 지정한 패키지 디렉터리로 이동
- rosls : 패키지 내 파일 목록 보기
- rosed : 파일을 편집 (vim 등으로 열림)
- roscp : 파일 복사
ROS 실행 명령어
- roscore : ROS 마스터 노드 실행
- rosrun : 단일 노드 실행
- roslaunch : 다중 노드 실행 및 설정 포함 실행
ROS 정보 명령어
- rosnode list/info/ping/kill : 노드 관련 정보 확인 및 제어
- rostopic list/echo/info/pub : 토픽 관련 정보 확인 및 발행
- rosservice list/info/call : 서비스 정보 확인 및 요청 전송
- rosparam get/set/list/delete : 파라미터 정보 관리
- rosmsg list/show : 메시지 타입 확인
- rossrv list/show : 서비스 타입 확인
Catkin 빌드 명령어 (컴파일, 빌드 관련)
- catkin_create_pkg : 패키지 생성
- catkin_make : 패키지 빌드
- catkin_eclipse : 빌드 시스템으로 생성한 패키지를 이클립스에서 사용할 수 있게 변경
- catkin_init_workspace : 작업 공간 초기화
- catkin_prepare_release, catkin_generate_changelog 등
ROS 패키지 관련 명령어
- rospack : 패키지 정보 조회
- rosinstall : 패키지 설치
- rosdep : 의존성 설치 (예: rosdep install --from-paths src --ignore-src -r)
<Ch 5. ROS 도구>
RViz
- ROS의 3D 시각화 툴
- 센서 데이터 시각화 (LaserScan, Image, PointCloud 등)
- URDF(Unified Robot Description Format) 모델을 통한 로봇 시각화
- 실행: rviz 또는 rosrun rviz rviz
- 설치: sudo apt install ros-noetic-rviz
RQT
- Qt 기반의 GUI 툴 모음
- 주요 플러그인: rqt_graph, rqt_plot, rqt_image_view, rqt_console, rqt_logger_level 등
- GUI 기반의 노드 관리, 이미지 보기, 로그 확인 등에 유용
- 실행: rqt
- 설치: sudo apt install ros-noetic-rqt ros-noetic-rqt-common-plugins
rosbag
- ROS 메시지를 기록/재생하는 도구
- 기록: rosbag record -a
- 재생: rosbag play <파일명>
- 확인: rosbag info <파일명>
Gazebo
- 3D 로봇 시뮬레이터
- 로봇, 센서, 환경 모델링 및 물리 기반 시뮬레이션 가능
- 자율주행, 로봇팔 시뮬레이션 등에 활용됨
- 실행: roslaunch <패키지명> <파일명.launch>
- 설치: sudo apt install ros-noetic-gazebo-ros-pkgs
→ 위의 구성 요소와 도구들을 잘 이해하고 활용하는 것이 ROS 기반 로봇 소프트웨어 개발의 핵심이다.
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 장우혁 #3주차-ROS 기본 프로그래밍 (0) | 2025.05.01 |
---|---|
[2025 ROS 스터디] 윤윤지 #3주차-ROS 기본 프로그래밍 (0) | 2025.05.01 |
[2025 ROS 스터디] 윤윤지 #2주차-중요 컨셉, 명령어, 도구 (0) | 2025.05.01 |
[2025 ROS 스터디] 전예림 #3주차 - ROS 기본 프로그래밍 (0) | 2025.05.01 |
[2025 ROS 스터디] 한상민 #2주차-ROS의 중요 컨셉, 명령어, 도구 (0) | 2025.04.30 |