rclpy(ROS Client Library for Python)

About_work·2023년 11월 14일
0

ros2

목록 보기
1/41

기초 개념

  • rclpy는 ROS 2 에서 Python 클라이언트 라이브러리

  • ROS 2 자체는 분산 컴퓨팅 환경에서 로봇의 다양한 요소들을 효율적으로 통합하고 관리하는 데 초점을 맞추고 있음

rclpy.init()

  • 이 함수는 ROS 2 프로그램이 실행될 때 가장 먼저 호출되어야 하며, 다양한 초기화 과정을 수행합니다. rclpy.init()의 주요 역할은 다음과 같습니다:

노드 초기화

  • ROS 2 프로그램은 하나 이상의 노드(node)로 구성됩니다.
  • 노드들이 ROS 2 네트워크와 통신할 수 있도록 초기 설정을 제공
  • 이 함수는 ROS 2 네트워크의 다른 노드들과의 통신 준비를 함
    • 이는 메시지 교환, 서비스 호출, 액션 서버 및 클라이언트 통신 등을 포함

통신 인프라 설정

  • ROS 2는 DDS (Data Distribution Service) 미들웨어를 사용하여 노드 간 통신을 관리
  • DDS와의 통신을 위한 인프라를 구성

ROS 매개변수 및 환경 설정

  • 이 함수는 ROS 2 시스템의 매개변수와 환경 설정을 읽고 초기화
  • 예를 들어, 환경 변수, 노드 이름, 네임스페이스 등을 설정할 수 있음

로깅 시스템 초기화

  • ROS 2 로깅 시스템을 활성화하여 메시지, 경고, 오류 등을 기록

글로벌 리소스 초기화

  • ROS 2의 내부 리소스와 데이터 구조들을 초기화
    • 이는 노드, 퍼블리셔, 서비스 등의 ROS 2 구성 요소가 정상적으로 작동하는 데 필수적

명령줄 인자 처리

  • 실행 시 제공된 명령줄 인자를 처리하고, 이를 ROS 2 시스템에 전달
  • 이를 통해 런타임에 다양한 구성 옵션을 제공할 수 있습니다.

rclpy.ok()

  • 함수는 ROS 2 시스템의 전반적인 상태를 확인하는 데 사용
  • 이 함수는 ROS 2 시스템이 정상적으로 동작 중인지 여부를 나타내는 불리언(Boolean) 값을 반환
  • 목적: rclpy.ok()는 주로 무한 루프 내에서 ROS 2 노드가 계속 실행되어야 할지를 판단하는 데 사용
  • 응용: 사용자가 프로그램을 중단하려 할 때(예: Ctrl+C를 누를 때), rclpy.ok()는 False를 반환하여 루프를 종료하고 노드를 안전하게 종료할 수 있도록 함

rclpy.spin_once(node)

  • 주어진 노드에 대해 한 번의 이벤트 처리를 수행
  • 이 함수는 노드의 대기 중인 콜백을 확인하고 실행
  • 목적: 이 함수는 노드의 메시지 구독, 서비스 요청, 타이머 이벤트 등을 처리하는 데 사용
  • 응용:
    • rclpy.spin_once(node)는 주로 사용자 정의 메인 루프에서 이벤트 처리를 더 세밀하게 제어할 때 사용
    • 이를 통해 다른 연산과 ROS 2 이벤트 처리를 혼합할 수 있습니다.

rclpy.shutdown()

  • ROS 2 애플리케이션 전체를 종료하고, ROS 2와 관련된 모든 리소스를 정리
  • 목적:
    • ROS 2 시스템의 초기화를 취소하고, 내부적으로 사용되는 리소스를 해제
    • 이는 프로그램이 종료될 때 필수적으로 호출되어야 하는 함수
  • 사용 시점:
    • 모든 노드의 작업이 완료되고, 애플리케이션을 종료하기 직전에 호출
  • 응용:

  • _WaitSet은 ROS 2의 이벤트 대기 및 처리에 유용
  • ExitStack은 Python의 리소스 관리와 예외 처리에 특히 유용

from rclpy.executors import _WaitSet

  • ROS 2 노드의 다양한 엔티티(구독, 타이머, 서비스, 클라이언트 등)에 대한 이벤트를 대기하고 관리

_WaitSet의 주요 기능

  • 이벤트 관리:
    • _WaitSet은 ROS 2의 이벤트 대기 및 처리 메커니즘의 일부
    • 이 클래스를 사용하여 노드의 구독, 서비스, 클라이언트, 타이머 등이 특정 이벤트(메시지 도착, 서비스 요청, 타이머 만료 등)에 대해 준비 상태인지 확인할 수 있음
  • 비동기 처리
    • _WaitSet을 사용하면 노드가 여러 이벤트를 비동기적으로 처리할 수 있으며, 이를 통해 효율적인 이벤트 루프를 구성할 수 있음
  • 실행자(Executor)와의 상호작용
    • _WaitSet은 ROS 2의 실행자(Executor)에 의해 사용되어, 노드의 이벤트를 처리
    • 실행자는 _WaitSet을 사용하여 어떤 이벤트를 처리할 준비가 되었는지 판단하고, 해당 이벤트의 콜백 함수를 호출

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글