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

本文涉及的产品
资源编排,不限时长
简介: 相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。

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


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


3c9de86f742b45f2b76d3817661785bf.jpg


0.参数服务器概念


相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。


f91f9d6cb6af4bc9897bd2d00e93c838.png


而在参数服务器中: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})


ae60e03294a942e58353c31b739ed6be.png


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,若有则返回这个key


key=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


fa90027bc6ad4f1d912d505a0f0d3eaa.png


直接使用rosnode可以查看参数列表

fb9aea655bdd46e98d21db4c8e8477a2.png


1.rosnode ping 测试到节点的连接状态


rosnode ping /person_pub


这里/pub_person为发送消息的节点,仅为一个演示


36b6de5e262f4f5ca5cf925d5def0e4a.png


2.rosnode list 列出活动节点


rosnode list


使用这个命令可以查看当前活动的节点


778e9d0cdcf045068099942787562a83.png


3.rosnode info 打印节点信息


ronode info /person_pub
ronode info /person_sub


这里打印出了发送与接受节点的信息,包含了以下内容:

1.节点名称

2.使用话题

3.接受/发送方


合理的使用可以更方便理清节点间的关系

84ff4cffdd2542afa75d9ade04e54eb6.png


4.rosnode machine 列出指定设备上节点

5.rosnode kill 杀死某个节点


rosnode kill /sub_person


kill了订阅节点


6.rosnode cleanup 清除不可连接的节点

有时ctrl+c之后会导致部分节点不可使用,但仍在list中,此时可以用这个指令刷新一下


4.2 rostopic


先启动上方使用的两个节点

直接在终端中输入rostopic可以查看所有可以使用的指令


5dfcb519c4154b6f93ee2362e307a04f.png


1.rostopic list 显示当前在使用的所有话题


rostopic list

87a21e1e90e14b879ab0e4a13620460e.png


例如这里使用的话题是/che


2.rostopic echo扮演接收方的工作,可以在屏幕上打印出话题信息


rostopic echo topic

41573cace9c743b69fa0e8c966ff1921.png


例如这里可以验证发布方的信息是否正确


3.rostopic info/type两个用处相同,显示话题通信的消息类型,其中info包含了type类型


rostopic info topic


例如这里使用的是Person msg消息类型


4.rostopic find 寻找使用某消息类型的话题


rostopic find lesson2/Person


2e975492a6c54620b7d514745438777e.png


例如这里寻找使用lesson2/Person消息类型的话题是什么


5.rostopic pub 向某一话题发布消息


rostopic pub topic


例如这里向订阅节点发布信息


4.3 rosmsg


rosmsg是用于显示有关 ROS消息类型的 信息的命令行工具

也与上方相同,可以直接输入rosmsg就会显示出可用指令


1.rosmsg list 列出所有消息类型


cb59f1e43023493a9b696d4ff9bb47a0.png


2.rosmsg show / info列出当前消息类型中包含的具体类型


rosmsg show msg

d734d020bf8147a9b2865915bc747485.png


3.rosmsg package列出某个包下的所有消息


rosmsg package pack

14aca58f3e19445a8537df362ee391af.png


列出来turtlesim里的所有消息类型


4.rosmsg packages列出包含某消息的功能包


rosmsg package pack


列出包含turtlesim/Pose消息类型的所有包


f4c3076ccc824492bc23fe5ab7cd12bb.png


4.4 rosservice


用来查询相关服务信息

我们先启动下之前配置好的自定义srv的server与client节点,具体配置可以查看这篇文章

rosrun lesson3_srv demo01_client.py
rosrun lesson3_srv demo01_server.py


在终端输入rosservice也可以看到参数列表


19857321b02441cb9e32d94ec886ac6f.png


1.rosservice list列出参数服务列表


076ec50d43644c4d940acdb80ac0ed25.png


2.rosservice call调用服务

这里调用/sum2 tab补齐 传入两个参数

rosservice call /sum2

d7fe7aaf45f448e687169451b5c8abea.png


3.rosservice args查看srv消息具体参数


rosservice args /sum2

40615bb441fd42b3ae817bff90f9b003.png


其余使用方法和上面相同


4.5 rossrv


与rosmsg差不多,也是查看srv的具体类型


3c02b0dbdc3146edbab4cb6b7d5ce76c.png


4.6 rosparam


我们先启动下turtle 方便验证


d06aa518cd4142488f2f86e264771c1f.png


rosrun turtlesim turtlesim_node


1.rosparam list列出参数列表


497df1f5cc744d849e33cf0871e08fb8.png


2.rosparam set设置具体参数数值


rosparam set 参数类型


a2f6f0de6caa4a4c827b0dce34dc52fe.png


3.rosparam get获得具体参数数值


4.rosparam delete删除参数


5.rosparam load将参数加载到磁盘中


6.rosparam dump从磁盘中加载参数


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

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
14小时前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
11 4
|
1天前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
18 5
|
14小时前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
13 3
|
1天前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
14 4
|
1天前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
15 4
|
1天前
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
8 2
|
3天前
|
存储 弹性计算 固态存储
阿里云服务器Entry云盘和ESSD Entry云盘区别、性能参数及使用常见问题参考
在我们选择阿里云服务器的时候,有部分云服务器同时支持ESSD Entry云盘和ESSD云盘,有的初次接触阿里云服务器云盘的用户可能还不是很清楚他们之间的区别,因此不知道选择哪种更好更能满足自己场景的需求,本文为大家介绍一下阿里云服务器Entry云盘和ESSD Entry云盘各自的性能参数区别及使用过程中的一些常见问题,以供选择参考。
|
15小时前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
6 1
|
3天前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
13 0
|
2月前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
81 0

推荐镜像

更多