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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

无人驾驶汽车系统入门(三十二)——ROS2概述和实践入门(一)

發布時間:2023/12/29 windows 99 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无人驾驶汽车系统入门(三十二)——ROS2概述和实践入门(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ROS可以說是目前機器人相關開源社區最流行的項目之一,它是一個易用且完備的機器人開發框架、生態乃至社區,海量的機器人開源項目(涵蓋感知、規劃、控制、定位、SLAM和建圖、可視化等幾乎所有機器人領域)均使用ROS作為基礎。以自動駕駛汽車為代表的新的機器人應用場景對于中間層和開發框架在實時性、可靠性、伸縮性、跨平臺可移植等方面提出了大量新的需求,ROS顯然不能滿足這些需求,ROS2因此產生,在經歷了若干年的迭代后,ROS2項目目前已經相對完備和穩定,對于我們開發者而言,是時候擁抱ROS2了。

為什么轉向ROS2

ROS自2007年發布以來,為機器人社區提供了一套相對完善的中間層、工具、軟件乃至通用的接口和標準,可以說,憑借ROS,機器人工業領域的開發者能夠快速開發系統原型并做測試和驗證。自動駕駛本質上是機器人研究的一個應用領域,在產品原型快速開發的過程中也通常會采用ROS。

如果說ROS1為科研和原型開發提供了很好的生態的話,那么ROS2就是用于實際產品的部署環境的開發架構和相應工具鏈。

ROS1的天然缺陷

ROS1項目的初衷是為了給科研機器人Willow Garage PR2提供一個開發環境和相應的工具,為了讓這套軟件在更多的機器人上運行,ROS為機器人開發構建了應用層的抽象和通用的消息接口,最終在機器人社區中廣為使用并發展為目前最流行的機器人軟件生態體系之一。然而,ROS1研發的初衷就注定了該架構存在以下缺陷:

  • 無實時性(real-time)
  • 嵌入式設備不友好
  • 對于網絡通信的重依賴(需要大帶寬且穩定的網絡連接)
  • 多用于學術應用
  • 超高的靈活性帶來的不規范的編程模式
  • 原生的ROS僅支持單機器人

然而如今ROS已在大量工業領域的應用,包括科研機器人、工業機器人、輪式機器人、自動駕駛汽車乃至航天無人駕駛設備,其原來的功能設計已經不能滿足海量應用對于某些性能(如實時性、安全性、嵌入式移植等)的需求,ROS2即在這樣的背景下被設計和開發。

ROS2相較于ROS1的提升和改進

相較于ROS1,ROS2在設計之初就考慮了在產品環境下面臨的一些挑戰,具體來說,ROS2采用(或者計劃采用)以下策略以提升其在產品環境的適用度:

  • 支持多機器人
  • 對小型嵌入式設備和微控制器的支持
  • 實時系統:支持實時控制,包括進程間和機器間通信的實時性
  • 支持非理想網絡環境:在低質量高延遲等網絡環境下系統仍然能夠工作
  • 對產品環境的支持的能力
  • 規范的編程模型以支持基于ROS的大規模目的構建、開發和部署

ROS2中的DDS中間層

ROS1的核心是一個基于master中心節點的匿名發布-訂閱通信中間層,相比之下,ROS2采用基于RTPS(Real-Time Publish-Subscribe)協議的DDS作為中間層,DDS(Data-Distribution Service)是一種用于實時和嵌入式系統發布-訂閱式通信的工業標準,這種點到點的通信模式類似于ROS1的中間層,但是DDS不需要像ROS1那樣借由master節點來完成兩個節點間通信,這使得系統更加容錯和靈活,DDS被廣泛應用于關鍵系統中,包括戰艦、大型基礎設施(如水電站)、金融系統、空間系統、航空系統等場景,這些用例也證實了DDS的可靠性。

多個廠商提供多種DDS實現,一般來說DDS的底層通信機制基于UDP協議或者共享內存機制(當然也有廠商提供基于TCP的DDS實現),而ROS2支持多種DDS實現,用戶可以根據實際情況選擇DDS中間層,目前來說ROS2 Foxy完整支持以下DDS中間層:

  • eProsima的Fast RTPS(當前ROS2版本默認的DDS實現)
  • RTI的Connext DDS
  • Eclipse Cyclone DDS

了解更多DDS相關背景,可以參考這篇文章:https://design.ros2.org/articles/ros_on_dds.html

ROS2的內部架構:

ROS2的內部接口主要包括兩個層:

  • rmw (ros middleware interface): 相對底層的接口層,直接和DDS交互,C語言實現
  • rcl (ros cliend libraries): 對rmw相對高層的抽象,c/c++實現

此外上圖中還有一個ros_to_dds組件,該組件主要為用戶直接訪問DDS層提供接口。

更多關于rmw和rcl等中間層的實現機制以及ROS msg,DSS idl文件和python、c++和C上的類(或者結構體)的轉換可以參考ROS2官方文檔:https://docs.ros.org/en/foxy/Concepts/About-Internal-Interfaces.html

ROS2中的QoS策略

ROS2中引入了Quality of Service, QoS(服務質量)的策略用于配置節點間通信,進而提升了ROS2適應于不同應用場景的靈活性。ROS1只支持基于TCP的通信,通過配置QoS,ROS2可以表現出TCP的可靠性,也可以表現出UDP那樣的高實時性。用戶可以通過選擇不同的QoS配置文件以實現不同的通信表現,QoS配置文件為策略的集合,ROS2提供了預設的QoS配置文件,如下所示:

  • 發布-訂閱機制的QoS設定
  • 服務(Service)的QoS設定
  • 傳感器數據的QoS設定
  • 參數的QoS設定
  • DDS中間層默認的QoS設定

ROS2的安裝和開發環境準備

ROS2目前幾乎每半年會release一個版本,不同的版本會有對應的代號(類似與ROS1中的Kinetic, Melodic和Noetic等版本代號),以下是ROS2的一些歷史版本:

  • Crystal: 2018年12月
  • Dashing: 2019年5月底
  • Eloquent: 2019年11月
  • Foxy: 2020年6月
  • Galactic: 2021年5月

我們以最新的Galactic為例,ROS2是跨平臺的架構,同時支持Linux, MacOS 和Windows,但是依據我們在ROS1上開發的經驗,我依然推薦大家在Linux的Ubuntu發行版上從事相應的ROS2 Application開發工作。在Ubuntu上,安裝ROS2可以通過binary安裝或者源代碼編譯安裝,在Ubuntu上,最簡單的安裝方式是通過Debian packages安裝(也就是apt安裝),我們以此為例,在Ubuntu 20.04上使用apt安裝ROS2的Galactic版本。

ROS2在Ubuntu下的安裝

在你的Ubuntu 20.04系統中,配置ROS2的apt源:

sudo apt update && sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

更新apt索引:

sudo apt update

使用apt安裝完整的ROS2:

sudo apt install ros-galactic-desktop

安裝完成后,在~/.bashrc文件中添加ros2的環境變量:

echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc

簡單地驗證一下安裝情況,新建一個terminal,運行demo的talker:

ros2 run demo_nodes_cpp talker

在另一個terminal中,運行listener:

ros2 run demo_nodes_py listener

可以看到,一個類似于ROS1的Publisher-Subscriber通信demo就運行起來了:

不難發現,ROS2并不需要像ROS1那樣啟動roscore(即master節點),ROS2這種去中心化的策略能讓其適應更多工業應用和產品級應用場景的需求。

Note: ROS1和ROS2可以并存于同一臺電腦,你只需要source不同的setup.bash即可完成環境的選擇。

ROS2的基本工具和命令

和ROS1一樣,ROS2也提供了大量的開發調試工具,如Rviz, Rqt等工具均已經可以在ROS2中使用,運行rqt,可以看到我們剛剛運行的兩個demo節點:

運行 rviz2 可以啟動ROS2環境下的rviz軟件。

同時,ROS2也提供類似于ROS1的命令行指令,指令和ROS1略有區別:

  • ros2 node : 輸出node相關信息
  • ros2 topic : topic相關指令,包括list,hz,echo等
  • ros2 service : service相關指令,如list,call,type等
  • ros2 bag : rosbag相關指令, 錄包,播包,打印數據包信息等
  • ros2 bag : package相關指令
  • ros2 param: 參數相關
  • ros2 launch: 運行launch文件
  • ros2 run: 運行單個節點

完整的ros2命令如下所示:

絕大多數指令基本是將ros1中的rosxxxx拆分成了ros2 xxxx

總結

以上是生活随笔為你收集整理的无人驾驶汽车系统入门(三十二)——ROS2概述和实践入门(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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