ROS2 - RCLPY, ROS2BAG(8)

이준혁·2024년 12월 28일

ROS2

목록 보기
12/14

제가 작성하는 이 글은 제가 공부하기 위해 작성하고 제 학교 후배들에게 조금이라도 ros에 대해서 접하게 하고자 작성하게 되었습니다. 그러니 만약 틀린내용이나 그러니 제가 부족한 부분이 있을수 있으니 주의해주면서 봐주시면 감사하겠습니다 -Happy Lee-


이번에는 다양한 개념을 알아보기 위해 작성하는 블로그이다. 너무 깊지 않을수 있으니 궁금한게 있으면 더 찾아보면서 공부하는게 좋을것이다.

목차

1. RCLPY
2. ROS2BAG
3. CLI
4. Intra-process communication
5. Lifecycle
6. Qos
7. tf


RCLPY

RCLPY란 무엇일까?

  • ROS2의 Python 클라이언트 라이브러리로, 노드를 만들고 통신할 수 있도록 돕는 핵심 요소
  • C++로 작성된 ROS2의 코어 라이브러리(rcl)를 Python 환경에서 활용할 수 있도록 래핑 (wrapping)한 것이 특징
  • 사용자들은 Python의 간결한 문법과 다양한 라이브러리를 ROS2 기반 시스템에 쉽게 통합

rclpy 구성요소

  • 노드
  • 퍼블리셔(Publisher)와서브스크라이버(Subscriber)
  • 서비스(Service)와클라이언트(Client)
  • 액션(Action)
  • 파라미터서버(Parameter Server)

rclpy 고급사용법

  • 멀티스레드 지원
    멀티스레드가 실행이 지원이 되어 서비스와 퍼블리셔가 동일한 노드 내에서 동시에 작동하는 경우 MultiThreadedExecutor를 사용 가능하다.

  • 비동기 서비스 호출
    rclpy는 asyncio와 통합 가능하여 비동기적으로 서비스를 호출하고 처리가능

동기 : 입력과 출력, 요청과 응답이 동시에 일어남
비동기 : 입력이나 요청이 있다 해서 출력이나 응답이 바로 나타나지 않고 특정 신호가 있어야 결과가 나타나는 등으로 조작됨

  • 그외 노드이름 관리, 타이머 주기 관리, 에러 핸들링 관리

Executor

  • ROS2에서 콜백을 실행하는 구성 요소
  • 메시지 수신, 서비스 요청 처리, 타이머 이벤트 등 다양한 이벤트에 대한 응답 실행
  • 노드가 구독하는 데이터나 이벤트를 적절한 콜백에서 처리하여 메시지의 Qos를 지원하여 시스템의 비동기 처리와 효율성 보장
  1. User code: 사용자가 작성한 코드
  2. rcl: 클라이언트 라이브러리로, 사용자 코드와 미들웨어를 연결
  3. rmw: 미들웨어와 클라이언트 간의 인터페이스 역할. 미들웨어와의 상호작용을 추상화
  4. rmw adapter: RMW와 미들웨어를 연결하는 중간 계층 역할.
    이를 통해 ROS2는 특정 DDS 구현체에 종속되지 않고, 다양한 미들웨어를 지원할 수 있는 유연성을 가짐
  5. Middleware: 실제 메시지 전달과 QoS 설정을 처리하는 계층

미들웨어 : 분산 네트워크에서 애플리케이션 또는 구성 요소 간에 하나 이상의 종류의 통신 또는 연결을 가능하게 하는 소프트웨어. ROS2에서는 노드 간의 메시지 송수신 및 이벤트 처리를 담당

Executor의 종류

  • SingleThreadedExecutor: 단일 스레드에서 콜백을 실행
    하나의 스레드만 사용하여 이벤트를 처리하여 콜백이 완료될 때까지 다른 작업을 처리 못함
  • MultiThreadedExecutor: 여러 스레드에서 콜백을 병렬로 실행
    여러 스레드가 동시에 실행되어 복잡한 작업이나 멀티태스킹 환경에서 유리함
  • StaticSingleThreadedExecutor: ROS 2의 고정된 환경에서 단일 작업 처리에 적합하며, 시스템의 복잡성이나 자원 사용량을 줄이는 데 기여

Executor와 Spin의 관계

spin()
  • 여기서 spin의 개념이 들어가는데 호출되면 노드는 콜백이 발생하기를 기다리며,
    이벤트가 감지될 때 콜백을 실행하는데 Executor가 동작할 수 있는 환경을 유지하는 루프이다.
따라서

Executor는 콜백을 처리하는 "관리자"이고, spin()은 해당 Executor가 콜백을 계속해서 처리하도록 하는 "루프"라고 생각해라

ROS2BAG

ROS2BAG란 무엇일까?

  • 각 토픽에서 수집된 데이터를 데이터베이스에 저장하며, 이를 재생하여 테스트 및 실험 결과를 재현할 수 있다.

간단 명령어

BAG 파일 레코딩 : topic_name에서 수신되는 메시지를 “my_bag.bag”라는 이름의 BAG 파일에 레코딩함

ros2 bag record -o my_bag topic_name

BAG 파일 재생 : “my_bag.bag”라는 이름의 BAG 파일을 재생

ros2 bag play my_bag

BAG 파일 정보 표시 : “my_bag.bag”라는 이름의 BAG 파일의 정보를 표시함

ros2 bag info my_bag

asyncio : 비동기 프로그래밍을 위한 모듈이며 CPU 작업과 I/O를 병렬로 처리하게 해줍니다.
콜백 : 특정이벤트가 발생했을때 자동으로 호출되는 함수

profile
#자기공부 #틀린것도많음 #자기개발 여러분 인생이 힘들다 하더라도 그것을 깨는 순간 큰 희열감으로 옵니다~

0개의 댓글