操作演示,對 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 的編譯結果