IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> [ROS](12)ROS通信 —— 参数服务器(Parameter Server)通信 -> 正文阅读

[系统运维][ROS](12)ROS通信 —— 参数服务器(Parameter Server)通信

??文章只是个人学习过程中学习笔记,主要参考ROS教程1 2


[ROS](01)创建ROS工作空间

[ROS](02)创建&编译ROS软件包Package

[ROS](03)CMakeLists.txt详解

[ROS](04)package.xml详解

1、概述

??参数服务器(Parameter Server 3):是可以通过网络 API 访问的共享的多变量字典。在运行时节点(Nodes)使用此服务器去存储和检索参数。(类似于全局变量,存储多个节点共享的数据。)

Tips:参数服务器不是为高性能(high-performance)而设计的,因此最好用于静态、非二进制的数据,如配置参数。

2、参数服务器通信机制

??参数服务器通信 是ROS通信中一种比较特殊又比较简单的通信方式。参数服务器在ROS Master内部运行。
parameter server通信架构.png

图2-1 参数服务器(Parameter Server)通信模型

3、参数命令rosparam

?? rosparam 4 能让我们在ROS参数服务器(Parameter Server)上存储和操作数据。参数服务器能够存储整型(integer)、浮点(float)、布尔(boolean)、字典(dictionaries)和列表(list)等数据类型。

命令功能
rosparam set 设置参数
rosparam get获取参数
rosparam load 从文件中加载参数
rosparam dump 向文件中转储参数
rosparam delete删除参数
rosparam list列出参数名

Tipsrosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1是整型,1.0是浮点型,one是字符串,true是布尔型,[1, 2, 3]是整型组成的列表,{a: b, c: d}是字典。

4、参数服务器通信实操 – 修改海龟模拟器的背景颜色

??通过ROS内置的 海龟模拟器(turtlesim) 来进行参数服务器通信的实操,这里我们以修改海龟模拟器背景颜色举例:背景颜色修改为紫色(RGB: 160 32 240)。

??实现的步骤如下:
??步骤1:在新终端中启动roscore

roscore

??步骤2:在新终端中启动海龟模拟器的节点turtlesim_node

rosrun turtlesim turtlesim_node

??步骤3:在新终端中使用rosparam命令获取参数列表。

rosparam list

parameter server turtlesim.png

图4-1 修改海龟模拟器的背景颜色步骤1-3

??步骤4:通过调试工具rqt工具箱和编程的方式修改海龟模拟器的背景颜色。
turtlesim.png

图4-2 海龟模拟器初始状态

4.1 调试工具实现

??在新终端中输入rqt命令打开rqt工具箱,然后在菜单栏中打开参数和服务插件,分别为Plugins/Configuration/Param EditPlugins/Services/Service Caller,如图4-3所示。
rqt param edit and service caller.png

图4-3 rqt工具箱插件Param Edit(左)和 Service Caller(右)

??在Param Edit中将海龟模拟器turtlesim的背景颜色background_x的值改为紫色,如图4-4所示①;然后在Service Caller中选择调用clear服务,如图4-4所示②;最后点击右上角Call使已被修改的参数生效。
turtle set param.png

图4-4 通过调试工具的方式修改海龟模拟器的背景颜色为紫色

4.2 编程实现(C++)

??在beginner_tutorials软件包的src目录下创建修改海龟模拟器的背景颜色的源文件:

roscd beginner_tutorials
cd src
touch turtle_set_param.cpp

4.2.1 程序代码(turtle_set_param.cpp)

#include "ros/ros.h"
#include <std_srvs/Empty.h>

int main(int argc, char **argv)
{
    setlocale(LC_ALL,"");

    /* 初始化ROS节点 */
    ros::init(argc,argv,"turtle_set_param");
    
    /* 为这个节点创建句柄 */
    ros::NodeHandle nh("turtlesim");

    int red, green, blue;

    /* 读取海龟模拟器背景颜色参数 */
    ros::param::get("/turtlesim/background_r",red);
    ros::param::get("/turtlesim/background_g",green);
    ros::param::get("/turtlesim/background_b",blue);

    ROS_INFO("Get turtlesim background color[%3d, %3d, %3d]",red ,green,blue);

    /* 设置海龟模拟器背景颜色参数,设置为紫色(160,32,240) */
    ros::param::set("/turtlesim/background_r",160);
    ros::param::set("/turtlesim/background_g",32);
    ros::param::set("/turtlesim/background_b",240);

    ROS_INFO("Set turtlesim background color[%3d, %3d, %3d]",160 ,32,240);

    /* 读取海龟模拟器背景颜色参数 */
    ros::param::get("/turtlesim/background_r",red);
    ros::param::get("/turtlesim/background_g",green);
    ros::param::get("/turtlesim/background_b",blue);

    ROS_INFO("Again get turtlesim background color[%3d, %3d, %3d]",red ,green,blue);

    /* 调用 /clear 服务,使已被修改的参数生效 */
    ros::service::waitForService("/clear");
    ros::ServiceClient client = nh.serviceClient<std_srvs::Empty>("/clear"); // 参数为空的服务
    std_srvs::Empty srvs;
    /* 服务调用 */
    if(client.call(srvs))
    {
        ROS_INFO("海龟模拟器turtlesim已修改的背景颜色已生效!");
    }
    else
    {
        ROS_INFO("调用服务失败!");
    }

    return 0;
}

4.2.2 配置CMakeLists.txt

??只需将这几行添加到CMakeLists.txt文件的底部:

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

4.2.3 编译、运行

??在你的工作空间下执行catkin_make编译,将turtle_set_param.cpp编译成可执行文件turtle_set_param。编译后,在终端中执行过程如下所示。
turtlesim set param c++.png

图4-5 运行turtle_set_param,修改海龟模拟器的背景颜色

4.3 编程实现(Python)

??在beginner_tutorials软件包的scripts目录下创建修改海龟模拟器的背景颜色源文件:

roscd beginner_tutorials
cd scripts
touch turtle_set_param.py
chmod +x turtle_set_param.py

4.3.1 程序代码(turtle_set_param.py)

#!/usr/bin/env python
# encoding: utf-8

import rospy
from std_srvs.srv import Empty

def turtle_set_param():
    # 初始化ROS节点
    rospy.init_node("turtle_set_param")

    # 读取海龟模拟器背景颜色参数
    red   = rospy.get_param("/turtlesim/background_r")
    green = rospy.get_param("/turtlesim/background_g")
    blue  = rospy.get_param("/turtlesim/background_b")

    rospy.loginfo("Get turtlesim background color[%3d, %3d, %3d]",red ,green,blue)

    # 设置海龟模拟器背景颜色参数,设置为紫色(160,32,240)
    rospy.set_param("/turtlesim/background_r",160)
    rospy.set_param("/turtlesim/background_g",32)
    rospy.set_param("/turtlesim/background_b",240)

    rospy.loginfo("Set turtlesim background color[%3d, %3d, %3d]",160 ,32,240)

    # 读取海龟模拟器背景颜色参数 
    red   = rospy.get_param("/turtlesim/background_r")
    green = rospy.get_param("/turtlesim/background_g")
    blue  = rospy.get_param("/turtlesim/background_b")

    rospy.loginfo("Again Get turtlesim background color[%3d, %3d, %3d]",red ,green,blue)

    # 调用 /clear 服务,使已被修改的参数生效 
    rospy.wait_for_service("/clear")
    try:
        clear_client = rospy.ServiceProxy("/clear",Empty)
        clear_client()
        rospy.loginfo("海龟模拟器turtlesim已修改的背景颜色已生效!")
    except rospy.ServiceException as e:
        rospy.loginfo("调用服务失败!")


if __name__ == '__main__':
    turtle_set_param()
 

4.3.2 配置CMakeLists.txt

??只需catkin_install_python中添加scripts/turtle_set_param.py即可:

#安装python可执行脚本
catkin_install_python(PROGRAMS
  scripts/turtle_set_param.py
  ... 
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  )

4.3.3 编译、运行

??其实这个例子很简单,不需要编译,直接执行python文件就行。但是我们还是养成习惯吧,每次创建和修改代码后,就catkin_make编译一下,即使是Python节点也必须使用它。这是为了确保能为创建的消息和服务自动生成Python代码。
turtlesim set param python.png

图4-6 运行turtle_set_param.py,修改海龟模拟器的背景颜色

5、rosparam实操

ROS提供了一个稳定的命令行工具rosparam来设置和获取参数。通过已运行的海龟模拟器(turtlesim)来实操参数命令。

5.1 rosparam list

?? rosparam list 列出所有的参数名。
rosparam list.png

turtlesim节点在参数服务器上有3个参数用于设定背景颜色(RGB格式):/turtlesim/background_x

5.2 rosparam get

?? rosparam get [parameter-name] 获取一个参数的值。
rosparam get.png

?? 也可以使用 rosparam get / 命令来显示参数服务器上的所有内容。
rosparam get all.png

5.3 rosparam set

?? rosparam set [parameter-name] [parameter-value] 为参数设置一个值。

# 将 turtlesim 的背景颜色修改为红色(RGB: 255 0 0)
 rosparam set /turtlesim/background_r 255
 rosparam set /turtlesim/background_g 0
 rosparam set /turtlesim/background_b 0

?? 上述指令修改了参数的值,但还未生效,因此我们需要调用clear服务使得参数的修改能生效:

rosservice call /clear

rosparam set.png

5.4 rosparam dump

?? rosparam dump[file-name] 将参数服务器的 YAML 格式的内容转储到文件中。

# 在 beginner_tutorials软件包下创建param目录文件夹
roscd beginner_tutorials
mkdir param
# 在param目录文件夹下将参数服务器的 YAML 格式的内容转储到文件中。
cd param
rosparam dump params_all.yaml

rosparam dump all params.png

Node:参数保存位置为当前执行命令的目录下。

?? rosparam dump[file-name] [namespace] 只转储指定命名空间中的参数。

# 在param目录文件夹下转储指定命名空间中的参数
rosparam dump params_specified.yaml turtlesim

rosparam dump specified params.png

5.5 rosparam load

?? rosparam load [file-name] 将 YAML 文件中的参数加载到指定的命名空间(默认为/)。

修改params_all.yaml文件 turtlesim 的背景颜色修改为绿色(RGB: 0 255 0)
rosparam load params_all.yaml
rosservice call /clear

rosparam load param.png

??甚至可以将YAML文件重载入新的命名空间,例如:copy_param

rosparam load params_specified.yaml copy_param

rosparam load param to copy newspacce.png

5.6 rosparam delete

?? rosparam delete [parameter-name] 删除参数值。

rosparam delete /copy_param/background_r
rosparam delete /copy_param/background_g

rosparam delete.png


  1. ROS.org. ROS教程[EB/OL]. 2020-12-22[2022-7-5]. http://wiki.ros.org/cn/ROS/Tutorials. ??

  2. ROS.org. 理解ROS服务和参数[EB/OL]. 2020-12-23[2022-11-02]. https://wiki.ros.org/cn/ROS/Tutorials/UnderstandingServicesParams. ??

  3. ROS.org. Parameter Server[EB/OL]. 2018-11-08[2022-11-02]. https://wiki.ros.org/Parameter%20Server. ??

  4. ROS.org. rosparam[EB/OL].2014-06-29[2022-11-02]. https://wiki.ros.org/rosparam ??

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:57:57  更:2022-11-05 01:00:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 6:25:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码