pubsub_v2
This commit is contained in:
parent
c98972e4a9
commit
f46d63d27b
107
src/pubsub/pubsub/pubsub_library_v2.py
Normal file
107
src/pubsub/pubsub/pubsub_library_v2.py
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
#********************************************#
|
||||||
|
# Publisher/Subscriber Class Library
|
||||||
|
|
||||||
|
# Creted for:
|
||||||
|
# ROS2 Workshop 2020
|
||||||
|
# Roverentwicklung für Explorationsaufgaben
|
||||||
|
# Institute for Space Systems
|
||||||
|
# University of Stuttgart
|
||||||
|
|
||||||
|
# Created by Patrick Winterhalder
|
||||||
|
# IRS, University of Stuttgart
|
||||||
|
#********************************************#
|
||||||
|
|
||||||
|
import rclpy
|
||||||
|
from rclpy.node import Node
|
||||||
|
|
||||||
|
# How to use:
|
||||||
|
# from pubsub_library import MinimalPublisher
|
||||||
|
# from pubsub_library import MinimalSubscriber
|
||||||
|
# minimal_publisher = MinimalPublisher(NODE_NAME='minimal_pub', TOPIC_NAME='user_controller', MSG_TYPE=Usercontroller, MSG_PERIOD=0.5)
|
||||||
|
# minimal_subscriber = MinimalSubscriber(NODE_NAME='minimal_sub', TOPIC_NAME='epos_feedback', MSG_TYPE=Eposreturn)
|
||||||
|
# See --> talker.py, listener.py
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Definition of Parent Classes
|
||||||
|
#******************************************************************************#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MinimalPublisher(Node):
|
||||||
|
|
||||||
|
def __init__(self, NODE_NAME, TOPIC_NAME, MSG_TYPE, MSG_PERIOD):
|
||||||
|
self.NODE_NAME= NODE_NAME
|
||||||
|
self.TOPIC_NAME = TOPIC_NAME
|
||||||
|
self.CUSTOM_MSG = MSG_TYPE
|
||||||
|
self.timer_period = MSG_PERIOD # [seconds]
|
||||||
|
# Init above laying class Node
|
||||||
|
super().__init__(self.NODE_NAME)
|
||||||
|
print("\t- " + str(TOPIC_NAME) + "\n")
|
||||||
|
self.publisher_ = self.create_publisher(
|
||||||
|
self.CUSTOM_MSG,
|
||||||
|
self.TOPIC_NAME,
|
||||||
|
10)
|
||||||
|
self.new_msg = False
|
||||||
|
# Define Node Frequency, equivalent to ~rospy.rate()
|
||||||
|
self.timer = self.create_timer(self.timer_period, self.publisher_timer)
|
||||||
|
return
|
||||||
|
|
||||||
|
def publisher_timer(self):
|
||||||
|
if self.new_msg is True:
|
||||||
|
try:
|
||||||
|
#self.get_logger().info('Pub:')
|
||||||
|
self.publisher_.publish(self.msg)
|
||||||
|
self.new_msg = False
|
||||||
|
except TypeError:
|
||||||
|
print("[ERROR] Msg-Data-Types do not match")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Publish using Timer
|
||||||
|
def timer_publish(self, msg):
|
||||||
|
self.msg=msg
|
||||||
|
self.new_msg = True
|
||||||
|
return
|
||||||
|
|
||||||
|
# Publish directly without Timer
|
||||||
|
def direct_publish(self, msg):
|
||||||
|
try:
|
||||||
|
#self.get_logger().info('Pub:')
|
||||||
|
self.publisher_.publish(msg)
|
||||||
|
except TypeError:
|
||||||
|
print("[ERROR] Msg-Data-Types do not match")
|
||||||
|
return
|
||||||
|
|
||||||
|
#******************************************************************************#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MinimalSubscriber(Node):
|
||||||
|
|
||||||
|
def __init__(self, NODE_NAME, TOPIC_NAME, MSG_TYPE, NUM_MSGS):
|
||||||
|
self.NODE_NAME= NODE_NAME
|
||||||
|
self.TOPIC_NAME = TOPIC_NAME
|
||||||
|
self.CUSTOM_MSG = MSG_TYPE
|
||||||
|
self.NUM_MSGS = NUM_MSGS
|
||||||
|
self.topic_received = False
|
||||||
|
# Init above laying class Node
|
||||||
|
super().__init__(self.NODE_NAME)
|
||||||
|
self.subscription = self.create_subscription(
|
||||||
|
self.CUSTOM_MSG, # Message Type
|
||||||
|
self.TOPIC_NAME, # Topic Name
|
||||||
|
self.listener_callback, # Callback Function
|
||||||
|
self.NUM_MSGS) # List of saved messages
|
||||||
|
self.subscription # prevent unused variable warning
|
||||||
|
return
|
||||||
|
|
||||||
|
def listener_callback(self, msg):
|
||||||
|
#self.get_logger().info('I heard: "%s"' % msg.data)
|
||||||
|
self.msg = msg
|
||||||
|
return
|
||||||
|
|
||||||
|
def return_msg(self):
|
||||||
|
return self.msg
|
Loading…
Reference in New Issue
Block a user