# 4.2.3 话题通信小练习之李三白嫖 你好,我是小鱼。恭喜你完成了ROS2中非常重要的话题通信部分的学习,本节我们将一起做一个小练习,巩固一下我们的学习成果。 ## 1.小练习背景 话说李四有个兄弟叫李三,他是李四的哥哥,一个典型的白嫖党。他看李四写的艳娘传奇非常的有意思,自己也想拿来品鉴一下。但他又不想给李四钱。 所以我们的任务就是,在李家村里创建白嫖党李三这个节点,然后为其订阅sexy_girl话题数据。 ## 2.小练习思路 你可以将其分为下面几步: 1. 新建li3.py这个文件,在里面创建一个BaiPiaoNode类并定义一个main()函数 2. 编写BaiPiaoNode类,为其订阅话题和编写回调函数 3. 在setup.py中配置li3节点,如果记不得如何配置可以看看3.5章节 4. 编译运行李三节点,并启动李四和王二节点 5. 观察运行结果,用rqt_graph查看计算图 ## 3.小练习答案(写完再参考哦) ### 3.1代码 ``` #!/usr/bin/env python3 import rclpy from rclpy.node import Node from std_msgs.msg import String class BaiPiaoNode(Node): """ 创建一个李三节点,并在初始化时输出一个话 """ def __init__(self,name): super().__init__(name) self.get_logger().info("大家好,我是李三,李四他哥,我可以白嫖李四的小说!") self.sub_ = self.create_subscription(String,"sexy_girl",self.recv_callback,10) def recv_callback(self,novel): self.get_logger().info('李三:我已经收到了:%s' % novel.data) def main(args=None): """ ros2运行该节点的入口函数,可配置函数名称 """ rclpy.init(args=args) # 初始化rclpy node = BaiPiaoNode("li3") # 新建一个节点 rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C) rclpy.shutdown() # rcl关闭 ``` ### 3.2setup.py配置 ``` entry_points={ 'console_scripts': [ "li4_node = village_li.li4:main", "li3_node = village_li.li3:main" ], } ``` ### 3.3 计算图 ![image-20210804163450722](4.4话题小练习-李三白嫖/imgs/image-20210804163450722.png) 从图中可以看到,li3并没有给li4钱。