zoukankan      html  css  js  c++  java
  • tf 监听自己的坐标按官方例子一直不行不问题

    问题:

    tf 监听自己的坐标按官方例子一直不行不问题

    解决方法 : 

    示例:

    #!/usr/bin/env python
    # Software License Agreement (BSD License)
    #
    # Copyright (c) 2008, Willow Garage, Inc.
    # All rights reserved.
    #
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions
    # are met:
    #
    #  * Redistributions of source code must retain the above copyright
    #    notice, this list of conditions and the following disclaimer.
    #  * Redistributions in binary form must reproduce the above
    #    copyright notice, this list of conditions and the following
    #    disclaimer in the documentation and/or other materials provided
    #    with the distribution.
    #  * Neither the name of the Willow Garage nor the names of its
    #    contributors may be used to endorse or promote products derived
    #    from this software without specific prior written permission.
    #
    # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    # POSSIBILITY OF SUCH DAMAGE.
    
    import rospy
    
    import math
    import tf
    import geometry_msgs.msg
    import turtlesim.srv
    
    if __name__ == '__main__':
        rospy.init_node('turtle_tf_listener')
    
        listener = tf.TransformListener()
    
        rospy.wait_for_service('spawn')
        spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)
        spawner(4, 2, 0, 'robot0')
    
        turtle_vel = rospy.Publisher(
            'robot1/cmd_vel', geometry_msgs.msg.Twist, queue_size=1)
    
        rate = rospy.Rate(10.0)
    
        listener.waitForTransform("/robot1", "/robot0",
                                  rospy.Time(), rospy.Duration(4.0))
        while not rospy.is_shutdown():
            try:
                # (trans, rot) = listener.lookupTransform(
                  #  '/turtle2', '/carrot1', rospy.Time())
    
                now = rospy.Time.now()
                listener.waitForTransform(
                    "/robot1", "/robot0", now, rospy.Duration(4.0))
                (trans, rot) = listener.lookupTransform("/robot1", "/robot0", now)
            except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
                continue
    
            angular = 4 * math.atan2(trans[1], trans[0])
            linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)
            msg = geometry_msgs.msg.Twist()
            msg.linear.x = linear
            msg.angular.z = angular
            turtle_vel.publish(msg)
    
            rate.sleep()
    

      问题原因:

    自己的示例没有以下的service  

     rospy.wait_for_service('spawn')
     spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)

    更改为成以下代码问题解决
    #!/usr/bin/env python
    # Software License Agreement (BSD License)
    #
    # Copyright (c) 2008, Willow Garage, Inc.
    # All rights reserved.
    #
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions
    # are met:
    #
    #  * Redistributions of source code must retain the above copyright
    #    notice, this list of conditions and the following disclaimer.
    #  * Redistributions in binary form must reproduce the above
    #    copyright notice, this list of conditions and the following
    #    disclaimer in the documentation and/or other materials provided
    #    with the distribution.
    #  * Neither the name of the Willow Garage nor the names of its
    #    contributors may be used to endorse or promote products derived
    #    from this software without specific prior written permission.
    #
    # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
    # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
    # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
    # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
    # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
    # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    # POSSIBILITY OF SUCH DAMAGE.
    
    import rospy
    
    import math
    import tf
    import geometry_msgs.msg
    import turtlesim.srv
    
    if __name__ == '__main__':
        print ("startddd")
        rospy.init_node('turtle_tf_listener')
    
        listener = tf.TransformListener()
    
        #rospy.wait_for_service('spawn')
        listener.waitForTransform('/robot1', '/robot0', rospy.Time(), rospy.Duration(1.0))
    
        #spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)
        #spawner(4, 2, 0, 'robot0_laser_0')
    
        turtle_vel = rospy.Publisher(
            'robot1/cmd_vel', geometry_msgs.msg.Twist, queue_size=1)
    
        rate = rospy.Rate(10.0)
    
        listener.waitForTransform("/robot1", "/robot0",
                                  rospy.Time(), rospy.Duration(4.0))
        while not rospy.is_shutdown():
            try:
                # (trans, rot) = listener.lookupTransform(
                  #  '/turtle2', '/carrot1', rospy.Time())
                print('lakjdfl;kajdlfkajd;lk')
                now = rospy.Time.now()
                listener.waitForTransform("/robot1", "/robot0", now, rospy.Duration(4.0))
                (trans, rot) = listener.lookupTransform("/robot1", "/robot0", now)
               
            except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
                continue
    
            angular = 4 * math.atan2(trans[1], trans[0])
            linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)
            msg = geometry_msgs.msg.Twist()
            msg.linear.x = linear
            msg.angular.z = angular
            turtle_vel.publish(msg)
            print(msg.linear.x+msg.linear.z)
            rate.sleep()
    

      



  • 相关阅读:
    KETTLE集群搭建
    初识spark
    利用python操作mrjob实例---wordcount
    hive 优化 (转)
    hive权限管理
    hadoop常用操作命令
    hive的分桶
    Hive HQL基本操作
    hadoop--hive数据仓库
    Hive配置项的含义详解
  • 原文地址:https://www.cnblogs.com/dayspring/p/12799826.html
Copyright © 2011-2022 走看看