TransformBroadcaster.cpp
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2016, Bielefeld University, CITEC
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions are met:
00007  *
00008  *     * Redistributions of source code must retain the above copyright
00009  *       notice, this list of conditions and the following disclaimer.
00010  *     * Redistributions in binary form must reproduce the above copyright
00011  *       notice, this list of conditions and the following disclaimer in the
00012  *       documentation and/or other materials provided with the distribution.
00013  *     * Neither the name of the Willow Garage, Inc. nor the names of its
00014  *       contributors may be used to endorse or promote products derived from
00015  *       this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00018  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00021  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00022  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00023  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00025  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00026  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00027  * POSSIBILITY OF SUCH DAMAGE.
00028  *
00029  * Author: Robert Haschke <rhaschke@techfak.uni-bielefeld.de>
00030  */
00031 
00032 #include "TransformBroadcaster.h"
00033 
00034 TransformBroadcaster::TransformBroadcaster(const QString &parent_frame, const QString &child_frame, QObject *parent) :
00035   QObject(parent), valid_(false), enabled_(false)
00036 {
00037   setPosition(0,0,0);
00038   setQuaternion(0,0,0,1);
00039 
00040   setParentFrame(parent_frame);
00041   setChildFrame(child_frame);
00042 
00043   enabled_ = true;
00044   check(); send();
00045 }
00046 
00047 const geometry_msgs::TransformStamped &TransformBroadcaster::value() const
00048 {
00049   return msg_;
00050 }
00051 
00052 void TransformBroadcaster::setValue(const geometry_msgs::TransformStamped &tf)
00053 {
00054   msg_ = tf;
00055   check(); send();
00056 }
00057 
00058 void TransformBroadcaster::setPose(const geometry_msgs::Pose &pose)
00059 {
00060   bool old = enabled_;
00061   enabled_ = false;
00062 
00063   const geometry_msgs::Point &p = pose.position;
00064   setPosition(p.x, p.y, p.z);
00065 
00066   const geometry_msgs::Quaternion &q = pose.orientation;
00067   setQuaternion(q.x, q.y, q.z, q.w);
00068 
00069   enabled_ = old;
00070   send();
00071 }
00072 
00073 bool TransformBroadcaster::enabled() const
00074 {
00075   return enabled_;
00076 }
00077 
00078 void TransformBroadcaster::setEnabled(bool bEnabled)
00079 {
00080   enabled_ = bEnabled;
00081   check(); send();
00082 }
00083 
00084 void TransformBroadcaster::setDisabled(bool bDisabled)
00085 {
00086   setEnabled(!bDisabled);
00087 }
00088 
00089 void TransformBroadcaster::setParentFrame(const QString &frame)
00090 {
00091   msg_.header.frame_id = frame.toStdString();
00092   check(); send();
00093 }
00094 
00095 void TransformBroadcaster::setChildFrame(const QString &frame)
00096 {
00097   msg_.child_frame_id = frame.toStdString();
00098   check(); send();
00099 }
00100 
00101 void TransformBroadcaster::setPosition(const Eigen::Vector3d &p)
00102 {
00103   setPosition(p.x(), p.y(), p.z());
00104 }
00105 
00106 void TransformBroadcaster::setQuaternion(const Eigen::Quaterniond &q)
00107 {
00108   setQuaternion(q.x(), q.y(), q.z(), q.w());
00109 }
00110 
00111 void TransformBroadcaster::setPosition(double x, double y, double z)
00112 {
00113   msg_.transform.translation.x = x;
00114   msg_.transform.translation.y = y;
00115   msg_.transform.translation.z = z;
00116   send();
00117 }
00118 
00119 void TransformBroadcaster::setQuaternion(double x, double y, double z, double w)
00120 {
00121   msg_.transform.rotation.x = x;
00122   msg_.transform.rotation.y = y;
00123   msg_.transform.rotation.z = z;
00124   msg_.transform.rotation.w = w;
00125   send();
00126 }
00127 
00128 void TransformBroadcaster::send()
00129 {
00130   if (enabled_ && valid_) {
00131     msg_.header.stamp = ros::Time::now();
00132     ++msg_.header.seq;
00133     broadcaster_.sendTransform(msg_);
00134     ros::spinOnce();
00135   }
00136 }
00137 
00138 void TransformBroadcaster::check()
00139 {
00140   valid_ =
00141       !msg_.header.frame_id.empty() &&
00142       !msg_.child_frame_id.empty() &&
00143       msg_.header.frame_id != msg_.child_frame_id;
00144 }


agni_tf_tools
Author(s): Robert Haschke
autogenerated on Sat Jun 8 2019 21:01:20