Go to the documentation of this file.
20 #ifndef __OpenKarto_Mapper_h__
21 #define __OpenKarto_Mapper_h__
24 #include <tbb/mutex.h>
25 #include <tbb/parallel_for.h>
26 #include <tbb/blocked_range.h>
27 #include <tbb/blocked_range3d.h>
130 Update(rPose1, rPose2, rCovariance);
637 return m_pLoopScanMatcher;
840 assert(resolution != 0.0);
899 for (
kt_int32s j = -halfKernel; j <= halfKernel; j++)
922 :
Grid<
kt_int8u>(width + borderSize * 2, height + borderSize * 2)
942 assert(resolution != 0.0);
947 const kt_double MIN_SMEAR_DISTANCE_DEVIATION = 0.5 * resolution;
948 const kt_double MAX_SMEAR_DISTANCE_DEVIATION = 10 * resolution;
954 error <<
"Mapper Error: Smear deviation too small: Must be between " << MIN_SMEAR_DISTANCE_DEVIATION <<
" and " << MAX_SMEAR_DISTANCE_DEVIATION;
967 throw Exception(
"Unable to allocate memory for kernel!");
972 for (
kt_int32s i = -halfKernel; i <= halfKernel; i++)
974 for (
kt_int32s j = -halfKernel; j <= halfKernel; j++)
977 kt_double distanceFromMean = _hypot(i * resolution, j * resolution);
979 kt_double distanceFromMean = hypot(i * resolution, j * resolution);
986 int kernelArrayIndex = (i + halfKernel) +
m_KernelSize * (j + halfKernel);
1001 assert(resolution != 0.0);
1014 for (i = -halfKernel; i <= halfKernel; i++)
1016 kernelArrayIndex = i + kernelConstant;
1018 kernelValue =
m_pKernel[kernelArrayIndex];
1019 if (kernelValue > pGridAdr[i])
1022 pGridAdr[i] = kernelValue;
1143 const Vector2d& rSearchSpaceOffset,
const Vector2d& rSearchSpaceResolution,
1217 : m_pOpenMapper(pOpenMapper)
1218 , m_pScanMatcherGridSet(NULL)
1219 , m_pScanMatcherGridSetBank(NULL)
1261 void RegisterSensor(
const Identifier& rSensorName);
1294 void ClearLastScan(
const Identifier& rSensorName);
1591 return m_MultiThreaded;
1599 void Initialize(
kt_double rangeThreshold);
1668 return m_pMapperSensorManager;
1679 return m_pGraph->TryCloseLoop(pScan, rSensorName);
1696 void InitializeParameters();
1716 return m_Initialized;
1795 #endif // __OpenKarto_Mapper_h__
kt_double Round(kt_double value)
virtual ~ScanMatcherGridSet()
virtual void RemoveConstraint(kt_int32s, kt_int32s)
virtual List< T > Traverse(Vertex< T > *pStartVertex, Visitor< T > *pVisitor)=0
kt_bool IsMultiThreaded()
Parameter< kt_double > * m_pCorrelationSearchSpaceSmearDeviation
virtual kt_bool Visit(Vertex< T > *pVertex)=0
Edge(Vertex< T > *pSource, Vertex< T > *pTarget)
const String & ToString() const
void SetROI(const Rectangle2< kt_int32s > &roi)
ScanMatcher * GetLoopScanMatcher() const
void AddEdge(Edge< T > *pEdge)
void SmearInternal(kt_int32s halfKernel, kt_int32s kernelConstant, kt_int8u *pGridAdr)
ScanMatcher(OpenMapper *pOpenMapper)
List< Edge< T > * > m_Edges
#define karto_const_forEach(listtype, list)
Vertex< LocalizedObjectPtr > * GetVertex(LocalizedObject *pObject)
Parameter< kt_double > * m_pCoarseSearchAngleOffset
virtual void AddConstraint(Edge< LocalizedObjectPtr > *)
Parameter< kt_double > * m_pScanBufferMaximumScanDistance
void Update(const Pose2 &rPose1, const Pose2 &rPose2, const Matrix3 &rCovariance)
void AddVertex(Vertex< T > *pVertex)
Matrix3 Transpose() const
void SetScale(kt_double scale)
kt_int8u * GetDataPointer()
GridIndexLookup< kt_int8u > * m_pGridLookup
OpenMapper * m_pOpenMapper
List< Vertex< T > * > GetAdjacentVertices() const
virtual void ScanMatchingEnd(LocalizedLaserScan *pScan)
void FromAxisAngle(kt_double x, kt_double y, kt_double z, const kt_double radians)
const Matrix3 & GetCovariance()
ScanMatcherGridSetBank * m_pScanMatcherGridSetBank
SmartPointer< CorrelationGrid > m_pCorrelationGrid
virtual void ScanMatched(LocalizedLaserScan *pScan)
Parameter< kt_bool > * m_pUseScanBarycenter
const EdgeList & GetEdges() const
BasicEvent< MapperEventArguments > PreLoopClosed
GraphTraversal< LocalizedObjectPtr > * m_pTraversal
BasicEvent< MapperEventArguments > Message
BasicEvent< MapperEventArguments > PostLoopClosed
virtual ~MapperEventArguments()
Rectangle2< kt_int32s > m_Roi
virtual kt_int32s GridIndex(const Vector2i &rGrid, kt_bool boundaryCheck=true) const
Parameter< kt_double > * m_pAngleVariancePenalty
Parameter< kt_bool > * m_pUseResponseExpansion
List< Pair< kt_int32s, Pose2 > > IdPoseVector
CoordinateConverter * GetCoordinateConverter() const
OpenMapper * m_pOpenMapper
Parameter< kt_double > * m_pCorrelationSearchSpaceResolution
GraphTraversal(Graph< T > *pGraph)
Parameter< kt_double > * m_pLoopSearchMaximumDistance
const Identifier & GetSensorIdentifier() const
Parameter< kt_bool > * m_pUseScanMatching
CorrelationGrid(kt_int32u width, kt_int32u height, kt_int32u borderSize, kt_double resolution, kt_double smearDeviation)
kt_double GetResolution() const
static CorrelationGrid * CreateGrid(kt_int32s width, kt_int32s height, kt_double resolution, kt_double smearDeviation)
virtual void RemoveNode(kt_int32s)
virtual ~GraphTraversal()
const String & GetEventMessage() const
void AddEdge(Edge< T > *pEdge)
Parameter< kt_double > * m_pLoopSearchSpaceResolution
Parameter< kt_double > * m_pMinimumDistancePenalty
Parameter< kt_double > * m_pCorrelationSearchSpaceDimension
virtual void CalculateKernel()
Parameter< kt_int32u > * m_pScanBufferSize
T GetVertexObject() const
Parameter< kt_double > * m_pLinkMatchMinimumResponseFine
Vector2< kt_int32s > Vector2i
List< Vertex< T > * > VertexList
kt_bool InRange(const T &value, const T &a, const T &b)
Parameter< kt_double > * m_pLinkScanMaximumDistance
LinkInfo(const Pose2 &rPose1, const Pose2 &rPose2, const Matrix3 &rCovariance)
SensorDataManager * GetSensorDataManager(LocalizedObject *pObject)
Parameter< kt_double > * m_pCoarseAngleResolution
virtual const IdPoseVector & GetCorrections() const =0
const VertexList & GetVertices() const
const Rectangle2< kt_int32s > & GetROI() const
List< Edge< T > * > EdgeList
virtual void Add(const T &rValue)
Vertex< T > * GetTarget() const
Parameter< kt_double > * m_pLoopMatchMinimumResponseCoarse
Parameter< kt_double > * m_pFineSearchAngleOffset
MapperSensorManagerPrivate * m_pMapperSensorManagerPrivate
kt_int32s GetUniqueId() const
void SetLabel(EdgeLabel *pLabel)
SmartPointer< ScanMatcherGridSet > m_pScanMatcherGridSet
void SmearPoint(const Vector2i &rGridPoint)
kt_bool TryCloseLoop(LocalizedLaserScan *pScan, const Identifier &rSensorName)
Parameter< kt_double > * m_pLoopMatchMaximumVarianceCoarse
MapperSensorManager * GetMapperSensorManager() const
MapperEventArguments(const String &rMessage)
SmartPointer< ScanSolver > m_pScanSolver
Parameter< kt_double > * m_pMinimumTravelHeading
SmartPointer< Grid< kt_double > > m_pSearchSpaceProbs
ScanMatcher * m_pSequentialScanMatcher
Parameter< kt_double > * m_pMinimumAnglePenalty
Parameter< kt_double > * m_pLoopSearchSpaceSmearDeviation
virtual void AddNode(Vertex< LocalizedObjectPtr > *)
Parameter< kt_int32u > * m_pLoopMatchMinimumChainSize
const List< Edge< T > * > & GetEdges() const
Parameter< kt_double > * m_pLoopSearchSpaceDimension
BasicEvent< EventArguments > ScansUpdated
kt_bool IsUpTo(const T &value, const T &maximum)
Parameter< kt_double > * m_pMinimumTravelDistance
virtual kt_int32s GridIndex(const Vector2i &rGrid, kt_bool boundaryCheck=true) const
ScanMatcher * m_pLoopScanMatcher
kt_double m_SmearDeviation
Vertex< T > * GetSource() const
MapperSensorManager * m_pMapperSensorManager
Parameter< kt_double > * m_pLoopMatchMinimumResponseFine
static kt_int32s GetHalfKernelSize(kt_double smearDeviation, kt_double resolution)
kt_double GetHeading() const
ScanMatcherGridSet(CorrelationGrid *pCorrelationGrid, Grid< kt_double > *pSearchSpaceProbs, GridIndexLookup< kt_int8u > *pGridLookup)
Parameter< kt_double > * m_pDistanceVariancePenalty
const Pose2 & GetPoseDifference()
nav2d_karto
Author(s): Sebastian Kasperski
autogenerated on Wed Mar 2 2022 00:37:22