해당 실습 자료는 한양대학교 Road Balance - ROS 2 for G Camp와 ROS 2 Documentation: Foxy, 표윤석, 임태훈 <ROS 2로 시작하는 로봇 프로그래밍> 루피페이퍼(2022) 를 참고하여 작성하였습니다.
이번 장에서는
Publisher Node
와Subscriber Node
간의 메세지 통신Topic
을 구현해볼 예정입니다. 해당 예제에서는 ROS 프로그래밍: Package - Python 에서 제작한 Package를 활용하여 아주 간단한 예제인 ROS2 판 ‘Hello World’를 제작해볼 예정입니다.
~/ros2_ws/src/topci_helloworld/topci_helloworld/
폴더에 helloworld_publisher.py
라는 이름으로 소스 코드 파일을 저장하시면 됩니다.$ sudo apt-get install gedit
$ gedit helloworld_publisher.py
import rclpy
from rclpy.node import Node
from rclpy.qos import QoSProfile
from std_msgs.msg import String
class HelloworldPublisher(Node):
def __init__(self):
super().__init__('helloworld_publisher')
qos_profile = QoSProfile(depth=10)
self.helloworld_publisher = self.create_publisher(String, 'helloworld', qos_profile)
self.timer = self.create_timer(1, self.publish_helloworld_msg)
self.count = 0
def publish_helloworld_msg(self):
msg = String()
msg.data = 'Hello World: {0}'.format(self.count)
self.helloworld_publisher.publish(msg)
self.get_logger().info('Published message: {0}'.format(msg.data))
self.count += 1
def main(args=None):
rclpy.init(args=args)
node = HelloworldPublisher()
try:
rclpy.spin(node)
except KeyboardInterrupt:
node.get_logger().info('Keyboard Interrupt (SIGINT)')
finally:
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
코드 내용에 대해서는 하나씩 알아보도록 하겠습니다.
Python ROS2 프로그래밍을 위한 rclpy
rclpy
의 Node
클래스
퍼블리셔의 QoS 설정을 위한 QoSProfile
클래스
ROS 표준 메시지 타입 std_msgs.msg
모듈의 String
클래스
import rclpy
from rclpy.node import Node
from rclpy.qos import QoSProfile
from std_msgs.msg import String