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

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

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

ROS2+OpenVINO? 實(shí)踐教程

英特爾物聯(lián)網(wǎng) ? 來(lái)源:英特爾物聯(lián)網(wǎng) ? 作者:英特爾物聯(lián)網(wǎng) ? 2022-03-27 09:02 ? 次閱讀

一、ROS的前世今生

近年來(lái),機(jī)器人智能化已經(jīng)成為現(xiàn)代機(jī)器人發(fā)展的終極目標(biāo)。隨著人工智能技術(shù)發(fā)展,機(jī)器人發(fā)展的速度在不斷提升,應(yīng)用范圍也在不斷拓展至自動(dòng)駕駛、服務(wù)機(jī)器人、信息機(jī)器人、無(wú)人機(jī)、農(nóng)業(yè)機(jī)器人、工業(yè)機(jī)器人諸多領(lǐng)域。機(jī)器人系統(tǒng)是很多復(fù)雜算法模塊的集合,如障礙物檢測(cè)、行為決策、智能控制、環(huán)境識(shí)別等,機(jī)器人技術(shù)是一門(mén)跨學(xué)科、跨領(lǐng)域、需要許多先驗(yàn)知識(shí)的龐雜的學(xué)問(wèn),從零開(kāi)始開(kāi)發(fā)系統(tǒng)對(duì)技術(shù)人員要求非常高,而且工作量巨大。機(jī)器人不僅要實(shí)現(xiàn)基本的數(shù)據(jù)搜集與移動(dòng)能力,還需要在對(duì)數(shù)據(jù)的有效分析、感知世界、實(shí)時(shí)通訊、智能思考并決策、協(xié)助或主導(dǎo)完成實(shí)際有效的工作等方面具備必要的技能。

筆者堅(jiān)定的學(xué)習(xí)、推廣、布道ROS的動(dòng)力是源于失敗的項(xiàng)目經(jīng)歷。筆者參與的第一個(gè)機(jī)器人項(xiàng)目并沒(méi)有使用ROS,完全是從0開(kāi)始,在經(jīng)歷大量的編碼、測(cè)試、幾經(jīng)迭代后,初代機(jī)器人終究成了回憶。

1.1

什么是ROS

ROS - Robot Operating System機(jī)器人操作系統(tǒng)并非傳統(tǒng)意義的操作系統(tǒng),而是在操作系統(tǒng)之上的一整套幫助開(kāi)發(fā)者構(gòu)建機(jī)器人應(yīng)用的開(kāi)源軟件及工具集或者稱(chēng)之為次操作系統(tǒng)。它提供類(lèi)似操作系統(tǒng)所提供的功能,包含硬件抽象描述、底層驅(qū)動(dòng)程序管理、共用功能的執(zhí)行、程序間的消息傳遞、程序發(fā)行包管理,它也提供一些工具程序和庫(kù)用于獲取、建立、編寫(xiě)和運(yùn)行多機(jī)整合的程序。從驅(qū)動(dòng)程序到最先進(jìn)的算法,以及強(qiáng)大的開(kāi)發(fā)工具,ROS擁有您構(gòu)建機(jī)器人項(xiàng)目所需的一切。作為運(yùn)行于操作系統(tǒng)之上的框架,ROS的主要目標(biāo)是為機(jī)器人研究和開(kāi)發(fā)提供代碼復(fù)用的支持,只需要管理與機(jī)器人相關(guān)的資源,控制機(jī)器人相關(guān)的邏輯,至于其他部分則交由操作系統(tǒng)來(lái)處理。

從軟件架構(gòu)的層面來(lái)說(shuō),ROS是一個(gè)基于消息傳遞的分布式的進(jìn)程框架或者說(shuō)是節(jié)點(diǎn)框架(Nodes)。這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合。這些過(guò)程可以封裝到數(shù)據(jù)包(Packages)和堆棧(Stacks)中,以便于共享和分發(fā)。ROS還支持代碼庫(kù)的聯(lián)合系統(tǒng)。使得協(xié)作亦能被分發(fā)。這種從文件系統(tǒng)級(jí)別到社區(qū)一級(jí)的設(shè)計(jì)讓獨(dú)立地決定發(fā)展和實(shí)施工作成為可能。

為了順利達(dá)成分發(fā)與協(xié)作目的,ROS框架有以下幾個(gè)顯著特性:

1

小型化:ROS盡可能設(shè)計(jì)的很小,不封裝main() 函數(shù),這樣的優(yōu)勢(shì)是ROS編寫(xiě)的代碼可以輕松的在其它機(jī)器人軟件平臺(tái)上使用,可以輕松集成在其它機(jī)器人軟件平臺(tái):ROS已經(jīng)可以與OpenRAVE,Orocos和Player集成。

2

點(diǎn)對(duì)點(diǎn)設(shè)計(jì):ROS進(jìn)程存在于多個(gè)不同的主機(jī)并且在運(yùn)行過(guò)程中通過(guò)端對(duì)端的拓?fù)浣Y(jié)構(gòu)進(jìn)行聯(lián)系。雖然基于中心服務(wù)器的那些軟件框架也可以實(shí)現(xiàn)多進(jìn)程和多主機(jī)的優(yōu)勢(shì),但是在這些框架中,當(dāng)各電腦通過(guò)不同的網(wǎng)絡(luò)進(jìn)行連接時(shí),中心數(shù)據(jù)服務(wù)器就會(huì)發(fā)生問(wèn)題。ROS的點(diǎn)對(duì)點(diǎn)設(shè)計(jì)以及服務(wù)和節(jié)點(diǎn)管理器等機(jī)制可以分散由計(jì)算機(jī)視覺(jué)語(yǔ)音識(shí)別等功能帶來(lái)的實(shí)時(shí)計(jì)算壓力,能夠適應(yīng)多機(jī)器人遇到的挑戰(zhàn)。

7507c3f6-ac0b-11ec-aa7f-dac502259ad0.png

圖1-2 點(diǎn)對(duì)點(diǎn)設(shè)計(jì)

3

不敏感庫(kù):首選開(kāi)發(fā)模型都是用不依賴(lài)ROS的干凈的庫(kù)函數(shù)編寫(xiě)而成??蓴U(kuò)展:ROS可以適用于大型運(yùn)行時(shí)系統(tǒng)和大型開(kāi)發(fā)進(jìn)程。

4

語(yǔ)言獨(dú)立:ROS框架可以簡(jiǎn)單地使用任何的現(xiàn)代編程語(yǔ)言實(shí)現(xiàn),當(dāng)下已經(jīng)支持已Python、C++、Lisp、Java和Lua語(yǔ)言

5

開(kāi)源開(kāi)放:吸引了大量的開(kāi)發(fā)者參與其中,營(yíng)造了極佳的生態(tài)環(huán)境。

6

工具豐富:為了管理復(fù)雜的軟件框架,ROS利用了大量的小工具去編譯和運(yùn)行多種多樣的組件,而不是構(gòu)建一個(gè)龐大的開(kāi)發(fā)和運(yùn)行環(huán)境。此外,ROS內(nèi)建一個(gè)了叫做rostest的單元、集成測(cè)試框架,可以輕松安裝或卸載測(cè)試模塊。

751ec902-ac0b-11ec-aa7f-dac502259ad0.jpg

圖1-3 豐富的工具集

1.2

ROS歷史與發(fā)展

ROS系統(tǒng)是起源于2007年斯坦福大學(xué)人工智能實(shí)驗(yàn)室的項(xiàng)目與機(jī)器人技術(shù)公司Willow Garage的個(gè)人機(jī)器人項(xiàng)目(Personal Robots Program)之間的合作,最初的ROS版本主要解決了機(jī)器人各組件的通信問(wèn)題。2008年之后就由Willow Garage來(lái)進(jìn)行推動(dòng)。2010年Willow Garage公司發(fā)布了開(kāi)源機(jī)器人操作系統(tǒng)ROS(Robot Operating System),很快在機(jī)器人研究領(lǐng)域展開(kāi)了學(xué)習(xí)和使用ROS的熱潮?,F(xiàn)如今ROS操作系統(tǒng)由Open Robotics承擔(dān)主要的維護(hù)及推動(dòng)工作?;赗OS標(biāo)準(zhǔn)且完善的通信機(jī)制,越來(lái)越多的機(jī)器人工具、算法集成到ROS中來(lái),使其有了長(zhǎng)足的發(fā)展。

752fe0f2-ac0b-11ec-aa7f-dac502259ad0.png

圖1-4 ROS歷史

ROS的分支版本可以分為ROS、ROS-I以及ROS2。ROS的初衷是用于實(shí)驗(yàn)室與科研,它定義的原型是面向于服務(wù)機(jī)器人。因此,它有一些先天限制。例如針對(duì)于工業(yè)機(jī)械臂來(lái)說(shuō),ROS的實(shí)時(shí)性與魯棒性并不能滿足工業(yè)上的需求,因此在2013年有那么幾家世界知名的機(jī)械臂廠家聯(lián)合起來(lái),開(kāi)始著力對(duì)ROS進(jìn)行改造,用線程代替進(jìn)程,用差一點(diǎn)的模塊化,換取系統(tǒng)的穩(wěn)定性能與實(shí)時(shí)性能。他們把他們的版本命名為ROS-I,并制定了他們的準(zhǔn)入門(mén)檻。ROS-I面向的是機(jī)械臂的解決方案,期望解決的問(wèn)題是對(duì)于傳統(tǒng)的焊接、塑型、噴涂等方面的現(xiàn)代化工藝改進(jìn),讓產(chǎn)品線的升級(jí)改造的成本降低。盡管如此,ROS-I并不能滿足大部分人的普遍性需求,解決不了落后技術(shù)帶來(lái)的弊端。因此,從2015起,OSRF開(kāi)始著手第二代機(jī)器人操作系統(tǒng)。ROS2是更符合機(jī)器人技術(shù)的發(fā)展,并且它具備更大的容量、可擴(kuò)展性來(lái)容納當(dāng)下或者說(shuō)未來(lái)對(duì)機(jī)器人的一些需求。

7545ee6a-ac0b-11ec-aa7f-dac502259ad0.jpg

圖1-5 ROS版本演進(jìn)

755b8ae0-ac0b-11ec-aa7f-dac502259ad0.png

圖1-6 ROS2版本演進(jìn)

1.3

ROS2的特點(diǎn)

盡管ROS的發(fā)展如火如荼,但其先天劣勢(shì),如實(shí)時(shí)性差、過(guò)分依賴(lài)Master主節(jié)點(diǎn)、嚴(yán)重依賴(lài)Ubuntu導(dǎo)致系統(tǒng)較為臃腫。ROS2在繼承ROS優(yōu)良特性的基礎(chǔ)上解決了諸多關(guān)鍵問(wèn)題:支持多機(jī)器人系統(tǒng);支持微控制器;支持實(shí)時(shí)控制;跨系統(tǒng)平臺(tái)支持以及填平原型與產(chǎn)品之間的鴻溝,縮短上市時(shí)間。

75748496-ac0b-11ec-aa7f-dac502259ad0.png

圖1-7 ROS2與ROS架構(gòu)對(duì)比

1

ROS2引入了數(shù)據(jù)分發(fā)服務(wù)(DDS)通信協(xié)議,它可以零拷貝的方式傳遞消息,節(jié)省了CPU和內(nèi)存資源,同時(shí)增加通信的實(shí)時(shí)性;ROS2為托管啟動(dòng),用戶(hù)可以指定節(jié)點(diǎn)啟動(dòng)順序;ROS2去除了ros master這個(gè)中心節(jié)點(diǎn)管理器,改進(jìn)了ROS對(duì)master節(jié)點(diǎn)的高度依賴(lài)的缺點(diǎn);

2

ROS2為托管啟動(dòng),用戶(hù)可以指定節(jié)點(diǎn)啟動(dòng)順序;

3

ROS2去除了ros master這個(gè)中心節(jié)點(diǎn)管理器,改進(jìn)了ROS對(duì)master節(jié)點(diǎn)的高度依賴(lài)的缺點(diǎn);

1.4

ROS2 通信框架

758b57c0-ac0b-11ec-aa7f-dac502259ad0.png

圖1-8 ROS2通信框架

1

參與者(Domain Participant):一個(gè)參與者Participant就是一個(gè)容器,對(duì)應(yīng)于一個(gè)使用DDS的用戶(hù),任何DDS的用戶(hù)都必須通過(guò)Participant來(lái)訪問(wèn)全局?jǐn)?shù)據(jù)空間;

2

發(fā)布者(Publisher):數(shù)據(jù)發(fā)布的執(zhí)行者,支持多種數(shù)據(jù)類(lèi)型的發(fā)布,可以與多個(gè)數(shù)據(jù)寫(xiě)入器(DataWriter)相聯(lián),發(fā)布一種或多種主題(Topic)的消息;

3

訂閱者(Subscriber):數(shù)據(jù)訂閱的執(zhí)行者,支持多種數(shù)據(jù)類(lèi)型的訂閱,可以與多個(gè)數(shù)據(jù)讀取器(DataReader)相聯(lián),訂閱一種或多種主題(Topic)的消息;

4

數(shù)據(jù)寫(xiě)入器(DataWriter):應(yīng)用向發(fā)布者更新數(shù)據(jù)的對(duì)象,每個(gè)數(shù)據(jù)寫(xiě)入器對(duì)應(yīng)一個(gè)特定的Topic,類(lèi)似于ROS1中的一個(gè)消息發(fā)布者;

5

數(shù)據(jù)讀取器(DataReader):應(yīng)用從訂閱者讀取數(shù)據(jù)的對(duì)象,每個(gè)數(shù)據(jù)讀取器對(duì)應(yīng)一個(gè)特定的Topic,類(lèi)似于ROS1中的一個(gè)消息訂閱者;

6

主題(Topic):這個(gè)和ROS1中的Topic概念一致,一個(gè)Topic包含一個(gè)名稱(chēng)和一種數(shù)據(jù)結(jié)構(gòu);

7

QoS Policy:Quality of Service,質(zhì)量服務(wù)原則,這個(gè)模塊在ROS1中可從沒(méi)見(jiàn)過(guò),看名稱(chēng)就猜測(cè)應(yīng)該是負(fù)責(zé)數(shù)據(jù)質(zhì)量的。QoS是DDS中非常重要的一環(huán),控制了各方面與底層的通訊機(jī)制,主要從時(shí)間限制、可靠性、持續(xù)性、歷史記錄幾個(gè)方面,滿足用戶(hù)針對(duì)不同場(chǎng)景的數(shù)據(jù)應(yīng)用需求。

ROS2相較ROS運(yùn)行更可靠,持續(xù)性更好,更節(jié)省資源,消息傳遞實(shí)時(shí)性更佳,因此ROS2更適合應(yīng)用在工業(yè)生產(chǎn)環(huán)境。基于ROS2的以上特點(diǎn),該框架被廣泛應(yīng)用與工廠AGV作業(yè)機(jī)器人、智能立體倉(cāng)庫(kù)、送餐及快遞等服務(wù)機(jī)器人、自動(dòng)駕駛、機(jī)械手智能控制等新興智能機(jī)器人領(lǐng)域.

ROS2與ROS完全是獨(dú)立的系統(tǒng),學(xué)習(xí)ROS2并不需要ROS的基礎(chǔ),當(dāng)然學(xué)習(xí)了ROS有了實(shí)戰(zhàn)經(jīng)驗(yàn)對(duì)于學(xué)習(xí)ROS2會(huì)有幫助。了解完ROS的前世今生,在下一章節(jié)我們安裝ROS2系統(tǒng)并實(shí)現(xiàn)小烏龜模擬仿真。

二、ROS2環(huán)境搭建

2.1

版本選擇

從學(xué)習(xí)嘗鮮的角度出發(fā),選擇最新的版本一定是正確的。但從產(chǎn)品開(kāi)發(fā)的角度出發(fā),選擇穩(wěn)定可靠且有較長(zhǎng)生命周期的版本,才是不二之選。從ROS2的版本演進(jìn)圖中我們可以看到,F(xiàn)oxy是第一個(gè)長(zhǎng)期支持的版本,我們采用這個(gè)版本進(jìn)行環(huán)境搭建。

2.2

系統(tǒng)平臺(tái)

本文是進(jìn)行中機(jī)器人項(xiàng)目的開(kāi)發(fā)記錄筆記,因此我們直接使用產(chǎn)品中的主控設(shè)備Intel NUC阿特拉斯峽谷作為硬件平臺(tái)搭載Ubuntu20.04作為操作系統(tǒng)。此款NUC性能功耗比好、接口豐富、加之體積小,完全勝任機(jī)器人控制工作。

盡管ROS2已實(shí)現(xiàn)跨平臺(tái),能夠支持MacOS、Windows系統(tǒng),但在實(shí)際工作產(chǎn)品中還是以Linux為主要的部署系統(tǒng)。此外,從目前可用的工具出發(fā)、諸多工具、算法包在Windows上使用不便,因此Linux還是優(yōu)選系統(tǒng)。

75ada35c-ac0b-11ec-aa7f-dac502259ad0.png

圖2-2 硬件平臺(tái)

75c663ba-ac0b-11ec-aa7f-dac502259ad0.png

2.3

ROS2 安裝

1.配置系統(tǒng)源服務(wù)器

安裝ROS操作系統(tǒng)出現(xiàn)問(wèn)題,99%是因?yàn)榫W(wǎng)絡(luò),剩余1%是因?yàn)榄h(huán)境及版本。

在正式安裝前我們先來(lái)配置系統(tǒng)下載服務(wù)器。

打開(kāi)軟件和更新應(yīng)用-下載自-中國(guó)-選擇最佳服務(wù)器

75d4d6f2-ac0b-11ec-aa7f-dac502259ad0.png

圖2-3 配置下載服務(wù)器

若遇到不能正常下載,可以嘗試使用清華ROS2鏡像,配置參考如下網(wǎng)址: https://mirrors.tuna.tsinghua.edu.cn/help/ros2/

2.配置環(huán)境支持UTF-8編碼

sudo apt update && sudo apt install locales

sudo locale-gen en_US en_US.UTF-8

sudo update-locale LC_ALL=en_US.UTF-8.UTF-8

export.UTF-8

3.設(shè)置軟件源,添加apt倉(cāng)庫(kù)

sudo apt update && sudo apt install curl gnupg2 lsb-release

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list

命令執(zhí)行成功后在系統(tǒng)/etc/apt/source.list.d文件夾中將出現(xiàn)ros2-lastest.list文件

75f4fa68-ac0b-11ec-aa7f-dac502259ad0.png

圖2-4 配置源

4.安裝ROS2 foxy

sudo apt update

sudo apt install ros-foxy-desktop

76147f6e-ac0b-11ec-aa7f-dac502259ad0.png

圖2-5 安裝foxy

與ROS(需要安裝約2.5G的應(yīng)用)相比,ROS2的應(yīng)用體積要小很多,在網(wǎng)絡(luò)暢通的情況下,很快可以安裝完成。

5.安裝效率工具

sudo apt install python3-argcomplete

7635ccaa-ac0b-11ec-aa7f-dac502259ad0.png

圖2-6 安裝自動(dòng)補(bǔ)齊工具

6.配置環(huán)境變量

echo “source /opt/ros/foxy/setup.bash” >> ~/.bashrc

將環(huán)境變量寫(xiě)入rc文件中,打開(kāi)終端時(shí)可自動(dòng)初始化環(huán)境變量。

765fe22e-ac0b-11ec-aa7f-dac502259ad0.png

圖2-7 配置環(huán)境變量

7.測(cè)試

ROS2終端指令格式如下,我們?cè)诤罄m(xù)的章節(jié)中會(huì)用各種命令實(shí)現(xiàn)不同應(yīng)用的控制。

ros2run

打開(kāi)兩個(gè)終端,在其中一個(gè)終端輸入如下命令,作為消息發(fā)送方;

ros2 run demo_nodes_cpp talker

另一個(gè)終端中,輸入如下命令,作為消息接收方;

ros2 run demo_nodes_cpp listener

一切運(yùn)行正常,則消息發(fā)送與消息接收對(duì)等出現(xiàn)。

76747c2a-ac0b-11ec-aa7f-dac502259ad0.png

圖2-8 安裝測(cè)試

2.4

海龜仿真器

海龜仿真器(Turtlesim)是ROS2中一個(gè)非常重要的入門(mén)級(jí)案例,通過(guò)海龜仿真,我們可以了解到很多ROS2的底層原理,涉及節(jié)點(diǎn)、話題、服務(wù)等核心概念。我們?cè)诤罄m(xù)章節(jié)都會(huì)以海龜仿真器為模板進(jìn)行介紹。

1.安裝

我們?cè)诎惭bROS2選擇了ros-foxy-desktop,turtlesim作為默認(rèn)配套工具一并安裝到系統(tǒng)中,我們可以通過(guò)下面的命令,檢查安裝是否成功。

ros2 pkg executables turtlesim

命令執(zhí)行完成后,若出現(xiàn)如下內(nèi)容,則說(shuō)明安裝成功。

768c28de-ac0b-11ec-aa7f-dac502259ad0.png

圖2-9 turtlesim安裝校驗(yàn)

若系統(tǒng)中并未安裝海龜模擬器,我們則通過(guò)以下命令進(jìn)行安裝。

sudo apt-get install ros-foxy-turtlesim

769bff84-ac0b-11ec-aa7f-dac502259ad0.png

圖2-10 turtlesim安裝

2.啟動(dòng)

ros2 run turtlesim turtlesim_node

終端中輸入如下命令啟動(dòng)仿真器。

76b4da7c-ac0b-11ec-aa7f-dac502259ad0.png

圖2-11 啟動(dòng)turtlesim

程序運(yùn)行后,我們會(huì)看到仿真界面一只在海里游泳的海龜,應(yīng)用會(huì)隨機(jī)使用一個(gè)ROS2的logo作為顯示海龜?shù)奈恢茫呀?jīng)開(kāi)啟的系統(tǒng)終端中,也會(huì)顯示海龜?shù)拿Q(chēng)及坐標(biāo)。

76c6c340-ac0b-11ec-aa7f-dac502259ad0.png

圖2-12 turtlesim仿真界面

3.讓海龜動(dòng)起來(lái)

我們?cè)匍_(kāi)啟一個(gè)新終端,輸入下面命令:

ros2 run turtlesim turtle_teleop_key

根據(jù)終端中提示,我們可以點(diǎn)擊物理鍵盤(pán)控制海龜運(yùn)動(dòng)。需要注意的是,我們要讓鍵盤(pán)控制節(jié)點(diǎn)一致處于激活狀態(tài)。

76dc841e-ac0b-11ec-aa7f-dac502259ad0.png

圖2-13 turtlesim運(yùn)動(dòng)控制

很好,我們已經(jīng)成功讓海龜運(yùn)動(dòng)起來(lái),接下來(lái)使用如下命令查看仿真器后臺(tái)到底運(yùn)行了哪些功能,這些概念也會(huì)在后續(xù)章節(jié)中詳細(xì)介紹。

ros2 node list

ros2 topic list

ros2 service list

ros2 action list

ros2 param list

76ecda26-ac0b-11ec-aa7f-dac502259ad0.png

圖2-14 turtlesim后臺(tái)服務(wù)

2.5

關(guān)鍵的通信概念及模型

上一節(jié)中我們提到了節(jié)點(diǎn)(Node)、話題(Topic)、服務(wù)(Service)、參數(shù)(Parameters)以及動(dòng)作(Action),這些都是ROS2系統(tǒng)中通信的基礎(chǔ)概念及模型。每一個(gè)完成具體功能的模塊稱(chēng)之為“節(jié)點(diǎn)”,例如控制車(chē)輪、獲取雷達(dá)數(shù)據(jù)、獲取視覺(jué)數(shù)據(jù)等,節(jié)點(diǎn)之間通過(guò)話題、服務(wù)、動(dòng)作或者參數(shù)實(shí)現(xiàn)數(shù)據(jù)的收發(fā)。在本節(jié)中我們?cè)敿?xì)展開(kāi)。

1.節(jié)點(diǎn)Node

節(jié)點(diǎn),從本質(zhì)上來(lái)說(shuō)是一個(gè)可執(zhí)行文件(C++或者Python)。它利用ROS2的通信網(wǎng)絡(luò)能與其他節(jié)點(diǎn)進(jìn)行通信(數(shù)據(jù)交互)。ROS中每一個(gè)節(jié)點(diǎn)應(yīng)該負(fù)責(zé)一個(gè)單一的、模塊化的功能。例如,一個(gè)節(jié)點(diǎn)用于控制電機(jī),一個(gè)節(jié)點(diǎn)用于控制激光雷達(dá)。

ros2 run是啟動(dòng)節(jié)點(diǎn)的命令。

關(guān)于查看節(jié)點(diǎn)的命令,列出節(jié)點(diǎn),及查看節(jié)點(diǎn)詳細(xì)信息。

ros2 node list

ros2 node info <節(jié)點(diǎn)名稱(chēng)>

770188fe-ac0b-11ec-aa7f-dac502259ad0.png

圖2-16 ROS2節(jié)點(diǎn)信息

2.話題Topic

ROS2將復(fù)雜的系統(tǒng)分解成許多模塊化的節(jié)點(diǎn),話題(Topic)是ROS2通信中的重要元素,充當(dāng)節(jié)點(diǎn)交換信息的總線,是一種發(fā)布訂閱模型。如圖所示:

773faf76-ac0b-11ec-aa7f-dac502259ad0.gif

圖2-17 ROS2話題

話題通信模型有以下特點(diǎn):

1

話題名字是關(guān)鍵,發(fā)布訂閱接口類(lèi)型要相同,發(fā)布的是字符串,接受也要用字符串來(lái)接收;

2

同一節(jié)點(diǎn)可以訂閱多個(gè)話題,同時(shí)也可以發(fā)布多個(gè)話題;

3

同一個(gè)話題可以有多個(gè)發(fā)布者;

一個(gè)節(jié)點(diǎn)可以向任意數(shù)量的話題發(fā)布數(shù)據(jù)并同時(shí)訂閱任意數(shù)量的話題。因?yàn)樵赗OS2中,所有的節(jié)點(diǎn)都是同一個(gè)級(jí)別。即可以實(shí)現(xiàn)一對(duì)多、多對(duì)一、多對(duì)多的通信模式。如圖所示:

77802c04-ac0b-11ec-aa7f-dac502259ad0.gif

圖2-18 ROS2話題一對(duì)多

關(guān)于話題的命令:

ros2 topic list #查看話題列表

ros2 topic echo#查看話題內(nèi)容

ros2 topic info#查看話題詳情

ros2 topic pub #發(fā)布指令

ros2 topic hz #查看話題發(fā)布周期

77b3adfe-ac0b-11ec-aa7f-dac502259ad0.png

圖2-19 ROS2話題指令

3.服務(wù)Service

之上提到的話題通信是基于訂閱/發(fā)布機(jī)制的,無(wú)論有沒(méi)有訂閱者,發(fā)布者都會(huì)周期發(fā)布數(shù)據(jù),這種模式適合持續(xù)數(shù)據(jù)的收發(fā),比如傳感器數(shù)據(jù)。機(jī)器人系統(tǒng)中還有另外一些配置性質(zhì)的數(shù)據(jù),并不需要周期處理,此時(shí)就可以用“服務(wù)”通信模型實(shí)現(xiàn)。服務(wù)是基于客戶(hù)端/服務(wù)器模型的通信機(jī)制,服務(wù)器端只有在接收到客戶(hù)端請(qǐng)求時(shí)才會(huì)提供反饋數(shù)據(jù)。

77c66192-ac0b-11ec-aa7f-dac502259ad0.gif

圖2-20 ROS2服務(wù)

值得注意的是,在服務(wù)通信模型中,可以有多個(gè)客戶(hù)端請(qǐng)求同一個(gè)服務(wù)器,但一個(gè)服務(wù)模型中,只可以存在一個(gè)服務(wù)器。

781c7528-ac0b-11ec-aa7f-dac502259ad0.gif

圖2-21 ROS2服務(wù)

關(guān)于服務(wù)的指令:

ros2 service list #查看服務(wù)列表

ros2 service info#查看服務(wù)詳情

ros2 service type#查看服務(wù)的類(lèi)型

ros2 service find #查找特定類(lèi)型的服務(wù)

ros2 service call #通過(guò)終端發(fā)送服務(wù)請(qǐng)求

4.動(dòng)作Action

“動(dòng)作”是ROS2中用于長(zhǎng)時(shí)間運(yùn)行任務(wù)的一種通信類(lèi)型,例如我們要讓機(jī)械臂抓取一個(gè)物體,我們不僅要發(fā)出指令,還需要獲取機(jī)械臂的實(shí)時(shí)反饋,在這種場(chǎng)景下我們就需要“動(dòng)作”類(lèi)型。“動(dòng)作”主要由三部分組成:目標(biāo)(goal)、反饋(feedback)以及結(jié)果(result)。動(dòng)作通信建立在話題和服務(wù)之上,類(lèi)似與服務(wù)的C/S通信模型,但是不同之處在于,客戶(hù)端可以隨時(shí)取消動(dòng)作。動(dòng)作還提供穩(wěn)定的反饋,而不是返回單一響應(yīng)的服務(wù)。

788146ce-ac0b-11ec-aa7f-dac502259ad0.gif

圖2-22 ROS2動(dòng)作

關(guān)于服務(wù)的指令:

ros2 action list #查看動(dòng)作列表

ros2 action info#查看動(dòng)作詳情

ros2 action send_goal#發(fā)送動(dòng)作請(qǐng)求

5.參數(shù)Parameter

參數(shù)也是ROS2中很重要的一個(gè)概念,其主要作用是對(duì)節(jié)點(diǎn)功能進(jìn)行配置。在ROS2中,每個(gè)節(jié)點(diǎn)都有自己的參數(shù),這些參數(shù)可以用整型數(shù)、浮點(diǎn)數(shù)、布爾型數(shù)、字符串和列表來(lái)描述。

關(guān)于服務(wù)的指令:

ros2 param list #查看參數(shù)列表

ros2 param info#查看某節(jié)點(diǎn)的參數(shù)詳情

ros2 param set#參數(shù)設(shè)置

ros2 param get#參數(shù)設(shè)置

ros2 param dump#參數(shù)設(shè)置

例如我們查看海龜仿真器的參數(shù),并將背景顏色由海藍(lán)色改為天藍(lán)色。

78bfbe2c-ac0b-11ec-aa7f-dac502259ad0.png

圖2-23 ROS2設(shè)置參數(shù)

6.圖形化展示

上面的內(nèi)容中我們采用命令行方式實(shí)現(xiàn)人機(jī)交互,終端命令行具有較高的調(diào)試效率,其缺點(diǎn)是節(jié)點(diǎn)間關(guān)系沒(méi)能直觀呈現(xiàn),rqt_graph圖形化工具剛好可以彌補(bǔ)這一缺陷。

終端命令行輸入:可以啟動(dòng)圖形化工具,直觀顯示節(jié)點(diǎn)、話題、參數(shù)關(guān)系。

rqt_graph

78d5ceb0-ac0b-11ec-aa7f-dac502259ad0.png

圖2-24 ROS2動(dòng)作

至此,我們已成功安裝ROS2環(huán)境,并且運(yùn)行了海龜模擬器,成功讓小海龜運(yùn)動(dòng)起來(lái),同時(shí)我們也了解了ROS2系統(tǒng)的核心通信概念,ROS2系統(tǒng)功能強(qiáng)大遠(yuǎn)不止如此,我們僅完成了入門(mén)工作,也幫助我們更好的理解后續(xù)內(nèi)容。

審核編輯 :李倩

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

    關(guān)注

    210

    文章

    27989

    瀏覽量

    205540
  • 智能化
    +關(guān)注

    關(guān)注

    15

    文章

    4737

    瀏覽量

    55102
  • 模擬器
    +關(guān)注

    關(guān)注

    2

    文章

    862

    瀏覽量

    43087

原文標(biāo)題:ROS2+OpenVINO? 實(shí)踐教程 - 上篇 | 開(kāi)發(fā)者實(shí)戰(zhàn)

文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Micro-ROS:把ROS2放在MCU上

    機(jī)器人的發(fā)展。 ? ROS便是為機(jī)器人在研發(fā)的過(guò)程中的代碼復(fù)用提供支持的開(kāi)源框架,大量的機(jī)器人開(kāi)源項(xiàng)目,從感知到控制、從定位到構(gòu)圖、從導(dǎo)航到可視化,幾乎都使用ROS作為基礎(chǔ)。 ? Micro-ROS從何而來(lái)? ? Micro-
    的頭像 發(fā)表于 04-07 07:13 ?7467次閱讀

    系統(tǒng)鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2開(kāi)發(fā)環(huán)境嗎?

    請(qǐng)問(wèn)一下,百度文庫(kù)資料里面,下圖所示的系統(tǒng)鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2開(kāi)發(fā)環(huán)境嗎?與前面4GB版本的鏡像有什么區(qū)別?
    發(fā)表于 03-01 23:06

    ROS2的安裝與使用 精選資料推薦

    ros2的烏龜仿真turtlesim,介紹topic,service,action等元素及其使用,介紹ros的基本操作
    發(fā)表于 08-30 08:24

    如何在ROS2中運(yùn)行小烏龜呢

    ROS2中運(yùn)行小烏龜,其實(shí)主要就是安裝兩個(gè)工具,turtlesim和rqt。A: 安裝turtlesim。輸入【sudo apt update】輸入【sudo apt install
    發(fā)表于 11-05 06:08

    什么是ROS?如何學(xué)習(xí)ROS?

    什么是ROS?如何學(xué)習(xí)ROS
    發(fā)表于 11-11 07:21

    ROS簡(jiǎn)介

    目錄一、ROS簡(jiǎn)介1、什么是ROS2、ROS產(chǎn)生、發(fā)展和壯大的原因和意義二、在Ubuntu系統(tǒng)中,安裝對(duì)應(yīng)版本的ROS軟件1、確定Ubuntu配置2
    發(fā)表于 12-17 08:24

    什么是ROS?ROS產(chǎn)生、發(fā)展和壯大的原因和意義

    機(jī)器人操作系統(tǒng)(ROS)入門(mén)(嵌入式系統(tǒng)應(yīng)用開(kāi)發(fā))一、ROS 基本問(wèn)題1. 什么是 ROS2. ROS 產(chǎn)生、發(fā)展和壯大的原因和意義二、安裝 ROS
    發(fā)表于 12-17 06:08

    ROS/51單片機(jī)/機(jī)器人控制器實(shí)驗(yàn)報(bào)告冊(cè)

    文件分享(微云)課程鏡像說(shuō)明:機(jī)器人工程專(zhuān)業(yè)相關(guān)課程實(shí)踐鏡像2021測(cè)試版(ROS2+Nav2+ESP32+51+……)課程說(shuō)明:ROS2、機(jī)器人控制器、單片機(jī)線上課程
    發(fā)表于 11-23 16:36 ?5次下載
    <b class='flag-5'>ROS</b>/51單片機(jī)/機(jī)器人控制器實(shí)驗(yàn)報(bào)告冊(cè)

    ROS2概述和實(shí)踐入門(mén)

    ROS?2007年發(fā)布以來(lái),為機(jī)器?社區(qū)提供了?套相對(duì)完善的中間層、?具、軟件乃?通?的接?和標(biāo)準(zhǔn),可以說(shuō),憑借ROS,機(jī)器??業(yè)領(lǐng)域的開(kāi)發(fā)者能夠快速開(kāi)發(fā)系統(tǒng)原型并做測(cè)試和驗(yàn)證。?動(dòng)駕駛本質(zhì)上是機(jī)器?研究的?個(gè)應(yīng)?領(lǐng)域,在產(chǎn)品原型快速開(kāi)發(fā)的過(guò)程中也通常會(huì)采?
    的頭像 發(fā)表于 10-26 11:11 ?1.1w次閱讀

    ROS/ROS 2 介紹

    ROS是機(jī)器人操作系統(tǒng)(Robot Operating System)的英文縮寫(xiě)。ROS是用于編寫(xiě)機(jī)器人軟件程序的一種具有高度靈活性的軟件架構(gòu)。ROS的原型源自斯坦福大學(xué)的STanford
    的頭像 發(fā)表于 05-19 17:45 ?4150次閱讀
    <b class='flag-5'>ROS</b>/<b class='flag-5'>ROS</b> <b class='flag-5'>2</b> 介紹

    ASMAv2OpenVINO的開(kāi)源項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《ASMAv2OpenVINO的開(kāi)源項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 06-29 11:43 ?0次下載
    ASMAv<b class='flag-5'>2</b>與<b class='flag-5'>OpenVINO</b>的開(kāi)源項(xiàng)目

    ros的基本概念是什么

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

    ros1和ros2的通信模型

    數(shù)據(jù) ROS2: 參與者(DomainParticipant):一個(gè)參與者Participant就是一個(gè)容器,對(duì)應(yīng)于一個(gè)使用DDS的用戶(hù),任何DDS的用戶(hù)都必須通過(guò)Participant來(lái)訪問(wèn)全局
    的頭像 發(fā)表于 11-27 11:26 ?704次閱讀
    <b class='flag-5'>ros</b>1和<b class='flag-5'>ros2</b>的通信模型

    ROS2中自帶例程測(cè)試

    如果你是一個(gè)ROS2的開(kāi)發(fā)者,可能對(duì)剛才我們使用的ROS2命令比較熟悉,這時(shí)你可能也會(huì)產(chǎn)生一個(gè)問(wèn)題:我們之前也安裝了ROS2系統(tǒng),那ROS2的原生功能還可以正常運(yùn)行么? 我們?cè)賮?lái)試一試
    的頭像 發(fā)表于 11-28 16:29 ?835次閱讀
    <b class='flag-5'>ROS2</b>中自帶例程測(cè)試

    在TogetherROS中如何安裝ROS2功能包

    安裝ROS2功能包 接下來(lái),還有一個(gè)很重要的配置,那就是安裝ROS2功能包,我們說(shuō)TogetherROS是基于ROS2深度優(yōu)化的,很多模塊還是會(huì)復(fù)用ROS2中的功能,所有
    的頭像 發(fā)表于 12-01 16:02 ?857次閱讀
    在TogetherROS中如何安裝<b class='flag-5'>ROS2</b>功能包