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
安裝
運行
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 節點終端下,每按一下方向鍵都會輸出這樣的信息,再次運行
可以看到 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的命令流來保持移動狀態。
再次運行:
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
2. 定義新的消息
mkdir msg echo "int64 num" > msg/Num.msg3.接下來,還有關鍵的一步:我們要確保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 的編譯結果
轉載于:https://www.cnblogs.com/NikkiNikita/p/9450739.html
總結
以上是生活随笔為你收集整理的ROStopic 通信方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发nagios插件监控/etc/pas
- 下一篇: 问题1 机器学习篇 如何解决过拟合(o