美文网首页
ceres solver 02 中代价函数和AutoDiffCo

ceres solver 02 中代价函数和AutoDiffCo

作者: book_02 | 来源:发表于2019-11-08 20:42 被阅读0次

    使用ceres solver时发现,发现自定义代价函数和输入代价函数使用AutoDiffCostFunction的参数顺序有些不同,总结如下:

    1. 自定义代价函数

    一个例子如下:

    struct CostFunctor {
      template <typename T> 
      bool operator()(const T* const x, T* residual) const {
        residual[0] = T(10.0) - x[0];
        return true;
      }
    };
    

    而在定义operator()时参数顺序是先是参数块,然后是残差块

    2. AutoDiffCostFunction

    ceres solver中类的源码如下:

    template <typename CostFunctor,
              int kNumResiduals,  // Number of residuals, or ceres::DYNAMIC.
              int N0,       // Number of parameters in block 0.
              int N1 = 0,   // Number of parameters in block 1.
              int N2 = 0,   // Number of parameters in block 2.
              int N3 = 0,   // Number of parameters in block 3.
              int N4 = 0,   // Number of parameters in block 4.
              int N5 = 0,   // Number of parameters in block 5.
              int N6 = 0,   // Number of parameters in block 6.
              int N7 = 0,   // Number of parameters in block 7.
              int N8 = 0,   // Number of parameters in block 8.
              int N9 = 0>   // Number of parameters in block 9.
    class AutoDiffCostFunction : public SizedCostFunction<kNumResiduals,
                                                          N0, N1, N2, N3, N4,
                                                          N5, N6, N7, N8, N9>
    {
    ...
    }
    
    
    template<int kNumResiduals,
             int N0 = 0, int N1 = 0, int N2 = 0, int N3 = 0, int N4 = 0,
             int N5 = 0, int N6 = 0, int N7 = 0, int N8 = 0, int N9 = 0>
    class SizedCostFunction : public CostFunction
    {
    ...
    }
    
    

    所以模板的第1个参数是自定义的CostFunctor类,第2个参数是残差项的数量,第3个参数是第0个参数块的参数数量,后面依次类推,数量默认为0

    3. 参数顺序总结

    自定义代价函数的参数顺序:

    1. 参数块
    2. 残差块
    3. 雅克比(如果有的话)

    AutoDiffCostFunction的模板参数顺序:

    1. 代价函数
    2. 残差块中残差项的数量
    3. 各参数块中参数的数量

    相关文章

      网友评论

          本文标题:ceres solver 02 中代价函数和AutoDiffCo

          本文链接:https://www.haomeiwen.com/subject/wrgwbctx.html