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

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

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

3天內不再提示

ROS機器人操作系統

jf_78858299 ? 來源:大數據DT ? 作者:張虎 ? 2023-05-19 17:46 ? 次閱讀

01 ROS簡介

可能很多初學者聽到機器人操作系統,就被“操作系統”幾個字嚇住了。其實簡單點說,ROS就是一個分布式的通信框架,幫助程序進程之間更方便地通信。

一個機器人通常包含多個部件,每個部件都有配套的控制程序,以實現機器人的運動與視聽功能等。那么要協調一個機器人中的這些部件,或者協調由多個機器人組成的機器人集群,怎么辦呢?這時就需要讓分散的部件能夠互相通信,在多機器人集群中,這些分散的部件還分散在不同的機器人上。解決這種分布式通信問題正是ROS的設計初衷。

隨著越來越多的人參與ROS開發及源碼貢獻,社區涌現出大量的第三方工具和實用開源軟件包,使ROS變成現在的樣子。

一個經常讓初學者困惑的地方是,學會了ROS就是學會機器人開發了嗎?當然不是,嚴格意義上講ROS只是一套通信框架而已,機器人中的各種算法和應用程序依然是用C++Python等常見編程語言進行開發的。

1. ROS的性能特色

在正式學習ROS之前,先介紹ROS的幾個特性,即元操作系統、分布式通信機制、松耦合軟件框架、豐富的開源功能庫等,來幫大家建立一些感性的認識。

ROS是一個機器人領域的元操作系統。也就是說,它并不是真正意義上的操作系統,其底層的任務調度、編譯、設備驅動等還是由它的原生操作系統Ubuntu Linux完成。

ROS實際上是運行在Ubuntu Linux上的亞操作系統 ,或者說軟件框架,但提供硬件抽象、函數調用、進程管理這些類似操作系統的功能,也提供用于獲取、編譯、跨平臺的函數和工具。

ROS的核心思想就是將機器人的軟件功能做成一個個節點,節點之間通過互相發送消息進行溝通。 這些節點可以部署在同一臺主機上,也可以部署在不同主機上,甚至還可以部署在互聯網上。ROS網絡通信機制中的主節點(master)負責對網絡中各個節點之間的通信過程進行管理調度,同時提供一個用于配置網絡中全局參數的服務。

ROS是松耦合軟件框架,利用分布式通信機制實現節點間的進程通信。ROS的軟件代碼以松耦合方式組織,開發過程靈活,管理維護方便。

ROS具有豐富的開源功能庫。ROS是基于BSD(Berkeley Software Distribution,伯克利軟件發行)協議的開源軟件,允許任何人修改、重用、重發布以及在商業和閉源產品中使用,使用ROS能夠快捷地搭建自己的機器人原型。

2. ROS的發行版本

與Linux發行版類似,ROS發行版內置了一系列常用功能包,即將ROS系統打包安裝到原生系統中。ROS最初是基于Ubuntu系統開發的,ROS的發行版本名稱也和Ubuntu采用了同樣的規則,即版本名稱由兩個相同首字母的英文單詞組成,版本首字母按字母表遞增順序選取,圖1-1展示了ROS的一些主要版本。

圖片

▲圖1-1 ROS的主要版本

3. ROS的學習方法

要想學好以及用好ROS,需要進行大量的實踐操作。因此在快速了解ROS的核心概念和編程范式后,就要結合大量的實際項目來深入理解ROS。學會用正確的方式解決問題,能幫你更快地提高能力。ROS的學習資源主要有以下幾個。

  • 官網:www.ros.org
  • 源碼:github.com
  • Wiki:wiki.ros.org
  • 問答:answers.ros.org

02 ROS系統架構

安裝完ROS后,很多朋友應該迫不及待想立馬開始寫程序。由于ROS的架構比較復雜,為了后面容易理解遇到的各種概念,這里先討論一下ROS的系統架構,好讓大家對ROS中的各種概念有全面性把控。按照官方的說法,可以分別從 計算圖 、文件系統開源社區視角來理解ROS架構。

1. 從計算圖視角理解ROS架構

ROS中可執行程序的基本單位叫 節點 (node),節點之間通過消息機制進行通信,這樣就組成了一張網狀圖,也叫計算圖,如圖1-3所示。

圖片

▲圖1-3 ROS的計算圖結構

節點是可執行程序,通常也叫進程。ROS功能包中創建的每個可執行程序在被啟動加載到系統進程中后,就是一個ROS節點,如圖1-3中的節點1、節點2、節點3等。

節點之間通過收發消息進行通信,消息收發機制分為 話題 (topic)、 服務 (service)和 動作action)三種,如圖1-3中的節點2與節點3、節點2與節點5采用話題通信,節點2與節點4采用服務通信,節點1與節點2采用動作通信。計算圖中的節點、話題、服務、動作都要有唯一名稱作為標識。

ROS利用節點將代碼和功能解耦,提高了系統的容錯性和可維護性。所以最好讓每個節點都具有特定的單一功能,而不是創建一個包羅萬象的龐大節點。如果用C++編寫節點,需要用到ROS提供的roscpp庫;如果用Python編寫節點,需要用到ROS提供的rospy庫。

消息是構成計算圖的關鍵,包括消息機制和消息類型兩部分。消息機制有話題、服務和動作三種,每種消息機制中傳遞的數據都具有特定的數據類型(即消息類型),消息類型可分為話題消息類型、服務消息類型和動作消息類型。消息機制和消息類型將在1.5節中展開講解。

數據包 (rosbag)是ROS中專門用來保存和回放話題中數據的文件,可以將一些難以收集的傳感器數據用數據包錄制下來,然后反復回放來進行算法性能調試。

參數服務器能夠為整個ROS網絡中的節點提供便于修改的參數。參數可以認為是節點中可供外部修改的全局變量,有靜態參數和動態參數。靜態參數一般用于在節點啟動時設置節點工作模式;動態參數可以用于在節點運行時動態配置節點或改變節點工作狀態,比如電機控制節點里的PID控制參數。

主節點負責各個節點之間通信過程的調度管理。因此主節點必須要最先啟動,可以通過roscore命令啟動。

2. 從文件系統視角理解ROS架構

ROS程序的不同組件要放在不同的文件夾中,這些文件夾根據不同的功能對文件進行組織,這就是ROS的文件系統結構,如圖1-4所示。

圖片

▲圖1-4 ROS的文件系統結構

工作空間是一個包含功能包、編譯包和編譯后可執行文件的文件夾,用戶可以根據自己的需要創建多個工作空間,在每個工作空間中開發不同用途的功能包。在圖1-4中,我們創建了一個名為catkin_ws的工作空間,其中包含src、build和devel三個文件夾。

  • src文件夾放置各個功能包和配置功能包的CMake配置文件CMakeLists.txt。這里說明一下,由于ROS中的源碼采用catkin工具進行編譯,而catkin工具又基于CMake技術,所以我們在src源文件空間和各個功能包中都會見到一個CMake配置文件CMakeLists.txt,這個文件起到配置編譯的作用。
  • build文件夾放置編譯CMake和catkin功能包時產生的緩存、配置、中間文件等。
  • devel文件夾放置編譯好的可執行程序,這些可執行程序是不需要安裝就能直接運行的。一旦功能包源碼編譯和測試通過后,可以將這些編譯好的可執行文件直接導出與其他開發人員分享。

功能包是ROS中軟件組織的基本形式,具有創建ROS程序的最小結構和最少內容,它包含ROS節點源碼、腳本、配置文件等。

  1. CMakeLists.txt是功能包配置文件,用于編譯Cmake功能包編譯時的編譯配置。
  2. package.xml是功能包清單文件,用xml的標簽格式標記該功能包的各類相關信息,比如包的名稱、開發者信息、依賴關系等,主要是為了使功能包的安裝和分發更容易。
  3. include/是功能包頭文件目錄,可以把功能包程序中包含的*.h頭文件放在這里。include目錄之所以還要加一級路徑是為了更好地區分自己定義的頭文件和系統標準頭文件,用實際功能包的名稱替代。不過這個文件夾不是必要項,比如有些程序沒有頭文件。
  4. msg、srv和action這三個文件夾分別用于存放非標準話題消息、服務消息和動作消息的定義文件。ROS支持用戶自定義消息通信過程中使用的消息類型。這些自定義消息不是必要的,比如程序只使用標準消息類型。
  5. scripts目錄存放Bash、Python等腳本文件,為非必要項。
  6. launch目錄存放節點的啟動文件,*.launch文件用于啟動一個或多個節點,在含有多個節點的大型項目中很有用,為非必要項。
  7. src目錄存放功能包節點所對應的源代碼,一個功能包中可以有多個節點程序來完成不同的功能,每個節點程序都可以單獨運行。這里src目錄存放的是這些節點程序的源代碼,你可以按需創建文件夾和文件來組織源代碼,源代碼可以用C++、Python等編寫。

3. 從開源社區視角理解ROS架構

ROS是開源軟件,各個獨立的網絡社區分享和貢獻軟件及教程,形成了強大的ROS開源社區,如圖1-5所示。

圖片

▲圖1-5 ROS的開源社區結構

ROS的發展依賴于開源和共享的軟件,這些代碼由不同的機構共享和發布,比如GitHub源碼共享、Ubuntu軟件倉庫發布、第三方庫等。ROS的官方wiki是重要的文檔討論社區,在里面可以很方便地發布與修改相應的文檔頁面。ROS的answer主頁里有大量ROS開發者的提問和回答,對ROS開發中遇到的各種問題的討論很活躍。

關于作者:張虎,深圳市睿思智行科技有限公司CEO。曾就職于深圳市智能機器人研究院,主持機器人自主導航方面的研究項目。工作期間以網名“小虎哥哥愛學習”在知乎、CSDN、bilibili等平臺創作了大量機器人SLAM導航相關的優質博客文章及視頻教程,深受廣大網友的喜愛。他對強人工智能的研究非常感興趣,并致力于將具有先進智能的機器人進行產業化落地。

本文摘編自《機器人SLAM導航:核心技術與實戰》,經出版方授權發布。(ISBN:9787111697428)

圖片

《機器人SLAM導航:核心技術與實戰》

點擊上圖了解及購買

轉載請聯系微信:DoctorData

**推薦語:**機器人SLAM導航的百科全書,真正打通軟硬件,突破SLAM與導航技術壁壘,加速算法和機器人產品落地;全面剖析傳感器、ROS、SLAM和導航核心算法,深入數學原理,解析熱門框架,手把手帶你從零構建真實機器人。

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

    關注

    210

    文章

    28205

    瀏覽量

    206520
  • 操作系統
    +關注

    關注

    37

    文章

    6738

    瀏覽量

    123190
  • 分布式
    +關注

    關注

    1

    文章

    879

    瀏覽量

    74466
收藏 人收藏

    評論

    相關推薦

    【云智易申請】基于ROS操作系統的無線圖傳小車

    ROS機器人操作系統與stm32進行交互控制,通過ROS的分布式管理用手柄無線控制小車。步驟1:采用ROS
    發表于 07-23 15:26

    BBB與ROS機器人操作系統

    最近新開個項目,控制單驅動輪的AGV小車,通過上位機(安裝ubuntu的PC機)和下位機(BBB板)分別安裝ROS,通過ROS進行無線通信和控制。不知有哪位高手在BBB板上移植過ROS,并且通過
    發表于 08-26 11:11

    請問能分享ROS機器人操作系統的一些資料嗎?

    菜鳥想要學習ROS機器人操作系統,但是沒能找到系統的資料,請問有哪位大神研究過,可以分享一些資料嗎?跪謝了?。。。。。。。?!
    發表于 02-19 23:14

    創龍TL5728-EasyEVM-A4開發板如何移植ros機器人操作系統?

    創龍TL5728-EasyEVM-A4開發板如何移植ros機器人操作系統?
    發表于 01-02 09:32

    請問hispark 3861開發板支持ROS機器人操作系統嗎?

    不知道是否支持ROS,想用這個板子做路徑規劃導航的?另外請問這個板子的操作系統是liteOS 還是OpenHarmony OS?謝謝!
    發表于 01-19 15:26

    ROS是什么?機器人操作系統ROS的介紹

    ROS 是 Robot Operating System 的縮寫,原本是斯坦福大學的一個機器人項目,后 來由 WillowGarage 公司發展,目前由 OSRF(Open Source
    發表于 09-13 17:23 ?14次下載
    <b class='flag-5'>ROS</b>是什么?<b class='flag-5'>機器人</b><b class='flag-5'>操作系統</b><b class='flag-5'>ROS</b>的介紹

    ROS機器人操作系統,支持Qualcomm驍龍處理器(更新視頻)

    數月前,我的同事 Suraj Swami 發表過一篇文章,介紹了開源機器人基金會(OSRF),以及我們與其開展合作,將 ROS機器人操作系統)程序庫移植到 Snapdrago
    發表于 09-18 18:57 ?794次閱讀

    ROS教程之ROS機器人操作系統基礎知識概述資料免費下載

    ROS文件系統介紹 (1)快速了解ROS文件系統概念 ? 軟件包集(Stack):如果你將幾個具有某些功能的軟件包組織在一起,那么你將會獲得一個軟件包集。在
    發表于 10-15 08:00 ?18次下載
    <b class='flag-5'>ROS</b>教程之<b class='flag-5'>ROS</b><b class='flag-5'>機器人</b><b class='flag-5'>操作系統</b>基礎知識概述資料免費下載

    ROS機器人操作系統底層原理及代碼剖析

    首先,為什么要序列化?或者更具體的說,既然對象的信息本來就是以字節的形式儲存在內存中,那為什么要多此一舉把一些字節數據轉換成另一種形式的、一維的、連續的字節數據呢?
    的頭像 發表于 01-03 10:55 ?859次閱讀

    ROS機器人操作系統的實現原理解析

    首先用Rate的構造函數實例化一個對象loop_rate。調用的構造函數如下??梢?,構造函數使用輸入完成了對三個參數的初始化。
    發表于 01-03 10:56 ?616次閱讀

    ROS機器人操作系統的實現原理(上)

    本文介紹ROS機器人操作系統(Robot Operating System)的實現原理,從最底層分析ROS代碼是如何實現的。 **1、序列化** 把通信的內容(也就是消息m
    的頭像 發表于 05-19 17:41 ?961次閱讀
    <b class='flag-5'>ROS</b><b class='flag-5'>機器人</b><b class='flag-5'>操作系統</b>的實現原理(上)

    ROS機器人操作系統的實現原理(下)

    本文介紹ROS機器人操作系統(Robot Operating System)的實現原理,從最底層分析ROS代碼是如何實現的。 **1、序列化** 把通信的內容(也就是消息m
    的頭像 發表于 05-19 17:42 ?1135次閱讀

    實現ARM+ROS機器人操作系統)之環境搭建!

    如何低成本搭建ARM+ROS的硬件載體?上文為大家介紹了實現的思路及原理,本文將為讀者實際操作,展示ROS部署前的籌備工作及步驟分解。
    的頭像 發表于 09-28 11:21 ?1138次閱讀
    實現ARM+<b class='flag-5'>ROS</b>(<b class='flag-5'>機器人</b><b class='flag-5'>操作系統</b>)之環境搭建!

    實現ARM+ROS機器人操作系統)之運行ROS!

    如何低成本搭建ARM+ROS的硬件載體?上文展示ROS部署前的籌備工作及步驟分解,本文將為大家演示ROS的移植及測試方法。
    的頭像 發表于 10-10 18:15 ?1216次閱讀
    實現ARM+<b class='flag-5'>ROS</b>(<b class='flag-5'>機器人</b><b class='flag-5'>操作系統</b>)之運行<b class='flag-5'>ROS</b>!

    ROS機器人操作系統的實現原理

    面對序列化,很多人心中可能會有很多疑問。 首先,為什么要序列化?或者更具體的說,既然對象的信息本來就是以字節的形式儲存在內存中,那為什么要多此一舉把一些字節數據轉換成另一種形式的、一維的、連續的字節數據呢?
    的頭像 發表于 04-27 02:39 ?3009次閱讀
    <b class='flag-5'>ROS</b><b class='flag-5'>機器人</b><b class='flag-5'>操作系統</b>的實現原理