Ariles
Loading...
Searching...
No Matches
rosmsg_geometry_msgs.h
Go to the documentation of this file.
1/**
2 @file
3 @author Alexander Sherikov
4
5 @copyright 2017-2018 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6 (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7
8 @brief
9*/
10
11#pragma once
12
13#include <Eigen/Core>
14#include <Eigen/Geometry>
15
16namespace ariles2
17{
18 namespace copyfrom
19 {
20 template <class t_Visitor, typename t_Scalar, int t_flags>
22 t_Visitor & /*visitor*/,
23 Eigen::Matrix<t_Scalar, 3, 1, t_flags> &left,
24 const geometry_msgs::Vector3 &right,
25 const typename t_Visitor::Parameters & /*param*/)
26 {
28 left.x() = right.x;
29 left.y() = right.y;
30 left.z() = right.z;
31 }
32
33 template <class t_Visitor, typename t_Scalar, int t_flags>
35 t_Visitor & /*visitor*/,
36 Eigen::Matrix<t_Scalar, Eigen::Dynamic, 1, t_flags> &left,
37 const geometry_msgs::Vector3 &right,
38 const typename t_Visitor::Parameters & /*param*/)
39 {
41 left.resize(3);
42 left(0) = right.x;
43 left(1) = right.y;
44 left(2) = right.z;
45 }
46
47
48 template <class t_Visitor, typename t_Scalar, int t_options>
50 const t_Visitor & /*visitor*/,
51 Eigen::Quaternion<t_Scalar, t_options> &left,
52 const geometry_msgs::Quaternion &right,
53 const typename t_Visitor::Parameters & /*param*/)
54 {
56 left.x() = right.x;
57 left.y() = right.y;
58 left.z() = right.z;
59 left.w() = right.w;
60 }
61
62
63 template <class t_Visitor, typename t_Scalar, int t_mode, int t_options>
65 const t_Visitor &visitor,
66 Eigen::Transform<t_Scalar, 3, t_mode, t_options> &left,
67 const geometry_msgs::Transform &right,
68 const typename t_Visitor::Parameters &param)
69 {
71
72 Eigen::Quaternion<t_Scalar> quaternion;
73 Eigen::Matrix<t_Scalar, 3, 1> translation;
74
75 apply_copyfrom(visitor, quaternion, right.rotation, param);
76 apply_copyfrom(visitor, translation, right.translation, param);
77
78 left(3, 3) = 1.0;
79 left.linear() = quaternion.toRotationMatrix();
80 left.translation() = translation;
81 }
82 } // namespace copyfrom
83
84
85 namespace copyto
86 {
87 template <class t_Visitor, typename t_Scalar, int t_flags>
89 t_Visitor & /*visitor*/,
90 const Eigen::Matrix<t_Scalar, 3, 1, t_flags> &left,
91 geometry_msgs::Vector3 &right,
92 const typename t_Visitor::Parameters & /*param*/)
93 {
95 right.x = left.x();
96 right.y = left.y();
97 right.z = left.z();
98 }
99
100 template <class t_Visitor, typename t_XprType, bool t_InnerPanel>
102 t_Visitor & /*visitor*/,
103 const Eigen::Block<t_XprType, 3, 1, t_InnerPanel> &left,
104 geometry_msgs::Vector3 &right,
105 const typename t_Visitor::Parameters & /*param*/)
106 {
108 right.x = left(0);
109 right.y = left(1);
110 right.z = left(2);
111 }
112
113 template <class t_Visitor, typename t_Scalar, int t_flags>
115 t_Visitor & /*visitor*/,
116 const Eigen::Matrix<t_Scalar, Eigen::Dynamic, 1, t_flags> &left,
117 geometry_msgs::Vector3 &right,
118 const typename t_Visitor::Parameters & /*param*/)
119 {
121 CPPUT_ASSERT(3 == left.size(), "Wrong entry size.");
122 right.x = left(0);
123 right.y = left(1);
124 right.z = left(2);
125 }
126
127
128 template <class t_Visitor, typename t_Scalar, int t_options>
130 const t_Visitor & /*visitor*/,
131 const Eigen::Quaternion<t_Scalar, t_options> &left,
132 geometry_msgs::Quaternion &right,
133 const typename t_Visitor::Parameters & /*param*/)
134 {
136 right.x = left.x();
137 right.y = left.y();
138 right.z = left.z();
139 right.w = left.w();
140 }
141
142
143 template <class t_Visitor, typename t_Scalar, int t_mode, int t_options>
145 const t_Visitor &visitor,
146 const Eigen::Transform<t_Scalar, 3, t_mode, t_options> &left,
147 geometry_msgs::Transform &right,
148 const typename t_Visitor::Parameters &param)
149 {
151 apply_copyto(visitor, Eigen::Quaternion<t_Scalar>(left.linear()), right.rotation, param);
152 apply_copyto(visitor, left.translation(), right.translation, param);
153 }
154 } // namespace copyto
155} // namespace ariles2
#define CPPUT_ASSERT(condition,...)
Definition exception.h:32
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:307
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:353
#define CPPUT_TRACE_FUNCTION
Definition trace.h:126