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