ROS學習筆記(一) : 入門之基本概念

来源:https://www.cnblogs.com/notesbyY/archive/2019/03/06/10485711.html
-Advertisement-
Play Games

目錄 基本概念 實踐操作 基本概念 1. Package 程式包,裡面包含節點Node、ROS程式庫、數據集、配置文件 Package Manefist 程式包的配置文件,即描述程式包的相關信息,包括其名字、版本、功能簡述、依賴關係 2. Repositories 代碼倉庫 3. Computati ...


目錄

基本概念

1. Package

程式包,裡面包含節點Node、ROS程式庫、數據集、配置文件

Package Manefist

程式包的配置文件,即描述程式包的相關信息,包括其名字、版本、功能簡述、依賴關係

2. Repositories

代碼倉庫

3. Computation Graph

計算圖,ROS在點對點網路里整合併處理數據的過程。圖中包含的基本概念:節點、主機、參數伺服器、消息、服務、話題、數據包。

4. Node

節點,一個機器人控制系統由多個節點組成,每個節點控制不同的部分。比如一個機器人有兩個節點,一個是感測器節點,專門負責接收感測器數據,另一個是控制節點,專門負責控制機器人作出某些動作。

5. Master

主機,節點管理器,功能是對於計算圖中各個元素進行名字註冊(register)和檢索,沒有主機,節點之間就不能找到彼此則無法進行通信。

Parameter Service

參數伺服器,是主機的一部分,允許數據通過鍵的方式存儲

6. Message

消息,節點之間通過傳遞消息交流,消息是一種數據結構

7. Topic

話題,消息的傳輸使用的是發佈\訂閱的機制。一個話題可理解為只針對某種消息,節點發送消息則是將該消息發佈到其對應的話題上,只有那些訂閱該話題的節點才能接收到這個消息。一個話題可能有多個訂閱者和發佈者,一般他們互相是不知道(也不需知道)對方的存在,以達到解耦(decouple)的效果。

【配圖,節點發送消息的過程】

8. Service

服務,儘管"發佈\訂閱"模型非常靈活,但它是多對多、單向傳輸的,不適用於"發出請求\返迴響應"方式的交互,然而這種交互在分散式系統中十分常見。因此 "請求\響應"通過服務來實現。節點需要提供的信息有:所使用服務的名字以及使用服務的客戶,將這些信息打包成請求,發送出去之後等待答覆。

9. Bag

數據包,存儲一段時間內ROS的消息數據

10. Rosout

相當於ROS中的stdout/stderr

11. Roscore

主機+Rosout+參數伺服器


實踐操作

1. workspace 工作空間

catkin工作空間:

創建catkin工作空間,在需要創建的目錄下輸入命令:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
  • 最後一個命令是使用catkin工作空間時很方便的工具,在工作空間中第一次執行該命令時,會自動在~/catkin_ws/src文件夾中創建CMakeList,同時在工作空間目錄中創建build和devel文件夾
  • 在devel文件夾中有幾個setup.*sh 文件,source其中的任一文件可將工作空間路徑包含到環境變數中
source devel/setup.bash
  • 為了確認是否包含,檢查ROS_PACKAGE _PATH這個環境變數的值:
echo $ROS_PACKAGE_PATH

可以看到當前工作空間的路徑在最前面
**【註:roscd, rospack等ROS工具只能針對那些路徑已包含在環境變數ROS_PACKAGE _PATH中的程式包】**

2. package 程式包

2.1 最簡單的程式包 其文件結構看起來如下:

  • my_package
    • CMakeLists.txt
    • package.xml

2.2 在catkin工作空間中的程式包

  • workspace_folder
    • src
    • CMakeLists.txt
    • pkg_1
      • CMakeLists.txt
      • package.xml
    • ...
    • pkg_n
      • CMakeLists.txt
      • package.xml

2.3 在工作空間中創建程式包

cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
  • 最後一個命令用於創建名為beginner_tutorials的新程式包,這個程式包依賴於std _msgs、roscpp和rospy這幾個程式包
  • 執行後在src目錄下看到beginner_tutorials文件夾,裡面包含一個package.xml文件和一個CMakeList,這兩個文件已自動包含了之前在命令中規定的依賴關係
  • catkin_create_pkg 格式:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

2.4 程式包的依賴關係

- 一級依賴

(註意要先將當前工作空間的路徑添加到環境變數中,即前面提到的source命令,這樣之後執行rospack命令才不會報錯提示找不到beginner_tutorials這個包)

rospack depends1 beginner_tutorials

輸出結果

std_msgs
rospy
roscpp
- 間接依賴

對於程式包A的一級依賴程式包B,其自身也依賴一些其它的程式包C,這些程式包C是A的間接依賴

rospack depends1 rospy

可看到rospy的一級依賴

rospack depend beginner_tutorials

遞歸檢測出A的所有的依賴包(包括一級和間接)

2.5 編譯程式包

用catkin_make,可認為是在CMake標準工作流程中依次調用了cmake和make

在工作空間中使用catkin_make
在工作空間的根目錄下,輸入

catkin_make

該命令會編譯位於目錄 catkin_ws/src 中的所有程式包

更多關於catkin_ make的資料: http://wiki.ros.org/catkin/commands/catkin_make


3. 用實際例子理解節點和話題

每個節點是一個可執行文件

節點之間通過話題來通信

  • 比如一個遙控器節點和一個機器人節點,二者通過話題command來通信,遙控器節點發佈信息到command話題中,機器人節點訂閱command話題從而接收到遙控器節點發佈的信息

使用rosrun

rosrun ros_pkg ros_pkg_node
  • 該命令用於運行某個ros程式包中的某個節點

使用rosnode list

rosnode list
  • 該命令可以列出當前活躍的所有節點
  • rosnode help 列出可選的命令參數

使用rostopic echo

rostopic echo [topic]
  • 該命令可以顯示在某個話題上發佈的信息
  • rostopic help 列出可選的命令參數

使用rqt_graph

rosrun rqt_graph rqt_graph
  • 打開rqt_graph 可以觀察到目前有哪些節點在通過什麼話題來通信

使用rqt_plot

rosrun rqt_plot rqt_plot
  • 可以實時顯示一個發佈到某個話題上的數據變化圖形

turtlesim模擬器的使用

首先運行turtlesim包中的turtlesim_node節點[海龜本體]

rosrun turtlesim turtlesim_node

另外打開一個終端

  • 可以通過鍵盤來控制turtle [運行一個控制海龜的節點]
rosrun turtlesim turtle_teleop_key

在新終端中打開rqt_graph,可觀察到這兩個節點通過話題cmmd _vel來通信

rosrun rqt_graph rqt_graph
  • 也可以通過手動發佈消息到話題上來控制turtle

在新終端中, 列出當前的topic

rostopic list

列出該話題的消息類型

rostopic type /turtle1/cmd_vel

列出該消息類型的詳細數據類型

rosmsg show geometry_msgs/Twist

發佈消息到話題cmd_vel,告訴turtlesim _node,使其以2.0大小的線速度和1.8大小的角速度移動

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

命令中的-1表示rostopic發佈一條信息後馬上退出,也可以設置為迴圈發送:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

該信息以1Hz的穩定頻率來發送,使turtle保持移動狀態

這時可以觀察rqt_graph

發現多了一個節點:rostopic發佈器節點,同樣地,該節點與turtlesim_node節點[海龜本體] 通過話題cmd _vel通信


roslaunch的使用

使用roslaunch同時運行多個節點,通過編寫launch文件來配置各個節點

以turtlesim為例

首先保證環境變數中是否有catkin_ws工作空間的路徑

echo $ROS_PACKAGE_PATH

若無,則進入該工作空間的根目錄,執行

source devel/setup.bash

之後在任意目錄下都可以進入之前創建的程式包

roscd beginner_tutorials

新建launch文件夾,在裡面創建launch文件

mkdir launch
gedit turtlemimic.launch

拷貝以下launch文件的內容:
http://wiki.ros.org/cn/ROS/Tutorials/UsingRqtconsoleRoslaunch


ROSCPP

ROS編寫消息發佈器和訂閱器

相關API格式

https://blog.csdn.net/junshen1314/article/details/44701693 更詳細的解釋

[http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 下載安裝git (windows版) 網址:https://git-scm.com/download/win 點擊for windows版本->下載 2. 點擊exe文件安裝,安裝完成後打開cmd,建立倉庫 3. 選擇一個盤創建一個文件夾隨意命名 如:E:\GIT 使用git init命令來初 ...
  • 利用系統函數模擬實現nginx 系統腳本啟動的特殊顏色專業效果/etc/init.d/nginxd {start/stop/restart/reload}利用if語句實現: 實現特殊顏色實現效果: vim start_nginx.sh 添加函數功能,實現上面的效果: vim bqh_nginx_st ...
  • 我們在寫腳本或用腳本時,往往會發現 > /dev/null 2>&1 這類的命令。之前都是簡單的瞭解一下,並沒有深度消化,直到自己寫腳本時,不認真寫成了2>&1 >/dev/null,導致結果出問題。下麵我通過網路給大家介紹一下: shell重定向介紹: 我們平時寫的腳本或啟動程式,某段代碼會處理外 ...
  • 今天,要安裝AD域控制器,運行dcpromo結果提示:在該 SKU 上不支持 Active Directory 域服務安裝嚮導。 以前弄的時候直接就通過了,這次咋回事?終於搞了大半天搞定了。 主要原因:我的Windows 2008 R2的版本是WEB版。不支持AD角色,只有DNS和IIS兩個角色,醉 ...
  • RedHat yum源配置 原本以為Redhat7 和Centos7是完全一樣的,可是安裝完Redhat7以後,使用yum安裝軟體,提示紅帽操作系統未註冊。在網上搜索教程,最後成功解決,解決方式是將yum源更改為網易的鏡像庫。 以下為解決方法: 1.首先卸載原來的yum源 參考網上教程,執行: rp ...
  • vim
    轉自:https://www.cnblogs.com/yangjig/p/6014198.html 在命令狀態下對當前行用== (連按=兩次), 或對多行用n==(n是自然數)表示自動縮進從當前行起的下麵n行。你可以試試把代碼縮進任意打亂再用n==排版,相當於一般IDE里的code format。使 ...
  • 要求:寫一個linux bash腳本來查看目標文件夾下所有的file和directory,並且列印出他們的絕對路徑。 運行command:./myDir.sh input_path output_result 要求輸出格式為: 代碼思路: BFS遍歷,數據結構為queue,數組實現。 代碼實現: 寫 ...
  • 如何知道一個文件被哪些進程打開?如何知道當前進程打開了哪些文件?被打開但被刪除的文件能恢復嗎?如何恢復? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...