ROS向节点传递参数roslaunch+参数服务器

一直以来,在ROS的开发过程中,对于公用参数都是用类+静态变量的方式实现。之前感觉没啥但是最近给调PID的时候感觉到了深深地恐惧,emmmm,每一次都要重新编译。于是参数服务器出现在我的眼前,回看着一个个static,心中一万头草泥马飞过(感觉之前写的代码都是shit啊)!

参数服务器

参数服务器是ROS提供的,可以很方便储存各种参数的接口(这里可以理解为数据库)。他的好处就是不仅方便调试,而且可以通过ros提供的调试工具进行实时查看。
参数服务器主要有以下功能:
设置参数 查询参数 搜索参数 删除参数(本文只介绍设置、查询、删除)

基本用法和函数原型

基本用法如下(C++版本)

设置参数 ros::param::set("param_name",value)
查询参数 ros::param::get("param_name",var)//如果为私有则加上"~"
删除参数 ros::param::del("param_name")

函数原型:

void set(const std::string& key, varkind b);
bool get(const std::string& key, varkind& d);
bool del(const std::string& key);

roslaunch+参数服务器实例

roslaunch内容如下:

<launch>
    <node name="nodename" pkg="pkg_name" type="xxx(xxx.py)" output="screen">
    <param name="param_name" value="0.01" type="double"/>
    </node>
</launch>

c++中使用如下

double ojbk;
//直接使用:
ros::param::get("~param_name",ojbk);
//通过NodeHandle使用
ros::NodeHandle node("~");
node.getParam("Parameter",ojbk);
std::cout<<ojbk<<std::endl;

这样就可以直接在launch文件中修改参数并且不用编译就可以使用了!
(不说了,改代码去了)

添加新评论