前言
有时候需要更改某个话题的频率,这里的话只有降低,没有提升哦,而且降低的话,只能按照倍数进行降低,例如,20变10,60变20这样子。
Codes
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import rospy
from tf.msg import tfMessage
import time
from sensor_msgs.msg import Imu
from sensor_msgs.msg import LaserScan
class cl():
def __init__(self):
self.pub = rospy.Publisher('/horizontal_laser_2d1', LaserScan, queue_size=1)
self.val = LaserScan()
self.if_pub = True
self.freq_multiple = 2
self.freq_count = 1
def func(self, data):
self.val = data
if self.if_pub:
self.if_pub = False
self.pub.publish(self.val)
else:
self.freq_count+=1
if self.freq_count == self.freq_multiple:
self.if_pub = True
self.freq_count = 1
def main():
c = cl()
rospy.init_node('changefreq')
rospy.Subscriber('/horizontal_laser_2d', LaserScan, c.func)
rospy.spin()
if __name__ == '__main__':
main()
注意事项
python版本号
第一行注释那个地方,需要针对进行修改,我用的是ubuntu20的noetic,默认版本是python3的,如果是ubuntu18及以下需要改为python
话题对接
可以看到我这里订阅的是/horizontal_laser_2d
,出去的是/horizontal_laser_2d1
,接话题的时候需要分清楚,还有就是这个程序只要进行相应的修改,是可以用于修改其他类型数据的话题的
降频方式
可以看到__init__(self)
下的参数
- self.freq_multiple
这个定义的是降频倍数,比如说我的laser数据是20hz的,这里设置为2,出来的laser数据是10hz的。
相应的,如果你的数据30hz,你想降频到10hz,只需要这里设置为3即可