1. 程式人生 > >ROS學習筆記(一) : 入門之基本概念

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

mes rap 打開 創建 創建ca cpp wiki 管理器 速度

目錄

基本概念
實踐操作

基本概念

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

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