创建两个节点实现消息的发送和接收

有两个Package:ssr_pkg和atr_pkg,其中,ssr_pkg下的a_node负责每隔一定时间发送一个数字,atr_pkg下的b_node负责接收

目录

前言

创建发布者

创建订阅者

终端运行


前言

按照创建单node节点-CSDN博客在ssr_pkg中创建好a_node(发布者),在atr_pkg中创建好b_node(订阅者)

 步骤:创建两个软件包-在对应pkg/src下创建node.cpp-编写node.cpp程序-配置CmakeList.txt文件-在终端编译、运行节点

  • 创建发布者

1.确定话题名称和消息类型

2.写在代码文件中include消息类型对应的头文件

3.在main函数中通过NodeHandler大管

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ROS中,两个节点之间的通信可以通过TCP连接来实现,可以通过ROS中的消息定义文件描述消息的结构,然后在节点代码中使用这些消息类型发送接收消息。具体步骤如下: 1. 在ROS中创建消息定义文件,定义多种类型的消息,例如: ``` # Message definition for custom message type MyMsg1 int32 field1 string field2 # Message definition for custom message type MyMsg2 float64 field1 string field2 ``` 2. 在节点代码中引入这些消息类型,例如: ```python from my_package.msg import MyMsg1, MyMsg2 ``` 3. 在节点代码中创建TCP连接,指定要发送接收消息类型,例如: ```python import rospy import socket import struct rospy.init_node('tcp_node') # Set up TCP connection TCP_IP = 'localhost' TCP_PORT = 1234 BUFFER_SIZE = 1024 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TCP_IP, TCP_PORT)) # Send and receive messages msg1 = MyMsg1() msg1.field1 = 123 msg1.field2 = 'hello' msg2 = MyMsg2() msg2.field1 = 3.14 msg2.field2 = 'world' # Send message 1 data = struct.pack('<i', len(msg1.SerializeToString())) s.send(data) s.send(msg1.SerializeToString()) # Send message 2 data = struct.pack('<i', len(msg2.SerializeToString())) s.send(data) s.send(msg2.SerializeToString()) # Receive message data = s.recv(BUFFER_SIZE) msg = MyMsg1() msg.ParseFromString(data) print(msg.field1, msg.field2) # Close TCP connection s.close() ``` 在这个例子中,我们使用Python的socket库创建TCP连接,然后使用struct库将消息的序列化数据的长度附加到消息数据前面,以便接收方可以正确地解析消息。在发送消息时,我们使用msg.SerializeToString()将消息序列化为字符串,并使用socket.send()发送。在接收消息时,我们使用msg.ParseFromString()将消息字符串解析为消息对象。 这样就可以使用TCP连接在两个节点之间发送多种类型的消息了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值