controls  3.0.0
Transforms.h
Go to the documentation of this file.
1 #ifndef CONTROLS_UTILS_TRANSFORMS_H
2 #define CONTROLS_UTILS_TRANSFORMS_H
3 
4 #include <utils/NodeUtils.h>
5 #include <utils/Types.h>
6 
14 double wrap(double r);
15 
23 Vector6d pose2n(const Pose& pose);
24 
32 Pose n2pose(const Vector6d& pose);
33 
41 Vector3d rad2deg(const Vector3d& rpy);
42 
50 Vector3d deg2rad(const Vector3d& rpy);
51 
59 Matrix3d rpy2rot(const Vector3d& rpy);
60 
70 Matrix3d rpy2rot(const double roll, const double pitch, const double yaw);
71 
79 Matrix2d ang2rot(const double angle);
80 
88 double rot2ang(const Matrix2d& m);
89 
97 Vector2d getT(const Matrix3d& r);
98 
106 Matrix2d getR(const Matrix3d& r);
107 
115 Matrix3d pose2tf_2d(const Pose& p);
116 
124 Pose tf2pose_2d(const Matrix3d& m);
125 
133 Matrix4d pose2tf(const Pose& p);
134 
142 Pose tf2pose(const Matrix4d& m);
143 
151 Vector3d getT(const Matrix4d& r);
152 
160 Matrix3d getR(const Matrix4d& r);
161 
169 Matrix3d tf_3dto2d(const Matrix4d& m);
170 
178 Matrix4d tf_2dto3d(const Matrix3d& m);
179 
187 Vector3d rot2rpy(const Matrix3d& r);
188 
196 double rot2yaw(const Matrix3d& r);
197 
205 Matrix3d quat2rot(const Quaterniond& q);
206 
214 Quaterniond rot2quat(const Matrix3d& r);
215 
223 Vector3d quat2rpy(const Quaterniond& q);
224 
232 double quat2yaw(const Quaterniond& q);
233 
241 Quaterniond rpy2quat(const Vector3d& rpy);
242 
252 Quaterniond rpy2quat(const double r, const double p, const double y);
253 
261 Quaterniond extractYaw(const Quaterniond& q);
262 
270 Vector3d extract2d(const Vector6d& v);
271 
279 Vector3d extract2d(const State& state);
280 
288 Matrix3d jacobian(const Vector3d& rpy);
289 
297 Matrix3d jacobian_inv(const Vector3d& rpy);
298 
307 Matrix6d getdJ(const Vector3d& rpy, const Vector3d& n2dot);
308 
316 Matrix6d transformation(const Vector3d& rpy);
317 
325 Matrix6d transformation(const Quaterniond& q);
326 
334 Matrix6d transformation(const Matrix3d& r);
335 
343 Matrix6d transformation_inv(const Vector3d& rpy);
344 
352 Matrix6d transformation_inv(const Quaterniond& q);
353 
361 Matrix6d transformation_inv(const Matrix3d& r);
362 
370 Matrix3d skew(const Vector3d& v);
371 
379 Vector3d skew(const Matrix3d& v);
380 
389 VectorXd error(const VectorXd& d, const VectorXd& y);
390 
399 Vector3d error(const Quaterniond& qd, const Quaterniond& q);
400 
409 Vector6d error(const Pose& d, const Pose& y);
410 
419 Vector3d error2d(const Pose& d, const Pose& y);
420 
429 Vector18d error(const State& d, const State& y);
430 
439 Vector3d errorrpy(const Vector3d& rpyd, const Vector3d& rpy);
440 
448 Vector3d convert(const geometry_msgs::msg::Vector3::ConstSharedPtr& v);
449 
457 Vector3d convert(const geometry_msgs::msg::Vector3& v);
458 
466 Vector3d convert(const geometry_msgs::msg::Point::ConstSharedPtr& v);
467 
475 Vector3d convert(const geometry_msgs::msg::Point& v);
476 
484 Vector6d convert(const geometry_msgs::msg::Twist::ConstSharedPtr& v);
485 
493 Vector6d convert(const geometry_msgs::msg::Twist& v);
494 
502 Vector6d convert(const geometry_msgs::msg::TwistStamped& v);
503 
511 Vector6d convert(const geometry_msgs::msg::TwistStamped::ConstSharedPtr& v);
512 
520 Quaterniond convert(const geometry_msgs::msg::Quaternion::ConstSharedPtr& v);
521 
529 Quaterniond convert(const geometry_msgs::msg::Quaternion& v);
530 
538 Pose convert(const geometry_msgs::msg::Pose::ConstSharedPtr& p);
539 
547 Pose convert(const geometry_msgs::msg::Pose& p);
548 
556 State convert(const nav_msgs::msg::Odometry::ConstSharedPtr& odom);
557 
565 State convert(const nav_msgs::msg::Odometry& odom);
566 
574 geometry_msgs::msg::Pose convert(const Pose& p);
575 
583 nav_msgs::msg::Odometry convert(const State& state);
584 
592 geometry_msgs::msg::Twist convert(const Vector6d& v);
593 
603 geometry_msgs::msg::WrenchStamped convert(const Vector6d& v, const std::string& frame_id, double t);
604 
612 MatrixXd pseudoInverse(const MatrixXd& m);
613 
614 #endif // CONTROLS_UTILS_TRANSFORMS_H
VectorXd error(const VectorXd &d, const VectorXd &y)
Computes the signed error between two vectors as (y - d)
Definition: Transforms.cpp:313
Vector3d quat2rpy(const Quaterniond &q)
Converts a quaternion to roll-pitch-yaw angles.
Definition: Transforms.cpp:154
Matrix6d getdJ(const Vector3d &rpy, const Vector3d &n2dot)
Computes the time derivative of the 6x6 transformation Jacobian.
Definition: Transforms.cpp:234
double quat2yaw(const Quaterniond &q)
Extracts the yaw angle from a quaternion.
Definition: Transforms.cpp:158
Quaterniond extractYaw(const Quaterniond &q)
Strips roll and pitch from a quaternion, retaining only yaw.
Definition: Transforms.cpp:195
double wrap(double r)
Wraps an angle to the range (-pi, pi].
Definition: Transforms.cpp:7
Vector3d rot2rpy(const Matrix3d &r)
Extracts roll-pitch-yaw angles from a rotation matrix.
Definition: Transforms.cpp:131
Matrix3d rpy2rot(const Vector3d &rpy)
Builds a 3x3 rotation matrix from roll-pitch-yaw angles.
Definition: Transforms.cpp:36
Matrix2d ang2rot(const double angle)
Builds a 2x2 rotation matrix from a single planar angle.
Definition: Transforms.cpp:55
Matrix3d skew(const Vector3d &v)
Builds a 3x3 skew-symmetric matrix from a 3-vector.
Definition: Transforms.cpp:301
Matrix4d pose2tf(const Pose &p)
Converts a Pose to a 4x4 homogeneous 3D transformation matrix.
Definition: Transforms.cpp:92
Vector3d extract2d(const Vector6d &v)
Extracts the X, Y, and yaw components from a 6-element state vector.
Definition: Transforms.cpp:204
double rot2yaw(const Matrix3d &r)
Extracts the yaw angle from a rotation matrix.
Definition: Transforms.cpp:140
Matrix6d transformation(const Vector3d &rpy)
Builds the 6x6 world-to-body transformation matrix from RPY angles.
Definition: Transforms.cpp:265
Matrix6d transformation_inv(const Vector3d &rpy)
Builds the 6x6 body-to-world inverse transformation matrix from RPY angles.
Definition: Transforms.cpp:283
Vector3d convert(const geometry_msgs::msg::Vector3::ConstSharedPtr &v)
Converts a ROS Vector3 shared-pointer message to an Eigen Vector3d.
Definition: Transforms.cpp:356
Matrix4d tf_2dto3d(const Matrix3d &m)
Embeds a 3x3 2D homogeneous transform into a 4x4 3D transform.
Definition: Transforms.cpp:123
Matrix3d jacobian_inv(const Vector3d &rpy)
Builds the 3x3 inverse Jacobian mapping Euler-angle rates to body angular rates.
Definition: Transforms.cpp:223
Matrix3d tf_3dto2d(const Matrix4d &m)
Projects a 4x4 3D homogeneous transform down to a 3x3 2D transform.
Definition: Transforms.cpp:115
Vector3d deg2rad(const Vector3d &rpy)
Converts a 3-element RPY vector from degrees to radians.
Definition: Transforms.cpp:32
double rot2ang(const Matrix2d &m)
Extracts the rotation angle from a 2x2 rotation matrix.
Definition: Transforms.cpp:64
Matrix3d jacobian(const Vector3d &rpy)
Builds the 3x3 Jacobian mapping body angular rates to Euler-angle rates.
Definition: Transforms.cpp:212
Quaterniond rpy2quat(const Vector3d &rpy)
Converts a roll-pitch-yaw vector to a quaternion.
Definition: Transforms.cpp:173
Vector3d rad2deg(const Vector3d &rpy)
Converts a 3-element RPY vector from radians to degrees.
Definition: Transforms.cpp:28
Pose tf2pose(const Matrix4d &m)
Converts a 4x4 homogeneous 3D transformation matrix to a Pose.
Definition: Transforms.cpp:100
MatrixXd pseudoInverse(const MatrixXd &m)
Computes the Moore-Penrose pseudo-inverse of a matrix.
Definition: Transforms.cpp:483
Vector6d pose2n(const Pose &pose)
Converts a Pose to a 6-element XYZRPY vector.
Definition: Transforms.cpp:15
Matrix3d quat2rot(const Quaterniond &q)
Converts a quaternion to a 3x3 rotation matrix.
Definition: Transforms.cpp:145
Matrix3d pose2tf_2d(const Pose &p)
Converts a Pose to a 3x3 homogeneous 2D transformation matrix.
Definition: Transforms.cpp:76
Vector2d getT(const Matrix3d &r)
Extracts the 2D translation vector from a 3x3 homogeneous transform.
Definition: Transforms.cpp:68
Matrix2d getR(const Matrix3d &r)
Extracts the 2x2 rotation block from a 3x3 homogeneous transform.
Definition: Transforms.cpp:72
Quaterniond rot2quat(const Matrix3d &r)
Converts a 3x3 rotation matrix to a quaternion.
Definition: Transforms.cpp:149
Vector3d errorrpy(const Vector3d &rpyd, const Vector3d &rpy)
Computes the RPY orientation error between two RPY angle vectors.
Definition: Transforms.cpp:350
Pose n2pose(const Vector6d &pose)
Converts a 6-element XYZRPY vector to a Pose.
Definition: Transforms.cpp:21
Vector3d error2d(const Pose &d, const Pose &y)
Computes the planar (X-Y-yaw) pose error between two Poses as (y - d)
Definition: Transforms.cpp:337
Pose tf2pose_2d(const Matrix3d &m)
Converts a 3x3 homogeneous 2D transformation matrix to a Pose.
Definition: Transforms.cpp:84
Eigen::Matrix< double, 6, 6 > Matrix6d
Definition: Types.h:20
Eigen::Matrix< double, 6, 1 > Vector6d
Definition: Types.h:29
Eigen::Matrix< double, 18, 1 > Vector18d
Definition: Types.h:30
Eigen::Matrix< double, 4, 4 > Matrix4d
Definition: Types.h:19
6DOF rigid-body pose as a 3D position and unit quaternion orientation
Definition: Types.h:49
Full kinematic state of the vehicle.
Definition: Types.h:63