<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 3.1 Node & Master ## 3.1.1 Node 在ROS的世界里,最小的進程單元就是節點(node)。一個軟件包里可以有多個可執行文件,可執行文件在運行之后就成了一個進程(process),這個進程在ROS中就叫做**節點**。 從程序角度來說,node就是一個可執行文件(通常為C++編譯生成的可執行文件、Python腳本)被執行,加載到了內存之中;從功能角度來說,通常一個node負責者機器人的某一個單獨的功能。由于機器人的功能模塊非常復雜,我們往往不會把所有功能都集中到一個node上,而會采用分布式的方式,把雞蛋放到不同的籃子里。例如有一個node來控制底盤輪子的運動,有一個node驅動攝像頭獲取圖像,有一個node驅動激光雷達,有一個node根據傳感器信息進行路徑規劃……這樣做可以降低程序發生崩潰的可能性,試想一下如果把所有功能都寫到一個程序中,模塊間的通信、異常處理將會很麻煩。 我們在1.4節打開了小海龜的運動程序和鍵盤控制程序,在1.5節同樣啟動了鍵盤運動程序,這每一個程序便是一個node。ROS系統中不同功能模塊之間的通信,也就是節點間的通信。我們可以把鍵盤控制替換為其他控制方式,而小海龜運動程序、機器人仿真程序則不用變化。這樣就是一種模塊化分工的思想。 ## 3.1.2 Master 由于機器人的元器件很多,功能龐大,因此實際運行時往往會運行眾多的node,負責感知世界、控制運動、決策和計算等功能。那么如何合理的進行調配、管理這些node?這就要利用ROS提供給我們的節點管理器master, master在整個網絡通信架構里相當于管理中心,管理著各個node。node首先在master處進行注冊,之后master會將該node納入整個ROS程序中。node之間的通信也是先由master進行“牽線”,才能兩兩的進行點對點通信。當ROS程序啟動時,第一步首先啟動master,由節點管理器處理依次啟動node。 ## 3.1.3 啟動master和node 當我們要啟動ROS時,首先輸入命令: $ roscore 此時ROS master啟動,同時啟動的還有`rosout`和`parameter server`,其中`rosout`是負責日志輸出的一個節點,其作用是告知用戶當前系統的狀態,包括輸出系統的error、warning等等,并且將log記錄于日志文件中,`parameter server`即是參數服務器,它并不是一個node,而是存儲參數配置的一個服務器,后文我們會單獨介紹。每一次我們運行ROS的節點前,都需要把master啟動起來,這樣才能夠讓節點啟動和注冊。 master之后,節點管理器就開始按照系統的安排協調進行啟動具體的節點。節點就是一個進程,只不過在ROS中它被賦予了專用的名字里——node。在第二章我們介紹了ROS的文件系統,我們知道一個package中存放著可執行文件,可執行文件是靜態的,當系統執行這些可執行文件,將這些文件加載到內存中,它就成為了動態的node。具體啟動node的語句是: $ rosrun pkg_name node_name 通常我們運行ROS,就是按照這樣的順序啟動,有時候節點太多,我們會選擇用launch文件來啟動,下一小節會有介紹。 Master、Node之間以及Node之間的關系如下圖所示: ![](https://img.kancloud.cn/b7/b9/b7b973b691e10aa96ee2feea55dcb7b6_853x534.png) ## 3.1.3 rosrun和rosnode命令 **rosrun命令的詳細用法如下**: $ rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS] rosrun將會尋找PACKAGE下的名為EXECUTABLE的可執行程序,將可選參數ARGS傳入。 例如在GDB下運行ros程序: $ rosrun --prefix 'gdb -ex run --args' pkg_name node_name **rosnode命令的詳細作用列表如下**: | rosnode命令 | 作用 | | :------: | :------: | | `rosnode list` | 列出當前運行的node信息 | | `rosnode info node_name` | 顯示出node的詳細信息 | | `rosnode kill node_name` | 結束某個node | | `rosnode ping` | 測試連接節點 | | `rosnode machine ` | 列出在特定機器或列表機器上運行的節點 | | `rosnode cleanup`| 清除不可到達節點的注冊信息| 以上命令中常用的為前三個,在開發調試時經常會需要查看當前node以及node信息,所以請記住這些常用命令。如果你想不起來,也可以通過`rosnode help`來查看`rosnode`命令的用法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看