【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/
目录
相关文章
|
4天前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
18 6
|
3天前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!
|
4天前
|
监控 网络安全 数据安全/隐私保护
Mac服务器ssh连接工具
Mac服务器ssh连接工具
12 2
|
8天前
|
运维 安全 网络安全
运维笔记:基于阿里云跨地域服务器通信
运维笔记:基于阿里云跨地域服务器通信
37 1
|
20天前
|
弹性计算 缓存 Linux
云服务器 ECS产品使用问题之如何修改游戏参数
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
5天前
|
Java
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
|
7天前
ROS 2 - Gazebo 通信入门教程
ROS 2 - Gazebo 通信入门教程
11 0
|
1月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
1月前
|
SQL DataWorks Java
DataWorks操作报错合集之在与某个数据库服务器建立或保持通信连接时遇到报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
20天前
|
弹性计算 前端开发 数据安全/隐私保护
云服务器 ECS产品使用问题之如何修改参数
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。

推荐镜像

更多