ROS系统的板块及其作用

本文介绍了ROS2中的核心概念,包括节点(Node)、话题(Topic)和服务(Service)。节点代表模块功能,话题用于数据传递,服务则基于请求响应模式实现通信。创建节点时需继承Node基类,话题通过发布者和订阅者进行数据交互,服务涉及服务端和客户端,实现双向通信。创建话题时要注意回调函数的使用,服务通信中客户端需独立调用发送请求。
摘要由CSDN通过智能技术生成

类中的方法中的self究竟是什么,为什么函数中的变量都要与self绑定?

在C语言中,我们定义一个变量 a ,计算机会分配内存给a,self即是该变量a的内存地址。在调用实例的方法时,Python解释器会自己把实例变量传给类的函数中的self”,如果类的函数的第一个参数不是代表实例的self,则调用实例的方法时,该方法没有参数接收解释器自动传入的实例变量,从而程序会产生异常。将变量与self绑定可有效避免变量重复定义的错误,实现同一类不同实例的同一变量互不影响。

                                     ROS2部分

节点:相当于一个模块功能,例如一个节点负责视觉效果数据的传输,一个节点负责机器人的运动等。创建节点时需注意:在一个类中初始化一个节点时,需对其父类(Node)一同初始化。

class WriterNode(Node):
    def __init__(self,name):
        super().__init__(name)
        self.get_logger().info("大家好,我是%s" % name)

话题: 分为发布者(Publisher)和订阅者(Subscriber),发布者可以发布一个话题,该话题可以是某些数据的详细信息,订阅者通过订阅话题来实时获取该话题所发布的数据信息。

其中,在创建发布者与订阅者时有以下要点:

1:函数self.create_publisher()中仅含有数据类型,话题名称以及qos配置三个参数,不能放回调函数,应另外创建timer按一定周期发布信息。(报错信息提示可以放四个参数,但我放回调函数进去提示我放了五个参数,十分奇怪,不知道是不是我自己的问题)

2.self.create_subscription()可以传入回调函数,需要注意的是,回调函数的形参除了self之外还应该创建一个给订阅的数据,如下图所示

def sub_callback(self,msg): #需要设置一个参数给发布者发布的话题
    self.subdata = msg.data

其中,msg是最开头从std_msgs.msg所import的数据类型,用 ros2 interface show std_msgs.msg Type(数据类型)可知其中还有个数据data,所以不能以self.subdata = msg 的写法去编写

3.订阅者与发布者创建时设置的话题类型得一致,话题名称得一致。

4.话题常用的工具:

ros2 topic info /chatter #(话题名)   --  查看主题信息,可以知道发布者和订阅者的数量
ros2 interface show std_msgs/msg/String #查看消息类型
ros2 topic pub arg #手动发布命令,arg=/话题名 + 消息类型 + “{data: }”

注意,后面必须要有空格 .

 

 

 

服务:服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。其中服务通信包含服务端和客户端,两者的区别是客户端的创建不能调用回调函数,需另外定义一个函数在main函数中调用去发送请求给服务端。

#发送异步借钱请求 
        self.borrow_client.call_async(requst).add_done_callback(self.borrow_response_callback)

与话题不同的是,服务是基于两个端相互通信的一种双向通信方式,而话题只是单向通信。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值