18 #ifndef karto_sdk_MAPPER_H 19 #define karto_sdk_MAPPER_H 23 #include <unordered_map> 28 #include "tbb/parallel_for.h" 29 #include "tbb/blocked_range.h" 52 virtual void Info(
const std::string& ) {};
54 template<
class Archive>
55 void serialize(Archive &ar,
const unsigned int version)
69 virtual void Debug(
const std::string& ) {};
70 friend class boost::serialization::access;
71 template<
class Archive>
72 void serialize(Archive &ar,
const unsigned int version)
98 template<
class Archive>
99 void serialize(Archive &ar,
const unsigned int version)
127 friend class boost::serialization::access;
128 template<
class Archive>
155 Update(rPose1, rPose2, rCovariance);
185 m_Covariance = rotationMatrix * rCovariance * rotationMatrix.
Transpose();
212 return m_PoseDifference;
230 friend class boost::serialization::access;
231 template<
class Archive>
234 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(
EdgeLabel);
235 ar & BOOST_SERIALIZATION_NVP(m_Pose1);
236 ar & BOOST_SERIALIZATION_NVP(m_Pose2);
237 ar & BOOST_SERIALIZATION_NVP(m_PoseDifference);
238 ar & BOOST_SERIALIZATION_NVP(m_Covariance);
263 : m_pObject(
NULL), m_Score(1.0)
267 : m_pObject(pObject), m_Score(1.0)
282 inline const std::vector<Edge<T>*>&
GetEdges()
const 293 m_Edges.erase(m_Edges.begin() + idx);
338 std::vector<Vertex<T>*> vertices;
371 m_Edges.push_back(pEdge);
378 friend class boost::serialization::access;
379 template<
class Archive>
382 ar & BOOST_SERIALIZATION_NVP(m_pObject);
383 ar & BOOST_SERIALIZATION_NVP(m_Edges);
384 ar & BOOST_SERIALIZATION_NVP(m_Score);
415 m_pSource->AddEdge(
this);
416 m_pTarget->AddEdge(
this);
427 if (m_pLabel !=
NULL)
476 friend class boost::serialization::access;
477 template<
class Archive>
480 ar & BOOST_SERIALIZATION_NVP(m_pSource);
481 ar & BOOST_SERIALIZATION_NVP(m_pTarget);
482 ar & BOOST_SERIALIZATION_NVP(m_pLabel);
503 friend class boost::serialization::access;
504 template<
class Archive>
538 virtual std::vector<T*> TraverseForScans(
Vertex<T>* pStartVertex,
Visitor<T>* pVisitor) = 0;
539 virtual std::vector<Vertex<T>*> TraverseForVertices(
Vertex<T>* pStartVertex,
Visitor<T>* pVisitor) = 0;
544 friend class boost::serialization::access;
545 template<
class Archive>
548 ar & BOOST_SERIALIZATION_NVP(m_pGraph);
567 typedef std::map<Name, std::map<int, Vertex<T>*> >
VertexMap;
593 m_Vertices[rName].insert({pVertex->
GetObject()->GetStateId(), pVertex});
603 std::map<int, Vertex<LocalizedRangeScan>* >::iterator it = m_Vertices[rName].find(idx);
604 if (it != m_Vertices[rName].end())
607 m_Vertices[rName].erase(it);
611 std::cout <<
"RemoveVertex: Failed to remove vertex " << idx
612 <<
" because it doesnt exist in m_Vertices." << std::endl;
622 m_Edges.push_back(pEdge);
632 m_Edges.erase(m_Edges.begin() + idx);
641 forEachAs(
typename VertexMap, &m_Vertices, indexIter)
644 typename std::map<int, Vertex<T>*>::iterator iter;
645 for (iter = indexIter->second.begin(); iter != indexIter->second.end(); ++iter)
648 iter->second =
nullptr;
665 inline const std::vector<Edge<T>*>&
GetEdges()
const 692 friend class boost::serialization::access;
693 template<
class Archive>
696 std::cout <<
"Graph <- m_Edges; ";
697 ar & BOOST_SERIALIZATION_NVP(m_Edges);
698 std::cout <<
"Graph <- m_Vertices\n";
699 ar & BOOST_SERIALIZATION_NVP(m_Vertices);
794 std::vector<Vertex<LocalizedRangeScan>*> FindNearByVertices(
Name name,
const Pose2 refPose,
kt_double maxDistance);
808 return m_pLoopScanMatcher;
820 std::map<int, Vertex<LocalizedRangeScan>* >::iterator it = m_Vertices[rName].find(pScan->
GetStateId());
821 if (it != m_Vertices[rName].end())
827 std::cout <<
"GetVertex: Failed to get vertex, idx " << pScan->
GetStateId() <<
828 " is not in m_Vertices." << std::endl;
885 Pose2 ComputeWeightedMean(
const Pose2Vector& rMeans,
const std::vector<Matrix3>& rCovariances)
const;
896 const Name& rSensorName,
918 friend class boost::serialization::access;
919 template<
class Archive>
922 std::cout <<
"MapperGraph <- Graph; ";
924 std::cout <<
"MapperGraph <- m_pMapper; ";
925 ar & BOOST_SERIALIZATION_NVP(m_pMapper);
926 std::cout <<
"MapperGraph <- m_pLoopScanMatcher; ";
927 ar & BOOST_SERIALIZATION_NVP(m_pLoopScanMatcher);
928 std::cout <<
"MapperGraph <- m_pTraversal\n";
929 ar & BOOST_SERIALIZATION_NVP(m_pTraversal);
967 virtual void Compute() = 0;
973 virtual const IdPoseVector& GetCorrections()
const = 0;
1020 virtual std::unordered_map<int, Eigen::Vector3d>*
getGraph()
1022 std::cout <<
"getGraph method not implemented for this solver type. Graph visualization unavailable." << std::endl;
1028 virtual void ModifyNode(
const int& unique_id, Eigen::Vector3d pose)
1030 std::cout <<
"ModifyNode method not implemented for this solver type. Manual loop closure unavailable." << std::endl;
1037 std::cout <<
"GetNodeOrientation method not implemented for this solver type." << std::endl;
1040 friend class boost::serialization::access;
1041 template<
class Archive>
1046 BOOST_SERIALIZATION_ASSUME_ABSTRACT(
ScanSolver)
1064 delete [] m_pKernel;
1086 assert(resolution != 0.0);
1089 kt_int32u borderSize = GetHalfKernelSize(smearDeviation, resolution) + 1;
1134 assert(m_pKernel !=
NULL);
1136 int gridIndex = GridIndex(rGridPoint);
1142 kt_int32s halfKernel = m_KernelSize / 2;
1145 for (
kt_int32s j = -halfKernel; j <= halfKernel; j++)
1149 kt_int32s kernelConstant = (halfKernel) + m_KernelSize * (j + halfKernel);
1154 for (
kt_int32s i = -halfKernel; i <= halfKernel; i++)
1156 kt_int32s kernelArrayIndex = i + kernelConstant;
1158 kt_int8u kernelValue = m_pKernel[kernelArrayIndex];
1159 if (kernelValue > pGridAdr[i])
1162 pGridAdr[i] = kernelValue;
1179 :
Grid<
kt_int8u>(width + borderSize * 2, height + borderSize * 2)
1180 , m_SmearDeviation(smearDeviation)
1183 GetCoordinateConverter()->SetScale(1.0 / resolution);
1199 assert(resolution != 0.0);
1200 assert(m_SmearDeviation != 0.0);
1204 const kt_double MIN_SMEAR_DISTANCE_DEVIATION = 0.5 * resolution;
1205 const kt_double MAX_SMEAR_DISTANCE_DEVIATION = 10 * resolution;
1208 if (!
math::InRange(m_SmearDeviation, MIN_SMEAR_DISTANCE_DEVIATION, MAX_SMEAR_DISTANCE_DEVIATION))
1210 std::stringstream error;
1211 error <<
"Mapper Error: Smear deviation too small: Must be between " 1212 << MIN_SMEAR_DISTANCE_DEVIATION
1214 << MAX_SMEAR_DISTANCE_DEVIATION;
1215 throw std::runtime_error(error.str());
1221 m_KernelSize = 2 * GetHalfKernelSize(m_SmearDeviation, resolution) + 1;
1224 m_pKernel =
new kt_int8u[m_KernelSize * m_KernelSize];
1225 if (m_pKernel ==
NULL)
1227 throw std::runtime_error(
"Unable to allocate memory for kernel!");
1231 kt_int32s halfKernel = m_KernelSize / 2;
1232 for (
kt_int32s i = -halfKernel; i <= halfKernel; i++)
1234 for (
kt_int32s j = -halfKernel; j <= halfKernel; j++)
1237 kt_double distanceFromMean = _hypot(i * resolution, j * resolution);
1239 kt_double distanceFromMean =
hypot(i * resolution, j * resolution);
1241 kt_double z =
exp(-0.5 *
pow(distanceFromMean / m_SmearDeviation, 2));
1244 assert(
math::IsUpTo(kernelValue, static_cast<kt_int32u>(255)));
1246 int kernelArrayIndex = (i + halfKernel) + m_KernelSize * (j + halfKernel);
1247 m_pKernel[kernelArrayIndex] =
static_cast<kt_int8u>(kernelValue);
1261 assert(resolution != 0.0);
1284 friend class boost::serialization::access;
1285 template<
class Archive>
1289 ar & BOOST_SERIALIZATION_NVP(m_SmearDeviation);
1290 ar & BOOST_SERIALIZATION_NVP(m_KernelSize);
1291 if (Archive::is_loading::value)
1293 m_pKernel =
new kt_int8u[m_KernelSize * m_KernelSize];
1295 ar & boost::serialization::make_array<kt_int8u>(m_pKernel, m_KernelSize * m_KernelSize);
1296 ar & BOOST_SERIALIZATION_NVP(m_Roi);
1322 void operator() (
const kt_double& y)
const;
1343 template<
class T = LocalizedRangeScanVector>
1345 const T& rBaseScans,
1348 kt_bool doRefineMatch =
true);
1367 const Pose2& rSearchCenter,
1387 void ComputePositionalCovariance(
const Pose2& rBestPose,
1389 const Pose2& rSearchCenter,
1404 void ComputeAngularCovariance(
const Pose2& rBestPose,
1406 const Pose2& rSearchCenter,
1417 return m_pCorrelationGrid;
1458 : m_pMapper(pMapper)
1459 , m_pCorrelationGrid(
NULL)
1460 , m_pSearchSpaceProbs(
NULL)
1461 , m_pGridLookup(
NULL)
1462 , m_doPenalize(false)
1483 friend class boost::serialization::access;
1484 template<
class Archive>
1487 ar & BOOST_SERIALIZATION_NVP(m_pMapper);
1488 ar & BOOST_SERIALIZATION_NVP(m_pCorrelationGrid);
1489 ar & BOOST_SERIALIZATION_NVP(m_pSearchSpaceProbs);
1490 ar & BOOST_SERIALIZATION_NVP(m_pGridLookup);
1491 ar & BOOST_SERIALIZATION_NVP(m_xPoses);
1492 ar & BOOST_SERIALIZATION_NVP(m_yPoses);
1493 ar & BOOST_SERIALIZATION_NVP(m_rSearchCenter);
1494 ar & BOOST_SERIALIZATION_NVP(m_searchAngleResolution);
1495 ar & BOOST_SERIALIZATION_NVP(m_nAngles);
1496 ar & BOOST_SERIALIZATION_NVP(m_searchAngleResolution);;
1497 ar & BOOST_SERIALIZATION_NVP(m_doPenalize);
1498 kt_int32u poseResponseSize =
static_cast<kt_int32u>(m_xPoses.size() * m_yPoses.size() * m_nAngles);
1499 if (Archive::is_loading::value)
1501 m_pPoseResponse =
new std::pair<kt_double, Pose2>[poseResponseSize];
1503 ar & boost::serialization::make_array<std::pair<kt_double, Pose2>>(m_pPoseResponse, poseResponseSize);
1526 : m_RunningBufferMaximumSize(runningBufferMaximumSize)
1527 , m_RunningBufferMaximumDistance(runningBufferMaximumDistance)
1549 void RegisterSensor(
const Name& rSensorName);
1565 std::vector<Name> deviceNames;
1568 deviceNames.push_back(iter->first);
1594 std::map<int, LocalizedRangeScan*>::iterator it = m_Scans.find(
id);
1595 if (it != m_Scans.end())
1601 std::cout <<
"GetScan: id " <<
id <<
1602 " does not exist in m_scans, cannot retrieve it." << std::endl;
1642 void ClearRunningScans(
const Name& rSensorName);
1647 kt_int32u GetRunningScanBufferSize(
const Name& rSensorName);
1677 if (m_ScanManagers.find(rSensorName) != m_ScanManagers.end())
1679 return m_ScanManagers[rSensorName];
1685 friend class boost::serialization::access;
1686 template<
class Archive>
1689 std::cout <<
"MapperSensorManager <- m_ScanManagers; ";
1690 ar & BOOST_SERIALIZATION_NVP(m_ScanManagers);
1691 ar & BOOST_SERIALIZATION_NVP(m_RunningBufferMaximumSize);
1692 ar & BOOST_SERIALIZATION_NVP(m_RunningBufferMaximumDistance);
1693 ar & BOOST_SERIALIZATION_NVP(m_NextScanId);
1694 std::cout <<
"MapperSensorManager <- m_Scans\n";
1695 ar & BOOST_SERIALIZATION_NVP(m_Scans);
1897 Mapper(
const std::string& rName);
1909 void Initialize(
kt_double rangeThreshold);
1915 void SaveToFile(
const std::string& filename);
1921 void LoadFromFile(
const std::string& filename);
1927 virtual void Reset();
1996 virtual ScanMatcher* GetSequentialScanMatcher()
const;
2010 return m_pMapperSensorManager;
2020 return m_pGraph->TryCloseLoop(pScan, rSensorName);
2025 m_pGraph->CorrectPoses();
2029 void InitializeParameters();
2048 void FireInfo(
const std::string& rInfo)
const;
2054 void FireDebug(
const std::string& rInfo)
const;
2060 void FireLoopClosureCheck(
const std::string& rInfo)
const;
2066 void FireBeginLoopClosure(
const std::string& rInfo)
const;
2072 void FireEndLoopClosure(
const std::string& rInfo)
const;
2293 friend class boost::serialization::access;
2294 template<
class Archive>
2297 std::cout <<
"Mapper <- Module\n";
2298 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(
Module);
2299 ar & BOOST_SERIALIZATION_NVP(m_Initialized);
2300 std::cout <<
"Mapper <- m_pSequentialScanMatcher\n";
2301 ar & BOOST_SERIALIZATION_NVP(m_pSequentialScanMatcher);
2302 std::cout <<
"Mapper <- m_pGraph\n";
2303 ar & BOOST_SERIALIZATION_NVP(m_pGraph);
2304 std::cout <<
"Mapper <- m_pMapperSensorManager\n";
2305 ar & BOOST_SERIALIZATION_NVP(m_pMapperSensorManager);
2306 std::cout <<
"Mapper <- m_Listeners\n";
2307 ar & BOOST_SERIALIZATION_NVP(m_Listeners);
2308 ar & BOOST_SERIALIZATION_NVP(m_pUseScanMatching);
2309 ar & BOOST_SERIALIZATION_NVP(m_pUseScanBarycenter);
2310 ar & BOOST_SERIALIZATION_NVP(m_pMinimumTimeInterval);
2311 ar & BOOST_SERIALIZATION_NVP(m_pMinimumTravelDistance);
2312 ar & BOOST_SERIALIZATION_NVP(m_pMinimumTravelHeading);
2313 ar & BOOST_SERIALIZATION_NVP(m_pScanBufferSize);
2314 ar & BOOST_SERIALIZATION_NVP(m_pScanBufferMaximumScanDistance);
2315 ar & BOOST_SERIALIZATION_NVP(m_pLinkMatchMinimumResponseFine);
2316 ar & BOOST_SERIALIZATION_NVP(m_pLinkScanMaximumDistance);
2317 ar & BOOST_SERIALIZATION_NVP(m_pDoLoopClosing);
2318 ar & BOOST_SERIALIZATION_NVP(m_pLoopSearchMaximumDistance);
2319 ar & BOOST_SERIALIZATION_NVP(m_pLoopMatchMinimumChainSize);
2320 ar & BOOST_SERIALIZATION_NVP(m_pLoopMatchMaximumVarianceCoarse);
2321 ar & BOOST_SERIALIZATION_NVP(m_pLoopMatchMinimumResponseCoarse);
2322 ar & BOOST_SERIALIZATION_NVP(m_pLoopMatchMinimumResponseFine);
2323 ar & BOOST_SERIALIZATION_NVP(m_pCorrelationSearchSpaceDimension);
2324 ar & BOOST_SERIALIZATION_NVP(m_pCorrelationSearchSpaceResolution);
2325 ar & BOOST_SERIALIZATION_NVP(m_pCorrelationSearchSpaceSmearDeviation);
2326 ar & BOOST_SERIALIZATION_NVP(m_pLoopSearchSpaceDimension);
2327 ar & BOOST_SERIALIZATION_NVP(m_pLoopSearchSpaceResolution);
2328 ar & BOOST_SERIALIZATION_NVP(m_pLoopSearchSpaceSmearDeviation);
2329 ar & BOOST_SERIALIZATION_NVP(m_pDistanceVariancePenalty);
2330 ar & BOOST_SERIALIZATION_NVP(m_pAngleVariancePenalty);
2331 ar & BOOST_SERIALIZATION_NVP(m_pFineSearchAngleOffset);
2332 ar & BOOST_SERIALIZATION_NVP(m_pCoarseSearchAngleOffset);
2333 ar & BOOST_SERIALIZATION_NVP(m_pCoarseAngleResolution);
2334 ar & BOOST_SERIALIZATION_NVP(m_pMinimumAnglePenalty);
2335 ar & BOOST_SERIALIZATION_NVP(m_pMinimumDistancePenalty);
2336 ar & BOOST_SERIALIZATION_NVP(m_pUseResponseExpansion);
2337 std::cout <<
"**Finished serializing Mapper**\n";
2344 bool getParamUseScanMatching();
2345 bool getParamUseScanBarycenter();
2346 double getParamMinimumTimeInterval();
2347 double getParamMinimumTravelDistance();
2348 double getParamMinimumTravelHeading();
2349 int getParamScanBufferSize();
2350 double getParamScanBufferMaximumScanDistance();
2351 double getParamLinkMatchMinimumResponseFine();
2352 double getParamLinkScanMaximumDistance();
2353 double getParamLoopSearchMaximumDistance();
2354 bool getParamDoLoopClosing();
2355 int getParamLoopMatchMinimumChainSize();
2356 double getParamLoopMatchMaximumVarianceCoarse();
2357 double getParamLoopMatchMinimumResponseCoarse();
2358 double getParamLoopMatchMinimumResponseFine();
2361 double getParamCorrelationSearchSpaceDimension();
2362 double getParamCorrelationSearchSpaceResolution();
2363 double getParamCorrelationSearchSpaceSmearDeviation();
2366 double getParamLoopSearchSpaceDimension();
2367 double getParamLoopSearchSpaceResolution();
2368 double getParamLoopSearchSpaceSmearDeviation();
2371 double getParamDistanceVariancePenalty();
2372 double getParamAngleVariancePenalty();
2373 double getParamFineSearchAngleOffset();
2374 double getParamCoarseSearchAngleOffset();
2375 double getParamCoarseAngleResolution();
2376 double getParamMinimumAnglePenalty();
2377 double getParamMinimumDistancePenalty();
2378 bool getParamUseResponseExpansion();
2382 void setParamUseScanMatching(
bool b);
2383 void setParamUseScanBarycenter(
bool b);
2384 void setParamMinimumTimeInterval(
double d);
2385 void setParamMinimumTravelDistance(
double d);
2386 void setParamMinimumTravelHeading(
double d);
2387 void setParamScanBufferSize(
int i);
2388 void setParamScanBufferMaximumScanDistance(
double d);
2389 void setParamLinkMatchMinimumResponseFine(
double d);
2390 void setParamLinkScanMaximumDistance(
double d);
2391 void setParamLoopSearchMaximumDistance(
double d);
2392 void setParamDoLoopClosing(
bool b);
2393 void setParamLoopMatchMinimumChainSize(
int i);
2394 void setParamLoopMatchMaximumVarianceCoarse(
double d);
2395 void setParamLoopMatchMinimumResponseCoarse(
double d);
2396 void setParamLoopMatchMinimumResponseFine(
double d);
2399 void setParamCorrelationSearchSpaceDimension(
double d);
2400 void setParamCorrelationSearchSpaceResolution(
double d);
2401 void setParamCorrelationSearchSpaceSmearDeviation(
double d);
2404 void setParamLoopSearchSpaceDimension(
double d);
2405 void setParamLoopSearchSpaceResolution(
double d);
2406 void setParamLoopSearchSpaceSmearDeviation(
double d);
2409 void setParamDistanceVariancePenalty(
double d);
2410 void setParamAngleVariancePenalty(
double d);
2411 void setParamFineSearchAngleOffset(
double d);
2412 void setParamCoarseSearchAngleOffset(
double d);
2413 void setParamCoarseAngleResolution(
double d);
2414 void setParamMinimumAnglePenalty(
double d);
2415 void setParamMinimumDistancePenalty(
double d);
2416 void setParamUseResponseExpansion(
bool b);
2418 BOOST_SERIALIZATION_ASSUME_ABSTRACT(
Mapper)
2421 #endif // karto_sdk_MAPPER_H CorrelationGrid(kt_int32u width, kt_int32u height, kt_int32u borderSize, kt_double resolution, kt_double smearDeviation)
std::map< int, LocalizedRangeScan * > m_Scans
virtual void GetNodeOrientation(const int &unique_id, double &pose)
std::map< Name, ScanManager * > ScanManagerMap
ScanMatcher * m_pSequentialScanMatcher
void serialize(Archive &ar, const unsigned int version)
GraphTraversal(Graph< T > *pGraph)
virtual ~CorrelationGrid()
Parameter< kt_double > * m_pLinkScanMaximumDistance
virtual void Info(const std::string &)
kt_double Round(kt_double value)
kt_bool TryCloseLoop(LocalizedRangeScan *pScan, const Name &rSensorName)
virtual void AddNode(Vertex< LocalizedRangeScan > *)
void serialize(Archive &ar, const unsigned int version)
Parameter< kt_double > * m_pCoarseAngleResolution
kt_int32s GetStateId() const
Parameter< kt_double > * m_pLoopMatchMaximumVarianceCoarse
void serialize(Archive &ar, const unsigned int version)
std::vector< Vector2< kt_double > > PointVectorDouble
Parameter< kt_double > * m_pMinimumTravelHeading
virtual void EndLoopClosure(const std::string &)
#define forEachAs(listtype, list, iter)
void AddEdge(Edge< T > *pEdge)
Parameter< kt_double > * m_pMinimumAnglePenalty
Matrix3 Transpose() const
std::vector< MapperListener * > m_Listeners
virtual void RemoveNode(kt_int32s)
void serialize(Archive &ar, const unsigned int version)
void serialize(Archive &ar, const unsigned int version)
Rectangle2< kt_int32s > m_Roi
virtual void RemoveConstraint(kt_int32s, kt_int32s)
virtual ~GraphTraversal()
std::map< Name, std::map< int, Vertex< T > * > > VertexMap
std::vector< Name > GetSensorNames()
Vertex< LocalizedRangeScan > * vertex
virtual void LoopClosureCheck(const std::string &)
Parameter< kt_double > * m_pLoopSearchSpaceSmearDeviation
void serialize(Archive &ar, const unsigned int version)
void Update(const Pose2 &rPose1, const Pose2 &rPose2, const Matrix3 &rCovariance)
const std::vector< Edge< T > * > & GetEdges() const
const Matrix3 & GetCovariance()
virtual std::unordered_map< int, Eigen::Vector3d > * getGraph()
Parameter< kt_int32u > * m_pLoopMatchMinimumChainSize
INLINE Rall1d< T, V, S > hypot(const Rall1d< T, V, S > &y, const Rall1d< T, V, S > &x)
Parameter< kt_double > * m_pCorrelationSearchSpaceResolution
virtual kt_int32s GridIndex(const Vector2< kt_int32s > &rGrid, kt_bool boundaryCheck=true) const
Parameter< kt_double > * m_pMinimumDistancePenalty
void AddVertex(const Name &rName, Vertex< T > *pVertex)
virtual void AddConstraint(Edge< LocalizedRangeScan > *)
Parameter< kt_double > * m_pDistanceVariancePenalty
MapperSensorManager * GetMapperSensorManager() const
Parameter< kt_bool > * m_pUseScanMatching
Vertex< T > * GetTarget() const
#define forEach(listtype, list)
std::vector< kt_double > m_xPoses
void serialize(Archive &ar, const unsigned int version)
kt_double m_SmearDeviation
virtual void ModifyNode(const int &unique_id, Eigen::Vector3d pose)
const double GetScore() const
void SetROI(const Rectangle2< kt_int32s > &roi)
MapperSensorManager * m_pMapperSensorManager
kt_int32u m_RunningBufferMaximumSize
GraphTraversal< LocalizedRangeScan > * m_pTraversal
Parameter< kt_bool > * m_pDoLoopClosing
friend class boost::serialization::access
Parameter< kt_double > * m_pFineSearchAngleOffset
Parameter< kt_double > * m_pScanBufferMaximumScanDistance
ScanSolver * m_pScanOptimizer
LocalizedRangeScan * scan
virtual void Debug(const std::string &)
Parameter< kt_double > * m_pLoopSearchSpaceDimension
void serialize(Archive &ar, const unsigned int version)
void RemoveEdge(const int &idx)
virtual kt_int32s GridIndex(const Vector2< kt_int32s > &rGrid, kt_bool boundaryCheck=true) const
void serialize(Archive &ar, const unsigned int version)
const Name & GetSensorName() const
void SmearPoint(const Vector2< kt_int32s > &rGridPoint)
CorrelationGrid * GetCorrelationGrid() const
void serialize(Archive &ar, const unsigned int version)
Parameter< kt_double > * m_pMinimumTravelDistance
std::vector< Edge< T > * > m_Edges
void serialize(Archive &ar, const unsigned int version)
void SetScore(const double score)
void serialize(Archive &ar, const unsigned int version)
void AddEdge(Edge< T > *pEdge)
void SetUseScanMatching(kt_bool val)
std::vector< Pose2 > Pose2Vector
ScanMatcher * GetLoopScanMatcher() const
void serialize(Archive &ar, const unsigned int version)
void RemoveVertex(const Name &rName, const int &idx)
virtual ~MapperSensorManager()
Vertex< T > * GetSource() const
ScanMatcher(Mapper *pMapper)
kt_bool InRange(const T &value, const T &a, const T &b)
kt_double m_RunningBufferMaximumDistance
#define const_forEach(listtype, list)
LocalizationScanVertices m_LocalizationScanVertices
virtual void BeginLoopClosure(const std::string &)
INLINE Rall1d< T, V, S > exp(const Rall1d< T, V, S > &arg)
void serialize(Archive &ar, const unsigned int version)
std::vector< Vertex< T > * > GetAdjacentVertices() const
GridIndexLookup< kt_int8u > * m_pGridLookup
INLINE Rall1d< T, V, S > pow(const Rall1d< T, V, S > &arg, double m)
void serialize(Archive &ar, const unsigned int version)
static CorrelationGrid * CreateGrid(kt_int32s width, kt_int32s height, kt_double resolution, kt_double smearDeviation)
CorrelationGrid * m_pCorrelationGrid
Parameter< kt_double > * m_pLoopSearchSpaceResolution
void RemoveEdge(const int &idx)
Parameter< kt_double > * m_pCorrelationSearchSpaceDimension
MapperSensorManager(kt_int32u runningBufferMaximumSize, kt_double runningBufferMaximumDistance)
const std::vector< Edge< T > * > & GetEdges() const
LocalizedRangeScan * GetScan(kt_int32s id)
std::vector< std::pair< kt_int32s, Pose2 > > IdPoseVector
Parameter< kt_double > * m_pLinkMatchMinimumResponseFine
Vertex< LocalizedRangeScan > * GetVertex(LocalizedRangeScan *pScan)
void serialize(Archive &ar, const unsigned int version)
std::pair< kt_double, Pose2 > * m_pPoseResponse
ScanMatcher * m_pLoopScanMatcher
void SetLabel(EdgeLabel *pLabel)
ScanManagerMap m_ScanManagers
Grid< kt_double > * m_pSearchSpaceProbs
std::vector< kt_double > m_yPoses
static kt_int32s GetHalfKernelSize(kt_double smearDeviation, kt_double resolution)
Edge(Vertex< T > *pSource, Vertex< T > *pTarget)
Parameter< kt_double > * m_pCorrelationSearchSpaceSmearDeviation
Parameter< kt_double > * m_pLoopMatchMinimumResponseCoarse
const Rectangle2< kt_int32s > & GetROI() const
LinkInfo(const Pose2 &rPose1, const Pose2 &rPose2, const Matrix3 &rCovariance)
const VertexMap & GetVertices() const
Parameter< kt_double > * m_pCoarseSearchAngleOffset
Parameter< kt_double > * m_pLoopSearchMaximumDistance
Parameter< kt_double > * m_pAngleVariancePenalty
virtual void CalculateKernel()
Parameter< kt_double > * m_pMinimumTimeInterval
Parameter< kt_bool > * m_pUseResponseExpansion
Parameter< kt_int32u > * m_pScanBufferSize
kt_bool IsUpTo(const T &value, const T &maximum)
kt_double m_searchAngleOffset
std::queue< LocalizationScanVertex > LocalizationScanVertices
std::vector< Edge< T > * > m_Edges
ScanManager * GetScanManager(LocalizedRangeScan *pScan)
kt_double m_searchAngleResolution
std::vector< LocalizedRangeScan * > LocalizedRangeScanVector
ScanManager * GetScanManager(const Name &rSensorName)
Parameter< kt_bool > * m_pUseScanBarycenter
std::map< int, LocalizedRangeScan * > LocalizedRangeScanMap
const Pose2 & GetPoseDifference()
Parameter< kt_double > * m_pLoopMatchMinimumResponseFine
kt_double GetHeading() const
void FromAxisAngle(kt_double x, kt_double y, kt_double z, const kt_double radians)