1.话题订阅与发布 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import rclpyfrom rclpy.node import Nodeimport requestsfrom example_interfaces.msg import Stringfrom queue import Queueclass NovelPubNode (Node ): def __init__ (self,node_name ): super ().__init__(node_name) self .get_logger().info(f'{node_name} ,启动!!!!' ) self .novels_queue=Queue() self .novel_publisher_ = self .create_publisher(String,'novel' ,10 ) self .timer_ = self .create_timer(5 ,self .timer_callback) def timer_callback (self ): if self .novels_queue.qsize()>0 : line=self .novels_queue.get() msg=String() msg.data=line self .novel_publisher_.publish(msg) self .get_logger().info(f'发布了:{msg} ' ) def download (self,url ): response = requests.get(url) response.encoding = 'utf-8' text = response.text self .get_logger().info(f'下载{url} ,{len (text)} ' ) for line in response.text.splitlines(): self .novels_queue.put(line) def main (): rclpy.init() node = NovelPubNode('novel_pub' ) node.download('http://0.0.0.0:8000/novel1.txt' ) rclpy.spin(node) rclpy.shutdown()
ps:
1.执行ros2 run demo_python_topic novel_pub_node时要同时在另一个终端打开服务器python3 -m http.s erver(这里没注意到当时拖了好几周才解决)
2.ros2 topic echo /novel早于ros2 run demo_python_topic novel_pub_node才能接受到完整的内容
先启动订阅者,再启动发布者(服啦 每次都先启动完发布者,再开订阅者,我说怎么有时候可以收到最后两行。。。)