实时的从rostopic中订阅数据(位姿信息)并且发送到另一台电脑上面,两台电脑使用socket进行通信,socket 服务端内部建立subscriber节点来订阅话题。设定为每隔1秒发送一次信息。
客户端:
import socket
client = socket.socket() # 有一些默认参数,即可使用ipv4,这一句是声明socket类型和返回socket连接对象
client.connect(("10.20.20.115",6666)) # 建立连接:传入服务器端IP号和要连接的应用程序的端口号
client.send(b'Start')#客户端发送命令开始
#关键在于接受服务端的消息
while 1:
data = client.recv(200) #客户端可以接收服务器端的消息
print(data.decode())
client.close()
服务端:
import socket
import rospy
from nav_msgs.msg import Odometry
import time
global asd
def poseCallback(msg):
time.sleep(1)
global asd
print("aa")
asd= msg.pose.pose
print(asd)
conn.send(str(asd))
def run(conn):
global asd
while not rospy.is_shutdown():
rospy.Subscriber("/lidar_pose", Odometry, poseCallback,queue_size =10)
rospy.spin()
server = socket.socket()
server.bind(("10.20.20.115",6666))
server.listen(25)
print('waiting the call')
conn,addr = server.accept()
print('the call has comming')
rospy.init_node('pose_subscriber')
run(conn)
#conn.send(msg)
slam刚入门小白,之前尝试微服务框架通信但是影响了ros环境没成功,不得已只能采用socket,没想到两天就跑通了。初学者还是先从简单的socket练起吧,同时还学了一些ros的基础知识,后面还需要深入学习。