32 #ifndef TF2_GEOMETRY_MSGS_H 33 #define TF2_GEOMETRY_MSGS_H 38 #include <geometry_msgs/PointStamped.h> 39 #include <geometry_msgs/QuaternionStamped.h> 40 #include <geometry_msgs/TransformStamped.h> 41 #include <geometry_msgs/Vector3Stamped.h> 42 #include <geometry_msgs/Pose.h> 43 #include <geometry_msgs/PoseStamped.h> 44 #include <geometry_msgs/PoseWithCovarianceStamped.h> 45 #include <geometry_msgs/Wrench.h> 46 #include <geometry_msgs/WrenchStamped.h> 47 #include <kdl/frames.hpp> 67 t.transform.rotation.z, t.transform.rotation.w),
68 KDL::Vector(t.transform.translation.x, t.transform.translation.y, t.transform.translation.z));
82 geometry_msgs::Vector3
toMsg(
const tf2::Vector3& in)
84 geometry_msgs::Vector3 out;
97 void fromMsg(
const geometry_msgs::Vector3& in, tf2::Vector3& out)
99 out = tf2::Vector3(in.x, in.y, in.z);
125 const std::string&
getFrameId(
const geometry_msgs::Vector3Stamped&
t) {
return t.header.frame_id;}
134 geometry_msgs::Vector3Stamped
toMsg(
const geometry_msgs::Vector3Stamped& in)
145 void fromMsg(
const geometry_msgs::Vector3Stamped& msg, geometry_msgs::Vector3Stamped& out)
158 geometry_msgs::Vector3Stamped out;
159 out.header.stamp = in.
stamp_;
161 out.vector.x = in.getX();
162 out.vector.y = in.getY();
163 out.vector.z = in.getZ();
175 out.
stamp_ = msg.header.stamp;
177 out.
setData(tf2::Vector3(msg.vector.x, msg.vector.y, msg.vector.z));
191 geometry_msgs::Point&
toMsg(
const tf2::Vector3& in, geometry_msgs::Point& out)
205 void fromMsg(
const geometry_msgs::Point& in, tf2::Vector3& out)
207 out = tf2::Vector3(in.x, in.y, in.z);
233 const std::string&
getFrameId(
const geometry_msgs::PointStamped&
t) {
return t.header.frame_id;}
241 geometry_msgs::PointStamped
toMsg(
const geometry_msgs::PointStamped& in)
252 void fromMsg(
const geometry_msgs::PointStamped& msg, geometry_msgs::PointStamped& out)
265 out.header.stamp = in.
stamp_;
267 out.point.x = in.getX();
268 out.point.y = in.getY();
269 out.point.z = in.getZ();
281 out.
stamp_ = msg.header.stamp;
283 out.
setData(tf2::Vector3(msg.point.x, msg.point.y, msg.point.z));
299 geometry_msgs::Quaternion out;
342 const std::string&
getFrameId(
const geometry_msgs::QuaternionStamped&
t) {
return t.header.frame_id;}
350 geometry_msgs::QuaternionStamped
toMsg(
const geometry_msgs::QuaternionStamped& in)
361 void fromMsg(
const geometry_msgs::QuaternionStamped& msg, geometry_msgs::QuaternionStamped& out)
374 geometry_msgs::QuaternionStamped out;
375 out.header.stamp = in.
stamp_;
377 out.quaternion.w = in.getW();
378 out.quaternion.x = in.getX();
379 out.quaternion.y = in.getY();
380 out.quaternion.z = in.getZ();
405 out.
stamp_ = in.header.stamp;
447 out.
setOrigin(tf2::Vector3(in.position.x, in.position.y, in.position.z));
474 const std::string&
getFrameId(
const geometry_msgs::PoseStamped&
t) {
return t.header.frame_id;}
482 geometry_msgs::PoseStamped
toMsg(
const geometry_msgs::PoseStamped& in)
493 void fromMsg(
const geometry_msgs::PoseStamped& msg, geometry_msgs::PoseStamped& out)
506 out.header.stamp = in.
stamp_;
508 toMsg(in.getOrigin(), out.pose.position);
509 out.pose.orientation =
toMsg(in.getRotation());
521 out.
stamp_ = msg.header.stamp;
548 const std::string&
getFrameId(
const geometry_msgs::PoseWithCovarianceStamped&
t) {
return t.header.frame_id;}
556 geometry_msgs::PoseWithCovarianceStamped
toMsg(
const geometry_msgs::PoseWithCovarianceStamped& in)
567 void fromMsg(
const geometry_msgs::PoseWithCovarianceStamped& msg, geometry_msgs::PoseWithCovarianceStamped& out)
580 out.header.stamp = in.
stamp_;
582 toMsg(in.getOrigin(), out.pose.pose.position);
583 out.pose.pose.orientation =
toMsg(in.getRotation());
595 out.
stamp_ = msg.header.stamp;
614 geometry_msgs::Transform out;
658 const std::string&
getFrameId(
const geometry_msgs::TransformStamped&
t) {
return t.header.frame_id;}
666 geometry_msgs::TransformStamped
toMsg(
const geometry_msgs::TransformStamped& in)
677 void fromMsg(
const geometry_msgs::TransformStamped& msg, geometry_msgs::TransformStamped& out)
690 geometry_msgs::TransformStamped out;
691 out.header.stamp = in.
stamp_;
693 out.transform.translation =
toMsg(in.getOrigin());
694 out.transform.rotation =
toMsg(in.getRotation());
707 out.
stamp_ = msg.header.stamp;
722 void doTransform(
const geometry_msgs::Point& t_in, geometry_msgs::Point& t_out,
const geometry_msgs::TransformStamped& transform)
725 fromMsg(transform.transform, t);
728 tf2::Vector3 v_out = t * v_in;
740 void doTransform(
const geometry_msgs::PointStamped& t_in, geometry_msgs::PointStamped& t_out,
const geometry_msgs::TransformStamped& transform)
743 t_out.header.stamp = transform.header.stamp;
744 t_out.header.frame_id = transform.header.frame_id;
755 void doTransform(
const geometry_msgs::Quaternion& t_in, geometry_msgs::Quaternion& t_out,
const geometry_msgs::TransformStamped& transform)
758 fromMsg(transform.transform.rotation, t);
762 t_out =
toMsg(q_out);
773 void doTransform(
const geometry_msgs::QuaternionStamped& t_in, geometry_msgs::QuaternionStamped& t_out,
const geometry_msgs::TransformStamped& transform)
775 doTransform(t_in.quaternion, t_out.quaternion, transform);
776 t_out.header.stamp = transform.header.stamp;
777 t_out.header.frame_id = transform.header.frame_id;
789 void doTransform(
const geometry_msgs::Pose& t_in, geometry_msgs::Pose& t_out,
const geometry_msgs::TransformStamped& transform)
797 fromMsg(transform.transform, t);
810 void doTransform(
const geometry_msgs::PoseStamped& t_in, geometry_msgs::PoseStamped& t_out,
const geometry_msgs::TransformStamped& transform)
813 t_out.header.stamp = transform.header.stamp;
814 t_out.header.frame_id = transform.header.frame_id;
842 cov_in[6], cov_in[7], cov_in[8],
843 cov_in[12], cov_in[13], cov_in[14]);
845 cov_in[9], cov_in[10], cov_in[11],
846 cov_in[15], cov_in[16], cov_in[17]);
848 cov_in[24], cov_in[25], cov_in[26],
849 cov_in[30], cov_in[31], cov_in[32]);
851 cov_in[27], cov_in[28], cov_in[29],
852 cov_in[33], cov_in[34], cov_in[35]);
861 geometry_msgs::PoseWithCovariance::_covariance_type output;
862 output[0] = result_11[0][0];
863 output[1] = result_11[0][1];
864 output[2] = result_11[0][2];
865 output[6] = result_11[1][0];
866 output[7] = result_11[1][1];
867 output[8] = result_11[1][2];
868 output[12] = result_11[2][0];
869 output[13] = result_11[2][1];
870 output[14] = result_11[2][2];
872 output[3] = result_12[0][0];
873 output[4] = result_12[0][1];
874 output[5] = result_12[0][2];
875 output[9] = result_12[1][0];
876 output[10] = result_12[1][1];
877 output[11] = result_12[1][2];
878 output[15] = result_12[2][0];
879 output[16] = result_12[2][1];
880 output[17] = result_12[2][2];
882 output[18] = result_21[0][0];
883 output[19] = result_21[0][1];
884 output[20] = result_21[0][2];
885 output[24] = result_21[1][0];
886 output[25] = result_21[1][1];
887 output[26] = result_21[1][2];
888 output[30] = result_21[2][0];
889 output[31] = result_21[2][1];
890 output[32] = result_21[2][2];
892 output[21] = result_22[0][0];
893 output[22] = result_22[0][1];
894 output[23] = result_22[0][2];
895 output[27] = result_22[1][0];
896 output[28] = result_22[1][1];
897 output[29] = result_22[1][2];
898 output[33] = result_22[2][0];
899 output[34] = result_22[2][1];
900 output[35] = result_22[2][2];
913 void doTransform(
const geometry_msgs::PoseWithCovarianceStamped& t_in, geometry_msgs::PoseWithCovarianceStamped& t_out,
const geometry_msgs::TransformStamped& transform)
916 fromMsg(t_in.pose.pose.position, v);
918 fromMsg(t_in.pose.pose.orientation, r);
921 fromMsg(transform.transform, t);
923 toMsg(v_out, t_out.pose.pose);
924 t_out.header.stamp = transform.header.stamp;
925 t_out.header.frame_id = transform.header.frame_id;
938 void doTransform(
const geometry_msgs::TransformStamped& t_in, geometry_msgs::TransformStamped& t_out,
const geometry_msgs::TransformStamped& transform)
941 fromMsg(t_in.transform, input);
944 fromMsg(transform.transform, t);
947 t_out.transform =
toMsg(v_out);
948 t_out.header.stamp = transform.header.stamp;
949 t_out.header.frame_id = transform.header.frame_id;
960 void doTransform(
const geometry_msgs::Vector3& t_in, geometry_msgs::Vector3& t_out,
const geometry_msgs::TransformStamped& transform)
963 fromMsg(transform.transform, t);
964 tf2::Vector3 v_out = t.
getBasis() * tf2::Vector3(t_in.x, t_in.y, t_in.z);
978 void doTransform(
const geometry_msgs::Vector3Stamped& t_in, geometry_msgs::Vector3Stamped& t_out,
const geometry_msgs::TransformStamped& transform)
981 t_out.header.stamp = transform.header.stamp;
982 t_out.header.frame_id = transform.header.frame_id;
996 const std::string&
getFrameId(
const geometry_msgs::WrenchStamped&
t) {
return t.header.frame_id;}
1000 geometry_msgs::WrenchStamped
toMsg(
const geometry_msgs::WrenchStamped& in)
1006 void fromMsg(
const geometry_msgs::WrenchStamped& msg, geometry_msgs::WrenchStamped& out)
1013 geometry_msgs::WrenchStamped
toMsg(
const tf2::Stamped<std::array<tf2::Vector3, 2>>& in, geometry_msgs::WrenchStamped & out)
1015 out.header.stamp = in.stamp_;
1016 out.header.frame_id = in.frame_id_;
1017 out.wrench.force =
toMsg(in[0]);
1018 out.wrench.torque =
toMsg(in[1]);
1026 out.
stamp_ = msg.header.stamp;
1029 fromMsg(msg.wrench.force, tmp);
1031 fromMsg(msg.wrench.torque, tmp1);
1032 std::array<tf2::Vector3, 2> tmp_array;
1034 tmp_array[1] = tmp1;
1040 void doTransform(
const geometry_msgs::Wrench& t_in, geometry_msgs::Wrench& t_out,
const geometry_msgs::TransformStamped& transform)
1043 doTransform(t_in.torque, t_out.torque, transform);
1049 void doTransform(
const geometry_msgs::WrenchStamped& t_in, geometry_msgs::WrenchStamped& t_out,
const geometry_msgs::TransformStamped& transform)
1051 doTransform(t_in.wrench, t_out.wrench, transform);
1052 t_out.header.stamp = transform.header.stamp;
1053 t_out.header.frame_id = transform.header.frame_id;
1058 #endif // TF2_GEOMETRY_MSGS_H
const std::string & getFrameId(const T &t)
Matrix3x3 transpose() const
static Rotation Quaternion(double x, double y, double z, double w)
void doTransform(const T &data_in, T &data_out, const geometry_msgs::TransformStamped &transform)
geometry_msgs::TransformStamped t
geometry_msgs::PoseWithCovariance::_covariance_type transformCovariance(const geometry_msgs::PoseWithCovariance::_covariance_type &cov_in, const tf2::Transform &transform)
Transform the covariance matrix of a PoseWithCovarianceStamped message to a new frame.
ROS_DEPRECATED KDL::Frame gmTransformToKDL(const geometry_msgs::TransformStamped &t)
Convert a TransformStamped message to a KDL frame.
void fromMsg(const A &, B &b)
TF2SIMD_FORCE_INLINE const tf2Scalar & getW() const
const ros::Time & getTimestamp(const T &t)
void setData(const T &input)