ROS python 使用参数服务器传输数据

ROS 参数服务器一般用于整个运行环境中的全局变量, 但是我们也可以使用参数服务器传输一些频率比较低的数据.

优点:

  • 使用参数服务器, 可以避免在接收数据时使用回调函数.
  • 对于这种更新频率不高的数据, 当我们需要使用该数据时, 使用 rospy.get_param(Name) 即可获取数据, 避免的一直使用topic订阅数据

缺点:

  • 由于参数服务器由roscore 进行管理, 过大的数据, 频繁的请求, 都会占用网络带宽, 减低ROS系统的性能.
  • 参数服务器的容量有限.

通过参数服务器发送二维数组示例

  • 发送端
import os, sys
import numpy as np
import rospy

rospy.init_node(name="pub_img_param")
rospy.set_param(param_name='/test_img', param_value=' ')
while not rospy.is_shutdown():
    img_np = np.random.rand(40, 40)
    rospy.set_param(param_name='/test_img', param_value=img_np.tolist()) # 参数服务器不能直接发送numpy格式的数据
    rospy.sleep(duration=3)                                              # 过于频繁的 发送 和 接收 都会减低ROS系统性能
  • 接收端
import os, sys
import numpy as np
import rospy
rospy.init_node(name='read_param')
read_img = ' '

while not rospy.is_shutdown():
    if rospy.has_param(param_name='/test_img'):
    	# 该程序会频繁的请求参数服务器, 并不合适
    	# 在实际场景下, 程序需要执行一段时间才会去执行 has_param 和 get_param
        img_list = rospy.get_param(param_name='/test_img')
        # 只有参数发生更新,才会更新本地变量数据
        if not img_list == read_img:
            read_img = img_list
            img_np = np.asarray(read_img)
            print(img_np.shape)
  • 注意:
    • 只要roscore节点没有关闭, 我们添加的参数始终都存在, 因此我们需要手动清空哪些可能影响下次程序运动的参数, rospy.delete_param(param_name)

你可能感兴趣的:(python)