【ROS實踐學習入門系列(三)小海龜案例主題與節點交互】
本內容經官網實例以及一些參考書總結而成,歡迎留言評論交流~
聯繫方式:ziyuanw#foxmail.com(#換成@)
一、小海龜案例
還是先通過小海龜案例分析ROS各種基本命令使用方法,熟練之後才能往後面學習更加深入的東西。
1.查找包路徑:
rospack find [packagename]
以查找小海龜案例爲例:
2.獲得功能包或功能包集文件列表:
rosls [packagename]
3.切換ROS空間內下屬任一文件目錄:
roscd [directory]
4.節點操作相關命令:
首先CTRL+ALT+T打開新的終端並啓動roscore,然後運行小海龜案例:
roscore
rosrun turtlesim turtlesim_node
節點信息相關命令:
①rosnode info [nodename]
②rosnode ping [nodename]
③rosnode machine
顯示當前運行設備名。
rosnode machine <machine-name>
顯示該設備名下正在執行的節點名稱:
④rosnode kill [nodename]
⑤rosnode cleanup
不常用。
是一種臨時清理節點的解決方案,在正常操作中不鼓勵使用。它的優點是美觀,缺點是可能無法註冊正常運行的節點。
二、主題與節點交互
依舊是可使用小海龜案例:(還是roscore和rosrun turtlesim turtlesim_node。就不演示了)
1.主題相關基本命令操作:
①rostopic bw [topic] :主題所使用帶寬
②rostopic echo [topic] :消息輸出
③rostopic find [topic] :查找主題
④rostopic hz [topic] :主題發佈頻率
⑤rostopic info [topic] :活動主題信息
⑥rostopic list [topic] :列出活動主題
⑦rostopic type [topic] :將數據發佈到主題
若想要使用鍵盤方向建移動海龜:
清除所有終端重新打開(使用CTRL+Shift+T可在同一窗口內打開三個終端):
第一個終端:
roscore
第二個終端:
rosrun turtlesim turtle_node
第三個終端:(注意:鼠標光標要放在第三個窗口才能進行移動操作)
2.小海龜以固定方向自行移動:
1.發佈主題與其進行交互:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
以上命令會發送一條消息給turtlesim,告訴它以2.0大小的線速度和1.8大小的角速度開始移動。
命令參數說明:
rostopic pub:這條命令將會發布消息到某個給定的話題。
-1(單個破折號):這個參數選項使rostopic發佈一條消息後馬上退出。
/turtle1/cmd_vel :這是消息所發佈到的話題名稱。(其他老版本爲/turtle1/command_velocity)
geometry_msgs/Twist:這是所發佈消息的類型。(其他老版本爲turtlesim/Velocity)
--:(雙破折號)這會告訴命令選項解析器接下來的參數部分都不是命令選項。這在參數裏面包含有破折號-(比如負號)時是必須要添加的。
2.0 1.8:之前提到的,在一個turtlesim/Velocity消息裏面包含有兩個浮點型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。這些參數其實是按照ROS官網YAML語法格式編寫的。線速度linear分量參數:x,y,z。角速度angular分量參數:x,y,z。
2.一直轉圈:
turtle需要一個穩定的頻率爲1Hz的命令流來保持移動狀態。可以使用rostopic pub -r命令來發佈一個穩定的命令流
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
3.ROS話題理解:
turtlesim_node節點和turtle_teleop_key節點之間是通過一個ROS話題來互相通信的。turtle_teleop_key在一個話題上發佈按鍵輸入消息,而turtlesim則訂閱該話題以接收該消息。
- rqt_graph查看節點話題情況:
rosrun rqt_graph rqt_graph
鼠標移動到上面,可以發現rostopic發佈器節點(紅色)正在與rostopic echo節點(綠色),通過鍵盤/turtle1/cmd_vel控制方向的輸入消息,進行通信:
- rqt_plot實時顯示數據變化:
rosrun rqt_plot rqt_plot
打開時是空的,需要在topic文本框自行添加/turtle1/pose/x後之前處於禁用狀態的加號“+”按鈕將會被使能變亮。按一下該按鈕,並對/turtle1/pose/y重複相同的過程。現在你會在圖形中看到turtle的x-y位置座標圖。再添加/turtle1/pose/theta。減號“-”按鈕可隱藏顯示所選topic數據。
參考資料:
【1】ROS官網:http://wiki.ros.org/cn
【2】ROS機器人高效編程
【3】機器人操作系統ROS淺析