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

简介:

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),如下:

 

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

 

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

 

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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
1月前
|
网络协议 机器人 中间件
单片机和FreeRTOS上跑机器人ROS的应用
单片机和FreeRTOS上跑机器人ROS的应用
50 0
|
3月前
|
传感器 机器人 C++
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
179 0
|
5月前
|
传感器 机器人 C++
机器人操作系统ROS 编程开发--详细总结
最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家。 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发;(这里项目开发采用C++ 11版本)。ROS的点对点设计以及服务和节点管理器等机制,可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。ROS免费并且开源。
295 0
|
8月前
|
传感器 Ubuntu 机器人
【5. ROS机器人的运动控制】
【5. ROS机器人的运动控制】
309 0
【5. ROS机器人的运动控制】
|
算法 机器人 定位技术
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
858 0
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
|
8月前
|
机器学习/深度学习 传感器 Ubuntu
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(下)
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(下)
117 0
|
8月前
|
存储 传感器 编解码
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM(上)
ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM
101 0
|
8月前
|
机器学习/深度学习 传感器 XML
ubuntu16.04下ROS操作系统学习笔记(四 )机器人系组成、URDF机器人建模、xacro模型优化
ubuntu16.04下ROS操作系统学习笔记(四 )机器人系组成、URDF机器人建模、xacro模型优化
156 0
|
9月前
|
传感器 XML 数据可视化
[ros robot] --- 机器人系统仿真
[ros robot] --- 机器人系统仿真
302 0
|
传感器 JSON Ubuntu
ROS2 机器人操作系统入门和安装以及如何使用 .NET 进行开发
本文是 ROS2 入门的第一课,简单介绍了 ROS 系统,并演示了 ROS2 系统在 Ubuntu 22.04 中的安装(使用 gitee 和清华源)以及其中错误的解决。最后对其优势进行总结,为什么选择 ROS。最后介绍简单 Demo 和如何使用 .NET 接入的其中一种方式。
606 0
ROS2 机器人操作系统入门和安装以及如何使用 .NET 进行开发

推荐镜像

更多