コード例 #1
0
ファイル: iiwa_kinematics.py プロジェクト: NickoDema/rik
    def test_cb(self, msg):
        self.hello()
        self.forward_DH()
        br = TransformBroadcaster()
        ls = tf.TransformListener()
        tar_2_msg = g_msg.TransformStamped()
        tar_3_msg = g_msg.TransformStamped()
        pos, ros = None, None

        try:
            ls.waitForTransform("tool_target", "iiwa_base_link", rospy.Time(0),
                                rospy.Duration(4.0))
            (pos, rot) = ls.lookupTransform('iiwa_base_link', 'tool_target',
                                            rospy.Time())
        except (tf.LookupException, tf.ConnectivityException,
                tf.ExtrapolationException):
            print("can't get iiwa_base_link <- tool_target transform")
            return -1
        pos[0] += 0.4
        #br.sendTransform( pos, rot, rospy.Time.now(), 'tool_target_2', 'iiwa_base_link' )
        tar_2_msg.header.stamp = rospy.Time.now()
        tar_2_msg.header.frame_id = 'iiwa_base_link'
        tar_2_msg.child_frame_id = 'tool_target_2'
        tar_2_msg.transform.translation.x = pos[0]
        tar_2_msg.transform.translation.y = pos[1]
        tar_2_msg.transform.translation.z = pos[2]
        tar_2_msg.transform.rotation.x = rot[0]
        tar_2_msg.transform.rotation.y = rot[1]
        tar_2_msg.transform.rotation.z = rot[2]
        tar_2_msg.transform.rotation.w = rot[3]
        br.sendTransformMessage(tar_2_msg)
コード例 #2
0
    def update(self):
        """
        Retrieves the transform from the blackboard, stamps it
        and subsequently broadcasts it.

        Raises:
            TypeError: if the blackboard variable is of the wrong type.
        """
        try:
            transform = self.blackboard.get(self.variable_name)
        except KeyError:
            self.feedback_message = "no transform to broadcast"
            return py_trees.common.Status.FAILURE
        if transform is None:
            self.feedback_message = "no transform to broadcast"
            return py_trees.common.Status.FAILURE
        if type(transform) != geometry_msgs.Transform:
            raise TypeError(
                "'{}' is not of type geometry_msgs/Transform".format(
                    self.variable_name))
        self.feedback_message = "transform sent"
        transform_stamped = geometry_msgs.TransformStamped()
        transform_stamped.header.stamp = rclpy.clock.Clock().now().to_msg()
        transform_stamped.header.frame_id = self.source_frame
        transform_stamped.child_frame_id = self.target_frame
        transform_stamped.transform = transform
        # print(console.green + "Send: {}".format(transform_stamped) + console.reset)
        self.broadcaster.sendTransform(transform_stamped)
        return py_trees.common.Status.SUCCESS
コード例 #3
0
ファイル: create_dist_matrix.py プロジェクト: DudekPL/tiago
def start_tf_msg(_start):
    _msg = geom.TransformStamped()
    _msg.header.stamp = rospy.Time.now()
    _msg.header.frame_id = "map"
    _msg.child_frame_id = "base_link"
    _msg.transform.translation.x = _start.x
    _msg.transform.translation.y = _start.y
    _msg.transform.translation.z = 0
    _msg.transform.rotation = geom.Quaternion(0, 0, 0, 1)
    return _msg
コード例 #4
0
	def __init__(self):

		rospy.init_node('costBasdMovement')
		robberName = "roy"

		self.robLoc = geo_msgs.TransformStamped()
		rospy.Subscriber("/" + robberName + "/base_footprint", geo_msgs.TransformStamped, self.getRobberLocation)
		print(self.robLoc) #doesnt work???
		#createGrid(self.robLoc)
		mapPub()
コード例 #5
0
def callback(data, args):
    broadcaster = tf2_ros.TransformBroadcaster()
    tf1 = geo_msg.TransformStamped()

    tf1.header.stamp = rospy.Time.now()
    tf1.header.frame_id = args[0]
    tf1.child_frame_id = args[1]
    tf1.transform.translation = data.pose.pose.position
    tf1.transform.rotation = data.pose.pose.orientation

    broadcaster.sendTransform(tf1)
コード例 #6
0
    def SendNavigationMessage(self, request, context):

        # TODO: This frame_id should be dynamically set from a config file.
        nav_header = std_msgs.msg.Header(frame_id="fosenkaia_NED",
                                         stamp=rospy.Time.from_sec(
                                             request.timeStamp))

        position = geomsgs.Point()
        position.x = request.position.x
        position.y = request.position.y
        position.z = request.position.z

        orientation = geomsgs.Quaternion()
        orientation.x = request.orientation.x
        orientation.y = request.orientation.y
        orientation.z = request.orientation.z
        orientation.w = request.orientation.w

        pose_msg = geomsgs.PoseStamped(header=nav_header,
                                       pose=geomsgs.Pose(
                                           position=position,
                                           orientation=orientation))

        pose_pub.publish(pose_msg)

        linear_vel = geomsgs.Vector3()
        linear_vel.x = request.linearVelocity.x
        linear_vel.y = request.linearVelocity.y
        linear_vel.z = request.linearVelocity.z

        angular_vel = geomsgs.Vector3()
        angular_vel.x = request.angularVelocity.x
        angular_vel.y = request.angularVelocity.y
        angular_vel.z = request.angularVelocity.z

        twist_msg = geomsgs.TwistStamped(header=nav_header,
                                         twist=geomsgs.Twist(
                                             linear=linear_vel,
                                             angular=angular_vel))

        twist_pub.publish(twist_msg)

        transform = geomsgs.TransformStamped(header=nav_header,
                                             child_frame_id="vessel_center",
                                             transform=geomsgs.Transform(
                                                 translation=position,
                                                 rotation=orientation))

        tf_pub.sendTransform(transform)

        return navigation_pb2.NavigationResponse(success=True)
コード例 #7
0
def publish_transform(transform, reference_frame, name, seconds=1):
    """
    Publish a Transform for debugging purposes.
        transform           -> A geometry_msgs/Transform to be published
        reference_frame     -> A string defining the reference frame of the transform
        seconds             -> An int32 that defines the duration the transform will be broadcast for
    """
    # Create a stamped_transform and store the transform in it
    st = gmsg.TransformStamped()
    st.transform = transform
    st.header.frame_id = reference_frame
    st.child_frame_id = name

    # Call the publish_stamped_transform function
    publish_stamped_transform(st, seconds)
コード例 #8
0
 def send_transform(self):
     t = geometry_msgs.TransformStamped()
     t.header.stamp = rclpy.clock.Clock().now().to_msg()
     t.header.frame_id = source_frame()
     t.child_frame_id = target_frame()
     t.transform.translation.x = self.x
     t.transform.translation.y = 0.0
     t.transform.translation.z = 0.0
     t.transform.rotation.x = 0.0
     t.transform.rotation.y = 0.0
     t.transform.rotation.z = 0.0
     t.transform.rotation.w = 1.0
     print(console.green + "Broadcast: {}".format(self.x) + console.reset)
     self.broadcaster.sendTransform(t)
     self.x += 0.1
コード例 #9
0
def to_transform(pose, child_frame=None):
    if isinstance(pose, geometry_msgs.Pose2D):
        return geometry_msgs.Transform(
            geometry_msgs.Vector3(pose.x, pose.y, 0.0),
            quaternion_msg_from_yaw(pose.theta))
    elif isinstance(pose, geometry_msgs.Pose):
        return geometry_msgs.Transform(
            geometry_msgs.Vector3(pose.position.x, pose.position.y,
                                  pose.position.z), pose.orientation)
    elif isinstance(pose, geometry_msgs.PoseStamped):
        p = pose.pose
        tf = geometry_msgs.Transform(
            geometry_msgs.Vector3(p.position.x, p.position.y, p.position.z),
            p.orientation)
        return geometry_msgs.TransformStamped(pose.header, child_frame, tf)

    raise rospy.ROSException(
        "Input parameter pose is not a valid geometry_msgs pose object")
コード例 #10
0
    def __init__(self):
        # state variables
        self.last_stand = RapiroOdom.BOTH
        self.last_r_yaw = math.pi / 2.
        self.last_l_yaw = math.pi / 2.
        self.last_time = rospy.Time.now()

        # all TF stuff
        self.tf_pub = tf2.TransformBroadcaster()
        self.tf_msg = geometry_msgs.TransformStamped()
        self.tf_msg.header.frame_id = 'odom'
        self.tf_msg.child_frame_id = 'base_link'
        self.tf_msg.transform.rotation.w = 1.

        # all Odometry stuff
        self.odom_pub = rospy.Publisher("odom", nav_msgs.Odometry, queue_size=10)
        self.odom_msg = nav_msgs.Odometry()
        self.odom_msg.header.frame_id = 'odom'
        self.odom_msg.child_frame_id = 'base_link'
        self.odom_msg.pose.pose.orientation.w = 1.
コード例 #11
0
def handleZumoPos(velMsg):
    global x
    global y
    global th
    br = tfRos.TransformBroadcaster()
    t = geoMsg.TransformStamped()

    print("x: ", x)
    print("y: ", y)
    print("t: ", th)

    vx = 0

    if (velMsg.linear.x == 1.0):
        vx = 0.1
    elif (velMsg.linear.x == 1.0):
        vx = -0.1

    deltaX = vx * math.cos(th)
    deltaY = vx * math.sin(th)
    deltaTh = 0

    x += deltaX
    y += deltaY
    th += deltaTh

    t.header.stamp = ros.Time.now()
    t.header.frame_id = "world"
    t.child_frame_id = "zumo"

    t.transform.translation.x = x
    t.transform.translation.y = y
    t.transform.translation.z = 0.0

    q = tfConversions.transformations.quaternion_from_euler(0, 0, th)
    t.transform.rotation.x = q[0]
    t.transform.rotation.y = q[1]
    t.transform.rotation.z = q[2]
    t.transform.rotation.w = q[3]

    br.sendTransform(t)
コード例 #12
0
    def _load_transform(self):
        if rospy.get_param("~dummy", False):
            child = rospy.get_param("~camera_frame")
            if rospy.get_param("~eye_on_hand", False):
                parent = rospy.get_param("~robot_effector_frame")
                T = CalibrationPublisher.Tec
            else:
                parent = rospy.get_param("~robot_base_frame")
                T = CalibrationPublisher.Tbc
        else:
            parent = rospy.get_param("~parent")
            child = rospy.get_param("~child")
            T = rospy.get_param("~transform")

        transform = gmsg.TransformStamped()
        transform.header.frame_id = parent
        transform.child_frame_id = child
        transform.transform \
            = gmsg.Transform(gmsg.Vector3(T["x"], T["y"], T["z"]),
                             gmsg.Quaternion(T["qx"], T["qy"],
                                             T["qz"], T["qw"]))
        return transform
コード例 #13
0
ファイル: tf_helpers.py プロジェクト: jethrokuan/catkin_ros
def publish_pose_as_transform(pose, reference_frame, name, seconds=1):
    """
    Publish a pose as a transform so that it is visualised in rviz.
    pose                -> A geometry_msgs.msg/Pose to be converted into a transform and published
    reference_frame     -> A string defining the reference_frame of the pose
    name                -> A string defining the child frame of the transform
    seconds             -> An int32 that defines the duration the transform will be broadcast for
    """

    # Create a broadcast node and a stamped transform to broadcast
    t = gmsg.TransformStamped()

    # Prepare broadcast message
    t.header.frame_id = reference_frame
    t.child_frame_id = name

    # Copy in pose values to transform
    t.transform.translation = pose.position
    t.transform.rotation = pose.orientation

    # Call the publish_stamped_transform function
    publish_stamped_transform(t, seconds)
コード例 #14
0
ファイル: ZumoTFSensor.py プロジェクト: timtatt/sit310
def publishWalls():
    cloudPoints = []

    if (wallLeft > 0):
        cloudPoints.append([0.5, -13.0 / wallLeft, 0.5])
        #print("Object on Left");

    if (wallRight > 0):
        cloudPoints.append([0.5, 13.0 / wallRight, 0.5])
        #print("Object on Right");

    if (wallFrontLeft > 0):
        cloudPoints.append([13.0 / wallFrontLeft, 0.5, 0.5])
        #print("Object at Front");

    if (wallFrontRight > 0):
        cloudPoints.append([13.0 / wallFrontRight, -0.5, 0.5])
        #print("Object at Front");

    header = stdMsg.Header()
    header.stamp = ros.Time.now()
    header.frame_id = 'world'

    myPointCloud = pcl2.create_cloud_xyz32(header, cloudPoints)

    t = geoMsg.TransformStamped()
    t.header.stamp = ros.Time.now()
    t.header.frame_id = 'world'
    t.child_frame_id = 'zumo'
    t.transform.translation.x = transX
    t.transform.translation.y = transY
    t.transform.translation.z = transZ
    t.transform.rotation.x = rotX
    t.transform.rotation.y = rotY
    t.transform.rotation.z = rotZ
    t.transform.rotation.w = rotW

    cloudOut = doTransformCloud(myPointCloud, t)
    pclPub.publish(cloudOut)
コード例 #15
0
def publishTransform():
	global x;
	global y;
	global th;

	br = tfRos.TransformBroadcaster();

	t = geoMsgs.TransformStamped();
	t.header.stamp = ros.Time.now();
	t.header.frame_id = "odom";
	t.child_frame_id = "base_link";

	t.transform.translation.x = x;
	t.transform.translation.y = y;
	t.transform.translation.z = 0.0;

	q = tfConversions.transformations.quaternion_from_euler(0, 0, th);
	t.transform.rotation.x = q[0];
	t.transform.rotation.y = q[1];
	t.transform.rotation.z = q[2];
	t.transform.rotation.w = q[3];

	br.sendTransform(t);
コード例 #16
0
def main():
    # Parse arguments
    parser = argparse.ArgumentParser(
        description=
        'Set frames being broadcast by a multi_static_transform_publisher')
    parser.add_argument(
        '--node-name',
        metavar=('node_name'),
        default=['multi_tf_pub'],
        type=str,
        nargs=1,
        help=
        'The name of the multi publisher that should publish this transform. Default is \'multi_tf_pub\''
    )

    parser.add_argument('--xyz',
                        metavar=('x', 'y', 'z'),
                        default=[0.0, 0.0, 0.0],
                        type=float,
                        nargs=3,
                        help='Position in x, y, z)')

    group = parser.add_mutually_exclusive_group()
    group.add_argument('--quat',
                       metavar=('qx', 'qy', 'qz', 'qw'),
                       default=[0.0, 0.0, 0.0, 1.0],
                       type=float,
                       nargs=4,
                       help='Orientation in quaternion')
    group.add_argument('--aa',
                       metavar=('x', 'y', 'z', 't'),
                       type=float,
                       nargs=4,
                       help='Orientation in axis/angle x, y, z, theta')
    group.add_argument('--ypr',
                       metavar=('yaw', 'pitch', 'roll'),
                       type=float,
                       nargs=3,
                       help='Orientation in yaw, pitch, roll')

    parser.add_argument(
        'parent_frame_id',
        metavar=('frame_id'),
        type=str,
        nargs=1,
        help='The frame_id of the frame in which new new frame is defined.')
    parser.add_argument('child_frame_id',
                        metavar=('child_frame_id'),
                        type=str,
                        nargs=1,
                        help='The frame_id of the new frame.')
    parser.add_argument('period',
                        metavar=('period'),
                        type=float,
                        nargs=1,
                        help='Publish period in ms.')

    myargv = rospy.myargv(argv=sys.argv)
    args = parser.parse_args(args=myargv[1:])

    rospy.init_node('multi_static')

    # Check if other rotation format is used
    if args.ypr:
        # Transform YPR to quat
        rotation = PyKDL.Rotation.RPY(args.ypr[2], args.ypr[1], args.ypr[0])
        args.quat = rotation.GetQuaternion()
    elif args.aa:
        # Transform axis angle to quat
        axis = PyKDL.Vector(args.aa[0], args.aa[1], args.aa[2])
        axis.Normalize()
        rotation = PyKDL.Rotation.Rot(axis, args.aa[3])
        args.quat = rotation.GetQuaternion()

    # Construct transform message
    tform = geometry_msgs.TransformStamped()
    tform.header.frame_id = args.parent_frame_id[0]
    tform.header.stamp = rospy.Time(0)

    tform.child_frame_id = args.child_frame_id[0]

    tform.transform.translation.x = args.xyz[0]
    tform.transform.translation.y = args.xyz[1]
    tform.transform.translation.z = args.xyz[2]

    tform.transform.rotation.x = args.quat[0]
    tform.transform.rotation.y = args.quat[1]
    tform.transform.rotation.z = args.quat[2]
    tform.transform.rotation.w = args.quat[3]

    static_tform = lcsr_tf_tools.StaticTransform()
    static_tform.header.stamp = rospy.Time.now()
    static_tform.transform = tform
    static_tform.publish_period = rospy.Duration(1E-3 * args.period[0])

    # Publish the transform
    rospy.loginfo("Registering static transform %s --> %s\n%s" %
                  (tform.header.frame_id, tform.child_frame_id, str(tform)))
    set_pub = None

    # Get a tf_listener to make sure the frame gets published
    listener = tf.TransformListener(True, rospy.Duration(10.0))

    # Wait for the frame to be published
    while listener and not rospy.is_shutdown():
        static_tform.header.stamp = rospy.Time.now()
        set_pub = rospy.Publisher(args.node_name[0] + '/set_frame',
                                  lcsr_tf_tools.StaticTransform,
                                  latch=True)
        set_pub.publish(static_tform)
        try:
            now = rospy.Time(0)
            listener.waitForTransform(tform.header.frame_id,
                                      tform.child_frame_id, now,
                                      rospy.Duration(1.0))
            pose = listener.lookupTransform(tform.header.frame_id,
                                            tform.child_frame_id, now)
            rospy.loginfo("Registered static transform %s --> %s\n%s: %s" %
                          (tform.header.frame_id, tform.child_frame_id,
                           str(tform), str(pose)))
            listener = None
        except tf.Exception as ex:
            rospy.logwarn(
                "Multi static transform %s --> %s not being published yet: %s"
                % (tform.header.frame_id, tform.child_frame_id, str(ex)))

    # Wait for sigint
    rospy.spin()
コード例 #17
0
ファイル: pose_reduced.py プロジェクト: tinasun1405/RR1-IP
def sendTransform(data):
    # initialise transform msg
    t = g.TransformStamped()

    # Populate transform data
    t.header.stamp = rospy.Time.now()
    t.header.frame_id = 'map'
    t.child_frame_id = 'laser'

    # set transform translation values
    t.transform.translation.x = data.x
    t.transform.translation.y = data.y
    t.transform.translation.z = 0

    # set transform rotation values
    q = tf.transformations.quaternion_from_euler(0, 0, 0)
    t.transform.rotation.x = q[0]
    t.transform.rotation.y = q[1]
    t.transform.rotation.z = q[2]
    t.transform.rotation.w = q[3]
    # rospy.logout(data)

    # Send transform data
    tfB = tf2_ros.TransformBroadcaster()
    tfB.sendTransform(t)


# pose = g.PoseStamped()

# setpoint = geometry_msgs.msg.TransformStamped()
# tf_buffer = tf2_ros.Buffer(rospy.Duration(10.0)) #tf buffer length
# tf_listener = tf2_ros.TransformListener(tf_buffer)

# rate = rospy.Rate(20) # 20hz

# local_pos_pub = rospy.Publisher('/mavros/setpoint_position/local', geometry_msgs.msg.PoseStamped, queue_size=10)
# pose.pose.position.x = 0
# pose.pose.position.y = 0
# pose.pose.position.z = 1
# local_pos_pub.publish(pose)

# set_mode = rospy.ServiceProxy('/mavros/set_mode', mavros_msgs.srv.SetMode)
# arm = rospy.ServiceProxy('/mavros/cmd/arming', mavros_msgs.srv.CommandBool)

# br= tf2_ros.TransformBroadcaster()
# setpoint.header.stamp = rospy.Time.now()
# setpoint.header.frame_id = "map"
# setpoint.child_frame_id = "setpoint"
# setpoint.transform.translation.x = 0.0
# setpoint.transform.translation.y = 0.0
# setpoint.transform.translation.z = 1.0
# q = tf.transformations.quaternion_from_euler(0, 0, 0)
# setpoint.transform.rotation.x = q[0]
# setpoint.transform.rotation.y = q[1]
# setpoint.transform.rotation.z = q[2]
# setpoint.transform.rotation.w = q[3]

# for i in range(100):
#     #local_pos_pub.publish(pose)
#     br.sendTransform(setpoint)
#     rate.sleep()

# set_mode(0,"OFFBOARD" )
# arm(True)

# while not rospy.is_shutdown():
#     #local_pos_pub.publish(pose)
#     #br.sendTransform(setpoint)
#     rate.sleep()
コード例 #18
0
ファイル: where_to_perch.py プロジェクト: shonigmann/DroCap
    def roi_callback(self, msg):
        rospy.loginfo(
            rospy.get_caller_id() +
            " Mesh filepaths received. Starting Camera Placement Optimization."
        )

        # launch optimization from here
        best_placements = optimize(
            seg_env_prototype=make_path_absolute(msg.surf_path_prototype),
            target_prototype=make_path_absolute(msg.target_path_prototype),
            cluster_env_path=make_path_absolute(msg.clustered_env_path),
            full_env_path=make_path_absolute(msg.full_env_path),
            enable_user_confirmation=True)

        rospy.loginfo(" Publishing Optimal Placements...")

        count = 0

        for bp in best_placements:
            rospy.loginfo(" Publishing Camera " + str(count))
            pch_msg = pchMsg()
            state_msg = ModelState()
            static_transform = geoMsg.TransformStamped()
            pos_msgs = [
                pch_msg.pose.position, state_msg.pose.position,
                static_transform.transform.translation
            ]
            rot_msgs = [
                pch_msg.pose.orientation, state_msg.pose.orientation,
                static_transform.transform.rotation
            ]
            h = Header()
            h.stamp = rospy.Time.now()
            q = eul_to_qt(bp.pose[3:])

            cam_name = "iris_" + str(count + 1)
            frame_name = "iris_" + str(count +
                                       1) + "/camera__optical_center_link"

            for i in range(len(pos_msgs)):
                pos_msgs[i].x = bp.pose[0]
                pos_msgs[i].y = bp.pose[1]
                pos_msgs[i].z = bp.pose[2]
                rot_msgs[i].x = q[0]
                rot_msgs[i].y = q[1]
                rot_msgs[i].z = q[2]
                rot_msgs[i].w = q[3]

            pch_msg.header = h
            pch_msg.camera_id = bp.camera_id
            # pch_msg.pose.position.x = bp.pose[0]
            # pch_msg.pose.position.y = bp.pose[1]
            # pch_msg.pose.position.z = bp.pose[2]
            # pch_msg.pose.orientation.x = q[0]
            # pch_msg.pose.orientation.y = q[1]
            # pch_msg.pose.orientation.z = q[2]
            # pch_msg.pose.orientation.w = q[3]
            self.pub.publish(pch_msg)

            state_msg = ModelState()
            state_msg.model_name = cam_name

            # state_msg.pose.position.x = bp.pose[0]
            # state_msg.pose.position.y = bp.pose[1]
            # state_msg.pose.position.z = bp.pose[2]
            # state_msg.pose.orientation.x = q[0]
            # state_msg.pose.orientation.y = q[1]
            # state_msg.pose.orientation.z = q[2]
            # state_msg.pose.orientation.w = q[3]
            # TODO: RE-ADD
            # rospy.wait_for_service('/gazebo/set_model_state')
            print("Sending Gazebo State Message: ")
            print(str(state_msg))
            # try:
            #     set_state = rospy.ServiceProxy('/gazebo/set_model_state', SetModelState)
            #     resp = set_state(state_msg)
            #     print(str(resp))
            # except rospy.ServiceException as e:
            #     print("Service call failed: %s" % e)

            static_transform = geoMsg.TransformStamped()
            static_transform.header.stamp = rospy.Time.now()
            static_transform.header.frame_id = "world"
            static_transform.child_frame_id = frame_name

            # static_transform.transform.translation.x = bp.pose[0]
            # static_transform.transform.translation.y = bp.pose[1]
            # static_transform.transform.translation.z = bp.pose[2]
            # static_transform.transform.rotation.x = q[0]
            # static_transform.transform.rotation.y = q[1]
            # static_transform.transform.rotation.z = q[2]
            # static_transform.transform.rotation.w = q[3]

            # broadcaster = tf2_ros.StaticTransformBroadcaster()
            # broadcaster.sendTransform(static_transform)

            count += 1

        rospy.loginfo(" CPO Complete")
        rospy.loginfo(" Initializing Gazebo Simulation...")