日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS通信架构(上)

發布時間:2024/4/24 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS通信架构(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

ROS通信架構(上)

?

徐凱_xp

2019.04.30 14:23:54字數 1,821閱讀 105

Node&Master

在ROS的世界里,最小的進程單元就是節點(node)。一個軟件包里可以有多個可執行文件,可執行文件在運行之后就成了一個進程(process),這個進程在ROS中就叫做節點。
例如有一個node來控制底盤輪子的運動,有一個node驅動攝像頭獲取圖像,有一個node驅動激光雷達,有一個node根據傳感器信息進行路徑規劃……這樣做可以降低程序發生崩潰的可能性

Master

由于機器人的元器件很多,功能龐大,因此實際運行時往往會運行眾多的node,負責感知世界、控制運動、決策和計算等功能。那么如何合理的進行調配、管理這些node?這就要利用ROS提供給我們的節點管理器master, master在整個網絡通信架構里相當于管理中心,管理著各個node。node首先在master處進行注冊,之后master會將該node納入整個ROS程序中。node之間的通信也是先由master進行“牽線”,才能兩兩的進行點對點通信。當ROS程序啟動時,第一步首先啟動master,由節點管理器處理依次啟動node。

啟動master和node

啟動ROS時,

roscore

此時ROS master啟動,同時啟動的還有 rosout 和 parameter server ,其中 rosout 是負責日志輸出的一個節點,其作用是告知用戶當前系統的狀態,包括輸出系統的error、warning等等,并且將log記錄于日志文件中, parameter server 即是參數服務器,它并不是一個node,而是存儲參數配置的一個服務器,后文我們會單獨介紹。每一次我們運行ROS的節點前,都需要把master啟動起來,這樣才能夠讓節點啟動和注冊。
具體啟動node的語句是:

rosrun pkg_name node_name

通常我們運行ROS,就是按照這樣的順序啟動,有時候節點太多,我們會選擇用launch文件來啟動,下一小節會有介紹。 Master、Node之間以及Node之間的關系如下圖所示:

?

rosrun &rosnode

rosrun命令的詳細用法如下:

rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS]

rosrun將會尋找PACKAGE下的名為EXECUTABLE的可執行程序
rosnode 命令的詳細作用列表如下:

?

?

以上命令中常用的為前三個,在開發調試時經常會需要查看當前node以及node信息

roslaunch

通常一個機器人運行操作時要開啟很多個node,并不需要每個節點依次進行rosrun,ROS為我們提供了一個命令能一次性啟動master和多個node。該命令是:

roslaunch pkg_name file_name.launch

roslaunch命令首先會自動進行檢測系統的roscore有沒有運行,也即是確認節點管理器是否在運行狀態中,如果master沒有啟動,那么roslaunch就會首先啟動master,然后再按照launch的規則執行。launch文件里已經配置好了啟動的規則。 所以 roslaunch 就像是一個啟動工具,能夠一次性把多個節點按照我們預先的配置啟動起來,減少我們在終端中一條條輸入指令的麻煩。
launch文件寫法及格式:

<launch> <!--根標簽--><node> <!--需要啟動的node及其參數--><include> <!--包含其他launch--><machine> <!--指定運行的機器--><env-loader> <!--設置環境變量--><param> <!--定義參數到參數服務器--><rosparam> <!--啟動yaml文件參數到參數服務器--><arg> <!--定義變量--><remap> <!--設定參數映射--><group> <!--設定命名空間--> </launch> <!--根標簽-->

參考鏈接:http://wiki.ros.org/roslaunch/XML

通信方式

ROS的通信方式是ROS最為核心的概念,ROS系統的精髓就在于它提供的通信架構。ROS的通信方式有以下四種:

  • Topic 主題
  • Service 服務
  • Parameter Service 參數服務器
  • Actionlib 動作庫

Topic

topic是一種點對點的單向通信方式,這里的“點”指的是node,也就是說node之間可以通過topic方式來傳遞信息。
topic要經歷下面幾步的初始化過程:
首先,publisher節點和subscriber節點都要到節點管理器進行注冊;然后publisher會發布topic,subscriber在master的指揮下會訂閱該topic,從而建立起sub-pub之間的通信。
注意整個過程是單向的。其結構示意圖如下:

?

通信示例

以攝像頭畫面的發布、處理、顯示為例講講topic通信的流程:
在機器人上的攝像頭拍攝程序是一個node(圓圈表示,我們記作node1),當node1運行啟動之后,它作為一個Publisher就開始發布topic。比如它發布了一個topic(方框表示),叫做/camera_rgb,是rgb顏色信息,即采集到的彩色圖像。同時,node2假如是圖像處理程序,它訂閱了/camera_rgb這個topic,經過節點管理器的介紹,它就能建立和攝像頭節點(node1)的連接。
在node1每發布一次消息之后,就會繼續執行下一個動作,至于消息是什么狀態、被怎樣處理,它不需要了解;而對于node2圖像處理程序,它只管接收和處理/camera_rgb上的消息,至于是誰發來的,它不會關心。所以node1、node2兩者都是各司其責,不存在協同工作,我們稱這樣的通信方式是異步的。


ROS是一種分布式的架構,一個topic可以被多個節點同時發布,也可以同時被多個節點接收。比如在這個場景中用戶可以再加入一個圖像顯示的節點,我們在想看看攝像頭節點的畫面,則可以用自己的筆記本連接到機器人上的節點管理器,然后在自己的電腦上啟動圖像顯示節點。
這就體現了分布式系統通信的好處:擴展性好、軟件復用率高。
總結三點:

?

  • topic通信方式是異步的,發送時調用publish()方法,發送完成立即返回,不用等待反饋。
  • subscriber通過回調函數的方式來處理消息。
  • topic可以同時有多個subscribers,也可以同時有多個publishers。ROS中這樣的例子有:/rosout、/tf等等。

Message

Topic有很嚴格的格式要求,,比如上節的攝像頭進程中的rgb圖像topic,它就必然要遵循ROS中定義好的rgb圖像格式。這種數據格式就是Message。Message按照定義解釋就是topic內容的數據類型,也稱之為topic的格式標準。這里和我們平常用到的Massage直觀概念有所不同,這里的Message不單單指一條發布或者訂閱的消息,也指定為topic的格式標準。
我們用一個具體的msg來了解,例如上例中的msg sensor_msg/image,位置存放在sensor_msgs/msg/image.msg里.

std_msg/Header headeruint32 seqtime stampstring frame_id uint32 height uint32 width string encoding uint8 is_bigendian uint32 step uint8[] data

觀察上面msg的定義,是不是很類似C語言中的結構體呢?通過具體的定義圖像的寬度,高度等等來規范圖像的格式。所以這就解釋了Message不僅僅是我們平時理解的一條一條的消息,而且更是ROS中topic的格式規范。或者可以理解msg是一個“類”,那么我們每次發布的內容可以理解為“對象”,這么對比來理解可能更加容易。

操作命令

操作演示

roslaunch robot_sim_demo robot_spawn.launch rostopic list

rostopic info /camera/rgb/image_raw

rosrun image_view image_view image:=/camera/rgb/image_raw

rostopic info /camera/depth/image_raw

?

類型依舊是sensor_mags/Image,所以依舊可以用 image_view node來查看

rosrun robpt_sim_demo robot_keyboard_teleop.py

?

?

?

  • 試用ROS系統

    創建一個ROS Package 這個教程包括使用roscreate-pkg或者catkin去創建一個新的packa.

  • 機器人操作系統ROS(二)-文件系統架構及概念

  • ROS機器人程序設計 | 期末知識點大總結

    工作空間的框架是怎么樣的?有幾個文件夾? 一個包含功能包、可編輯源文件或編譯包的文件夾。同時編譯不同的功能包時非常...

    ?

  • ros系統入門筆記(一)

    ROS的工程結構(文件系統) 1. catkin編譯的工作流程如下: 首先在工作空間catkin_ws/src/下...

    冰星

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的ROS通信架构(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www插插 | 欧美精品二区三区 | 精品久久久一区 | 女人高潮特级毛片 | 蜜桃视频成人在线观看 | 色综合久久精品亚洲国产 | 丰满人妻一区二区三区免费视频 | 极品探花在线播放 | 精品中文字幕在线观看 | 人人爽人人射 | 久久久久亚洲 | 国产精品不卡 | 国产另类在线 | 日日噜噜噜 | 精品在线91 | 爱av导航 | 日韩在线影院 | 999zyz玖玖资源站永久 | 成人午夜看片 | 日本午夜网站 | 色爱成人综合 | 高清久久久| 国产视频123区| 少妇高潮一区二区三区99欧美 | aaa天堂| 少妇天堂网 | 午夜精品福利影院 | 操操操网| 网站免费在线观看 | 国产淫片 | av图区 | 99热自拍偷拍 | 国产精品久久久久电影 | 日韩中文字幕在线观看 | 日韩区在线观看 | 天堂√8在线中文 | 国内自拍偷拍 | 亚洲色图10p| 国产欧美自拍 | 天堂…中文在线最新版在线 | 成人超碰 | 91黑丝美女| 韩国中文三级hd字幕 | 在线视频观看你懂得 | 国产成人精品一区二区三区 | 欧美xxxx18国产| 黄页网站视频在线观看 | 女女高潮h冰块play失禁百合 | 国产日产欧美一区二区三区 | 四虎国产成人永久精品免费 | 香蕉国产精品 | 久久无码精品丰满人妻 | 91亚洲精品乱码久久久久久蜜桃 | 欧美综合图区 | 欧美国产中文 | 亚洲精品a区 | 成人午夜免费在线 | 欧美一区二区三区在线看 | 黄色片视频在线观看 | 久久久久久一区 | 久久久久久久久久综合 | 亚洲一级av无码毛片精品 | 欧美有码视频 | 欧美在线国产 | 男人扒女人添高潮视频 | 日韩精品一区二区三区不卡 | 国产精品jizz | 欧美成人精品一区二区三区 | 久草热在线视频 | 人妖性做爰aaaa | 婷婷影音| 青青青草视频在线观看 | 老头老太吃奶xb视频 | 美女脱光内衣内裤 | 国产欧美一区二区三区国产幕精品 | 污视频在线观看网址 | 欧美精品videos | 成人做爰黄 | 天堂va蜜桃一区二区三区 | 色戒av | 一级片在线观看视频 | 中国人妖和人妖做爰 | 亚洲自拍三区 | 国产精品丝袜黑色高跟鞋的设计特点 | 黑人巨大精品人妻一区二区 | 日本毛片网站 | 韩国日本中文字幕 | 欧美性生活在线视频 | 午夜偷拍福利视频 | 天天操天天干天天爽 | 国产不卡高清 | 伊人自拍| 国产精品亚洲二区在线观看 | 抱着老师的嫩臀猛然挺进视频 | 美女在线一区 | 少妇逼逼 | 免费黄色av片 | 天天看片天天操 | 狠狠搞视频 |