zl程序教程

您现在的位置是:首页 >  其他

当前栏目

ROS机器人程序设计(原书第2版)2.4.14 动态参数

2023-03-14 10:20:56 时间

2.4.14 动态参数

ROS的另一个功能是动态重配置应用。通常情况下,当你正在编写一个新节点,你只能以数据初始化节点内的变量。如果你想从外部节点动态地改变这些值,你可以使用参数服务器、服务或主题。如果你使用一个PID节点来控制一个电动机,则应该使用动态重配置

应用。

在本节中,你将学习如何配置一个包含此功能的基本节点。添加必要的内容到CMakeLists.txt和package.xml文件。

为了使用动态重配置,你需要写一个配置文件并保存在你功能包的cfg文件夹中,创建一个文件夹和新文件如下:

 

在chapter2.cfg文件中添加如下代码:

 

代码解释:

 

以上代码初始化ROS并导入参数生成器:

 

以上代码初始化参数生成器,通过它我们可以开始用下面的代码行添加参数:

 

以上代码加入不同的参数类型并设置默认值、描述、范围等,参数有如下内容:

 

name 参数的名称

type 参数值的类型

level 一个传递给回调的位掩码

description 一个描述参数

default 节点启动的初始值

min 参数最小值

max 参数最大值

参数的名称必须唯一,参数值必须在最小和最大的范围内:

 

最后一行生成必要的文件并退出程序。注意.cfg文件是用Python写的。本书的实例代码主要使用C++编写,但有时会使用Python代码片段。

因为文件将由ROS执行,所以需要改变文件的权限,我们将使用chmod a + x使文件可由任何用户执行和运行,如下所示:

 

打开CMakeList.txt,加入下面代码:

 

 

现在,我们要写具有动态重配置支持的新节点。在src文件夹中创建一个新文件如下:

 

在文件中写入如下代码段:

 

这里进行代码解释,注意一些重要的行:

 

这些行包括ROS头文件、参数服务器以及我们先前创建的config文件。

 

 

回调函数将输出参数的新值。这是参数访问的方式,例如config.int_param。参数的名称必须与example2.cfg配置文件相同:

 

初始化服务器,忽略chapter2_Config配置文件:

 

现在,我们向服务器发送回调函数。当服务器得到重新配置请求,它会调用回调函数。

一旦我们完成以上讲解的步骤,我们需要在CMakeLists.txt文件中添加如下代码:

 

现在,你必须编译并运行节点和动态重配置界面(Dynamic Reconfigure GUI),如下:

 

在你执行最后一行命令后,你会看到一个新窗口,通过它你可以动态重配置节点的参数,如下图所示:

 

每当你通过滑块、文本框等调整参数时,你可以在命令行看到正在运行的节点的这些改变,如下图所示:

 

通过动态重配置,你可以更高效地开发和测试节点。与硬件一起配合使用这个程序是不错的选择。你将在接下来的章节中学习到更多内容。