sangxin 3 роки тому
батько
коміт
c1d9facf7e

+ 5 - 0
docs/chapt4/4.3ROS2话题通信(C++).md

@@ -119,6 +119,11 @@ int main(int argc, char **argv)
 C++中创建一个订阅者,需要传入话题类型、话题名称、所要绑定的回调函数,以及通信Qos(这里我们写10即可,后面小鱼会给大家讲解)。
 
 
+> std::bind()  
+> C++的类成员函数不能像普通函数那样用于回调,因为每个成员函数都需要有一个对象实例去调用它。
+通常情况下,要实现成员函数作为回调函数:一种过去常用的方法就是把该成员函数设计为静态成员函数(因为类的成员函数需要隐含的this指针 而回调函数没有办法提供),但这样做有一个缺点,就是会破坏类的结构性,因为静态成员函数只能访问该类的静态成员变量和静态成员函数,不能访问非静态的,要解决这个问题,可以把对象实例的指针或引用做为参数传给它。
+后面就可以靠这个对象实例的指针或引用访问非静态成员函数。另一种办法就是使用std::bind和std::function结合实现回调技术。
+
 
 ## 2.订阅测试
 

+ 4 - 4
docs/chapt4/4.9服务实现(Python).md

@@ -57,7 +57,7 @@ from village_interfaces.srv import BorrowMoney
 
 #### 2.2.1创建服务端
 
-接着创建一个服务,继承于`Node`之后,`Li4Node`也具备了创建一个服务的能力。在`Li4Node`的`__init__`函数中创建成员变量`borrow_server`。
+接着创建一个服务,继承于`Node`之后,`BaiPiaoNode`也具备了创建一个服务的能力。在`BaiPiaoNode`的`__init__`函数中创建成员变量`borrow_server`。
 
 ```
 # 新建借钱服务
@@ -203,7 +203,7 @@ from village_interfaces.srv import BorrowMoney
 李三继承于Node,也具备了创建客户端的能力
 
 ```
-class Li3Node(Node): #Li3Node是继承于Node
+class BaiPiaoNode(Node): #BaiPiaoNode是继承于Node
 ```
 
 #### 4.2.1 创建客户端
@@ -221,7 +221,7 @@ self.borrow_money_client_ = self.create_client(BorrowMoney, "borrow_money")
 
 #### 4.3.1 编写发送请求函数
 
-接着我们在`Li3Node中`编写一个函数用于创建发送的数据,并发送请求。
+接着我们在`BaiPiaoNode中`编写一个函数用于创建发送的数据,并发送请求。
 
 ```
 def borrow_money_eat(self):
@@ -277,7 +277,7 @@ def main(args=None):
     ros2运行该节点的入口函数,可配置函数名称
     """
     rclpy.init(args=args) # 初始化rclpy
-    node = Li3Node()  # 新建一个节点
+    node = BaiPiaoNode()  # 新建一个节点
     node.borrow_money_eat() #增加一行,李三借钱
     rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C)  
     rclpy.shutdown() # rcl关闭