rclpy.init, Node, shutdown

노드 하나를 만드는 데 코드는 몇 줄이면 될까?

화면을 누르면 다음 장으로 넘어갑니다

rclpy

파이썬에서 ROS로 가는 창구

파이썬으로 노드를 짤 때 쓰는 라이브러리가 rclpy(ROS Client Library for Python)입니다. 노드 만들기, 토픽 보내고 받기, 로그 남기기를 모두 rclpy로 합니다.

C++용 창구는 rclcpp입니다. 둘 다 같은 rcl 위에 서 있습니다(9편). RMW는 1강 5편에서 봤습니다.

세 단계

켜고, 만들고, 끕니다

모든 rclpy 프로그램은 같은 순서를 지킵니다. 먼저 rclpy.init()으로 통신을 준비하고, Node로 노드를 만들어 일을 시킨 뒤, rclpy.shutdown()으로 정리합니다.

전체 코드

여덟 줄이면 노드 하나

Node('hello')의 'hello'가 노드 이름입니다. get_logger().info()는 터미널에 로그 한 줄을 남깁니다. 끝나기 전에 destroy_node()로 노드를 지우고 shutdown()으로 마칩니다.

로그는 7편에서 자세히 봅니다.

따라 하기

패키지에 넣고 실행합니다

5강에서 만든 my_package 안의 파이썬 폴더(my_package/my_package/)에 hello.py를 넣고, setup.py의 entry_points에 'hello = my_package.hello:main'을 더합니다(5강 5편). 그다음 ~/ros2_ws에서 빌드하고, 새 터미널에서 source 한 뒤 실행합니다(5강 7편).

앞으로 새 노드는 모두 이 패키지에 파일과 entry_points 한 줄을 더해 만듭니다. 실제 출력에는 [INFO] 뒤에 시각이 붙는데, 화면에서는 줄였습니다.

노드 이름

이름은 영문, 숫자, 밑줄로

노드 이름은 ROS 그래프에서 노드를 가리키는 이름입니다. Node('hello')로 만든 노드는 ros2 node list에 /hello로 보입니다. 영문, 숫자, 밑줄만 쓰고 숫자로 시작하지 않습니다.

금방 끝난다

말 한마디 하고 바로 사라집니다

이 노드는 로그 한 줄을 찍고 곧바로 끝납니다. 그래서 다른 터미널에서 ros2 node list를 쳐도 거의 보이지 않습니다. 메시지를 기다리거나 일정하게 일하려면 노드가 계속 살아 있어야 합니다.

노드를 붙잡아 두는 rclpy.spin()은 3편에서 봅니다.

다음 편

공식 예제는 왜 노드를 클래스로 만들까요?

2편클래스로 만드는 이유 6강 목록