from rclpy.executors import _WaitSet
: https://velog.io/@jk01019/rclpy 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,
)