Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef PCL_WARP_POINT_RIGID_6D_H_
00043 #define PCL_WARP_POINT_RIGID_6D_H_
00044
00045 #include <pcl/registration/warp_point_rigid.h>
00046
00047 namespace pcl
00048 {
00049 namespace registration
00050 {
00058 template <typename PointSourceT, typename PointTargetT, typename Scalar = float>
00059 class WarpPointRigid6D : public WarpPointRigid<PointSourceT, PointTargetT, Scalar>
00060 {
00061 public:
00062 using WarpPointRigid<PointSourceT, PointTargetT, Scalar>::transform_matrix_;
00063
00064 typedef typename WarpPointRigid<PointSourceT, PointTargetT, Scalar>::Matrix4 Matrix4;
00065 typedef typename WarpPointRigid<PointSourceT, PointTargetT, Scalar>::VectorX VectorX;
00066
00067 typedef boost::shared_ptr<WarpPointRigid6D<PointSourceT, PointTargetT, Scalar> > Ptr;
00068 typedef boost::shared_ptr<const WarpPointRigid6D<PointSourceT, PointTargetT, Scalar> > ConstPtr;
00069
00070 WarpPointRigid6D () : WarpPointRigid<PointSourceT, PointTargetT, Scalar> (6) {}
00071
00073 virtual ~WarpPointRigid6D () {}
00074
00079 virtual void
00080 setParam (const VectorX& p)
00081 {
00082 assert (p.rows () == this->getDimension ());
00083
00084
00085 transform_matrix_.setZero ();
00086 transform_matrix_ (0, 3) = p[0];
00087 transform_matrix_ (1, 3) = p[1];
00088 transform_matrix_ (2, 3) = p[2];
00089 transform_matrix_ (3, 3) = 1;
00090
00091
00092 Eigen::Quaternion<Scalar> q (0, p[3], p[4], p[5]);
00093 q.w () = static_cast<Scalar> (sqrt (1 - q.dot (q)));
00094 q.normalize ();
00095 transform_matrix_.topLeftCorner (3, 3) = q.toRotationMatrix ();
00096 }
00097 };
00098 }
00099 }
00100
00101 #endif
00102