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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Apollo进阶课程㉛丨Apollo ROS概述

發(fā)布時間:2023/12/10 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apollo进阶课程㉛丨Apollo ROS概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原創(chuàng): 阿波君 Apollo開發(fā)者社區(qū) 1周前

ROS提供一些標準操作系統(tǒng)服務(wù),例如硬件抽象、底層設(shè)備控制、常用功能實現(xiàn)、進程間消息以及數(shù)據(jù)包管理。ROS是基于一種圖狀架構(gòu),從而不同節(jié)點的進程能接受、發(fā)布、聚合各種信息(如傳感、控制、狀態(tài)、規(guī)劃等)。

上周阿波君為大家詳細介紹了「進階課程?Apollo ROS背景介紹」

主要引入ROS的背景介紹,講述了自動駕駛系統(tǒng)的組成及發(fā)展,此外還詳細地講解了選擇ROS的原因,其原因有三個方面:首先ROS是一個比較強大、靈活的機器人編程框架;其次ROS基于消息機制,開發(fā)者可以根據(jù)功能把軟件拆分成獨立的子模塊;最后ROS是學術(shù)界廣泛使用的一個框架,對實驗各種新算法提供了一些支持。

本周阿波君將繼續(xù)與大家分享Apollo ROS概述的相關(guān)課程。下面,我們一起進入進階課程第31期。

目前ROS僅適用于Apollo 3.0之前的版本,最新代碼及功能還請參照Apollo 3.5及5.0版本。

目錄

1.ROS的歷史

2.ROS的特征

3.ROS的幾個核心概念

4.ROS的實踐

啟動Roscore

啟動一個簡單的Talker程序

通過命令查看Talker node

啟動一個Listen節(jié)點

再次通過命令查看Node

5.ROS的Catkin編譯系統(tǒng)

6.ROS的仿真功能Gazebo


1.ROS的歷史

ROS是2007年在斯坦福大學里面的一個實驗室學生開發(fā)出來的一套機器人通用的一個框架,2013年被納入OSRF機構(gòu)統(tǒng)一管理,如今被很多公司和大學的研究所廣泛地使用到一些科研項目中。


2.ROS的特征

ROS有5個比較明顯的特征如下:

  • 點對點:兩個Node之間進行消息通訊是一個點對點的行為。

  • 它支持分布式:在部署多機之間的消息通訊時,ROS提供了一個天然的支持。

  • 它是跨語言,它并不關(guān)注每個節(jié)點之間是用什么語言來寫的。你只需要按照ROS提供的一些接口完成消息的訂閱和分發(fā)即可以完成一個消息之間的通信。

  • 它是一個輕量級的ROS程序,用戶只需要關(guān)注自己核心模塊的算法邏輯,不需要關(guān)注底層是如何通信、如何斷開通信、如何進行Service 和Param之間的一些交互的。

  • 它是一個開源的框架,大家都可以往ROS里面貢獻自己的一些想法和代碼。


  • 3.ROS的幾個核心概念

    • 松耦合:ROS是一個松耦合的框架,松耦合就是各個節(jié)點之間的通信是一個解耦合的關(guān)系。
    • 節(jié)點:一個算法模塊,比如自動駕駛系統(tǒng)里面的感知模塊、定位模塊、決策模塊或者控制模塊,這些模塊就是一個簡單的算法集合,在ROS里面被稱為一個節(jié)點。
    • 節(jié)點管理器:在ROS里面被定義為Master,用來集中式管理各個獨立的、松耦合、無序節(jié)點之間的邏輯關(guān)系,它是輕量級的介入,當各個節(jié)點啟動完成以后,他們在通信連接完成之前起到中轉(zhuǎn)也就是類似于交換機的作用。
    • Topic:兩個節(jié)點之間的通信主題。Topic內(nèi)部使用的數(shù)據(jù)格式是Message。Message是一系統(tǒng)簡單的數(shù)據(jù)類型或者是一些自定義的復(fù)雜數(shù)據(jù)類型,所組裝成的一個描述文件。

    以上幾個概念之間的相互關(guān)系,如下圖所示:

    感知模塊Perception,感知車輛周圍的一些障礙物信息,用CNN或者RNN算法將障礙物信息提取出來,即Obstacle。再將這些信息輸出給下游Planning節(jié)點。這兩個節(jié)點之間的通信連接就需要Roscore,即節(jié)點管理器。

    Perception、Planning在啟動的時候沒有先后關(guān)系,這是松耦合的一個具體體現(xiàn)。Perception先啟動并向Roscore發(fā)送一個注冊信息,同時會訂閱名為Obstacle的Topic;Planning節(jié)點啟動后也向Roscore發(fā)送一個注冊信息,同時會訂閱名為Obstacle的Topic;在這種情況下,Roscore會發(fā)送一個通知信息給Planning,在它發(fā)送注冊信息之前已經(jīng)有一個節(jié)點啟動了。此時Planning會向Perception發(fā)送消息請求通信連接,Planning收到消息之后會在Planning和Perception兩個節(jié)點中間建立一個實時通信鏈路。當通信鏈路建立之后,Roscore的功能就暫時完成了。

    所以,松耦合在此有兩種體現(xiàn):

  • Perception和Planning兩者之間的啟動沒有先后關(guān)系。

  • 當通信鏈路建立之后,Roscore的功能就暫時完成了。

  • 這些概念在ROS系統(tǒng)都有一整套的命令工具支持如下:

    1. Roscore:啟動一個節(jié)點管理器。

    2. 節(jié)點常用命令:

    Rosnode list:可以列出當前系統(tǒng)里面所存在的節(jié)點。

    Rosnode info:查看某一節(jié)點的具體的一些信息。

    3. Topic常用命令:

    Rostopic list:可以查看所存在Topic的一些列表。

    Rostopic info:可以查看到發(fā)送這個Topic的發(fā)送方,訂閱這個Topic的訂閱方。

    Rostopic type:查看Topic內(nèi)部所使用的MSG的數(shù)據(jù)結(jié)構(gòu)。

    Rostopic pub:調(diào)試計算節(jié)點模塊的一些基本功能。


    4.ROS的實踐

    下面是一個簡單的實踐:

    啟動Roscore

    啟動Roscore,通過一個簡單的命令行Roscore就可以啟動一個節(jié)點管理器。不需要進行任何參數(shù)的傳入,也不需要進行任何配置。

    如果有很多個節(jié)點啟動的時候,會使用Roslaunch。Roslaunch就是把所有啟動節(jié)點的行為放到統(tǒng)一的描述文件里,在啟動的時候會在描述文件里找到定義的各個節(jié)點的位置,然后啟動節(jié)點。


    啟動一個簡單的Talker程序

    Talker就是一個發(fā)送節(jié)點的程序。單獨啟動一個節(jié)點,除了Roscore啟動之外,其它的節(jié)點啟動ROS提供了一個Rosrun命令。Rosrun,前面是Package包,后面是實際的可執(zhí)行文件。通過這樣簡單的一個命令可以直接啟動一個Talker。


    通過命令查看Talker node

    當啟動這個節(jié)點之后,用Rosnode list,見上圖Talker的Node文件,還有一個Rosout的程序節(jié)點。Roscore默認啟動的時候啟動了一個隱藏節(jié)點,它是一個記錄日志相關(guān)的節(jié)點,所有節(jié)點發(fā)生的Log都會被Roscore啟動的Rosout所訂閱,訂閱完之后會根據(jù)一些特定的規(guī)則把這些Log分級,然后分模塊、分文件打印到對應(yīng)的模塊日志里。

    Rosnode info查看Talker相關(guān)的一些節(jié)點,Talker發(fā)送的Topic以及它發(fā)送的Service。它有兩個Service:Setlogger、Getlogger。這兩個是每一個節(jié)點都會默認啟動的兩個Service,這兩個Service的作用是設(shè)置這一個節(jié)點里面的日志層級,如果日志層級是INFO,那么它打印的Debug信息就不會記錄在Roscore的Rosout節(jié)點里面。

    Rostopic info,通過這個命令我們能看到Topic的發(fā)送方和接收方。

    Rostopic?type是查看Topic的一個Message的消息類型。

    Rostopic?echo是相當于起了一個Listener節(jié)點,去展示Talker發(fā)的Topic包含的具體信息。

    Rostopic還提供了HZBW功能,HZ是統(tǒng)計Talker節(jié)點發(fā)送Obstacle topic的頻率,根據(jù)此頻率能簡單的探測系統(tǒng)是否按照我們所預(yù)期的方向來執(zhí)行,例如自動駕駛整個車系統(tǒng)里面每一個傳感器有一定的頻率,激光雷達是十赫茲,即一秒鐘轉(zhuǎn)十圈,會發(fā)十幀點云圖像,我們可以通過Rostopic HZ去檢測Topic是不是一秒鐘發(fā)送十赫茲,如果低于十赫茲,說明當前系統(tǒng)肯定是有異常,要么是激光雷達掃描的過程受到影響,要么是頂層的Driver節(jié)點在處理激光雷達頂層信息的時候中間出現(xiàn)了一些故障,此時我們就需要具體探測問題出現(xiàn)在哪個地方。


    啟動一個Listen節(jié)點

    現(xiàn)在啟動一個Listener節(jié)點,啟動Listener節(jié)點之后整個拓撲會有一個比較明顯的變化,Listener啟動向Roscore發(fā)送一個注冊信息,同時會訂閱Topic,Roscore會發(fā)送一個通知信息給Listener:在它發(fā)送注冊信息之前已經(jīng)有一個節(jié)點啟動了。此時,Listener會向Talker發(fā)送消息請求通信連接,Listener收到消息之后會在Listener和Talker兩個節(jié)點中間建立一個實時通信鏈路。這個通信鏈路是基于TCP的,TCP建立起來之后Talker就持續(xù)不斷的發(fā)送信息,Listener接到信息之后去做回調(diào)處理供實際的決策和執(zhí)行。


    再次通過命令查看Node

    在啟動Talker節(jié)點之后,通過Rosnode list看到增加的一個節(jié)點就是Listener,它包含了一個完整的拓撲:包含發(fā)送節(jié)點和接收節(jié)點。


    5.ROS的Catkin編譯系統(tǒng)

    ROS是基于Cmake編寫的Catkin編譯系統(tǒng)。建立一個工程包,在ROS里面寫一個節(jié)點,通過Catkin create 可以簡單創(chuàng)建一個文件夾,這個文件夾里面會預(yù)先設(shè)置一些文件目錄,通過Catkin build編譯建立軟件包的過程。Catkin build執(zhí)行之后,里面會多兩個文件夾:DEVEL、BUILD 。BUILD是編譯中間過程產(chǎn)生的文件。編譯完成之后,通過Source devel下面的Setup bash就可以把自己編寫的節(jié)點程序給Source到ROS的環(huán)境里面,然后去執(zhí)行我們節(jié)點里面的一些基本功能。

    以上是三個比較重要的文件夾,第一個是SRC用來放源文件的一些目錄;第二個是BUILD,第三個是DEVEL,這兩個是在Catkin build的過程當中產(chǎn)生的臨時文件夾。想重編譯的話可以直接Catkin build,如果環(huán)境里面有一些沖突,可以通過Catkin clean 簡單的去把編譯產(chǎn)生的臨時文件和之前的一些產(chǎn)出文件直接清除掉。

    Catkin config指定了命令行編譯的一些方式,這些方式可以在Cmakelists里面進行編寫。Cmakelists里面指定了這個文件編譯過程當中所依賴的一些庫、產(chǎn)出的一些可執(zhí)行文件和這些可執(zhí)行文件鏈接了一些什么庫,Cmakelists里面都有一些很清晰的定義。

    在啟動節(jié)點的時候使用了Roslaunch,Roslaunch是一個Shell腳本文件,Shell腳本文件里面根據(jù)語言定義的一些Xml格式去找到運行的一系列節(jié)點所在的位置然后執(zhí)行它。它的執(zhí)行格式是前面加上Package Name,后面加上實際的Launch文件。


    6.ROS的仿真功能Gazebo

    這個是Gazebo的Simulator仿真工具。我們在實際進行開發(fā),不管是機器人還是自動駕駛相關(guān)的一些具體功能的時候,我們不可能就是開發(fā)一個功能然后到實體的機器人或者是自動駕駛的汽車上去進行模擬實驗。ROS提供了仿真功能Gazebo,我們定義的節(jié)點在里面是實體的存在,通過控制一些參數(shù)和變量去模擬他們之間的一些交互,去驗證算法在實際的運行中是否按預(yù)期進行表現(xiàn)。

    總結(jié)

    以上是生活随笔為你收集整理的Apollo进阶课程㉛丨Apollo ROS概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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