본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2025 ROS 스터디] 장우혁 #2주차 - ROS 중요 컨셉, 명령어, 도구

반응형

<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도 가능함

 

ROS 메시지 통신방식

 

 

메시지 통신의 절차

 ① 마스터 구동 (roscore)

   - 모든 노드 간 통신의 등록 및 연결을 중개

   - XMLRPC 기반으로 노드 정보를 관리함

 

 ② Subscriber 노드 구동 ($rosrun 패키지이름 노드이름) → 마스터에 등록 

 

 ③ Publisher 노드 구동 ($rosrun 패키지이름 노드이름) → 마스터에 등록

 

 ④ 마스터는 Subscriber에게 새로운 Publisher 정보를 알림

 

 ⑤ Subscriber가 Publisher에 TCPROS 접속 요청

 

 ⑥ Publisher가 TCP URI와 포트로 응답

 

 ⑦ TCPROS를 통한 직접 연결

 

 ⑧ 메시지 전송 (토픽 기반)

 

 ⑨ Service는 일회성으로 연결 후 종료

 

메시지 통신의 예시: Turtlesim

 

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

*RViz에서 RGB-D 카메라(예: Kinect, RealSense 등)*로 획득한 3D 포인트 클라우드(Point Cloud) 데이터를 시각화한 예시

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 기반 로봇 소프트웨어 개발의 핵심이다.

반응형