关于结合ros订阅和socket使用的python代码

简单几步

1.首先要会简单的ROS
2.了解socket
3.粗暴的结合
附上代码供诸君参考:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import threading
import time
import socket
import rospy
from Speed.msg import Speed   # 将订阅str_message话题,自定义消息类型Speed::Speed

Vc=-1 #需要在ROS和socket中传递或使用的变量设为全局变量

def InfoCallback(msg):#ROS订阅的回调函数
    global Vc
    Vc=msg.carspeed   #订阅本车的速度

def send_info(client): #SOCKET的发送函数
    global Vc
    while(1):
        if Vc>=0:
            hvjson=Vc #将vc发送出去
            client.sendall(hvjson.encode("utf-8"))
            time.sleep(1)

def recv_info(client): #SOCKET的接收函数
    global data
    while(1):
        try:
            info=client.recv(2000)
            data=info.decode("utf-8")   #接收到的数据
            print(data)                
        except:
            break


if __name__ == '__main__':
#先开启了ROS
    rospy.init_node('speed_subscriber', anonymous=True)   # ROS节点初始化
    rospy.Subscriber("str_message", Speed, InfoCallback)   # 创建一个Subscriber,订阅名为/str_message的topic,注册回调函数InfoCallback
 
 #再创建了SOCKET       
    g_socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #创建socket
    g_socket_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    g_socket_server.bind(("", 1128))     #关联相应的地址和端口号
    g_socket_server.listen(128)          #开始监听
    client, _ = g_socket_server.accept()    #接收并建立与客户端的连接,程序在此处开始阻塞,只有等到客户端连接进来开始往下执行
    threads = []
    t1 = threading.Thread(target=send_info, args=(client,))  #开启线程
    threads.append(t1)
    t2 = threading.Thread(target=recv_info, args=(client,))
    threads.append(t2)
    for t in threads:
        t.start()
        time.sleep(1)



4.解释:因本人比较忙,但是看到还是有好些个朋友给我发消息想知道我怎么解决的,以上代码是我本人简化我的功能代码后贴出分享给大家参考的,没有进行运行验证,因此代码可能存在小问题,但是整体没有大问题,思路正确,对ROS和SOCKET结合使用的简单用法可以像我这样进行。代码有写注释,应该能理解到意思。希望大家有所收获。
在这里插入图片描述
未经允许请勿转载盗用

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值