ROStopic 通信方式


操作演示,對 topic 通信方式的理解請看:點擊打開鏈接

開啟終端,運行 roscore

新開一個終端(已經安裝好(ros-<distro>-ros-tutorials 包,否則運行  sudo apt-get install ros-<distro>-ros-tutorials ,<distro> 為 ROS 發行版本名稱),運行 rosrun turtlesim turtlesim_node

運行 turtle_teleop_key 節點

rosrun turtlesim turtle_teleop_key

用鍵盤控制小烏龜運動。


1.使用rqt_graph

安裝

sudo apt-get install ros-kinetic-rqt
sudo apt-get install ros-kinetic-rqt-common-plugins

運行

rosrun rqt_graph rqt_graph
結果:

如果將鼠標放在/turtle1/command_velocity上方,相應的ROS節點(藍色和綠色)和話題(紅色)就會高亮顯示。正如你所看到的,turtlesim_node和turtle_teleop_key節點正通過一個名為/turtle1/command_velocity的話題來互相通信。


2.rostopic介紹


2.1 使用 rostopic echo

命令格式:

rostopic echo [topic]

查看 turtle_teleop_key 節點在 /turtle1/command_velocity 話題(非hydro版)上發布的數據

rostopic echo /turtle1/cmd_vel

在 turtle_teleop_key 節點終端下,每按一下方向鍵都會輸出這樣的信息,再次運行

rosrun rqt_graph rqt_graph


可以看到 turtlesim_node 和 turtle_teleop_key 節點正通過一個名為 /turtle1/command_velocity 的話題來互相通信。


2.2 使用 rostopic list

rostopic list能夠列出所有當前訂閱和發布的話題。

新開一個終端,

rostopic list
運行結果:


運行

rostopic list -v
列出詳細信息:



3.ros Messages

3.1使用rostopic type

rostopic type 命令用來查看所發布話題的消息類型

命令格式:

rostopic type [topic]

運行

rostopic type /turtle1/cmd_vel

結果:


運行

rosmsg show geometry_msgs/Twist

查看此消息類型:


已經知道了消息類型,接下來我們就可以給 turtle 發布命令了。


4.繼續學習 rostopic

4.1 使用 rostopic pub

命令格式:

rostopic pub [topic] [msg-type] [args]

新運行一個 turtlesim_node 節點,運行:

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

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

-1 (單個破折號)這個參數選項使rostopic發布一條消息后馬上退出

/turtle1/cmd_vel 這是消息所發布到的話題名稱

geometry_msgs/Twist 這是所發布消息的類型

--(雙破折號)這會告訴命令選項解析器接下來的參數部分都不是命令選項。這在參數里面包含有破折號 -(比如負號)時是必須要添加的

'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 正如之前提到的,在一個turtlesim/Velocity消息里面包含有兩個浮點型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。這些參數其實是按照YAML語法格式編寫的,這在YAML文檔中有更多的描述。


turtle已經停止移動了。這是因為turtle需要一個穩定的頻率為1Hz的命令流來保持移動狀態。

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


再次運行:

rosrun rqt_graph rqt_graph

結果:


可以看到 rostopic 發布器節點正在與 rostopic echo節點進行通信

4.2 使用 rostopic hz
rostopic hz命令可以用來查看數據發布的頻率

命令格式:

rostopic hz [topic]

運行:

rostopic hz /turtle1/pose
看到 turtlesim_node 發布 /turtle/pose 時的速度



5 使用 rqt_plot

運行:

rosrun rqt_plot rqt_plot

在左上角的文本框分別輸入 /turtle1/pose/x,點擊 + 號,/turtle1/pose/y 點擊 + 號。

按下減號按鈕會顯示一組菜單讓你隱藏圖形中指定的話題。現在隱藏掉你剛才添加的話題並添加/turtle1/pose/theta



6 編寫*.msg

1. 在 /catkin_ws/src 中創建一個 pkg

catkin_create_pkg beginner_tutorials rospy roscpp std_msgs

2. 定義新的消息

mkdir msg
echo "int64 num" > msg/Num.msg
3.接下來,還有關鍵的一步:我們要確保msg文件被轉換成為C++,Python和其他語言的源代碼: 查看 package.xml, 確保它包含一下兩條語句
 <build_depend>message_generation</build_depend>
 <run_depend>message_runtime</run_depend>

如果沒有,添加進去。 注意,在構建的時候,我們只需要"message_generation"。然而,在運行的時候,我們只需要"message_runtime",否則會編譯/運行失敗。


CMakeLists.txt文件中,利用find_package 函數,增加對message_generation的依賴,這樣就可以生成消息了。 可以直接在COMPONENTS的列表里增加message_generation,就像這樣

同樣,需要確保設置了運行依賴:

手動添加.msg文件后,我們要確保CMake知道在什么時候重新配置我們的project。 確保添加了如下代碼:

進入 /catkin_ws 編譯后應該像這樣:


以下是未修改 package.xml 和 CMakeLists.txt 的編譯結果





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM