精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

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

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

** 一個(gè)節(jié)點(diǎn)的誕生**

在建立連接之前,首先要有節(jié)點(diǎn)。

節(jié)點(diǎn)就是一個(gè)獨(dú)立的程序,它運(yùn)行起來后就是一個(gè)普通的進(jìn)程,與計(jì)算機(jī)中其它的進(jìn)程并沒有太大區(qū)別。

一個(gè)問題是:ROS中為什么把一個(gè)獨(dú)立的程序稱為“節(jié)點(diǎn)”

這是因?yàn)镽OS沿用了計(jì)算機(jī)網(wǎng)絡(luò)中“節(jié)點(diǎn)”的概念。

在一個(gè)網(wǎng)絡(luò)中,例如互聯(lián)網(wǎng),每一個(gè)上網(wǎng)的計(jì)算機(jī)就是一個(gè)節(jié)點(diǎn)。前面我們看到的客戶端、服務(wù)器這樣的稱呼,也是從計(jì)算機(jī)網(wǎng)絡(luò)中借用的。

下面來看一下節(jié)點(diǎn)是如何誕生的。我們?cè)诘谝淮问褂肦OS時(shí),一般都會(huì)照著官方教程編寫一個(gè)talker和一個(gè)listener節(jié)點(diǎn),以熟悉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函數(shù)里首先調(diào)用了init()函數(shù)初始化一個(gè)節(jié)點(diǎn),該函數(shù)的定義在init.cpp文件中。

當(dāng)我們的程序運(yùn)行到init()函數(shù)時(shí),一個(gè)節(jié)點(diǎn)就呱呱墜地了。

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

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

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

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

其中,network::init完成節(jié)點(diǎn)主機(jī)名、IP地址等的初始化,master::init獲取master的URI、主機(jī)號(hào)和端口號(hào)。

this_node::init定義節(jié)點(diǎn)的命名空間和節(jié)點(diǎn)的名字,沒錯(cuò),把我們給節(jié)點(diǎn)起的名字就存儲(chǔ)在這里。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;
  }
}

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

我們?cè)龠M(jìn)入node_handle.cpp文件,發(fā)現(xiàn)構(gòu)造函數(shù)NodeHandle::NodeHandle調(diào)用了自己的construct函數(shù)。然后,順藤摸瓜找到construct函數(shù),它里面又調(diào)用了ros::start()函數(shù)。

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

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

完成實(shí)例化后馬上又調(diào)用了各自的start()函數(shù),啟動(dòng)相應(yīng)的動(dòng)作。

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

一個(gè)節(jié)點(diǎn)的故事暫時(shí)就到這了。

TopicManager::instance()- >start();
ServiceManager::instance()- >start();
ConnectionManager::instance()- >start();
PollManager::instance()- >start();
XMLRPCManager::instance()- >start();
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7425

    瀏覽量

    87722
  • 節(jié)點(diǎn)
    +關(guān)注

    關(guān)注

    0

    文章

    217

    瀏覽量

    24386
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7519

    瀏覽量

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

    關(guān)注

    1

    文章

    276

    瀏覽量

    16967
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    SD啟動(dòng)卡插至評(píng)估板Micro SD卡槽。亦可通過SD升級(jí)卡或USB固化方式將系統(tǒng)固化至eMMC。 基于Python語言的通信演示 案例功能:基于Python語言,啟動(dòng)ROS節(jié)點(diǎn)發(fā)布與訂閱消息,實(shí)現(xiàn)
    發(fā)表于 07-09 11:38

    在STM32上運(yùn)行ROS節(jié)點(diǎn)——rosserial&stm32開發(fā)及調(diào)試方法 精選資料推薦

    rosserial+stm32開發(fā)及調(diào)試方法基本原理Ref: http://wiki.ros.org/rosserial簡(jiǎn)言之,rosserial提供一種嵌入式節(jié)點(diǎn)和運(yùn)行在主控PC上
    發(fā)表于 08-24 06:19

    Autolabor ROS驅(qū)動(dòng)模塊的節(jié)點(diǎn)有何功能

    Autolabor ROS驅(qū)動(dòng)模塊包含哪些?Autolabor ROS驅(qū)動(dòng)模塊的節(jié)點(diǎn)有何功能?
    發(fā)表于 09-23 08:08

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

    roscore來啟動(dòng)運(yùn)行ros節(jié)點(diǎn)必要的ROS Master和ROS parameter,運(yùn)行情況如下所示。原作者:武漢萬象奧科
    發(fā)表于 03-09 13:55

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

    。 基于Python語言的通信演示案例功能:基于Python語言,啟動(dòng)ROS節(jié)點(diǎn)發(fā)布與訂閱消息,實(shí)現(xiàn)訂閱消息節(jié)點(diǎn)與發(fā)布消息節(jié)點(diǎn)之間的實(shí)時(shí)通信。請(qǐng)將評(píng)估板上電啟動(dòng),執(zhí)行如下命令,配置評(píng)估
    發(fā)表于 11-30 16:01

    區(qū)塊鏈超級(jí)節(jié)點(diǎn)誕生與現(xiàn)狀分析

    超級(jí)節(jié)點(diǎn),即在采用DPOS共識(shí)機(jī)制的公鏈中,經(jīng)過持幣用戶投票選舉產(chǎn)生、享受,并負(fù)責(zé)打包與生產(chǎn)區(qū)塊的少數(shù)記賬節(jié)點(diǎn)。這個(gè)概念在18年年初迅速在區(qū)塊鏈行業(yè)走紅,乃至于成為許多新興公鏈的標(biāo)配,但實(shí)際上它所代表的DPOS共識(shí)機(jī)制已經(jīng)誕生
    發(fā)表于 02-14 13:33 ?1177次閱讀

    一個(gè)機(jī)器人操作系統(tǒng)(ROS)節(jié)點(diǎn)系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《一個(gè)機(jī)器人操作系統(tǒng)(ROS)節(jié)點(diǎn)系統(tǒng).zip》資料免費(fèi)下載
    發(fā)表于 07-06 10:49 ?1次下載
    一個(gè)機(jī)器人操作系統(tǒng)(<b class='flag-5'>ROS</b>)<b class='flag-5'>節(jié)點(diǎn)</b>系統(tǒng)

    ROS中的序列化實(shí)現(xiàn)

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

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

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

    ROS中XMLRPC是什么

    XMLRPC是什么? 關(guān)于ROS節(jié)點(diǎn)建立連接的技術(shù)細(xì)節(jié),官方文檔說的非常簡(jiǎn)單,在這里ROS Technical Overview。沒有基礎(chǔ)的同學(xué)看這個(gè)介紹必然還是不懂。 在ROS中,
    的頭像 發(fā)表于 09-14 17:40 ?960次閱讀

    ROS核心框架介紹

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

    ros的基本概念是什么

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

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

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

    ROS通信接口機(jī)制介紹

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

    移動(dòng)機(jī)器人與ROS操作系統(tǒng)原理與應(yīng)用

    ROS1不同的是,ROS2誕生的目的就是為了讓更多機(jī)器人使用,所以在設(shè)計(jì)上更加符合技術(shù)的發(fā)展方向,也運(yùn)用了很多最近的技術(shù)框架。
    發(fā)表于 01-02 12:28 ?536次閱讀
    移動(dòng)機(jī)器人與<b class='flag-5'>ROS</b>操作系統(tǒng)原理與應(yīng)用