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

[TOC]node

基本概念

1. Package

程序包,裏面包含節點Node、ROS程序庫、數據集、配置文件bash

Package Manefist

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

2. Repositories

代碼倉庫網絡

3. Computation Graph

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

4. Node

節點,一個機器人控制系統由多個節點組成,每一個節點控制不一樣的部分。好比一個機器人有兩個節點,一個是傳感器節點,專門負責接收傳感器數據,另外一個是控制節點,專門負責控制機器人做出某些動做。分佈式

5. Master

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

Parameter Service

參數服務器,是主機的一部分,容許數據經過鍵的方式存儲ui

6. Message

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

7. Topic

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

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

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)]

相關文章
相關標籤/搜索