Program Listing for File optimal_tf_gauss_newton.h

Return to documentation for file (mp2p_icp/include/mp2p_icp/optimal_tf_gauss_newton.h)

/*               _
 _ __ ___   ___ | | __ _
| '_ ` _ \ / _ \| |/ _` | Modular Optimization framework for
| | | | | | (_) | | (_| | Localization and mApping (MOLA)
|_| |_| |_|\___/|_|\__,_| https://github.com/MOLAorg/mola

 A repertory of multi primitive-to-primitive (MP2P) ICP algorithms
 and map building tools. mp2p_icp is part of MOLA.

 Copyright (C) 2018-2026 Jose Luis Blanco, University of Almeria,
                         and individual contributors.
 SPDX-License-Identifier: BSD-3-Clause
*/

#pragma once

#include <mp2p_icp/OptimalTF_Result.h>
#include <mp2p_icp/PairWeights.h>
#include <mp2p_icp/Pairings.h>
#include <mp2p_icp/robust_kernels.h>
#include <mrpt/poses/CPose3DPDFGaussianInf.h>

namespace mp2p_icp
{
struct OptimalTF_GN_Parameters
{
    OptimalTF_GN_Parameters() = default;

    std::optional<mrpt::poses::CPose3D> linearizationPoint;

    std::optional<mrpt::poses::CPose3DPDFGaussianInf> prior;

    double minDelta = 1e-7;

    double maxCost = 0;

    PairWeights pairWeights;

    uint32_t maxInnerLoopIterations = 6;

    RobustKernel kernel      = RobustKernel::None;
    double       kernelParam = 1.0;

    double cov2cov_alpha = 1.0;

    bool cov2cov_auto_balance_with_prior = true;

    bool verbose = false;
};

[[nodiscard]] bool optimal_tf_gauss_newton(
    const Pairings& in, OptimalTF_Result& result,
    const OptimalTF_GN_Parameters& gnParams = OptimalTF_GN_Parameters());

}  // namespace mp2p_icp