Notice
Recent Posts
Recent Comments
Link
반응형
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

인공지능 요모조모

[ROS2] 기초 개념(2) 본문

ROKEY/ROS2

[ROS2] 기초 개념(2)

dvl.hyeon_ 2025. 4. 23. 19:48
반응형

4️⃣rclpy (ROS Client Library for Python)

rcl: ROS2 노드를 만들고 통신할 수 있도록 돕는 핵심 요소

▪️C++로 작성된 ROS2 코어 라이브러리(rcl)를 Python 환경에서 활용할 수 있도록 래핑(wrapping)한 것이 특징
▪️사용자들은 Python의 간결한 문법과 다양한 라이브러리를 ROS2 기반 시스템에 쉽게 통합 가능

 

👉🏻rclpy == Python에서 ROS2를 사용할 수 있도록 제공하는 라이브러리


✔️ 구성요소
▪️Node

▫️ROS2 시스템의 기본 실행 단위

▫️노드는 각각 고유의 이름을 가지며, pub/sub, service/client 등을 통한 통신을 담당

▪️Publisher, Subscriber

▫️ publisher는 데이터 토픽을 전송하고, subscriber는 이를 수신

▫️rclpy에서는 API로 pub/sub를 설정

▪️Service, Client

▫️service는 요청-응답 방식의 통신 처리, client는 특정 요청을 보내고 응답 대기

▪️Action

▫️긴 시간 동안 실행되는 작업을 요청하고, 그 결과를 받을 수 있는 기능

▫️주로 Motion Planning과 같은 작업에 사용

▪️Parameter Server

▫️ROS2 시스템에서 global / local parameter를 설정하고 가져올 수 있는 시스템


✔️주요 명령어

rclpy.init()

  • ROS2 프로그램 실행 시 가장 먼저 호출 필요
  • 역할
    • 노드 초기화 과정 수행(초기 설정 및 통신 준비)
    • 통신 인프라 설정(DDS 미들웨어와의 통신 인프라 구성)
    • ROS 매개변수 및 환경 설정
    • 로깅 시스템 초기화
    • 글로벌 리소스 초기화
    • 명령줄 인자 처리

rclpy.spin_once(node)

  • 주어진 노드에 대해 한 번의 이벤트 처리 수행
  • 노드의 대기 중인 콜백을 확인하고 실행
  • 노드의 메시지 구독, 서비스 요청, 타이머 이벤트 등을 처리하는데 사용

rclpy.spin(node)

  • 주어진 노드에 대해 이벤트 처리 수행(무한루프)
  • 노드를 독립적으로 계속 돌릴 때 사용
  • 노드의 메시지 구독, 서비스 요청, 타이머 이벤트 등을 처리하는데 사용
  rclpy.spin  rclpy.spin_once
동작 방식 무한 루프 (이벤트를 계속 처리함) 한 번만 이벤트 큐를 확인하고 리턴함
차단 여부 차단(blocking) → 함수가 종료되지 않음 비차단(non-blocking) 가능
사용 목적 일반적인 노드 실행 (listener, server 등) 주기적 루프나 사용자 정의 루프에서 사용
적절한 상황 노드를 독립적으로 계속 돌릴 때 다른 코드와 병행하여 실행할 때 (예: 시뮬루프 안)

5️⃣Multi Thread

▪️ 하나의 노드에서 여러 콜백(토픽/서비스 등)을 동시에 병렬 처리할 수 있도록 지원
     ▫️ex) 서비스와 퍼블리셔가 동일한 노드 내에서 동시에 작동하는 경우, MultiThreadedExecutor를 사용 가능

▪️비동기 서비스 호출(asyncio와 통합)

 

✔️노드 이름 관리

  • 노드 이름은 고유해야 하므로, 노드를 생성할 때는 시스템 내 다른 노드들과 충돌하지 않도록 이름을 신중히 결정

✔️타이머 주기 관리

  • 콜백 주기는 너무 짧게 설정하지 않도록 주의
  • 지나치게 빠른 주기는 CPU 부하의 과도한 증가의 원인

✔️에러 핸들링

  • ROS2 환경은 네트워크 및 하드웨어 상태에 따라 불안정할 수 있으므로, 예외 상황에 대한 철저한 에러 핸들링 필수

✔️최적화 팁

  • 토픽 QoS 설정
    • 네트워크 환경이나 메시지의 중요도에 따라 QoS 설정을 맞춰야 함
    • ex) 메시지 유실이 치명적이지 않은 센서 데이터의 경우 Best Effort 방식(전달 속도 중시 방식)을 사용할 수 있음
  • 파라미터 최적화
    • 파라미터 서버를 활용해, 노드의 설정 값을 유연하게 바꾸면서 성능 튜닝 가능

6️⃣ 노드 생성

ex) Publisher Code 분석

 

▪️라이브러리 임포트

  • rclpy : ROS2의 python 클라이언트 라이브러리
  • Node : ROS2 노드를 정의하기 위한 기본 클래스
  • String : std_msgs 패키지에서 제공하는 문자열 메시지 타입

▪️MinimalPublisher 클래스 정의

  • Node 클래스 상속

▪️__init__()

  • super.__init__("node_name")  # 노드 이름 초기화
  • ROS interface Publisher 생성
생성 요소 의미 노드 역할에 주는 영향
create_publisher 토픽 발행 Publisher 역할
create_subscription 토픽 수신 Subscriber 역할
create_service 서비스 서버 생성 Service Server 역할
create_client 서비스 요청 Service Client 역할
create_action_server 액션 서버 생성 Action Server 역할
create_action_client 액션 요청 Action Client 역할
  • self.timer = self.create_timer(timer_period, self.timer_peiod)
  • # timer_period = 발행 주기 정의(주로 0.5 사용)

▪️timer_callback 함수

  • 타이머에 의해 주기적으로 호출
  • 특정 형식의 메시지를 생성 및 발행(* publisher의 경우)

▪️main 함수

  • ROS2 초기화
  • 노드 인스턴스 생성 및 rclpy.spin() 또는 spin_once()로 노드 실행
  • 노드와 ROS2 종료
반응형

'ROKEY > ROS2' 카테고리의 다른 글

[ROS2] ROS2 CLI  (0) 2025.05.02
[ROS2] ROS2 Security  (0) 2025.05.02
[ROS2] ROS2 Lifecycle  (0) 2025.05.01
[ROS2] 기초 개념 (1)  (0) 2025.04.23
[ROS2] BAG  (0) 2025.04.22