Go to the documentation of this file.00001
00002
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 #ifndef OCTOMAP_ROS_CONVERSIONS_H
00041 #define OCTOMAP_ROS_CONVERSIONS_H
00042
00043 #include <octomap/octomap.h>
00044 #include <octomap_msgs/OctomapBinary.h>
00045 #include <octomap_msgs/conversions.h>
00046
00047 #include <pcl/point_cloud.h>
00048 #include <pcl/point_types.h>
00049 #include <geometry_msgs/Point.h>
00050 #include <tf/transform_datatypes.h>
00051
00052 namespace octomap {
00060 template <class PointT>
00061 static inline void pointsOctomapToPCL(const point3d_list& points, pcl::PointCloud<PointT>& cloud){
00062
00063 cloud.points.reserve(points.size());
00064 for (point3d_list::const_iterator it = points.begin(); it != points.end(); ++it){
00065 cloud.push_back(PointT(it->x(), it->y(), it->z()));
00066 }
00067
00068 }
00069
00076 template <class PointT>
00077 static inline void pointcloudPCLToOctomap(const pcl::PointCloud<PointT>& pclCloud, Pointcloud& octomapCloud){
00078 octomapCloud.reserve(pclCloud.points.size());
00079
00080 typename
00081 pcl::PointCloud<PointT>::const_iterator it;
00082 for (it = pclCloud.begin(); it != pclCloud.end(); ++it){
00083
00084 if (!std::isnan (it->x) && !std::isnan (it->y) && !std::isnan (it->z))
00085 octomapCloud.push_back(it->x, it->y, it->z);
00086 }
00087 }
00088
00090 static inline geometry_msgs::Point pointOctomapToMsg(const point3d& octomapPt){
00091 geometry_msgs::Point pt;
00092 pt.x = octomapPt.x();
00093 pt.y = octomapPt.y();
00094 pt.z = octomapPt.z();
00095
00096 return pt;
00097 }
00098
00100 static inline octomap::point3d pointMsgToOctomap(const geometry_msgs::Point& ptMsg){
00101 return octomap::point3d(ptMsg.x, ptMsg.y, ptMsg.z);
00102 }
00103
00105 static inline tf::Point pointOctomapToTf(const point3d& octomapPt){
00106 return tf::Point(octomapPt.x(), octomapPt.y(), octomapPt.z());
00107 }
00108
00110 static inline octomap::point3d pointTfToOctomap(const tf::Point& ptTf){
00111 return point3d(ptTf.x(), ptTf.y(), ptTf.z());
00112 }
00113
00115 template <class PointT>
00116 static inline octomap::point3d pointPCLToOctomap(const PointT& p){
00117 return point3d(p.x, p.y, p.z);
00118 }
00119
00122 template <class PointT>
00123 static inline PointT pointOctomapToPCL(const point3d& octomapPt){
00124 return PointT(octomapPt.x(), octomapPt.y(), octomapPt.z());
00125 }
00126
00128 static inline tf::Quaternion quaternionOctomapToTf(const octomath::Quaternion& octomapQ){
00129 return tf::Quaternion(octomapQ.x(), octomapQ.y(), octomapQ.z(), octomapQ.u());
00130 }
00131
00133 static inline octomath::Quaternion quaternionTfToOctomap(const tf::Quaternion& qTf){
00134 return octomath::Quaternion(qTf.w(), qTf.x(), qTf.y(), qTf.z());
00135 }
00136
00138 static inline tf::Pose poseOctomapToTf(const octomap::pose6d& octomapPose){
00139 return tf::Pose(quaternionOctomapToTf(octomapPose.rot()), pointOctomapToTf(octomapPose.trans()));
00140 }
00141
00143 static inline octomap::pose6d poseTfToOctomap(const tf::Pose& poseTf){
00144 return octomap::pose6d(pointTfToOctomap(poseTf.getOrigin()), quaternionTfToOctomap(poseTf.getRotation()));
00145 }
00146
00147
00148
00149
00150
00151 }
00152
00153
00154 #endif
00155