简单几步
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结合使用的简单用法可以像我这样进行。代码有写注释,应该能理解到意思。希望大家有所收获。
未经允许请勿转载盗用