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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值