본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2025 ROS 스터디] 이영상 #2주차- ROS 용어, 명령어, 도구

반응형

Node

최소 단위의 실행 가능한 프로세서. (각 노드는 메시지 통신으로 데이터를 주고 받는다)

예를 들어, 하나의 노드는 센서 데이터를 수집하고, 또 다른 노드는 그 데이터를 처리하며, 다른 노드는 로봇의 모터를 제어하는 등의 역할을 한다.

노드의 특징

  1. 분산 처리: 여러 노드가 서로 독립적으로 실행되며, 네트워크를 통해 통신한다.
  2. 모듈화: 각 노드는 하나의 특정한 작업을 수행하여 시스템을 모듈화한다.
  3. 통신: 노드 간에 데이터를 주고받기 위해 토픽(Topic), 서비스(Service), 또는 액션(Action)을 사용한다.

 

자율 주행 로봇에서의 예시

 

노드 구성:

  • 레이더 센서 노드: 장애물 데이터를 읽어옴.
  • 경로 계획 노드: 주어진 지도에서 목적지까지의 경로를 계산.
  • 모터 제어 노드: 경로 계획에 따라 로봇의 바퀴를 제어.
  • 카메라 노드: 실시간으로 비디오 데이터를 스트리밍.
  • 데이터 처리 노드: 영상 처리로 장애물 인식 및 차선 감지.

Package

-노드 실행을 위한 정보 등을 묶어 놓은 것. (노드를 묶어놓은 것)

패키지의 특징

  1. 구성 단위
    • ROS의 소프트웨어 구성 요소를 계층적으로 관리한다.
    • 각 패키지는 독립적으로 실행되거나 다른 패키지와 연동될 수 있다.
  2. 재사용 가능
    • 한 번 작성한 패키지를 다른 프로젝트에서 재사용할 수 있다.
  3. 독립성
    • 서로 다른 패키지가 충돌 없이 독립적으로 동작할 수 있다.
  4. Dependency 관리
    • 특정 패키지가 다른 패키지에 의존하는 경우, 이를 package.xml 또는 CMakeLists.txt에 정의한다.

 

Message

- 노드간의 데이터를 주고받는 방법. (integer, floating point, boolean과 같은 변수 형태)

 

Message는 목적에 따라 분류

- Topic (대부분 토픽 사용)

특징

  • 단방향 통신: 한쪽에서 데이터를 발행(Publish)하고, 다른 쪽에서 이를 구독(Subscribe).
  • 연속적 데이터 전송: 주기적으로 데이터를 전송하는 데 적합.
  • 구조:
    • Publisher: 데이터를 발행하는 역할.
    • Subscriber: 데이터를 구독하는 역할.

통신 가능 유형

  • 1:1: 한 노드가 데이터를 발행하고, 하나의 노드가 이를 구독.
  • 1:N: 한 노드가 데이터를 발행하고, 여러 노드가 이를 구독.
  • N:N: 여러 노드가 데이터를 발행하고, 여러 노드가 이를 구독.

사용 사례

  • 센서 데이터 전송: 주기적으로 데이터를 수집하여 다른 노드에 전달.
    • 예: 라이다, 카메라, IMU 센서 등.
  • 제어 명령 전송: 지속적인 명령 전송.
    • 예: 로봇의 속도 명령

 

- Service

특징

  • 양방향 통신: 클라이언트가 서버에 요청을 보내고, 서버가 이에 대한 응답을 반환.
  • 일회성 통신: 요청-응답 형태로 동작하며, 요청이 있을 때만 처리.
  • 구조:
    • Client: 요청(Request)을 보내는 쪽.
    • Server: 요청을 처리하고 응답(Response)을 반환하는 쪽.

 

사용 사례

  • 일회성 작업 요청:
    • 로봇의 특정 동작 실행.
      • 예: "로봇 팔을 특정 위치로 이동해라."
    • 설정 변경.
      • 예: "센서의 데이터 수집 주기를 변경해라."
  • 데이터 요청:
    • 클라이언트가 특정 데이터를 서버로부터 요청.
      • 예: "현재 배터리 상태를 알려줘."

- Action

    : 중간중간 피드백 전달, 마지막에 결과값 전달 (복잡한 테스트에 사용, 잘 사용 X)

 

 

 

파라미터 서버

파라미터 서버는 ROS에서 전역적으로 설정값이나 변수를 저장하고 공유하기 위해 사용되는 중앙 저장소. ROS Master와 함께 동작하며, ROS 시스템 내 모든 노드가 파라미터 서버에 접근하여 값을 읽고 쓸 수 있다.

 

ROS 마스터와 파라미터 서버의 차이점에는 무엇이 있을까?

ROS 마스터 (Master)

1. 역할

ROS 마스터는 노드 간의 통신을 관리하고 중재하는 중심 요소입니다.
즉, ROS 시스템에서 네트워크 연결리소스 이름 관리를 담당합니다.

2. 기능

  • 노드 등록 및 해제:
    • 각 노드는 ROS 마스터에 자신을 등록하여 존재를 알립니다.
    • 등록된 노드는 다른 노드와 통신이 가능합니다.
  • 토픽과 서비스 연결:
    • ROS 마스터는 퍼블리셔와 서브스크라이버, 서비스 클라이언트와 서버를 연결합니다.
    • 예: Publisher가 특정 토픽을 발행하면, Subscriber가 이를 구독할 수 있도록 연결 설정.
  • 네임스페이스 관리:
    • ROS 마스터는 모든 토픽, 서비스, 액션 등의 이름 충돌을 방지하기 위해 네임스페이스를 관리합니다.

3. 데이터 저장 여부

  • ROS 마스터는 데이터를 저장하지 않습니다.
    대신, 노드 간의 연결 정보를 동적으로 관리하며 데이터는 노드들 간에 직접 전달됩니다.

파라미터 서버 (Parameter Server)

1. 역할

파라미터 서버는 전역 설정값이나 환경 변수를 저장하고 공유하기 위한 중앙 저장소입니다.
노드 간에 공유되어야 할 데이터를 저장하는 역할을 합니다.

2. 기능

  • 설정값 관리:
    • 파라미터 서버는 ROS 시스템에서 사용되는 설정값(예: 로봇 속도, 센서 업데이트 주기 등)을 저장합니다.
  • 전역 데이터 공유:
    • ROS 시스템에서 공통적으로 사용되는 값이나 초기화 데이터를 모든 노드가 접근 가능하도록 합니다.
  • 읽기/쓰기 가능:
    • 노드는 파라미터 서버에 값을 저장하거나 읽을 수 있습니다.

3. 데이터 저장 여부

  • 파라미터 서버는 데이터를 저장합니다.
    이 데이터는 노드가 ROS 마스터에 등록된 상태에서 항상 접근 가능합니다.

 

-> ROS 마스터가 노드 간의 통신을 관리하는 동안, 파라미터 서버는 설정값을 관리하며 노드가 이를 쉽게 공유하도록 돕습니다.

 

 

메시지 통신의 순서

 

1. roscore : 맨 처음 roscore를 통해 마스터라는 것을 구동. (노드 정보를 관리 -> 노드들의 통신을 연결), XML-Remote Procedure Call이라는 서버 클라이언트 작동 과정.

 

2. 노드2 작동 (예를들어 subscriber 노드) : 실행되자마자 정보를 마스터에 전달(노드의 이름, 토픽의 이름, 어떤 형태의 메시지를 전할것인지, ip번호, 포트번호) (XMLRPC 클라이언트)

 

3. 노드1 작동 (예를들어 publisher 노드) : 실행되자마자 정보를 마스터에 전달(노드의 이름, 토픽의 이름, 어떤 형태의 메시지를 전할것인지, ip번호, 포트번호) (XMLRPC 서버)

 

4. 마스터에서 판단하기에 노드1과 노드2의 노드정보가 같다면 노드1의 정보를 노드2에 전달

 

5. 마스터로부터 받은 퍼블리셔 정보를 이용해 TCPROS 접속을 요청

 

6. 접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송

 

7. TCPROS를 이용해 퍼블리셔 노드와 직접 연결. (노드1TCPROS 서버, 노드2TCPROS 클라이언트)

 

8. 퍼블리셔 노드는 섭스크라이버 노드에게 미시지를 전송 가능 (토픽, 서비스, 액션)

 

정리)

메시지는 노드 간에 데이터를 주고받을 때 사용하는 데이터의 형태.

- 토픽, 서비스, 액션 모두 메시지를 사용

- 단순 자료형 사용 (integer, floating point, boolean)

- 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 ( 예 : twist vector3 float64)

메시지들이 나열된 배열과 같은 구조

 

네임 (Names)

- 노드, 메시지(토픽, 서비스, 액션, 파라미터)가 갖는 고유의 식별자

 

그 외

좌표변환 (TF, transform)

클라이언트 라이브러리 (다양한 프로그래밍 언어 지원)

이기종 디바이스 간의 통신

 

ROS 명령어

 

 

ROS 셸 명령어

roscd (change directory) : 지정한 ROS 패키지의 디렉터리로 이동

rosls (lists files) : ROS 패키지의 파일 목록 확인

rosed (editor) : ROS 패키지의 파일 편집

roscp (copies files) : ROS 패키지의 파일 복사

roscore : master, rosout, parameter server 실행 및 관리

rosrun : 노드 실행

roslaunch : 노드를 여러 개 실행 및 실행 옵션 설정

rosclean : ros로그 파일을 검사하거나 삭제

 

 

 

ROS 도구

RViz (ROS Visualization Tool)

ROS3D 시각화 툴

- 센서 데이터의 시각화

- 레이저 거리 센서(LDS)센서의 거리 데이터

- Depth Camera의 포인트 클라우드 데이터 (빨간색 = 거리가 가까운, 보라색 = 거리가 먼)

- 카메라의 영상 데이터

- IMU 센서의 관성 데이터 등

로봇 외형의 표시와 계획된 동작을 표현 (URDF : Unified robot description format)

네비게이션

매니퓰레이션

원격제어

 

RViz 실행 : rosrun rviz rviz or rviz

 

==> Rviz를 사용하면 센서 및 로봇 관련 데이터 시각화가 매우 간단하다

 

 

RQT : 플러그인 방식의 ROS의 종합 GUI(grahpical user interface) 툴 (실행방법 : rqt)

-> 토픽, 서비스, 파라미터 등을 시각적으로 확인하고 관리할 수 있게 해주는 도구

 

ex)

rqt_graph

ROS 노드와 토픽 간의 통신 구조를 그래프로 시각화.

 

rqt_plot

ROS 토픽 데이터를 실시간 그래프로 시각화.

 

rqt_console

ROS 로그 메시지를 GUI로 표시.

 

rqt_logger_level

ROS 노드의 로그 레벨을 실시간으로 조정 가능(: DEBUG, INFO, WARN).

 

rqt는 ROS 시스템의 관리 및 디버깅을 위한 도구이고, RViz는 로봇 센서 데이터 및 3D 시각화를 위한 도구.

-> rqt는 시스템 분석에, RViz는 로봇의 동작 상태를 3D로 확인할 때 주로 사용

 

 

Gazebo

: 로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터.

-> 우리는 morAI사용 예정

반응형