02-TF-创建tf发布

2016-08-04  本文已影响104人  joey_zhou

0.创建工作包

$ cd %YOUR_CATKIN_WORKSPACE_HOME%/src
$ catkin_create_pkg learning_tf tf roscpp rospy turtlesim

配置工作环境

$ cd %YOUR_CATKIN_WORKSPACE_HOME%/
$ catkin_make
$ source ./devel/setup.bash

1.发布变换

此篇教程目的在与发布坐标系到tf,我们尝试将海龟的坐标系发布给tf,随着海龟行动,查看坐标系的变化。

$ roscd learning_tf
$ mkdir nodes
$ vim nodes/turtle_tf_broadcaster.py

#!/usr/bin/env python  
import roslib
roslib.load_manifest('learning_tf')
import rospy

import tf
import turtlesim.msg

def handle_turtle_pose(msg, turtlename):
    br = tf.TransformBroadcaster()
    br.sendTransform((msg.x, msg.y, 0),
                     tf.transformations.quaternion_from_euler(0, 0, msg.theta),
                     rospy.Time.now(),
                     turtlename,
                     "world")

if __name__ == '__main__':
    rospy.init_node('turtle_tf_broadcaster')
    turtlename = rospy.get_param('~turtle')#传递参数名
    rospy.Subscriber('/%s/pose' % turtlename,
                     turtlesim.msg.Pose,
                     handle_turtle_pose,
                     turtlename)
    rospy.spin()

chmod +x nodes/turtle_tf_broadcaster.py

2.运行广播

$ roscd learning_tf
$ mkdir launch
$ vim launch/start_demo.launch

 <launch>
    <!-- Turtlesim Node-->
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>

    <node name="turtle1_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" >
      <param name="turtle" type="string" value="turtle1" />
    </node>
    <node name="turtle2_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py" respawn="false" output="screen" >
      <param name="turtle" type="string" value="turtle2" /> 
    </node>

  </launch>

$ roslaunch learning_tf start_demo.launch

3.查看结果

rosrun tf tf_echo /world /turtle1

上一篇下一篇

猜你喜欢

热点阅读