0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ROS中節(jié)點管理器master是如何被啟動的

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-09-14 18:03 ? 次閱讀

我們來看看節(jié)點管理器master是如何被啟動的,再回到parent.pystart()函數(shù),如下。

我們發(fā)現(xiàn)它啟動了XMLRPC服務(wù)器后,接下來就調(diào)用了_init_runner()函數(shù)。

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()函數(shù)實例化了ROSLaunchRunner類,這個類的定義在launch.py里。

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

實例化完成后,parent.pystart()函數(shù)就調(diào)用了它的launch()函數(shù)。

我們打開launch.py文件,找到launch()函數(shù),發(fā)現(xiàn)它又調(diào)用了自己類中的_setup()函數(shù),而_setup()函數(shù)又調(diào)用了_launch_master()函數(shù)。

看名字就能猜出來,_launch_master()函數(shù)肯定是啟動節(jié)點管理器master的,它調(diào)用了create_master_process函數(shù),這個函數(shù)在nodeprocess.py里。

所以我們打開nodeprocess.py,create_master_process函數(shù)使用了LocalProcess類。這個類繼承自Process類。nodeprocess.py文件引用了python中用于創(chuàng)建新的進程的subprocess模塊。

create_master_process函數(shù)實例化LocalProcess類用的是’rosmaster’,即ros_comm-noetic-develtoolsrosmaster中的包。

main.py文件中的rosmaster_main函數(shù)使用了master.py中的Master類。

Master類中又用到了master_api.py中的ROSMasterHandler類,這個類包含所有的XMLRPC服務(wù)器接收的遠程調(diào)用,一共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)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 管理器
    +關(guān)注

    關(guān)注

    0

    文章

    239

    瀏覽量

    18434
  • MASTER
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

    11220
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    276

    瀏覽量

    16887
收藏 人收藏

    評論

    相關(guān)推薦

    ROS讓機器人開發(fā)更便捷,基于RK3568J+Debian系統(tǒng)發(fā)布!

    SD啟動卡插至評估板Micro SD卡槽。亦可通過SD升級卡或USB固化方式將系統(tǒng)固化至eMMC。 基于Python語言的通信演示 案例功能:基于Python語言,啟動ROS節(jié)點發(fā)
    發(fā)表于 07-09 11:38

    問GPIB卡安裝正確,為什么在資源管理器沒有板卡GPIB0?

    問GPIB卡安裝正確,為什么在資源管理器沒有板卡GPIB0?本人已利用GPIB節(jié)點和visa函數(shù)可以與儀器通信,但在資源管理器中就是沒有GPIB的
    發(fā)表于 02-20 20:19

    從終端啟動許可證管理器

    你好,目前我正試圖直接從終端啟動xilinx許可證管理器。我知道您可以通過在終端內(nèi)運行命令“ise”來啟動ISE。是否也可以這樣啟動許可證管理器
    發(fā)表于 12-11 11:18

    怎樣去使用ROS的launch啟動文件呢

    怎樣去使用ROS的launch啟動文件呢?ROS的launch啟動文件該怎樣去使用呢?
    發(fā)表于 02-14 07:23

    搭建ARM+ROS的硬件載體之ROS的移植及測試方法

    roscore來啟動運行ros節(jié)點必要的ROS MasterROS parameter,運行情
    發(fā)表于 03-09 13:55

    ROS讓機器人開發(fā)更便捷,基于RK3568J+Debian系統(tǒng)發(fā)布!

    產(chǎn)工業(yè)核心板,主頻高達2.0GHz。核心板CPU、ROM、RAM、電源、晶振、連接等所有器件均采用國產(chǎn)工業(yè)級方案,國產(chǎn)化率100%,并提供國產(chǎn)化率認證報告。 我司RK3568J平臺提供的ROS系統(tǒng)啟動
    發(fā)表于 11-30 16:01

    Protel DXP設(shè)計管理器

    protel DXP的所有電路設(shè)計工作都必須在DesignExplorer(設(shè)計管理器)中進行,同時設(shè)計管理器也是ProtelDXP啟動后的主工作界面。設(shè)計管理器具有友好的人機界面,而
    發(fā)表于 06-01 08:39 ?0次下載

    Windows XP系統(tǒng)任務(wù)管理器幾個另類用法

    Windows XP系統(tǒng)任務(wù)管理器幾個另類用法 Windows任務(wù)管理器可以用來察看當(dāng)前運行的程序、啟動的進程、CPU及內(nèi)存使用情況等信息,這為
    發(fā)表于 02-23 13:55 ?952次閱讀

    C#教程之啟動管理器

    C#教程之啟動管理器,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 14:46 ?3次下載

    數(shù)據(jù)庫的項目管理器是什么?項目管理器詳細資料總結(jié)

    項目管理器是VFP集成開發(fā)環(huán)境的一個重要組成部分。項目是文件、數(shù)據(jù)、文檔和對象的集合,項目管理器通過項目文件(.PJX和.PJT)對項目進行管理。VFP所有
    發(fā)表于 09-18 17:43 ?5次下載
    數(shù)據(jù)庫的項目<b class='flag-5'>管理器</b>是什么?項目<b class='flag-5'>管理器</b>詳細資料總結(jié)

    項目管理器及其操作的詳細資料說明

    “項目管理器”的啟動、功能、組成、定制以及操作,“項目管理器”包括6個文件選項卡,其中“全部”文件選項卡,將顯示應(yīng)用的所有文件對象大類,即“數(shù)據(jù)”、“文檔”、“類庫”、“代碼”和“其
    發(fā)表于 03-12 14:27 ?16次下載

    ROS是如何設(shè)計的 ROS客戶端庫

    為什么需要客戶端。 原因是,節(jié)點與主節(jié)點master之間的關(guān)系是client/server,這時每個節(jié)點都是一個客戶端(client),而maste
    的頭像 發(fā)表于 09-14 17:29 ?764次閱讀
    <b class='flag-5'>ROS</b>是如何設(shè)計的 <b class='flag-5'>ROS</b>客戶端庫

    ROS節(jié)點是什么 如何誕生的

    節(jié)點” 這是因為ROS沿用了計算機網(wǎng)絡(luò)節(jié)點”的概念。 在一個網(wǎng)絡(luò),例如互聯(lián)網(wǎng),每一個上網(wǎng)的計算機就是一個
    的頭像 發(fā)表于 09-14 17:35 ?905次閱讀

    ROSXMLRPC是什么

    的通信依靠節(jié)點管理器master)牽線搭橋。 master像一個中介,它介紹節(jié)點們互相認識。一旦節(jié)點
    的頭像 發(fā)表于 09-14 17:40 ?859次閱讀

    ros的基本概念是什么

    基本概念: ROS是一個用于在不同進程間匿名的發(fā)布、訂閱、傳遞信息的中間件。 ROS2系統(tǒng)的核心部分是ROS網(wǎng)絡(luò)(ROS Graph)。 ROS
    的頭像 發(fā)表于 11-27 11:21 ?1573次閱讀