Go to the documentation of this file.
18 #ifndef OPEN_KARTO_MAPPER_H
19 #define OPEN_KARTO_MAPPER_H
42 virtual void Info(
const std::string& ) {};
54 virtual void Debug(
const std::string& ) {};
122 Update(rPose1, rPose2, rCovariance);
234 inline const std::vector<Edge<T>*>&
GetEdges()
const
254 std::vector<Vertex<T>*> vertices;
450 typedef std::map<Name, std::vector<Vertex<T>*> >
VertexMap;
514 inline const std::vector<Edge<T>*>&
GetEdges()
const
572 std::queue<Vertex<T>*> toVisit;
573 std::set<Vertex<T>*> seenVertices;
574 std::vector<Vertex<T>*> validVertices;
576 toVisit.push(pStartVertex);
577 seenVertices.insert(pStartVertex);
584 if (pVisitor->
Visit(pNext))
587 validVertices.push_back(pNext);
595 if (seenVertices.find(pAdjacent) == seenVertices.end())
597 toVisit.push(pAdjacent);
598 seenVertices.insert(pAdjacent);
602 }
while (toVisit.empty() ==
false);
604 std::vector<T*> objects;
607 objects.push_back((*iter)->GetObject());
715 return m_pLoopScanMatcher;
781 Pose2 ComputeWeightedMean(
const Pose2Vector& rMeans,
const std::vector<Matrix3>& rCovariances)
const;
792 const Name& rSensorName,
924 assert(resolution != 0.0);
983 for (
kt_int32s j = -halfKernel; j <= halfKernel; j++)
992 for (
kt_int32s i = -halfKernel; i <= halfKernel; i++)
994 kt_int32s kernelArrayIndex = i + kernelConstant;
997 if (kernelValue > pGridAdr[i])
1000 pGridAdr[i] = kernelValue;
1017 :
Grid<
kt_int8u>(width + borderSize * 2, height + borderSize * 2)
1037 assert(resolution != 0.0);
1042 const kt_double MIN_SMEAR_DISTANCE_DEVIATION = 0.5 * resolution;
1043 const kt_double MAX_SMEAR_DISTANCE_DEVIATION = 10 * resolution;
1048 std::stringstream error;
1049 error <<
"Mapper Error: Smear deviation too small: Must be between "
1050 << MIN_SMEAR_DISTANCE_DEVIATION
1052 << MAX_SMEAR_DISTANCE_DEVIATION;
1053 throw std::runtime_error(error.str());
1065 throw std::runtime_error(
"Unable to allocate memory for kernel!");
1070 for (
kt_int32s i = -halfKernel; i <= halfKernel; i++)
1072 for (
kt_int32s j = -halfKernel; j <= halfKernel; j++)
1075 kt_double distanceFromMean = _hypot(i * resolution, j * resolution);
1077 kt_double distanceFromMean = hypot(i * resolution, j * resolution);
1084 int kernelArrayIndex = (i + halfKernel) +
m_KernelSize * (j + halfKernel);
1099 assert(resolution != 0.0);
1160 kt_bool doRefineMatch =
true);
1179 const Pose2& rSearchCenter,
1199 void ComputePositionalCovariance(
const Pose2& rBestPose,
1201 const Pose2& rSearchCenter,
1216 void ComputeAngularCovariance(
const Pose2& rBestPose,
1218 const Pose2& rSearchCenter,
1229 return m_pCorrelationGrid;
1269 : m_pMapper(pMapper)
1270 , m_pCorrelationGrid(NULL)
1271 , m_pSearchSpaceProbs(NULL)
1272 , m_pGridLookup(NULL)
1428 : m_RunningBufferMaximumSize(runningBufferMaximumSize)
1429 , m_RunningBufferMaximumDistance(runningBufferMaximumDistance)
1448 void RegisterSensor(
const Name& rSensorName);
1464 std::vector<Name> deviceNames;
1467 deviceNames.push_back(iter->first);
1480 RegisterSensor(rSensorName);
1482 return GetScanManager(rSensorName)->GetLastScan();
1491 GetScanManager(pScan)->SetLastScan(pScan);
1518 GetScanManager(pScan)->AddRunningScan(pScan);
1528 return GetScanManager(rSensorName)->GetScans();
1538 return GetScanManager(rSensorName)->GetRunningScans();
1569 if (m_ScanManagers.find(rSensorName) != m_ScanManagers.end())
1571 return m_ScanManagers[rSensorName];
1765 Mapper(
const std::string& rName);
1777 void Initialize(
kt_double rangeThreshold);
1839 virtual ScanMatcher* GetSequentialScanMatcher()
const;
1853 return m_pMapperSensorManager;
1863 return m_pGraph->TryCloseLoop(pScan, rSensorName);
1867 void InitializeParameters();
1886 void FireInfo(
const std::string& rInfo)
const;
1892 void FireDebug(
const std::string& rInfo)
const;
1898 void FireLoopClosureCheck(
const std::string& rInfo)
const;
1904 void FireBeginLoopClosure(
const std::string& rInfo)
const;
1910 void FireEndLoopClosure(
const std::string& rInfo)
const;
2135 bool getParamUseScanMatching();
2136 bool getParamUseScanBarycenter();
2137 double getParamMinimumTimeInterval();
2138 double getParamMinimumTravelDistance();
2139 double getParamMinimumTravelHeading();
2140 int getParamScanBufferSize();
2141 double getParamScanBufferMaximumScanDistance();
2142 double getParamLinkMatchMinimumResponseFine();
2143 double getParamLinkScanMaximumDistance();
2144 double getParamLoopSearchMaximumDistance();
2145 bool getParamDoLoopClosing();
2146 int getParamLoopMatchMinimumChainSize();
2147 double getParamLoopMatchMaximumVarianceCoarse();
2148 double getParamLoopMatchMinimumResponseCoarse();
2149 double getParamLoopMatchMinimumResponseFine();
2152 double getParamCorrelationSearchSpaceDimension();
2153 double getParamCorrelationSearchSpaceResolution();
2154 double getParamCorrelationSearchSpaceSmearDeviation();
2157 double getParamLoopSearchSpaceDimension();
2158 double getParamLoopSearchSpaceResolution();
2159 double getParamLoopSearchSpaceSmearDeviation();
2162 double getParamDistanceVariancePenalty();
2163 double getParamAngleVariancePenalty();
2164 double getParamFineSearchAngleOffset();
2165 double getParamCoarseSearchAngleOffset();
2166 double getParamCoarseAngleResolution();
2167 double getParamMinimumAnglePenalty();
2168 double getParamMinimumDistancePenalty();
2169 bool getParamUseResponseExpansion();
2173 void setParamUseScanMatching(
bool b);
2174 void setParamUseScanBarycenter(
bool b);
2175 void setParamMinimumTimeInterval(
double d);
2176 void setParamMinimumTravelDistance(
double d);
2177 void setParamMinimumTravelHeading(
double d);
2178 void setParamScanBufferSize(
int i);
2179 void setParamScanBufferMaximumScanDistance(
double d);
2180 void setParamLinkMatchMinimumResponseFine(
double d);
2181 void setParamLinkScanMaximumDistance(
double d);
2182 void setParamLoopSearchMaximumDistance(
double d);
2183 void setParamDoLoopClosing(
bool b);
2184 void setParamLoopMatchMinimumChainSize(
int i);
2185 void setParamLoopMatchMaximumVarianceCoarse(
double d);
2186 void setParamLoopMatchMinimumResponseCoarse(
double d);
2187 void setParamLoopMatchMinimumResponseFine(
double d);
2190 void setParamCorrelationSearchSpaceDimension(
double d);
2191 void setParamCorrelationSearchSpaceResolution(
double d);
2192 void setParamCorrelationSearchSpaceSmearDeviation(
double d);
2195 void setParamLoopSearchSpaceDimension(
double d);
2196 void setParamLoopSearchSpaceResolution(
double d);
2197 void setParamLoopSearchSpaceSmearDeviation(
double d);
2200 void setParamDistanceVariancePenalty(
double d);
2201 void setParamAngleVariancePenalty(
double d);
2202 void setParamFineSearchAngleOffset(
double d);
2203 void setParamCoarseSearchAngleOffset(
double d);
2204 void setParamCoarseAngleResolution(
double d);
2205 void setParamMinimumAnglePenalty(
double d);
2206 void setParamMinimumDistancePenalty(
double d);
2207 void setParamUseResponseExpansion(
bool b);
2211 #endif // OPEN_KARTO_MAPPER_H
#define const_forEach(listtype, list)
kt_double Round(kt_double value)
GridIndexLookup< kt_int8u > * m_pGridLookup
Parameter< kt_double > * m_pAngleVariancePenalty
virtual void AddConstraint(Edge< LocalizedRangeScan > *)
const kt_double KT_TOLERANCE
virtual void RemoveConstraint(kt_int32s, kt_int32s)
Parameter< kt_bool > * m_pDoLoopClosing
std::vector< Edge< T > * > m_Edges
std::vector< Pose2 > Pose2Vector
virtual ~BreadthFirstTraversal()
virtual kt_bool Visit(Vertex< T > *pVertex)=0
Edge(Vertex< T > *pSource, Vertex< T > *pTarget)
void SetROI(const Rectangle2< kt_int32s > &roi)
ScanManager(kt_int32u runningBufferMaximumSize, kt_double runningBufferMaximumDistance)
Pose2 GetReferencePose(kt_bool useBarycenter) const
LocalizedRangeScan * GetLastScan()
const Vector2< kt_double > & GetPosition() const
ScanMatcher * GetLoopScanMatcher() const
void AddEdge(Edge< T > *pEdge)
virtual std::vector< T * > Traverse(Vertex< T > *pStartVertex, Visitor< T > *pVisitor)
std::vector< Edge< T > * > m_Edges
Parameter< kt_double > * m_pLoopSearchMaximumDistance
void Update(const Pose2 &rPose1, const Pose2 &rPose2, const Matrix3 &rCovariance)
MapperSensorManager(kt_int32u runningBufferMaximumSize, kt_double runningBufferMaximumDistance)
Matrix3 Transpose() const
void SetScale(kt_double scale)
BreadthFirstTraversal(Graph< T > *pGraph)
kt_int8u * GetDataPointer()
void AddScan(LocalizedRangeScan *pScan, kt_int32s uniqueId)
void FromAxisAngle(kt_double x, kt_double y, kt_double z, const kt_double radians)
NearScanVisitor(LocalizedRangeScan *pScan, kt_double maxDistance, kt_bool useScanBarycenter)
kt_bool TryCloseLoop(LocalizedRangeScan *pScan, const Name &rSensorName)
const Matrix3 & GetCovariance()
virtual void EndLoopClosure(const std::string &)
Grid< kt_double > * m_pSearchSpaceProbs
Parameter< kt_double > * m_pScanBufferMaximumScanDistance
kt_double m_MaxDistanceSquared
Parameter< kt_double > * m_pMinimumTimeInterval
virtual kt_int32s GridIndex(const Vector2< kt_int32s > &rGrid, kt_bool boundaryCheck=true) const
LocalizedRangeScanVector & GetRunningScans()
Rectangle2< kt_int32s > m_Roi
void SetUniqueId(kt_int32u uniqueId)
std::vector< std::pair< kt_int32s, Pose2 > > IdPoseVector
Vertex< LocalizedRangeScan > * GetVertex(LocalizedRangeScan *pScan)
virtual void LoopClosureCheck(const std::string &)
CoordinateConverter * GetCoordinateConverter() const
Parameter< kt_double > * m_pLoopMatchMaximumVarianceCoarse
GraphTraversal< LocalizedRangeScan > * m_pTraversal
kt_int32s GetStateId() const
CorrelationGrid * GetCorrelationGrid() const
GraphTraversal(Graph< T > *pGraph)
CorrelationGrid * m_pCorrelationGrid
ScanManagerMap m_ScanManagers
LocalizedRangeScan * GetLastScan(const Name &rSensorName)
MapperSensorManager * m_pMapperSensorManager
std::vector< LocalizedRangeScan * > LocalizedRangeScanVector
std::vector< Name > GetSensorNames()
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)
Parameter< kt_double > * m_pMinimumTravelDistance
kt_bool m_UseScanBarycenter
LocalizedRangeScan * m_pLastScan
const VertexMap & GetVertices() const
virtual void RemoveNode(kt_int32s)
std::vector< Vertex< T > * > GetAdjacentVertices() const
virtual ~GraphTraversal()
Parameter< kt_double > * m_pLoopSearchSpaceDimension
void SetStateId(kt_int32s stateId)
virtual void Info(const std::string &)
void AddEdge(Edge< T > *pEdge)
kt_int32u m_RunningBufferMaximumSize
Parameter< kt_double > * m_pLinkScanMaximumDistance
void SetLastScan(LocalizedRangeScan *pScan)
Parameter< kt_int32u > * m_pLoopMatchMinimumChainSize
virtual void CalculateKernel()
Parameter< kt_double > * m_pLoopSearchSpaceSmearDeviation
Parameter< kt_double > * m_pFineSearchAngleOffset
MapperSensorManager * GetMapperSensorManager() const
std::map< Name, ScanManager * > ScanManagerMap
const std::vector< Edge< T > * > & GetEdges() const
kt_bool InRange(const T &value, const T &a, const T &b)
std::vector< Vector2< kt_double > > PointVectorDouble
ScanManager * GetScanManager(const Name &rSensorName)
LinkInfo(const Pose2 &rPose1, const Pose2 &rPose2, const Matrix3 &rCovariance)
virtual const IdPoseVector & GetCorrections() const =0
Parameter< kt_double > * m_pLinkMatchMinimumResponseFine
virtual void BeginLoopClosure(const std::string &)
ScanMatcher * m_pSequentialScanMatcher
#define forEachAs(listtype, list, iter)
const Rectangle2< kt_int32s > & GetROI() const
Parameter< kt_double > * m_pCorrelationSearchSpaceResolution
Parameter< kt_double > * m_pCoarseSearchAngleOffset
LocalizedRangeScan * GetScan(kt_int32s id)
Vertex< T > * GetTarget() const
LocalizedRangeScanVector m_RunningScans
Parameter< kt_double > * m_pMinimumAnglePenalty
virtual std::vector< T * > Traverse(Vertex< T > *pStartVertex, Visitor< T > *pVisitor)=0
void SetLabel(EdgeLabel *pLabel)
Parameter< kt_int32u > * m_pScanBufferSize
virtual void Debug(const std::string &)
Parameter< kt_double > * m_pCoarseAngleResolution
virtual ~CorrelationGrid()
virtual ~MapperSensorManager()
Parameter< kt_bool > * m_pUseScanBarycenter
Parameter< kt_bool > * m_pUseScanMatching
Parameter< kt_double > * m_pLoopMatchMinimumResponseCoarse
void AddRunningScan(LocalizedRangeScan *pScan)
void SmearPoint(const Vector2< kt_int32s > &rGridPoint)
Parameter< kt_double > * m_pDistanceVariancePenalty
Parameter< kt_double > * m_pCorrelationSearchSpaceSmearDeviation
Parameter< kt_double > * m_pLoopMatchMinimumResponseFine
Parameter< kt_double > * m_pMinimumTravelHeading
kt_double m_RunningBufferMaximumDistance
void SetUseScanMatching(kt_bool val)
std::vector< LocalizedRangeScan * > m_Scans
#define forEach(listtype, list)
LocalizedRangeScanVector & GetRunningScans(const Name &rSensorName)
kt_double m_RunningBufferMaximumDistance
Parameter< kt_double > * m_pMinimumDistancePenalty
void AddVertex(const Name &rName, Vertex< T > *pVertex)
Parameter< kt_double > * m_pLoopSearchSpaceResolution
kt_bool IsUpTo(const T &value, const T &maximum)
void AddRunningScan(LocalizedRangeScan *pScan)
LocalizedRangeScanVector & GetScans()
void SetLastScan(LocalizedRangeScan *pScan)
ScanSolver * m_pScanOptimizer
LocalizedRangeScanVector & GetScans(const Name &rSensorName)
ScanMatcher * m_pLoopScanMatcher
std::vector< MapperListener * > m_Listeners
virtual kt_bool Visit(Vertex< LocalizedRangeScan > *pVertex)
kt_double m_SmearDeviation
Vertex< T > * GetSource() const
LocalizedRangeScanVector m_Scans
const std::vector< Edge< T > * > & GetEdges() const
kt_int32u m_RunningBufferMaximumSize
std::map< Name, std::vector< Vertex< T > * > > VertexMap
ScanManager * GetScanManager(LocalizedRangeScan *pScan)
virtual void AddNode(Vertex< LocalizedRangeScan > *)
static kt_int32s GetHalfKernelSize(kt_double smearDeviation, kt_double resolution)
Parameter< kt_bool > * m_pUseResponseExpansion
kt_double SquaredDistance(const Vector2 &rOther) const
virtual kt_int32s GridIndex(const Vector2< kt_int32s > &rGrid, kt_bool boundaryCheck=true) const
kt_double GetHeading() const
ScanMatcher(Mapper *pMapper)
Parameter< kt_double > * m_pCorrelationSearchSpaceDimension
const Name & GetSensorName() const
const Pose2 & GetPoseDifference()
open_karto
Author(s):
autogenerated on Tue Jul 23 2024 02:26:00