ROS 기초 II - 빌드시스템, Uninstall, 토픽/서비스/액션

Hyuna·2024년 10월 9일
0

ROS2

목록 보기
2/15
post-thumbnail

📕 참고: ROS2로 시작하는 로봇 프로그래밍




ROS(Robot Operating System)란?


로봇 소프트웨어 개발을 위한 오픈소스 프레임워크로,
노드와 데이타의 통신을 프레임단위로 규격화해놓은 라이브러리와 다양한 디버깅 도구를 제공한다.



ROS1 vs ROS2

ROS1과 ROS2의 가장 큰 차이점은 DDS(Data Distribution Service)이다.

ROS1

고유의 ROS 통신 프로토콜(TCP또는 UDP)을 사용하여 노드 간 데이터를 주고받는다. 중앙 노드인 ROS Master을 통해 노드 간 통신을 관리하여, Master가 다운되면 전체 시스템이 동작하지 않게 된다. 또한, 노드 간 데이터 통신을 세부적으로 조절할 수 없어 데이터 손실이 발생할 수 있다.

ROS2

표준화된 DDS를 통신 미들웨어로 사용하여 동적 검색이 가능하다. 또한, Qos(Quality of Service)를 지원하여 전송 신뢰성, 우선순위, 대역폭, 메시지 손실 방지가 가능하다. 이를 통해 다양한 환경에 대응할 수 있는 통신 성능을 보장하여 실시간 제어 및 멀티 플랫폼에서 사용 가능하다.

🙂 동적 검색: 어떤 토픽이 지정 도메인 영역에 있으며 어떤 노드가 이를 발신하고 수신하는지 파악

특징ROS 1 (Custom Protocol)ROS 2 (DDS 기반)
통신 프로토콜고유의 ROS TCP/UDP 프로토콜DDS (Data Distribution Service)
QoS 설정제공하지 않음DDS QoS 설정 가능, 실시간성 및 신뢰성 제어
실시간 지원제한적 실시간 지원실시간 통신 지원, 실시간 제어 애플리케이션 가능
분산 시스템중앙 ROS 마스터 필요분산 시스템 지원, ROS 마스터 없이 동적 노드 연결
보안기본적인 보안 기능 없음메시지 암호화, 인증 및 보안 기능 제공
멀티캐스트 및 유니캐스트제한적 멀티캐스트 지원멀티캐스트 및 유니캐스트 모두 지원


Uninstall


ROS2 관련 패키지 삭제

sudo apt remove ~nros-humble-* && sudo apt autoremove

sudo rm /ect/apt/sources.list.d/ros2.list
sudo apt update
sudo apt autoremove
sudo apt upgrade

ROS2 repository 삭제

더 이상 ROS2를 사용할 일이 없다면 레포지토리도 완전히 삭제한다!


sudo rm /etc/apt/sources.list.d/ros2.list

sudo apt update
sudo apt autoremove
sudo apt upgrade


빌드시스템


ROS는 코드의 재사용성을 위해 패키지와 노드 단위로 구성되어 있으며, 각 패키지는 다른 패키지와 상호 호환성을 위해 의존성을 갖게 된다. ROS2의 빌드 시스템은 colcon 이라는 빌드 도구 중심으로 동작한다.

colcon

colcon을 통해 패키지 빌드, 테스트, 패키지 배포 등의 기능을 수행할 수 있다.

  • 소스 코드를 실행 가능한 형태(바이너리 파일)로 변환
  • ROS에서 필요한 메시지(.msg)와 서비스(.srv) 파일 정의
  • 종속성 해결 : 빌드 과정에서 올바르게 동작할 수 있도록 패키지에 필요한 라이브러리와 패키지를 찾아서 링크
  • 환경 설정 : 패키지가 올바르게 작동할 수 있도록 필요한 경로 참조


빌드 프로세스

1. 워크스페이스 설정

ROS2의 작업 공간을 생성한다.

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

src : ROS2 패키지 저장 디렉토리
install : 빌드된 패키지가 설치된 디렉토리
build : 빌드 프로세스 중간에 생성되는 파일들이 저장된 디렉토리

2. 빌드 명령

colcon build 를 통해 빌드를 명령할 수 있다. 빌드는 꼭 ros2_ws에서 진행하자.
빌드가 완료되면 패키지는 install폴더에 설치된다.

3. CMake

C++에서는 CMake기반의 ament_cmake와 python에서는 setuptools를 사용하여 패키지를 생성한다. python에서 GUI프로그램을 사용할 예정이라면 ament_cmake를 입력하면 된다.

ros2 pkg create my_pkg --build-type ament_cmake
ros2 pkg create my_pkg --build-type ament_python
  • 의존성 설정
    ros2 pkg create my_pkg --build-type ament cmake --dependencies <참조할 패키지>

4. 빌드 명령 옵션

  • 패키지별 빌드
    colcon build --packages-select my_pkg
  • 빌드 결과 삭제
    rm -rf build/ install/ log
    colcon clean

5. 빌드 후 환경 설정

빌드가 완료 된 후, ROS2 환경을 활성화하기 위해 source install/setup.bash 명령어를 실행해야 한다.

6. 테스트/디버깅

  • 테스트 실행
    colcon test
  • 테스트 결과 확인
    colcon test-result


Node


명령어를 수행하는 최소 단위로 ROS 네트워크 내에서 서로 통신하여 다양한 작업을 수행한다.

💡 Message란?

노드 간 통신을 위해 주고받는 데이터 단위

노드 통신 방식

💡 비동기성 vs 동기성

✔ 비동기성 : 송신자가 데이터를 보낸 후, 수신자가 데이터를 받았는지 확인하지 않고 다른 작업이 가능
✔ 동기성 : 송신자가 데이터를 보낸 후, 수신자가 데이터를 받고 응답할때까지 기다려야 다른 작업이 가능

1. Topic

로봇의 동작에 필요한 정보를 가지고 있는 데이터 스트림이다. 센서 데이터(카메라, 라이다)나 상태 정보(로봇의 위치와 속도)를 전달하는데 사용된다. 메시지는 데이터 그 자체를, 토픽은 메시지를 전달하는 통로로써 데어터가 연속적으로 흐르며 전달된다.

  • 비동기식 단방향으로 메시지를 주고받기 위한 통신 채널
  • 보내는 Publisher와 메시지를 받는 Subscriber 모델 사용
  • 비동기성과 연속성(수신자가 메시지를 받았는지 확인하지 않고 주기적으로 메시지를 보낼 수 있으므로)을 가지기 때문에 센서값 전송, 항시 정보를 주고받아야할 때 사용


2. Service

로봇에게 서비스를 요청(request)하고 응답(response)을 받는 통신 매커니즘이다.

  • 동기식 양방향 메시지 송수신 방식
  • 서비스를 요청(메시지를 보내는쪽)하는 Server Client와 요청받은 서비스를 수행(메시지를 받는쪽)하는 Service Server간의 통신
  • 서비스 응답은 서비스 요청이 있었던 서비스 클라이언트에 대해서만 응답



3. Action

로봇의 동작을 실행하고 진행 상태를 피드백 하는 매커니즘이다. 로봇이 목표 위치로 이동하는 동안 진행 상황(이동 중인지, 장애물에 부딪혔는지)을 피드백받고, 사용자가 중간에 중지 명령을 내릴 수 있다.

  • 비동기식, 동기식 양방향 메시지 송수신 방식
  • 서비스와 통신 방식이 반대 방향
  • 액션 클라이언트(Action Client): 작업 목표(Goal)를 설정하고, 피드백을 수신받아 최종결과를 기다림
  • 액션 서버(Action Server): 작업 목표를 받아 수행하고, 클라이언트에게 피드백과 최종결과를 송신
  • 피드백은 동기적, 전체 작업은 비동기적 과정

💡 서비스 vs 액션

✔ 서비스: 단순하고 즉각적인 요청-응답 처리, 서비스 서버에게 직접 동작 명령
✔ 액션: 장기간 지속되는 작업을 수행, 피드백 토픽을 통해 작업 진행 상태를 모니터링하고 업데이트하며 동작 수행

메커니즘특징예시통신 방식
토픽(Topic)비동기적, 발행-구독 모델센서 데이터 전송단방향, 지속적인 데이터 전송
서비스(Service)동기적, 요청-응답 모델특정 작업 요청(예: 목표 위치 설정)양방향, 즉시 응답 필요
액션(Action)비동기적, 상태 추적 및 피드백 제공 가능장기 작업(예: 경로 따라가기)양방향, 진행 상태와 결과 전달

💡 예시 - 로봇이 목표 위치로 이동하는 과정

  1. 목표 위치 설정 : 서비스
  • 서버 클라이언트가 서버에게 목표 위치 요청 - 서비스 서버가 목표 위치 설정 응답 반환
  1. 경로 계획 및 이동 : 액션
  • 서비스가 직접 요청을 보낸것이 아닌, 노드 내에 저장되거나 공유된 목표를 액션클라이언트가 참조하여 수행 or 개별적으로 목표 수행
  • 액션 클라이언트가 "목표 위치로 이동"을 액션 서버에 작업 요청
  • 이동 하는 동안 액션 서버는 로봇 진행 상황을 피드백을 통해 액션 클라이언트에게 전송
  • 목표 위치에 도달하면 서버는 작업 결과 메시지를 액션 클라이언트에게 보내고 작업이 종료
  • 서비스 서버에게 로봇의 작업 상태를 송신하여 서버가 작업 상태를 업데이트 할 수도 있음
  1. 센서 데이터 및 상태 정보 : 토픽
  • 로봇이 목표 위치로 이동하는 동안 피드백 토픽을 통해 로봇의 상태와 센서 데이터를 지속적으로 전송

0개의 댓글