토큰 송수신 프로그램 추가

기존 my_python_package 패키지에 토큰 메시지 송수신 기능을 추가 합니다. 디렉토리 내의 파일 구성은 아래의 디렉토리 리스트를 참조합니다.


📂 디렉터리 구조 변경 (추가된 파일 포함)

my_python_package/
├── __init__.py
├── my_python_package_node.py  # 기존 노드
├── token_pub.py  # 추가: 토큰 송신 노드
├── token_sub.py  # 추가: 토큰 수신 노드
package.xml
setup.py  # 수정 필요
setup.cfg
resource/
└── my_python_package

1. 토큰 송신 노드 (token_pub.py 추가)

이 노드는 **1초마다 "Token N" 메시지를 발행**하는 역할을 합니다.

import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class TokenPublisher(Node):
    def __init__(self):
        super().__init__('token_publisher')
        self.publisher_ = self.create_publisher(String, 'token_topic', 10)
        self.timer = self.create_timer(1.0, self.publish_token)
        self.token_count = 1

    def publish_token(self):
        msg = String()
        msg.data = f"Token {self.token_count}"
        self.publisher_.publish(msg)
        self.get_logger().info(f"Published: {msg.data}")
        self.token_count += 1

def main(args=None):
    rclpy.init(args=args)
    node = TokenPublisher()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

2. 토큰 수신 노드 (token_sub.py 추가)

이 노드는 **발행된 토큰 메시지를 구독하고 출력**합니다.

import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class TokenSubscriber(Node):
    def __init__(self):
        super().__init__('token_subscriber')
        self.subscription = self.create_subscription(
            String,
            'token_topic',
            self.token_callback,
            10)
        self.subscription

    def token_callback(self, msg):
        self.get_logger().info(f"Received: {msg.data}")

def main(args=None):
    rclpy.init(args=args)
    node = TokenSubscriber()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

3. setup.py 수정 (토큰 노드 추가)

1) 기존 setup.py에서 entry_points 부분을 수정합니다.

setup.py 수정 내용:

from setuptools import setup

package_name = 'my_python_package'

setup(
    name=package_name,
    version='0.0.0',
    packages=[package_name],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='your_name',
    maintainer_email='your_email@example.com',
    description='My first ROS 2 Python package',
    license='Apache License 2.0',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
            'my_node = my_python_package.my_python_package_node:main',
            'token_pub = my_python_package.token_pub:main',  # 추가
            'token_sub = my_python_package.token_sub:main',  # 추가
        ],
    },
)


4. 빌드 및 실행

1) 패키지 빌드

cd ~/ros2_ws
colcon build
source install/setup.bash

2) 송신 노드 실행

ros2 run my_python_package token_pub
출력 예시:
[INFO] [token_publisher]: Published: Token 1
[INFO] [token_publisher]: Published: Token 2

3) 수신 노드 실행

ros2 run my_python_package token_sub
출력 예시:
[INFO] [token_subscriber]: Received: Token 1
[INFO] [token_subscriber]: Received: Token 2


5. 요약

  1. 토큰 송신 노드(token_pub.py) 추가
  2. 토큰 수신 노드(token_sub.py) 추가
  3. setup.py에 실행 항목 추가
  4. 빌드 후 실행하여 송수신 확인

이제 기존 my_python_package 패키지에 토큰 메시지 송수신 기능이 추가되었습니다! 🚀