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

发布者:清新天空最新更新时间:2023-09-14 来源: 古月居作者: Lemontree 手机看文章 扫描二维码
随时随地手机看文章

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

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

def start(self, auto_rminate=True):
        self.logger.info("starng launch parent run")
        # lo config, start XMLRPC serve and process monitor
        try:
            self._start_infrastructure()
        except:
            self._stop_infrastructure()
        # Initialize the tual 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文件引用了中用于创建新的进程的process模块。

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

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

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

shutdown(self, caller_id, msg='')
getUri(self, caller_id)
getPid(self, caller_id)
deletePa(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)
引用地址:ROS中节点管理器master是如何被启动的

上一篇:如何在ROS中检查保存log的文件夹有多大
下一篇:XMLRPC服务器如何启动

小广播
最新机器人文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关:

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved