ROS節點,消息,話題,服務的介紹

##整理結合機器人操作系統(ros)淺析和網址http://wiki.ros.org/cn

NODE

node幾乎是無處不在,這個東西相當於可執行文件,目前我更願意把它當做cpp文件,通過catkin_make之後生成可執行文件。

Message

不用說了,沒有message就是啞巴了。還是這是血液吧,不然傳遞機制是無法建立起來的

TOPIC

topic就像是QQ羣一樣,提供一個平臺。當有人發了一條消息後,QQ羣告訴任何一個加羣的人,有沒有紅包啥的。顯然這是一種通過第三方傳遞的方式,也就是間接傳遞。發紅包的人就是publisher,看羣消息的人就是subscriber,然後是MESSAGE傳遞,這就很簡單了,就是水羣。

SERVICE

service有點像兩人私聊的意思,或者是很多人找一個人私聊。跳過了topic平臺,它與topic區別就在於是消息直接傳遞還是間接傳遞。水羣就是間接傳遞,多對多傳遞。私聊就是直接傳遞,一對一。

C++體悟

在ros中似乎和正常編程有點不一樣,估計VS背後也是這麼搞的,只不過ros用戶體驗不是太高。比如beginner_tutorials::AddTwoInts::Request這一句,把工作包當做命名空間,把裏面的AddTwoInts.srv文件當做一個類,不知道VS底層機制是不是這樣。當然,ros的c++實現畢竟是藉助c++的,還是有不少地方是相似的。

ROS命令部分:

啓動節點

啓動節點(也稱運行ROS程序)的基本命令是rosrun
rosrun [package_name] [node_name]
rosrun package-name executable-name
eg:rosrun turtlesim turtlesim_node
可以像執行任 何其他程序一樣直接執行 turtlesim_node:
這裏可以看出,一個節點相當於一個cpp文件,運行之後產生一個類似於exe的可執行文件。
可以使用 rosrun 命令顯式設置節點的名稱,語法 如下:
rosrun package-name executable-name __name:=node-name

Rosrun只是簡便了操作,也可以直接找出下面的命令進行操作
/opt/ros/indigo/lib/turtlesim/turtlesim_node

查看節點

rosnode list
rosnode info node-name
在 ROS 系統中查看節點之間的發佈-訂閱關係的最簡單方式就是在終端輸入如下命令:
rqt_graph
這是圖形界面,比較容易理解
在這個命令中,r 代表 ROS,qt 指的是用來實現這個可視化程序的 Qt 圖形界面(GUI)工具包。
rqt_graph 本身就是一個節點。

rosout 節點是一個特殊的節點,通過 roscore 自動啓動。其作用有點類似於控制檯程序中使用的標準輸出(即 std:: cout)。/rosout前面的反斜槓“/”表明該節點名稱屬於全局命名空間。
所有的節點發布都向話題/rosout 發佈消息,該話題由同名的/rosout 節點訂閱。這個話題的作用是用來生成各個節點的文本日誌消息。
ROS 會根據上下文來推測我們討論的是/rosout 節點還是/rosout 話題。

終止節點和刪除節點

rosnode kill node-name
還可以用 Ctrl-C 命令終止節點。但使用這種方法時可能不會在節點管理器中註銷該節點,因此會導致已終止的節點仍然在 rosnode 列表中。此時可以使用下面的命令將節點從列表中刪除:
rosnode cleanup

查看話題

rostopic -h
rostopic list –h
打印消息內容爲了查看某個話題上發佈的消息 , 可以利用
rostopic echo topic-name
這條命令將會在終端裏顯示出指定話題裏發佈的任何消息
eg:
rostopic echo /turtle1/cmd_vel
topic之間的通信是通過在節點之間發送ROS消息實現的。對於發佈器(如turtle_teleop_key)和訂閱器(如turtulesim_node)之間的通信,發佈器和訂閱器之間必須發送和接收相同類型的消息。這意味着話題的類型是由發佈在它上面的消息類型決定

查看消息類型

rostopic type [topic]
eg:
rostopic type /turtle1/cmd_vel
Type 在文本輸出中表示數據類型。

查看消息類型詳情
rosmsg show message-type-name
eg:
rosmsg show turtlesim/Color
rosmsg show turtlesim/Velocity

發佈消息

rostopic pub –r rate-in-hz topic-name message-type message-content
這條命令重複地按照指定的頻率給指定的話題發佈指定的消息。該命令最後的參數 message-content 應該按順序提供消息類 型中所有域的參數值。
eg:
rostopic pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ’[0,0,0]’ ’[0,0,1]’

rostopic pub
這條命令將會發布消息到某個給定的話題。

 -1
這個參數選項使rostopic發佈一條消息後馬上退出。還有 –r,表示重複,還有-l,鎖存模式,雖然也只是發佈一次消息,但是會確保該話題的新訂閱者也會收到消息。實際上,鎖存模式是默認的模式。 同樣也可以從文件中讀取消息(利用-f參數)或者從標準的輸入(把-f參數和消息的內容從命令中都刪掉)中讀取。兩種情況下,輸入應該符合rostopic echo的輸出格式。 

/turtle1/command_velocity
這是消息所發佈到的話題名稱。

turtlesim/Velocity
這是所發佈消息的類型。
--相當於分割,前面是rostopic控制的參量,後面是node自己的參量
(雙破折號)這會告訴命令選項解析器接下來的參數部分都不是命令選項。這在參數裏面包含有破折號-(比如負號)時是必須要添加的。包名和其含有的消息類型放在一起將有助於猜測它的含義

’[0,0,0]’ ’[0,0,1]’
Node需要的兩個參數

查看頻率寬帶

rostopic hz [topic]
eg:
rostopic hz /turtle1/pose
rostopic bw就是測試帶寬

查看服務

rosservice type [service]
eg:
rosservice type clear
:
std_srvs/Empty

調用服務

rosservice call [service] [args]
eg:
rosservice call clear
服務清除了turtlesim_node的背景上的軌跡。
通過查看再生(spawn)服務的信息,我們來了解帶參數的服務:
 rosservice type spawn| rossrv show

rosservice call spawn 2 2 0.2 ""
這個服務使得我們可以在給定的位置和角度生成一隻新的烏龜。名字參數是可選的,這裏我們不設具體的名字,讓turtlesim自動創建一個。

rosparam

rosparam set            設置參數
rosparam get            獲取參數
rosparam load           從文件讀取參數
rosparam dump           向文件中寫入參數
rosparam delete         刪除服務器參數
rosparam list           列出服務器參數名
rosparam get /
顯示參數服務器上的所有內容:

存儲這些信息以備今後重新讀取。這通過rosparam很容易就可以實現
rosparam dump [file_name]
rosparam load [file_name] [namespace]
現在我們將所有的參數寫入params.yaml文件
eg:
rosparam dump params.yaml

甚至可以將yaml文件重載入新的命名空間,比如說copy空間:
rosparam load params.yaml copy

讀取
rosparam get copy/background_b

rqt_console

rqt_console屬於ROS日誌框架(logging framework)的一部分,用來顯示節點的輸出信息。rqt_logger_level允許我們修改節點運行時輸出信息的日誌等級(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。一般情況下,使用ROS_DEBUG_STREAM機器會忽略這條命令,但是要想輸出,可以更改日誌等級(目前是這樣理解的)

rosrun rqt_console rqt_console

rosrun rqt_logger_level rqt_logger_level

roslaunch

roslaunch可以用來啓動定義在launch文件中的多個節點。
roslaunch [package] [filename.launch]
eg:
roscd beginner_tutorials
roscd beginner_tutorials

通過roslaunch命令啓動launch文件:

roslaunch beginner_tutorials turtlemimic.launch

roswtf(ros-what the fuck)

這條命令會進行全面而深入的檢測,包括檢測你的環境變量、 安裝的文件以及運行的節點。例如,roswtf 將會檢測在安裝過程 中 rosdep 初始化是否完成,任何節點是否出現了意外的掛起或者
終止,以及活躍的節點是否正確地和其他節點相連接等。可惜的 是,由 roswtf 檢測的完整列表只能在 Python 源碼中才能找到。

檢查並回放bag文件

使用rosbag info檢查看它的內容
rosbag info <your bagfile>
回放bag文件以再現系統運行過程
rosbag play <your bagfile>
rosbag play -r 2 <your bagfile>

錄製數據子集
rosbag record -O subset /turtle1/command_velocity /turtle1/pose

rosbag record/play命令的侷限性:
錄製並不完整,可能在某些方面有應用吧。。。。。。

補充ROS Message Types

Bool
Byte
ByteMultiArray
Char
ColorRGBA
Duration
Empty
Float32
Float32MultiArray
Float64
Float64MultiArray
Header
Int16
Int16MultiArray
Int32
Int32MultiArray
Int64
Int64MultiArray
Int8
Int8MultiArray
MultiArrayDimension
MultiArrayLayout
String
Time
UInt16
UInt16MultiArray
UInt32
UInt32MultiArray
UInt64
UInt64MultiArray
UInt8
UInt8MultiArray
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章