markdown文件可在https://github.com/learnmoreonce/SLAM 下载
文件:trajectory_connectivity.h
#ifndef CARTOGRAPHER_MAPPING_TRAJECTORY_CONNECTIVITY_H_
#define CARTOGRAPHER_MAPPING_TRAJECTORY_CONNECTIVITY_H_
#include <map>
#include <unordered_map>
#include "cartographer/common/mutex.h"
#include "cartographer/mapping/proto/trajectory_connectivity.pb.h"
#include "cartographer/mapping/submaps.h"
namespace cartographer {
namespace mapping {
/*
TrajectoryConnectivity用于解决不同轨迹线的连通性问题.
多条轨迹构成一颗森林,而相互联通的轨迹应该合并。
不可拷贝/赋值
包含3个数据成员
1,互斥锁lock_
2,forest_ 不同轨迹线组成的森林
3,connection_map_ 连通图
成员函数
Add():添加一条轨迹线
Connect():将2条轨迹线联通
TransitivelyConnected():判断是否处于同一个连通域
ConnectionCount():返回直接联通的数量
the transitive connectivity:传递连通性
ConnectedComponents():由联通分量id组成的已联通分类组
*/
// A class that tracks the connectivity structure between trajectories.
//
// Connectivity includes both the count ("How many times have I _directly_
// connected trajectories i and j?") and the transitive connectivity.
//
// This class is thread-safe.
class TrajectoryConnectivity {
public:
TrajectoryConnectivity();
TrajectoryConnectivity(const TrajectoryConnectivity&) = delete;
TrajectoryConnectivity& operator=(const TrajectoryConnectivity&) = delete;
// Add a trajectory which is initially connected to nothing.
//添加一条轨迹线,默认不连接到任何轨迹线
void Add(int trajectory_id) EXCLUDES(lock_);
/*
Connect two trajectories. If either trajectory is untracked, it will be tracked. This function is invariant to the order of its arguments.
Repeated calls to Connect increment the connectivity count.
将轨迹a和轨迹b联通
*/
void Connect(int trajectory_id_a, int trajectory_id_b) EXCLUDES(lock_);
// Determines if two trajectories have been (transitively) connected. If
// either