色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

ROS節點是什么 如何誕生的

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

** 一個節點的誕生**

在建立連接之前,首先要有節點。

節點就是一個獨立的程序,它運行起來后就是一個普通的進程,與計算機中其它的進程并沒有太大區別。

一個問題是:ROS中為什么把一個獨立的程序稱為“節點”

這是因為ROS沿用了計算機網絡中“節點”的概念。

在一個網絡中,例如互聯網,每一個上網的計算機就是一個節點。前面我們看到的客戶端、服務器這樣的稱呼,也是從計算機網絡中借用的。

下面來看一下節點是如何誕生的。我們在第一次使用ROS時,一般都會照著官方教程編寫一個talker和一個listener節點,以熟悉ROS的使用方法。

我們以talker為例,它的部分代碼如下。

#include "ros/ros.h"
int main(int argc, char **argv)
{
  /* You must call one of the versions of ros::init() before using any other part of the ROS system. */
  ros::init(argc, argv, "talker");
  ros::NodeHandle n;

main函數里首先調用了init()函數初始化一個節點,該函數的定義在init.cpp文件中。

當我們的程序運行到init()函數時,一個節點就呱呱墜地了。

而且在出生的同時我們還順道給他起好了名字,也就是"talker"。

名字是隨便起的,但是起名是必須的。

我們進入init()函數里看看它做了什么,代碼如下,看上去還是挺復雜的。它初始化了一個叫g_global_queue的數據,它的類型是CallbackQueuePtr。

這是個相當重要的類,叫“回調隊列”,后面還會見到它。init()函數還調用了network、master、this_node、file_log、param這幾個命名空間里的init初始化函數各自實現一些變量的初始化,這些變量都以g開頭,例如g_host、g_uri,用來表明它們是全局變量。

其中,network::init完成節點主機名、IP地址等的初始化,master::init獲取master的URI、主機號和端口號。

this_node::init定義節點的命名空間和節點的名字,沒錯,把我們給節點起的名字就存儲在這里。file_log::init初始化日志文件的路徑。

void init(const M_string& remappings, const std::string& name, uint32_t options)
{
  if (!g_atexit_registered) {
    g_atexit_registered = true;
    atexit(atexitCallback);
  }
  if (!g_global_queue) {
    g_global_queue.reset(new CallbackQueue);
  }
  if (!g_initialized) {
    g_init_options = options;
    g_ok = true;
    ROSCONSOLE_AUTOINIT;
    // Disable SIGPIPE
#ifndef WIN32
    signal(SIGPIPE, SIG_IGN);
#else
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 0), &wsaData);
#endif
    check_ipv6_environment();
    network::init(remappings);
    master::init(remappings);
    // names:: namespace is initialized by this_node
    this_node::init(name, remappings, options);
    file_log::init(remappings);
    param::init(remappings);
    g_initialized = true;
  }
}

完成初始化以后,就進入下一步ros::NodeHandle n定義句柄。

我們再進入node_handle.cpp文件,發現構造函數NodeHandle::NodeHandle調用了自己的construct函數。然后,順藤摸瓜找到construct函數,它里面又調用了ros::start()函數。

沒錯,我們又繞回到了init.cpp文件。

ros::start()函數主要實例化了幾個重要的類,如下。

完成實例化后馬上又調用了各自的start()函數,啟動相應的動作。

這些都做完了以后就可以發布或訂閱消息了。

一個節點的故事暫時就到這了。

TopicManager::instance()- >start();
ServiceManager::instance()- >start();
ConnectionManager::instance()- >start();
PollManager::instance()- >start();
XMLRPCManager::instance()- >start();
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7489

    瀏覽量

    87869
  • 節點
    +關注

    關注

    0

    文章

    218

    瀏覽量

    24422
  • 網絡
    +關注

    關注

    14

    文章

    7557

    瀏覽量

    88737
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17004
收藏 人收藏

    評論

    相關推薦

    ROS讓機器人開發更便捷,基于RK3568J+Debian系統發布!

    SD啟動卡插至評估板Micro SD卡槽。亦可通過SD升級卡或USB固化方式將系統固化至eMMC。 基于Python語言的通信演示 案例功能:基于Python語言,啟動ROS節點發布與訂閱消息,實現
    發表于 07-09 11:38

    在STM32上運行ROS節點——rosserial&stm32開發及調試方法 精選資料推薦

    rosserial+stm32開發及調試方法基本原理Ref: http://wiki.ros.org/rosserial簡言之,rosserial提供一種嵌入式節點和運行在主控PC上
    發表于 08-24 06:19

    Autolabor ROS驅動模塊的節點有何功能

    Autolabor ROS驅動模塊包含哪些?Autolabor ROS驅動模塊的節點有何功能?
    發表于 09-23 08:08

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

    roscore來啟動運行ros節點必要的ROS Master和ROS parameter,運行情況如下所示。原作者:武漢萬象奧科
    發表于 03-09 13:55

    ROS讓機器人開發更便捷,基于RK3568J+Debian系統發布!

    。 基于Python語言的通信演示案例功能:基于Python語言,啟動ROS節點發布與訂閱消息,實現訂閱消息節點與發布消息節點之間的實時通信。請將評估板上電啟動,執行如下命令,配置評估
    發表于 11-30 16:01

    區塊鏈超級節點誕生與現狀分析

    超級節點,即在采用DPOS共識機制的公鏈中,經過持幣用戶投票選舉產生、享受,并負責打包與生產區塊的少數記賬節點。這個概念在18年年初迅速在區塊鏈行業走紅,乃至于成為許多新興公鏈的標配,但實際上它所代表的DPOS共識機制已經誕生
    發表于 02-14 13:33 ?1185次閱讀

    一個機器人操作系統(ROS)節點系統

    電子發燒友網站提供《一個機器人操作系統(ROS)節點系統.zip》資料免費下載
    發表于 07-06 10:49 ?1次下載
    一個機器人操作系統(<b class='flag-5'>ROS</b>)<b class='flag-5'>節點</b>系統

    ROS中的序列化實現

    不是很多。 為什么ROS不使用現成的序列化工具或者庫呢?可能ROS誕生的時候(2007年),有些序列化庫可能還不存在(protobuf誕生于2008年),更有可能是
    的頭像 發表于 09-14 17:26 ?906次閱讀

    ROS是如何設計的 ROS客戶端庫

    實現通信的代碼在ros_comm包中,如下。 其中clients文件夾一共有127個文件,看來是最大的包了。 現在我們來到了ROS最核心的地帶。 客戶端這個名詞出現的有些突然,一個機器人操作系統里
    的頭像 發表于 09-14 17:29 ?862次閱讀
    <b class='flag-5'>ROS</b>是如何設計的 <b class='flag-5'>ROS</b>客戶端庫

    ROS中XMLRPC是什么

    XMLRPC是什么? 關于ROS節點建立連接的技術細節,官方文檔說的非常簡單,在這里ROS Technical Overview。沒有基礎的同學看這個介紹必然還是不懂。 在ROS中,
    的頭像 發表于 09-14 17:40 ?979次閱讀

    ROS核心框架介紹

    ROS核心框架 對于第一個問題,我也沒仔細研究過源碼,核心代碼基本由python和C++組成,運用了xmlrpc機制,每個運行的節點可以理解成一個進程。進程間通訊有些是共享內存的方式(比如
    的頭像 發表于 11-21 18:07 ?987次閱讀
    <b class='flag-5'>ROS</b>核心框架介紹

    ros的基本概念是什么

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

    利用 NVIDIA Isaac Transport for ROS 提升自定義 ROS 圖形性能

    NVIDIA Isaac Transport for ROS(NITROS) 是隨 ROS 2 Humble 加入的兩項硬件加速功能——類型適配和類型協商。 類型適配 使 ROS 節點
    的頭像 發表于 11-30 19:35 ?626次閱讀
    利用 NVIDIA Isaac Transport for <b class='flag-5'>ROS</b> 提升自定義 <b class='flag-5'>ROS</b> 圖形性能

    ROS通信接口機制介紹

    每一種通信種定義的接口,各種節點才能有機的聯系到一起。 語言無關 為了保證每一個節點可以使用不同語言編程,ROS將這些接口的設計做成了和語言無關的。 比如這里看到的int32表示32位的整型數,int64表示64位的整型數,bo
    的頭像 發表于 12-01 15:03 ?832次閱讀
    <b class='flag-5'>ROS</b>通信接口機制介紹

    移動機器人與ROS操作系統原理與應用

    ROS1不同的是,ROS2誕生的目的就是為了讓更多機器人使用,所以在設計上更加符合技術的發展方向,也運用了很多最近的技術框架。
    發表于 01-02 12:28 ?579次閱讀
    移動機器人與<b class='flag-5'>ROS</b>操作系統原理與應用
    主站蜘蛛池模板: 成人小视频免费在线观看| 公粗挺进了我的密道在线播放贝壳 | 翁公吮她的花蒂和奶水| 亚洲va精品中文字幕| 暖暖 日本 视频 在线观看免费| 欧美疯狂做受xxxxx喷水| 久久中文字幕无码A片不卡 | 国产成人在线播放视频| 亚洲综合久久一本伊伊区| 忘忧草在线影院WWW日本二| 欧美性最猛xxxx在线观看视频| 日本精油按摩| 麻豆久久婷婷五月国产| 红杏俱乐部| 玖玖爱在线播放| 亚洲日产2020乱码草莓毕| 99热国产这里只有精品9九| 国色天香社区视频免费高清3| 嗯啊不要老师| 亚洲精品无码国产爽快A片百度| jizzjizz3d动漫| 久久国产精品萌白酱免费| 色欲国产麻豆精品AV免费| 2021国产精品久久久久精品免费网| 国产精品人妻一区免费看8C0M| 女人被躁到高潮嗷嗷叫69| 亚洲精品人成电影网| 丰满少妇69激懒啪啪无码| 美女露出乳胸扒开尿口| 亚洲国产在线视频中文字| 国产97视频在线观看| 欧美日韩亚洲中字二区| 淫品色影院| 国语自产视频在线| 受喷汁红肿抽搐磨NP双性| seyeye免费高清观看| 毛片视频大全| 永久免费的污视频网站| 国产树林野战在线播放| 日韩 无码 手机 在线| 99麻豆精品国产人妻无码|