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)
- 只要