_rclpy.rclpy_wait_set_init
- 이 함수는 WaitSet 객체를 초기화하는 데 사용
 
- 참고
- 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,
                    
                    
                    number_of_subscriptions=0, 
                    
                    
                    number_of_guard_conditions= 0, 
                     
                     
                    number_of_timers= 0,
                    
                    
                    number_of_clients= len(clients), 
                    
                    
                    number_of_services=len(services),
                    
                    
                    number_of_events=0, 
                    
                    
                    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 
entity
- 추가할 엔티티입니다. 
 
- 엔티티는 해당 타입의 ROS 2 객체(예: 구독 객체, 타이머 객체 등)입니다.
 
 
_rclpy.rclpy_wait
- 이 함수는 
WaitSet 객체가 포함하는 엔티티(구독, 타이머, 서비스, 클라이언트 등) 중 하나 이상이 준비되기를 대기하는 데 사용 
WaitSet은 이벤트 대기 및 관리를 위한 객체 
_rclpy.rclpy_wait의 매개변수
- wait_set: 
 
- 이벤트를 대기할 
WaitSet 객체입니다.  
- 이 객체는 앞서 
_rclpy.rclpy_wait_set_init을 통해 초기화되고, 
_rclpy.rclpy_wait_set_add_entity를 통해 엔티티가 추가된 상태여야 합니다. 
- timeout: 
 
- 대기할 최대 시간(초 단위)입니다. 
 
- 특정 시간 동안 엔티티의 이벤트가 발생하지 않으면 함수는 타임아웃됩니다. 
 
- 타임아웃을 무제한으로 설정하려면 
-1을 사용합니다. 
- 이 함수는 지정된 
WaitSet 내의 엔티티들 중 하나 이상이 준비될 때까지 대기합니다.  
- "준비됨"의 의미는 엔티티의 타입에 따라 다를 수 있습니다. 
- 예를 들어, 구독의 경우 새로운 메시지가 도착했을 때, 
 
- 타이머의 경우 타이머가 만료되었을 때를 의미합니다.
 
 
_rclpy.rclpy_get_ready_entities
- 이 함수는 
WaitSet 객체를 사용하여 대기한 후, 준비된(이벤트가 발생한) 엔티티들을 확인하는 데 사용 
매개변수
- entity_type: 확인하고자 하는 엔티티의 타입을 나타냅니다. 이 값은 문자열로, 'subscription', 'timer', 'client', 'service', 'guard_condition' 등이 될 수 있습니다. 각각 구독, 타이머, 클라이언트, 서비스, 가드 조건을 나타냅니다.
 
- 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
 
매개변수
- service_handle: 
 
- 서비스 요청을 수신할 서비스의 핸들
 
- 이 핸들은 서비스 서버를 생성할 때 얻은 객체로부터 가져올 수 있습니다.
 
- request_type: 
 
- 서비스 요청의 타입입니다. 
 
- ROS 2에서 서비스는 요청 타입과 응답 타입을 가지며, 이 매개변수는 해당 서비스 요청의 타입을 나타냅니다.
 
_rclpy.rclpy_take_response
- 이 함수는 ROS 2의 서비스 클라이언트가, 서비스 서버로부터 응답을 수신하는 데 사용
 
매개변수
- client_handle: 서비스 응답을 수신할 서비스 클라이언트의 핸들입니다. 이 핸들은 서비스 클라이언트를 생성할 때 얻은 객체로부터 가져올 수 있습니다.
 
- response_type: 서비스 응답의 타입입니다. ROS 2에서 서비스는 요청 타입과 응답 타입을 가지며, 이 매개변수는 해당 서비스 응답의 타입을 나타냅니다.
 
_rclpy.rclpy_service_info_get_sequence_number
- 이 함수는 서비스 요청에 대한 응답을 수신할 때, 
해당 응답과 연관된, 요청의 시퀀스 번호(sequence number)를 얻는 데 사용 
서비스 응답의 헤더 정보로부터 시퀀스 번호를 추출 
- 이 함수를 호출하면, 지정된 응답 헤더로부터 시퀀스 번호를 추출하여 반환
시퀀스 번호는 요청이 서비스에 제출되었을 때 부여되는 고유한 식별자로, 클라이언트가 여러 요청을 구별하는 데 도움을 줌 
 
매개변수
- response_header: 
 
- 서비스 응답의 헤더 정보
 
- 이 헤더는 
_rclpy.rclpy_take_response 함수를 통해 수신된 서비스 응답과 함께 제공 
- 헤더에는 응답과 관련된 메타데이터가 포함되어 있으며, 이 중 하나가 시퀀스 번호
 
_rclpy.rclpy_take
- 이 함수는 ROS 2의 구독(subscription) 객체로부터 메시지를 수신하는 데 사용
 
- 구독 객체는 특정 토픽에 대한 메시지를 수신하도록 설정된 ROS 2 엔티티입니다.
 
_rclpy.rclpy_take 함수를 호출하면, 지정된 구독 핸들을 통해 들어온 메시지를 수신하고, 해당 메시지를 반환합니다. 만약 메시지가 수신되지 않았다면, 함수는 None을 반환할 수 있습니다. 
매개변수
- subscription_handle: 메시지를 수신할 구독의 핸들입니다. 이 핸들은 구독을 생성할 때 얻은 객체로부터 가져올 수 있습니다.
 
- message_type: 수신할 메시지의 타입입니다. ROS 2에서는 다양한 메시지 타입이 정의되어 있으며, 이 매개변수는 해당 구독이 처리하는 메시지 타입을 나타냅니다.
 
- raw: 이 매개변수는 메시지를 '원시(raw)' 형태로 수신할지 여부를 결정합니다. 일반적으로 Python 객체로 메시지를 받기 위해 
False로 설정됩니다. 
_rclpy.rclpy_is_timer_ready
- 이 함수는 ROS 2의 타이머 객체가 실행 준비가 되었는지 확인하는 데 사용
 
- 타이머 핸들을 이 함수에 전달하면, 함수는 타이머가 실행될 준비가 되었는지 여부를 반환
 
- 타이머가 준비되었다는 것은 타이머의 설정된 시간 간격이 지났음을 의미하며, 이 경우 타이머의 콜백 함수를 실행할 수 있음
 
매개변수
- timer_handle: 확인할 타이머의 핸들입니다. 이 핸들은 타이머를 생성할 때 얻은 객체로부터 가져올 수 있음
 
_rclpy.rclpy_call_timer
- 이 함수는 ROS 2의 타이머 객체에 연결된 콜백 함수를 실행하는 데 사용
 
매개변수
- timer_handle 
- 콜백을 실행할 타이머의 핸들
 
- 이 핸들은 타이머를 생성할 때 얻은 객체로부터 가져올 수 있음
 
 
- 이 함수를 호출하면, 지정된 타이머 핸들에 연결된 콜백 함수가 실행
 
- 이 과정은 타이머가 설정된 시간 간격마다 반복적으로 특정 작업을 수행하도록 하기 위해 사용됨.