0


【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍

在这里插入图片描述

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。

参数服务器通信及ros常用工具指令介绍

在这里插入图片描述

0.参数服务器概念

相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。
在这里插入图片描述
而在参数服务器中:ROSMASTER变为了一个存储消息的容器,供使用者自行完成增删查改的操作.

其设计仅为存储非二进制的简单数据,若需要高性能操作,建议采用其他通信方式.

容器中可存储的参数类型:

  1. 32-bit integers
  2. booleans
  3. strings
  4. doubles
  5. iso8601 dates
  6. lists
  7. base64-encoded binary data
  8. 字典

1.参数服务器增加/修改参数:

  1. 初始化节点
  2. 使用set_param函数进行增加/修改

set_param有点类似hash:若参数服务器中无这个值,则增加,若有则修改为最新的值

import rospy

rospy.init_node("param")#设置整形
rospy.set_param("p_int",10)#设置浮点型
rospy.set_param("p_double",3.14)#设置bool值
rospy.set_param("p_bool",True)#设置string
rospy.set_param("p_string","hello python")#设置List
rospy.set_param("p_list",["hello","haha","xixi"])#设置字典
rospy.set_param("p_dict",{"name":"hulu","age":8})

在这里插入图片描述

2.参数服务器查找参数

常用的有以下几个函数:

  1. **get_param(key,value)当键存在的时候返回对应值,若不存在则返回默认值get_param_cached(key,value)**与上方用法相同,只不过这个效率更高,其会现在缓存里查找,类似于操作系统内存中快表的作用radius2=rospy.get_param_cached("radius_p",0.5)radius=rospy.get_param("radius_p",0.5)
  2. **get_param_names()**获取当前参数列表中所有的参数名并返回names=rospy.get_param_names()for name in names:print(name)
  3. **has_param(key)**判断参数列表中是否有某一个参数, 返回Bool值flag1=rospy.has_param("radius_p")if flag1:print("存在")else:print("不存在")
  4. **search_param(key)**寻找是否有这个消息,若无则返回None,若有则返回这个keykey=rospy.search_param("radius_p")print(key)

3.参数服务器删除参数:

  1. **delete_param(key)**删除指定的key

较为简单就不演示用法了,之后会有一个实战项目涉及

4.常用指令

会使用到之前配置使用的话题通信与服务通信.

使用这些命令可以在机器人运行时动态的查看各节点之间的关系及消息载体

  • rosnode:节点
  • rostopic:话题
  • rosservice:服务
  • rosmsg:msg消息
  • rossrv:srv消息
  • rosparam:操作参数服务器

4.1 rosnode

我们先启动下之前配置好的自定义msg的sub与pub节点,具体配置可以查看这篇文章话题通信案例

rosrun lesson2 demo02_pub.py
rosrun lesson2 demo02_sub.py

在这里插入图片描述

直接使用rosnode可以查看参数列表
在这里插入图片描述

  1. rosnode ping 测试到节点的连接状态rosnode ping /person_pub这里/pub_person为发送消息的节点,仅为一个演示在这里插入图片描述
  2. rosnode list 列出活动节点rosnode list使用这个命令可以查看当前活动的节点在这里插入图片描述
  3. rosnode info 打印节点信息ronode info /person_pubronode info /person_sub这里打印出了发送与接受节点的信息,包含了以下内容:1. 节点名称2. 使用话题3. 接受/发送方合理的使用可以更方便理清节点间的关系

在这里插入图片描述

  1. rosnode machine 列出指定设备上节点
  2. rosnode kill 杀死某个节点rosnode kill /sub_personkill了订阅节点
  3. rosnode cleanup 清除不可连接的节点有时ctrl+c之后会导致部分节点不可使用,但仍在list中,此时可以用这个指令刷新一下

4.2 rostopic

先启动上方使用的两个节点
直接在终端中输入rostopic可以查看所有可以使用的指令
在这里插入图片描述

  1. rostopic list 显示当前在使用的所有话题rostopic list在这里插入图片描述例如这里使用的话题是/che
  2. rostopic echo扮演接收方的工作,可以在屏幕上打印出话题信息rostopic echo topic在这里插入图片描述例如这里可以验证发布方的信息是否正确
  3. rostopic info/type两个用处相同,显示话题通信的消息类型,其中info包含了type类型rostopic info topic例如这里使用的是Person msg消息类型
  4. rostopic find 寻找使用某消息类型的话题rostopic find lesson2/Person在这里插入图片描述例如这里寻找使用lesson2/Person消息类型的话题是什么
  5. rostopic pub 向某一话题发布消息rostopic pub topic例如这里向订阅节点发布信息

4.3 rosmsg

rosmsg是用于显示有关 ROS消息类型的 信息的命令行工具
也与上方相同,可以直接输入rosmsg就会显示出可用指令

  1. rosmsg list 列出所有消息类型在这里插入图片描述
  2. rosmsg show / info列出当前消息类型中包含的具体类型rosmsg show msg在这里插入图片描述---
  3. rosmsg package列出某个包下的所有消息rosmsg package pack在这里插入图片描述列出来turtlesim里的所有消息类型
  4. rosmsg packages列出包含某消息的功能包rosmsg package pack列出包含turtlesim/Pose消息类型的所有包在这里插入图片描述

4.4 rosservice

用来查询相关服务信息
我们先启动下之前配置好的自定义srv的server与client节点,具体配置可以查看这篇文章

rosrun lesson3_srv demo01_client.py
rosrun lesson3_srv demo01_server.py

在终端输入rosservice也可以看到参数列表
在这里插入图片描述

  1. rosservice list列出参数服务列表在这里插入图片描述
  2. rosservice call调用服务这里调用/sum2 tab补齐 传入两个参数rosservice call /sum2在这里插入图片描述
  3. rosservice args查看srv消息具体参数rosservice args /sum2在这里插入图片描述

其余使用方法和上面相同

4.5 rossrv

与rosmsg差不多,也是查看srv的具体类型
在这里插入图片描述

4.6 rosparam

我们先启动下turtle 方便验证
在这里插入图片描述

rosrun turtlesim turtlesim_node
  1. rosparam list列出参数列表在这里插入图片描述
  2. rosparam set设置具体参数数值rosparam set 参数类型请添加图片描述
  3. rosparam get获得具体参数数值
  4. rosparam delete删除参数
  5. rosparam load将参数加载到磁盘中
  6. rosparam dump从磁盘中加载参数

至此参数服务器通信及ros常用工具指令介绍结束

标签: python ros 开发语言

本文转载自: https://blog.csdn.net/qq_62839589/article/details/130650185
版权归原作者 ppeua 所有, 如有侵权,请联系我们删除。

“【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍”的评论:

还没有评论