@[toc]

一、ceres::Problem

Problem包含两个主要的成员函数Problem::AddResidalBlock() and Problem::AddParameterBlock()

Problem::AddResidualBlock()

Problem::AddResidualBlock()顾名思义,就是向问题中添加一个残差块。它添加了一个CostFunction和一个可选的LossFunction,并将CostFunction与一组参数块相连。
loss_function可以是nullptr,在这种情况下,项的代价只是残差的二范数

Problem::AddParameterBlock()

用户可以选择使用 Problem::AddParameterBlock() 显式添加参数块。这会导致额外的正确性检查;但是,如果 Problem::AddParameterBlock()不存在,Problem::AddResidualBlock() 会隐式添加参数块,因此不需要显式调用 Problem::AddParameterBlock()。

Problem::AddParameterBlock()的另一个作用是将LocalParameterization 对象与参数块相关联。

Problem::SetParameterBlockConstant() 和 SetParameterBlockVariable().

在优化问题中我们常常会需要固定某一个参数不优化,可以使用Problem::SetParameterBlockConstant(),反之要解除这种固定使用SetParameterBlockVariable().