程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

python ROS 定时发送数据

hfteth 2024-12-17 11:38:10 技术文章 22 ℃


实验平台 ubuntu18.04

实验目的 掌握python ros 定时发送数据

两种方式:

1.ROS 自带 Rate 实现

2.ROS 自带Timer

1.ROS 自带 Rate 实现

我们将在之前做过测试的程序添加rate 实现定时发送,测试一秒五帧的数据发送与消息订阅。

实现步骤:

  1. 多进程启动roscore
  2. 声明消息节点
  3. 定时发布消息

主要的学习内容是:

rate = rospy.Rate(5)

设置发送频率

无限循环中添加rate.sleep()

具体代码如下所示:

import os
import sys
import time
import rospy
import multiprocessing
from std_msgs.msg import String
def start_ros_core():
    result_roscore = os.system('roscore')
# 使用代码
ros1bag_core_process = multiprocessing.Process(target=start_ros_core)
ros1bag_core_process.start()
rospy.init_node("test_pub", anonymous=True)#初始化节点 名称:test
rate = rospy.Rate(5) # ROS Rate at 5Hz
def sub_mutil():
    num = 0
    while True:
        my_msg = String()
        my_msg.data = f'{num}'
        pub_parking.publish(my_msg)
        rate.sleep()
        print(f"发送消息:{num}")
        num+=1
#发布话题
pub_parking = rospy.Publisher('mystring', String, queue_size=10)
sub_mutil()

订阅部分代码

import rospy
from std_msgs.msg import String
rospy.init_node("test_sub", anonymous=True)#初始化节点 名称:test
def call_back_String(msg):
    print(f"接收到消息: {msg.data}")
rospy.Subscriber('mystring',String, call_back_String)
rospy.spin()

实现GIF:

2.ROS 自带Timer

主要使用到rospy timer 设置0.2s 触发一次函数

#定时触发
rospy.Timer(rospy.Duration(0.2), call_back)

所有代码给出:

import os
import sys
import time
import rospy
import multiprocessing
from std_msgs.msg import String
num = 0
def call_back(s):
    global num
    my_msg = String()
    my_msg.data = f'{num}'
    pub_parking.publish(my_msg)
    print(f"发送消息:{num}")
    num+=1
rospy.init_node("test_pub", anonymous=True)#初始化节点 名称:test
#发布话题
pub_parking = rospy.Publisher('mystring', String, queue_size=10)
#定时触发
rospy.Timer(rospy.Duration(0.2), call_back)
rospy.spin()

接收话题解析的代码与之前的一致:

import rospy
from std_msgs.msg import String
rospy.init_node("test_sub", anonymous=True)#初始化节点 名称:test
def call_back_String(msg):
    print(f"接收到消息: {msg.data}")
rospy.Subscriber('mystring',String, call_back_String)
rospy.spin()

实验结果GIF:

边学边用好记忆,随学随记烂笔头。

Tags:

最近发表
标签列表