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

发布时间:2023-09-14  

我们来看看节点管理器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)
文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    主要构成是串接于电源与被控电机之间的三相反并联闸管及其电子控制电路。 软启动器的启动方式可以分为以下几种: 1. 定时启动方式:在软启动器控制器上设置启动时间,软启动器在预定时间过后开始工作,逐步......
    三菱变频器的启动方式和频率设置方式大全; 如果每个电气工作人员把每天看美女跳舞的时间,花个1/10的时间来学习电工技术,那么......
    通道使用。创建两个节点,TN1, TN2,并使用循环模式,指定首个循环节点为 TN1。 图3. Linked List TN1 节点配置,由此节点结合 TIM 来产生 PWM,并滤波成正弦信号: (1......
    芯片功能丰富,配置灵活,包括使能功能、可调软启动、可调开关频率、可调输出电压、外置环路补偿、电源正常指示,支持频率同步、预偏置启动和完善的保护功能。该芯片采用符合环保理念的 TQFN-3.5×3.5......
    芯片功能丰富,配置灵活,包括使能功能、可调软启动、可调开关频率、可调输出电压、外置环路补偿、电源正常指示,支持频率同步、预偏置启动和完善的保护功能。该芯片采用符合环保理念的 TQFN-3.5×3.5......
    芯片功能丰富,配置灵活,包括使能功能、可调软启动、可调开关频率、可调输出电压、外置环路补偿、电源正常指示,支持频率同步、预偏置启动和完善的保护功能。该芯片采用符合环保理念的 TQFN-3.5×3.5......
    能够从bootloader跳转,但是运行不正常,咨询了厂家技术人员,技术人员反馈可以采用分散加载的方式进行排查,也就是让芯片直接在主程序烧录的位置启动,分散加载的教程网上比较多,主要需要设置烧录域和启动域地址,还有VTOR......
    自举程序存放在System memory(系统存储器)中,我们通过配置启动,选择启动系统存储器就可以运行这段程序。 2STM32启动配置 STM32有三种启动模式: Main Flash memory......
    启动时会产生较大的起动电流,会对电机和电网造成一定的冲击。而变频电机可以采用软启动方式,逐步增加输出频率和电压,从而避免了启动时的冲击。   同时,变频器还可以通过设置启动......
    家分享一下关于自举程序的知识。 1关于自举程序 STM32中内嵌了一段自举程序,可能很多人不知道。 那段自举程序存放在System memory(系统存储器)中,我们通过配置启动,选择启动......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>