_rclpy ( rclpy의 내부 C 확장 모듈)

About_work·2023년 11월 16일
0

ros2

목록 보기
12/41

_rclpy.rclpy_wait_set_init

  • 이 함수는 WaitSet 객체를 초기화하는 데 사용
    • from rclpy.executors import _WaitSet : https://velog.io/@jk01019/rclpy
    • WaitSet은 ROS 2의 다양한 엔티티(구독, 타이머, 서비스, 클라이언트 등)의 이벤트를 대기하고 관리하는 데 사용됩니다.
  • 참고
    • ExitStack() = context_stack

예시

            with _WaitSet() as wait_set, ExitStack() as context_stack:
                """
                context_capsule
                - ROS 2 애플리케이션의 초기화 및 종료 과정에서 리소스 누수를 방지하고, 
                예외 발생 시 안전한 정리를 보장
                """
                context_capsule = context_stack.enter_context(
                    self._context.handle)
                _rclpy.rclpy_wait_set_init(
                    wait_set,
                    # 대기할 구독의 최대 수입니다. 
                    # 이 값은 WaitSet이 추적할 수 있는 구독 엔티티의 최대 개수를 결정합니다.
                    number_of_subscriptions=0, 
                    # 대기할 가드 조건의 최대 수입니다. 
                    # 가드 조건은 특정 조건이 충족될 때 실행되는 콜백을 나타냅니다.
                    number_of_guard_conditions= 0, 
                     # 대기할 타이머의 최대 수입니다. 
                     # 이 값은 WaitSet이 추적할 수 있는 타이머 엔티티의 최대 개수를 결정합니다.
                    number_of_timers= 0,
                    #  대기할 클라이언트의 최대 수입니다. 
                    # 클라이언트는 서비스 요청을 보내는 엔티티입니다.
                    number_of_clients= len(clients), 
                    #  대기할 서비스의 최대 수입니다. 
                    # 서비스는 클라이언트의 요청에 응답하는 엔티티입니다.
                    number_of_services=len(services),
                    # 대기할 이벤트의 최대 수입니다. 
                    # 이벤트는 다양한 ROS 2 엔티티의 상태 변화를 나타냅니다.
                    number_of_events=0, 
                    # # ROS 2 실행 컨텍스트입니다. 
                    # 이 컨텍스트는 WaitSet이 해당 컨텍스트 내에서 작동하도록 합니다.
                    context=context_capsule, 
                )

_rclpy.rclpy_wait_set_clear_entities(wait_set)

  • 이 함수는 WaitSet 객체 내의 모든 엔티티(구독, 타이머, 서비스, 클라이언트 등)를 제거하는 데 사용
  • WaitSet은 ROS 2에서 여러 엔티티의 이벤트를 대기하고 관리하는 데 사용되는 객체입니다.
  • _rclpy.rclpy_wait_set_clear_entities 함수는 하나의 매개변수를 받습니다:
  • wait_set: 이 매개변수는 엔티티를 제거할 WaitSet 객체입니다.
  • 이 함수를 호출하면, 지정된 WaitSet 객체 내의 모든 엔티티가 제거됩니다.
  • 이는 WaitSet을 재사용하기 전에 기존에 등록된 엔티티들을 정리할 때 유용합니다.

rclpy_wait_set_add_entity

  • 이 함수는 WaitSet 객체에 특정 엔티티(구독, 타이머, 서비스, 클라이언트 등)를 추가하는 데 사용
  • WaitSet은 ROS 2에서 여러 엔티티의 이벤트를 대기하고 관리하는 데 사용되는 객체
  • WaitSet은 이후 이 엔티티의 이벤트(예: 메시지 도착, 타이머 만료 등)를 대기

_rclpy.rclpy_wait_set_add_entity의 사용법

  • _rclpy.rclpy_wait_set_add_entity 함수는 다음 매개변수를 받습니다:
  • entity_type
    • 추가할 엔티티의 타입
    • 이 값은 문자열로, 'subscription', 'timer', 'client', 'service', 'guard_condition' 등
    • 각각 구독, 타이머, 클라이언트, 서비스, 가드 조건을 나타냅니다.
  • wait_set
    • 엔티티를 추가할 WaitSet 객체
  • entity
    • 추가할 엔티티입니다.
    • 엔티티는 해당 타입의 ROS 2 객체(예: 구독 객체, 타이머 객체 등)입니다.

_rclpy.rclpy_wait

  • 이 함수는 WaitSet 객체가 포함하는 엔티티(구독, 타이머, 서비스, 클라이언트 등) 중 하나 이상이 준비되기를 대기하는 데 사용
  • WaitSet은 이벤트 대기 및 관리를 위한 객체

_rclpy.rclpy_wait의 매개변수

  1. wait_set:
  • 이벤트를 대기할 WaitSet 객체입니다.
  • 이 객체는 앞서 _rclpy.rclpy_wait_set_init을 통해 초기화되고,
  • _rclpy.rclpy_wait_set_add_entity를 통해 엔티티가 추가된 상태여야 합니다.
  1. timeout:
  • 대기할 최대 시간(초 단위)입니다.
  • 특정 시간 동안 엔티티의 이벤트가 발생하지 않으면 함수는 타임아웃됩니다.
  • 타임아웃을 무제한으로 설정하려면 -1을 사용합니다.
  • 이 함수는 지정된 WaitSet 내의 엔티티들 중 하나 이상이 준비될 때까지 대기합니다.
  • "준비됨"의 의미는 엔티티의 타입에 따라 다를 수 있습니다.
    • 예를 들어, 구독의 경우 새로운 메시지가 도착했을 때,
    • 타이머의 경우 타이머가 만료되었을 때를 의미합니다.

_rclpy.rclpy_get_ready_entities

  • 이 함수는 WaitSet 객체를 사용하여 대기한 후, 준비된(이벤트가 발생한) 엔티티들을 확인하는 데 사용

매개변수

  1. entity_type: 확인하고자 하는 엔티티의 타입을 나타냅니다. 이 값은 문자열로, 'subscription', 'timer', 'client', 'service', 'guard_condition' 등이 될 수 있습니다. 각각 구독, 타이머, 클라이언트, 서비스, 가드 조건을 나타냅니다.
  2. wait_set: 이벤트를 대기한 WaitSet 객체입니다. 이 객체는 앞서 _rclpy.rclpy_wait 함수를 사용하여 대기 작업을 수행한 상태여야 합니다.

반환 값

  • 이 함수는 지정된 타입의 엔티티 중에서 준비된(이벤트가 발생한) 엔티티들의 목록을 반환
    • 예를 들어, 구독 엔티티들 중에서 새로운 메시지를 수신한 구독, 타이머 엔티티들 중에서 만료된 타이머 등을 확인할 수 있습니다.
  • handle.pointer 을 반환

_rclpy.rclpy_take_request`

  • 이 함수는 ROS 2의 서비스 서버에서, 클라이언트로부터 들어오는 서비스 요청을 수신하는 데 사용
  • _rclpy.rclpy_take_request 함수를 호출하면, 지정된 서비스 핸들을 통해 들어온 서비스 요청을 수신하고, 요청 메시지를 반환합니다.
  • 만약 요청이 수신되지 않았다면, 함수는 None을 반환할 수 있습니다.
  • handle & pointer: https://velog.io/@jk01019/handle과-Pointer

매개변수

  1. service_handle:
  • 서비스 요청을 수신할 서비스의 핸들
  • 이 핸들은 서비스 서버를 생성할 때 얻은 객체로부터 가져올 수 있습니다.
  1. request_type:
  • 서비스 요청의 타입입니다.
  • ROS 2에서 서비스는 요청 타입과 응답 타입을 가지며, 이 매개변수는 해당 서비스 요청의 타입을 나타냅니다.

_rclpy.rclpy_take_response

  • 이 함수는 ROS 2의 서비스 클라이언트가, 서비스 서버로부터 응답을 수신하는 데 사용

매개변수

  1. client_handle: 서비스 응답을 수신할 서비스 클라이언트의 핸들입니다. 이 핸들은 서비스 클라이언트를 생성할 때 얻은 객체로부터 가져올 수 있습니다.
  2. response_type: 서비스 응답의 타입입니다. ROS 2에서 서비스는 요청 타입과 응답 타입을 가지며, 이 매개변수는 해당 서비스 응답의 타입을 나타냅니다.

_rclpy.rclpy_service_info_get_sequence_number

  • 이 함수는 서비스 요청에 대한 응답을 수신할 때, 해당 응답과 연관된, 요청의 시퀀스 번호(sequence number)를 얻는 데 사용
  • 서비스 응답의 헤더 정보로부터 시퀀스 번호를 추출
  • 이 함수를 호출하면, 지정된 응답 헤더로부터 시퀀스 번호를 추출하여 반환
    • 시퀀스 번호는 요청이 서비스에 제출되었을 때 부여되는 고유한 식별자로, 클라이언트가 여러 요청을 구별하는 데 도움을 줌

매개변수

  1. response_header:
  • 서비스 응답의 헤더 정보
  • 이 헤더는 _rclpy.rclpy_take_response 함수를 통해 수신된 서비스 응답과 함께 제공
  • 헤더에는 응답과 관련된 메타데이터가 포함되어 있으며, 이 중 하나가 시퀀스 번호

_rclpy.rclpy_take

  • 이 함수는 ROS 2의 구독(subscription) 객체로부터 메시지를 수신하는 데 사용
  • 구독 객체는 특정 토픽에 대한 메시지를 수신하도록 설정된 ROS 2 엔티티입니다.
  • _rclpy.rclpy_take 함수를 호출하면, 지정된 구독 핸들을 통해 들어온 메시지를 수신하고, 해당 메시지를 반환합니다. 만약 메시지가 수신되지 않았다면, 함수는 None을 반환할 수 있습니다.

매개변수

  1. subscription_handle: 메시지를 수신할 구독의 핸들입니다. 이 핸들은 구독을 생성할 때 얻은 객체로부터 가져올 수 있습니다.
  2. message_type: 수신할 메시지의 타입입니다. ROS 2에서는 다양한 메시지 타입이 정의되어 있으며, 이 매개변수는 해당 구독이 처리하는 메시지 타입을 나타냅니다.
  3. raw: 이 매개변수는 메시지를 '원시(raw)' 형태로 수신할지 여부를 결정합니다. 일반적으로 Python 객체로 메시지를 받기 위해 False로 설정됩니다.

_rclpy.rclpy_is_timer_ready

  • 이 함수는 ROS 2의 타이머 객체가 실행 준비가 되었는지 확인하는 데 사용
  • 타이머 핸들을 이 함수에 전달하면, 함수는 타이머가 실행될 준비가 되었는지 여부를 반환
  • 타이머가 준비되었다는 것은 타이머의 설정된 시간 간격이 지났음을 의미하며, 이 경우 타이머의 콜백 함수를 실행할 수 있음

매개변수

  1. timer_handle: 확인할 타이머의 핸들입니다. 이 핸들은 타이머를 생성할 때 얻은 객체로부터 가져올 수 있음

_rclpy.rclpy_call_timer

  • 이 함수는 ROS 2의 타이머 객체에 연결된 콜백 함수를 실행하는 데 사용

매개변수

  • timer_handle
    • 콜백을 실행할 타이머의 핸들
    • 이 핸들은 타이머를 생성할 때 얻은 객체로부터 가져올 수 있음
  • 이 함수를 호출하면, 지정된 타이머 핸들에 연결된 콜백 함수가 실행
  • 이 과정은 타이머가 설정된 시간 간격마다 반복적으로 특정 작업을 수행하도록 하기 위해 사용됨.

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

0개의 댓글