【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入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
目录
相关文章
|
4月前
|
并行计算 机器人 网络安全
阿里云服务器上部署ROS2+Isaac-Sim4.5实现LeRobot机械臂操控
本文介绍了如何在阿里云上申请和配置一台GPU云服务器,并通过ROS2与Isaac Sim搭建机械臂仿真平台。内容涵盖服务器申请、系统配置、远程连接、环境搭建、仿真平台使用及ROS2操控程序的编写,帮助开发者快速部署机器人开发环境。
1512 4
|
8月前
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
379 10
|
9月前
|
负载均衡 监控 架构师
「从零开始的云上建筑师速成班:用ROS编辑器搭个会呼吸的服务器小屋」
云上建筑师速成秘籍:用阿里云ROS架构编辑器像搭乐高一样玩转服务器!零代码拖拽资源+配置指南,从部署到拆家一条龙服务~
「从零开始的云上建筑师速成班:用ROS编辑器搭个会呼吸的服务器小屋」
|
消息中间件 监控 数据可视化
ROS Terraform 托管服务与原生 Terraform 对比:选择最适合你的 IaC 工具
本文详细介绍了阿里云资源编排服务(ROS)提供的Terraform托管服务,对比了ROS与Terraform的原生能力,帮助用户根据需求选择合适的IaC工具。
847 54
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
154 1
|
弹性计算 JSON 关系型数据库
使用ROS模板基于ECS和RDS创建WordPress环境
使用ROS模板基于ECS和RDS创建WordPress环境
|
传感器 自然语言处理 机器人
ROS2教程03 ROS2节点
本文是关于ROS2(机器人操作系统2)节点的教程,涵盖了节点的概念、特性、使用方法,以及如何编写、测试和使用ROS2节点相关的命令行工具。文章介绍了节点的独立性、任务执行、跨硬件分布和多语言编写能力。详细解释了如何启动节点、查看节点信息、编写节点代码(包括面向过程和面向对象的方法),以及如何为功能包添加依赖和入口点。此外,还探讨了重映射节点名称和使用节点命令行工具的方法,如 `ros2 node info` 和 `ros2 node list`。适合已安装ROS2 Humble和Ubuntu 22.04操作系统,并具有Shell基础知识的读者学习。
870 1
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
722 0
|
17天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
147 10
|
14天前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。

热门文章

最新文章

推荐镜像

更多
  • ros