【ROS读书笔记】--- 7.参数(parameters)

一、简述

参数(rosparameters)机制用以获取节点信息。用参数服务器维护一个变量集的值,包括很多数据类型。由于允许节点查询,故不适用于频繁随时间变更的变量

二、通过命令行操作参数

以打开一个小乌龟界面为例。以下均为已经打开小乌龟界面操作。

-查看参数列表

rosparam list 效果如下param列表

-查询参数

  • 查询单个参数信息:
rosparam get 参数名

信息如下:
查询版本


  • 查询一个命名空间下所有参数信息:
rosparam get 命名空间

查询与小乌龟有关

-设置参数

这里以设置小乌龟背景为例。

  • 设置单个参数
rosparam set 参数名 参数值

效果如下:
修改参数


  • 设置同一命名空间下多个参数(yaml格式):
    shell会自动检测双引号结束,请放心换行(enter).
rosparam set 命名空间 "参数1: 值1
参数2: 值2
参数3: 值3"

yaml设置参数

  • 由于节点不会自动感知参数的变化,这里调用如下语句使设置生效:
rosservice call /clear

-删除参数

rosparam delete 参数名

-创建和加载参数文件

以yaml格式储存所有参数,或者读取yaml文集中的参数添加到参数服务器

rosparam dump 文件名 命名空间
rosparam load 文件名 命名空间


三、在C++代码中操作参数

重新创建一个功能包命名为param_change

-设置参数

主要用到ros::param::set()
源码为set_param.cpp,如下:

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <std_srvs/Empty.h>

int main(int argc, char **argv)
{
	ros::init(argc, argv, "set_bg_color") ;

	ros::NodeHandle nh ;

	ros::service::waitForService("clear") ;

	ros::param::set("background_r", 255);
    ros::param::set("background_g", 255);
    ros::param::set("background_b", 0);

    ros::ServiceClient clearClient = nh.serviceClient<std_srvs::Empty>("/clear") ;
    std_srvs::Empty srv ;

    clearClient.call(srv);
	return 0 ;
}
  • 为小乌龟的背景三通道赋值。
  • 在启动turtlesim节点前等待/clear服务调用结束,从而确保我们的设置不会被初始化的背景色覆盖。
  • 最后通过调用/cleat服务强制turtle读取我们的参数值(服务详见第八章)

-读取参数

和上文在同一个目录(相当于前文pubvell的扩展),
源码如下(名为get_param.cpp):

ros::param::get(参数名,需要获取的参数(程序中设置)) ;
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
	ros::init(argc, argv, "publish_param_vel") ;

	ros::NodeHandle nh ;

	ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("turtle1/cmd_vel", 1000) ;

    srand(time(0)) ;

    const std::string PARAM_NAME = "~max_vel"   ;
    double maxVel ;
    bool ok = ros::param::get(PARAM_NAME, maxVel) ;

    
    if(!ok)
    {
        ROS_FATAL_STREAM("could not get param:  " << PARAM_NAME) ;
        exit(1) ;
    }

	ros::Rate rate(2) ;

	while(ros::ok())
	{
		geometry_msgs::Twist msg ;
		msg.linear.x = double(rand())/double(RAND_MAX) ;
		msg.angular.z = 2*double(rand())/double(RAND_MAX) - 1 ;

		pub.publish(msg) ;

		rate.sleep();	
	}

	return 0 ;
}
  • 是作为pubvel例程的一个附加工具,读取私有参数max_vel的值,并且用这个数值来调整随即生成线速度的大小。该程序需要预设最大速度(max_vel)值,在程序之前设置rosparam set /publish_velocity/max_vel 0.1
    说明:这里是私有参数,对于私有参数的设置
  1. 在C++源文件中参数名前加~,如~max_vel ;
  2. 在命令行中加下划线“_参数名:=参数值”如_max_vel:=0.3

四、在启动文件中操作参数

-设置参数

<param name="参数名"	value="参数值" />

例如

<group ns="my_ns">
	<param name="param1" value="value1" />
	<param name="param2" value="value2" />
	<param name="param3" value="value3" />
	...
</group>

-设置私有参数

将要设置的param元素包含到节点中即可:

<node ...>
	<param ... />
</ node>

例如:

<node pkg="pubpose" type = "xx" name="xx">
	<param name="max_vel" value="3" />
</ node>

-从yaml文件读取参数

<rosparam	command="load"	file="$(包名)/yaml文件.yaml">

五、展望

下一章service服务。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值