CylinderGridMap.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2013, Fraunhofer FKIE
00003  *
00004  * Authors: Jochen Welle
00005  *
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions are met:
00008  *
00009  * * Redistributions of source code must retain the above copyright
00010  *   notice, this list of conditions and the following disclaimer.
00011  * * Redistributions in binary form must reproduce the above copyright
00012  *   notice, this list of conditions and the following disclaimer in the
00013  *   documentation and/or other materials provided with the distribution.
00014  * * Neither the name of the Fraunhofer FKIE nor the names of its
00015  *   contributors may be used to endorse or promote products derived from
00016  *   this software without specific prior written permission.
00017  *
00018  * This file is part of the StructureColoring ROS package.
00019  *
00020  * The StructureColoring ROS package is free software:
00021  * you can redistribute it and/or modify it under the terms of the
00022  * GNU Lesser General Public License as published by the Free
00023  * Software Foundation, either version 3 of the License, or
00024  * (at your option) any later version.
00025  *
00026  * The StructureColoring ROS package is distributed in the hope that it will be useful,
00027  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00028  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00029  * GNU Lesser General Public License for more details.
00030  *
00031  * You should have received a copy of the GNU Lesser General Public License
00032  * along with The StructureColoring ROS package.
00033  * If not, see <http://www.gnu.org/licenses/>.
00034  */
00035 
00036 #ifndef CYLINDER_GRIDMAP_H_
00037 #define CYLINDER_GRIDMAP_H_
00038 
00039 #include "Grid2D.h"
00040 #include "../structures/CylinderPatch.h"
00041 
00042 class CylinderGridMap: public Grid2D<bool>
00043 {
00044 public:
00045     typedef Grid2D<bool> BoolGrid;
00046         typedef Eigen::Vector3f Vec3;
00047 
00048     template<typename PointCloudT>
00049     CylinderGridMap(float cellSize, const CylinderPatch::CylinderPatchPtr& cylinderPatch, const PointCloudT& pointCloud);
00050 
00051 private:
00052     typedef CylinderPatch::PointIndices PntInd;
00053 
00054     void pointToHeigthAngle(float& height, float& angle, const Vec3& p) const;
00055     void heigthAngleToXY(unsigned int& x, unsigned int& y, float height, float angle) const;
00056     template<typename PointT>
00057     void addPoint(const PointT& p);
00058     void addVec3(const Vec3& p);
00059     template<typename PointCloudT>
00060     void addPoints(const PntInd& indices, const PointCloudT& pointCloud);
00061 
00062     float mCellSize;
00063     CylinderPatch::CylinderPatchPtr mCylinder;
00064 };
00065 
00066 template<typename PointCloudT>
00067 CylinderGridMap::CylinderGridMap(float cellSize, const CylinderPatch::CylinderPatchPtr& cylinderPatch, const PointCloudT& pointCloud)
00068     : BoolGrid(((cylinderPatch->getRadius()*2*M_PI)/cellSize)+1, (cylinderPatch->getHeight()/cellSize)+1, false),
00069     mCellSize(cellSize),
00070     mCylinder(cylinderPatch)
00071 {
00072     addPoints(mCylinder->getInliers(), pointCloud);
00073 }
00074 
00075 template<typename PointT>
00076 void CylinderGridMap::addPoint(const PointT& p)
00077 {
00078     Vec3 v(p.x, p.y, p.z);
00079     this->addVec3(v);
00080 }
00081 
00082 template<typename PointCloudT>
00083 void CylinderGridMap::addPoints(const PntInd& indices, const PointCloudT& pointCloud)
00084 {
00085     //ROS_INFO("CylinderGridMap: adding %zu, %zu", indices.size(), pointCloud.points.size());
00086     for (PntInd::const_iterator it = indices.begin(); it != indices.end(); ++it)
00087     {
00088         this->addPoint(pointCloud.points[*it]);
00089     }
00090 }
00091 
00092 #endif


structure_coloring_fkie
Author(s): Bastian Gaspers
autogenerated on Sun Jan 5 2014 11:38:09