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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android ros 节点编写_嵌入式的我们为什么要学ROS

發(fā)布時(shí)間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android ros 节点编写_嵌入式的我们为什么要学ROS 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

本來是要寫一篇STM32移植ROS的一個(gè)小lib庫,ROS一般都是需要跑在Linux上的,STM32使用就是當(dāng)成一個(gè)ROS通訊的小節(jié)點(diǎn),但是寫文章時(shí)間不夠,所以就簡單做一篇ROS的介紹文章,分享給嵌入式的小伙伴們。ROS現(xiàn)在在機(jī)器人領(lǐng)域會(huì)有比較多的應(yīng)用,學(xué)習(xí)的人群也逐漸增多,甚至?xí)袑iT的ROS崗位進(jìn)行招聘,并且普遍工資要比一般的嵌入式開發(fā)高一些。今天給大家分享一下,希望大家可以一起學(xué)習(xí)進(jìn)步哈。

?

作者:良知猶存

轉(zhuǎn)載授權(quán)以及圍觀:歡迎添加微信公眾號(hào):羽林君

?

?

ROS是什么

ROS(機(jī)器人操作系統(tǒng),Robot Operating System),是專為機(jī)器人軟件開發(fā)所設(shè)計(jì)出來的一套電腦操作系統(tǒng)架構(gòu)。它是一個(gè)開源的元級(jí)操作系統(tǒng)(后操作系統(tǒng)),提供類似于操作系統(tǒng)的服務(wù),包括硬件抽象描述、底層驅(qū)動(dòng)程序管理、共用功能的執(zhí)行、程序間消息傳遞、程序發(fā)行包管理,它也提供一些工具和庫用于獲取、建立、編寫和執(zhí)行多機(jī)融合的程序。

ROS的運(yùn)行架構(gòu)是一種使用ROS通信模塊實(shí)現(xiàn)模塊間P2P的松耦合的網(wǎng)絡(luò)連接的處理架構(gòu),它執(zhí)行若干種類型的通訊,包括:

1.基于服務(wù)的同步RPC(遠(yuǎn)程過程調(diào)用)通訊;

2.基于Topic的異步數(shù)據(jù)流通訊,還有參數(shù)服務(wù)器上的數(shù)據(jù)存儲(chǔ)。

發(fā)展目標(biāo)

ROS的首要設(shè)計(jì)目標(biāo)是在機(jī)器人研發(fā)領(lǐng)域提高代碼復(fù)用率。ROS是一種分布式處理框架(又名Nodes)。這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合。這些過程可以封裝到數(shù)據(jù)包(Packages)和堆棧(Stacks)中,以便于共享和分發(fā)。ROS還支持代碼庫的聯(lián)合系統(tǒng)。使得協(xié)作亦能被分發(fā)。這種從文件系統(tǒng)級(jí)別到社區(qū)一級(jí)的設(shè)計(jì)讓獨(dú)立地決定發(fā)展和實(shí)施工作成為可能。上述所有功能都能由ROS的基礎(chǔ)工具實(shí)現(xiàn)。

為了實(shí)現(xiàn)“共享與協(xié)作”這一首要目標(biāo),人們制訂了ROS架構(gòu)中的其他支援性目標(biāo):

  • “輕便”:ROS是設(shè)計(jì)得盡可能方便簡易。您不必替換主框架與系統(tǒng),因?yàn)镽OS編寫的代碼可以用于其他機(jī)器人軟件框架中。毫無疑問的,ROS更易于集成與其他機(jī)器人軟件框架。事實(shí)上ROS已完成與OpenRAVE、Orocos和Player的整合。
  • ROS-agnostic庫:【agnostic:不可知論】建議的開發(fā)模型是使用clear的函數(shù)接口書寫ROS-agnostic庫。
  • 語言獨(dú)立性:ROS框架很容易在任何編程語言中執(zhí)行。我們已經(jīng)能在Python和C++中順利運(yùn)行,同時(shí)添加有Lisp、Octave和Java語言庫。
  • 測試簡單:ROS有一個(gè)內(nèi)建的單元/組合集測試框架,稱為“rostest”。這使得集成調(diào)試和分解調(diào)試很容易。
  • 擴(kuò)展性:ROS適合于大型實(shí)時(shí)系統(tǒng)與大型的系統(tǒng)開發(fā)項(xiàng)目

在ROS的計(jì)算圖中,ROS的Master以一個(gè)name service的方式工作。它給ROS的節(jié)點(diǎn)存儲(chǔ)了topics和service的注冊信息。Nodes 與Master通信從而報(bào)告它們的注冊信息。當(dāng)這些節(jié)點(diǎn)與master通信的時(shí)候,它們可以接收關(guān)于其他以注冊節(jié)點(diǎn)的信息并且建立與其它以注冊節(jié)點(diǎn)之間的聯(lián)系。當(dāng)這些注冊信息改變時(shí)Master也會(huì)回饋這些節(jié)點(diǎn),同時(shí)允許節(jié)點(diǎn)動(dòng)態(tài)創(chuàng)建與新節(jié)點(diǎn)之間的連接。

節(jié)點(diǎn)之間的連接是直接的;Master僅僅提供了查詢信息,就像一個(gè)DNS服務(wù)器。節(jié)點(diǎn)訂閱一個(gè)topic將會(huì)要求建立一個(gè)與發(fā)布該topics的節(jié)點(diǎn)的連接,并且將會(huì)在同意連接協(xié)議的基礎(chǔ)上建立該連接。ROS里面使用最廣的連接協(xié)議是TCPROS,這個(gè)協(xié)議使用標(biāo)準(zhǔn)的TCP/IP 接口。

這樣的架構(gòu)允許解耦操作(decoupled operation),通過這種方式大型或是更為復(fù)雜的系統(tǒng)得以建立,其中names方式是一種行之有效的手段。names方式在ROS系統(tǒng)中扮演極為重要的角色:topics, services, and parameters 都有各自的names。每一個(gè)ROS客戶端庫都支持重命名,這等同于,每一個(gè)編譯成功的程序能夠以另一種形似【名字】運(yùn)行。

ROS通信接口正在成為機(jī)器人軟件互操作的事實(shí)標(biāo)準(zhǔn),也就是 說絕大部分最新的硬件驅(qū)動(dòng)和最前沿的算法實(shí)現(xiàn)都可以在 ROS中找到。例如,在ROS的官方網(wǎng)頁 上有著大量的開源軟 件庫,這些軟件使用ROS通用接口,從而避免為了集成它們而 重新開發(fā)新的接口程序

?

ROS可以做什么

當(dāng)我們希望稍微提高一下機(jī)器人復(fù)雜度的時(shí)候,就會(huì)發(fā)現(xiàn)另一個(gè)需要考慮的問題,進(jìn)程間通信。在我們用Windows + RTX的時(shí)候,進(jìn)程間通信使用RTX提供的shared memory,不過都是比較慢的圖像處理進(jìn)程向shared memory中寫數(shù)據(jù),決策和運(yùn)動(dòng)控制進(jìn)程讀數(shù)據(jù)。shared memory顯然并不是很好的通信方式,這里不再多加討論。ROS則使用了一個(gè)很好的通信架構(gòu),并且是ROS整個(gè)框架的一個(gè)基礎(chǔ)(不論是對于ROS中的topic,service,plugin,actionlib等基礎(chǔ)概念還是rviz,navigation package等功能包。

ROS為開發(fā)者提供了一系列非常有用的工具,可以大大提高我們開發(fā)的效率。

rqt_plot:可以實(shí)時(shí)繪制當(dāng)前任意Topic的數(shù)值曲線;

?

rqt_graph:可以繪制出各節(jié)點(diǎn)之間的連接狀態(tài),和正在使用的Topic等;

?

TF:TF是Transform的簡寫,利用它,我們可以實(shí)時(shí)知道各連桿坐標(biāo)系的位姿,也可以求出兩個(gè)坐標(biāo)系的相對位置。

?

Rviz:超強(qiáng)大的3D可視化工具,可以顯示機(jī)器人模型、3D電影、各種文字圖標(biāo)、也可以很方便二次開發(fā);

?

除了ROS本身之外,世界上已經(jīng)有很多非常優(yōu)秀的機(jī)器人開源項(xiàng)目,但是ROS正逐漸將它們一一囊括在自己的范疇里,所以你可以在ROS里面很容易的使用這些開源項(xiàng)目:(這部分項(xiàng)目介紹文字摘自公眾號(hào):【Nao】 一位交大的算法博士的公眾號(hào))

OROCOS:這個(gè)開源項(xiàng)目主要側(cè)重于機(jī)器人底層控制器的設(shè)計(jì),包括用于計(jì)算串聯(lián)機(jī)械臂運(yùn)動(dòng)學(xué)數(shù)值解的KDL、貝葉斯濾波、實(shí)時(shí)控制等功能。

OpenRave:這是在ROS之前最多人用來做運(yùn)動(dòng)規(guī)劃的平臺(tái),ROS已經(jīng)將其中的ikfast(計(jì)算串聯(lián)機(jī)械臂運(yùn)動(dòng)學(xué)解析解)等功能吸收。

Player:一款優(yōu)秀的二維仿真平臺(tái),可以用于平面移動(dòng)機(jī)器人的仿真,現(xiàn)在在ROS里可以直接使用。

OpenCV:大名鼎鼎的機(jī)器視覺開源項(xiàng)目,ROS提供了cv_bridge,可以將OpenCV的圖片與ROS的圖片格式相互轉(zhuǎn)換。

OMPL:現(xiàn)在最著名的運(yùn)動(dòng)規(guī)劃開源項(xiàng)目,已經(jīng)成了MoveIt的一部分。

Visp:一個(gè)開源視覺伺服項(xiàng)目,已經(jīng)跟ROS完美整合。

Gazebo:一款優(yōu)秀的開源仿真平臺(tái),可以實(shí)現(xiàn)動(dòng)力學(xué)仿真、傳感器仿真等,也已被ROS吸收。

當(dāng)然,除了吸收別的優(yōu)秀開源項(xiàng)目,ROS自己也發(fā)展出許多非常優(yōu)秀的項(xiàng)目和庫。

ORK:一個(gè)物體識(shí)別與位姿估計(jì)開源庫,包含LineMod等算法,但實(shí)際使用效果還不是太理想。下圖是LineMod識(shí)別效果

?

PCL:一個(gè)開源點(diǎn)云處理庫,原本是從ROS中發(fā)展起來的,后來由于太受歡迎,為了讓非ROS用戶也能用,就單獨(dú)立了一個(gè)PCL的項(xiàng)目。

Gmapping:這其實(shí)是在OpenSlam項(xiàng)目繼承過來的(后來發(fā)展和改動(dòng)較大),利用gmapping可以實(shí)現(xiàn)laser-based SLAM,快速建立室內(nèi)二維地圖,下圖就是gmapping建立二維地圖

?

Localization:基于擴(kuò)展卡爾曼濾波(EKF)和無跡卡爾曼濾波(UKF)的機(jī)器人定位算法,可以融合各種傳感器的定位信息,獲得較為準(zhǔn)確的定位效果。

robot_localization示意圖

?

Navigation:基于Dijkstra、A*算法(全局規(guī)劃器)和動(dòng)態(tài)窗口法DWA(局部規(guī)劃器)的移動(dòng)機(jī)器人路徑規(guī)劃模塊,可以在二維地圖上實(shí)現(xiàn)機(jī)器人導(dǎo)航。

?

MoveIt:這個(gè)是專注于移動(dòng)機(jī)械臂運(yùn)動(dòng)規(guī)劃的模塊,運(yùn)動(dòng)規(guī)劃.

?

當(dāng)然,除了這些最先進(jìn)算法外,ROS還有各種機(jī)器人、傳感器驅(qū)動(dòng)等內(nèi)容。

?

ROS怎么學(xué)

Nao作者

首先,ROS版本定期更新、主要模塊有專人維護(hù)、問答區(qū)活躍、各mail lists也非常活躍、開發(fā)者非常熱衷交流分享。如果深入到ROS社區(qū),可以學(xué)到很多東西。

ROS的基本架構(gòu)和開發(fā)方式。我個(gè)人是強(qiáng)烈推薦直接看ROS官網(wǎng)上的教程ROS/Tutorials的Beginner Level(多看幾遍),同時(shí)充分使用ROS的問答社區(qū)ROS Answers與各模塊的Mail Lists,很多基礎(chǔ)問題可能前人都遇到過。

其次,在了解ROS的基本架構(gòu)與開發(fā)方式后,就可以有針對性地看自己所關(guān)心的部分了。如做移動(dòng)機(jī)器人的同學(xué)就去看Navigation教程;做物體識(shí)別的就去看ORK教程;做運(yùn)動(dòng)規(guī)劃的就去看MoveIt教程。這一步最好能跟有實(shí)際機(jī)器人練手(如果沒有的話,就用gazebo仿真)。由于一些模塊的教程不夠清楚(如MoveIt),一定要多練習(xí),甚至是去看部分源碼,先保證自己會(huì)用ROS實(shí)現(xiàn)一些功能。

對于ROS與實(shí)際機(jī)器人的連接,建議仔細(xì)看看action(編寫機(jī)器人驅(qū)動(dòng)package)、URDF(機(jī)器人描述文件)的教程(或者ros_control)。我為SDA5F機(jī)器人編寫了URDF文件,并修改了motoman_driver中的action,使得在ROS環(huán)境中用MoveIt規(guī)劃控制雙臂機(jī)器人運(yùn)動(dòng)。

最后,就是進(jìn)階階段了。我要強(qiáng)調(diào)一句“ROS只是一個(gè)工具",你會(huì)用ROS做SLAM并不能說明你會(huì)做SLAM。對于自己研究的內(nèi)容,必須沉下心去看教材和論文,去理解每種算法背后的原理,知道如何調(diào)整算法參數(shù)、如何改進(jìn)算法,最終能夠自己編寫某部分代碼,并替換ROS的相應(yīng)模塊(如自己寫運(yùn)動(dòng)學(xué)正逆解替代KDL等)。做研究,交流非常重要。如果你改進(jìn)ROS某一算法后,最好能與package的原作者交流,將自己的修改merge到原項(xiàng)目中,在交流中提高自己與package的水平。當(dāng)然,如果對算法有疑問,也可以直接咨詢作者,ROS里的貢獻(xiàn)者大都非常愿意分享和交流。

此外除了一個(gè)好的學(xué)習(xí)平臺(tái),我們還需要一個(gè)趁手的使用工具:推薦TurtleBot

?

TurtleBot可以說是ROS中最為重要的機(jī)器人之一,它伴隨ROS一同成長,一直都作為ROS開發(fā)前沿的機(jī)器人,幾乎每個(gè)版本的ROS測試都會(huì)以TurtleBot為主,包括ROS2也率先在TurtleBot上進(jìn)行了大量測試。

所以TurtleBot是ROS支持度最好的機(jī)器人之一,可以在ROS社區(qū)中獲得大量關(guān)于TurtleBot的相關(guān)資源,很多功能包都能直接復(fù)用到我們自己的移動(dòng)機(jī)器人平臺(tái)上,絕對是使用ROS開發(fā)移動(dòng)機(jī)器人的重要資源。并且TurtleBot相關(guān)的國內(nèi)支持平臺(tái):創(chuàng)客制造網(wǎng)站也提供了許多詳細(xì)資料。

這就是我分享的ROS,最近也有在用ROS以及更加深入的學(xué)習(xí)ROS,有些資料大家可以添加我微信,我可以分享給大家。此外如果大家有什么更好的思路,也歡迎分享交流哈。

END—

推薦閱讀

【1】c++nullptr(空指針常量)、constexpr(常量表達(dá)式)

【2】嵌入式底層開發(fā)的軟件框架簡述 必讀
【3】CPU中的程序是怎么運(yùn)行起來的
【4】C++的匿名函數(shù)(lambda表達(dá)式)
【5】階段性文章總結(jié)分析

本公眾號(hào)全部原創(chuàng)干貨已整理成一個(gè)目錄,回復(fù)[ 資源 ]即可獲得.

總結(jié)

以上是生活随笔為你收集整理的android ros 节点编写_嵌入式的我们为什么要学ROS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。