58-总结-【cartographer源码分析】系列的第六部分【 mapping 】

【cartographer源码分析】系列的第六部分【 mapping】。

现总结 mapping 文件夹涉及到的主要功能:

【1】 mapping/probability_values.h

probability_values.h定义了一系列与概率相关的函数–多个用于计算概率的mapping命名空间下的全局函数。cartographer所有的概率不是以0-1.0表示,而是通过浮点数到整数的映射: [1, 32767],避免浮点数运算。

  • 全局函数

    *  inline float Odds(float probability) {          //论文公式(2),求胜负比。y=x/(1-x)
         return probability / (1.f - probability);    }
    
    
    *  inline float ProbabilityFromOdds(const float odds) { //求概率,即x=y/(1+y)
        return odds / (odds + 1.f);    }
    
    
        * constexpr float kMinProbability = 0.1f;//p最小是0.1
    
        * constexpr float kMaxProbability = 1.f - kMinProbability;//最大是0.9
    
        * inline float ClampProbability(const float probability);限制概率p在[0.1,0.9]之间
    
        * constexpr uint16 kUnknownProbabilityValue = 0;//标记未初始化的概率
    
        * constexpr uint16 kUpdateMarker = 1u << 15;// 32768
    
        * inline uint16 ProbabilityToValue(const float probability) 将概率p映射为整数Value[1,32767]
    
        * extern const std::vector< float>* const kValueToProbability;   声明,定义在.cc文件。vector是value到p的映射
    
        * inline float ValueToProbability(const uint16 value);映射 [1,32767]->[0.1,0.9]
    
    • std::vector< uint16> ComputeLookupTableToApplyOdds(float odds);//2份value:前一半对应没有hit,后一半对应hit。

      之前没有hit过,则没有update,按论文公式(2)计算:
      求p,
      求[1,32767],
      求[1,32767]+32768
      push_back()
      
      之前有hit过,则有update,按论文公式(3)计算:
      求(*kValueToProbability)[cell]->[0.1,0.9]即原始p
      求p'=odds*Odds(p)
      求p'映射到[1,32767]
      push_back():[1,32767]+32768.
      

【2】id.h

该文件定义了一系列用于标记轨迹的数据结构,包括:

  • struct NodeId

            {
          int trajectory_id;
          int node_index; }
    

    每一个轨迹trajectory上有多个节点node。节点标号:轨迹id+{0,1,2,…}.

  • struct SubmapId {

      int trajectory_id;
      int submap_index;  }
    

    重建全局地图global map时,是由多个submap组成。submap标号: 轨迹id+ {0,1,2,3…}

  • NestedVectorsById

    • 作用:嵌套存储多条轨迹线上的数据
    • 数据成员:vector< vector > data_;
    • 对外提供4个操作:
      • IdType Append(int trajectory_id, const ValueType& value) 根据轨迹id和data添加数据
      • const ValueType& at(const IdType& id)查询某轨迹对应的vector的data
      • num_indices(),某轨迹对应的数据的大小
      • int num_trajectories() 轨迹数量
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值