IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> ros入门(四)--python实现话题订阅和发布及TCP数据转发 -> 正文阅读

[网络协议]ros入门(四)--python实现话题订阅和发布及TCP数据转发

机器人发布话题,进行话题订阅,并将话题通过TCP转发给PC端。这里主要是基本的消息订阅和socket 代码实现。

1.发布方发布话题
(1)相关代码

#! /usr/bin/env python
# -*- coding: utf-8 -*-

#1.导包 
import rospy
from std_msgs.msg import String

if __name__ == '__main__':
     #2.初始化 ROS 节点:命名(唯一),节点为talker_p
     rospy.init_node('talker_p')
     #3.实例化 发布者 对象(发布话题-chatter,std_msgs.msg.String类型,队列条目个数)
     pub =rospy.Publisher('chatter',String,queue_size=10)
     #4.组织被发布的数据,并编写逻辑发布数据
     msg = String()  # #创建 msg 对象
     msg_front ='good good study, day day up'
     count =0  #计数
     rate = rospy.Rate(10)  #f发布频率,10次/秒
     while not rospy.is_shutdown():  #用于检测程序是否退出,是否按Ctrl-C 或其他
         msg.data = msg_front + str(count)

         pub.publish(msg) #发布信息到主题
         rate.sleep()
         rospy.loginfo('写出的数据:%s',msg.data) #在屏幕输出日志信息,写入到rosout节点,也可以通过rqt_console来查看
         count +=1  #计数

(2) 修改权限chmod +x *.py
(3) 启动roscore,发布节点 ,运行结果
在这里插入图片描述
注意:我初步学习时,在运行节点前,应该先配置 CMakeLists.txt文件,但是我没有配置,依然可以运行,不知道为什么?有了解的麻烦告知~

2.订阅话题并通过TCP转发
(1)话题订阅并转发相关代码示例

#! /usr/bin/env python
# -*- coding:utf-8 -*-

from socket import *
import rospy
from std_msgs.msg import String

def doServer(msg):

    # 创建socket
    tcp_server_socket = socket(AF_INET, SOCK_STREAM)
    #s = socket.socket(AF_UNIX, SOCK_STREAM)

    # 本地信息
    address = ('localhost', 8080)  #绑定本机地址IP

    # 绑定
    tcp_server_socket.bind(address)

    # 使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
    # listen里的数字表征同一时刻能连接客户端的程度.
    tcp_server_socket.listen(128)

    # 如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
    # client_socket用来为这个客户端服务
    # tcp_server_socket就可以省下来专门等待其他新客户端的链接
    # clientAddr 是元组(ip,端口)
    client_socket, clientAddr = tcp_server_socket.accept()

    # 接收对方发送过来的数据,和udp不同返回的只有数据
    # recv_data = client_socket.recv(1024)  # 接收1024个字节
    # print('接收到的数据为:', recv_data.decode('gbk'))

    # 发送一些数据到客户端
    # client_socket.send("thank you !".encode('gbk'))
     
    while not rospy.is_shutdown():
        client_socket.send(msg.data)  #向客户端发送数据

    # 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
    client_socket.close()


if __name__ == "__main__" :
    
    #1. 初始化ROS节点
    rospy.init_node('listener_p')
    #2.实例化 订阅者 对象  (订阅话题-chatter,std_msgs.msg.String类型, 回调函数doServer ,队列条目个数)
    sub = rospy.Subscriber('chatter',String,doServer,queue_size=1)
    #3,设置循环调用回调函数
    rospy.spin()

(2) 客户端代码示例

from socket import *

def client():
    # 创建socket
    tcp_client_socket = socket(AF_INET, SOCK_STREAM)
    # 目的信息
    server_ip = "IP XXXX.XXX.XX"
    server_port = 8080

    # 链接服务器
    tcp_client_socket.connect((server_ip, server_port))

    # 提示用户输入数据
    # send_data = input("请输入要发送的数据:")
    # tcp_client_socket.send(send_data.encode("gbk"))

    # 接收对方发送过来的数据,最大接收1024个字节
    while True:
        recvData = tcp_client_socket.recv(29)
        print('接收到的数据为:', recvData.decode('gbk'))

    # 关闭套接字
    tcp_client_socket.close()

if __name__ == "__main__":
    client()

(3)修改权限chmod +x *.py
(4) 启动roscore,发布节点 ,运行客户端结果显示
在这里插入图片描述

发现问题,欢迎反馈~

参考链接:
https://www.ncnynl.com/archives/201611/1059.html
http://www.autolabor.com.cn/book/ROSTutorials/di-2-zhang-ros-jia-gou-she-ji/22hua-ti-tong-xin/213-hua-ti-tong-xin-zhi-python-shi-xian.html

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:23:39  更:2021-12-03 13:25:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:41:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码