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

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

3天内不再提示

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

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

我们来看看节点管理器master是如何被启动的,再回到parent.pystart()函数,如下。

我们发现它启动了XMLRPC服务器后,接下来就调用了_init_runner()函数。

def start(self, auto_terminate=True):
        self.logger.info("starting roslaunch parent run")
        # load config, start XMLRPC servers and process monitor
        try:
            self._start_infrastructure()
        except:
            self._stop_infrastructure()
        # Initialize the actual runner. 
        self._init_runner()
        # Start the launch
        self.runner.launch()

init_runner()函数实例化了ROSLaunchRunner类,这个类的定义在launch.py里。

def _init_runner(self):
         self.runner = roslaunch.launch.ROSLaunchRunner(self.run_id, self.config, server_uri=self.server.uri, ...)

实例化完成后,parent.pystart()函数就调用了它的launch()函数。

我们打开launch.py文件,找到launch()函数,发现它又调用了自己类中的_setup()函数,而_setup()函数又调用了_launch_master()函数。

看名字就能猜出来,_launch_master()函数肯定是启动节点管理器master的,它调用了create_master_process函数,这个函数在nodeprocess.py里。

所以我们打开nodeprocess.py,create_master_process函数使用了LocalProcess类。这个类继承自Process类。nodeprocess.py文件引用了python中用于创建新的进程的subprocess模块。

create_master_process函数实例化LocalProcess类用的是’rosmaster’,即ros_comm-noetic-develtoolsrosmaster中的包。

main.py文件中的rosmaster_main函数使用了master.py中的Master类。

Master类中又用到了master_api.py中的ROSMasterHandler类,这个类包含所有的XMLRPC服务器接收的远程调用,一共24个,如下。

shutdown(self, caller_id, msg='')
getUri(self, caller_id)
getPid(self, caller_id)
deleteParam(self, caller_id, key)
setParam(self, caller_id, key, value)
getParam(self, caller_id, key)
searchParam(self, caller_id, key)
subscribeParam(self, caller_id, caller_api, key)
unsubscribeParam(self, caller_id, caller_api, key)
hasParam(self, caller_id, key)
getParamNames(self, caller_id)
param_update_task(self, caller_id, caller_api, param_key, param_value)
_notify_topic_subscribers(self, topic, pub_uris, sub_uris)
registerService(self, caller_id, service, service_api, caller_api)
lookupService(self, caller_id, service)
unregisterService(self, caller_id, service, service_api)
registerSubscriber(self, caller_id, topic, topic_type, caller_api)
unregisterSubscriber(self, caller_id, topic, caller_api)
registerPublisher(self, caller_id, topic, topic_type, caller_api)
unregisterPublisher(self, caller_id, topic, caller_api)
lookupNode(self, caller_id, node_name)
getPublishedTopics(self, caller_id, subgraph)
getTopicTypes(self, caller_id) 
getSystemState(self, caller_id)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 管理器
    +关注

    关注

    0

    文章

    198

    浏览量

    18154
  • MASTER
    +关注

    关注

    0

    文章

    55

    浏览量

    11034
  • ROS
    ROS
    +关注

    关注

    0

    文章

    167

    浏览量

    16290
收藏 人收藏

    评论

    相关推荐

    问GPIB卡安装正确,为什么在资源管理器没有板卡GPIB0?

    管理器没有板卡GPIB0?本人已利用GPIB节点和visa函数可以与仪器通信,但在资源管理器中就是没有GPIB的管理,是因为用的驱动版本低吗?GPIB卡驱动是2.3的版本,同时它发布时资源管理器是3.1的版本,而现在用的是4.5版本,和这个
    发表于 02-20 20:19

    事件管理器的使用

    管理器A的定时1和事件管理器B的定时3的计数保持同步计数
    发表于 09-19 16:25

    从终端启动许可证管理器

    启动xilinx许可证管理器。我知道您可以通过在终端内运行命令“ise”来启动ISE。是否也可以这样启动许可证管理器?我正在尝试修改
    发表于 12-11 11:18

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

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

    RT-Thread实时操作系统与ROS2是怎样进行通信的

    节点可以提供一些服务供其他节点调用。于是有了 ROS 之后,做嵌入式的同学只需要把传感信息 (message) 发布出去,做算法的同学订阅自己需要的话题 (topic),作为算法输入
    发表于 04-01 11:38

    搭建ARM+ROS的硬件载体之ROS的移植及测试方法

    启动运行ros节点必要的ROS MasterROS parameter,运行情况如下所示。原作者:武汉万象奥科
    发表于 03-09 13:55

    Protel DXP设计管理器

    管理器)中进行,同时设计管理器也是ProtelDXP启动后的主工作界面。设计管理器具有友好的人机界面,而且设计功能强大,使
    发表于 06-01 08:39 58次下载

    C#教程之启动管理器

    启动管理器,很好的C#资料,快来学习吧。
    发表于 04-20 14:46 3次下载

    数据库的项目管理器是什么?项目管理器详细资料总结

    管理器是VFP集成开发环境的一个重要组成部分。项目是文件、数据、文档和对象的集合,项目管理器通过项目文件(.PJX和.PJT)对项目进行管理。VFP所有管理功能所包含的信息和数据都存储在各种
    发表于 09-18 17:43 5次下载
    数据库的项目<b>管理器</b>是什么?项目<b>管理器</b>详细资料总结

    项目管理器及其操作的详细资料说明

    管理器”的启动、功能、组成、定制以及操作,“项目管理器”包括6个文件选项卡,其中“全部”文件选项卡,将显示应用的所有文件对象大类,即“数据”、“文档”、“类库”、“代码”和“其他”,项目管理器是Visual FoxPro的“控制中心”。
    发表于 03-12 14:27 16次下载

    Windows XP系统任务管理器几个另类用法

    管理器几个另类用法 Windows任务
    发表于 02-23 13:55 876次阅读

    ROS是如何设计的 ROS客户端库

    节点与主节点master之间的关系是client/server,这时每个节点都是一个客户端(client),而master自然就是服务端(server)。 那客户端库
    的头像 发表于 09-14 17:29 339次阅读
    <b>ROS</b>是如何设计的 <b>ROS</b>客户端库

    ROS节点是什么 如何诞生的

    节点” 这是因为ROS沿用了计算机网络节点”的概念。 在一个网络,例如互联网,每一个上网的计算机就是一个节点。前面我们看到的客户端、服务这样的称呼,也是从计算机网络借用的。 下面来看一下节点是如何诞生的。我们在第一
    的头像 发表于 09-14 17:35 332次阅读

    ROSXMLRPC是什么

    节点管理器master)牵线搭桥。 master像一个中介,它介绍节点们互相认识。一旦节点们认识了以后,master就完成自己的任务了,它就不再掺和了。 这也是为什么你启动节点后再杀死master
    的头像 发表于 09-14 17:40 343次阅读

    节点是如何调用XMLRPC的

    节点master对话使用的就是XMLRPC。 从这一点来看,master节点管理器确实名副其实,它是一个大管家,给刚出生的节点提供服务。 下面我们以两个节点:talker和listener为例,介绍其通过XMLRPC建立通信连接的过程,如下图所示。 t
    的头像 发表于 09-14 17:52 373次阅读
    <b>节点</b>是如何调用XMLRPC的