ROS参数服务器(参数使用详细介绍)

  • Post author:
  • Post category:其他


参数服务器是可通过网络访问的共享的多变量字典。它是节点存储参数的地方、用于配置参数、全局共享参数。参数服务器使用互联网传输,在节点管理器中运行,实现整个通信过程。它使用XMLRPC数据类型为参数赋值,包括以下类型:32位整数、布尔值、字符串、双精度浮点、ISO 8601日期、列表(List)、基于64位编码的二进制数据。

参数服务器的配置方式非常的简单灵活,总的来讲有三种方式:命令行维护、launch文件内读写、node源码。

ROS中关于参数服务器的工具是rosparam。其支持的参数如下所示:


命令


作用


rosparam list


列出了服务器中的所有参数


rosparam get [parameter]


获取参数值


rosparam set [parameter] [value]


设置参数值


rosparam delete [parameter]


删除参数


rosparam dump [file]


将参数服务器保存到一个文件


rosparam load [file]


加载参数文件到参数服务器

在前面讲到launch文件时,提到launch文件有很多标签,其中有<param>和<rosparam>,以激光雷达驱动lidar.launch文件为例:

<launch>
<node name="ydlidar_node"  pkg="ydlidar"  type="ydlidar_node" output="screen">
<param name="port"         type="string" value="/dev/ydlidar"/>
<param name="baudrate"     type="int"    value="115200"/>
<param name="frame_id"     type="string" value="laser_frame"/>
<param name="angle_fixed"  type="bool"   value="true"/>
<param name="low_exposure"  type="bool"   value="false"/>
<param name="heartbeat"    type="bool"   value="false"/>
<param name="resolution_fixed"    type="bool"   value="true"/>
<param name="angle_min"    type="double" value="-180" />
<param name="angle_max"    type="double" value="180" />
<param name="range_min"    type="double" value="0.08" />
<param name="range_max"    type="double" value="16.0" />
<param name="ignore_array" type="string" value="" />
<param name="samp_rate"    type="int"    value="9"/>
<param name="frequency"    type="double" value="7"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="base_link_to_laser4"
  args="0.2245 0.0 0.2 0.0 0.0 0.0 /base_footprint /laser_frame 40" />
</launch>

可以看出,param是设置单个参数。

以导航驱动move_base.launch文件为例:

<launch>
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
<rosparam file="$(find dashgo_nav)/config/dashgo/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find dashgo_nav)/config/dashgo/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find dashgo_nav)/config/dashgo/local_costmap_params.yaml" command="load" />
<rosparam file="$(find dashgo_nav)/config/dashgo/global_costmap_params.yaml" command="load" />
<rosparam file="$(find dashgo_nav)/config/dashgo/base_local_planner_params.yaml" command="load" />
</node>
</launch>

可以看出,rosparam是用于加载参数文件的,而参数文件可以包含许多参数。

param的操作非常轻巧,非常简单。关于param的API,roscpp提供了两套:ros::param namespace和ros::NodeHandle;它们的操作完全一样。

#include<ros/ros.h>
int main(int argc, char **argv){
ros::init(argc, argv, "param_demo");
ros::NodeHandle nh;
int param1, param2, param3, param4, param5;

//Get Param的三种方法
//① ros::param::get()获取参数“param1”的value,写入到param1上
bool test1 = ros::param::get("param1", param1);

//② ros::NodeHandle::getParam()获取参数,与①作用相同
bool test2 = nh.getParam("param2",param2);

//③ ros::NodeHandle::param()类似于①和②
//但如果get不到指定的param,它可以给param指定一个默认值(如1)
nh.param("param3", param3, 1);

//Set Param
//① ros::param::set()设置参数
param4 = 4;
ros::param::set("param4", param4);

//② ros::NodeHandle::setParam()设置参数
param5 = 5;
nh.setParam("param5",param5);

//Check Param

//① ros::NodeHandle::hasParam()
bool ifparam5 = nh.hasParam("param5");

//② ros::param::has()
bool ifparam6 = ros::param::has("param6");

//Delete Param

//① ros::NodeHandle::deleteParam()
bool ifdeleted5 = nh.deleteParam("param5");

//② ros::param::del()
bool ifdeleted6 = ros::param::del("param6");
}



版权声明:本文为qq_42145185原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。