ROS保姆级教程(三)--参数服务器通讯方式实现

通过前面两篇博客的介绍,相信大家对ROS的通讯机制已经有了一个基本的认识,本篇博客我们将学习ROS中的另一种通讯机制–参数服务器。与前两种通信方式不同,参数服务器也可以说是特殊的“通信方式”。特殊点在于参数服务器是节点存储参数的地方、用于配置参数,全局共享参数。参数服务器使用互联网传输,在节点管理器中运行,实现整个通信过程。

参数服务器,作为ROS中另外一种数据传输方式,有别于topic和service,它更加的静态。参数服务器维护着一个数据字典,字典里存储着各种参数和配置。

何为字典,其实就是一个个的键值对,我们小时候学习语文的时候,常常都会有一本字典,当遇到不认识的字了我们可以查部首查到这个字,获取这个字的读音、意义等等,而这里的字典可以对比理解记忆。键值kay可以理解为语文里的“部首”这个概念,每一个key都是唯一的,参照下图:
在这里插入图片描述
每一个key不重复,且每一个key对应着一个value。也可以说字典就是一种映射关系,在实际的项目应用中,因为字典的这种静态的映射特点,我们往往将一些不常用到的参数和配置放入参数服务器里的字典里,这样对这些数据进行读写都将方便高效。

参数服务器的维护方式非常的简单灵活,总的来讲有三种方式:

  • 命令行维护
  • launch文件内读写
  • node源码

其实在ROS Master中就存在一个参数服务器Parameter Server,它是一个全局字典,用来保存各个节点的配置参数,每个节点都是可以访问的,并且会返回需要得到的值。
ROS保姆级教程(三)--参数服务器通讯方式实现_第1张图片
现在我们来介绍参数服务器的使用方法,首先依然是创建我们的功能包,经过前面两篇博客的介绍,相信大家对这些基本的操作已经很熟悉了:

cd ~/catkin_ws/src
catkin_create_pkg learning_parameter roscpp rospy std_srvs

完成之后如下图:
ROS保姆级教程(三)--参数服务器通讯方式实现_第2张图片
YAML文件用来保存各种参数,而且这样可以更加方便进行管理。
rosparam的一些常用命令如下:
ROS保姆级教程(三)--参数服务器通讯方式实现_第3张图片
这里依旧以小海龟为例,可以查看其中的各种选项,可以去试一试,查看这些命令的用法:

rosparam is a command-line tool for getting, setting, and deleting parameters from the ROS Parameter Server.

Commands:
	rosparam set	set parameter
	rosparam get	get parameter
	rosparam load	load parameters from file
	rosparam dump	dump parameters to file
	rosparam delete	delete parameter
	rosparam list	list parameter names

ROS保姆级教程(三)--参数服务器通讯方式实现_第4张图片
现在我们来具体的操作,首先在下图所示的目录下创建对应的cpp文件,源码在下面:
ROS保姆级教程(三)--参数服务器通讯方式实现_第5张图片

/**
 * 该例程设置/读取海龟例程中的参数
 */
#include 
#include 
#include 

int main(int argc, char **argv)
{
	int red, green, blue;

    // ROS节点初始化
    ros::init(argc, argv, "parameter_config");

    // 创建节点句柄
    ros::NodeHandle node;

    // 读取背景颜色参数
	ros::param::get("/background_r", red);
	ros::param::get("/background_g", green);
	ros::param::get("/background_b", blue);

	ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue);

	// 设置背景颜色参数
	ros::param::set("/background_r", 255);
	ros::param::set("/background_g", 255);
	ros::param::set("/background_b", 255);

	ROS_INFO("Set Backgroud Color[255, 255, 255]");

    // 读取背景颜色参数
	ros::param::get("/background_r", red);
	ros::param::get("/background_g", green);
	ros::param::get("/background_b", blue);

	ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);

	// 调用服务,刷新背景颜色
	ros::service::waitForService("/clear");
	ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear");
	std_srvs::Empty srv;
	clear_background.call(srv);
	
	sleep(1);

    return 0;
}

代码本身比较简单,只是调用api接口就可以实现参数的get和set。
ROS保姆级教程(三)--参数服务器通讯方式实现_第6张图片
然后进行编译,和之前一样,依旧是把有关的编译规则添加到相应的位置:

add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})

ROS保姆级教程(三)--参数服务器通讯方式实现_第7张图片
随后进入catkin_ws目录下进行catkin_make即可:

ROS保姆级教程(三)--参数服务器通讯方式实现_第8张图片
最后我们来执行一下看一看效果:

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config

ROS保姆级教程(三)--参数服务器通讯方式实现_第9张图片
ROS保姆级教程(三)--参数服务器通讯方式实现_第10张图片

可以看到,在运行了rosrun learning_parameter parameter_config后,我们成功的将小海龟的背景颜色改成了白色。

本篇博客到此结束,相信大家对参数服务器通讯也已经有所了解了,下一篇我们将介绍action的通讯方式。

你可能感兴趣的:(小教程,学习笔记,ROS踩坑之旅)