[rclpy] SingleThreadedExecutor

About_work·2023년 11월 15일
0

ros2

목록 보기
6/41

개요

  • SingleThreadedExecutorrclpy에서 제공하는 클래스
  • 콜백: https://velog.io/@jk01019/ros2-callback
    • 특정 이벤트나 조건이 발생했을 때 자동으로 호출되도록 예약된 함수
  • 이 클래스는 ROS 2 노드의 콜백을 관리하고 실행하는 역할
    • 노드의 비동기적인 행동을 관리하는 데 중요한 역할
  • SingleThreadedExecutor의 주요 특징과 역할은 다음과 같습니다:

주요 특징 및 역할

콜백 관리 및 실행

  • 노드는 서로 메시지를 주고받거나 서비스 요청을 처리하기 위해 콜백 함수를 사용
  • SingleThreadedExecutor는 이러한 콜백들을 관리하고 실행하는 역할

단일 스레드 처리

  • 클래스 이름에서 알 수 있듯이, SingleThreadedExecutor는 단일 스레드를 사용하여 모든 콜백을 순차적으로 처리
  • 이는 콜백 간의 동시성 문제를 방지

이벤트 루프

  • 이벤트 루프: https://velog.io/@jk01019/ros2-이벤트-루프-event-loop
  • SingleThreadedExecutor는 내부적으로 이벤트 루프를 실행하여
    • 등록된 콜백(예: 메시지 수신, 서비스 요청, 타이머 이벤트 등)을 지속적으로 폴링
  • 새로운 이벤트가 발생하면 해당 콜백을 실행

노드 추가 및 제거

  • SingleThreadedExecutor에는 하나 이상의 노드를 추가할 수 있음
  • 이를 통해, 해당 실행자가 노드의 콜백을 처리하도록 할 수 있습니다.
  • 또한, 필요에 따라 노드를 제거할 수도 있습니다.

블로킹 동작

  • executor.spin() 메소드는 블로킹 함수로,
    • 호출된 후에는 콜백이 처리될 때까지 계속 실행
  • 이는 프로그램이 종료되지 않고 콜백을 계속 처리할 수 있도록 합니다.

간단한 애플리케이션에 적합

  • SingleThreadedExecutor는 비교적 간단한 애플리케이션에 적합
  • 여러 콜백이 복잡하게 상호 작용하거나, 높은 처리량이 요구되는 경우에는 MultiThreadedExecutor와 같은 다른 실행자를 고려할 수 있습니다.

사용법

executor.add_node(node)

  • 이를 통해 ROS 2 노드는 네트워크 상의 다른 노드들과의 통신 및 상호작용을 할 수 있게 됩니다.

executor.spin()

  • spin 메소드는 실행자가 노드의 콜백을 계속해서 처리하도록 하는 무한 루프를 시작
  • 이 함수를 호출하면, 실행자는 노드로부터 발생하는 이벤트(메시지 수신, 타이머, 서비스 요청 등)를 계속 감시하고, 해당 이벤트에 대응하는 콜백 함수를 실행
  • spin은 프로그램이 종료되거나 명시적으로 중지될 때까지 실행되는 블로킹 함
  • 즉, 이 메소드가 호출된 후에는 다른 코드 라인이 실행되지 않습니다.
  • 이벤트 루프(https://velog.io/@jk01019/ros2-이벤트-루프-event-loop) 형태로 작동
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글