TF2 package:
tf2是tf的替代版,tf2是一個允許用戶隨時跟蹤多個座標幀的包。tf在時間緩衝的樹結構中維護座標幀之間的關係,並允許用戶在任意兩個座標幀之間任意時間點轉換點、向量等。典型應用就是:一隻烏龜跟隨着被控制的烏龜移動。
官方demo:
1. Set Up the Demo
$ sudo apt-get install ros-kinetic-ros-tutorials ros-kinetic-geometry-tutorials ros-kinetic-rviz ros-kinetic-rosbash ros-kinetic-rqt-tf-tree
2.Running the Demo
$ roslaunch turtle_tf turtle_tf_demo.launch
1 tf Tools
1.1 Using view_frames
view_frames通過ROS上的tf可以創建一個廣播幀的diagram;
1.2 Using rqt_tf_tree
可視化基於ROS發佈的信息框架,用法如下:
rosrun rqt_tf_tree rqt_tf_tree
Or simply:
rqt &
1.3 Using tf_echo
打印任何兩個通過ROS通信的frame;
rosrun tf tf_echo [reference_frame] [target_frame]
2 鍵盤控制小烏龜demo
首先確保roscore已經運行, 打開一個新的終端:
$ roscore
在一個新的終端中運行:
$ rosrun turtlesim turtlesim_node
通過鍵盤遠程控制turtle
$ rosrun turtlesim turtle_teleop_key
turtlesim_node 和 turtle_teleop_key節點之間通過一個ROS話題來相互通信。
turtle_teleop_key:發佈按鍵輸入消息
turtlesim_node:訂閱該話題
使用rqt_graph顯示當前運行的節點和話題(rqt_graph能夠創建一個顯示當前系統運行情況的動態圖形)
rosrun rqt_graph rqt_graph
turtlesim_node和turtle_teleop_key節點正通過一個名爲 /turtle1/cmd_vel的話題來互相通信。
2.1 rostopic介紹
rostopic命令工具能讓你獲取有關ROS話題的信息。可以使用幫助選項查看rostopic的子命令:
$ rostopic -h
Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen #顯示在某個話題上發佈的數據
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics #列出所有當前訂閱和發佈的話題
rostopic pub publish data to topic #發佈消息到某個給定的話題
rostopic type print topic or field type #查看所發佈話題的消息類型
$ rostopic echo /turtle1/cmd_vel #查看發佈到該話題( /turtle1/cmd_vel)的數據
- 刷新rqt_graph可以看到rostopic也訂閱了 /turtle1/cmd_vel 話題:
- rostopic list 能夠列出所有當前訂閱和發佈的話題:
rostopic list -h #查看幫助
rostopic list -v #顯示所有發佈和訂閱的話題及其類型的詳細信息
Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 4 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
* /rosout [rosgraph_msgs/Log] 1 subscriber
* /statistics [rosgraph_msgs/TopicStatistics] 1 subscriber
- rostopic type [topic] 可以查看發佈話題的消息類型
- rosmsg show [topic] 可以查看消息的詳細情況
2.2 現在我們已經知道了turtlesim節點所期望的消息類型,接下來我們就可以給turtle發佈命令了:
$ 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大小的角速度開始移動。
-1: (單個破折號)這個參數選項使rostopic發佈一條消息後馬上退出;
/turtle1/cmd_vel : 消息所發佈到的話題名稱;
geometry_msgs/Twist : 所發佈消息的類型;
– :(雙破折號)這會告訴命令選項解析器接下來的參數部分都不是命令選項。這在參數裏面包含有破折號-(比如負號)時是必須要添加的。
2.0是linear的值,1.8是angular的值。這些參數其實是按照YAML語法格式編寫的。
執行完pub之後,turtle已經停止了。因爲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]'
這條命令以1Hz的頻率發佈速度命令到速度話題上。
- rqt_plot命令可以實時顯示一個發佈到某個話題上的數據變化圖形。這裏我們將使用rqt_plot命令來繪製正在發佈到/turtle1/pose話題上的數據變化圖形。
Mavros
catkin_make
rosrun demo demo_node