0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS中XMLRPC是什么

麦辣鸡腿堡 来源:古月居 作者:古月居 2023-09-14 17:40 次阅读

XMLRPC是什么?

关于ROS节点建立连接的技术细节,官方文档说的非常简单,在这里ROS Technical Overview。没有基础的同学看这个介绍必然还是不懂。

在ROS中,节点与节点之间的通信依靠节点管理器(master)牵线搭桥。

master像一个中介,它介绍节点们互相认识。一旦节点们认识了以后,master就完成自己的任务了,它就不再掺和了。

这也是为什么你启动节点后再杀死master,节点之间的通信依然保持正常的原因。

使用过电驴和迅雷而且研究过BitTorrent的同学对master的工作方式应该很熟悉,master就相当于Tracker服务器,它存储着其它节点的信息

我们每次下载之前都会查询Tracker服务器,找到有电影资源的节点,然后就可以与它们建立连接并开始下载电影了。

那么master是怎么给节点牵线搭桥的呢?ROS使用了一种叫XMLRPC的方式实现这个功能。

XMLRPC中的RPC的意思是远程过程调用(Remote Procedure Call)。

简单来说,远程过程调用的意思就是一个计算机中的程序(在我们这就是节点啦)可以调用另一个计算机中的函数,只要这两个计算机在一个网络中。

这是一种听上去很高大上的功能,它能让节点去访问网络中另一台计算机上的程序资源。

XMLRPC中的XML我们在1.1节讲消息序列化时提到了,它就是一种数据表示方式而已。

所以合起来,XMLRPC的意思就是把由XML表示的数据发送给其它计算机上的程序运行。

运行后返回的结果仍然以XML格式返回回来,然后我们通过解析它(还原回纯粹的数据)就能干别的事了。

想了解更多XMLRPC的细节可以看这个XML-RPC:概述。

举个例子,一个XMLRPC请求是下面这个样子的。因为XMLRPC是基于HTTP协议的,所以下面的就是个标准的HTTP报文。

POST / HTTP/1.1
User-Agent: XMLRPC++ 0.7
Host: localhost:11311
Content-Type: text/xml
Content-length: 78


< ?xml version="1.0"? >
< methodCall >
   < methodName >circleArea< /methodName >
      < params >
         < param >
            < value >< double >2.41< /double >< /value >
         < /param >
      < /params >
< /methodCall >

如果你没学过HTTP协议,看上面的语句可能会感到陌生。《图解HTTP》这本小书可以让你快速入门。

HTTP报文比较简单,它分两部分,前半部分是头部,后半部分是主体。

头部和主体之间用空行分开,这都是HTTP协议规定的标准。

上面主体部分的格式就是XML,见的多了你就熟悉了。

所以,XMLRPC传递的消息其实就是主体部分是XML格式的HTTP报文而已,没什么神秘的。

对应客户端一个XMLRPC请求,服务器端会执行它并返回一个响应,它也是一个HTTP报文,如下。

它的结构和请求一样,不再解释了。所以,XMLRPC跟我们上网浏览网页的过程其实差不多。

HTTP/1.1 200 OK
Date: Sat, 06 Oct 2001 23:20:04 GMT
Server: Apache.1.3.12 (Unix)
Connection: close
Content-Type: text/xml
Content-Length: 124


< ?xml version="1.0"? >
< methodResponse >
   < params >
      < param >
         < value >< double >18.24668429131< /double >< /value >
      < /param >
   < /params >
< /methodResponse >
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 节点
    +关注

    关注

    0

    文章

    180

    浏览量

    23950
  • 管理器
    +关注

    关注

    0

    文章

    198

    浏览量

    18154
  • ROS
    ROS
    +关注

    关注

    0

    文章

    167

    浏览量

    16290
收藏 人收藏

    评论

    相关推荐

    超详细 ROS安装教程

    ROS Kinetic Kame博主分别用过 Indigo 和 Kinetic,其实在使用过程差距并不大,除了极少数第三方库,只支持 Indigo版本,毕竟 Kinetic 刚刚发布,存在一些
    发表于 05-16 19:35

    如何在ROS2运行小乌龟呢

    ROS2运行小乌龟,其实主要就是安装两个工具,turtlesim和rqt。A: 安装turtlesim。输入【sudo apt update】输入【sudo apt install
    发表于 11-05 06:08

    什么是ROS?如何学习ROS

    ROS?如何学习ROS
    发表于 11-11 07:21

    ROS简介

    ROS简介1、什么是ROS2、ROS产生、发展和壮大的原因和意义二、在Ubuntu系统,安装对应版本的ROS软件1、确定Ubuntu配置2、添加ROS软件源3、添加密钥4、安装
    发表于 12-17 08:24

    什么是ROSROS产生、发展和壮大的原因和意义

    ROS)入门(嵌入式系统应用开发)一、ROS 基本问题1. 什么是 ROS2. ROS 产生、发展和壮大的原因和意义二、安装 ROS 及体验小海龟例子1. 安装 ROS一、
    发表于 12-17 06:08

    怎样去使用ROS的launch启动文件呢

    ROS的launch启动文件呢?ROS的launch启动文件该怎样去使用呢?
    发表于 02-14 07:23

    RK3308-CC-PLUS板子启用ROS模块后交叉编译,menuconfig没有ROS选项怎么解决?

    ROS模块后交叉编译,menuconfig没有ROS选项怎么解决?
    发表于 03-09 06:23

    ROS与STM32通信

    ROS与STM32通信2020.8.1主要内容制作ROS包,将控制命令传给STM32,并将接收到的数据作为话题进行发布STM32接收数据并将姿态数据传回给ROS接收:期望角速度、期望线速度返回:实际
    发表于 12-24 19:00 11次下载
    <b>ROS</b>与STM32通信

    基于FreeRTOS的micro(微型)ROS

    应该有部分是做ROS相关的工作,今天就来分享一个基于FreeRTOS的micro(微型)
    的头像 发表于 09-25 14:16 1695次阅读
    基于FreeRTOS的micro(微型)<b>ROS</b>

    Micro-ROS:把ROS2放在MCU上

    ROS便是为机器人在研发的过程的代码复用提供支持的开源框架,大量的机器人开源项目,从感知到控制、从定位到构图、从导航到可视化,几乎都使用ROS作为基础。   Micro-ROS从何而来?   Micro-ROS实际上是从ROS2优化而来的
    的头像 发表于 04-07 07:13 5769次阅读

    ROS基本介绍

    ROS机器人操作系统,ROS需要运行在一个操作系统上,这个操作系统常用的就是Linux,而公司用的就是Ubuntu,所以Ubuntu-ROS组合就是实习的主要学习内容了。所以我就新开了一个坑,网络上ROS的资源很丰富,我在此只是用以分享学习笔记。
    的头像 发表于 05-19 17:07 788次阅读
    <b>ROS</b>基本介绍

    ROS的序列化实现

    ROS。我们发现,ROS没有采用第三方的序列化工具,而是选择自己实现,代码在roscpp_core项目下的roscpp_serialization,见下图。这个功能涉及的代码量
    的头像 发表于 09-14 17:26 289次阅读

    ROS是如何实现XMLRPC

    XMLRPC的C++代码在下载后的ros_comm-noetic-develutilitiesxmlrpcpp路径下。 还好,整个工程不算太大。XMLRPC分成客户端和服务器端两大部分。 咱们先看
    的头像 发表于 09-14 17:45 303次阅读

    节点是如何调用XMLRPC

    XMLRPC建立连接 在一个节点刚启动的时候,它并不知道其它节点的存在,更不知道它们在交谈什么,当然也就谈不上通信。 所以,它要先与master对话查询其它节点的状态,然后再与其它节点通信
    的头像 发表于 09-14 17:52 371次阅读
    节点是如何调用<b>XMLRPC</b>的

    ROS节点管理器master是如何被启动的

    XMLRPC服务器后,接下来就调用了_init_runner()函数。 def
    的头像 发表于 09-14 18:03 516次阅读