[ROS2] EP15. 멀티 쓰레드 사용해보기

김희상·2024년 9월 3일

ROS2

목록 보기
15/17
post-thumbnail

  • OS : Ubuntu 22.04
  • ROS 2 Humble
  • Gazebo 11

action callback이 돌면 subscriber의 callback이 돌지 않는다.

  • 해결 방법으로 멀티쓰레드 사용!!

1. 멀티쓰레드

1. 코드 추가

import rclpy as rp
from rclpy.executors import MultiThreadedExecutor
from rclpy.node import Node

from my_first_package.my_publisher import TurtlesimPublisher
from my_first_package.my_subscriber import TurtlesimSubscriber

def main(args=None):
    rp.init(args=args)

    pub = TurtlesimPublisher()
    sub = TurtlesimSubscriber()

    executor = MultiThreadedExecutor()

    executor.add_node(pub)
    executor.add_node(sub)

    try:
        executor.spin()

    finally:
        executor.shutdown()
        pub.destroy_node()
        sub.destroy_node()
        rp.shutdown()

if __name__ == '__main__':
    main()
  • my_first_thread,py 생성
  • MultiThreadedExecuter를 rclpy에서 가져오기
  • TurtlesimPublisher는 cmd-vel 토픽 발행 → 거북이 회전
  • TurtlesimSubscriber는 pose 토픽 구독 → print
  • 위의 두 클래스를 my_first_package에서 인풋
  • MultiThreadExcutor에 sub과 pub을 add_node 시켜주기
  • executor.spin() 실행

2. setup.py

'my_multi_thread = my_first_package.my_multi_thread:main',
  • entry_points 작업

3. 실행

4. rqt_graph

  • TurtlesimPublisher와 TurtlesimSubscriber 노드는 MultiThreadedExecuter로 실행
  • TurtlesimPublisher가 cmd_vel 토픽 쏘고, turtlesim이 pose토픽 쏘고, pose는 subscriber가 구독할 수 있도록 프린트
profile
3D 모델러의 개발 도전기

0개의 댓글