1515// limitations under the License.
1616// __END_LICENSE__
1717
18+ #include < asp/Rig/RigOptimizer.h>
1819#include < asp/Rig/RigCostFunction.h>
1920#include < asp/Rig/camera_image.h>
2021#include < asp/Rig/rig_config.h>
3536
3637namespace rig {
3738
39+ // A struct to hold the block sizes for the various cost functions
40+ struct RigBlockSizes {
41+ std::vector<int > image_block_sizes;
42+ std::vector<int > depth_block_sizes;
43+ std::vector<int > depth_mesh_block_sizes;
44+ std::vector<int > xyz_block_sizes;
45+ };
46+
47+ // Set up block sizes for various cost functions
48+ void set_up_block_sizes (int num_depth_params,
49+ RigBlockSizes& block_sizes) {
50+ // Wipe the outputs
51+ block_sizes.image_block_sizes .clear ();
52+ block_sizes.depth_block_sizes .clear ();
53+ block_sizes.depth_mesh_block_sizes .clear ();
54+ block_sizes.xyz_block_sizes .clear ();
55+
56+ int num_focal_lengths = 1 ; // The x and y focal length are assumed to be the same
57+ int num_distortion_params = 1 ; // will be overwritten later
58+
59+ // Set up the variable blocks to optimize for BracketedCamError
60+
61+ block_sizes.image_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
62+ block_sizes.image_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
63+ block_sizes.image_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
64+ block_sizes.image_block_sizes .push_back (rig::NUM_XYZ_PARAMS);
65+ block_sizes.image_block_sizes .push_back (rig::NUM_SCALAR_PARAMS);
66+ block_sizes.image_block_sizes .push_back (num_focal_lengths);
67+ block_sizes.image_block_sizes .push_back (rig::NUM_OPT_CTR_PARAMS);
68+ block_sizes.image_block_sizes .push_back (num_distortion_params);
69+
70+ // Set up variable blocks to optimize for BracketedDepthError
71+ block_sizes.depth_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
72+ block_sizes.depth_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
73+ block_sizes.depth_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
74+ block_sizes.depth_block_sizes .push_back (num_depth_params);
75+ block_sizes.depth_block_sizes .push_back (rig::NUM_SCALAR_PARAMS);
76+ block_sizes.depth_block_sizes .push_back (rig::NUM_XYZ_PARAMS);
77+ block_sizes.depth_block_sizes .push_back (rig::NUM_SCALAR_PARAMS);
78+
79+ // Set up the variable blocks to optimize for BracketedDepthMeshError
80+ block_sizes.depth_mesh_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
81+ block_sizes.depth_mesh_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
82+ block_sizes.depth_mesh_block_sizes .push_back (rig::NUM_RIGID_PARAMS);
83+ block_sizes.depth_mesh_block_sizes .push_back (num_depth_params);
84+ block_sizes.depth_mesh_block_sizes .push_back (rig::NUM_SCALAR_PARAMS);
85+ block_sizes.depth_mesh_block_sizes .push_back (rig::NUM_SCALAR_PARAMS);
86+
87+ // Set up the variable blocks to optimize for the mesh xyz
88+ block_sizes.xyz_block_sizes .push_back (rig::NUM_XYZ_PARAMS);
89+ }
90+
3891// Evaluate the residuals before and after optimization
3992void evalResiduals (// Inputs
4093 std::string const & tag,
@@ -636,7 +689,6 @@ void runOptPass(int pass,
636689 std::vector<double > const & ref_timestamps,
637690 rig::KeypointVec const & keypoint_vec,
638691 rig::PidCidFid const & pid_to_cid_fid,
639- rig::RigBlockSizes const & block_sizes,
640692 std::vector<double > const & min_timestamp_offset,
641693 std::vector<double > const & max_timestamp_offset,
642694 mve::TriangleMesh::Ptr const & mesh,
@@ -648,6 +700,10 @@ void runOptPass(int pass,
648700 std::vector<Eigen::Vector3d> & xyz_vec,
649701 rig::PidCidFidMap & pid_cid_fid_inlier) {
650702
703+ // Set up the block sizes
704+ rig::RigBlockSizes block_sizes;
705+ rig::set_up_block_sizes (num_depth_params, block_sizes);
706+
651707 // Optimization state local to this pass. Must update the state from
652708 // extrinsics and rig config, run the optimization, then update back the extrinsics.
653709 rig::OptState state;
0 commit comments