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

       参数服务器是可通过网络访问的共享的多变量字典。它是节点存储参数的地方、用于配置参数、全局共享参数。参数服务器使用互联网传输,在节点管理器中运行,实现整个通信过程。它使用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");
}

 

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值