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