Describe openhab_bridge/Tutorials/WritingAndExaminingASimplePublisherForTheImageItemTypePython here.
import os import rospy from openhab_msgs.msg import ImageCommand import argparse from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError import numpy as np # OpenCV import cv2 VERBOSE = False class ImagePublisher(object): """Node example class.""" def __init__(self, item_name, image_path): self.image_path = image_path self.item_name = item_name self.pub = rospy.Publisher("/openhab/items/" + self.item_name + "/command", ImageCommand, queue_size=10) self.rate = rospy.Rate(10) # 10hz # Initialize message variables. self.enable = False self.message = None self.bridge = CvBridge() self.image = None if self.enable: self.start() else: self.stop() def start(self): """Turn on publisher.""" self.enable = True self.pub = rospy.Publisher("/openhab/items/" + self.item_name + "/command", ImageCommand, queue_size=10) while not rospy.is_shutdown(): self.message = ImageCommand() if os.path.isfile(self.image_path): self.message.isnull = False img = cv2.imread(self.image_path) else: self.message.isnull = True self.image_path = "NULL" img = np.zeros((100,100,3), dtype=np.uint8) # finally convert RGB image to BGR for opencv img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) try: self.image = self.bridge.cv2_to_imgmsg(img, 'bgr8') except CvBridgeError as e: print(e) self.message.command = self.image self.message.header.stamp = rospy.Time.now() self.message.header.frame_id = "/base_link" self.message.item = self.item_name message = "Publishing %s to %s at %s" % (self.image_path, self.message.item, rospy.get_time()) rospy.loginfo(message) self.pub.publish(self.message) self.rate.sleep() def stop(self): """Turn off publisher.""" self.enable = False self.pub.unregister() # Main function. if __name__ == "__main__": # Initialize the node and name it. rospy.init_node("ImagePublisherNode", anonymous=True) # Go to class functions that do all the heavy lifting. parser = argparse.ArgumentParser() parser.add_argument("--image", type=str, required=False, help="Path to image file you want to publish to openHAB. If not given an Image.jpg in your current path is expected. If there is no Image NULL will be published.") args = parser.parse_args() image_path = str(args.image) if image_path is None: image_path = "Image.jpg" imagePublisher = ImagePublisher("testImage", image_path) try: imagePublisher.start() except rospy.ROSInterruptException: pass # Allow ROS to go to all callbacks. # spin() simply keeps python from exiting until this node is stopped rospy.spin()