From 7d5fd803596accdca964e1d88b6788e55fa992eb Mon Sep 17 00:00:00 2001 From: AlessandroFornasier Date: Thu, 14 Nov 2024 20:44:12 +0000 Subject: [PATCH] deploy: f41b5cff41c372085e9133abf33f0e1625cd9c7b --- .nojekyll | 0 annotated.html | 173 ++ annotated_dup.js | 61 + bc_s.png | Bin 0 -> 676 bytes bc_sd.png | Bin 0 -> 635 bytes camera_8hpp_source.html | 261 ++ checker_8hpp_source.html | 155 ++ class_m_s_c_eq_f_ros-members.html | 119 + class_m_s_c_eq_f_ros.html | 274 ++ class_m_s_c_eq_f_ros.js | 6 + classes.html | 164 ++ classmsceqf_1_1_checker-members.html | 118 + classmsceqf_1_1_checker.html | 199 ++ classmsceqf_1_1_checker.js | 5 + classmsceqf_1_1_m_s_c_eq_f-members.html | 131 + classmsceqf_1_1_m_s_c_eq_f.html | 572 +++++ classmsceqf_1_1_m_s_c_eq_f.js | 18 + ...87aa91e58c6190cd94aeacedfe9c7d_icgraph.map | 5 + ...87aa91e58c6190cd94aeacedfe9c7d_icgraph.md5 | 1 + ...87aa91e58c6190cd94aeacedfe9c7d_icgraph.png | Bin 0 -> 7494 bytes ...d7135418997539dcb59078c592f8c5e_cgraph.map | 5 + ...d7135418997539dcb59078c592f8c5e_cgraph.md5 | 1 + ...d7135418997539dcb59078c592f8c5e_cgraph.png | Bin 0 -> 7506 bytes classmsceqf_1_1_m_s_c_eq_f_state-members.html | 154 ++ classmsceqf_1_1_m_s_c_eq_f_state.html | 1002 ++++++++ classmsceqf_1_1_m_s_c_eq_f_state.js | 36 + ..._1_1_m_s_c_eq_f_state_element-members.html | 131 + classmsceqf_1_1_m_s_c_eq_f_state_element.html | 434 ++++ classmsceqf_1_1_m_s_c_eq_f_state_element.js | 13 + ...s_c_eq_f_state_element__inherit__graph.map | 11 + ...s_c_eq_f_state_element__inherit__graph.md5 | 1 + ...s_c_eq_f_state_element__inherit__graph.png | Bin 0 -> 18615 bytes classmsceqf_1_1_option_parser-members.html | 118 + classmsceqf_1_1_option_parser.html | 177 ++ classmsceqf_1_1_option_parser.js | 5 + classmsceqf_1_1_pinhole_camera-members.html | 141 ++ classmsceqf_1_1_pinhole_camera.html | 604 +++++ classmsceqf_1_1_pinhole_camera.js | 22 + ...eqf_1_1_pinhole_camera__inherit__graph.map | 7 + ...eqf_1_1_pinhole_camera__inherit__graph.md5 | 1 + ...eqf_1_1_pinhole_camera__inherit__graph.png | Bin 0 -> 9078 bytes ...smsceqf_1_1_projection_helper-members.html | 130 + classmsceqf_1_1_projection_helper.html | 392 +++ classmsceqf_1_1_projection_helper.js | 12 + ..._1_1_projection_helper__inherit__graph.map | 7 + ..._1_1_projection_helper__inherit__graph.md5 | 1 + ..._1_1_projection_helper__inherit__graph.png | Bin 0 -> 9381 bytes ...ceqf_1_1_projection_helper_s2-members.html | 131 + classmsceqf_1_1_projection_helper_s2.html | 345 +++ classmsceqf_1_1_projection_helper_s2.js | 6 + ..._1_1_projection_helper_s2__coll__graph.map | 5 + ..._1_1_projection_helper_s2__coll__graph.md5 | 1 + ..._1_1_projection_helper_s2__coll__graph.png | Bin 0 -> 5580 bytes ...1_projection_helper_s2__inherit__graph.map | 5 + ...1_projection_helper_s2__inherit__graph.md5 | 1 + ...1_projection_helper_s2__inherit__graph.png | Bin 0 -> 5580 bytes ...ceqf_1_1_projection_helper_z1-members.html | 131 + classmsceqf_1_1_projection_helper_z1.html | 345 +++ classmsceqf_1_1_projection_helper_z1.js | 6 + ..._1_1_projection_helper_z1__coll__graph.map | 5 + ..._1_1_projection_helper_z1__coll__graph.md5 | 1 + ..._1_1_projection_helper_z1__coll__graph.png | Bin 0 -> 5289 bytes ...1_projection_helper_z1__inherit__graph.map | 5 + ...1_projection_helper_z1__inherit__graph.md5 | 1 + ...1_projection_helper_z1__inherit__graph.png | Bin 0 -> 5289 bytes classmsceqf_1_1_propagator-members.html | 120 + classmsceqf_1_1_propagator.html | 254 ++ classmsceqf_1_1_propagator.js | 7 + ...msceqf_1_1_static_initializer-members.html | 123 + classmsceqf_1_1_static_initializer.html | 325 +++ classmsceqf_1_1_static_initializer.js | 10 + classmsceqf_1_1_symmetry-members.html | 120 + classmsceqf_1_1_symmetry.html | 259 ++ classmsceqf_1_1_system_state-members.html | 139 + classmsceqf_1_1_system_state.html | 648 +++++ classmsceqf_1_1_system_state.js | 21 + ...b9dffa95fa3caf6a7b8f9c7079fb46_icgraph.map | 5 + ...b9dffa95fa3caf6a7b8f9c7079fb46_icgraph.md5 | 1 + ...b9dffa95fa3caf6a7b8f9c7079fb46_icgraph.png | Bin 0 -> 6844 bytes ...d7791337e2a823b2ddd845489f66561_cgraph.map | 5 + ...d7791337e2a823b2ddd845489f66561_cgraph.md5 | 1 + ...d7791337e2a823b2ddd845489f66561_cgraph.png | Bin 0 -> 6861 bytes ...ceqf_1_1_system_state_element-members.html | 123 + classmsceqf_1_1_system_state_element.html | 203 ++ classmsceqf_1_1_system_state_element.js | 5 + ...1_system_state_element__inherit__graph.map | 13 + ...1_system_state_element__inherit__graph.md5 | 1 + ...1_system_state_element__inherit__graph.png | Bin 0 -> 21197 bytes classmsceqf_1_1_track_manager-members.html | 127 + classmsceqf_1_1_track_manager.html | 475 ++++ classmsceqf_1_1_track_manager.js | 14 + ...0ff31e29de9e63a454a58af7c9b931_icgraph.map | 7 + ...0ff31e29de9e63a454a58af7c9b931_icgraph.md5 | 1 + ...0ff31e29de9e63a454a58af7c9b931_icgraph.png | Bin 0 -> 12851 bytes ...15a87fdc24b43e2cb9f41e179a85e3_icgraph.map | 7 + ...15a87fdc24b43e2cb9f41e179a85e3_icgraph.md5 | 1 + ...15a87fdc24b43e2cb9f41e179a85e3_icgraph.png | Bin 0 -> 12151 bytes ...813535e2b8bc3fa2f68ea611fb7015_icgraph.map | 7 + ...813535e2b8bc3fa2f68ea611fb7015_icgraph.md5 | 1 + ...813535e2b8bc3fa2f68ea611fb7015_icgraph.png | Bin 0 -> 11951 bytes classmsceqf_1_1_tracker-members.html | 122 + classmsceqf_1_1_tracker.html | 252 ++ classmsceqf_1_1_tracker.js | 9 + classmsceqf_1_1_updater-members.html | 118 + classmsceqf_1_1_updater.html | 175 ++ classmsceqf_1_1_updater.js | 4 + classmsceqf_1_1_visualizer-members.html | 119 + classmsceqf_1_1_visualizer.html | 282 +++ classmsceqf_1_1_visualizer.js | 6 + ...9e6c6116457f74dd68d81382c4e154b_cgraph.map | 11 + ...9e6c6116457f74dd68d81382c4e154b_cgraph.md5 | 1 + ...9e6c6116457f74dd68d81382c4e154b_cgraph.png | Bin 0 -> 20757 bytes ...0b6220ad8dbb4d1925ba9121be6631e_cgraph.map | 9 + ...0b6220ad8dbb4d1925ba9121be6631e_cgraph.md5 | 1 + ...0b6220ad8dbb4d1925ba9121be6631e_cgraph.png | Bin 0 -> 14747 bytes ...b6220ad8dbb4d1925ba9121be6631e_icgraph.map | 5 + ...b6220ad8dbb4d1925ba9121be6631e_icgraph.md5 | 1 + ...b6220ad8dbb4d1925ba9121be6631e_icgraph.png | Bin 0 -> 7368 bytes ...eqf_1_1_zero_velocity_updater-members.html | 121 + classmsceqf_1_1_zero_velocity_updater.html | 277 ++ classmsceqf_1_1_zero_velocity_updater.js | 8 + ...ils_1_1_insertion_ordered_map-members.html | 122 + classutils_1_1_insertion_ordered_map.html | 341 +++ classutils_1_1_insertion_ordered_map.js | 9 + ..._insertion_ordered_map__inherit__graph.map | 5 + ..._insertion_ordered_map__inherit__graph.md5 | 1 + ..._insertion_ordered_map__inherit__graph.png | Bin 0 -> 12836 bytes classutils_1_1_logger-members.html | 122 + classutils_1_1_logger.html | 379 +++ clipboard.js | 61 + closed.png | Bin 0 -> 132 bytes cookie.js | 58 + dir_0ad255a918b7fba820a1ddafed6fa637.html | 129 + dir_0ad255a918b7fba820a1ddafed6fa637.js | 4 + dir_0ad255a918b7fba820a1ddafed6fa637_dep.map | 4 + dir_0ad255a918b7fba820a1ddafed6fa637_dep.md5 | 1 + dir_0ad255a918b7fba820a1ddafed6fa637_dep.png | Bin 0 -> 2432 bytes dir_3f2b7730da608901a4b99a4d72613b7a.html | 124 + dir_3f2b7730da608901a4b99a4d72613b7a.js | 4 + dir_3f2b7730da608901a4b99a4d72613b7a_dep.map | 5 + dir_3f2b7730da608901a4b99a4d72613b7a_dep.md5 | 1 + dir_3f2b7730da608901a4b99a4d72613b7a_dep.png | Bin 0 -> 2848 bytes dir_5cec92fd47c0900910bbc2480fdfd7be.html | 114 + dir_5cec92fd47c0900910bbc2480fdfd7be.js | 4 + dir_6bb3bf6d14f66522c3468e1b55d76771.html | 130 + dir_6bb3bf6d14f66522c3468e1b55d76771.js | 4 + dir_6bb3bf6d14f66522c3468e1b55d76771_dep.map | 5 + dir_6bb3bf6d14f66522c3468e1b55d76771_dep.md5 | 1 + dir_6bb3bf6d14f66522c3468e1b55d76771_dep.png | Bin 0 -> 2599 bytes dir_821002d4f10779a80d4fb17bc32f21f1.html | 133 + dir_821002d4f10779a80d4fb17bc32f21f1.js | 6 + dir_821002d4f10779a80d4fb17bc32f21f1_dep.map | 4 + dir_821002d4f10779a80d4fb17bc32f21f1_dep.md5 | 1 + dir_821002d4f10779a80d4fb17bc32f21f1_dep.png | Bin 0 -> 2055 bytes dir_8987e3b525563327f0de428880c40647.html | 129 + dir_8987e3b525563327f0de428880c40647.js | 4 + dir_8987e3b525563327f0de428880c40647_dep.map | 4 + dir_8987e3b525563327f0de428880c40647_dep.md5 | 1 + dir_8987e3b525563327f0de428880c40647_dep.png | Bin 0 -> 2199 bytes dir_993377b6c00ad4f5994cd91ea29d1161.html | 131 + dir_993377b6c00ad4f5994cd91ea29d1161.js | 5 + dir_993377b6c00ad4f5994cd91ea29d1161_dep.map | 4 + dir_993377b6c00ad4f5994cd91ea29d1161_dep.md5 | 1 + dir_993377b6c00ad4f5994cd91ea29d1161_dep.png | Bin 0 -> 2570 bytes dir_ab1e5beeb058366671750909505e3165.html | 137 + dir_ab1e5beeb058366671750909505e3165.js | 8 + dir_ab1e5beeb058366671750909505e3165_dep.map | 4 + dir_ab1e5beeb058366671750909505e3165_dep.md5 | 1 + dir_ab1e5beeb058366671750909505e3165_dep.png | Bin 0 -> 2252 bytes dir_b5890cce8ed709a85ddd543f1a2a5ff2.html | 133 + dir_b5890cce8ed709a85ddd543f1a2a5ff2.js | 6 + dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.map | 4 + dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.md5 | 1 + dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.png | Bin 0 -> 2259 bytes dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.html | 129 + dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.js | 4 + dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.map | 4 + dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.md5 | 1 + dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.png | Bin 0 -> 2432 bytes dir_c1e55025cdee8ca5c3a305d8e87e79d0.html | 129 + dir_c1e55025cdee8ca5c3a305d8e87e79d0.js | 4 + dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.map | 4 + dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.md5 | 1 + dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.png | Bin 0 -> 2649 bytes dir_c4990541912a67b8bc941e361556c84e.html | 139 + dir_c4990541912a67b8bc941e361556c84e.js | 7 + dir_c4990541912a67b8bc941e361556c84e_dep.map | 8 + dir_c4990541912a67b8bc941e361556c84e_dep.md5 | 1 + dir_c4990541912a67b8bc941e361556c84e_dep.png | Bin 0 -> 6042 bytes dir_d44c64559bbebec7f509842c48db8b23.html | 128 + dir_d44c64559bbebec7f509842c48db8b23.js | 8 + dir_daf8d2f1b5aa26079c0e1db96e2157f7.html | 131 + dir_daf8d2f1b5aa26079c0e1db96e2157f7.js | 5 + dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.map | 4 + dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.md5 | 1 + dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.png | Bin 0 -> 2567 bytes dir_ebe552be396c660935f2efa76e6989b7.html | 129 + dir_ebe552be396c660935f2efa76e6989b7.js | 4 + dir_ebe552be396c660935f2efa76e6989b7_dep.map | 4 + dir_ebe552be396c660935f2efa76e6989b7_dep.md5 | 1 + dir_ebe552be396c660935f2efa76e6989b7_dep.png | Bin 0 -> 2212 bytes dir_ec8c128d97e5fa483ab11a8a22012ca3.html | 145 ++ dir_ec8c128d97e5fa483ab11a8a22012ca3.js | 9 + dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.map | 9 + dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.md5 | 1 + dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.png | Bin 0 -> 6413 bytes dir_f3487fe4a0195986466b4d5e74f4eea0.html | 129 + dir_f3487fe4a0195986466b4d5e74f4eea0.js | 4 + dir_f3487fe4a0195986466b4d5e74f4eea0_dep.map | 4 + dir_f3487fe4a0195986466b4d5e74f4eea0_dep.md5 | 1 + dir_f3487fe4a0195986466b4d5e74f4eea0_dep.png | Bin 0 -> 2071 bytes dir_f55af2754190f9dcf47967cf64d54fa0.html | 131 + dir_f55af2754190f9dcf47967cf64d54fa0.js | 5 + dir_f55af2754190f9dcf47967cf64d54fa0_dep.map | 4 + dir_f55af2754190f9dcf47967cf64d54fa0_dep.md5 | 1 + dir_f55af2754190f9dcf47967cf64d54fa0_dep.png | Bin 0 -> 2467 bytes dir_ff799a592ed72ce1c58ad18aa13e1049.html | 129 + dir_ff799a592ed72ce1c58ad18aa13e1049.js | 4 + dir_ff799a592ed72ce1c58ad18aa13e1049_dep.map | 4 + dir_ff799a592ed72ce1c58ad18aa13e1049_dep.md5 | 1 + dir_ff799a592ed72ce1c58ad18aa13e1049_dep.png | Bin 0 -> 2103 bytes doc.svg | 12 + docd.svg | 12 + doxygen.css | 2247 +++++++++++++++++ doxygen.svg | 28 + doxygen_crawl.html | 729 ++++++ dynsections.js | 198 ++ features_8hpp_source.html | 203 ++ files.html | 161 ++ files_dup.js | 5 + folderclosed.svg | 11 + folderclosedd.svg | 11 + folderopen.svg | 17 + folderopend.svg | 12 + fptypes_8hpp_source.html | 227 ++ functions.html | 125 + functions_b.html | 120 + functions_c.html | 134 + functions_d.html | 136 + functions_dup.js | 27 + functions_e.html | 121 + functions_f.html | 121 + functions_func.html | 333 +++ functions_g.html | 122 + functions_h.html | 115 + functions_i.html | 140 + functions_k.html | 119 + functions_l.html | 119 + functions_m.html | 140 + functions_n.html | 119 + functions_o.html | 123 + functions_p.html | 129 + functions_q.html | 117 + functions_r.html | 123 + functions_rela.html | 118 + functions_s.html | 138 + functions_t.html | 130 + functions_type.html | 124 + functions_u.html | 125 + functions_v.html | 118 + functions_vars.html | 302 +++ functions_w.html | 118 + functions_x.html | 115 + functions_z.html | 119 + graph_legend.html | 173 ++ graph_legend.md5 | 1 + graph_legend.png | Bin 0 -> 23252 bytes hierarchy.html | 176 ++ hierarchy.js | 66 + index.html | 328 +++ inherit_graph_0.map | 3 + inherit_graph_0.md5 | 1 + inherit_graph_0.png | Bin 0 -> 1894 bytes inherit_graph_1.map | 3 + inherit_graph_1.md5 | 1 + inherit_graph_1.png | Bin 0 -> 2805 bytes inherit_graph_10.map | 3 + inherit_graph_10.md5 | 1 + inherit_graph_10.png | Bin 0 -> 2413 bytes inherit_graph_11.map | 3 + inherit_graph_11.md5 | 1 + inherit_graph_11.png | Bin 0 -> 3177 bytes inherit_graph_12.map | 3 + inherit_graph_12.md5 | 1 + inherit_graph_12.png | Bin 0 -> 2685 bytes inherit_graph_13.map | 11 + inherit_graph_13.md5 | 1 + inherit_graph_13.png | Bin 0 -> 18507 bytes inherit_graph_14.map | 3 + inherit_graph_14.md5 | 1 + inherit_graph_14.png | Bin 0 -> 2585 bytes inherit_graph_15.map | 7 + inherit_graph_15.md5 | 1 + inherit_graph_15.png | Bin 0 -> 8677 bytes inherit_graph_16.map | 7 + inherit_graph_16.md5 | 1 + inherit_graph_16.png | Bin 0 -> 9077 bytes inherit_graph_17.map | 3 + inherit_graph_17.md5 | 1 + inherit_graph_17.png | Bin 0 -> 2348 bytes inherit_graph_18.map | 3 + inherit_graph_18.md5 | 1 + inherit_graph_18.png | Bin 0 -> 2836 bytes inherit_graph_19.map | 3 + inherit_graph_19.md5 | 1 + inherit_graph_19.png | Bin 0 -> 2746 bytes inherit_graph_2.map | 3 + inherit_graph_2.md5 | 1 + inherit_graph_2.png | Bin 0 -> 1941 bytes inherit_graph_20.map | 3 + inherit_graph_20.md5 | 1 + inherit_graph_20.png | Bin 0 -> 2424 bytes inherit_graph_21.map | 3 + inherit_graph_21.md5 | 1 + inherit_graph_21.png | Bin 0 -> 2086 bytes inherit_graph_22.map | 3 + inherit_graph_22.md5 | 1 + inherit_graph_22.png | Bin 0 -> 2165 bytes inherit_graph_23.map | 13 + inherit_graph_23.md5 | 1 + inherit_graph_23.png | Bin 0 -> 21161 bytes inherit_graph_24.map | 3 + inherit_graph_24.md5 | 1 + inherit_graph_24.png | Bin 0 -> 1810 bytes inherit_graph_25.map | 3 + inherit_graph_25.md5 | 1 + inherit_graph_25.png | Bin 0 -> 1850 bytes inherit_graph_26.map | 3 + inherit_graph_26.md5 | 1 + inherit_graph_26.png | Bin 0 -> 2738 bytes inherit_graph_27.map | 3 + inherit_graph_27.md5 | 1 + inherit_graph_27.png | Bin 0 -> 2410 bytes inherit_graph_28.map | 3 + inherit_graph_28.md5 | 1 + inherit_graph_28.png | Bin 0 -> 3220 bytes inherit_graph_29.map | 3 + inherit_graph_29.md5 | 1 + inherit_graph_29.png | Bin 0 -> 2660 bytes inherit_graph_3.map | 3 + inherit_graph_3.md5 | 1 + inherit_graph_3.png | Bin 0 -> 2797 bytes inherit_graph_30.map | 3 + inherit_graph_30.md5 | 1 + inherit_graph_30.png | Bin 0 -> 2074 bytes inherit_graph_31.map | 3 + inherit_graph_31.md5 | 1 + inherit_graph_31.png | Bin 0 -> 2304 bytes inherit_graph_32.map | 3 + inherit_graph_32.md5 | 1 + inherit_graph_32.png | Bin 0 -> 2719 bytes inherit_graph_33.map | 3 + inherit_graph_33.md5 | 1 + inherit_graph_33.png | Bin 0 -> 2164 bytes inherit_graph_34.map | 3 + inherit_graph_34.md5 | 1 + inherit_graph_34.png | Bin 0 -> 3009 bytes inherit_graph_35.map | 3 + inherit_graph_35.md5 | 1 + inherit_graph_35.png | Bin 0 -> 3908 bytes inherit_graph_36.map | 3 + inherit_graph_36.md5 | 1 + inherit_graph_36.png | Bin 0 -> 2034 bytes inherit_graph_37.map | 5 + inherit_graph_37.md5 | 1 + inherit_graph_37.png | Bin 0 -> 5899 bytes inherit_graph_38.map | 5 + inherit_graph_38.md5 | 1 + inherit_graph_38.png | Bin 0 -> 10000 bytes inherit_graph_39.map | 3 + inherit_graph_39.md5 | 1 + inherit_graph_39.png | Bin 0 -> 4174 bytes inherit_graph_4.map | 3 + inherit_graph_4.md5 | 1 + inherit_graph_4.png | Bin 0 -> 2615 bytes inherit_graph_40.map | 3 + inherit_graph_40.md5 | 1 + inherit_graph_40.png | Bin 0 -> 5306 bytes inherit_graph_41.map | 3 + inherit_graph_41.md5 | 1 + inherit_graph_41.png | Bin 0 -> 1560 bytes inherit_graph_5.map | 3 + inherit_graph_5.md5 | 1 + inherit_graph_5.png | Bin 0 -> 2058 bytes inherit_graph_6.map | 3 + inherit_graph_6.md5 | 1 + inherit_graph_6.png | Bin 0 -> 1980 bytes inherit_graph_7.map | 3 + inherit_graph_7.md5 | 1 + inherit_graph_7.png | Bin 0 -> 2751 bytes inherit_graph_8.map | 3 + inherit_graph_8.md5 | 1 + inherit_graph_8.png | Bin 0 -> 1487 bytes inherit_graph_9.map | 3 + inherit_graph_9.md5 | 1 + inherit_graph_9.png | Bin 0 -> 2692 bytes inherits.html | 357 +++ jquery.js | 204 ++ logger_8hpp_source.html | 229 ++ menu.js | 134 + menudata.js | 107 + minus.svg | 8 + minusd.svg | 8 + msceqf_8hpp_source.html | 248 ++ msceqf__option__parser_8hpp_source.html | 290 +++ msceqf__options_8hpp_source.html | 408 +++ msceqf__ros_8hpp_source.html | 205 ++ msceqf_logo_docs.png | Bin 0 -> 14800 bytes nav_f.png | Bin 0 -> 153 bytes nav_fd.png | Bin 0 -> 169 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes nav_hd.png | Bin 0 -> 114 bytes navtree.css | 149 ++ navtree.js | 483 ++++ navtreedata.js | 77 + navtreeindex0.js | 253 ++ navtreeindex1.js | 217 ++ open.png | Bin 0 -> 123 bytes plus.svg | 9 + plusd.svg | 9 + propagator_8hpp_source.html | 188 ++ resize.js | 147 ++ search/all_0.js | 16 + search/all_1.js | 10 + search/all_10.js | 21 + search/all_11.js | 31 + search/all_12.js | 24 + search/all_13.js | 18 + search/all_14.js | 8 + search/all_15.js | 9 + search/all_16.js | 4 + search/all_17.js | 9 + search/all_2.js | 30 + search/all_3.js | 31 + search/all_4.js | 14 + search/all_5.js | 21 + search/all_6.js | 13 + search/all_7.js | 4 + search/all_8.js | 35 + search/all_9.js | 8 + search/all_a.js | 10 + search/all_b.js | 31 + search/all_c.js | 8 + search/all_d.js | 13 + search/all_e.js | 23 + search/all_f.js | 6 + search/classes_0.js | 4 + search/classes_1.js | 9 + search/classes_2.js | 5 + search/classes_3.js | 7 + search/classes_4.js | 4 + search/classes_5.js | 9 + search/classes_6.js | 4 + search/classes_7.js | 12 + search/classes_8.js | 4 + search/classes_9.js | 9 + search/classes_a.js | 4 + search/classes_b.js | 8 + search/classes_c.js | 9 + search/classes_d.js | 6 + search/classes_e.js | 4 + search/classes_f.js | 5 + search/close.svg | 18 + search/functions_0.js | 5 + search/functions_1.js | 7 + search/functions_10.js | 19 + search/functions_11.js | 10 + search/functions_12.js | 9 + search/functions_13.js | 7 + search/functions_14.js | 6 + search/functions_15.js | 4 + search/functions_16.js | 6 + search/functions_2.js | 19 + search/functions_3.js | 13 + search/functions_4.js | 6 + search/functions_5.js | 4 + search/functions_6.js | 7 + search/functions_7.js | 14 + search/functions_8.js | 6 + search/functions_9.js | 6 + search/functions_a.js | 13 + search/functions_b.js | 5 + search/functions_c.js | 7 + search/functions_d.js | 14 + search/functions_e.js | 4 + search/functions_f.js | 9 + search/mag.svg | 24 + search/mag_d.svg | 24 + search/mag_sel.svg | 31 + search/mag_seld.svg | 31 + search/pages_0.js | 4 + search/related_0.js | 5 + search/related_1.js | 4 + search/related_2.js | 4 + search/related_3.js | 4 + search/related_4.js | 4 + search/search.css | 291 +++ search/search.js | 694 +++++ search/searchdata.js | 33 + search/typedefs_0.js | 4 + search/typedefs_1.js | 4 + search/typedefs_2.js | 4 + search/typedefs_3.js | 7 + search/typedefs_4.js | 6 + search/typedefs_5.js | 5 + search/variables_0.js | 12 + search/variables_1.js | 5 + search/variables_10.js | 6 + search/variables_11.js | 7 + search/variables_12.js | 10 + search/variables_13.js | 7 + search/variables_14.js | 4 + search/variables_15.js | 5 + search/variables_2.js | 7 + search/variables_3.js | 16 + search/variables_4.js | 7 + search/variables_5.js | 8 + search/variables_6.js | 7 + search/variables_7.js | 4 + search/variables_8.js | 17 + search/variables_9.js | 4 + search/variables_a.js | 5 + search/variables_b.js | 15 + search/variables_c.js | 6 + search/variables_d.js | 6 + search/variables_e.js | 7 + search/variables_f.js | 5 + sensor__data_8hpp_source.html | 226 ++ splitbar.png | Bin 0 -> 314 bytes splitbard.png | Bin 0 -> 282 bytes state_8hpp_source.html | 265 ++ state__elements_8hpp_source.html | 307 +++ static__initializer_8hpp_source.html | 183 ++ structmsceqf_1_1_bias_state-members.html | 126 + structmsceqf_1_1_bias_state.html | 217 ++ structmsceqf_1_1_bias_state.js | 5 + structmsceqf_1_1_bias_state__coll__graph.map | 5 + structmsceqf_1_1_bias_state__coll__graph.md5 | 1 + structmsceqf_1_1_bias_state__coll__graph.png | Bin 0 -> 5157 bytes ...tmsceqf_1_1_bias_state__inherit__graph.map | 5 + ...tmsceqf_1_1_bias_state__inherit__graph.md5 | 1 + ...tmsceqf_1_1_bias_state__inherit__graph.png | Bin 0 -> 5157 bytes structmsceqf_1_1_camera-members.html | 122 + structmsceqf_1_1_camera.html | 151 ++ structmsceqf_1_1_camera.js | 8 + ...qf_1_1_camera_extrinsic_state-members.html | 129 + structmsceqf_1_1_camera_extrinsic_state.html | 226 ++ structmsceqf_1_1_camera_extrinsic_state.js | 5 + ..._1_camera_extrinsic_state__coll__graph.map | 5 + ..._1_camera_extrinsic_state__coll__graph.md5 | 1 + ..._1_camera_extrinsic_state__coll__graph.png | Bin 0 -> 5692 bytes ...camera_extrinsic_state__inherit__graph.map | 5 + ...camera_extrinsic_state__inherit__graph.md5 | 1 + ...camera_extrinsic_state__inherit__graph.png | Bin 0 -> 5692 bytes ...qf_1_1_camera_intrinsic_state-members.html | 129 + structmsceqf_1_1_camera_intrinsic_state.html | 226 ++ structmsceqf_1_1_camera_intrinsic_state.js | 5 + ..._1_camera_intrinsic_state__coll__graph.map | 5 + ..._1_camera_intrinsic_state__coll__graph.md5 | 1 + ..._1_camera_intrinsic_state__coll__graph.png | Bin 0 -> 5460 bytes ...camera_intrinsic_state__inherit__graph.map | 5 + ...camera_intrinsic_state__inherit__graph.md5 | 1 + ...camera_intrinsic_state__inherit__graph.png | Bin 0 -> 5460 bytes structmsceqf_1_1_camera_options-members.html | 121 + structmsceqf_1_1_camera_options.html | 144 ++ structmsceqf_1_1_camera_options.js | 8 + structmsceqf_1_1_checker_options-members.html | 118 + structmsceqf_1_1_checker_options.html | 132 + structmsceqf_1_1_checker_options.js | 5 + ...msceqf_1_1_equidistant_camera-members.html | 142 ++ structmsceqf_1_1_equidistant_camera.html | 311 +++ structmsceqf_1_1_equidistant_camera.js | 5 + ...qf_1_1_equidistant_camera__coll__graph.map | 5 + ...qf_1_1_equidistant_camera__coll__graph.md5 | 1 + ...qf_1_1_equidistant_camera__coll__graph.png | Bin 0 -> 5250 bytes ...1_1_equidistant_camera__inherit__graph.map | 5 + ...1_1_equidistant_camera__inherit__graph.md5 | 1 + ...1_1_equidistant_camera__inherit__graph.png | Bin 0 -> 5250 bytes ...sceqf_1_1_extended_pose_state-members.html | 126 + structmsceqf_1_1_extended_pose_state.html | 217 ++ structmsceqf_1_1_extended_pose_state.js | 5 + ...f_1_1_extended_pose_state__coll__graph.map | 5 + ...f_1_1_extended_pose_state__coll__graph.md5 | 1 + ...f_1_1_extended_pose_state__coll__graph.png | Bin 0 -> 5686 bytes ..._1_extended_pose_state__inherit__graph.map | 5 + ..._1_extended_pose_state__inherit__graph.md5 | 1 + ..._1_extended_pose_state__inherit__graph.png | Bin 0 -> 5686 bytes structmsceqf_1_1_fast_options-members.html | 117 + structmsceqf_1_1_fast_options.html | 128 + structmsceqf_1_1_fast_options.js | 4 + structmsceqf_1_1_feat_helper-members.html | 122 + structmsceqf_1_1_feat_helper.html | 158 ++ structmsceqf_1_1_feat_helper.js | 8 + structmsceqf_1_1_feature_state-members.html | 127 + structmsceqf_1_1_feature_state.html | 220 ++ structmsceqf_1_1_feature_state.js | 5 + ...tmsceqf_1_1_feature_state__coll__graph.map | 5 + ...tmsceqf_1_1_feature_state__coll__graph.md5 | 1 + ...tmsceqf_1_1_feature_state__coll__graph.png | Bin 0 -> 5190 bytes ...ceqf_1_1_feature_state__inherit__graph.map | 5 + ...ceqf_1_1_feature_state__inherit__graph.md5 | 1 + ...ceqf_1_1_feature_state__inherit__graph.png | Bin 0 -> 5190 bytes structmsceqf_1_1_features-members.html | 124 + structmsceqf_1_1_features.html | 259 ++ structmsceqf_1_1_features.js | 11 + structmsceqf_1_1_g_f_t_t_options-members.html | 117 + structmsceqf_1_1_g_f_t_t_options.html | 128 + structmsceqf_1_1_g_f_t_t_options.js | 4 + structmsceqf_1_1_imu-members.html | 125 + structmsceqf_1_1_imu.html | 247 ++ structmsceqf_1_1_imu.js | 11 + ...fb41a7dd565a216b9d2392e4b308fcf_cgraph.map | 4 + ...fb41a7dd565a216b9d2392e4b308fcf_cgraph.md5 | 1 + ...fb41a7dd565a216b9d2392e4b308fcf_cgraph.png | Bin 0 -> 2839 bytes ...b41a7dd565a216b9d2392e4b308fcf_icgraph.map | 4 + ...b41a7dd565a216b9d2392e4b308fcf_icgraph.md5 | 1 + ...b41a7dd565a216b9d2392e4b308fcf_icgraph.png | Bin 0 -> 2835 bytes ...sceqf_1_1_initializer_options-members.html | 124 + structmsceqf_1_1_initializer_options.html | 156 ++ structmsceqf_1_1_initializer_options.js | 11 + ...sceqf_1_1_m_s_c_eq_f_in_state-members.html | 134 + structmsceqf_1_1_m_s_c_eq_f_in_state.html | 352 +++ structmsceqf_1_1_m_s_c_eq_f_in_state.js | 9 + ...f_1_1_m_s_c_eq_f_in_state__coll__graph.map | 5 + ...f_1_1_m_s_c_eq_f_in_state__coll__graph.md5 | 1 + ...f_1_1_m_s_c_eq_f_in_state__coll__graph.png | Bin 0 -> 6044 bytes ..._1_m_s_c_eq_f_in_state__inherit__graph.map | 5 + ..._1_m_s_c_eq_f_in_state__inherit__graph.md5 | 1 + ..._1_m_s_c_eq_f_in_state__inherit__graph.png | Bin 0 -> 6044 bytes ...msceqf_1_1_m_s_c_eq_f_options-members.html | 123 + structmsceqf_1_1_m_s_c_eq_f_options.html | 182 ++ structmsceqf_1_1_m_s_c_eq_f_options.js | 10 + ...qf_1_1_m_s_c_eq_f_options__coll__graph.map | 25 + ...qf_1_1_m_s_c_eq_f_options__coll__graph.md5 | 1 + ...qf_1_1_m_s_c_eq_f_options__coll__graph.png | Bin 0 -> 69713 bytes ...qf_1_1_m_s_c_eq_f_s_d_b_state-members.html | 134 + structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html | 352 +++ structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.js | 9 + ..._1_m_s_c_eq_f_s_d_b_state__coll__graph.map | 5 + ..._1_m_s_c_eq_f_s_d_b_state__coll__graph.md5 | 1 + ..._1_m_s_c_eq_f_s_d_b_state__coll__graph.png | Bin 0 -> 6159 bytes ...m_s_c_eq_f_s_d_b_state__inherit__graph.map | 5 + ...m_s_c_eq_f_s_d_b_state__inherit__graph.md5 | 1 + ...m_s_c_eq_f_s_d_b_state__inherit__graph.png | Bin 0 -> 6159 bytes ...eqf_1_1_m_s_c_eq_f_s_e3_state-members.html | 134 + structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html | 352 +++ structmsceqf_1_1_m_s_c_eq_f_s_e3_state.js | 9 + ...1_1_m_s_c_eq_f_s_e3_state__coll__graph.map | 5 + ...1_1_m_s_c_eq_f_s_e3_state__coll__graph.md5 | 1 + ...1_1_m_s_c_eq_f_s_e3_state__coll__graph.png | Bin 0 -> 6109 bytes ..._m_s_c_eq_f_s_e3_state__inherit__graph.map | 5 + ..._m_s_c_eq_f_s_e3_state__inherit__graph.md5 | 1 + ..._m_s_c_eq_f_s_e3_state__inherit__graph.png | Bin 0 -> 6109 bytes ...f_1_1_m_s_c_eq_f_s_o_t3_state-members.html | 134 + structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html | 352 +++ structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.js | 9 + ...1_m_s_c_eq_f_s_o_t3_state__coll__graph.map | 5 + ...1_m_s_c_eq_f_s_o_t3_state__coll__graph.md5 | 1 + ...1_m_s_c_eq_f_s_o_t3_state__coll__graph.png | Bin 0 -> 6373 bytes ..._s_c_eq_f_s_o_t3_state__inherit__graph.map | 5 + ..._s_c_eq_f_s_o_t3_state__inherit__graph.md5 | 1 + ..._s_c_eq_f_s_o_t3_state__inherit__graph.png | Bin 0 -> 6373 bytes ...msceqf_1_1_propagator_options-members.html | 122 + structmsceqf_1_1_propagator_options.html | 148 ++ structmsceqf_1_1_propagator_options.js | 9 + structmsceqf_1_1_radtan_camera-members.html | 142 ++ structmsceqf_1_1_radtan_camera.html | 318 +++ structmsceqf_1_1_radtan_camera.js | 5 + ...tmsceqf_1_1_radtan_camera__coll__graph.map | 5 + ...tmsceqf_1_1_radtan_camera__coll__graph.md5 | 1 + ...tmsceqf_1_1_radtan_camera__coll__graph.png | Bin 0 -> 5196 bytes ...ceqf_1_1_radtan_camera__inherit__graph.map | 5 + ...ceqf_1_1_radtan_camera__inherit__graph.md5 | 1 + ...ceqf_1_1_radtan_camera__inherit__graph.png | Bin 0 -> 5196 bytes structmsceqf_1_1_state_options-members.html | 126 + structmsceqf_1_1_state_options.html | 168 ++ structmsceqf_1_1_state_options.js | 13 + structmsceqf_1_1_track-members.html | 125 + structmsceqf_1_1_track.html | 304 +++ structmsceqf_1_1_track.js | 12 + ...eqf_1_1_track_manager_options-members.html | 118 + structmsceqf_1_1_track_manager_options.html | 148 ++ structmsceqf_1_1_track_manager_options.js | 5 + ...1_1_track_manager_options__coll__graph.map | 11 + ...1_1_track_manager_options__coll__graph.md5 | 1 + ...1_1_track_manager_options__coll__graph.png | Bin 0 -> 22052 bytes structmsceqf_1_1_tracker_options-members.html | 132 + structmsceqf_1_1_tracker_options.html | 202 ++ structmsceqf_1_1_tracker_options.js | 19 + ...sceqf_1_1_tracker_options__coll__graph.map | 9 + ...sceqf_1_1_tracker_options__coll__graph.md5 | 1 + ...sceqf_1_1_tracker_options__coll__graph.png | Bin 0 -> 16431 bytes ...eqf_1_1_triangulated_features-members.html | 122 + structmsceqf_1_1_triangulated_features.html | 161 ++ structmsceqf_1_1_triangulated_features.js | 8 + ...1_1_triangulated_features__coll__graph.map | 5 + ...1_1_triangulated_features__coll__graph.md5 | 1 + ...1_1_triangulated_features__coll__graph.png | Bin 0 -> 5834 bytes structmsceqf_1_1_updater_helper-members.html | 121 + structmsceqf_1_1_updater_helper.html | 342 +++ structmsceqf_1_1_updater_options-members.html | 127 + structmsceqf_1_1_updater_options.html | 168 ++ structmsceqf_1_1_updater_options.js | 14 + ...zero_velocity_updater_options-members.html | 118 + ...eqf_1_1_zero_velocity_updater_options.html | 132 + ...sceqf_1_1_zero_velocity_updater_options.js | 5 + structutils_1_1is__streamable.html | 137 + ...01_6_00b71ef35aa394ab1c5e764056d1aea2a.map | 5 + ...01_6_00b71ef35aa394ab1c5e764056d1aea2a.md5 | 1 + ...01_6_00b71ef35aa394ab1c5e764056d1aea2a.png | Bin 0 -> 7644 bytes ...01_6_0b2a2cd6c00d705f80882ad508db62e0e.map | 5 + ...01_6_0b2a2cd6c00d705f80882ad508db62e0e.md5 | 1 + ...01_6_0b2a2cd6c00d705f80882ad508db62e0e.png | Bin 0 -> 7644 bytes ...1_6_0f58e90958705880955bd917882569c69.html | 137 + ...ctutils_1_1is__streamable__coll__graph.map | 5 + ...ctutils_1_1is__streamable__coll__graph.md5 | 1 + ...ctutils_1_1is__streamable__coll__graph.png | Bin 0 -> 5739 bytes ...tils_1_1is__streamable__inherit__graph.map | 5 + ...tils_1_1is__streamable__inherit__graph.md5 | 1 + ...tils_1_1is__streamable__inherit__graph.png | Bin 0 -> 5739 bytes svg.min.js | 46 + symmetry_8hpp_source.html | 164 ++ sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes system_8hpp_source.html | 240 ++ system__elements_8hpp_source.html | 278 ++ tab_a.png | Bin 0 -> 142 bytes tab_ad.png | Bin 0 -> 135 bytes tab_b.png | Bin 0 -> 169 bytes tab_bd.png | Bin 0 -> 173 bytes tab_h.png | Bin 0 -> 177 bytes tab_hd.png | Bin 0 -> 180 bytes tab_s.png | Bin 0 -> 184 bytes tab_sd.png | Bin 0 -> 188 bytes tabs.css | 1 + tools_8hpp_source.html | 351 +++ track_8hpp_source.html | 236 ++ track__manager_8hpp_source.html | 191 ++ tracker_8hpp_source.html | 201 ++ updater_8hpp_source.html | 182 ++ updater__helper_8hpp_source.html | 312 +++ visualizer_8hpp_source.html | 234 ++ zero__velocity__updater_8hpp_source.html | 171 ++ 744 files changed, 44177 insertions(+) create mode 100644 .nojekyll create mode 100644 annotated.html create mode 100644 annotated_dup.js create mode 100644 bc_s.png create mode 100644 bc_sd.png create mode 100644 camera_8hpp_source.html create mode 100644 checker_8hpp_source.html create mode 100644 class_m_s_c_eq_f_ros-members.html create mode 100644 class_m_s_c_eq_f_ros.html create mode 100644 class_m_s_c_eq_f_ros.js create mode 100644 classes.html create mode 100644 classmsceqf_1_1_checker-members.html create mode 100644 classmsceqf_1_1_checker.html create mode 100644 classmsceqf_1_1_checker.js create mode 100644 classmsceqf_1_1_m_s_c_eq_f-members.html create mode 100644 classmsceqf_1_1_m_s_c_eq_f.html create mode 100644 classmsceqf_1_1_m_s_c_eq_f.js create mode 100644 classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.map create mode 100644 classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.md5 create mode 100644 classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.png create mode 100644 classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.map create mode 100644 classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.md5 create mode 100644 classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.png create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state-members.html create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state.html create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state.js create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state_element-members.html create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state_element.html create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state_element.js create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.map create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.md5 create mode 100644 classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.png create mode 100644 classmsceqf_1_1_option_parser-members.html create mode 100644 classmsceqf_1_1_option_parser.html create mode 100644 classmsceqf_1_1_option_parser.js create mode 100644 classmsceqf_1_1_pinhole_camera-members.html create mode 100644 classmsceqf_1_1_pinhole_camera.html create mode 100644 classmsceqf_1_1_pinhole_camera.js create mode 100644 classmsceqf_1_1_pinhole_camera__inherit__graph.map create mode 100644 classmsceqf_1_1_pinhole_camera__inherit__graph.md5 create mode 100644 classmsceqf_1_1_pinhole_camera__inherit__graph.png create mode 100644 classmsceqf_1_1_projection_helper-members.html create mode 100644 classmsceqf_1_1_projection_helper.html create mode 100644 classmsceqf_1_1_projection_helper.js create mode 100644 classmsceqf_1_1_projection_helper__inherit__graph.map create mode 100644 classmsceqf_1_1_projection_helper__inherit__graph.md5 create mode 100644 classmsceqf_1_1_projection_helper__inherit__graph.png create mode 100644 classmsceqf_1_1_projection_helper_s2-members.html create mode 100644 classmsceqf_1_1_projection_helper_s2.html create mode 100644 classmsceqf_1_1_projection_helper_s2.js create mode 100644 classmsceqf_1_1_projection_helper_s2__coll__graph.map create mode 100644 classmsceqf_1_1_projection_helper_s2__coll__graph.md5 create mode 100644 classmsceqf_1_1_projection_helper_s2__coll__graph.png create mode 100644 classmsceqf_1_1_projection_helper_s2__inherit__graph.map create mode 100644 classmsceqf_1_1_projection_helper_s2__inherit__graph.md5 create mode 100644 classmsceqf_1_1_projection_helper_s2__inherit__graph.png create mode 100644 classmsceqf_1_1_projection_helper_z1-members.html create mode 100644 classmsceqf_1_1_projection_helper_z1.html create mode 100644 classmsceqf_1_1_projection_helper_z1.js create mode 100644 classmsceqf_1_1_projection_helper_z1__coll__graph.map create mode 100644 classmsceqf_1_1_projection_helper_z1__coll__graph.md5 create mode 100644 classmsceqf_1_1_projection_helper_z1__coll__graph.png create mode 100644 classmsceqf_1_1_projection_helper_z1__inherit__graph.map create mode 100644 classmsceqf_1_1_projection_helper_z1__inherit__graph.md5 create mode 100644 classmsceqf_1_1_projection_helper_z1__inherit__graph.png create mode 100644 classmsceqf_1_1_propagator-members.html create mode 100644 classmsceqf_1_1_propagator.html create mode 100644 classmsceqf_1_1_propagator.js create mode 100644 classmsceqf_1_1_static_initializer-members.html create mode 100644 classmsceqf_1_1_static_initializer.html create mode 100644 classmsceqf_1_1_static_initializer.js create mode 100644 classmsceqf_1_1_symmetry-members.html create mode 100644 classmsceqf_1_1_symmetry.html create mode 100644 classmsceqf_1_1_system_state-members.html create mode 100644 classmsceqf_1_1_system_state.html create mode 100644 classmsceqf_1_1_system_state.js create mode 100644 classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.map create mode 100644 classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.md5 create mode 100644 classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.png create mode 100644 classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.map create mode 100644 classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.md5 create mode 100644 classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.png create mode 100644 classmsceqf_1_1_system_state_element-members.html create mode 100644 classmsceqf_1_1_system_state_element.html create mode 100644 classmsceqf_1_1_system_state_element.js create mode 100644 classmsceqf_1_1_system_state_element__inherit__graph.map create mode 100644 classmsceqf_1_1_system_state_element__inherit__graph.md5 create mode 100644 classmsceqf_1_1_system_state_element__inherit__graph.png create mode 100644 classmsceqf_1_1_track_manager-members.html create mode 100644 classmsceqf_1_1_track_manager.html create mode 100644 classmsceqf_1_1_track_manager.js create mode 100644 classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.map create mode 100644 classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.md5 create mode 100644 classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.png create mode 100644 classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.map create mode 100644 classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.md5 create mode 100644 classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.png create mode 100644 classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.map create mode 100644 classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.md5 create mode 100644 classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.png create mode 100644 classmsceqf_1_1_tracker-members.html create mode 100644 classmsceqf_1_1_tracker.html create mode 100644 classmsceqf_1_1_tracker.js create mode 100644 classmsceqf_1_1_updater-members.html create mode 100644 classmsceqf_1_1_updater.html create mode 100644 classmsceqf_1_1_updater.js create mode 100644 classmsceqf_1_1_visualizer-members.html create mode 100644 classmsceqf_1_1_visualizer.html create mode 100644 classmsceqf_1_1_visualizer.js create mode 100644 classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.map create mode 100644 classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.md5 create mode 100644 classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.png create mode 100644 classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.map create mode 100644 classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.md5 create mode 100644 classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.png create mode 100644 classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.map create mode 100644 classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.md5 create mode 100644 classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.png create mode 100644 classmsceqf_1_1_zero_velocity_updater-members.html create mode 100644 classmsceqf_1_1_zero_velocity_updater.html create mode 100644 classmsceqf_1_1_zero_velocity_updater.js create mode 100644 classutils_1_1_insertion_ordered_map-members.html create mode 100644 classutils_1_1_insertion_ordered_map.html create mode 100644 classutils_1_1_insertion_ordered_map.js create mode 100644 classutils_1_1_insertion_ordered_map__inherit__graph.map create mode 100644 classutils_1_1_insertion_ordered_map__inherit__graph.md5 create mode 100644 classutils_1_1_insertion_ordered_map__inherit__graph.png create mode 100644 classutils_1_1_logger-members.html create mode 100644 classutils_1_1_logger.html create mode 100644 clipboard.js create mode 100644 closed.png create mode 100644 cookie.js create mode 100644 dir_0ad255a918b7fba820a1ddafed6fa637.html create mode 100644 dir_0ad255a918b7fba820a1ddafed6fa637.js create mode 100644 dir_0ad255a918b7fba820a1ddafed6fa637_dep.map create mode 100644 dir_0ad255a918b7fba820a1ddafed6fa637_dep.md5 create mode 100644 dir_0ad255a918b7fba820a1ddafed6fa637_dep.png create mode 100644 dir_3f2b7730da608901a4b99a4d72613b7a.html create mode 100644 dir_3f2b7730da608901a4b99a4d72613b7a.js create mode 100644 dir_3f2b7730da608901a4b99a4d72613b7a_dep.map create mode 100644 dir_3f2b7730da608901a4b99a4d72613b7a_dep.md5 create mode 100644 dir_3f2b7730da608901a4b99a4d72613b7a_dep.png create mode 100644 dir_5cec92fd47c0900910bbc2480fdfd7be.html create mode 100644 dir_5cec92fd47c0900910bbc2480fdfd7be.js create mode 100644 dir_6bb3bf6d14f66522c3468e1b55d76771.html create mode 100644 dir_6bb3bf6d14f66522c3468e1b55d76771.js create mode 100644 dir_6bb3bf6d14f66522c3468e1b55d76771_dep.map create mode 100644 dir_6bb3bf6d14f66522c3468e1b55d76771_dep.md5 create mode 100644 dir_6bb3bf6d14f66522c3468e1b55d76771_dep.png create mode 100644 dir_821002d4f10779a80d4fb17bc32f21f1.html create mode 100644 dir_821002d4f10779a80d4fb17bc32f21f1.js create mode 100644 dir_821002d4f10779a80d4fb17bc32f21f1_dep.map create mode 100644 dir_821002d4f10779a80d4fb17bc32f21f1_dep.md5 create mode 100644 dir_821002d4f10779a80d4fb17bc32f21f1_dep.png create mode 100644 dir_8987e3b525563327f0de428880c40647.html create mode 100644 dir_8987e3b525563327f0de428880c40647.js create mode 100644 dir_8987e3b525563327f0de428880c40647_dep.map create mode 100644 dir_8987e3b525563327f0de428880c40647_dep.md5 create mode 100644 dir_8987e3b525563327f0de428880c40647_dep.png create mode 100644 dir_993377b6c00ad4f5994cd91ea29d1161.html create mode 100644 dir_993377b6c00ad4f5994cd91ea29d1161.js create mode 100644 dir_993377b6c00ad4f5994cd91ea29d1161_dep.map create mode 100644 dir_993377b6c00ad4f5994cd91ea29d1161_dep.md5 create mode 100644 dir_993377b6c00ad4f5994cd91ea29d1161_dep.png create mode 100644 dir_ab1e5beeb058366671750909505e3165.html create mode 100644 dir_ab1e5beeb058366671750909505e3165.js create mode 100644 dir_ab1e5beeb058366671750909505e3165_dep.map create mode 100644 dir_ab1e5beeb058366671750909505e3165_dep.md5 create mode 100644 dir_ab1e5beeb058366671750909505e3165_dep.png create mode 100644 dir_b5890cce8ed709a85ddd543f1a2a5ff2.html create mode 100644 dir_b5890cce8ed709a85ddd543f1a2a5ff2.js create mode 100644 dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.map create mode 100644 dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.md5 create mode 100644 dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.png create mode 100644 dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.html create mode 100644 dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.js create mode 100644 dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.map create mode 100644 dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.md5 create mode 100644 dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.png create mode 100644 dir_c1e55025cdee8ca5c3a305d8e87e79d0.html create mode 100644 dir_c1e55025cdee8ca5c3a305d8e87e79d0.js create mode 100644 dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.map create mode 100644 dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.md5 create mode 100644 dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.png create mode 100644 dir_c4990541912a67b8bc941e361556c84e.html create mode 100644 dir_c4990541912a67b8bc941e361556c84e.js create mode 100644 dir_c4990541912a67b8bc941e361556c84e_dep.map create mode 100644 dir_c4990541912a67b8bc941e361556c84e_dep.md5 create mode 100644 dir_c4990541912a67b8bc941e361556c84e_dep.png create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.js create mode 100644 dir_daf8d2f1b5aa26079c0e1db96e2157f7.html create mode 100644 dir_daf8d2f1b5aa26079c0e1db96e2157f7.js create mode 100644 dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.map create mode 100644 dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.md5 create mode 100644 dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.png create mode 100644 dir_ebe552be396c660935f2efa76e6989b7.html create mode 100644 dir_ebe552be396c660935f2efa76e6989b7.js create mode 100644 dir_ebe552be396c660935f2efa76e6989b7_dep.map create mode 100644 dir_ebe552be396c660935f2efa76e6989b7_dep.md5 create mode 100644 dir_ebe552be396c660935f2efa76e6989b7_dep.png create mode 100644 dir_ec8c128d97e5fa483ab11a8a22012ca3.html create mode 100644 dir_ec8c128d97e5fa483ab11a8a22012ca3.js create mode 100644 dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.map create mode 100644 dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.md5 create mode 100644 dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.png create mode 100644 dir_f3487fe4a0195986466b4d5e74f4eea0.html create mode 100644 dir_f3487fe4a0195986466b4d5e74f4eea0.js create mode 100644 dir_f3487fe4a0195986466b4d5e74f4eea0_dep.map create mode 100644 dir_f3487fe4a0195986466b4d5e74f4eea0_dep.md5 create mode 100644 dir_f3487fe4a0195986466b4d5e74f4eea0_dep.png create mode 100644 dir_f55af2754190f9dcf47967cf64d54fa0.html create mode 100644 dir_f55af2754190f9dcf47967cf64d54fa0.js create mode 100644 dir_f55af2754190f9dcf47967cf64d54fa0_dep.map create mode 100644 dir_f55af2754190f9dcf47967cf64d54fa0_dep.md5 create mode 100644 dir_f55af2754190f9dcf47967cf64d54fa0_dep.png create mode 100644 dir_ff799a592ed72ce1c58ad18aa13e1049.html create mode 100644 dir_ff799a592ed72ce1c58ad18aa13e1049.js create mode 100644 dir_ff799a592ed72ce1c58ad18aa13e1049_dep.map create mode 100644 dir_ff799a592ed72ce1c58ad18aa13e1049_dep.md5 create mode 100644 dir_ff799a592ed72ce1c58ad18aa13e1049_dep.png create mode 100644 doc.svg create mode 100644 docd.svg create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 doxygen_crawl.html create mode 100644 dynsections.js create mode 100644 features_8hpp_source.html create mode 100644 files.html create mode 100644 files_dup.js create mode 100644 folderclosed.svg create mode 100644 folderclosedd.svg create mode 100644 folderopen.svg create mode 100644 folderopend.svg create mode 100644 fptypes_8hpp_source.html create mode 100644 functions.html create mode 100644 functions_b.html create mode 100644 functions_c.html create mode 100644 functions_d.html create mode 100644 functions_dup.js create mode 100644 functions_e.html create mode 100644 functions_f.html create mode 100644 functions_func.html create mode 100644 functions_g.html create mode 100644 functions_h.html create mode 100644 functions_i.html create mode 100644 functions_k.html create mode 100644 functions_l.html create mode 100644 functions_m.html create mode 100644 functions_n.html create mode 100644 functions_o.html create mode 100644 functions_p.html create mode 100644 functions_q.html create mode 100644 functions_r.html create mode 100644 functions_rela.html create mode 100644 functions_s.html create mode 100644 functions_t.html create mode 100644 functions_type.html create mode 100644 functions_u.html create mode 100644 functions_v.html create mode 100644 functions_vars.html create mode 100644 functions_w.html create mode 100644 functions_x.html create mode 100644 functions_z.html create mode 100644 graph_legend.html create mode 100644 graph_legend.md5 create mode 100644 graph_legend.png create mode 100644 hierarchy.html create mode 100644 hierarchy.js create mode 100644 index.html create mode 100644 inherit_graph_0.map create mode 100644 inherit_graph_0.md5 create mode 100644 inherit_graph_0.png create mode 100644 inherit_graph_1.map create mode 100644 inherit_graph_1.md5 create mode 100644 inherit_graph_1.png create mode 100644 inherit_graph_10.map create mode 100644 inherit_graph_10.md5 create mode 100644 inherit_graph_10.png create mode 100644 inherit_graph_11.map create mode 100644 inherit_graph_11.md5 create mode 100644 inherit_graph_11.png create mode 100644 inherit_graph_12.map create mode 100644 inherit_graph_12.md5 create mode 100644 inherit_graph_12.png create mode 100644 inherit_graph_13.map create mode 100644 inherit_graph_13.md5 create mode 100644 inherit_graph_13.png create mode 100644 inherit_graph_14.map create mode 100644 inherit_graph_14.md5 create mode 100644 inherit_graph_14.png create mode 100644 inherit_graph_15.map create mode 100644 inherit_graph_15.md5 create mode 100644 inherit_graph_15.png create mode 100644 inherit_graph_16.map create mode 100644 inherit_graph_16.md5 create mode 100644 inherit_graph_16.png create mode 100644 inherit_graph_17.map create mode 100644 inherit_graph_17.md5 create mode 100644 inherit_graph_17.png create mode 100644 inherit_graph_18.map create mode 100644 inherit_graph_18.md5 create mode 100644 inherit_graph_18.png create mode 100644 inherit_graph_19.map create mode 100644 inherit_graph_19.md5 create mode 100644 inherit_graph_19.png create mode 100644 inherit_graph_2.map create mode 100644 inherit_graph_2.md5 create mode 100644 inherit_graph_2.png create mode 100644 inherit_graph_20.map create mode 100644 inherit_graph_20.md5 create mode 100644 inherit_graph_20.png create mode 100644 inherit_graph_21.map create mode 100644 inherit_graph_21.md5 create mode 100644 inherit_graph_21.png create mode 100644 inherit_graph_22.map create mode 100644 inherit_graph_22.md5 create mode 100644 inherit_graph_22.png create mode 100644 inherit_graph_23.map create mode 100644 inherit_graph_23.md5 create mode 100644 inherit_graph_23.png create mode 100644 inherit_graph_24.map create mode 100644 inherit_graph_24.md5 create mode 100644 inherit_graph_24.png create mode 100644 inherit_graph_25.map create mode 100644 inherit_graph_25.md5 create mode 100644 inherit_graph_25.png create mode 100644 inherit_graph_26.map create mode 100644 inherit_graph_26.md5 create mode 100644 inherit_graph_26.png create mode 100644 inherit_graph_27.map create mode 100644 inherit_graph_27.md5 create mode 100644 inherit_graph_27.png create mode 100644 inherit_graph_28.map create mode 100644 inherit_graph_28.md5 create mode 100644 inherit_graph_28.png create mode 100644 inherit_graph_29.map create mode 100644 inherit_graph_29.md5 create mode 100644 inherit_graph_29.png create mode 100644 inherit_graph_3.map create mode 100644 inherit_graph_3.md5 create mode 100644 inherit_graph_3.png create mode 100644 inherit_graph_30.map create mode 100644 inherit_graph_30.md5 create mode 100644 inherit_graph_30.png create mode 100644 inherit_graph_31.map create mode 100644 inherit_graph_31.md5 create mode 100644 inherit_graph_31.png create mode 100644 inherit_graph_32.map create mode 100644 inherit_graph_32.md5 create mode 100644 inherit_graph_32.png create mode 100644 inherit_graph_33.map create mode 100644 inherit_graph_33.md5 create mode 100644 inherit_graph_33.png create mode 100644 inherit_graph_34.map create mode 100644 inherit_graph_34.md5 create mode 100644 inherit_graph_34.png create mode 100644 inherit_graph_35.map create mode 100644 inherit_graph_35.md5 create mode 100644 inherit_graph_35.png create mode 100644 inherit_graph_36.map create mode 100644 inherit_graph_36.md5 create mode 100644 inherit_graph_36.png create mode 100644 inherit_graph_37.map create mode 100644 inherit_graph_37.md5 create mode 100644 inherit_graph_37.png create mode 100644 inherit_graph_38.map create mode 100644 inherit_graph_38.md5 create mode 100644 inherit_graph_38.png create mode 100644 inherit_graph_39.map create mode 100644 inherit_graph_39.md5 create mode 100644 inherit_graph_39.png create mode 100644 inherit_graph_4.map create mode 100644 inherit_graph_4.md5 create mode 100644 inherit_graph_4.png create mode 100644 inherit_graph_40.map create mode 100644 inherit_graph_40.md5 create mode 100644 inherit_graph_40.png create mode 100644 inherit_graph_41.map create mode 100644 inherit_graph_41.md5 create mode 100644 inherit_graph_41.png create mode 100644 inherit_graph_5.map create mode 100644 inherit_graph_5.md5 create mode 100644 inherit_graph_5.png create mode 100644 inherit_graph_6.map create mode 100644 inherit_graph_6.md5 create mode 100644 inherit_graph_6.png create mode 100644 inherit_graph_7.map create mode 100644 inherit_graph_7.md5 create mode 100644 inherit_graph_7.png create mode 100644 inherit_graph_8.map create mode 100644 inherit_graph_8.md5 create mode 100644 inherit_graph_8.png create mode 100644 inherit_graph_9.map create mode 100644 inherit_graph_9.md5 create mode 100644 inherit_graph_9.png create mode 100644 inherits.html create mode 100644 jquery.js create mode 100644 logger_8hpp_source.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 minus.svg create mode 100644 minusd.svg create mode 100644 msceqf_8hpp_source.html create mode 100644 msceqf__option__parser_8hpp_source.html create mode 100644 msceqf__options_8hpp_source.html create mode 100644 msceqf__ros_8hpp_source.html create mode 100644 msceqf_logo_docs.png create mode 100644 nav_f.png create mode 100644 nav_fd.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 nav_hd.png create mode 100644 navtree.css create mode 100644 navtree.js create mode 100644 navtreedata.js create mode 100644 navtreeindex0.js create mode 100644 navtreeindex1.js create mode 100644 open.png create mode 100644 plus.svg create mode 100644 plusd.svg create mode 100644 propagator_8hpp_source.html create mode 100644 resize.js create mode 100644 search/all_0.js create mode 100644 search/all_1.js create mode 100644 search/all_10.js create mode 100644 search/all_11.js create mode 100644 search/all_12.js create mode 100644 search/all_13.js create mode 100644 search/all_14.js create mode 100644 search/all_15.js create mode 100644 search/all_16.js create mode 100644 search/all_17.js create mode 100644 search/all_2.js create mode 100644 search/all_3.js create mode 100644 search/all_4.js create mode 100644 search/all_5.js create mode 100644 search/all_6.js create mode 100644 search/all_7.js create mode 100644 search/all_8.js create mode 100644 search/all_9.js create mode 100644 search/all_a.js create mode 100644 search/all_b.js create mode 100644 search/all_c.js create mode 100644 search/all_d.js create mode 100644 search/all_e.js create mode 100644 search/all_f.js create mode 100644 search/classes_0.js create mode 100644 search/classes_1.js create mode 100644 search/classes_2.js create mode 100644 search/classes_3.js create mode 100644 search/classes_4.js create mode 100644 search/classes_5.js create mode 100644 search/classes_6.js create mode 100644 search/classes_7.js create mode 100644 search/classes_8.js create mode 100644 search/classes_9.js create mode 100644 search/classes_a.js create mode 100644 search/classes_b.js create mode 100644 search/classes_c.js create mode 100644 search/classes_d.js create mode 100644 search/classes_e.js create mode 100644 search/classes_f.js create mode 100644 search/close.svg create mode 100644 search/functions_0.js create mode 100644 search/functions_1.js create mode 100644 search/functions_10.js create mode 100644 search/functions_11.js create mode 100644 search/functions_12.js create mode 100644 search/functions_13.js create mode 100644 search/functions_14.js create mode 100644 search/functions_15.js create mode 100644 search/functions_16.js create mode 100644 search/functions_2.js create mode 100644 search/functions_3.js create mode 100644 search/functions_4.js create mode 100644 search/functions_5.js create mode 100644 search/functions_6.js create mode 100644 search/functions_7.js create mode 100644 search/functions_8.js create mode 100644 search/functions_9.js create mode 100644 search/functions_a.js create mode 100644 search/functions_b.js create mode 100644 search/functions_c.js create mode 100644 search/functions_d.js create mode 100644 search/functions_e.js create mode 100644 search/functions_f.js create mode 100644 search/mag.svg create mode 100644 search/mag_d.svg create mode 100644 search/mag_sel.svg create mode 100644 search/mag_seld.svg create mode 100644 search/pages_0.js create mode 100644 search/related_0.js create mode 100644 search/related_1.js create mode 100644 search/related_2.js create mode 100644 search/related_3.js create mode 100644 search/related_4.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/searchdata.js create mode 100644 search/typedefs_0.js create mode 100644 search/typedefs_1.js create mode 100644 search/typedefs_2.js create mode 100644 search/typedefs_3.js create mode 100644 search/typedefs_4.js create mode 100644 search/typedefs_5.js create mode 100644 search/variables_0.js create mode 100644 search/variables_1.js create mode 100644 search/variables_10.js create mode 100644 search/variables_11.js create mode 100644 search/variables_12.js create mode 100644 search/variables_13.js create mode 100644 search/variables_14.js create mode 100644 search/variables_15.js create mode 100644 search/variables_2.js create mode 100644 search/variables_3.js create mode 100644 search/variables_4.js create mode 100644 search/variables_5.js create mode 100644 search/variables_6.js create mode 100644 search/variables_7.js create mode 100644 search/variables_8.js create mode 100644 search/variables_9.js create mode 100644 search/variables_a.js create mode 100644 search/variables_b.js create mode 100644 search/variables_c.js create mode 100644 search/variables_d.js create mode 100644 search/variables_e.js create mode 100644 search/variables_f.js create mode 100644 sensor__data_8hpp_source.html create mode 100644 splitbar.png create mode 100644 splitbard.png create mode 100644 state_8hpp_source.html create mode 100644 state__elements_8hpp_source.html create mode 100644 static__initializer_8hpp_source.html create mode 100644 structmsceqf_1_1_bias_state-members.html create mode 100644 structmsceqf_1_1_bias_state.html create mode 100644 structmsceqf_1_1_bias_state.js create mode 100644 structmsceqf_1_1_bias_state__coll__graph.map create mode 100644 structmsceqf_1_1_bias_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_bias_state__coll__graph.png create mode 100644 structmsceqf_1_1_bias_state__inherit__graph.map create mode 100644 structmsceqf_1_1_bias_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_bias_state__inherit__graph.png create mode 100644 structmsceqf_1_1_camera-members.html create mode 100644 structmsceqf_1_1_camera.html create mode 100644 structmsceqf_1_1_camera.js create mode 100644 structmsceqf_1_1_camera_extrinsic_state-members.html create mode 100644 structmsceqf_1_1_camera_extrinsic_state.html create mode 100644 structmsceqf_1_1_camera_extrinsic_state.js create mode 100644 structmsceqf_1_1_camera_extrinsic_state__coll__graph.map create mode 100644 structmsceqf_1_1_camera_extrinsic_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_camera_extrinsic_state__coll__graph.png create mode 100644 structmsceqf_1_1_camera_extrinsic_state__inherit__graph.map create mode 100644 structmsceqf_1_1_camera_extrinsic_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_camera_extrinsic_state__inherit__graph.png create mode 100644 structmsceqf_1_1_camera_intrinsic_state-members.html create mode 100644 structmsceqf_1_1_camera_intrinsic_state.html create mode 100644 structmsceqf_1_1_camera_intrinsic_state.js create mode 100644 structmsceqf_1_1_camera_intrinsic_state__coll__graph.map create mode 100644 structmsceqf_1_1_camera_intrinsic_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_camera_intrinsic_state__coll__graph.png create mode 100644 structmsceqf_1_1_camera_intrinsic_state__inherit__graph.map create mode 100644 structmsceqf_1_1_camera_intrinsic_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_camera_intrinsic_state__inherit__graph.png create mode 100644 structmsceqf_1_1_camera_options-members.html create mode 100644 structmsceqf_1_1_camera_options.html create mode 100644 structmsceqf_1_1_camera_options.js create mode 100644 structmsceqf_1_1_checker_options-members.html create mode 100644 structmsceqf_1_1_checker_options.html create mode 100644 structmsceqf_1_1_checker_options.js create mode 100644 structmsceqf_1_1_equidistant_camera-members.html create mode 100644 structmsceqf_1_1_equidistant_camera.html create mode 100644 structmsceqf_1_1_equidistant_camera.js create mode 100644 structmsceqf_1_1_equidistant_camera__coll__graph.map create mode 100644 structmsceqf_1_1_equidistant_camera__coll__graph.md5 create mode 100644 structmsceqf_1_1_equidistant_camera__coll__graph.png create mode 100644 structmsceqf_1_1_equidistant_camera__inherit__graph.map create mode 100644 structmsceqf_1_1_equidistant_camera__inherit__graph.md5 create mode 100644 structmsceqf_1_1_equidistant_camera__inherit__graph.png create mode 100644 structmsceqf_1_1_extended_pose_state-members.html create mode 100644 structmsceqf_1_1_extended_pose_state.html create mode 100644 structmsceqf_1_1_extended_pose_state.js create mode 100644 structmsceqf_1_1_extended_pose_state__coll__graph.map create mode 100644 structmsceqf_1_1_extended_pose_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_extended_pose_state__coll__graph.png create mode 100644 structmsceqf_1_1_extended_pose_state__inherit__graph.map create mode 100644 structmsceqf_1_1_extended_pose_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_extended_pose_state__inherit__graph.png create mode 100644 structmsceqf_1_1_fast_options-members.html create mode 100644 structmsceqf_1_1_fast_options.html create mode 100644 structmsceqf_1_1_fast_options.js create mode 100644 structmsceqf_1_1_feat_helper-members.html create mode 100644 structmsceqf_1_1_feat_helper.html create mode 100644 structmsceqf_1_1_feat_helper.js create mode 100644 structmsceqf_1_1_feature_state-members.html create mode 100644 structmsceqf_1_1_feature_state.html create mode 100644 structmsceqf_1_1_feature_state.js create mode 100644 structmsceqf_1_1_feature_state__coll__graph.map create mode 100644 structmsceqf_1_1_feature_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_feature_state__coll__graph.png create mode 100644 structmsceqf_1_1_feature_state__inherit__graph.map create mode 100644 structmsceqf_1_1_feature_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_feature_state__inherit__graph.png create mode 100644 structmsceqf_1_1_features-members.html create mode 100644 structmsceqf_1_1_features.html create mode 100644 structmsceqf_1_1_features.js create mode 100644 structmsceqf_1_1_g_f_t_t_options-members.html create mode 100644 structmsceqf_1_1_g_f_t_t_options.html create mode 100644 structmsceqf_1_1_g_f_t_t_options.js create mode 100644 structmsceqf_1_1_imu-members.html create mode 100644 structmsceqf_1_1_imu.html create mode 100644 structmsceqf_1_1_imu.js create mode 100644 structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.map create mode 100644 structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.md5 create mode 100644 structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.png create mode 100644 structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.map create mode 100644 structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.md5 create mode 100644 structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.png create mode 100644 structmsceqf_1_1_initializer_options-members.html create mode 100644 structmsceqf_1_1_initializer_options.html create mode 100644 structmsceqf_1_1_initializer_options.js create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state-members.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state.js create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_options-members.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_options.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_options.js create mode 100644 structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state-members.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.js create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state-members.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state.js create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state-members.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.js create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.png create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.map create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.md5 create mode 100644 structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.png create mode 100644 structmsceqf_1_1_propagator_options-members.html create mode 100644 structmsceqf_1_1_propagator_options.html create mode 100644 structmsceqf_1_1_propagator_options.js create mode 100644 structmsceqf_1_1_radtan_camera-members.html create mode 100644 structmsceqf_1_1_radtan_camera.html create mode 100644 structmsceqf_1_1_radtan_camera.js create mode 100644 structmsceqf_1_1_radtan_camera__coll__graph.map create mode 100644 structmsceqf_1_1_radtan_camera__coll__graph.md5 create mode 100644 structmsceqf_1_1_radtan_camera__coll__graph.png create mode 100644 structmsceqf_1_1_radtan_camera__inherit__graph.map create mode 100644 structmsceqf_1_1_radtan_camera__inherit__graph.md5 create mode 100644 structmsceqf_1_1_radtan_camera__inherit__graph.png create mode 100644 structmsceqf_1_1_state_options-members.html create mode 100644 structmsceqf_1_1_state_options.html create mode 100644 structmsceqf_1_1_state_options.js create mode 100644 structmsceqf_1_1_track-members.html create mode 100644 structmsceqf_1_1_track.html create mode 100644 structmsceqf_1_1_track.js create mode 100644 structmsceqf_1_1_track_manager_options-members.html create mode 100644 structmsceqf_1_1_track_manager_options.html create mode 100644 structmsceqf_1_1_track_manager_options.js create mode 100644 structmsceqf_1_1_track_manager_options__coll__graph.map create mode 100644 structmsceqf_1_1_track_manager_options__coll__graph.md5 create mode 100644 structmsceqf_1_1_track_manager_options__coll__graph.png create mode 100644 structmsceqf_1_1_tracker_options-members.html create mode 100644 structmsceqf_1_1_tracker_options.html create mode 100644 structmsceqf_1_1_tracker_options.js create mode 100644 structmsceqf_1_1_tracker_options__coll__graph.map create mode 100644 structmsceqf_1_1_tracker_options__coll__graph.md5 create mode 100644 structmsceqf_1_1_tracker_options__coll__graph.png create mode 100644 structmsceqf_1_1_triangulated_features-members.html create mode 100644 structmsceqf_1_1_triangulated_features.html create mode 100644 structmsceqf_1_1_triangulated_features.js create mode 100644 structmsceqf_1_1_triangulated_features__coll__graph.map create mode 100644 structmsceqf_1_1_triangulated_features__coll__graph.md5 create mode 100644 structmsceqf_1_1_triangulated_features__coll__graph.png create mode 100644 structmsceqf_1_1_updater_helper-members.html create mode 100644 structmsceqf_1_1_updater_helper.html create mode 100644 structmsceqf_1_1_updater_options-members.html create mode 100644 structmsceqf_1_1_updater_options.html create mode 100644 structmsceqf_1_1_updater_options.js create mode 100644 structmsceqf_1_1_zero_velocity_updater_options-members.html create mode 100644 structmsceqf_1_1_zero_velocity_updater_options.html create mode 100644 structmsceqf_1_1_zero_velocity_updater_options.js create mode 100644 structutils_1_1is__streamable.html create mode 100644 structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.map create mode 100644 structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.md5 create mode 100644 structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.png create mode 100644 structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.map create mode 100644 structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.md5 create mode 100644 structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.png create mode 100644 structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html create mode 100644 structutils_1_1is__streamable__coll__graph.map create mode 100644 structutils_1_1is__streamable__coll__graph.md5 create mode 100644 structutils_1_1is__streamable__coll__graph.png create mode 100644 structutils_1_1is__streamable__inherit__graph.map create mode 100644 structutils_1_1is__streamable__inherit__graph.md5 create mode 100644 structutils_1_1is__streamable__inherit__graph.png create mode 100644 svg.min.js create mode 100644 symmetry_8hpp_source.html create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 system_8hpp_source.html create mode 100644 system__elements_8hpp_source.html create mode 100644 tab_a.png create mode 100644 tab_ad.png create mode 100644 tab_b.png create mode 100644 tab_bd.png create mode 100644 tab_h.png create mode 100644 tab_hd.png create mode 100644 tab_s.png create mode 100644 tab_sd.png create mode 100644 tabs.css create mode 100644 tools_8hpp_source.html create mode 100644 track_8hpp_source.html create mode 100644 track__manager_8hpp_source.html create mode 100644 tracker_8hpp_source.html create mode 100644 updater_8hpp_source.html create mode 100644 updater__helper_8hpp_source.html create mode 100644 visualizer_8hpp_source.html create mode 100644 zero__velocity__updater_8hpp_source.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..b1a308a --- /dev/null +++ b/annotated.html @@ -0,0 +1,173 @@ + + + + + + + +MSCEqF: Class List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Nmsceqf
 CBiasStateThis struct represent the IMU bias state of the system
 CCamera
 CCameraExtrinsicStateThis struct represent the camera extrinsics state of the system
 CCameraIntrinsicStateThis struct represent the camera intrinsics state of the system
 CCameraOptions
 CCheckerSimple class to perform various checks
 CCheckerOptions
 CEquidistantCamera
 CExtendedPoseStateThis struct represent the extended pose state of the system
 CFastOptions
 CFeatHelperFeatHelper struct. This struct implements a helper structure holding all the information related to a single feature measurement to be used in the computation of the C matrix, Cf matrix and residual delta, for the MSCEqF update
 CFeatures(Cache friendly) Features struct. Define a set of features detected/tracked
 CFeatureStateThis struct represent a single persistent feature state of the system
 CGFTTOptions
 CImuStruct for one IMU reading. It includes timestamp, angular velocity and linear acceleration. -1 indicates an invalid timestamp
 CInitializerOptions
 CMSCEqF
 CMSCEqFInStateThis struct represent the Intrinsic state of the MSCEqF
 CMSCEqFOptions
 CMSCEqFSDBStateThis struct represent the Semi Direct bias state of the MSCEqF
 CMSCEqFSE3StateThis struct represent the Special Euclidean Group of dimension 3 state of the MSCEqF
 CMSCEqFSOT3StateThis struct represent the Scaled Orthogonal Transforms state of the MSCEqF
 CMSCEqFStateThis class represent the state of the MSCEqF. This includes the state of the lifted system (element of the symmetry group) and the covariance
 CMSCEqFStateElementThis class represent the base class for a general element of the MSCEqF state. This include the index of the variable (index in the residual, and in the covariance), and the degrees of freedom
 COptionParser
 CPinholeCameraThis class represnt the base class for any pinhole camera type
 CProjectionHelperProjectionHelper interface. This class provides an interface to the implementation of the projection function as well as its differential
 CProjectionHelperS2ProjectionHelperS2 class. This class provides an implementation of the projection on the unit sphere as well as its differential
 CProjectionHelperZ1ProjectionHelperZ1 class. This class provides an implementation of the projection on the unit plane as well as its differential
 CPropagator
 CPropagatorOptions
 CRadtanCameraThis class represent a pinhole camera with radtan distortion model
 CStateOptions
 CStaticInitializer
 CSymmetry
 CSystemStateRepresent the state of the system posed on the Homogenous space
 CSystemStateElementThis struct represent the base struct for a general element of the system state
 CTrack(Cache friendly) Track struct. Define a feature (labeled via a feature id) detected/tracked at different points in time
 CTrackerThis class implement the feature tracker module based on Lucas-Kanade optical flow. The tracker tracks feature temporally in subsequent images and produces a set of matches
 CTrackerOptions
 CTrackManagerThis class manages the multiple tracks of feature traked in time
 CTrackManagerOptions
 CTriangulatedFeatures
 CUpdaterUpdater class. This class implements the Multi State Constraint update step of the MSCEqF filter
 CUpdaterHelperUpdater helper struct. This structs implements common helper methods for MSCEqF update
 CUpdaterOptions
 CVisualizer
 CZeroVelocityUpdaterZero velocity updater class. This class implements the Equivariant Zero Velocity Update (ZVU) of the MSCEqF filter
 CZeroVelocityUpdaterOptions
 Nutils
 CInsertionOrderedMapThis calss define a map that keeps the insertion order
 Cis_streamable
 Cis_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>
 CLoggerLogger
 CMSCEqFRos
+
+
+
+ + + + diff --git a/annotated_dup.js b/annotated_dup.js new file mode 100644 index 0000000..bf09218 --- /dev/null +++ b/annotated_dup.js @@ -0,0 +1,61 @@ +var annotated_dup = +[ + [ "msceqf", null, [ + [ "BiasState", "structmsceqf_1_1_bias_state.html", "structmsceqf_1_1_bias_state" ], + [ "Camera", "structmsceqf_1_1_camera.html", "structmsceqf_1_1_camera" ], + [ "CameraExtrinsicState", "structmsceqf_1_1_camera_extrinsic_state.html", "structmsceqf_1_1_camera_extrinsic_state" ], + [ "CameraIntrinsicState", "structmsceqf_1_1_camera_intrinsic_state.html", "structmsceqf_1_1_camera_intrinsic_state" ], + [ "CameraOptions", "structmsceqf_1_1_camera_options.html", "structmsceqf_1_1_camera_options" ], + [ "Checker", "classmsceqf_1_1_checker.html", "classmsceqf_1_1_checker" ], + [ "CheckerOptions", "structmsceqf_1_1_checker_options.html", "structmsceqf_1_1_checker_options" ], + [ "EquidistantCamera", "structmsceqf_1_1_equidistant_camera.html", "structmsceqf_1_1_equidistant_camera" ], + [ "ExtendedPoseState", "structmsceqf_1_1_extended_pose_state.html", "structmsceqf_1_1_extended_pose_state" ], + [ "FastOptions", "structmsceqf_1_1_fast_options.html", "structmsceqf_1_1_fast_options" ], + [ "FeatHelper", "structmsceqf_1_1_feat_helper.html", "structmsceqf_1_1_feat_helper" ], + [ "Features", "structmsceqf_1_1_features.html", "structmsceqf_1_1_features" ], + [ "FeatureState", "structmsceqf_1_1_feature_state.html", "structmsceqf_1_1_feature_state" ], + [ "GFTTOptions", "structmsceqf_1_1_g_f_t_t_options.html", "structmsceqf_1_1_g_f_t_t_options" ], + [ "Imu", "structmsceqf_1_1_imu.html", "structmsceqf_1_1_imu" ], + [ "InitializerOptions", "structmsceqf_1_1_initializer_options.html", "structmsceqf_1_1_initializer_options" ], + [ "MSCEqF", "classmsceqf_1_1_m_s_c_eq_f.html", "classmsceqf_1_1_m_s_c_eq_f" ], + [ "MSCEqFInState", "structmsceqf_1_1_m_s_c_eq_f_in_state.html", "structmsceqf_1_1_m_s_c_eq_f_in_state" ], + [ "MSCEqFOptions", "structmsceqf_1_1_m_s_c_eq_f_options.html", "structmsceqf_1_1_m_s_c_eq_f_options" ], + [ "MSCEqFSDBState", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state" ], + [ "MSCEqFSE3State", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state" ], + [ "MSCEqFSOT3State", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state" ], + [ "MSCEqFState", "classmsceqf_1_1_m_s_c_eq_f_state.html", "classmsceqf_1_1_m_s_c_eq_f_state" ], + [ "MSCEqFStateElement", "classmsceqf_1_1_m_s_c_eq_f_state_element.html", "classmsceqf_1_1_m_s_c_eq_f_state_element" ], + [ "OptionParser", "classmsceqf_1_1_option_parser.html", "classmsceqf_1_1_option_parser" ], + [ "PinholeCamera", "classmsceqf_1_1_pinhole_camera.html", "classmsceqf_1_1_pinhole_camera" ], + [ "ProjectionHelper", "classmsceqf_1_1_projection_helper.html", "classmsceqf_1_1_projection_helper" ], + [ "ProjectionHelperS2", "classmsceqf_1_1_projection_helper_s2.html", "classmsceqf_1_1_projection_helper_s2" ], + [ "ProjectionHelperZ1", "classmsceqf_1_1_projection_helper_z1.html", "classmsceqf_1_1_projection_helper_z1" ], + [ "Propagator", "classmsceqf_1_1_propagator.html", "classmsceqf_1_1_propagator" ], + [ "PropagatorOptions", "structmsceqf_1_1_propagator_options.html", "structmsceqf_1_1_propagator_options" ], + [ "RadtanCamera", "structmsceqf_1_1_radtan_camera.html", "structmsceqf_1_1_radtan_camera" ], + [ "StateOptions", "structmsceqf_1_1_state_options.html", "structmsceqf_1_1_state_options" ], + [ "StaticInitializer", "classmsceqf_1_1_static_initializer.html", "classmsceqf_1_1_static_initializer" ], + [ "Symmetry", "classmsceqf_1_1_symmetry.html", null ], + [ "SystemState", "classmsceqf_1_1_system_state.html", "classmsceqf_1_1_system_state" ], + [ "SystemStateElement", "classmsceqf_1_1_system_state_element.html", "classmsceqf_1_1_system_state_element" ], + [ "Track", "structmsceqf_1_1_track.html", "structmsceqf_1_1_track" ], + [ "Tracker", "classmsceqf_1_1_tracker.html", "classmsceqf_1_1_tracker" ], + [ "TrackerOptions", "structmsceqf_1_1_tracker_options.html", "structmsceqf_1_1_tracker_options" ], + [ "TrackManager", "classmsceqf_1_1_track_manager.html", "classmsceqf_1_1_track_manager" ], + [ "TrackManagerOptions", "structmsceqf_1_1_track_manager_options.html", "structmsceqf_1_1_track_manager_options" ], + [ "TriangulatedFeatures", "structmsceqf_1_1_triangulated_features.html", "structmsceqf_1_1_triangulated_features" ], + [ "Updater", "classmsceqf_1_1_updater.html", "classmsceqf_1_1_updater" ], + [ "UpdaterHelper", "structmsceqf_1_1_updater_helper.html", null ], + [ "UpdaterOptions", "structmsceqf_1_1_updater_options.html", "structmsceqf_1_1_updater_options" ], + [ "Visualizer", "classmsceqf_1_1_visualizer.html", "classmsceqf_1_1_visualizer" ], + [ "ZeroVelocityUpdater", "classmsceqf_1_1_zero_velocity_updater.html", "classmsceqf_1_1_zero_velocity_updater" ], + [ "ZeroVelocityUpdaterOptions", "structmsceqf_1_1_zero_velocity_updater_options.html", "structmsceqf_1_1_zero_velocity_updater_options" ] + ] ], + [ "utils", null, [ + [ "InsertionOrderedMap", "classutils_1_1_insertion_ordered_map.html", "classutils_1_1_insertion_ordered_map" ], + [ "is_streamable", "structutils_1_1is__streamable.html", null ], + [ "is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>", "structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html", null ], + [ "Logger", "classutils_1_1_logger.html", null ] + ] ], + [ "MSCEqFRos", "class_m_s_c_eq_f_ros.html", "class_m_s_c_eq_f_ros" ] +]; \ No newline at end of file diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/camera_8hpp_source.html b/camera_8hpp_source.html new file mode 100644 index 0000000..026a795 --- /dev/null +++ b/camera_8hpp_source.html @@ -0,0 +1,261 @@ + + + + + + + +MSCEqF: include/vision/camera.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
camera.hpp
+
+
+
1// Copyright (C) 2023 Alessandro Fornasier.
+
2// Control of Networked Systems, University of Klagenfurt, Austria.
+
3//
+
4// All rights reserved.
+
5//
+
6// This software is licensed under the terms of the BSD-2-Clause-License with
+
7// no commercial use allowed, the full terms of which are made available
+
8// in the LICENSE file. No license in patents is granted.
+
9//
+
10// You can contact the authors at <alessandro.fornasier@ieee.org>
+
11
+
12#ifndef CAMERA_HPP
+
13#define CAMERA_HPP
+
14
+
15#include <memory>
+
16#include <opencv2/opencv.hpp>
+
17
+
18#include "msceqf/options/msceqf_options.hpp"
+
19#include "types/fptypes.hpp"
+
20
+
21namespace msceqf
+
22{
+
+ +
28{
+
29 public:
+
30 virtual ~PinholeCamera() = default;
+
31
+
38 void undistort(std::vector<Eigen::Vector2f>& uv, const bool& normalize = false);
+
39
+
46 virtual void undistort(std::vector<cv::Point2f>& uv_cv, const bool& normalize = false) = 0;
+
47
+
54 virtual void undistortImage(const cv::Mat& image, cv::Mat& image_undistorted) = 0;
+
55
+
61 void normalize(std::vector<Eigen::Vector2f>& uv);
+
62
+
68 void normalize(std::vector<cv::Point2f>& uv);
+
69
+
75 void normalize(Eigen::Vector2f& uv);
+
76
+
82 void normalize(cv::Point2f& uv);
+
83
+
89 void denormalize(std::vector<Eigen::Vector2f>& uv);
+
90
+
96 void denormalize(std::vector<cv::Point2f>& uv);
+
97
+
103 void denormalize(Eigen::Vector2f& uv);
+
104
+
110 void denormalize(cv::Point2f& uv);
+
111
+
117 void setIntrinsics(const Vector4& intrinsics);
+
118
+
124 const Vector4& intrinsics() const;
+
125
+
131 const VectorX& distortionCoefficients() const;
+
132
+
133 protected:
+
134 PinholeCamera(const VectorX& distortion_coefficients,
+
135 const Vector4 instrinsics,
+
136 const uint& width,
+
137 const uint& height);
+
138
+
140 PinholeCamera() = delete;
+
141 PinholeCamera(const PinholeCamera&) = delete;
+
142 PinholeCamera(PinholeCamera&&) = delete;
+
143 PinholeCamera& operator=(const PinholeCamera&) = delete;
+
144 PinholeCamera& operator=(PinholeCamera&&) = delete;
+
145
+ +
147 Vector4 intrinsics_;
+
148 uint width_;
+
149 uint height_;
+
150};
+
+
151
+
+
156struct RadtanCamera final : public PinholeCamera
+
157{
+
158 RadtanCamera(const CameraOptions& opts, const Vector4& intrinsics);
+
159
+
166 void undistort(std::vector<cv::Point2f>& uv_cv, const bool& normalize) override;
+
167
+
174 void undistortImage(const cv::Mat& image, cv::Mat& image_undistorted) override;
+
175};
+
+
176
+
+
177struct EquidistantCamera final : public PinholeCamera
+
178{
+
179 EquidistantCamera(const CameraOptions& opts, const Vector4& intrinsics);
+
180
+
187 void undistort(std::vector<cv::Point2f>& uv_cv, const bool& normalize) override;
+
188
+
195 void undistortImage(const cv::Mat& image, cv::Mat& image_undistorted) override;
+
196};
+
+
197
+
198using PinholeCameraSharedPtr = std::shared_ptr<PinholeCamera>;
+
199using PinholeCameraUniquePtr = std::unique_ptr<PinholeCamera>;
+
200using RadtanCameraSharedPtr = std::shared_ptr<RadtanCamera>;
+
201using RadtanCameraUniquePtr = std::unique_ptr<RadtanCamera>;
+
202using EquidistantCameraSharedPtr = std::shared_ptr<EquidistantCamera>;
+
203using EquidistantCameraUniquePtr = std::unique_ptr<EquidistantCamera>;
+
204
+
213template <typename T>
+
214[[nodiscard]] static PinholeCameraUniquePtr createCamera(const CameraOptions& opts, const Vector4& intrinsics)
+
215{
+
216 if constexpr (std::is_base_of_v<PinholeCamera, T>)
+
217 {
+
218 return std::make_unique<T>(opts, intrinsics);
+
219 }
+
220 else
+
221 {
+
222 return nullptr;
+
223 }
+
224}
+
225
+
226} // namespace msceqf
+
227
+
228#endif // CAMERA_HPP
+
This class represnt the base class for any pinhole camera type.
Definition camera.hpp:28
+
virtual void undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize=false)=0
Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)
+
void normalize(cv::Point2f &uv)
Normalize multiple features uv coordinates in OpenCV format (cv::Point2f)
+
void setIntrinsics(const Vector4 &intrinsics)
Set the value of the intrinsic parameters.
+
const Vector4 & intrinsics() const
Get camera intrinsics parameter (fx, fy, cx, cy) as a 4 vector.
+
uint height_
Image height.
Definition camera.hpp:149
+
void denormalize(std::vector< cv::Point2f > &uv)
Denormalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
+
const VectorX & distortionCoefficients() const
Get camera distortion coefficients (k1, k2, p1, p2, ...) as a vector.
+
void normalize(std::vector< Eigen::Vector2f > &uv)
Normalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
+
PinholeCamera()=delete
Rule of Five.
+
virtual void undistortImage(const cv::Mat &image, cv::Mat &image_undistorted)=0
Undistort given image in openCV format (cv::Mat)
+
uint width_
Image width.
Definition camera.hpp:148
+
void normalize(std::vector< cv::Point2f > &uv)
Normalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
+
void denormalize(std::vector< Eigen::Vector2f > &uv)
Denormalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
+
void normalize(Eigen::Vector2f &uv)
Normalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
+
void undistort(std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)
Undistort given distorted point in Eigen format (std::vector<Eigen::Vector2f>)
+
void denormalize(Eigen::Vector2f &uv)
Denormalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
+
Vector4 intrinsics_
Vector of intrinsic paramater (fx, fy, cx, cy)
Definition camera.hpp:147
+
void denormalize(cv::Point2f &uv)
Denormalize multiple features uv coordinates in OpenCV format (cv::Point2f)
+
VectorX distortion_coefficients_
Vector of distortion coefficients (k1, k2, p1, p2, ...)
Definition camera.hpp:146
+
Definition msceqf_options.hpp:161
+
Definition camera.hpp:178
+
void undistortImage(const cv::Mat &image, cv::Mat &image_undistorted) override
Undistort given image in openCV format (cv::Mat)
+
void undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize) override
Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)
+
This class represent a pinhole camera with radtan distortion model.
Definition camera.hpp:157
+
void undistortImage(const cv::Mat &image, cv::Mat &image_undistorted) override
Undistort given image in openCV format (cv::Mat)
+
void undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize) override
Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)
+
+
+ + + + diff --git a/checker_8hpp_source.html b/checker_8hpp_source.html new file mode 100644 index 0000000..89d71c0 --- /dev/null +++ b/checker_8hpp_source.html @@ -0,0 +1,155 @@ + + + + + + + +MSCEqF: include/msceqf/filter/checker/checker.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
checker.hpp
+
+
+
1// Copyright (C) 2023 Alessandro Fornasier.
+
2// Control of Networked Systems, University of Klagenfurt, Austria.
+
3//
+
4// All rights reserved.
+
5//
+
6// This software is licensed under the terms of the BSD-2-Clause-License with
+
7// no commercial use allowed, the full terms of which are made available
+
8// in the LICENSE file. No license in patents is granted.
+
9//
+
10// You can contact the authors at <alessandro.fornasier@ieee.org>
+
11
+
12#ifndef CHECKER_HPP
+
13#define CHECKER_HPP
+
14
+
15#include "msceqf/options/msceqf_options.hpp"
+
16#include "types/fptypes.hpp"
+
17#include "utils/tools.hpp"
+
18#include "vision/track.hpp"
+
19
+
20namespace msceqf
+
21{
+
+ +
27{
+
28 public:
+
34 Checker(const CheckerOptions& opts);
+
35
+
47 [[nodiscard]] bool disparityCheck(const Tracks& tracks) const;
+
48
+
49 private:
+
50 CheckerOptions opts_;
+
51};
+
+
52
+
53} // namespace msceqf
+
54
+
55#endif // CHECKER_HPP
+
Simple class to perform various checks.
Definition checker.hpp:27
+
Checker(const CheckerOptions &opts)
Checker constructor.
+
bool disparityCheck(const Tracks &tracks) const
Perform disparity check on given tracks.
+
Definition msceqf_options.hpp:155
+
+
+ + + + diff --git a/class_m_s_c_eq_f_ros-members.html b/class_m_s_c_eq_f_ros-members.html new file mode 100644 index 0000000..2e4b4f3 --- /dev/null +++ b/class_m_s_c_eq_f_ros-members.html @@ -0,0 +1,119 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
MSCEqFRos Member List
+
+
+ +

This is the complete list of members for MSCEqFRos, including all inherited members.

+ + + + +
callback_image(const sensor_msgs::Image::ConstPtr &msg)MSCEqFRos
callback_imu(const sensor_msgs::Imu::ConstPtr &msg)MSCEqFRos
MSCEqFRos(const ros::NodeHandle &nh, const std::string &msceqf_config_filepath, const std::string &imu_topic, const std::string &cam_topic, const std::string &pose_topic, const std::string &path_topic, const std::string &image_topic, const std::string &extrinsics_topic, const std::string &intrinsics_topic, const std::string &origin_topic, const bool &record, const std::string &bagfile)MSCEqFRos
+
+ + + + diff --git a/class_m_s_c_eq_f_ros.html b/class_m_s_c_eq_f_ros.html new file mode 100644 index 0000000..1b7e2bd --- /dev/null +++ b/class_m_s_c_eq_f_ros.html @@ -0,0 +1,274 @@ + + + + + + + +MSCEqF: MSCEqFRos Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
MSCEqFRos Class Reference
+
+
+ + + + + + + + + + + +

+Public Member Functions

 MSCEqFRos (const ros::NodeHandle &nh, const std::string &msceqf_config_filepath, const std::string &imu_topic, const std::string &cam_topic, const std::string &pose_topic, const std::string &path_topic, const std::string &image_topic, const std::string &extrinsics_topic, const std::string &intrinsics_topic, const std::string &origin_topic, const bool &record, const std::string &bagfile)
 Constructor.
 
void callback_image (const sensor_msgs::Image::ConstPtr &msg)
 Image callback.
 
void callback_imu (const sensor_msgs::Imu::ConstPtr &msg)
 IMU callback.
 
+

Constructor & Destructor Documentation

+ +

◆ MSCEqFRos()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MSCEqFRos::MSCEqFRos (const ros::NodeHandle & nh,
const std::string & msceqf_config_filepath,
const std::string & imu_topic,
const std::string & cam_topic,
const std::string & pose_topic,
const std::string & path_topic,
const std::string & image_topic,
const std::string & extrinsics_topic,
const std::string & intrinsics_topic,
const std::string & origin_topic,
const bool & record,
const std::string & bagfile )
+
+ +

Constructor.

+
Parameters
+ + + + + + + + + + + + +
RosROS node handle
msceqf_config_filepathPath of configuration yaml file for the msceqf
imu_topicIMU topic
cam_topicCamera topic
pose_topicPose topic
path_topicPath topic
image_topicImage topic
extrinsics_topicExtrinsics topic
intrinsics_topicIntrinsics topic
recordFlag to decide wether record a bagfile or not
bagfileBagfile name
+
+
+ +
+
+

Member Function Documentation

+ +

◆ callback_image()

+ +
+
+ + + + + + + +
void MSCEqFRos::callback_image (const sensor_msgs::Image::ConstPtr & msg)
+
+ +

Image callback.

+
Parameters
+ + +
Messagemessage constant pointer
+
+
+ +
+
+ +

◆ callback_imu()

+ +
+
+ + + + + + + +
void MSCEqFRos::callback_imu (const sensor_msgs::Imu::ConstPtr & msg)
+
+ +

IMU callback.

+
Parameters
+ + +
Messagemessage constant pointer
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/class_m_s_c_eq_f_ros.js b/class_m_s_c_eq_f_ros.js new file mode 100644 index 0000000..6d56246 --- /dev/null +++ b/class_m_s_c_eq_f_ros.js @@ -0,0 +1,6 @@ +var class_m_s_c_eq_f_ros = +[ + [ "MSCEqFRos", "class_m_s_c_eq_f_ros.html#a982967b357cb43548ab7a2e78536daa4", null ], + [ "callback_image", "class_m_s_c_eq_f_ros.html#abab3928b6c09f7a3c580c30c5eef0d45", null ], + [ "callback_imu", "class_m_s_c_eq_f_ros.html#aa2340b07b206b75ffd4e4fdeee562942", null ] +]; \ No newline at end of file diff --git a/classes.html b/classes.html new file mode 100644 index 0000000..6aa3a70 --- /dev/null +++ b/classes.html @@ -0,0 +1,164 @@ + + + + + + + +MSCEqF: Class Index + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | E | F | G | I | L | M | O | P | R | S | T | U | V | Z
+
+
+
B
+
BiasState (msceqf)
+
+
C
+
Camera (msceqf)
CameraExtrinsicState (msceqf)
CameraIntrinsicState (msceqf)
CameraOptions (msceqf)
Checker (msceqf)
CheckerOptions (msceqf)
+
+
E
+
EquidistantCamera (msceqf)
ExtendedPoseState (msceqf)
+
+
F
+
FastOptions (msceqf)
FeatHelper (msceqf)
Features (msceqf)
FeatureState (msceqf)
+
+
G
+
GFTTOptions (msceqf)
+
+
I
+
Imu (msceqf)
InitializerOptions (msceqf)
InsertionOrderedMap (utils)
is_streamable (utils)
is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))> (utils)
+
+
L
+
Logger (utils)
+
+
M
+
MSCEqF (msceqf)
MSCEqFInState (msceqf)
MSCEqFOptions (msceqf)
MSCEqFRos
MSCEqFSDBState (msceqf)
MSCEqFSE3State (msceqf)
MSCEqFSOT3State (msceqf)
MSCEqFState (msceqf)
MSCEqFStateElement (msceqf)
+
+
O
+
OptionParser (msceqf)
+
+
P
+
PinholeCamera (msceqf)
ProjectionHelper (msceqf)
ProjectionHelperS2 (msceqf)
ProjectionHelperZ1 (msceqf)
Propagator (msceqf)
PropagatorOptions (msceqf)
+
+
R
+
RadtanCamera (msceqf)
+
+
S
+
StateOptions (msceqf)
StaticInitializer (msceqf)
Symmetry (msceqf)
SystemState (msceqf)
SystemStateElement (msceqf)
+
+
T
+
Track (msceqf)
Tracker (msceqf)
TrackerOptions (msceqf)
TrackManager (msceqf)
TrackManagerOptions (msceqf)
TriangulatedFeatures (msceqf)
+
+
U
+
Updater (msceqf)
UpdaterHelper (msceqf)
UpdaterOptions (msceqf)
+
+
V
+
Visualizer (msceqf)
+
+
Z
+
ZeroVelocityUpdater (msceqf)
ZeroVelocityUpdaterOptions (msceqf)
+
+
+
+ + + + diff --git a/classmsceqf_1_1_checker-members.html b/classmsceqf_1_1_checker-members.html new file mode 100644 index 0000000..0ee5a03 --- /dev/null +++ b/classmsceqf_1_1_checker-members.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::Checker Member List
+
+
+ +

This is the complete list of members for msceqf::Checker, including all inherited members.

+ + + +
Checker(const CheckerOptions &opts)msceqf::Checker
disparityCheck(const Tracks &tracks) constmsceqf::Checker
+
+ + + + diff --git a/classmsceqf_1_1_checker.html b/classmsceqf_1_1_checker.html new file mode 100644 index 0000000..618479d --- /dev/null +++ b/classmsceqf_1_1_checker.html @@ -0,0 +1,199 @@ + + + + + + + +MSCEqF: msceqf::Checker Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::Checker Class Reference
+
+
+ +

Simple class to perform various checks. + More...

+ +

#include <checker.hpp>

+ + + + + + + + +

+Public Member Functions

 Checker (const CheckerOptions &opts)
 Checker constructor.
 
bool disparityCheck (const Tracks &tracks) const
 Perform disparity check on given tracks.
 
+

Detailed Description

+

Simple class to perform various checks.

+

Constructor & Destructor Documentation

+ +

◆ Checker()

+ +
+
+ + + + + + + +
msceqf::Checker::Checker (const CheckerOptions & opts)
+
+ +

Checker constructor.

+
Parameters
+ + +
optschecker options
+
+
+ +
+
+

Member Function Documentation

+ +

◆ disparityCheck()

+ +
+
+ + + + + +
+ + + + + + + +
bool msceqf::Checker::disparityCheck (const Tracks & tracks) const
+
+nodiscard
+
+ +

Perform disparity check on given tracks.

+
Parameters
+ + +
trackstracks up to date used for disparity check
+
+
+
Returns
true if disparity check succeed (diparity above threshold), false if no disparity is detected (disparity below threshold)
+
Note
This method checks only tracks that are as long as the first track. This ideally should avoid to use newly detected/tracked features corresponding to temporary objects moving in front of the camera
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_checker.js b/classmsceqf_1_1_checker.js new file mode 100644 index 0000000..ca14619 --- /dev/null +++ b/classmsceqf_1_1_checker.js @@ -0,0 +1,5 @@ +var classmsceqf_1_1_checker = +[ + [ "Checker", "classmsceqf_1_1_checker.html#a7b5b818584c855a09faed1cde6f78a6c", null ], + [ "disparityCheck", "classmsceqf_1_1_checker.html#ae352383ab698870d55cd3244f2f1e031", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_m_s_c_eq_f-members.html b/classmsceqf_1_1_m_s_c_eq_f-members.html new file mode 100644 index 0000000..7e20810 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f-members.html @@ -0,0 +1,131 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::MSCEqF Member List
+
+
+ +

This is the complete list of members for msceqf::MSCEqF, including all inherited members.

+ + + + + + + + + + + + + + + + +
coreCovariance() constmsceqf::MSCEqF
covariance() constmsceqf::MSCEqF
imageWithTracks(const Camera &cam) constmsceqf::MSCEqF
isInit() constmsceqf::MSCEqF
MSCEqF(const std::string &params_filepath)msceqf::MSCEqF
options() constmsceqf::MSCEqF
processMeasurement(const Imu &meas)msceqf::MSCEqFinline
processMeasurement(Camera &meas)msceqf::MSCEqFinline
processMeasurement(TriangulatedFeatures &meas)msceqf::MSCEqFinline
setGivenOrigin(const SE23 &T0, const Vector6 &b0, const fp &timestamp)msceqf::MSCEqF
stateEstimate() constmsceqf::MSCEqF
stateOptions() constmsceqf::MSCEqF
stateOrigin() constmsceqf::MSCEqF
visualizeImageWithTracks(const Camera &cam) constmsceqf::MSCEqF
zvuPerformed() constmsceqf::MSCEqF
+
+ + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f.html b/classmsceqf_1_1_m_s_c_eq_f.html new file mode 100644 index 0000000..432b6a7 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f.html @@ -0,0 +1,572 @@ + + + + + + + +MSCEqF: msceqf::MSCEqF Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::MSCEqF Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MSCEqF (const std::string &params_filepath)
 MSCEqF Constructor.
 
void processMeasurement (const Imu &meas)
 Process IMU measurement.
 
void processMeasurement (Camera &meas)
 Process camera measurement.
 
void processMeasurement (TriangulatedFeatures &meas)
 Process triangulated features measurement.
 
const MSCEqFOptionsoptions () const
 Get a constant reference to the MSCEqF options.
 
const StateOptionsstateOptions () const
 Get a constant reference to the MSCEqF state options.
 
const MatrixX & covariance () const
 Get a constant reference to the covariance matrix of the MSCEqF state.
 
const MatrixX coreCovariance () const
 Get the covariance of the navigation states (D, delta)
 
const SystemStatestateEstimate () const
 Get a constant reference to the estimated state.
 
const SystemStatestateOrigin () const
 Get a constant reference to the origin state.
 
void setGivenOrigin (const SE23 &T0, const Vector6 &b0, const fp &timestamp)
 Set origin xi0 with given state programatically.
 
const cv::Mat3b imageWithTracks (const Camera &cam) const
 Get the processed image with overlayed tracks.
 
void visualizeImageWithTracks (const Camera &cam) const
 Visualize the processed image with overlayed tracks.
 
const bool & isInit () const
 Check if the filter is initialized.
 
const bool & zvuPerformed () const
 Check if a zero velocity update has been performed.
 
+

Constructor & Destructor Documentation

+ +

◆ MSCEqF()

+ +
+
+ + + + + + + +
msceqf::MSCEqF::MSCEqF (const std::string & params_filepath)
+
+ +

MSCEqF Constructor.

+
Parameters
+ + +
params_filepathfilepath of the parameter file to be parsed
+
+
+ +
+
+

Member Function Documentation

+ +

◆ coreCovariance()

+ +
+
+ + + + + + + +
const MatrixX msceqf::MSCEqF::coreCovariance () const
+
+ +

Get the covariance of the navigation states (D, delta)

+
Returns
Covariance matrix of the navigation states
+ +
+
+ +

◆ covariance()

+ +
+
+ + + + + + + +
const MatrixX & msceqf::MSCEqF::covariance () const
+
+ +

Get a constant reference to the covariance matrix of the MSCEqF state.

+
Returns
Covariance matrix
+ +
+
+ +

◆ imageWithTracks()

+ +
+
+ + + + + + + +
const cv::Mat3b msceqf::MSCEqF::imageWithTracks (const Camera & cam) const
+
+ +

Get the processed image with overlayed tracks.

+
Returns
OpenCV matrix representing the image with overlayed tracks
+ +
+
+ +

◆ isInit()

+ +
+
+ + + + + +
+ + + + + + + +
const bool & msceqf::MSCEqF::isInit () const
+
+nodiscard
+
+ +

Check if the filter is initialized.

+
Returns
true if the filter is initialized, false otherwise
+ +
+
+ +

◆ options()

+ +
+
+ + + + + + + +
const MSCEqFOptions & msceqf::MSCEqF::options () const
+
+ +

Get a constant reference to the MSCEqF options.

+
Returns
Options
+ +
+
+ +

◆ processMeasurement() [1/3]

+ +
+
+ + + + + +
+ + + + + + + +
void msceqf::MSCEqF::processMeasurement (Camera & meas)
+
+inline
+
+ +

Process camera measurement.

+
Parameters
+ + +
measCamera measurement
+
+
+ +
+
+ +

◆ processMeasurement() [2/3]

+ +
+
+ + + + + +
+ + + + + + + +
void msceqf::MSCEqF::processMeasurement (const Imu & meas)
+
+inline
+
+ +

Process IMU measurement.

+
Parameters
+ + +
measIMU measurement
+
+
+ +
+
+ +

◆ processMeasurement() [3/3]

+ +
+
+ + + + + +
+ + + + + + + +
void msceqf::MSCEqF::processMeasurement (TriangulatedFeatures & meas)
+
+inline
+
+ +

Process triangulated features measurement.

+
Parameters
+ + +
measTriangulated features measurement
+
+
+ +
+
+ +

◆ setGivenOrigin()

+ +
+
+ + + + + + + + + + + + + + + + +
void msceqf::MSCEqF::setGivenOrigin (const SE23 & T0,
const Vector6 & b0,
const fp & timestamp )
+
+ +

Set origin xi0 with given state programatically.

+
Parameters
+ + + + +
T0Origin extended pose
b0Origin bias
timestampinitial timestamp
+
+
+
+Here is the caller graph for this function:
+
+
+ + + + + +
+ +
+
+ +

◆ stateEstimate()

+ +
+
+ + + + + + + +
const SystemState & msceqf::MSCEqF::stateEstimate () const
+
+ +

Get a constant reference to the estimated state.

+
Returns
System state (homogeneous space element) reperesenting the state estimate
+ +
+
+ +

◆ stateOptions()

+ +
+
+ + + + + + + +
const StateOptions & msceqf::MSCEqF::stateOptions () const
+
+ +

Get a constant reference to the MSCEqF state options.

+
Returns
State options
+ +
+
+ +

◆ stateOrigin()

+ +
+
+ + + + + + + +
const SystemState & msceqf::MSCEqF::stateOrigin () const
+
+ +

Get a constant reference to the origin state.

+
Returns
System state (homogeneous space element) reperesenting the state origin
+ +
+
+ +

◆ visualizeImageWithTracks()

+ +
+
+ + + + + + + +
void msceqf::MSCEqF::visualizeImageWithTracks (const Camera & cam) const
+
+ +

Visualize the processed image with overlayed tracks.

+
Parameters
+ + +
camCamera measurement
+
+
+ +
+
+ +

◆ zvuPerformed()

+ +
+
+ + + + + +
+ + + + + + + +
const bool & msceqf::MSCEqF::zvuPerformed () const
+
+nodiscard
+
+ +

Check if a zero velocity update has been performed.

+
Returns
true if the a zero velocity update has been performed, false otherwise
+
+Here is the call graph for this function:
+
+
+ + + + + +
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f.js b/classmsceqf_1_1_m_s_c_eq_f.js new file mode 100644 index 0000000..42f4b0a --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f.js @@ -0,0 +1,18 @@ +var classmsceqf_1_1_m_s_c_eq_f = +[ + [ "MSCEqF", "classmsceqf_1_1_m_s_c_eq_f.html#abb3bc947ff4ae1a330fdb709aff7cb11", null ], + [ "coreCovariance", "classmsceqf_1_1_m_s_c_eq_f.html#a997db7a553e9889015b9678080c86be8", null ], + [ "covariance", "classmsceqf_1_1_m_s_c_eq_f.html#a4a9975dea4d9c62ce4505fba3296dd18", null ], + [ "imageWithTracks", "classmsceqf_1_1_m_s_c_eq_f.html#aa093952ba96078a35ed821bcccfd4eb6", null ], + [ "isInit", "classmsceqf_1_1_m_s_c_eq_f.html#a92233266c8048557db3873405a7fa7a7", null ], + [ "options", "classmsceqf_1_1_m_s_c_eq_f.html#acb5d226d4ad65d27c358ef828db00087", null ], + [ "processMeasurement", "classmsceqf_1_1_m_s_c_eq_f.html#ac2017b25449e411f5d77c3b5fe59b011", null ], + [ "processMeasurement", "classmsceqf_1_1_m_s_c_eq_f.html#a55cd046228cd54d23f1854684b64a801", null ], + [ "processMeasurement", "classmsceqf_1_1_m_s_c_eq_f.html#a2bbc3010eb9e56c60b7378ea7864fe52", null ], + [ "setGivenOrigin", "classmsceqf_1_1_m_s_c_eq_f.html#a2287aa91e58c6190cd94aeacedfe9c7d", null ], + [ "stateEstimate", "classmsceqf_1_1_m_s_c_eq_f.html#af1c4f54460f44e87eb7e3ab7b9655973", null ], + [ "stateOptions", "classmsceqf_1_1_m_s_c_eq_f.html#a4d284b06bf0e6717b2f48fe20e0d26ba", null ], + [ "stateOrigin", "classmsceqf_1_1_m_s_c_eq_f.html#af8d31b5b7ee3089c6967d952b9c9848b", null ], + [ "visualizeImageWithTracks", "classmsceqf_1_1_m_s_c_eq_f.html#a2fadf3c923da1763c0d51023e6def3f1", null ], + [ "zvuPerformed", "classmsceqf_1_1_m_s_c_eq_f.html#a3d7135418997539dcb59078c592f8c5e", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.map b/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.map new file mode 100644 index 0000000..867d89f --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.md5 b/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.md5 new file mode 100644 index 0000000..91c2893 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.md5 @@ -0,0 +1 @@ +fbbe5c09071f6e20ee18eadaafdd1f26 \ No newline at end of file diff --git a/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.png b/classmsceqf_1_1_m_s_c_eq_f_a2287aa91e58c6190cd94aeacedfe9c7d_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..cd54501f9eebd163950485b9eb9516d3dfa4b390 GIT binary patch literal 7494 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 F{{fc# + + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.md5 b/classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.md5 new file mode 100644 index 0000000..96fbe0f --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.md5 @@ -0,0 +1 @@ +8728777b21ca18477322e41d59d34753 \ No newline at end of file diff --git a/classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.png b/classmsceqf_1_1_m_s_c_eq_f_a3d7135418997539dcb59078c592f8c5e_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..ca105d1010012db62eb324242619c3553e902b57 GIT binary patch literal 7506 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 + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::MSCEqFState Member List
+
+
+ +

This is the complete list of members for msceqf::MSCEqFState, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
B() constmsceqf::MSCEqFState
C() constmsceqf::MSCEqFState
clone(const fp &timestamp) constmsceqf::MSCEqFState
clonesSize() constmsceqf::MSCEqFStateinline
cloneTimestampToMarginalize() constmsceqf::MSCEqFState
cov() constmsceqf::MSCEqFState
covBlock(const MSCEqFKey &key) constmsceqf::MSCEqFState
D() constmsceqf::MSCEqFState
delta() constmsceqf::MSCEqFState
dof(const MSCEqFKey &key) constmsceqf::MSCEqFState
E() constmsceqf::MSCEqFState
index(const MSCEqFKey &key) constmsceqf::MSCEqFState
initializeStateElement(const MSCEqFStateKey &key, const MatrixX &cov_block)msceqf::MSCEqFState
L() constmsceqf::MSCEqFState
marginalizeCloneAt(const fp &timestamp)msceqf::MSCEqFState
MSCEqFClonesMap typedefmsceqf::MSCEqFState
MSCEqFKey typedefmsceqf::MSCEqFState
MSCEqFState()=deletemsceqf::MSCEqFState
MSCEqFState(const StateOptions &opts, const SystemState &xi0)msceqf::MSCEqFState
MSCEqFState(const MSCEqFState &other)msceqf::MSCEqFState
MSCEqFState(MSCEqFState &&other) noexcept (defined in msceqf::MSCEqFState)msceqf::MSCEqFState
MSCEqFStateKey typedefmsceqf::MSCEqFState
MSCEqFStateMap typedefmsceqf::MSCEqFState
operator*(const MSCEqFState &other) constmsceqf::MSCEqFState
operator=(const MSCEqFState &other) (defined in msceqf::MSCEqFState)msceqf::MSCEqFState
operator=(MSCEqFState &&other) noexcept (defined in msceqf::MSCEqFState)msceqf::MSCEqFState
opts() constmsceqf::MSCEqFStateinline
Propagator classmsceqf::MSCEqFStatefriend
Q(const uint &feat_id) constmsceqf::MSCEqFState
Random() constmsceqf::MSCEqFState
stochasticCloning(const fp &timestamp)msceqf::MSCEqFState
subCov(const std::vector< MSCEqFKey > &keys) constmsceqf::MSCEqFState
subCovCols(const std::vector< MSCEqFKey > &keys) constmsceqf::MSCEqFState
Symmetry classmsceqf::MSCEqFStatefriend
toString(const MSCEqFStateKey &key)msceqf::MSCEqFStatestatic
Updater classmsceqf::MSCEqFStatefriend
ZeroVelocityUpdater classmsceqf::MSCEqFStatefriend
~MSCEqFState() (defined in msceqf::MSCEqFState)msceqf::MSCEqFState
+
+ + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f_state.html b/classmsceqf_1_1_m_s_c_eq_f_state.html new file mode 100644 index 0000000..bbdc01b --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_state.html @@ -0,0 +1,1002 @@ + + + + + + + +MSCEqF: msceqf::MSCEqFState Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +

this class represent the state of the MSCEqF. This includes the state of the lifted system (element of the symmetry group) and the covariance. + More...

+ +

#include <state.hpp>

+ + + + + + + + + + + + + + +

+Public Types

+using MSCEqFStateKey = std::variant<MSCEqFStateElementName, uint>
 Key to access the msceqf state map.
 
+using MSCEqFKey = std::variant<MSCEqFStateKey, fp>
 Key to access the msceqf state and clones map.
 
+using MSCEqFStateMap = std::unordered_map<MSCEqFStateKey, MSCEqFStateElementSharedPtr>
 MSCEqF state map.
 
+using MSCEqFClonesMap = std::map<fp, MSCEqFStateElementSharedPtr>
 MSCEqF clones map.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MSCEqFState ()=delete
 Deleted default constructor.
 
 MSCEqFState (const StateOptions &opts, const SystemState &xi0)
 Construct the state of the MSCEqF given the options.
 
MSCEqFState (const MSCEqFState &other)
 Rule of Five.
 
MSCEqFState (MSCEqFState &&other) noexcept
 
+MSCEqFStateoperator= (const MSCEqFState &other)
 
+MSCEqFStateoperator= (MSCEqFState &&other) noexcept
 
const SE23 & D () const
 Get a reference to the SE23 component of the Semi Direct Bias Group element of the MSCEqF state.
 
const SE3 B () const
 Get a copy of the SE3 component of the Semi Direct Bias Group element of the MSCEqF state that includes the rotational component (R) and the first isometry (v)
 
const SE3 C () const
 Get a copy of to the SE3 component of the Semi Direct Bias Group element of the MSCEqF state that includes the rotational component (R) and the second isometry (p)
 
const Vector6 & delta () const
 Get a reference to the R6 component of the Semi Direct Bias Group element of the MSCEqF state.
 
const SE3 & E () const
 Get a reference to the SE3 element of the MSCEqF state.
 
const In & L () const
 Get a reference to the In element of the MSCEqF state.
 
const SOT3 & Q (const uint &feat_id) const
 Get a reference to the SOT3 element of the MSCEqF state that correspond to the given feature id.
 
const SE3 & clone (const fp &timestamp) const
 Get a reference to the SE3 element of the MSCEqF clones that correspond to the given timestamp.
 
const uint & index (const MSCEqFKey &key) const
 Get a reference to the index of the state element or the clone element corresponding to the given key.
 
const uint & dof (const MSCEqFKey &key) const
 Get a reference to the dof of the state element or the clone element corresponding to the given key.
 
size_t clonesSize () const
 Get the amount of clones.
 
const fp & cloneTimestampToMarginalize () const
 Get the timestamp of the clone to marginalize. We implement our keyframing strategy here. So far we simply marginalize the oldest clone.
 
const MatrixX & cov () const
 Get a reference to the covariance matrix.
 
const MatrixX covBlock (const MSCEqFKey &key) const
 get a constant copy of the covariance block relative to the elements (states or clones) corresponding to the given keys.
 
const MatrixX subCov (const std::vector< MSCEqFKey > &keys) const
 Get a constant copy of the the covariance submatrix (including cross-correlations) constructed with covariance blocks relative to the elements (states or clones) corresponding to the given keys. The ordering of the covariance returned follows the ordering of the given keys.
 
const MatrixX subCovCols (const std::vector< MSCEqFKey > &keys) const
 Get a constant copy of the the covariance submatrix (including cross-correlations) constructed with covariance columns relative to the elements (states or clones) corresponding to the given keys. The ordering of the covariance returned follows the ordering of the given keys.
 
const StateOptionsopts () const
 Get the state options.
 
void initializeStateElement (const MSCEqFStateKey &key, const MatrixX &cov_block)
 Initialize MSCEqF state element into the state map, and the relative covariance block.
 
void stochasticCloning (const fp &timestamp)
 Augment the MSCEqF clones map with a new clone of the actual E element of the MSCEqF state. The new clone is mapped via the given timestamp.
 
void marginalizeCloneAt (const fp &timestamp)
 Marginalize out clone at a given timestamp.
 
const MSCEqFState Random () const
 Return a random MSCEqF state without changing this. This method *WILL NOT change the actual values of the state. This method WILL NOT initialize the covariance or the clones map for the returned state. This method will only initialize the state map with random values for the returned state.
 
const MSCEqFState operator* (const MSCEqFState &other) const
 operator* overloading for MSCEqFState. This function will perform the composition this * other for each element of the state map. This method will NOT perform any composition for the covariance matrix, and for the clones map.
 
+ + + + +

+Static Public Member Functions

static std::string toString (const MSCEqFStateKey &key)
 Get a string describing the given MSCEqFStateKey.
 
+ + + + + + + + + + + + + +

+Friends

+class Symmetry
 Symmetry can access private members of MSCEqFState.
 
+class Propagator
 Propagator can access private members of MSCEqFState.
 
+class Updater
 Updater can access private members of MSCEqFState.
 
+class ZeroVelocityUpdater
 Zero velocity updater can access private members of MSCEqFState.
 
+

Detailed Description

+

this class represent the state of the MSCEqF. This includes the state of the lifted system (element of the symmetry group) and the covariance.

+

Constructor & Destructor Documentation

+ +

◆ MSCEqFState()

+ +
+
+ + + + + + + + + + + +
msceqf::MSCEqFState::MSCEqFState (const StateOptions & opts,
const SystemState & xi0 )
+
+ +

Construct the state of the MSCEqF given the options.

+
Parameters
+ + + +
optsOptions of the MSCEqF state
xi0Origin
+
+
+
Note
The MSCEqF state has not to be confused with the system state. The former is the state of the lifted system, in which the EqF is based on, while latter is the state of the system posed on the homogenous space. The given origin is needed to initialize cross-correlation whenever the origin is not identity.
+ +
+
+

Member Function Documentation

+ +

◆ B()

+ +
+
+ + + + + +
+ + + + + + + +
const SE3 msceqf::MSCEqFState::B () const
+
+nodiscard
+
+ +

Get a copy of the SE3 component of the Semi Direct Bias Group element of the MSCEqF state that includes the rotational component (R) and the first isometry (v)

+
Returns
SE3 group element representing the rotational component and the first isometry of the MSCEqF state
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ C()

+ +
+
+ + + + + +
+ + + + + + + +
const SE3 msceqf::MSCEqFState::C () const
+
+nodiscard
+
+ +

Get a copy of to the SE3 component of the Semi Direct Bias Group element of the MSCEqF state that includes the rotational component (R) and the second isometry (p)

+
Returns
SE3 group element representing the rotational component and the second isometry of the MSCEqF state
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ clone()

+ +
+
+ + + + + +
+ + + + + + + +
const SE3 & msceqf::MSCEqFState::clone (const fp & timestamp) const
+
+nodiscard
+
+ +

Get a reference to the SE3 element of the MSCEqF clones that correspond to the given timestamp.

+
Parameters
+ + +
timestampTimestamp
+
+
+
Returns
SE3 group element of the MSCEqF clones representing the element acting on the extrinsic calibration
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ clonesSize()

+ +
+
+ + + + + +
+ + + + + + + +
size_t msceqf::MSCEqFState::clonesSize () const
+
+inlinenodiscard
+
+ +

Get the amount of clones.

+
Returns
Number of clones
+ +
+
+ +

◆ cloneTimestampToMarginalize()

+ +
+
+ + + + + +
+ + + + + + + +
const fp & msceqf::MSCEqFState::cloneTimestampToMarginalize () const
+
+nodiscard
+
+ +

Get the timestamp of the clone to marginalize. We implement our keyframing strategy here. So far we simply marginalize the oldest clone.

+
Returns
Timestamp of the clone to marginalize
+ +
+
+ +

◆ cov()

+ +
+
+ + + + + +
+ + + + + + + +
const MatrixX & msceqf::MSCEqFState::cov () const
+
+nodiscard
+
+ +

Get a reference to the covariance matrix.

+
Returns
Covariance matrix
+ +
+
+ +

◆ covBlock()

+ +
+
+ + + + + +
+ + + + + + + +
const MatrixX msceqf::MSCEqFState::covBlock (const MSCEqFKey & key) const
+
+nodiscard
+
+ +

get a constant copy of the covariance block relative to the elements (states or clones) corresponding to the given keys.

+
Parameters
+ + +
keyState element name, feature id or timestamp of clone
+
+
+
Returns
Block of the covariance matrix corresponding to the given key
+ +
+
+ +

◆ D()

+ +
+
+ + + + + +
+ + + + + + + +
const SE23 & msceqf::MSCEqFState::D () const
+
+nodiscard
+
+ +

Get a reference to the SE23 component of the Semi Direct Bias Group element of the MSCEqF state.

+
Returns
SE23 group element of the MSCEqF state
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ delta()

+ +
+
+ + + + + +
+ + + + + + + +
const Vector6 & msceqf::MSCEqFState::delta () const
+
+nodiscard
+
+ +

Get a reference to the R6 component of the Semi Direct Bias Group element of the MSCEqF state.

+
Returns
R6 group element of the MSCEqF state
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ dof()

+ +
+
+ + + + + +
+ + + + + + + +
const uint & msceqf::MSCEqFState::dof (const MSCEqFKey & key) const
+
+nodiscard
+
+ +

Get a reference to the dof of the state element or the clone element corresponding to the given key.

+
Parameters
+ + +
keyState element name, feature id or timestamp of clone
+
+
+
Returns
Degree of freedom of the state element or the clone element corresponding to the given key
+ +
+
+ +

◆ E()

+ +
+
+ + + + + +
+ + + + + + + +
const SE3 & msceqf::MSCEqFState::E () const
+
+nodiscard
+
+ +

Get a reference to the SE3 element of the MSCEqF state.

+
Returns
SE3 group element of the MSCEqF state representing the element acting on the extrinsic calibration
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ index()

+ +
+
+ + + + + +
+ + + + + + + +
const uint & msceqf::MSCEqFState::index (const MSCEqFKey & key) const
+
+nodiscard
+
+ +

Get a reference to the index of the state element or the clone element corresponding to the given key.

+
Parameters
+ + +
keyState element name, feature id or timestamp of clone
+
+
+
Returns
Index of the state element or the clone element corresponding to the given key
+ +
+
+ +

◆ initializeStateElement()

+ +
+
+ + + + + + + + + + + +
void msceqf::MSCEqFState::initializeStateElement (const MSCEqFStateKey & key,
const MatrixX & cov_block )
+
+ +

Initialize MSCEqF state element into the state map, and the relative covariance block.

+
Parameters
+ + + +
keyState element name or feature id
cov_blockCorresponding blcok of the covariance matrix
+
+
+
Note
Note that the MSCEqF states are always initialized at the identity. This is correct since is xi0 that "controls" how close to ground truth these are.
+ +
+
+ +

◆ L()

+ +
+
+ + + + + +
+ + + + + + + +
const In & msceqf::MSCEqFState::L () const
+
+nodiscard
+
+ +

Get a reference to the In element of the MSCEqF state.

+
Returns
In group element of the MSCEqF state representing the element acting on the intrinsic calibration
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ marginalizeCloneAt()

+ +
+
+ + + + + + + +
void msceqf::MSCEqFState::marginalizeCloneAt (const fp & timestamp)
+
+ +

Marginalize out clone at a given timestamp.

+
Parameters
+ + +
timestampTimestamp of the clone to marginalize
+
+
+ +
+
+ +

◆ operator*()

+ +
+
+ + + + + +
+ + + + + + + +
const MSCEqFState msceqf::MSCEqFState::operator* (const MSCEqFState & other) const
+
+nodiscard
+
+ +

operator* overloading for MSCEqFState. This function will perform the composition this * other for each element of the state map. This method will NOT perform any composition for the covariance matrix, and for the clones map.

+
Parameters
+ + +
otherMSCEqF state
+
+
+
Returns
MSCEqF state
+
Note
THIS IS MEANT TO BE AN HELPER FUNCTION FOR DEBUG/TESTING
+ +
+
+ +

◆ opts()

+ +
+
+ + + + + +
+ + + + + + + +
const StateOptions & msceqf::MSCEqFState::opts () const
+
+inlinenodiscard
+
+ +

Get the state options.

+
Returns
State options
+ +
+
+ +

◆ Q()

+ +
+
+ + + + + +
+ + + + + + + +
const SOT3 & msceqf::MSCEqFState::Q (const uint & feat_id) const
+
+nodiscard
+
+ +

Get a reference to the SOT3 element of the MSCEqF state that correspond to the given feature id.

+
Parameters
+ + +
feat_idFeature id
+
+
+
Returns
SOT3 group element of the MSCEqF state representing the element acting on the feature
+
Note
This function does not introduce any runtime overhead due to casting, because it uses static_pointer_cast
+ +
+
+ +

◆ Random()

+ +
+
+ + + + + +
+ + + + + + + +
const MSCEqFState msceqf::MSCEqFState::Random () const
+
+nodiscard
+
+ +

Return a random MSCEqF state without changing this. This method *WILL NOT change the actual values of the state. This method WILL NOT initialize the covariance or the clones map for the returned state. This method will only initialize the state map with random values for the returned state.

+
Returns
MSCEqF state
+
Note
THIS IS MEANT TO BE AN HELPER FUNCTION FOR DEBUG/TESTING
+ +
+
+ +

◆ stochasticCloning()

+ +
+
+ + + + + + + +
void msceqf::MSCEqFState::stochasticCloning (const fp & timestamp)
+
+ +

Augment the MSCEqF clones map with a new clone of the actual E element of the MSCEqF state. The new clone is mapped via the given timestamp.

+
Parameters
+ + +
timestampTimestamp of the new clone
+
+
+ +
+
+ +

◆ subCov()

+ +
+
+ + + + + +
+ + + + + + + +
const MatrixX msceqf::MSCEqFState::subCov (const std::vector< MSCEqFKey > & keys) const
+
+nodiscard
+
+ +

Get a constant copy of the the covariance submatrix (including cross-correlations) constructed with covariance blocks relative to the elements (states or clones) corresponding to the given keys. The ordering of the covariance returned follows the ordering of the given keys.

+
Parameters
+ + +
keysVector of state elements name, feature id or timestamp of clone
+
+
+
Returns
Stacked blocks of the covariance matrix corresponding to the given keys including cross-correlations
+ +
+
+ +

◆ subCovCols()

+ +
+
+ + + + + +
+ + + + + + + +
const MatrixX msceqf::MSCEqFState::subCovCols (const std::vector< MSCEqFKey > & keys) const
+
+nodiscard
+
+ +

Get a constant copy of the the covariance submatrix (including cross-correlations) constructed with covariance columns relative to the elements (states or clones) corresponding to the given keys. The ordering of the covariance returned follows the ordering of the given keys.

+
Parameters
+ + +
keysVector of state elements name, feature id or timestamp of clone
+
+
+
Returns
Stacked columns of the covariance matrix corresponding to the given keys including cross-correlations
+ +
+
+ +

◆ toString()

+ +
+
+ + + + + +
+ + + + + + + +
static std::string msceqf::MSCEqFState::toString (const MSCEqFStateKey & key)
+
+static
+
+ +

Get a string describing the given MSCEqFStateKey.

+
Parameters
+ + +
keyState element name or feature id
+
+
+
Returns
Key as string
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f_state.js b/classmsceqf_1_1_m_s_c_eq_f_state.js new file mode 100644 index 0000000..78b14c0 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_state.js @@ -0,0 +1,36 @@ +var classmsceqf_1_1_m_s_c_eq_f_state = +[ + [ "MSCEqFClonesMap", "classmsceqf_1_1_m_s_c_eq_f_state.html#aaacdfe3336e1bfaea66ea4a34b380660", null ], + [ "MSCEqFKey", "classmsceqf_1_1_m_s_c_eq_f_state.html#a6571b3bd28273d40c214ebd495fbc8b5", null ], + [ "MSCEqFStateKey", "classmsceqf_1_1_m_s_c_eq_f_state.html#a0a0e82d009caba522b4cd9bb54277f33", null ], + [ "MSCEqFStateMap", "classmsceqf_1_1_m_s_c_eq_f_state.html#a1ae0771ee7b8b3d7c90dccb15ff45898", null ], + [ "MSCEqFState", "classmsceqf_1_1_m_s_c_eq_f_state.html#afec7530ecddab98b45948a2820ce59d6", null ], + [ "MSCEqFState", "classmsceqf_1_1_m_s_c_eq_f_state.html#a587407b4418bb38c79ed0ca0c63254ac", null ], + [ "MSCEqFState", "classmsceqf_1_1_m_s_c_eq_f_state.html#a934d93f3e3fccc098fdd05bceda29858", null ], + [ "B", "classmsceqf_1_1_m_s_c_eq_f_state.html#a2ba8e8aa0d8fac30959ad516098a7c15", null ], + [ "C", "classmsceqf_1_1_m_s_c_eq_f_state.html#a07ca6f8a7c48f784c5c9641fb7ef4f69", null ], + [ "clone", "classmsceqf_1_1_m_s_c_eq_f_state.html#a8b38b0d21df9ae3a07bbaaca7daf6f7b", null ], + [ "clonesSize", "classmsceqf_1_1_m_s_c_eq_f_state.html#ad63c4591dfbba61f680c92bbe6b327a1", null ], + [ "cloneTimestampToMarginalize", "classmsceqf_1_1_m_s_c_eq_f_state.html#ab74dc134ababe6a2914a703746fe2879", null ], + [ "cov", "classmsceqf_1_1_m_s_c_eq_f_state.html#a19c6f21068871bbd9bc1cd725284487a", null ], + [ "covBlock", "classmsceqf_1_1_m_s_c_eq_f_state.html#a88df644cc8a6c623020128e2b1266c25", null ], + [ "D", "classmsceqf_1_1_m_s_c_eq_f_state.html#a71b238cde922261accd48f8269817d4c", null ], + [ "delta", "classmsceqf_1_1_m_s_c_eq_f_state.html#aa46141f5f1104a05a627fdd6370f9a9b", null ], + [ "dof", "classmsceqf_1_1_m_s_c_eq_f_state.html#a60595205c41950307960c6666c78c63c", null ], + [ "E", "classmsceqf_1_1_m_s_c_eq_f_state.html#a57d02c2929be3bb2b0d38a3dd8b13569", null ], + [ "index", "classmsceqf_1_1_m_s_c_eq_f_state.html#a396d28ac19c3de4d5912f328d68048ea", null ], + [ "initializeStateElement", "classmsceqf_1_1_m_s_c_eq_f_state.html#a9a8dffcf54ed656e0e6e82a07608532b", null ], + [ "L", "classmsceqf_1_1_m_s_c_eq_f_state.html#a22cbea48d7ddf2508d3f5249616616ce", null ], + [ "marginalizeCloneAt", "classmsceqf_1_1_m_s_c_eq_f_state.html#aa4c997fa07b165c6ea942a6e1b725e08", null ], + [ "operator*", "classmsceqf_1_1_m_s_c_eq_f_state.html#a2ed5779e4d4df55eb0a3be4f6f6375b4", null ], + [ "opts", "classmsceqf_1_1_m_s_c_eq_f_state.html#a5e24084e77a9ff5469afe48e17db7c9b", null ], + [ "Q", "classmsceqf_1_1_m_s_c_eq_f_state.html#a65fcd0fe59fb233ddb207d2afab5136c", null ], + [ "Random", "classmsceqf_1_1_m_s_c_eq_f_state.html#a3cb9682d076eae9b1463a2dbdaa5d2f4", null ], + [ "stochasticCloning", "classmsceqf_1_1_m_s_c_eq_f_state.html#a40572c524f1776af3f2b213d73d9f257", null ], + [ "subCov", "classmsceqf_1_1_m_s_c_eq_f_state.html#ad14329a60c17ff014c1940da434df263", null ], + [ "subCovCols", "classmsceqf_1_1_m_s_c_eq_f_state.html#a43759d5a32ac4133e7a30a4faa8620ac", null ], + [ "Propagator", "classmsceqf_1_1_m_s_c_eq_f_state.html#a9d01c82a7038a8c986c6b15c15b2e631", null ], + [ "Symmetry", "classmsceqf_1_1_m_s_c_eq_f_state.html#a41706e12d68690130eaf013ca5aa311b", null ], + [ "Updater", "classmsceqf_1_1_m_s_c_eq_f_state.html#a263621696f00d0fefadbd6b1b52da6b5", null ], + [ "ZeroVelocityUpdater", "classmsceqf_1_1_m_s_c_eq_f_state.html#ad4f72ce3a5f4c9e1de3b516ac2a76d05", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_m_s_c_eq_f_state_element-members.html b/classmsceqf_1_1_m_s_c_eq_f_state_element-members.html new file mode 100644 index 0000000..8ed4867 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_state_element-members.html @@ -0,0 +1,131 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::MSCEqFStateElement Member List
+
+
+ +

This is the complete list of members for msceqf::MSCEqFStateElement, including all inherited members.

+ + + + + + + + + + + + + + + + +
clone() const =0msceqf::MSCEqFStateElementpure virtual
dof_msceqf::MSCEqFStateElementprotected
getDof()msceqf::MSCEqFStateElementinline
getIndex()msceqf::MSCEqFStateElementinline
idx_msceqf::MSCEqFStateElementprotected
MSCEqFStateElement()=deletemsceqf::MSCEqFStateElementprotected
MSCEqFStateElement(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
MSCEqFStateElement(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
MSCEqFStateElement(const uint &idx, const uint &dof)msceqf::MSCEqFStateElementinlineprotected
operator=(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
operator=(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
updateIndex(const uint &new_idx)msceqf::MSCEqFStateElementinline
updateLeft(const VectorX &delta)=0msceqf::MSCEqFStateElementpure virtual
updateRight(const VectorX &delta)=0msceqf::MSCEqFStateElementpure virtual
~MSCEqFStateElement()=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementvirtual
+
+ + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f_state_element.html b/classmsceqf_1_1_m_s_c_eq_f_state_element.html new file mode 100644 index 0000000..6a6929a --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_state_element.html @@ -0,0 +1,434 @@ + + + + + + + +MSCEqF: msceqf::MSCEqFStateElement Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::MSCEqFStateElement Class Referenceabstract
+
+
+ +

This class represent the base class for a general element of the MSCEqF state. This include the index of the variable (index in the residual, and in the covariance), and the degrees of freedom. + More...

+ +

#include <state_elements.hpp>

+
+Inheritance diagram for msceqf::MSCEqFStateElement:
+
+
Inheritance graph
+ + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

const uint & getIndex ()
 Get the starting index of the state element in the residual, and in the covariance.
 
const uint & getDof ()
 Get the degrees of freedom of the state element (dimension of relative covariance and residual block)
 
void updateIndex (const uint &new_idx)
 Update index.
 
virtual void updateRight (const VectorX &delta)=0
 update function to update the value of the state element by right multiplication
 
virtual void updateLeft (const VectorX &delta)=0
 update function to update the value of the state element by left multiplication
 
virtual std::unique_ptr< MSCEqFStateElementclone () const =0
 Clone.
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

MSCEqFStateElement ()=delete
 Rule of Five.
 
MSCEqFStateElement (const MSCEqFStateElement &)=default
 
MSCEqFStateElement (MSCEqFStateElement &&)=default
 
+MSCEqFStateElementoperator= (const MSCEqFStateElement &)=default
 
+MSCEqFStateElementoperator= (MSCEqFStateElement &&)=default
 
 MSCEqFStateElement (const uint &idx, const uint &dof)
 Construct a MSCEqFStateElement object.
 
+ + + + + + + +

+Protected Attributes

+uint idx_
 Starting index of the element in the residual, and in the covariance.
 
+uint dof_
 Degrees of freedom of the element (dimension of relative covariance and residual block)
 
+

Detailed Description

+

This class represent the base class for a general element of the MSCEqF state. This include the index of the variable (index in the residual, and in the covariance), and the degrees of freedom.

+
Note
Type-based index system inspired by: Geneva, Patrick, et al. "Openvins: A research platform for visual-inertial +estimation." 2020 IEEE International Conference on Robotics and Automation (ICRA). IEEE,
    +
  1. https://ieeexplore.ieee.org/document/9196524
  2. +
+
+

Constructor & Destructor Documentation

+ +

◆ MSCEqFStateElement()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
msceqf::MSCEqFStateElement::MSCEqFStateElement (const uint & idx,
const uint & dof )
+
+inlineprotected
+
+ +

Construct a MSCEqFStateElement object.

+
Parameters
+ + + +
idxStarting index of the element in the residual, and in the covariance
dofDegrees of freedom of the element (dimension of relative covariance and residual block)
+
+
+ +
+
+

Member Function Documentation

+ +

◆ clone()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::unique_ptr< MSCEqFStateElement > msceqf::MSCEqFStateElement::clone () const
+
+pure virtual
+
+ +

Clone.

+
Returns
Cloned element
+ +

Implemented in msceqf::MSCEqFInState, msceqf::MSCEqFSDBState, msceqf::MSCEqFSE3State, and msceqf::MSCEqFSOT3State.

+ +
+
+ +

◆ getDof()

+ +
+
+ + + + + +
+ + + + + + + +
const uint & msceqf::MSCEqFStateElement::getDof ()
+
+inlinenodiscard
+
+ +

Get the degrees of freedom of the state element (dimension of relative covariance and residual block)

+
Returns
Degrees of freedom
+ +
+
+ +

◆ getIndex()

+ +
+
+ + + + + +
+ + + + + + + +
const uint & msceqf::MSCEqFStateElement::getIndex ()
+
+inlinenodiscard
+
+ +

Get the starting index of the state element in the residual, and in the covariance.

+
Returns
Starting index
+ +
+
+ +

◆ updateIndex()

+ +
+
+ + + + + +
+ + + + + + + +
void msceqf::MSCEqFStateElement::updateIndex (const uint & new_idx)
+
+inline
+
+ +

Update index.

+
Parameters
+ + +
new_idxNew index
+
+
+ +
+
+ +

◆ updateLeft()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void msceqf::MSCEqFStateElement::updateLeft (const VectorX & delta)
+
+pure virtual
+
+ +

update function to update the value of the state element by left multiplication

+
Parameters
+ + +
deltaDelta value to update with
+
+
+ +

Implemented in msceqf::MSCEqFInState, msceqf::MSCEqFSDBState, msceqf::MSCEqFSE3State, and msceqf::MSCEqFSOT3State.

+ +
+
+ +

◆ updateRight()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void msceqf::MSCEqFStateElement::updateRight (const VectorX & delta)
+
+pure virtual
+
+ +

update function to update the value of the state element by right multiplication

+
Parameters
+ + +
deltaDelta value to update with
+
+
+ +

Implemented in msceqf::MSCEqFInState, msceqf::MSCEqFSDBState, msceqf::MSCEqFSE3State, and msceqf::MSCEqFSOT3State.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f_state_element.js b/classmsceqf_1_1_m_s_c_eq_f_state_element.js new file mode 100644 index 0000000..6dd2805 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_state_element.js @@ -0,0 +1,13 @@ +var classmsceqf_1_1_m_s_c_eq_f_state_element = +[ + [ "MSCEqFStateElement", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a7ec47e75578d8cc1c87a3a63a13abeec", null ], + [ "MSCEqFStateElement", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#acd4ce57105c76dbef374f0ea282dddb3", null ], + [ "clone", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a494c18ed513e08d5ef8939e1242551a5", null ], + [ "getDof", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a7441186a74539dc0b7ba6e0a61b8ec3b", null ], + [ "getIndex", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a53882d76f6e925923c1f8b7678e525a1", null ], + [ "updateIndex", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a529dd668cc095fb064ce315536cbe49f", null ], + [ "updateLeft", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a954034d163f3b9c87ba2fdb9fd505ed9", null ], + [ "updateRight", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a5a9d827886bbe93e86a422aef4ad868b", null ], + [ "dof_", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#ab8dd7e06eb85c24c497aa25871465a71", null ], + [ "idx_", "classmsceqf_1_1_m_s_c_eq_f_state_element.html#a237a7c1dcdf475facb6ee2a8e08f2970", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.map b/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.map new file mode 100644 index 0000000..8e60709 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.md5 b/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.md5 new file mode 100644 index 0000000..9dcc9a2 --- /dev/null +++ b/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.md5 @@ -0,0 +1 @@ +2fa18cf951022b1b608c9b5d4ff39fbb \ No newline at end of file diff --git a/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.png b/classmsceqf_1_1_m_s_c_eq_f_state_element__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8da3d9219586c42ecafecc2e06f6a24cd854cfe7 GIT binary patch literal 18615 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 literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_option_parser-members.html b/classmsceqf_1_1_option_parser-members.html new file mode 100644 index 0000000..0d8dbe8 --- /dev/null +++ b/classmsceqf_1_1_option_parser-members.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::OptionParser Member List
+
+
+ +

This is the complete list of members for msceqf::OptionParser, including all inherited members.

+ + + +
OptionParser(const std::string &filepath)msceqf::OptionParser
parseOptions()msceqf::OptionParser
+
+ + + + diff --git a/classmsceqf_1_1_option_parser.html b/classmsceqf_1_1_option_parser.html new file mode 100644 index 0000000..5fea2f5 --- /dev/null +++ b/classmsceqf_1_1_option_parser.html @@ -0,0 +1,177 @@ + + + + + + + +MSCEqF: msceqf::OptionParser Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::OptionParser Class Reference
+
+
+ + + + + + + + +

+Public Member Functions

 OptionParser (const std::string &filepath)
 Option parser constructor.
 
MSCEqFOptions parseOptions ()
 Parse oprion and create MSCEqFOptions struct.
 
+

Constructor & Destructor Documentation

+ +

◆ OptionParser()

+ +
+
+ + + + + + + +
msceqf::OptionParser::OptionParser (const std::string & filepath)
+
+ +

Option parser constructor.

+
Parameters
+ + +
filepathParameter file
+
+
+ +
+
+

Member Function Documentation

+ +

◆ parseOptions()

+ +
+
+ + + + + + + +
MSCEqFOptions msceqf::OptionParser::parseOptions ()
+
+ +

Parse oprion and create MSCEqFOptions struct.

+
Returns
MSCEqFOptions
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_option_parser.js b/classmsceqf_1_1_option_parser.js new file mode 100644 index 0000000..50ec5df --- /dev/null +++ b/classmsceqf_1_1_option_parser.js @@ -0,0 +1,5 @@ +var classmsceqf_1_1_option_parser = +[ + [ "OptionParser", "classmsceqf_1_1_option_parser.html#a8f797dbe136a1aa8399ed6f7279b92c0", null ], + [ "parseOptions", "classmsceqf_1_1_option_parser.html#a045e263acada6289b9d331c689b0e7b5", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_pinhole_camera-members.html b/classmsceqf_1_1_pinhole_camera-members.html new file mode 100644 index 0000000..44f9ac0 --- /dev/null +++ b/classmsceqf_1_1_pinhole_camera-members.html @@ -0,0 +1,141 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::PinholeCamera Member List
+
+
+ +

This is the complete list of members for msceqf::PinholeCamera, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
denormalize(std::vector< Eigen::Vector2f > &uv)msceqf::PinholeCamera
denormalize(std::vector< cv::Point2f > &uv)msceqf::PinholeCamera
denormalize(Eigen::Vector2f &uv)msceqf::PinholeCamera
denormalize(cv::Point2f &uv)msceqf::PinholeCamera
distortion_coefficients_msceqf::PinholeCameraprotected
distortionCoefficients() constmsceqf::PinholeCamera
height_msceqf::PinholeCameraprotected
intrinsics() constmsceqf::PinholeCamera
intrinsics_msceqf::PinholeCameraprotected
normalize(std::vector< Eigen::Vector2f > &uv)msceqf::PinholeCamera
normalize(std::vector< cv::Point2f > &uv)msceqf::PinholeCamera
normalize(Eigen::Vector2f &uv)msceqf::PinholeCamera
normalize(cv::Point2f &uv)msceqf::PinholeCamera
operator=(const PinholeCamera &)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
operator=(PinholeCamera &&)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
PinholeCamera(const VectorX &distortion_coefficients, const Vector4 instrinsics, const uint &width, const uint &height) (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
PinholeCamera()=deletemsceqf::PinholeCameraprotected
PinholeCamera(const PinholeCamera &)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
PinholeCamera(PinholeCamera &&)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
setIntrinsics(const Vector4 &intrinsics)msceqf::PinholeCamera
undistort(std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)msceqf::PinholeCamera
undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize=false)=0msceqf::PinholeCamerapure virtual
undistortImage(const cv::Mat &image, cv::Mat &image_undistorted)=0msceqf::PinholeCamerapure virtual
width_msceqf::PinholeCameraprotected
~PinholeCamera()=default (defined in msceqf::PinholeCamera)msceqf::PinholeCameravirtual
+
+ + + + diff --git a/classmsceqf_1_1_pinhole_camera.html b/classmsceqf_1_1_pinhole_camera.html new file mode 100644 index 0000000..d2740bc --- /dev/null +++ b/classmsceqf_1_1_pinhole_camera.html @@ -0,0 +1,604 @@ + + + + + + + +MSCEqF: msceqf::PinholeCamera Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::PinholeCamera Class Referenceabstract
+
+
+ +

This class represnt the base class for any pinhole camera type. + More...

+ +

#include <camera.hpp>

+
+Inheritance diagram for msceqf::PinholeCamera:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void undistort (std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)
 Undistort given distorted point in Eigen format (std::vector<Eigen::Vector2f>)
 
virtual void undistort (std::vector< cv::Point2f > &uv_cv, const bool &normalize=false)=0
 Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)
 
virtual void undistortImage (const cv::Mat &image, cv::Mat &image_undistorted)=0
 Undistort given image in openCV format (cv::Mat)
 
void normalize (std::vector< Eigen::Vector2f > &uv)
 Normalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
 
void normalize (std::vector< cv::Point2f > &uv)
 Normalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
 
void normalize (Eigen::Vector2f &uv)
 Normalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
 
void normalize (cv::Point2f &uv)
 Normalize multiple features uv coordinates in OpenCV format (cv::Point2f)
 
void denormalize (std::vector< Eigen::Vector2f > &uv)
 Denormalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
 
void denormalize (std::vector< cv::Point2f > &uv)
 Denormalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
 
void denormalize (Eigen::Vector2f &uv)
 Denormalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
 
void denormalize (cv::Point2f &uv)
 Denormalize multiple features uv coordinates in OpenCV format (cv::Point2f)
 
void setIntrinsics (const Vector4 &intrinsics)
 Set the value of the intrinsic parameters.
 
const Vector4 & intrinsics () const
 Get camera intrinsics parameter (fx, fy, cx, cy) as a 4 vector.
 
const VectorX & distortionCoefficients () const
 Get camera distortion coefficients (k1, k2, p1, p2, ...) as a vector.
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

PinholeCamera (const VectorX &distortion_coefficients, const Vector4 instrinsics, const uint &width, const uint &height)
 
PinholeCamera ()=delete
 Rule of Five.
 
PinholeCamera (const PinholeCamera &)=delete
 
PinholeCamera (PinholeCamera &&)=delete
 
+PinholeCameraoperator= (const PinholeCamera &)=delete
 
+PinholeCameraoperator= (PinholeCamera &&)=delete
 
+ + + + + + + + + + + + + +

+Protected Attributes

+VectorX distortion_coefficients_
 Vector of distortion coefficients (k1, k2, p1, p2, ...)
 
+Vector4 intrinsics_
 Vector of intrinsic paramater (fx, fy, cx, cy)
 
+uint width_
 Image width.
 
+uint height_
 Image height.
 
+

Detailed Description

+

This class represnt the base class for any pinhole camera type.

+

Member Function Documentation

+ +

◆ denormalize() [1/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::denormalize (cv::Point2f & uv)
+
+ +

Denormalize multiple features uv coordinates in OpenCV format (cv::Point2f)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ denormalize() [2/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::denormalize (Eigen::Vector2f & uv)
+
+ +

Denormalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ denormalize() [3/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::denormalize (std::vector< cv::Point2f > & uv)
+
+ +

Denormalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ denormalize() [4/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::denormalize (std::vector< Eigen::Vector2f > & uv)
+
+ +

Denormalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ distortionCoefficients()

+ +
+
+ + + + + + + +
const VectorX & msceqf::PinholeCamera::distortionCoefficients () const
+
+ +

Get camera distortion coefficients (k1, k2, p1, p2, ...) as a vector.

+
Returns
Vector of distortion coefficients (k1, k2, p1, p2, ...)
+ +
+
+ +

◆ intrinsics()

+ +
+
+ + + + + + + +
const Vector4 & msceqf::PinholeCamera::intrinsics () const
+
+ +

Get camera intrinsics parameter (fx, fy, cx, cy) as a 4 vector.

+
Returns
R4 vector representing the camera intrinsic parameters (fx, fy, cx, cy)
+ +
+
+ +

◆ normalize() [1/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::normalize (cv::Point2f & uv)
+
+ +

Normalize multiple features uv coordinates in OpenCV format (cv::Point2f)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ normalize() [2/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::normalize (Eigen::Vector2f & uv)
+
+ +

Normalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ normalize() [3/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::normalize (std::vector< cv::Point2f > & uv)
+
+ +

Normalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ normalize() [4/4]

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::normalize (std::vector< Eigen::Vector2f > & uv)
+
+ +

Normalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)

+
Parameters
+ + +
uvuv coordinates
+
+
+ +
+
+ +

◆ setIntrinsics()

+ +
+
+ + + + + + + +
void msceqf::PinholeCamera::setIntrinsics (const Vector4 & intrinsics)
+
+ +

Set the value of the intrinsic parameters.

+
Parameters
+ + +
intrinsicsR4 vector representing the camera intrinsic parameters (fx, fy, cx, cy)
+
+
+ +
+
+ +

◆ undistort() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + +
virtual void msceqf::PinholeCamera::undistort (std::vector< cv::Point2f > & uv_cv,
const bool & normalize = false )
+
+pure virtual
+
+ +

Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)

+
Parameters
+ + + +
uv_cvuv coordinates
normalizeflag to decide wether normalize coordinates or not
+
+
+ +

Implemented in msceqf::EquidistantCamera, and msceqf::RadtanCamera.

+ +
+
+ +

◆ undistort() [2/2]

+ +
+
+ + + + + + + + + + + +
void msceqf::PinholeCamera::undistort (std::vector< Eigen::Vector2f > & uv,
const bool & normalize = false )
+
+ +

Undistort given distorted point in Eigen format (std::vector<Eigen::Vector2f>)

+
Parameters
+ + + +
uvuv coordinates
normalizeFlag to decide wether normalize coordinates or not
+
+
+ +
+
+ +

◆ undistortImage()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
virtual void msceqf::PinholeCamera::undistortImage (const cv::Mat & image,
cv::Mat & image_undistorted )
+
+pure virtual
+
+ +

Undistort given image in openCV format (cv::Mat)

+
Parameters
+ + + +
imageImage to be undistorted
image_undistortedUndistorted image
+
+
+ +

Implemented in msceqf::EquidistantCamera, and msceqf::RadtanCamera.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_pinhole_camera.js b/classmsceqf_1_1_pinhole_camera.js new file mode 100644 index 0000000..c80da27 --- /dev/null +++ b/classmsceqf_1_1_pinhole_camera.js @@ -0,0 +1,22 @@ +var classmsceqf_1_1_pinhole_camera = +[ + [ "PinholeCamera", "classmsceqf_1_1_pinhole_camera.html#a5868e865166a3cf4b67427caaed1eddb", null ], + [ "denormalize", "classmsceqf_1_1_pinhole_camera.html#af4918235c0ffab8adc1ca7231f19215b", null ], + [ "denormalize", "classmsceqf_1_1_pinhole_camera.html#ad772fe1e146f5094aa6110611ae748f6", null ], + [ "denormalize", "classmsceqf_1_1_pinhole_camera.html#a47eb22e8ca894ac475d799c4ae8fe36e", null ], + [ "denormalize", "classmsceqf_1_1_pinhole_camera.html#a94a994903a29fbdd86b06442fe44f0bb", null ], + [ "distortionCoefficients", "classmsceqf_1_1_pinhole_camera.html#a50d70d4232a386f6feef1db182d4d447", null ], + [ "intrinsics", "classmsceqf_1_1_pinhole_camera.html#a282aa4f8f7bc9d6044a52a9c811718d0", null ], + [ "normalize", "classmsceqf_1_1_pinhole_camera.html#a0ed3882ef9693cfb016e00890aefdb9f", null ], + [ "normalize", "classmsceqf_1_1_pinhole_camera.html#a95d95360114f2097275e7c3918d1d55e", null ], + [ "normalize", "classmsceqf_1_1_pinhole_camera.html#a889c70211a8a88fb8e8709fe95cbbce2", null ], + [ "normalize", "classmsceqf_1_1_pinhole_camera.html#a5175a8d0505b607ed1a234d1579bbdc1", null ], + [ "setIntrinsics", "classmsceqf_1_1_pinhole_camera.html#a0f35048114204c3577a67b60cf720555", null ], + [ "undistort", "classmsceqf_1_1_pinhole_camera.html#a00b6ab4337fd7db73e51eaac8d736632", null ], + [ "undistort", "classmsceqf_1_1_pinhole_camera.html#aac9dfa0d780e38b9aaf2afba4a834ecd", null ], + [ "undistortImage", "classmsceqf_1_1_pinhole_camera.html#a732c98908e5a69c70f001e39e1461b78", null ], + [ "distortion_coefficients_", "classmsceqf_1_1_pinhole_camera.html#af4b4a83ad80144eb2dabda3b8a79334c", null ], + [ "height_", "classmsceqf_1_1_pinhole_camera.html#a45e790baa7d185202bd128332b484006", null ], + [ "intrinsics_", "classmsceqf_1_1_pinhole_camera.html#ae8e0ea25ffc07d76f2692470b66c58a7", null ], + [ "width_", "classmsceqf_1_1_pinhole_camera.html#a780e1bd4774b8451af7af73bc34f76bc", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_pinhole_camera__inherit__graph.map b/classmsceqf_1_1_pinhole_camera__inherit__graph.map new file mode 100644 index 0000000..8477061 --- /dev/null +++ b/classmsceqf_1_1_pinhole_camera__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classmsceqf_1_1_pinhole_camera__inherit__graph.md5 b/classmsceqf_1_1_pinhole_camera__inherit__graph.md5 new file mode 100644 index 0000000..f6fb697 --- /dev/null +++ b/classmsceqf_1_1_pinhole_camera__inherit__graph.md5 @@ -0,0 +1 @@ +7824936e19d69124b8d960423f0f50d6 \ No newline at end of file diff --git a/classmsceqf_1_1_pinhole_camera__inherit__graph.png b/classmsceqf_1_1_pinhole_camera__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0372a22e60da172c9944460ef95c4e99ebb4b5f4 GIT binary patch literal 9078 zcmZXa2Q=03-^YKht!%QnE@c!#_LiB9P)6A@v&rV#o2-n;%-%cMduNkP_TI_r`Fj56 zJkN8^bDV?Yy1(!E?AQB-s3^(e;!xs15QHl)C#4EOC=TFvYb*@#eInq*2>ie>RFIW| z{@s10H|EAd5FC=1l2CU^*_(HLN22k7<8X1$I?hv8Tv18_w+{=^Mb5Xvm2O5fSSLL< zViwMsW#XEZl<4|vz#)Q@h*Y*yBI}U^x|aG=N<($V4)J#?D}mFucU9@{@h2x3YLTV#j3~&WYO6o5I<3A7XOoBIkxu1}KaMAlv`EknpJD5d%9r zp1HZX%U<==_Pa+cEZ9d!N5}2~k|>y%nD=RgHJhZkA3egDoSfVo%Z(bkY-?{{USG$+ z$B)7cLjG`5xthz33z75UJW}ItuC#$Kcak>4wF_N#Ai&+p`erfwNg$Fw+ zDQUXahVJsuL8-&{xw&_9-yJahFmT(_CH#hSmFZU3)|M-OiaxitW`|ljI?#%>s|#v} z!o%;cZfuCz7Ew@8^z`>z4p&^A@3q%h&FUK&`RO*gNqkc^SnG@D_q;qso$60ypW`-F zlzj8%0W}THNTd57w*($;ZojCgsOu(;QeBs;z1rxwIDh)*f%;1=KFVC<7z&DtozV=k zhqqS;?X9g6w?Cqz2|pez;L_32VYNDs>qlWSojhO!=VWJRms3)bF)*N?o1f>jT@t4j zb|IK5)sqdvqah$5fC40aDk`|B1?kZ11=;saRNh)6dZi=j0@mk&$sZ|7B`-yefaXHHNvoyj9Ej^$Xrlcna{w^?On1P}og)xF1$AAg@K(fP5m`>Rr= zaKhHsR$N>hdcwwr0>v=W^YT6bMlP$ao=8prH=yVB7d?itwY?qH^Xj~~`nG=ZPY|7# zc(d0{6_EfGPRhU zAhJJ!<2ja(L3`kY7L#R@OX4^5-ku(DGc)FQIy%c+TOkKcS9txO+5F<;NgEm(Y&VDL zQ-ocKpfZOIrR(!qo5Q0cA3s0Tri+z(tE;OJL_|bXX4H-6xHXDiQc^Pg-62=_gDtp_ z5A*e}Y1JYlB07CgF(F9o_JX0tW-&67MyPFY5H}+ugWqYJq^P)<(`*<%Ju_oCS7!$m z5LLy;zmC|N$^Q0DqWI14{M@fFC~v}IuF3PQ?gltx>*y%a&DEdowf+Rc2M->3^Kx+! z#V}^*HG9>4+@t)sH-ioZM@7kMYLW{&?}zWt|6o8MV88_nU)7eJHQN2g5OmyB`3)lE z(dKL|M|ebp-BJq*wU`&RuCDII?BZ?U#f1yCsKdV0`nksn1xPoS1+%c-TkJ+?Hd-O+FNfKTB<{I*Nb zBgJGiWo2au84wU4eBR*w&#U2LCCr{?Z>GAvFa9wh0Rb{N80%&7GkIEsougw%DCuK; zV`DTbDk^dciq?@4LTI?r-PyHgZNWT!djU@8bwLk_XN|y_m@pgN&Ln?+6|vOWu%53s zxHw!szH*PP2nxcyzPUkBPkng<;sgc4#HW?g*M|dRLXeV@l4i99DGUay>YJ=?die0+ zQy!j)U$iuWj>xDe{F!P?rqbEsx3#N(ajiIX>>y-nDvim{uej;kv%w{TS|=U74FUQ4 zjWA?>zInu-iLP)8zp}EYjEsyez^Drg3uR?x;^yWo_6`o!C0%(+7vH{p>*?*4kd%Ze zr3#`$a70{OoOtmY20lJAo%(C1tVZx>k@3Xx;$pT(N-23~;1Nx&J07LEX^@Y{d*Y};gd-qO7ON-^t1whS_1=vPmI{W z0aTbtm|0kS0s_E3IXLiZZ5Cxfwn$fDK0NN{Xz%KhDHH}#%S?hpLQ2|eGzyLe&%}%z zoSxR)Nt5(+j6k2_{W(2NjuQau?Cd-i{2U)I5yP06nAp>wuU;THHPzMz6LC9j>5XOL zbUD;7b_MvHYyOrR%T}Ar_|K>B_~TcYN)DY-<8^_A}6SO zKnqvOpKsBFm`VAoe`O`NuFEodmDTJ6KI=K8YJLazPhme0`%vCxpYFV$M!xzc@IqBp z)!`gPDtRpbR9mN}$ej1*BtUHS_4lJd&Ib$9;CGN-4b06$Qc|ezQ$EA8 znyHeIm&XRHuI`PgoORljZtGrWP4*_!?k81J`V)|gxIL46{@e~EmDTn2wyrJ=j)p@R zv^1fi*QufB8Q^`hqsPp_5d>_Y>v{GX5(j?E`(YXh3KjIax9L(=Job@d+vVBL(f*Hv zww@lWR3Yb*=nn-C85!Xq(hD_8CzGw85Hl&oO_kUG5j7o3q3qw%*0Z#5`XoI zu%e?TgYE9oO74Lm*+}bG7!CQ@AhA|mQQ(QjRkMn)%gXD$B zJx?cvu+k-Acs565?K_VPIS0dYJPFA0dmAxpJME~1( z=+wd*?N{7mPIcx(1fdM-Q(|%Sd1uieNEMR)wAAG4Uzd?BFbEDbE1+lsZchc57L<%CquF@dKq5J35YJWkQ2jRq`SVvs(b1dG)AJqZeM1W(1?V9)@Q*fCP*UsN{tdIDhShPxF;wIxZuYeae9$t6 z<@Bu?0{^Hyd(nWAE)F@Rosz&&NS^EO%Fw-XUNPN8x!dcBo|s)Kl0vfEHjRJ)j)r~} zQq&c`XYhfJ)%v-<;Fe$smM>N%?^TExCFiqA7-)OloNA$E0y!zRMu%5C4HZ@=wnwS7 zlJ3m(UMonb1~o75J#VzQVXMxr`EFg}^4-oJZNjT-tE8y0Xd!C}vj{!~_-f7QQrczc zfdNaL3$Zva^2Oh%*Z&f^&@;Y#dq|Wc9Ua!RViXt>D=-$8PEILT`bI?As%d`Taq2^tmERO9) zc&%Ko8?3zZ621H+o+vdf#t=9eIj>lJO8JBv3mD1rnfF4!F%z;GyKQc;y)*JE0XsCq zN{U>QeQ9LQn^Qm_a6p?-)xV{D(93Z9=ETo%lTK>-{t^)qoBno1^|x&Aee^#AT3LyN z(pecD9MBWe7KiGG_7F3wZje9cphz^TcwQQ_uRrJemYwRs#a*UzR@S2@1(EIC60e?> z+c6ji`n#|1h9o~w?h3VkLgvqh;?K&HSZNo>Jn8&SvG>|6!*Oyn) zn~W@mKvWQ5?LsQ)D*D$s&0)rOOR&?L7({i3n_1%oY;D>bd24s)}{ZrS$dHThWiu5LwzoCm7vv^To#_zm z@Gh#cp1FT9bd9$B`<&^B&I{(raAi5Y=72(7nAfpdjI#2%son6hvp0ojx>4_h6h_SV zHze(pMor<3$bd8wog}eg?Evv+k(2Xg*?4HX`U3?^iC9oAipTvW@j{#dv&h;U9;sNo zm~Z7RQv~GrODDdtC(FdcY{X0sIcmcO_KdhS&-LNRKa$s-+Tb=Vk_i>n(8?sRQrJ1V zv-h&30-KBsBf^xwmI)39=VYk+7-KoAFb^jXyN*?N>U~IHJbmPw8ci5uDx-${@BegP zFT%JLa6RGq$d{z4sUJa**jcM)rUgm}TP6O;SUf2fF^&uI@;_Uf2G>i6>GvX78}a_w zRI4NqevmjF+bQDk z@t~dX0)+@8kPdIu9@MvG6KPd4`4Ah(5w=_n(r5zMPt;;KGbJ0EBxHQ-$8nz+zp_f7 zJIlNxyMuy&HIAr3AeyR#t-bTli-!$ZJ;W{f6eG_R7CFni@8*T!>3L&AgMgoC2BLaL z!xe||F9O42UGH(HZsp}NyV9w9sw}oi&nBhIVQZ4jnq1g{@GJm(s1?1&TA@&?^Bj?!B zKG;EQizn(BMcmAh;}k(dBu?>g9(`>6^s*_`5x>YaFOzQyPtE=Ku8Afn*Sc`5dF|Pn63#) zkbO{>XpjiJiv-px#V?QZa^~3CP7U04a-HeIz+iYLJ*8v?Bq(`#fxNnDx*=m|NG#W-ov(Nzm zh3((t_XA(}4x$bDJuaRG;?Z2ny@y_h2*csf9nb-tc64%bsIur^G%#><#XMA?{eGR3 zH$;a^5enuY$NjnQ68$sN(=8(-N97Y%*4B~0JH%?%pr!M@S?0%&-N%Qk`l1=JPu2(9 z!JJ#*^wfH;j!@^vM`<}ZtlOIdZ!!DSBJ=*z4Ga$M=uGzX$n9v_ef$`xUEBrO z4joG%pjUv3Tt)XmNE)G!OKk!7_mF>(D%`uI&c;6_imx!ZwV z?UvinT^D|e{R;=nwav{@i@2YUU!Lizs>TST4QI*X`v(Q}pMZI37@#sRS>4TvVGr2a zR(oSPt>^f&v$Nq(pAt~z< z*=_!+WGX5u0+bGUM^*C5-|5Vn0XhVDURRa**y`D@Dsy7Mstmxqq@khlVWvvnnv8>k zTjJEhHdh=Nx`BU!T1si_g^>G0w+v-x_Sp%ekX?+zQ2Z>RirQJt#S zlDJKWD@~Pmr^`{n93-c#Tv|D_ZZV$s%H^Q(&(g{Y%)!B-;rh7$4kiA(y)gi$l<>n? z9!eF0kO~Rx2GeB*cfez|#_DK9maca#E+N5aBvaaKs)S~DZ|`WvvNWTiVf(8FWdw%8 z=O;ek!e^??{aRYYS2r}~{ffc(b??CwWNa)knBxvhy>IRTJlh7I&S^FCjFE|{9RNJ> z3ER+!2*rr4`aE^kyJ;Uve^bb5G0v>1soB!khr=Kfj?~sUYsp+$F&s$Z#sm|%&zCP$ zH6MP#pgY0_Lq&~_i9vLy7pA<*k}){jo;W-`_0P{|5f&CcJozbx3IRGB2pqIOq(NIn zg+NtJEkiYbo9#!&Ubdxs6eSN17(#=Zo5gaJ(@H9bx&c_Ve&^vK%%ct%DN6dEMenrZ zlN0l!l}<+g^niP0s$O2AY&!LEz=FZSn-@pFjZI8sx})fFccx0m9+x&qf`F8gic3n8 z|NQxL)%*Sj^kL1G5Usvat@mReH|DW*aYLmsWb<`)e(J2GgoHYcZt-CLH=ihYZBGFZb|$b*@tUI*z=i-RMqNPlAKKwy~iGE+Ai>HJQiq!P?r|D{v<)@h=4JSLGt? zef|9M-T&+h&VFyIr>w`{wCL~Xkg6yz&j9RtG~;>DCJ0xj$zLjf-II`!@$L6gv)y50 z_JhUd=GLQdYJr%US{r3D4&CgNji0d~!Bv}&1p>>ku(3tV)L1DLz9~i^G65GK4yWMW z?24dr1nEsRU)}NY)Et4(ZgAl|+nI_Q9Ua{SF0s15uaxF-j7><$rd8qZ;o)(2nT}`M zuidu3C77*rgh)wM*)B^SpPqtPWqhHakOdx00M$Eg5d{PV#R3{nZTaE_j@4pQW7jD- zZO_`a^OwCe`EXO8AE{8SROwPn=I1Gs*WWj z98Bg3`^>KM0@y#BOxH!ia={;)c>CqLQ+Z8I&hW5Gz0=O;$-?w>aZ?&x#r3;_g-a`3 zH_5fHqcp{f7*%QmgzOtQJaA8$tPB8_i6n>PA8Rmkaz>Nj1kABZNdXlk1El>4X49L? zv(@G042P?64UOl2P;{)cZj>`F9qP9~a6F_MlpE+{f|Gtq|R`w}4m|d^wrK_u}lvMVc!mW4>-3%aaMKj79 zTUfjRO+g_~;8m=v&YHSSzw?5ttS&DrYv@PNxR)?PN)UkR8?0^ z0KuKmwY0Q^1a`azG~4#$$Ip70c+}#$y0j(lzQdfIor_(7s~)TDyb>|-I_Pg}Tk+X} z7ySJY93CEy5uag6HLsknz5*&jU~VoG1}>#PK!z5BwY9ZVl>dr$LMiz8__A|z`}M{S zs-1S;yi66WUieSUDx_~4+n#M~7gm0^0KP9gU+}t+@}MvvFtBZWoCKgz=^r2W4j0@H zGP1ML?#QTwgwN#B%HCcC5(xpii2#giELS<9)}~aqQQyWUYSH^24LUly_LafLP%3?g zpV(wecQ>XKV>5{CSE{PM-xLyHd4gZNBdCICMcm-b%viP7^RT-|Wdgw0$~pd8i3bFL z>*d1DETHY+A%(AW-@kw8;pu62eR1U0Z!LEhClhP)?kQ6m8(C)Kg<7LyVD7CL!+Cn&J%)T1#mF@fd{&dsgn1#;_sAOo?dq^8;( ztwb?K3l!t*x!v-b@HIOw9Jt(F$RZ~+d{=Ej;q&DzSbim&MP=||(>Mk^GZEa!U;|Bq&f(%}LzIJ+g zsx3r^UjUv#F6JdnL`)3A!Y4u34IA*_4p8CBf%I~pf(uRjbx<#$wmX`j{j@LU++@ww z*15U>{R$y9b@+*oNM8)lLQoXCqUfSPocjj^&;xM>BbK}Wy48CY3yz|~0ty%a>` zGVl^`NK~Wl$j)-3?!&bNJ%o@DmHYW_>q4XZPWYXN9DDD&=c2&H#OOfpU2-(~ItUa3 zP=U_(=fh%Rh&+H|TjzD-7U9P9G7(AVef^5v=+FNAbfxJ}RI4oa-)P9pOaxGnGAb&F zKmut4?I2v9C^R&ba-4Qz4Kx!TN1bGMea_)gH{EYg$7KPi2A!dw!^Y6^9uNyw>kGCl z`maPv1ivrc58j4cj928kTW|_wXeUU z-+KTT5upKdNGDK6%Z+=9fNt_Kg`W^KJmO%X65Ym7P@J=d$U(cqdhUpnYPLXP%>}fgn`6yUzlc3Y;YYh7bCur*|T+ zpd%JoQW_|oCWFZVwF_?dfD(?cbKdA^b#NupcPShfM8WNBZy&RmCg%MW^ww*CfO_(& zTY-lXxAFFJXB=oHTs%DAHom$mS?)ezXO9FLaPRnd91zc#+1Zu8Iai1Gn6s zseTNSLEi~boO;^Z{Xk|l?+7LYwX{vJd!V?u*c?=lYNf2tcH)q_wst{fa(TTnU@)JnVJ)@&BzP`Q|;Ym}q5uZ8qlpZ{IPzA=YyHW;b z8!m2c29WS(%8f7^FSiR%Psfy}%*ZmEyN(Yyao94Ofj z5pL=Aj(e!}Gsm~~juXFB6zv9t`S~@y#0=Wdw95?xu0@%d|@8lmmeOnduNUsGji~gJ1ZfKyv7vnMv-7q*1V_P7V&f zYXi5(^NmeSWkLSP{`84}i;ldUaQQuHpyfWcU}R0{!awHGEuaOpy>qq@a2iITcgLI#MP{;Odyo32@1z~Ap!FzL)*-P&&#RAx9vBu!lmQG#Ym z3F|1LwDcf$=3iPJkdYZ4K12s%^k6;S`DP@o2o8c$%;j)tUODsH^<-V={N!Y3JcUll zz|b($NdRtHf9t_7eF=jzcyU2*3$zUp zgx|~c_8@$|U_o-r`xDKNOa`g&E1%wJAjU)FMi|K0J8=XFyyc+Lh~B8^V+`YK87V0^ z0wKAWQT9MGUw!h@F@m!99o7*sVTAWFJ?A99KY^G?e#K)})^*e}H`O)nkIf)VJUqL> k2T1<+Q!3#+@Bh(Z+fIx((2{n757I#L(n?Y#lKQ^?1zX2%Jpcdz literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_projection_helper-members.html b/classmsceqf_1_1_projection_helper-members.html new file mode 100644 index 0000000..b28ce78 --- /dev/null +++ b/classmsceqf_1_1_projection_helper-members.html @@ -0,0 +1,130 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::ProjectionHelper Member List
+
+
+ +

This is the complete list of members for msceqf::ProjectionHelper, including all inherited members.

+ + + + + + + + + + + + + + + +
block_rows() constmsceqf::ProjectionHelperinline
block_rows_msceqf::ProjectionHelperprotected
dim_loss() constmsceqf::ProjectionHelperinline
dim_loss_msceqf::ProjectionHelperprotected
dpi(const Vector3 &f)=0msceqf::ProjectionHelperpure virtual
feature_representation_msceqf::ProjectionHelperprotected
operator=(const ProjectionHelper &)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
operator=(ProjectionHelper &&)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
pi(const Vector3 &f)=0msceqf::ProjectionHelperpure virtual
ProjectionHelper(const FeatureRepresentation &feature_representation)msceqf::ProjectionHelperprotected
ProjectionHelper(const ProjectionHelper &)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
ProjectionHelper(ProjectionHelper &&)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
residualJacobianBlock(const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map)=0msceqf::ProjectionHelperpure virtual
~ProjectionHelper()=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelpervirtual
+
+ + + + diff --git a/classmsceqf_1_1_projection_helper.html b/classmsceqf_1_1_projection_helper.html new file mode 100644 index 0000000..36694e2 --- /dev/null +++ b/classmsceqf_1_1_projection_helper.html @@ -0,0 +1,392 @@ + + + + + + + +MSCEqF: msceqf::ProjectionHelper Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::ProjectionHelper Class Referenceabstract
+
+
+ +

ProjectionHelper interface. This class provides an interface to the implementation of the projection function as well as its differential. + More...

+ +

#include <updater_helper.hpp>

+
+Inheritance diagram for msceqf::ProjectionHelper:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Vector3 pi (const Vector3 &f)=0
 Projection function. This function projects a 3D point.
 
virtual MatrixX dpi (const Vector3 &f)=0
 Projection differential function. This function computes the differential of the projection function.
 
virtual void residualJacobianBlock (const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map)=0
 Computes a block row of the C matrix and a block of the residual, corresponding to the given feature This method compute the Ct matrix, the Cf matrix and the residual for a given feature.
 
const size_t & block_rows () const
 Get the number of rows of a C matrix block and a residual block.
 
const size_t & dim_loss () const
 Get the dimension lost due to nullspace projection.
 
+ + + + + + + + + + + + +

+Protected Member Functions

ProjectionHelper (const FeatureRepresentation &feature_representation)
 Rule of 5.
 
ProjectionHelper (const ProjectionHelper &)=default
 
ProjectionHelper (ProjectionHelper &&)=default
 
+ProjectionHelperoperator= (const ProjectionHelper &)=default
 
+ProjectionHelperoperator= (ProjectionHelper &&)=default
 
+ + + + + + + + + + +

+Protected Attributes

+FeatureRepresentation feature_representation_
 Feature representation.
 
+size_t block_rows_
 Number of rows of a C matrix block and a residual block.
 
+size_t dim_loss_
 Dimension lost due to nullspace projection.
 
+

Detailed Description

+

ProjectionHelper interface. This class provides an interface to the implementation of the projection function as well as its differential.

+

Member Function Documentation

+ +

◆ block_rows()

+ +
+
+ + + + + +
+ + + + + + + +
const size_t & msceqf::ProjectionHelper::block_rows () const
+
+inlinenodiscard
+
+ +

Get the number of rows of a C matrix block and a residual block.

+
Returns
rows of a single block of the C matrix and the residual
+ +
+
+ +

◆ dim_loss()

+ +
+
+ + + + + +
+ + + + + + + +
const size_t & msceqf::ProjectionHelper::dim_loss () const
+
+inlinenodiscard
+
+ +

Get the dimension lost due to nullspace projection.

+
Returns
dimension lost due to nullspace projection
+ +
+
+ +

◆ dpi()

+ +
+
+ + + + + +
+ + + + + + + +
virtual MatrixX msceqf::ProjectionHelper::dpi (const Vector3 & f)
+
+nodiscardpure virtual
+
+ +

Projection differential function. This function computes the differential of the projection function.

+
Parameters
+ + +
f
+
+
+
Returns
Differential of the projection function
+ +

Implemented in msceqf::ProjectionHelperS2, and msceqf::ProjectionHelperZ1.

+ +
+
+ +

◆ pi()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Vector3 msceqf::ProjectionHelper::pi (const Vector3 & f)
+
+nodiscardpure virtual
+
+ +

Projection function. This function projects a 3D point.

+
Parameters
+ + +
f
+
+
+
Returns
R3 vector representing a 3D point
+ +

Implemented in msceqf::ProjectionHelperS2, and msceqf::ProjectionHelperZ1.

+ +
+
+ +

◆ residualJacobianBlock()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void msceqf::ProjectionHelper::residualJacobianBlock (const MSCEqFState & X,
const SystemState & xi0,
const FeatHelper & feat,
MatrixXBlockRowRef C_block_row,
VectorXBlockRowRef delta_block_row,
MatrixXBlockRowRef Cf_block_row,
const ColsMap & cols_map )
+
+pure virtual
+
+ +

Computes a block row of the C matrix and a block of the residual, corresponding to the given feature This method compute the Ct matrix, the Cf matrix and the residual for a given feature.

+
Parameters
+ + + + + + + +
XMSCEqF state
featFeature helper
C_block_rowBlock row of the C matrix
delta_block_rowBlock of the residual delta
Cf_block_rowBlock of the Cf matrix
cols_mapMap of indices for the C matrix and the residual delta
+
+
+ +

Implemented in msceqf::ProjectionHelperS2, and msceqf::ProjectionHelperZ1.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_projection_helper.js b/classmsceqf_1_1_projection_helper.js new file mode 100644 index 0000000..a637c68 --- /dev/null +++ b/classmsceqf_1_1_projection_helper.js @@ -0,0 +1,12 @@ +var classmsceqf_1_1_projection_helper = +[ + [ "ProjectionHelper", "classmsceqf_1_1_projection_helper.html#a5e04febec3b043a59995fa76d48c8f4c", null ], + [ "block_rows", "classmsceqf_1_1_projection_helper.html#a772f3460fab451ec75cea7bde3a5cf1d", null ], + [ "dim_loss", "classmsceqf_1_1_projection_helper.html#a5db4746cda6be4f465dc88d3cce68863", null ], + [ "dpi", "classmsceqf_1_1_projection_helper.html#a6a67252b227c043f901c7742aec9ad29", null ], + [ "pi", "classmsceqf_1_1_projection_helper.html#acf572fee6dd470f8b74152831a9066ad", null ], + [ "residualJacobianBlock", "classmsceqf_1_1_projection_helper.html#a6e5d693becca05644db55c84444491e2", null ], + [ "block_rows_", "classmsceqf_1_1_projection_helper.html#a4514958bb1cbd316db046c870f5096a9", null ], + [ "dim_loss_", "classmsceqf_1_1_projection_helper.html#a5ac595a77f1968b887c49e4635066b3a", null ], + [ "feature_representation_", "classmsceqf_1_1_projection_helper.html#a82ccba4a9cd4f53cd4b760e3f255050c", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper__inherit__graph.map b/classmsceqf_1_1_projection_helper__inherit__graph.map new file mode 100644 index 0000000..0cc6475 --- /dev/null +++ b/classmsceqf_1_1_projection_helper__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classmsceqf_1_1_projection_helper__inherit__graph.md5 b/classmsceqf_1_1_projection_helper__inherit__graph.md5 new file mode 100644 index 0000000..ed64e85 --- /dev/null +++ b/classmsceqf_1_1_projection_helper__inherit__graph.md5 @@ -0,0 +1 @@ +4035a026d7db10e44e1eacc820205611 \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper__inherit__graph.png b/classmsceqf_1_1_projection_helper__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ec65f328e1c48ca61ebb51a6a3793f3cc9e75981 GIT binary patch literal 9381 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 bS7>eHmkaHEw~=t)5kgu*K|Ej7!1sRu_DdH$ literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_projection_helper_s2-members.html b/classmsceqf_1_1_projection_helper_s2-members.html new file mode 100644 index 0000000..44298c6 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_s2-members.html @@ -0,0 +1,131 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::ProjectionHelperS2 Member List
+
+
+ +

This is the complete list of members for msceqf::ProjectionHelperS2, including all inherited members.

+ + + + + + + + + + + + + + + + +
block_rows() constmsceqf::ProjectionHelperinline
block_rows_msceqf::ProjectionHelperprotected
dim_loss() constmsceqf::ProjectionHelperinline
dim_loss_msceqf::ProjectionHelperprotected
dpi(const Vector3 &f) overridemsceqf::ProjectionHelperS2virtual
feature_representation_msceqf::ProjectionHelperprotected
operator=(const ProjectionHelper &)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
operator=(ProjectionHelper &&)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
pi(const Vector3 &f) overridemsceqf::ProjectionHelperS2virtual
ProjectionHelper(const FeatureRepresentation &feature_representation)msceqf::ProjectionHelperprotected
ProjectionHelper(const ProjectionHelper &)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
ProjectionHelper(ProjectionHelper &&)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
ProjectionHelperS2(const FeatureRepresentation &feature_representation) (defined in msceqf::ProjectionHelperS2)msceqf::ProjectionHelperS2inline
residualJacobianBlock(const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map) overridemsceqf::ProjectionHelperS2virtual
~ProjectionHelper()=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelpervirtual
+
+ + + + diff --git a/classmsceqf_1_1_projection_helper_s2.html b/classmsceqf_1_1_projection_helper_s2.html new file mode 100644 index 0000000..2b0776b --- /dev/null +++ b/classmsceqf_1_1_projection_helper_s2.html @@ -0,0 +1,345 @@ + + + + + + + +MSCEqF: msceqf::ProjectionHelperS2 Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::ProjectionHelperS2 Class Reference
+
+
+ +

ProjectionHelperS2 class. This class provides an implementation of the projection on the unit sphere as well as its differential. + More...

+ +

#include <updater_helper.hpp>

+
+Inheritance diagram for msceqf::ProjectionHelperS2:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for msceqf::ProjectionHelperS2:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ProjectionHelperS2 (const FeatureRepresentation &feature_representation)
 
Vector3 pi (const Vector3 &f) override
 Projection function. This function projects a 3D point on the unit sphere.
 
MatrixX dpi (const Vector3 &f) override
 Projection differential function. This function computes the differential of the projection function.
 
void residualJacobianBlock (const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map) override
 Computes a block row of the C matrix and a block of the residual, corresponding to the given feature This method compute the Ct matrix, the Cf matrix and the residual for a given feature.
 
- Public Member Functions inherited from msceqf::ProjectionHelper
const size_t & block_rows () const
 Get the number of rows of a C matrix block and a residual block.
 
const size_t & dim_loss () const
 Get the dimension lost due to nullspace projection.
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from msceqf::ProjectionHelper
ProjectionHelper (const FeatureRepresentation &feature_representation)
 Rule of 5.
 
ProjectionHelper (const ProjectionHelper &)=default
 
ProjectionHelper (ProjectionHelper &&)=default
 
+ProjectionHelperoperator= (const ProjectionHelper &)=default
 
+ProjectionHelperoperator= (ProjectionHelper &&)=default
 
- Protected Attributes inherited from msceqf::ProjectionHelper
+FeatureRepresentation feature_representation_
 Feature representation.
 
+size_t block_rows_
 Number of rows of a C matrix block and a residual block.
 
+size_t dim_loss_
 Dimension lost due to nullspace projection.
 
+

Detailed Description

+

ProjectionHelperS2 class. This class provides an implementation of the projection on the unit sphere as well as its differential.

+

Member Function Documentation

+ +

◆ dpi()

+ +
+
+ + + + + +
+ + + + + + + +
MatrixX msceqf::ProjectionHelperS2::dpi (const Vector3 & f)
+
+nodiscardoverridevirtual
+
+ +

Projection differential function. This function computes the differential of the projection function.

+
Parameters
+ + +
f
+
+
+
Returns
Differential of the S2 projection function
+ +

Implements msceqf::ProjectionHelper.

+ +
+
+ +

◆ pi()

+ +
+
+ + + + + +
+ + + + + + + +
Vector3 msceqf::ProjectionHelperS2::pi (const Vector3 & f)
+
+nodiscardoverridevirtual
+
+ +

Projection function. This function projects a 3D point on the unit sphere.

+
Parameters
+ + +
f
+
+
+
Returns
R3 vector representing a 3D point on the unit sphere
+ +

Implements msceqf::ProjectionHelper.

+ +
+
+ +

◆ residualJacobianBlock()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void msceqf::ProjectionHelperS2::residualJacobianBlock (const MSCEqFState & X,
const SystemState & xi0,
const FeatHelper & feat,
MatrixXBlockRowRef C_block_row,
VectorXBlockRowRef delta_block_row,
MatrixXBlockRowRef Cf_block_row,
const ColsMap & cols_map )
+
+overridevirtual
+
+ +

Computes a block row of the C matrix and a block of the residual, corresponding to the given feature This method compute the Ct matrix, the Cf matrix and the residual for a given feature.

+
Parameters
+ + + + + + + +
XMSCEqF state
featFeature helper
C_block_rowBlock row of the C matrix
delta_block_rowBlock of the residual delta
Cf_block_rowBlock of the Cf matrix
cols_mapMap of indices for the C matrix and the residual delta
+
+
+ +

Implements msceqf::ProjectionHelper.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_projection_helper_s2.js b/classmsceqf_1_1_projection_helper_s2.js new file mode 100644 index 0000000..938f150 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_s2.js @@ -0,0 +1,6 @@ +var classmsceqf_1_1_projection_helper_s2 = +[ + [ "dpi", "classmsceqf_1_1_projection_helper_s2.html#a0acd0d20cd2b4df21bcdc55d62d7bd10", null ], + [ "pi", "classmsceqf_1_1_projection_helper_s2.html#a4c351bcc3cf3d7941e9d620cc23ea7fa", null ], + [ "residualJacobianBlock", "classmsceqf_1_1_projection_helper_s2.html#a675fb8dc7bd5a8af52e7a9a86b54e0f8", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper_s2__coll__graph.map b/classmsceqf_1_1_projection_helper_s2__coll__graph.map new file mode 100644 index 0000000..f227b6d --- /dev/null +++ b/classmsceqf_1_1_projection_helper_s2__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmsceqf_1_1_projection_helper_s2__coll__graph.md5 b/classmsceqf_1_1_projection_helper_s2__coll__graph.md5 new file mode 100644 index 0000000..3a75320 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_s2__coll__graph.md5 @@ -0,0 +1 @@ +06f1dcd79ff5300263a9227b1a32903c \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper_s2__coll__graph.png b/classmsceqf_1_1_projection_helper_s2__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eeee6bd34ffdded934be625b8255acd315df7f78 GIT binary patch literal 5580 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 + + + + diff --git a/classmsceqf_1_1_projection_helper_s2__inherit__graph.md5 b/classmsceqf_1_1_projection_helper_s2__inherit__graph.md5 new file mode 100644 index 0000000..3a75320 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_s2__inherit__graph.md5 @@ -0,0 +1 @@ +06f1dcd79ff5300263a9227b1a32903c \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper_s2__inherit__graph.png b/classmsceqf_1_1_projection_helper_s2__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eeee6bd34ffdded934be625b8255acd315df7f78 GIT binary patch literal 5580 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 + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::ProjectionHelperZ1 Member List
+
+
+ +

This is the complete list of members for msceqf::ProjectionHelperZ1, including all inherited members.

+ + + + + + + + + + + + + + + + +
block_rows() constmsceqf::ProjectionHelperinline
block_rows_msceqf::ProjectionHelperprotected
dim_loss() constmsceqf::ProjectionHelperinline
dim_loss_msceqf::ProjectionHelperprotected
dpi(const Vector3 &f) overridemsceqf::ProjectionHelperZ1virtual
feature_representation_msceqf::ProjectionHelperprotected
operator=(const ProjectionHelper &)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
operator=(ProjectionHelper &&)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
pi(const Vector3 &f) overridemsceqf::ProjectionHelperZ1virtual
ProjectionHelper(const FeatureRepresentation &feature_representation)msceqf::ProjectionHelperprotected
ProjectionHelper(const ProjectionHelper &)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
ProjectionHelper(ProjectionHelper &&)=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelperprotected
ProjectionHelperZ1(const FeatureRepresentation &feature_representation) (defined in msceqf::ProjectionHelperZ1)msceqf::ProjectionHelperZ1inline
residualJacobianBlock(const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map) overridemsceqf::ProjectionHelperZ1virtual
~ProjectionHelper()=default (defined in msceqf::ProjectionHelper)msceqf::ProjectionHelpervirtual
+
+ + + + diff --git a/classmsceqf_1_1_projection_helper_z1.html b/classmsceqf_1_1_projection_helper_z1.html new file mode 100644 index 0000000..6230852 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_z1.html @@ -0,0 +1,345 @@ + + + + + + + +MSCEqF: msceqf::ProjectionHelperZ1 Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::ProjectionHelperZ1 Class Reference
+
+
+ +

ProjectionHelperZ1 class. This class provides an implementation of the projection on the unit plane as well as its differential. + More...

+ +

#include <updater_helper.hpp>

+
+Inheritance diagram for msceqf::ProjectionHelperZ1:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for msceqf::ProjectionHelperZ1:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ProjectionHelperZ1 (const FeatureRepresentation &feature_representation)
 
Vector3 pi (const Vector3 &f) override
 Projection function. This function projects a 3D point on the unit plane.
 
MatrixX dpi (const Vector3 &f) override
 Projection differential function. This function computes the differential of the projection function.
 
void residualJacobianBlock (const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map) override
 Computes a block row of the C matrix and a block of the residual, corresponding to the given feature This method compute the Ct matrix, the Cf matrix and the residual for a given feature.
 
- Public Member Functions inherited from msceqf::ProjectionHelper
const size_t & block_rows () const
 Get the number of rows of a C matrix block and a residual block.
 
const size_t & dim_loss () const
 Get the dimension lost due to nullspace projection.
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from msceqf::ProjectionHelper
ProjectionHelper (const FeatureRepresentation &feature_representation)
 Rule of 5.
 
ProjectionHelper (const ProjectionHelper &)=default
 
ProjectionHelper (ProjectionHelper &&)=default
 
+ProjectionHelperoperator= (const ProjectionHelper &)=default
 
+ProjectionHelperoperator= (ProjectionHelper &&)=default
 
- Protected Attributes inherited from msceqf::ProjectionHelper
+FeatureRepresentation feature_representation_
 Feature representation.
 
+size_t block_rows_
 Number of rows of a C matrix block and a residual block.
 
+size_t dim_loss_
 Dimension lost due to nullspace projection.
 
+

Detailed Description

+

ProjectionHelperZ1 class. This class provides an implementation of the projection on the unit plane as well as its differential.

+

Member Function Documentation

+ +

◆ dpi()

+ +
+
+ + + + + +
+ + + + + + + +
MatrixX msceqf::ProjectionHelperZ1::dpi (const Vector3 & f)
+
+nodiscardoverridevirtual
+
+ +

Projection differential function. This function computes the differential of the projection function.

+
Parameters
+ + +
f
+
+
+
Returns
Differential of the Z1 projection function
+ +

Implements msceqf::ProjectionHelper.

+ +
+
+ +

◆ pi()

+ +
+
+ + + + + +
+ + + + + + + +
Vector3 msceqf::ProjectionHelperZ1::pi (const Vector3 & f)
+
+nodiscardoverridevirtual
+
+ +

Projection function. This function projects a 3D point on the unit plane.

+
Parameters
+ + +
f
+
+
+
Returns
R2 vector representing a 3D point on the unit plane
+ +

Implements msceqf::ProjectionHelper.

+ +
+
+ +

◆ residualJacobianBlock()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void msceqf::ProjectionHelperZ1::residualJacobianBlock (const MSCEqFState & X,
const SystemState & xi0,
const FeatHelper & feat,
MatrixXBlockRowRef C_block_row,
VectorXBlockRowRef delta_block_row,
MatrixXBlockRowRef Cf_block_row,
const ColsMap & cols_map )
+
+overridevirtual
+
+ +

Computes a block row of the C matrix and a block of the residual, corresponding to the given feature This method compute the Ct matrix, the Cf matrix and the residual for a given feature.

+
Parameters
+ + + + + + + +
XMSCEqF state
featFeature helper
C_block_rowBlock row of the C matrix
delta_block_rowBlock of the residual delta
Cf_block_rowBlock of the Cf matrix
cols_mapMap of indices for the C matrix and the residual delta
+
+
+ +

Implements msceqf::ProjectionHelper.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_projection_helper_z1.js b/classmsceqf_1_1_projection_helper_z1.js new file mode 100644 index 0000000..1e8b178 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_z1.js @@ -0,0 +1,6 @@ +var classmsceqf_1_1_projection_helper_z1 = +[ + [ "dpi", "classmsceqf_1_1_projection_helper_z1.html#a31884382388f3acf7b6a95e0d146d7c9", null ], + [ "pi", "classmsceqf_1_1_projection_helper_z1.html#af6b6ea58659baef976e65e2144463677", null ], + [ "residualJacobianBlock", "classmsceqf_1_1_projection_helper_z1.html#a62f13a69d5d0917693edfa373d80f479", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper_z1__coll__graph.map b/classmsceqf_1_1_projection_helper_z1__coll__graph.map new file mode 100644 index 0000000..1b613e8 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_z1__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmsceqf_1_1_projection_helper_z1__coll__graph.md5 b/classmsceqf_1_1_projection_helper_z1__coll__graph.md5 new file mode 100644 index 0000000..d9f941e --- /dev/null +++ b/classmsceqf_1_1_projection_helper_z1__coll__graph.md5 @@ -0,0 +1 @@ +9c60850165ccbd54c88c52eb7736810e \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper_z1__coll__graph.png b/classmsceqf_1_1_projection_helper_z1__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b6304f2586396c99df83e9b52b622adb1e4086 GIT binary patch literal 5289 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 literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_projection_helper_z1__inherit__graph.map b/classmsceqf_1_1_projection_helper_z1__inherit__graph.map new file mode 100644 index 0000000..1b613e8 --- /dev/null +++ b/classmsceqf_1_1_projection_helper_z1__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmsceqf_1_1_projection_helper_z1__inherit__graph.md5 b/classmsceqf_1_1_projection_helper_z1__inherit__graph.md5 new file mode 100644 index 0000000..d9f941e --- /dev/null +++ b/classmsceqf_1_1_projection_helper_z1__inherit__graph.md5 @@ -0,0 +1 @@ +9c60850165ccbd54c88c52eb7736810e \ No newline at end of file diff --git a/classmsceqf_1_1_projection_helper_z1__inherit__graph.png b/classmsceqf_1_1_projection_helper_z1__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b6304f2586396c99df83e9b52b622adb1e4086 GIT binary patch literal 5289 zcmc(jS3I0ix5h_AONf>r1ks}fAw+Lu)DXQ!FTv=&4MMa?ltdS8M2Q-r_bxxKpIM;{Yn0d#3%U*k}XZ@cY`ASuu=nnNA2n0f;r~uUf@2%kFh>r{Yy7WCt z0dKhG%JNXi_04ZqQ~oCiYR9eeBee;XoD=qoo;hEAT%N**`(v1*vt}5oZ_mmO! ztTeBFnCdp3zsthM8Q-d(&r^v;ndh)uM6a{5Iu4UeDhRyoEU*flkRk7fVz&*f8X%c( zlZ;20*DB~GuWb`cs!~104r!%QlhoEsS3aI;srh?>anE!M!-|A5#wjq9MM85}1u!}h z@8A1TIIm%Gll=_Y8yoy0S~*Z?>fm@6g+e*4AD*dWP@fchQzZh?~Y@V?;RZ6vTzhH${=BiyD*5wjV++Ig+zXf`(Ga>XckIp(2OD? zzb#Wj@Q9yTbQ7)|9*n7x)6)-qRZglO$NbF<9HhV634c1_5Ho2K_@&A3SmISQ7#klO zJ8XBJz^R+eXMsyZL`2)IS7}Wo|M8K}W7?+3Z$!?gdse6t!=AmB{+Edjo}1JxEG*2- z%(1btt)pL+**Q6xUc5*i9o49usj8}4`QAgf{tXVfbLWotZWm>O2PGxtqeqYEo?xo% zCwqs6oT{4Y>r*xJRn2&*M541N?AUpD0&ng!E!0lOQfgG!UZ9S|zk7GRe8VC}y!$QA z-Oq=st8ZrK=7ha>9tWO{W&W}g0{2^3Fs(ck%x`Q=-`Ic)I{dypjA5(EweY6@){ z^8qXHP{{ES9UUDM2CMK`*BKof!%|RET3j7Lav9Z`O$Aj|oqG`n2kz$P=E(xKWFU}@yWKRoxw(*X`^l#|#d^}t&b$l^44qwFaTysO z!^80i2nYyi1fv~hs<9SUS0lp1<%?FTPcHU{M%LWLc00+HG6GNgO-?XrPE`EXgflfx zYV6`E0Gr&8xkqM_x}~ zKN2K3D2LBtNF*{r1XLtNrvF}K1>$H!-^|8_?ce&koV9fxJ^{hn=c6N63EzW)o#SKO zqY}OEGVrPL?2c+CFcCPsxPpg?NmlIYWJxIljYgYaUtPk=K$hQ;x&X^SYxglCg5>(7 zNAj~oWK@(!-^AqPT{ShexP*iWvuI4f^uv4f5?t}|@y-0l-dhR6Qe*kdQs5GXB|_gp z0)u}jC@V8DGl$M!Ume%h)v0T1%h}qpe`0;9(f3rp;&!d1G$#kg;^p!DUu2BLtyWXs zoiR1Z?6I{c+}u`Y2Wv`AKR>Y{N0Kk^zvu`jwmCoA?5j^oq67~Lvtm`tAZ(p$@TzlJ z!qv=EQ9r`L!5JAIZY7qy$bzp&gDMe}v-$0azAh~-g&i6WdO-H}_kB)Rl0?V-FV7Bj ze8B>LUIA76%yyI+sO+R!bYAm@E!{W89Z;Ddy%&LYrHlE*cXmP#e8uD9;`9s+HMOBviTim zrlyipE_sqi#oi2O>8zy1oTj1XW@kmBN5+%H2V~tIj+^o>EH6WSeMKy~qZx#SQ@&gD z>}>~L(|{kue%kz#rPocyY8o13^!__o0p~|I5q%`;Nhm2P35%f{0HY&5e(e7FGZIvk zAbcvwxD4-AY3dI-505HW{mRpdIxt~=H;hU(d^#uDVIMP~lFTd3$7rh2fJ9m}2n&t4 z?`Cm2csS}N zuCgbj75TipYzaXJ9KU8{VtOd-$_%StK9kkyz>4OI#eOakLgmrhrp7HZz zO?|h(bHn^<8yowCxI81JrdFD74wxB_O-zI-Dcwm(NPzXf{`18P&G775JSh|GNoK9S zzJ5tx%BUm9Uv(r5q!j26OQ1ks+cgv=kIu%own}CA?x;jVIX`}A=})e?=M)qu=$91~keCD1nh-*=(GrrZA9=_l=EW44sz1*@f zKWr)NTWa1QtzxK0w&h-&8C?p zM#4cnY~=h+T*n%#jy48v&{&GAp)x< z`j)ohc5>9MGH(dEWKFTB-rOG2H;6Ha!!3t!R&+rHP6TLzKKftPdXK)1*Lp7ygu{zZ zL2y!5A-!Y5$q+7`C`Fx>q^L-$LrtXoe5b$0Rp3Cb!;PI?rkTDedSk~JW5BD%@MgUs zG9)Slf73&nLmrIhYh`3eB??4jOC!x(%I<0i?@37UR6J9gT6Izn4m)aQ(a_fJ%8EWs zttMn#!&-irMM+xYL-AYugp@k{tYK%y_;aprE|xE8NHB}u$ksJg4cRIYuE^E4ZoH%H zyV`$(F!t zv}T?T;^OSeM0fIW{~e!$I=|zmxFHPKybeLE{{H^HMxUXhhRc8d*3`Wo{J-Z%cREji zva8ydsfn@4@Ckd!Z~ep2apIfyY=f7Yeoak{&B5vj;F{RdS@IjGxPh(R9{TP0t;E^p zfHXj$6&5`o@uDj2COAM5Jd{K?bi+Etxk%ypfMeP; zAty(-%(5~bp2nTG6;}g7^UiCdEQ#EPC~gPIJ=_;Qd(5Ex1$=gdNNH&L0YXE7G?*T5 z&27vzBmrftocSW|CkUFlV1uz6+IOAXdNBPbkU$rAcgx+yF5>&!W>%dMq$PwN>nQH4 zqnZ{z$JrMUAUQW}>yw&9+t5(i%x}ap(JM{OkhC+{NT>aOib7e zx2azi<-=6SNJvbpQHkT@M>GsN(q#YJ<^ZS+8I9MjMK{*IB6IG=rt%ThOy>KBoB#${|A98s~c zBoJ3u*WQ7FuX%Z407EO`)6W2#W1Rru{n^`_Ra{IcBqW3x$}FpG%FPYM#=G~*z@RS( z3p-iV>*>|iRqLhZY7c$j4b46jgj02d5g~yc0F41C-VI*>$+sQL`wrFzz*(}eTi%GP zA3g(#%qtCz_HcScFaMC3ENCW0x@8#9=O2lA$F5J7@xK{<3=aE43CJN!46*E+n=9$5 zsY-xO8oahy!6gaES$9U2dDvyMICV>ZOnU;F^gG&Uo1ZsXyUxmbOu=nnnHc%f*6|d5 zes&h0loVc7^;}w78Y(Ae=HM{r7`?c-s1qRUydcHm2yPBK6f+weXDXnz$d4Z}t-;vi zlapQ|F&|eG6`g&2gfGvJZEiYj`inS#hIaP$J}U{j-v0{odw>19omE~QiMX2Y-l(eiY_Vee@;dAu~;3)+iXL|wD zD=I55b$_5yY64%O%1qQ06!7cn>LA5Nb!33%Kvt&+I#5GE=D!LP9!SFa_wQdpNy*J> zfz@?&bKBkD@96u75Sjz^0J;(w&qqbrczHAv8X8*evIGM-K3(U=2A~KQF!pfMVWrV^ zMX9l|F(NWj{fCgczP@e6=H8ww;%to#aE6q*IirdHE{@0-)xws5bI--4r4PpQh;xU0 zfto`!popX-6GTdGE_3tck)g!-M&&&Vf$e^bTk+esw^TDF1^||Q7`!7cS3?*Khr_*( zrft4gRauSZD&CkM{Yq>j`gvL`(TzSz zU)=rjh0x5Gkw~dg8!Eld`j#zJE!s)D-5EgWbCyyYx}&$+0D(~19w%y&rdil z2U$%^OPg?vy%qC4ZOp%P4C>aA0x%1}+QTktF>hW_0JHTT{g%Kr5CG~`eEHG}_%tXK z`Xkd{XsqbdLR8cppy~KTL|>bmGk`|zwBga;xL`nN>|9&|9DxU`>Tln^b@ueMzBt(h zsjD%4yc8n|lCeYAB*4nu7q8xZ$14nj7hhClpSD?FUr+78|Me1B@l6ceZV|0MgHfF_ zG*@!d)=p5L2KN42QIU(Qt43d4ZS4Zc^Jg$+O=~MFm-8bBU@4DV&jzw}okG{#MbQ5H zF98jLEdXfQByw{7dqoA~|8z!@U#y#4w*&D5RQc4nu@`KW41leY zVY@2ewSvLSSXI+|CyI1`0u2Pxb#ZawNgwd;ydxY4QH_CMQcw`2)VQf{y3(f3Ynu)j znVY6Yt@B@cWd+q(KkKQ>_qC22IC0<{fTIot8w`t&YlIFxr4yXjPH!d(*uX!c9SKE z178)Lz=`L_+cpcW!Nq#tZ}IT(AYFly3lsuh{^!cs4B-0s#02p4YVO}QLAWd3Y$MqR zxR*plMVFSAI@ZftK7w|^%Nq-VU;zYljS8T&6uy}No_+hwOd1HDq_gVg$Uh@;N=hLU zw}FbR*E|7&YAv#%U0e=L+yz2N_WQh9U2L4|3GWIvHIoY?pbgSYN-WyvwFsb5`BCH{9y g?`CI@19J`8I+sz-R;WROy+??moGP?b#`Nuf0MOoy)&Kwi literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_propagator-members.html b/classmsceqf_1_1_propagator-members.html new file mode 100644 index 0000000..d97c9a0 --- /dev/null +++ b/classmsceqf_1_1_propagator-members.html @@ -0,0 +1,120 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::Propagator Member List
+
+
+ +

This is the complete list of members for msceqf::Propagator, including all inherited members.

+ + + + + +
ImuBuffer typedefmsceqf::Propagator
insertImu(MSCEqFState &X, const SystemState &xi0, const Imu &imu, fp &timestamp)msceqf::Propagator
propagate(MSCEqFState &X, const SystemState &xi0, fp &timestamp, const fp &new_timestamp)msceqf::Propagator
Propagator(const PropagatorOptions &opts)msceqf::Propagator
+
+ + + + diff --git a/classmsceqf_1_1_propagator.html b/classmsceqf_1_1_propagator.html new file mode 100644 index 0000000..4f938c9 --- /dev/null +++ b/classmsceqf_1_1_propagator.html @@ -0,0 +1,254 @@ + + + + + + + +MSCEqF: msceqf::Propagator Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::Propagator Class Reference
+
+
+ + + + + +

+Public Types

+using ImuBuffer = std::deque<Imu>
 The Imu measurement buffer.
 
+ + + + + + + + + + +

+Public Member Functions

 Propagator (const PropagatorOptions &opts)
 Construct a Propagator object given the options.
 
void insertImu (MSCEqFState &X, const SystemState &xi0, const Imu &imu, fp &timestamp)
 insert a new IMU measurement into the imu buffer, if the given IMU measurement has a grater timestamp than the last measurement in the buffer.
 
bool propagate (MSCEqFState &X, const SystemState &xi0, fp &timestamp, const fp &new_timestamp)
 This function implements the mean and covariance propagation from timestamp to new_timestamp for the MSCEqF.
 
+

Constructor & Destructor Documentation

+ +

◆ Propagator()

+ +
+
+ + + + + + + +
msceqf::Propagator::Propagator (const PropagatorOptions & opts)
+
+ +

Construct a Propagator object given the options.

+
Parameters
+ + +
opts
+
+
+ +
+
+

Member Function Documentation

+ +

◆ insertImu()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
void msceqf::Propagator::insertImu (MSCEqFState & X,
const SystemState & xi0,
const Imu & imu,
fp & timestamp )
+
+ +

insert a new IMU measurement into the imu buffer, if the given IMU measurement has a grater timestamp than the last measurement in the buffer.

+
Parameters
+ + + + + +
XActual state estimate
xi0Origin
imuIMU measurement
timestampThe actual timestamp. If a propagation is triggered than the timestamp is updated
+
+
+
Note
This function triggers a propagation if the imu buffer reaches its max size. In such case all the entries of the imu buffer except the last one are deleted to avoid unbounded memory growth.
+ +
+
+ +

◆ propagate()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
bool msceqf::Propagator::propagate (MSCEqFState & X,
const SystemState & xi0,
fp & timestamp,
const fp & new_timestamp )
+
+ +

This function implements the mean and covariance propagation from timestamp to new_timestamp for the MSCEqF.

+
Parameters
+ + + + + +
XActual state estimate
xi0Origin
timestampIntegration period start time (actual state timestamp). This will be modified by the propagation
new_timestampIntegration period end time (new state timestamp)
+
+
+
Returns
true if propagation succeeded, false otherwise
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_propagator.js b/classmsceqf_1_1_propagator.js new file mode 100644 index 0000000..2cfd127 --- /dev/null +++ b/classmsceqf_1_1_propagator.js @@ -0,0 +1,7 @@ +var classmsceqf_1_1_propagator = +[ + [ "ImuBuffer", "classmsceqf_1_1_propagator.html#a60ca36e107717ab32687f610d44e5494", null ], + [ "Propagator", "classmsceqf_1_1_propagator.html#a2e20b4a9aa97c3101b19833a7afacc41", null ], + [ "insertImu", "classmsceqf_1_1_propagator.html#a85447d7e988ac5bb6e9646929c0b3da9", null ], + [ "propagate", "classmsceqf_1_1_propagator.html#aaad9301ac9aec60ed75dbb0f662e2f36", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_static_initializer-members.html b/classmsceqf_1_1_static_initializer-members.html new file mode 100644 index 0000000..08a837a --- /dev/null +++ b/classmsceqf_1_1_static_initializer-members.html @@ -0,0 +1,123 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::StaticInitializer Member List
+
+
+ +

This is the complete list of members for msceqf::StaticInitializer, including all inherited members.

+ + + + + + + + +
b0() constmsceqf::StaticInitializer
detectMotion(const Tracks &tracks)msceqf::StaticInitializer
ImuBuffer typedefmsceqf::StaticInitializer
initializeOrigin()msceqf::StaticInitializer
insertImu(const Imu &imu)msceqf::StaticInitializer
StaticInitializer(const InitializerOptions &opts, const Checker &checker)msceqf::StaticInitializer
T0() constmsceqf::StaticInitializer
+
+ + + + diff --git a/classmsceqf_1_1_static_initializer.html b/classmsceqf_1_1_static_initializer.html new file mode 100644 index 0000000..69e8ce1 --- /dev/null +++ b/classmsceqf_1_1_static_initializer.html @@ -0,0 +1,325 @@ + + + + + + + +MSCEqF: msceqf::StaticInitializer Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::StaticInitializer Class Reference
+
+
+ + + + + +

+Public Types

+using ImuBuffer = std::deque<Imu>
 The Imu measurement buffer.
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StaticInitializer (const InitializerOptions &opts, const Checker &checker)
 StaticInitializer constructor.
 
void insertImu (const Imu &imu)
 Populate imu internal buffer used for acceleration check.
 
bool detectMotion (const Tracks &tracks)
 This function detects if the platform is moving based on acceleration measurements and image disparity.
 
bool initializeOrigin ()
 This fnctions collects a predefined window of IMU measurments and compute the roll and pitch fo the platform togheter with the IMU bias without waiting for motion.
 
const SE23 & T0 () const
 This function returns the initial Extended pose of the platform, to be used as origin.
 
const Vector6 & b0 () const
 This function returns the initial IMU bias, to be used as origin.
 
+

Constructor & Destructor Documentation

+ +

◆ StaticInitializer()

+ +
+
+ + + + + + + + + + + +
msceqf::StaticInitializer::StaticInitializer (const InitializerOptions & opts,
const Checker & checker )
+
+ +

StaticInitializer constructor.

+
Parameters
+ + + +
optsInitializer options
checkerRefernece to the MSCEqF checker
+
+
+ +
+
+

Member Function Documentation

+ +

◆ b0()

+ +
+
+ + + + + +
+ + + + + + + +
const Vector6 & msceqf::StaticInitializer::b0 () const
+
+nodiscard
+
+ +

This function returns the initial IMU bias, to be used as origin.

+
Returns
Initial IMU bias (gyroscope bias and accelerometer bias)
+ +
+
+ +

◆ detectMotion()

+ +
+
+ + + + + +
+ + + + + + + +
bool msceqf::StaticInitializer::detectMotion (const Tracks & tracks)
+
+nodiscard
+
+ +

This function detects if the platform is moving based on acceleration measurements and image disparity.

+
Parameters
+ + +
tracksTracks up to date used for disparity check
+
+
+
Returns
true if motion is detected, flase otherwise
+ +
+
+ +

◆ initializeOrigin()

+ +
+
+ + + + + +
+ + + + + + + +
bool msceqf::StaticInitializer::initializeOrigin ()
+
+nodiscard
+
+ +

This fnctions collects a predefined window of IMU measurments and compute the roll and pitch fo the platform togheter with the IMU bias without waiting for motion.

+
Returns
true if the initialization of the origin has succeedded, false otherwise
+ +
+
+ +

◆ insertImu()

+ +
+
+ + + + + + + +
void msceqf::StaticInitializer::insertImu (const Imu & imu)
+
+ +

Populate imu internal buffer used for acceleration check.

+
Parameters
+ + +
imuActual imu measurement
+
+
+ +
+
+ +

◆ T0()

+ +
+
+ + + + + +
+ + + + + + + +
const SE23 & msceqf::StaticInitializer::T0 () const
+
+nodiscard
+
+ +

This function returns the initial Extended pose of the platform, to be used as origin.

+
Returns
Initial extended pose of the platform (orientation, velocity and position)
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_static_initializer.js b/classmsceqf_1_1_static_initializer.js new file mode 100644 index 0000000..fd8c691 --- /dev/null +++ b/classmsceqf_1_1_static_initializer.js @@ -0,0 +1,10 @@ +var classmsceqf_1_1_static_initializer = +[ + [ "ImuBuffer", "classmsceqf_1_1_static_initializer.html#aeb0f5be124a2f7c58485ec8be12b8e68", null ], + [ "StaticInitializer", "classmsceqf_1_1_static_initializer.html#abe3e0c8fcc63851184c8fb296d1cde61", null ], + [ "b0", "classmsceqf_1_1_static_initializer.html#a28a97008c469fd24d5bad902bd4637dc", null ], + [ "detectMotion", "classmsceqf_1_1_static_initializer.html#a962b4f00af698b6e9d5681a2387e4470", null ], + [ "initializeOrigin", "classmsceqf_1_1_static_initializer.html#a0ea57db9c8ffd6c456924aaf2ca02fa9", null ], + [ "insertImu", "classmsceqf_1_1_static_initializer.html#aeb636116cd6495e52fb93284be828f38", null ], + [ "T0", "classmsceqf_1_1_static_initializer.html#a6a483ed7576aae6b537d21308ddc7bba", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_symmetry-members.html b/classmsceqf_1_1_symmetry-members.html new file mode 100644 index 0000000..c404d17 --- /dev/null +++ b/classmsceqf_1_1_symmetry-members.html @@ -0,0 +1,120 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::Symmetry Member List
+
+
+ +

This is the complete list of members for msceqf::Symmetry, including all inherited members.

+ + + + + +
curvatureCorrection(const MSCEqFState &X, const VectorX &inn)msceqf::Symmetrystatic
Dmsceqf::Symmetrystatic
lift(const SystemState &xi, const Imu &u)msceqf::Symmetrystatic
phi(const MSCEqFState &X, const SystemState &xi)msceqf::Symmetrystatic
+
+ + + + diff --git a/classmsceqf_1_1_symmetry.html b/classmsceqf_1_1_symmetry.html new file mode 100644 index 0000000..347a489 --- /dev/null +++ b/classmsceqf_1_1_symmetry.html @@ -0,0 +1,259 @@ + + + + + + + +MSCEqF: msceqf::Symmetry Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::Symmetry Class Reference
+
+
+ + + + + + + + + + + +

+Static Public Member Functions

static const SystemState phi (const MSCEqFState &X, const SystemState &xi)
 Implement the right group action phi of the symmetry group, acting on the homogenous space (phi(X, xi))
 
static const SystemState::SystemStateAlgebraMap lift (const SystemState &xi, const Imu &u)
 Implement the lift function. Lift the actual dynamics onto the symmetry group.
 
static const MatrixX curvatureCorrection (const MSCEqFState &X, const VectorX &inn)
 Return the Gamma matrix for the reset / curvature correction.
 
+ + + + +

+Static Public Attributes

+static const Matrix5 D
 The D matrix.
 
+

Member Function Documentation

+ +

◆ curvatureCorrection()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
static const MatrixX msceqf::Symmetry::curvatureCorrection (const MSCEqFState & X,
const VectorX & inn )
+
+staticnodiscard
+
+ +

Return the Gamma matrix for the reset / curvature correction.

+
Parameters
+ + + +
XMSCEqF state (symmetry group element)
innInnovatiation vector
+
+
+
Returns
Gamma matrix
+ +
+
+ +

◆ lift()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
static const SystemState::SystemStateAlgebraMap msceqf::Symmetry::lift (const SystemState & xi,
const Imu & u )
+
+staticnodiscard
+
+ +

Implement the lift function. Lift the actual dynamics onto the symmetry group.

+
Parameters
+ + + +
xiSystem state (homogenous space element)
uInput (Imu)
+
+
+
Returns
Input for the lifted system (Symmetry group Lie algebra element)
+ +
+
+ +

◆ phi()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
static const SystemState msceqf::Symmetry::phi (const MSCEqFState & X,
const SystemState & xi )
+
+staticnodiscard
+
+ +

Implement the right group action phi of the symmetry group, acting on the homogenous space (phi(X, xi))

+
Parameters
+ + + +
XMSCEqF state (symmetry group element)
xiSystem state (homogenous space element)
+
+
+
Returns
System state (homogenous space element)
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_system_state-members.html b/classmsceqf_1_1_system_state-members.html new file mode 100644 index 0000000..b843501 --- /dev/null +++ b/classmsceqf_1_1_system_state-members.html @@ -0,0 +1,139 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::SystemState Member List
+
+
+ +

This is the complete list of members for msceqf::SystemState, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
b() constmsceqf::SystemState
f(const uint &feat_id) constmsceqf::SystemState
ge3() constmsceqf::SystemState
K() constmsceqf::SystemState
k() constmsceqf::SystemState
operator=(const SystemState &other) (defined in msceqf::SystemState)msceqf::SystemState
operator=(SystemState &&other) noexcept (defined in msceqf::SystemState)msceqf::SystemState
opts() constmsceqf::SystemStateinline
P() constmsceqf::SystemState
S() constmsceqf::SystemState
Symmetry classmsceqf::SystemStatefriend
SystemState()=deletemsceqf::SystemState
SystemState(const StateOptions &opts, const SE23 &T0=SE23(), const Vector6 &b0=Vector6::Zero())msceqf::SystemState
SystemState(const StateOptions &opts, Args &&... pairs_of_key_ptr)msceqf::SystemStateinline
SystemState(const SystemState &other)msceqf::SystemState
SystemState(SystemState &&other) noexcept (defined in msceqf::SystemState)msceqf::SystemState
SystemStateAlgebraMap typedefmsceqf::SystemState
SystemStateKey typedefmsceqf::SystemState
SystemStateMap typedefmsceqf::SystemState
T() constmsceqf::SystemState
toString(const SystemStateKey &key)msceqf::SystemStatestatic
V() constmsceqf::SystemState
~SystemState() (defined in msceqf::SystemState)msceqf::SystemState
+
+ + + + diff --git a/classmsceqf_1_1_system_state.html b/classmsceqf_1_1_system_state.html new file mode 100644 index 0000000..f4af9fb --- /dev/null +++ b/classmsceqf_1_1_system_state.html @@ -0,0 +1,648 @@ + + + + + + + +MSCEqF: msceqf::SystemState Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +

The SystemState class represent the state of the system posed on the Homogenous space. + More...

+ +

#include <system.hpp>

+ + + + + + + + + + + +

+Public Types

+using SystemStateKey = std::variant<SystemStateElementName, uint>
 Key to access the system state map.
 
+using SystemStateMap = std::unordered_map<SystemStateKey, SystemStateElementSharedPtr>
 System state map.
 
+using SystemStateAlgebraMap = std::unordered_map<SystemStateKey, VectorX>
 System state algebra map.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

SystemState ()=delete
 Deleted default constructor.
 
 SystemState (const StateOptions &opts, const SE23 &T0=SE23(), const Vector6 &b0=Vector6::Zero())
 Initialize a system state with given extended pose and bias (Identity and zero by default). Camera intrinsics and extrinsics are initialized from the given values in the options.
 
template<typename... Args>
 SystemState (const StateOptions &opts, Args &&... pairs_of_key_ptr)
 Construct system state given a multiple pairs of key-pointer of states element. This methods preallocate memory for the state_ map and insert the given pointers. Camera intrinsics and extrinsics are initialized from the given values in the options, passing pairs of key-pointer of camera intrinsics and extrinsics will overwrite the intrinsics and extrinsics initialized form the given options.
 
SystemState (const SystemState &other)
 Rule of Five.
 
SystemState (SystemState &&other) noexcept
 
+SystemStateoperator= (const SystemState &other)
 
+SystemStateoperator= (SystemState &&other) noexcept
 
const SE23 & T () const
 return a constant reference to the extended pose element (R,v,p) of the system state as a SE23-torsor
 
const SE3 P () const
 return a copy of the pose element (R,p) of the system state as a SE3-torsor
 
const SE3 V () const
 return a copy of the pose element (R,v) of the system state as a SE3-torsor
 
const Vector6 & b () const
 return a constant reference to the bias element of the system state as a vector
 
const SE3 & S () const
 return a constant reference to the camera extrinsics element of the system state as a SE3-torsor. If the camera extrinsics are not estimated online then the fixed calibration value provided in the options is returned
 
const In & K () const
 return a constant reference to the camera intrinsics element of the system state as a In-torsor If the camera intrinsics are not are not estimated online then the fixed calibration value provided in the options is returned
 
const Vector4 k () const
 return a copy of the camera intrinsics element of the system state as a 4-vector If the camera intrinsics are not are not estimated online then the fixed calibration value provided in the options is returned
 
const Vector3 & f (const uint &feat_id) const
 return a constant reference to a persistent feature element of the system state as a vector, given the feature id
 
const Vector3 ge3 () const
 return a copy of g*e3 as a vector
 
const StateOptionsopts () const
 Get the state options.
 
+ + + + +

+Static Public Member Functions

static std::string toString (const SystemStateKey &key)
 Get a string describing the given SystemStateKey.
 
+ + + + +

+Friends

+class Symmetry
 Symmetry can access private members of SystemState.
 
+

Detailed Description

+

The SystemState class represent the state of the system posed on the Homogenous space.

+
Note
The system state has not to be confused with the MSCEqF state. The former is the state of the system posed on the homogenous space, while the latter is the state of the lifted system, in which the EqF is based on.
+

Constructor & Destructor Documentation

+ +

◆ SystemState() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + +
msceqf::SystemState::SystemState (const StateOptions & opts,
const SE23 & T0 = SE23(),
const Vector6 & b0 = Vector6::Zero() )
+
+ +

Initialize a system state with given extended pose and bias (Identity and zero by default). Camera intrinsics and extrinsics are initialized from the given values in the options.

+
Parameters
+ + + + +
optsState options
T0Initial extended pose
b0Initial bias
+
+
+ +
+
+ +

◆ SystemState() [2/2]

+ +
+
+
+template<typename... Args>
+ + + + + +
+ + + + + + + + + + + +
msceqf::SystemState::SystemState (const StateOptions & opts,
Args &&... pairs_of_key_ptr )
+
+inline
+
+ +

Construct system state given a multiple pairs of key-pointer of states element. This methods preallocate memory for the state_ map and insert the given pointers. Camera intrinsics and extrinsics are initialized from the given values in the options, passing pairs of key-pointer of camera intrinsics and extrinsics will overwrite the intrinsics and extrinsics initialized form the given options.

+
Template Parameters
+ + +
Args
+
+
+
Parameters
+ + + +
optsState options
keys_argsMultiple pairs of key-ptr where each pointer is pointing to a state elements
+
+
+
Note
Examples of call:
+
+1) SystemState(opts, pair(key1, ptr1), pair(key2, ptr2), pair(key3, ptr3))
+
+2) SystemState(opts, pair(key1, ptr1), vector(pair(key2, ptr2), ..., pair(key10, ptr10)))
+
+When the function is called with a vector of pairs, the vector of pairs is moved therefore after the call it contains only unusable pointers (nullptr).
+
+Here is the call graph for this function:
+
+
+ + + + + +
+ +
+
+

Member Function Documentation

+ +

◆ b()

+ +
+
+ + + + + +
+ + + + + + + +
const Vector6 & msceqf::SystemState::b () const
+
+nodiscard
+
+ +

return a constant reference to the bias element of the system state as a vector

+
Returns
R6 vector representing the bias element of the system state
+ +
+
+ +

◆ f()

+ +
+
+ + + + + +
+ + + + + + + +
const Vector3 & msceqf::SystemState::f (const uint & feat_id) const
+
+nodiscard
+
+ +

return a constant reference to a persistent feature element of the system state as a vector, given the feature id

+
Parameters
+ + +
feat_idId of the persistent feature
+
+
+
Returns
R3 vector representing the feature element of the system state
+ +
+
+ +

◆ ge3()

+ +
+
+ + + + + +
+ + + + + + + +
const Vector3 msceqf::SystemState::ge3 () const
+
+nodiscard
+
+ +

return a copy of g*e3 as a vector

+
Returns
R3 vector representing the gravity vector in a gravity-aligned frame of reference
+ +
+
+ +

◆ K()

+ +
+
+ + + + + +
+ + + + + + + +
const In & msceqf::SystemState::K () const
+
+nodiscard
+
+ +

return a constant reference to the camera intrinsics element of the system state as a In-torsor If the camera intrinsics are not are not estimated online then the fixed calibration value provided in the options is returned

+
Returns
Intrinsic element of the system state as a In-torsor representing the camera intrinsics
+ +
+
+ +

◆ k()

+ +
+
+ + + + + +
+ + + + + + + +
const Vector4 msceqf::SystemState::k () const
+
+nodiscard
+
+ +

return a copy of the camera intrinsics element of the system state as a 4-vector If the camera intrinsics are not are not estimated online then the fixed calibration value provided in the options is returned

+
Returns
R4 vector representing the camera intrinsics
+ +
+
+ +

◆ opts()

+ +
+
+ + + + + +
+ + + + + + + +
const StateOptions & msceqf::SystemState::opts () const
+
+inlinenodiscard
+
+ +

Get the state options.

+
Returns
State options
+
+Here is the caller graph for this function:
+
+
+ + + + + +
+ +
+
+ +

◆ P()

+ +
+
+ + + + + +
+ + + + + + + +
const SE3 msceqf::SystemState::P () const
+
+nodiscard
+
+ +

return a copy of the pose element (R,p) of the system state as a SE3-torsor

+
Returns
Pose element (R,p) of the system state as a SE3-torsor
+ +
+
+ +

◆ S()

+ +
+
+ + + + + +
+ + + + + + + +
const SE3 & msceqf::SystemState::S () const
+
+nodiscard
+
+ +

return a constant reference to the camera extrinsics element of the system state as a SE3-torsor. If the camera extrinsics are not estimated online then the fixed calibration value provided in the options is returned

+
Returns
Pose/Transformation element of the system state as a SE3-torsor representing the camera extrinsics
+ +
+
+ +

◆ T()

+ +
+
+ + + + + +
+ + + + + + + +
const SE23 & msceqf::SystemState::T () const
+
+nodiscard
+
+ +

return a constant reference to the extended pose element (R,v,p) of the system state as a SE23-torsor

+
Returns
Extended pose element (R,v,p) of the system state as a SE23-torsor
+ +
+
+ +

◆ toString()

+ +
+
+ + + + + +
+ + + + + + + +
static std::string msceqf::SystemState::toString (const SystemStateKey & key)
+
+static
+
+ +

Get a string describing the given SystemStateKey.

+
Parameters
+ + +
keySystem state element name or feature id
+
+
+
Returns
String describing the given key
+ +
+
+ +

◆ V()

+ +
+
+ + + + + +
+ + + + + + + +
const SE3 msceqf::SystemState::V () const
+
+nodiscard
+
+ +

return a copy of the pose element (R,v) of the system state as a SE3-torsor

+
Returns
Homogeneous galilean element (R,v) of the system state as a SE3-torsor
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_system_state.js b/classmsceqf_1_1_system_state.js new file mode 100644 index 0000000..d58299a --- /dev/null +++ b/classmsceqf_1_1_system_state.js @@ -0,0 +1,21 @@ +var classmsceqf_1_1_system_state = +[ + [ "SystemStateAlgebraMap", "classmsceqf_1_1_system_state.html#a41e4f4879a6ec4c126767e815fec5016", null ], + [ "SystemStateKey", "classmsceqf_1_1_system_state.html#a0ec44fd4c4b70431fc1eefe9bfe7b64a", null ], + [ "SystemStateMap", "classmsceqf_1_1_system_state.html#a6f24e3392809c21dd8565e4605298dda", null ], + [ "SystemState", "classmsceqf_1_1_system_state.html#aa842c21ee431baf8fe29cb26d341c16c", null ], + [ "SystemState", "classmsceqf_1_1_system_state.html#a95d992717a66448018694a8931288207", null ], + [ "SystemState", "classmsceqf_1_1_system_state.html#acd7791337e2a823b2ddd845489f66561", null ], + [ "SystemState", "classmsceqf_1_1_system_state.html#a99428a0cf85c79a9c96df85b07d9f90f", null ], + [ "b", "classmsceqf_1_1_system_state.html#aa3d4b2cdfdd1063f53c8260f8e1d3987", null ], + [ "f", "classmsceqf_1_1_system_state.html#aa57f29ac63c94d167d9261fd9c8ac889", null ], + [ "ge3", "classmsceqf_1_1_system_state.html#ae4ffdd10423f0189684a01a190d9929b", null ], + [ "K", "classmsceqf_1_1_system_state.html#aa78b01151738dce902450e73c6f5d5a1", null ], + [ "k", "classmsceqf_1_1_system_state.html#abdd483746a154dbe39860b36b82223a1", null ], + [ "opts", "classmsceqf_1_1_system_state.html#a4eb9dffa95fa3caf6a7b8f9c7079fb46", null ], + [ "P", "classmsceqf_1_1_system_state.html#aff5c1d9314c92dd709cc1a7f14c285b9", null ], + [ "S", "classmsceqf_1_1_system_state.html#ae6a0a7129eb4ff2eabdb3c788f5e069d", null ], + [ "T", "classmsceqf_1_1_system_state.html#a388d36c3791f50f0cd1cfc9b5e3c7b9b", null ], + [ "V", "classmsceqf_1_1_system_state.html#aa03192f66803c072bb937809b375dcd5", null ], + [ "Symmetry", "classmsceqf_1_1_system_state.html#a41706e12d68690130eaf013ca5aa311b", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.map b/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.map new file mode 100644 index 0000000..aea835d --- /dev/null +++ b/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.md5 b/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.md5 new file mode 100644 index 0000000..7b03d97 --- /dev/null +++ b/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.md5 @@ -0,0 +1 @@ +cdb8a5591c175c9605ebbf947ed5c4d1 \ No newline at end of file diff --git a/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.png b/classmsceqf_1_1_system_state_a4eb9dffa95fa3caf6a7b8f9c7079fb46_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..e588eb8ae2b49ca464d31417ec173df0b99e272c GIT binary patch literal 6844 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 j3r|P>@0WGkKe`=-s}fkx@WSD76hcu>RrbrHmv8 + + + + diff --git a/classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.md5 b/classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.md5 new file mode 100644 index 0000000..aab23a9 --- /dev/null +++ b/classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.md5 @@ -0,0 +1 @@ +fc1079fd58a706ef6ab17046aa800254 \ No newline at end of file diff --git a/classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.png b/classmsceqf_1_1_system_state_acd7791337e2a823b2ddd845489f66561_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..bca66ea5a6b94b7a59430ad766685f02eb749228 GIT binary patch literal 6861 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 literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_system_state_element-members.html b/classmsceqf_1_1_system_state_element-members.html new file mode 100644 index 0000000..fe7c60c --- /dev/null +++ b/classmsceqf_1_1_system_state_element-members.html @@ -0,0 +1,123 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::SystemStateElement Member List
+
+
+ +

This is the complete list of members for msceqf::SystemStateElement, including all inherited members.

+ + + + + + + + +
clone() const =0msceqf::SystemStateElementpure virtual
operator=(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
operator=(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
SystemStateElement()=defaultmsceqf::SystemStateElementprotected
SystemStateElement(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
SystemStateElement(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
~SystemStateElement()=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementvirtual
+
+ + + + diff --git a/classmsceqf_1_1_system_state_element.html b/classmsceqf_1_1_system_state_element.html new file mode 100644 index 0000000..bc55691 --- /dev/null +++ b/classmsceqf_1_1_system_state_element.html @@ -0,0 +1,203 @@ + + + + + + + +MSCEqF: msceqf::SystemStateElement Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::SystemStateElement Class Referenceabstract
+
+
+ +

This struct represent the base struct for a general element of the system state. + More...

+ +

#include <system_elements.hpp>

+
+Inheritance diagram for msceqf::SystemStateElement:
+
+
Inheritance graph
+ + + + + + + + + + + + + +
[legend]
+ + + + + +

+Public Member Functions

virtual std::unique_ptr< SystemStateElementclone () const =0
 Clone.
 
+ + + + + + + + + + + + +

+Protected Member Functions

SystemStateElement ()=default
 Rule of Five.
 
SystemStateElement (const SystemStateElement &)=default
 
SystemStateElement (SystemStateElement &&)=default
 
+SystemStateElementoperator= (const SystemStateElement &)=default
 
+SystemStateElementoperator= (SystemStateElement &&)=default
 
+

Detailed Description

+

This struct represent the base struct for a general element of the system state.

+

Member Function Documentation

+ +

◆ clone()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::unique_ptr< SystemStateElement > msceqf::SystemStateElement::clone () const
+
+pure virtual
+
+ +

Clone.

+
Returns
Clone of the system state element
+ +

Implemented in msceqf::BiasState, msceqf::CameraExtrinsicState, msceqf::CameraIntrinsicState, msceqf::ExtendedPoseState, and msceqf::FeatureState.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_system_state_element.js b/classmsceqf_1_1_system_state_element.js new file mode 100644 index 0000000..4d67781 --- /dev/null +++ b/classmsceqf_1_1_system_state_element.js @@ -0,0 +1,5 @@ +var classmsceqf_1_1_system_state_element = +[ + [ "SystemStateElement", "classmsceqf_1_1_system_state_element.html#a852facaeb4453b2d1eb1ab2d4ed47968", null ], + [ "clone", "classmsceqf_1_1_system_state_element.html#ac44336562c195471cdfb2b16cdfe50b9", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_system_state_element__inherit__graph.map b/classmsceqf_1_1_system_state_element__inherit__graph.map new file mode 100644 index 0000000..86e5e03 --- /dev/null +++ b/classmsceqf_1_1_system_state_element__inherit__graph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/classmsceqf_1_1_system_state_element__inherit__graph.md5 b/classmsceqf_1_1_system_state_element__inherit__graph.md5 new file mode 100644 index 0000000..9f96071 --- /dev/null +++ b/classmsceqf_1_1_system_state_element__inherit__graph.md5 @@ -0,0 +1 @@ +71f9a1e1aee7a66d042e5d08401df24a \ No newline at end of file diff --git a/classmsceqf_1_1_system_state_element__inherit__graph.png b/classmsceqf_1_1_system_state_element__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..14e76477b49a4bf37204032a4301c838d919f35b GIT binary patch literal 21197 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 + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::TrackManager Member List
+
+
+ +

This is the complete list of members for msceqf::TrackManager, including all inherited members.

+ + + + + + + + + + + + +
activeTracksIds(const fp &timestamp, std::unordered_set< uint > &active_ids) constmsceqf::TrackManager
cam() constmsceqf::TrackManager
clear()msceqf::TrackManagerinline
lostTracksIds(const fp &timestamp, std::unordered_set< uint > &lost_ids) constmsceqf::TrackManager
processCamera(Camera &cam)msceqf::TrackManager
processFeatures(const TriangulatedFeatures &features)msceqf::TrackManager
removeTracksId(const std::unordered_set< uint > &ids)msceqf::TrackManager
removeTracksTail(const fp &timestamp, const bool &remove_equal=true)msceqf::TrackManager
TrackManager(const TrackManagerOptions &opts, const Vector4 &intrinsics)msceqf::TrackManager
tracks() constmsceqf::TrackManager
tracksIds(const fp &timestamp, std::unordered_set< uint > &active_ids, std::unordered_set< uint > &lost_ids) constmsceqf::TrackManager
+
+ + + + diff --git a/classmsceqf_1_1_track_manager.html b/classmsceqf_1_1_track_manager.html new file mode 100644 index 0000000..15b56b9 --- /dev/null +++ b/classmsceqf_1_1_track_manager.html @@ -0,0 +1,475 @@ + + + + + + + +MSCEqF: msceqf::TrackManager Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::TrackManager Class Reference
+
+
+ +

This class manages the multiple tracks of feature traked in time. + More...

+ +

#include <track_manager.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TrackManager (const TrackManagerOptions &opts, const Vector4 &intrinsics)
 TrackManager constructor.
 
void processCamera (Camera &cam)
 Process a single camera measurement. Forward camera measurement to tracker, and update tracks.
 
void processFeatures (const TriangulatedFeatures &features)
 Process a single features measurement. update tracks.
 
const Tracks & tracks () const
 Get all the tracks.
 
void tracksIds (const fp &timestamp, std::unordered_set< uint > &active_ids, std::unordered_set< uint > &lost_ids) const
 Get all the ids corresponding to active and lost tracks at a given timestamp. Active tracks are defined as tracks that have are actively tracked at a given timestamp. Lost tracks are defined as tracks that are not being tracked at a given timestamp and thus they do not have coordinates at a given timestamp.
 
void activeTracksIds (const fp &timestamp, std::unordered_set< uint > &active_ids) const
 Get all the ids corresponding to active tracks at a given timestamp. Active tracks are defined as tracks that have are actively tracked at a given timestamp.
 
void lostTracksIds (const fp &timestamp, std::unordered_set< uint > &lost_ids) const
 Get all the ids corresponding to lost tracks at a given timestamp. Lost tracks are defined as tracks that are not being tracked at a given timestamp and thus they do not have coordinates at a given timestamp.
 
void removeTracksId (const std::unordered_set< uint > &ids)
 Remove all the tracks corresponding to given ids.
 
void removeTracksTail (const fp &timestamp, const bool &remove_equal=true)
 Remove the tail of tracks. This method remove from each track all the coordinates as well as the timestamps that are older (or equal) to the given timestamp.
 
+void clear ()
 Clear all the tracks.
 
const PinholeCameraUniquePtr & cam () const
 Get the camera pointer.
 
+

Detailed Description

+

This class manages the multiple tracks of feature traked in time.

+

Constructor & Destructor Documentation

+ +

◆ TrackManager()

+ +
+
+ + + + + + + + + + + +
msceqf::TrackManager::TrackManager (const TrackManagerOptions & opts,
const Vector4 & intrinsics )
+
+ +

TrackManager constructor.

+
Parameters
+ + + +
optsTracker options
intrinsicsCamera intrinsics as R4 vector (fx, fy, cx, cy)
+
+
+ +
+
+

Member Function Documentation

+ +

◆ activeTracksIds()

+ +
+
+ + + + + + + + + + + +
void msceqf::TrackManager::activeTracksIds (const fp & timestamp,
std::unordered_set< uint > & active_ids ) const
+
+ +

Get all the ids corresponding to active tracks at a given timestamp. Active tracks are defined as tracks that have are actively tracked at a given timestamp.

+
Parameters
+ + + +
timestampTimestamp
active_idsActive tracks ids
+
+
+
+Here is the caller graph for this function:
+
+
+ + + + + + + +
+ +
+
+ +

◆ cam()

+ +
+
+ + + + + + + +
const PinholeCameraUniquePtr & msceqf::TrackManager::cam () const
+
+ +

Get the camera pointer.

+
Returns
Pointer to the camera object
+
+Here is the caller graph for this function:
+
+
+ + + + + + + +
+ +
+
+ +

◆ lostTracksIds()

+ +
+
+ + + + + + + + + + + +
void msceqf::TrackManager::lostTracksIds (const fp & timestamp,
std::unordered_set< uint > & lost_ids ) const
+
+ +

Get all the ids corresponding to lost tracks at a given timestamp. Lost tracks are defined as tracks that are not being tracked at a given timestamp and thus they do not have coordinates at a given timestamp.

+
Parameters
+ + + +
timestampTimestamp
lost_idsLost tracks ids
+
+
+ +
+
+ +

◆ processCamera()

+ +
+
+ + + + + + + +
void msceqf::TrackManager::processCamera (Camera & cam)
+
+ +

Process a single camera measurement. Forward camera measurement to tracker, and update tracks.

+
Parameters
+ + +
camCamera measurement
+
+
+ +
+
+ +

◆ processFeatures()

+ +
+
+ + + + + + + +
void msceqf::TrackManager::processFeatures (const TriangulatedFeatures & features)
+
+ +

Process a single features measurement. update tracks.

+
Parameters
+ + +
featuresFeatures measurement
+
+
+ +
+
+ +

◆ removeTracksId()

+ +
+
+ + + + + + + +
void msceqf::TrackManager::removeTracksId (const std::unordered_set< uint > & ids)
+
+ +

Remove all the tracks corresponding to given ids.

+
Parameters
+ + +
idsIds of tracks to be removed
+
+
+
Note
The use of unordered_set as a hash set improves performance compared to a std::vector<uint>
+ +
+
+ +

◆ removeTracksTail()

+ +
+
+ + + + + + + + + + + +
void msceqf::TrackManager::removeTracksTail (const fp & timestamp,
const bool & remove_equal = true )
+
+ +

Remove the tail of tracks. This method remove from each track all the coordinates as well as the timestamps that are older (or equal) to the given timestamp.

+
Parameters
+ + + +
timestampTimestamp
remove_equalFlag to indicate whether to include in the removal also the coordinates and timestamps at the given timestamp
+
+
+ +
+
+ +

◆ tracks()

+ +
+
+ + + + + + + +
const Tracks & msceqf::TrackManager::tracks () const
+
+ +

Get all the tracks.

+
Returns
Tracks
+
+Here is the caller graph for this function:
+
+
+ + + + + + + +
+ +
+
+ +

◆ tracksIds()

+ +
+
+ + + + + + + + + + + + + + + + +
void msceqf::TrackManager::tracksIds (const fp & timestamp,
std::unordered_set< uint > & active_ids,
std::unordered_set< uint > & lost_ids ) const
+
+ +

Get all the ids corresponding to active and lost tracks at a given timestamp. Active tracks are defined as tracks that have are actively tracked at a given timestamp. Lost tracks are defined as tracks that are not being tracked at a given timestamp and thus they do not have coordinates at a given timestamp.

+
Parameters
+ + + + +
timestampTimestamp
active_idsActive tracks ids
lost_idsLost tracks ids
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_track_manager.js b/classmsceqf_1_1_track_manager.js new file mode 100644 index 0000000..8b184b9 --- /dev/null +++ b/classmsceqf_1_1_track_manager.js @@ -0,0 +1,14 @@ +var classmsceqf_1_1_track_manager = +[ + [ "TrackManager", "classmsceqf_1_1_track_manager.html#abf577306739781c993b88c01f2e627b6", null ], + [ "activeTracksIds", "classmsceqf_1_1_track_manager.html#a0c0ff31e29de9e63a454a58af7c9b931", null ], + [ "cam", "classmsceqf_1_1_track_manager.html#afe813535e2b8bc3fa2f68ea611fb7015", null ], + [ "clear", "classmsceqf_1_1_track_manager.html#a5a2d6ad04970e43e2cb393e74228db2b", null ], + [ "lostTracksIds", "classmsceqf_1_1_track_manager.html#a12e65c2082c9caf011e8a1fe118a51e1", null ], + [ "processCamera", "classmsceqf_1_1_track_manager.html#a22727a0d230248e3786cb6cae36178b1", null ], + [ "processFeatures", "classmsceqf_1_1_track_manager.html#a8a8e67cb8b718fcd3ca60e7db5ef4ac7", null ], + [ "removeTracksId", "classmsceqf_1_1_track_manager.html#aefb19f95a52046a2939b94abf1e5a22e", null ], + [ "removeTracksTail", "classmsceqf_1_1_track_manager.html#a72c21cede157880964b2494123e640f2", null ], + [ "tracks", "classmsceqf_1_1_track_manager.html#acd15a87fdc24b43e2cb9f41e179a85e3", null ], + [ "tracksIds", "classmsceqf_1_1_track_manager.html#aa0b99fd74bebf540e0b1d2f8abbd062b", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.map b/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.map new file mode 100644 index 0000000..d0c4692 --- /dev/null +++ b/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.md5 b/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.md5 new file mode 100644 index 0000000..2a53060 --- /dev/null +++ b/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.md5 @@ -0,0 +1 @@ +7ba960082bc24dcc383262bc93d21468 \ No newline at end of file diff --git a/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.png b/classmsceqf_1_1_track_manager_a0c0ff31e29de9e63a454a58af7c9b931_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..6abb051ff548000348a317dd83908c3f80684b8a GIT binary patch literal 12851 zcmaib2Q=61|F^WM5M_@NB3sFpN-_#rWtKg%N61Jjdy_p9k&H4TnOP}WSs`R(mXWNC z=k@*l&vTytbIx;~|Mx!K-N*QTug`V8uh;uE-gkh?b-BYNbRV8CDd3>D=r6YUWGNvq6?A|hfTlD{mY?wa%~`JTFZZ%>W)y(zu$^wTT{ z(l1i&J$QS!Z2C<@8LHuPs|h3zM>Lo} zT)iqmHtw*#7;{ETKhIV)+Eo<`gy*UZEuQ^WJ~ ziNy^{3W_(=wbnCaHspJ170Dl^8U$ZGdX(?ci3=e?I~o_tsoA*BoGB&poz)5Dcve{G z5Xo|2*IypLdg+IL^dclr`3$x_WFx{|cLg(wzpavWwY(C>6q1;z;~8{9m5kewc^q*I~ zmEZsT<%*Sk*F8KW=Bxhk4wTv!{E53&WGZ0RnnX8XJ6v_G)aJX0qJ$=2kO-v)0C_bSHndYTqiKW_dx7PId z4>?6eQZ+R-EPAz~VXx~mPx-4Arz0aHr#dr9vGBYKaEIGYN3sUM}JJV-{CXIDnGF(8`Lm=1b!F^^MsAc_pO`Y+AAP zz|*xg*QKSUtJkmpj8c~R@%#JxJ^S``mf9Lzym*o3tah+5)>LPxrA)dpSP(W9IR*+SX^B-`&MY;vGuoi`PYD! zN8{D5Q^LYeKYX|t7!=g}@nf3(SmW|+Z`jn7Ij??&|FdT&wl@A!N}lGpo;32|F{!$` z`pDdzQY^1ty(8gH`0gjWp`!AjvQqMUxih7tJuV`Hh~0zDO^@8Xyv09%E~%+eK4@uC zI>IPcpDcdQygTO@8ynkAZSBJQt2RVWdG$W|Q?Q0N8|U6CdJ@4ZN9=DcBvj-#7hBxDlD;|zg4&ixx2eB|NgEsI8^0% z|9Yy_wO5*X_13_@A79Q7t0z?DyxQsOyNPFenVUQQDdr4r5IO_d-Me?yy^gT3vieqU zZv=IA-WdG;UG)A6H=d%dzrVb7vB3In%9E^>5h`lxB9~vtvAOvfO68HC zpODj(3W}9R(D;Cg$)WX)jnR>j3o0t))mtm{QS8@J~B&xa=@1QrzV z9XoamSB;sEj}JGRM${ogWWs5-hets{VPRo`g_ASj#HAC>lEv$MVCWc0$pzXnQ!zN-IQotL|IErdzZ-G7Nu%xUVGJJ#wr`p7}A z0$0Oftnu*DpFh(8n~jZ)M^B!dJV13C;Tb`w*5uH1C zF2?AFu5JtNC#{g_AzWiQIk`!TYSRF%N33$8{Pv@luLRThprU|n9Q^#`($dmNNl6Ee z9AQ6q?$|rs(6BHvH#fIn2GPjDLETJhTXXZ%sJc`5Nk>P=ipt9MfAiHoIZM;cTzr^)zUo;SOC^?<6X>hk=sfyYR)i2XzTO81UDo%0@^p6esNWJKnDuTLDN7tZZC za_G=0oEJ_rjmu@S#%K4a zif5PnjxsXp87Up}oSvBpTs6d#10Gq=oFU!4dv}bH!}v!E;1T&AnX|>GEIFj5Q?bcv zw{8W*#!^%B>fY|jy@j(J`|(4@!J&{w*==*p9{utPip|c&#q{6GuOu;Nl59bepKYni z==OH@_9w)|5>mbMxn`e6Mb+UlKd!2h`u+QN#)}t$i>Ghhx`i5go|hLA6htZ@AaHlM zDj8Rhm^eqla__!PVE~v?Ua7s-F7?M zo>e>B_pye+$B*}-y1Df$X!h^lpK#tbw5Ui3)m`7v@T{Pqt?!MIfRNC0v>HQ};d1BM z_OD-AxwuFk0M-&!pI?bcPX6Mvdq4Vz;oq5VJRt=+`2{=(mQO=Z|2#9Z0b2`9I7Bb3 z((>u6R;Dl?SVr`-psF|%KJE)X8c7!Gi?4L8veANclR{hvq$koZtY@!e9W$q z*;z$nW8>sM*(!fW=KJ2T65Y9T=fK07z+-1FlU=tq8vXU_nyD%KdzWA7&a*vaF^Z#q z4L6pj@n#RIJpUB}VH<;K>rkXLB6ch|>62`1ds$goZ>XsS1P9j-3?xcyKQQE1u#HIM+Zm-vAAw*daW(p#`@n|}53&D67GK#12M7D!IdW)fYL=Ck_q3mr zmae`osa|;(CysVvG}ZoWwCK)QV@Q2dQ_#@Q{i<48)bkAh=0c;UBcV)^3IwiZ)LD7| z9uYAy@#VVf7tdiQ4>5?4KhP<)v0oUG*+<3{%yNM0*f9!9%H8U22M8yOy2o?PoEUh z)6+kG{CFF?pH8jd^Z4;&k)rlO6UEjf(Mve2@aFBwf%cA$mqp%0*4EY!eSInR>=G9j zXID;9vbTTpsqNRdBERd&VjWq^%tWZoR*qDUrS?T{ySph*%?wB45)*^S^7b93ODiY{ z^Y!&zt0wmL_I6*M^2y8N!M$<%)vv+*goc{h4=>kTd__dk>Bon?0Q+doUS(G0&rPyI;;W$ z5umfsD6Gw;)&s&-|9*?7KY!lQ-K`zK4VEq$whA&a(+QU z;vD^xxJo894|ainw7*p208pu@sf~4JDgp(#-t~iLlh)vXRJ61vQC8He6B85mldX)r zdgYIjlao973h>RN6cmenVte-P6}Z207ckX^OBVeiE9bcanZ|*K4{+XC_&Ixf`$2G{ zh*Vndovrhio*cS^dKD29%VD70o05_e=42C)6I({i$jF$Rn+vquG?0PB@DB_${1nXz zl=)ijY$fJAvq#;HJm>xrey09q1_&Bj+|AdweafnHbAxAl3wqa*-o6#SmT=aMSBy)4 z1mtg`K7bN(f*_7?hOS9ml4+JMHI0o|l1^k>+XudSbp|b+;&9S_-%X9b1$_lH-gp)8Fb5?4g%_J z2Fso~Z9+xZySQADliQDG{PRm_{(;p)evMB~p0W1syl)Sw5lnwR6awmvRWGm9*7Db;o=XCZ z>RVpwgF(&B&91JlukC(Z#B~UM_imjv(-c6Pj++YlsORzE6&>Z?f|)H5%UF*%1`iWr zdJ+-r?7QP@_<33-s#cgZ(CdQxS!e;<4$DQa!XyE z3P*1?S|4z3!*aMva@gx156)$VM@lULKv0IbvE<%{9S5U*h-bxy$FtCv(x&s>2Qq_4R4bp4E20 z(pp?txV<#qJT)`pu)bshpg+ySbL{&URKoI1cMzx!;Y*yHa6@)sj~Eyj;zS+UgO2lj zfHnhZU6l0(=Q+-&ubXw~-Me>&QV}!OM3*jIf~cXD_L2Z+bmlG4$lR|kX|9|i!MXCx zf4IzHf@I&meHE)i_i@}&;o&vd2#ukjn3$MDjAB&x?%fmkc|=8&y+F)?pK83~Ol(n8 zdpP~G_Y*A6(Xmu!tD8$eGXev6*5##J zSXgM@o1a`}{&VhIQMzir0$H}U{h6p{8VOf^+=S5*eMUt^MJH$HZ^agryu7>$Pgd(T zyl=b%*2RoVd2N>UX`b6|OQ4>qbzA*@4}Qquo}Qk#goMb11O->uvZ;_bVQV`49^f=Q zDXFE`z&j))fW?600sX6n_zSEPn$xmiO$=*FCCSr8dK^OFL96GW z(o{2Q%+^~nmT47xSEKyOourvho8|oZ^Jv^kSjp?sQjQZRe73j#jp1`a9ARsi)caF- zEH+SQWMs6zzi0dK;lp}QNGZaZCntwIf6n^(DNo(UkNzJ&UPTAJ_4+meejub0K~uC% zXrKU8N-pNO>(su!Q+MFN0hQ@W)y(}h`n3@}rvp?^s>Co~~J` zN0e^s4D)>wGbZ=YNrKlj?77Mau??xIqN&+9)$!aXXRUF0*~zpe&L=eV$m;L!lm%}f zd%`0kYL}8KIHOC@7E!nYPr_*Y5$6+BdZOg1YzK+_m=2ELGCQ zE*C-tK*Rxl4w+i+@=F2U3PHA^k>sd_&Ct-$@SC@@5ELK1ZP(^j7lh^Z+8EjP*1Wg0 z=1$J>Yzd{`mf8{+QEr@^5{eW%gkD;68+M=fjNEoc{;pU^Lu zo}R|h7@3%8u=b=C7e{}Nct6`ZJ-=(+eUak9N@OFh2Hh4r%rsZXSE>vF?D~tz=zR;r%rztN`W`DiOj6P#(WHd(9P`Kq6k(#P3FCP%slm7a3xcI%_{%vo; z^+-ra>R)aY7798zIFRr0xe`Lxy-+?mIjN?ueiYbeA@e`ML!x71 zI?C*g;ENC_4+s}T#MsEl1C|5PPoGAnr0~*R2z2?&APRR1x+!4Sr;_RH_A`8ZVR-Ln znVGU)UQ*~sqvEfHB_aMffwd4q8pD3N*Bu-LVX30KK|7vk{4n&+@ju2Hq#N)8mW*zt zyN2#H4XvF(qgS63;^I!HWaYP6SX#n1z;{6qp--4Smnm?Mk2>dAZ(7kO`bGT5%H}$w znVWs5O`^o-k6`)%2Hp2A)}BEpRog1Y_Z=Z}2q#tHqz*qAlXUU+n5VOs_Sl(0cir8S zCSy?U={~HBYZWc~T6e3{&N}e2kl#|RZBwm$JR4>;QW4C3t8kB&mX`hAidbrb+263{gpG>ud+U9UU1`VuQYZ0F zsuC-n%{h`8LKM{1wPxCtx+MK=$9u+Z@=mJfOMuNq9i8`84X&9BD=X~0yrIxJ&!Kt0 zzrV+9k-1p(v*fJZj1dc)zTpkB9sf!L&%NxGtbY0*E?pFyAa;Cv^vFw)#0lo}JccOWzxz{`T)yF=nTxyjU&E@R9 zU8MP=+eE^zFOa(VtLfJ*j&$hd@#eofV{`cAQ>SuR-@l&Ft*;*L-&|l#m3;2fthYD& z-1!}E1CogcPgo|27oMlpHfmH|3>}T@CnjOrzGIwPU6K>4!q;m%#p`xShUHQDmfY&D z!_T;mm{sZ~pL^x;n5yBrYXaJt~!s6l&@HOX|)VR2tX2d0siTjwDQ^j`Fd9pki z)SDOR9GNeK|0!iL%hzUGL4)JPpCBzwA)6F785tQMo@AJs^l`v;L4^4nN@s0t%?_e0 z^Oxtw@*NOPE|b;O)dFYQd9XZn{c1AJGv0JFkv~dg$+L6|c9C}P(av*MG=EbV%P(G- zVE?Ba>i$#KMiu%cTAxg^H!Uq~n^I4vVyu)ZZw~l;fC;rFtGIaLu``+yA?AFK+!sf1 z;Us%$;&HDLNo==llsipF(!A6k21qS^RhH&FHiFXUX$oaz6%*5LiE#uQf{*jMs7S5T z`)5l$Yz3n8=S#I`O*yCfOJ0@TxC4Sc2W5@DxH8Bmakq7XLY1w~%9kO;Qqfvy{I&Lr z#wRh7j}jCeQYcMLO-r6Kx^=)fUHZ&d?cZR!i=Z~PH)i>85l--qU6+@?0~zSCF`cDQ zSfEoH8W>0-kT~mG@`4JMy?^}UqQb&B2{%F9RdOvo$b4DLNBo?+EYJs`l5ObLXiO2nVppdL-;~%;30!h2#*1el9G|} z8rBNl8D>6`B;ghbb=sM&%F4F2I`_@@{ri8Hv?iRU+GTQ?^i))8u$bsTMgIJo({$%!$@?q*e=V=4NCc#$Fro7( zu<63il5=x=ccXlxUuC?F7&#k(bi)C8-RR&LAeSDeAWZr?e_H-XTMCZ^{pznXA3)7t zW@nQZ)WJ8D>R!*Ge)^@k`3`KGV%uRRNy*Brry3XI%>-q;5o5fy`JU62a@OL;Vd`GE zlA<1K{76sK6NE)w=4e2<2&4)eG~nA~tHi3cg*vhZLnAOildf#l<+*QB0O;-+m;9mL zA9a3KWjVeNA3n&rn+KRpM@HbW_QTJaokJ0FY_CWA|Kv5Nr z1!y#b+I=2xj+!2>mWDzgL^Bj>dcADQf2sG>;4#cQ()U6~fKkgytTsn+EUv6*cJ2UB z*+CtZrMIH5C2p5mZXnGeXoHHal>x4z3%$Ze0J|KgPy5f!-Hj>#IXNi=uLmYs9lH6f z(_+4MNgxI56@QDW*>Yk1V_aM}yOvLdX#G9PUU^{bXHlCJC1sd~Eg7?vZqiS9b(15t zzS#C~G;so>>g?=99?Ok@VJs`v>u6gnoYH7cwW;n`)Nmds<{h)SGH98YuJ3Gb#e=a! zAWYPeN$<&VaNyQ?8;m!(c4^(c;B{Jnw7b^ zf8h?&BLclf<|2FcQCbem7>L!>*DNwnZ`FhxjmMy!fPi3T=@g_IFS|;hM}TSkw`+*N zjvF3^ksYO{S8Pj>l)s*@usSb9$3CtZrzISTAA;i?C1WI;V$ z*MruCPG>5MR~EpEhYZ@RW&?#T@c(owDtd1|;3yjGDHo zV$Ol^^wTUAOyGG0(+Cj5J>6KHS4O;p)(F8&!N9;x*M+!X6jmM~IDz*kfLy8L0ojow zrUP%S577$l;o;#SlpuFMA^z0K1Q%&(tzavF{}bE zXP7!B;HAht4Q*^fOH1z^Hey3I2#4hlLa5uewqd%wO-Np`aaTeaBtdM#tq>6x|C*z5 zhJlf>VO9X?6U>*640%cv!>Q}aPm!7;dw+9t3dJM>AVnP0)Y%yc>%bmLK(6xy;IG{N_q4&;#t)rs@S{!x07ox`zLy?CJ5qOOVATj|P`eXt7d4wgm0_JY9>L$bsv7=ZqCTu4X=k;&#& z`C52OgrNnRbCy&pF$v;=f`vV~)g-X+PqSOWI=e)^M>F?kEmG(ISHMxi>--)r+OYSI zBwWvi4=00-d2q9}FSlM}b*Zht!Mw7&8BQ1IU{1UPVq)HUFU6A*<;nTeZ%!%i1ff_R0 zKVJkQ{z0Y5;>rPL5)}0QE-%;9ui$o@q9-W~Yh1p(hmf;V^XXF+SxHToEGqwe9wwDj zvc&@5%M3m=lH*u(Ai}5!KD{1bMlf075fTOga4iW%EI_#i6EGkwtf{Lj8uJbjP%owy zmB2O3ykul$QPR>jgKyb6Iqk_Y{BfK|`!Xalnvy97Wul{_U*kF7Wap)(GT&dBtL^QL z1u0v^61kdl`TIV7{v6Z!LpfPYW4S&>+PkXfZk;niB!WHhK$o{btrxprh~z|2P>^3p zi1qa811Rmts3_G_uY&>t?f|qQE*`Jfmw?-psrj0G%{+g4UV5SC~Ko*5Ftxb!z~-sHC# z6hUIj$;<1NL3~F=L+$7L`6_T&Iz2r-Ufr?_1SBuM1qVOm1_epWmoE+b?*g(27hTOz zi;P^2%}7@_=?3TCcqR761_>o5TU%Q~3W}?QgC6B0Md-Nl`#TKAV}t;KO5GB;p}sO| zpTk5?N7sq#E!SD%&hVHJv>YR3rPza8$jQpf%NfL7l+N0vEcb`IiUcZDA&;7xo(|X{ zefWS7fUYbp9ToB&F0;S1*-eOR;Qrkpafg9<^ytwt*Ts|gal>#vbvKe@HrBXgdt^r7 zzo0!RpEcgx+*})vQYK7B5q|1W-}4z_jouz#eO-;yzhyMa^^p}|IA`(kF8+JJbu<5f z7ck*iaouV#u0X^uAaDoZLSXdt^z?{3E?>RsZ#>ww`yoqvg`13-V) zK{$_wzEICl1^&fuB_~hE5AtpY)0_~7UP%;!+^dSjU7;?Uio0BieQmn!k;n>~8 zb%aApF!;_7dlWSa{O>d*RQtcu5JT&P{UJ{QxwPD`uqE{NJub%@r%9k)|vzj z3}%u{08Z)YvSplJ5w#tX$TT{Z|Aj*~CKwYhn2q9MG*DMxzPg0GK?P~-!@Z<-_wG?^ zJ%RDQIPbkf4@bOX%8f?3sPIL(K!$=A!WTB>qv{$B8m<9=Rzg}R?lLz528u2$g-ND` zXT4AA|FDUQ(h@L{SN9{>EYO@f#0E&nrp$fXpc=B`T;Me>Cig ^fZ}laoF7fMfLV z3km$r)!n@(n^B#*ZIn(k^OcW}Pj=!%Qfl5br0Cmp2BkKPaO();0I*&cw-W`7_Nl#4 zI)N64(UeXEYZ%M0?COkitpY;$5=MoP6Mejj1YPc%Kt*)#-~e@%tsOZ@TxF$}T)?!zT9NyG1U^Zkj!zaA?CfVoWj@r^ zS$r=)hXch%3wUk1;_kk?H_s#{CI&AJ)bxn@m-sV-ZJ1i9`Tji_dI3Ra8|K5Zv$Iv= zQ`!DcPGMg{p-#KckBs>W7LIrU#WXcg$|o1bvXd9-VrQ48@k&!EUhwhiuy-o_Ip}oE436M&P|W;pOU9_r zcOL6YLa_#;-XM@c^DMIeHvY~cdHRYnK{;R$=!B3ECB|Nm9KcablJca>)+VlWn!d4E zxw~s!pWr&mN3m~0cmTgIE_?O&^${j0@(rp(5eP$3Z$il%GW3rv6c;8YCVqwO2Uxm^ z8pYdXWM&Egmf_*ODJp`O%4BY7*+Vya$H<6vpVB1_|0gHIH|$&0m?bF5uK)Ka;=FnL zgA~d8g^rWgy*3w{w59)HNUhNH3mvAhz_Hjsvrt9|7x4$<0{d}C;hQ#p`t+fpVefJ|e0u6Rl;EU_Y3bL|$+X{(>>YS4QUm*>Y zHC5Y*1H|B$&ry&duh|vCr!3_n)-f{nOW_ws?Z5y%pn7g@j$c^#1$e1wTLnoj|;P?_Q;r8}FTa20Agm3fTvytbKa&i&BM`}++gQq8n*r#77%NX4_clPW! zuByk$%9P8!NUa17>km||jgkU1roO)~rCC)=ju$d3M70vqb@ApBX-H&&W`2m*=TS#m^%dD#I|Db ziHNM_ojbK~tvh;p@||Zs;cf!~2~}dBh*ad+vuBrOWf!qPm76#HQDO5He_D-Z$EK#% z>I=1+(EgDouFQSARG?pJ=j=SOvpv5<;6@xA`>Cm^1x)kBw6(Rdov$ssxzMgZ0}(IJ zhlhlGVNK1Fa%JzX4`UR+0$0MkGb7*zeU5|}Cdd@rv@jJR;yNH&-UR(jRak_)jK40#IRUuG4+%<2 z+>R}LUL6>;X_Z4ro;~9h}B2C?M*jiUmoKE&B9L52NR|DrdlvH6+(VN0T_qjd3|9PaBVR$4eDzHU`UzpCp?9Y>@ zPmiM&gL+0{ToID7qrE*1iw7eCa$1cmmV0f93C177;2-*&c~^GCnrCcuGy*%H%1Y0W zKFS7B%o|!=6S)sWTuj#3D#F|X(pdl1ny63PBW~c!vIyk>Eu%Yx+JV(9se|puygHSm zJf|^1MSu$9H|+k-XyC4^L(HY+B&@;EIK`9-UIo!BkF!GC!I-wLt}Z-373~uz7o9f0 z9!jE?b#oJi9)-@M!0gZOp~|4FEDp7->z?TbFOQb6(uy2Cnxkqmac%+LJv?EtY|LVn2 z6WC|jJt9MoXTz(lA&Yi+NQ4xfYpj z!)5)WJKR*V$_6G_>Az1Js + + + + + + diff --git a/classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.md5 b/classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.md5 new file mode 100644 index 0000000..3b15e94 --- /dev/null +++ b/classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.md5 @@ -0,0 +1 @@ +6fee3aba610aab517d2539922bc7086e \ No newline at end of file diff --git a/classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.png b/classmsceqf_1_1_track_manager_acd15a87fdc24b43e2cb9f41e179a85e3_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..9479c3d61d4d00f8bcdc5eee04d947ce8a210b72 GIT binary patch literal 12151 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 literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.map b/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.map new file mode 100644 index 0000000..563cae1 --- /dev/null +++ b/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.md5 b/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.md5 new file mode 100644 index 0000000..c6889c0 --- /dev/null +++ b/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.md5 @@ -0,0 +1 @@ +ca1969288c3fe6de6d5ab5b653cc2bd4 \ No newline at end of file diff --git a/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.png b/classmsceqf_1_1_track_manager_afe813535e2b8bc3fa2f68ea611fb7015_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..61d9bc3862386da406aae0887c16a222634821d6 GIT binary patch literal 11951 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 S3}6BsP2!cTNa4%3zW)pQEHsM% literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_tracker-members.html b/classmsceqf_1_1_tracker-members.html new file mode 100644 index 0000000..49c003c --- /dev/null +++ b/classmsceqf_1_1_tracker-members.html @@ -0,0 +1,122 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::Tracker Member List
+
+
+ +

This is the complete list of members for msceqf::Tracker, including all inherited members.

+ + + + + + + +
cam() constmsceqf::Tracker
currentFeatures() constmsceqf::Tracker
Keypoints typedefmsceqf::Tracker
processCamera(Camera &cam)msceqf::Tracker
TimedFeatures typedefmsceqf::Tracker
Tracker(const TrackerOptions &opts, const Vector4 &intrinsics)msceqf::Tracker
+
+ + + + diff --git a/classmsceqf_1_1_tracker.html b/classmsceqf_1_1_tracker.html new file mode 100644 index 0000000..75e0feb --- /dev/null +++ b/classmsceqf_1_1_tracker.html @@ -0,0 +1,252 @@ + + + + + + + +MSCEqF: msceqf::Tracker Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::Tracker Class Reference
+
+
+ +

This class implement the feature tracker module based on Lucas-Kanade optical flow. The tracker tracks feature temporally in subsequent images and produces a set of matches. + More...

+ +

#include <tracker.hpp>

+ + + + + + + + +

+Public Types

+using Keypoints = std::vector<cv::KeyPoint>
 A vector of features keypoints.
 
+using TimedFeatures = std::pair<fp, Features>
 Set of features associated with a time.
 
+ + + + + + + + + + + + + +

+Public Member Functions

 Tracker (const TrackerOptions &opts, const Vector4 &intrinsics)
 Tracker constructor.
 
void processCamera (Camera &cam)
 This method process the input camera measurement. If first pre-process the camera image, and then it tracks features.
 
const TimedFeaturescurrentFeatures () const
 Get the current detected/tracked features.
 
const PinholeCameraUniquePtr & cam () const
 Get the camera pointer.
 
+

Detailed Description

+

This class implement the feature tracker module based on Lucas-Kanade optical flow. The tracker tracks feature temporally in subsequent images and produces a set of matches.

+

Constructor & Destructor Documentation

+ +

◆ Tracker()

+ +
+
+ + + + + + + + + + + +
msceqf::Tracker::Tracker (const TrackerOptions & opts,
const Vector4 & intrinsics )
+
+ +

Tracker constructor.

+
Parameters
+ + + +
optsTracker options
intrinsicsCamera intrinsics as R4 vector (fx, fy, cx, cy)
+
+
+ +
+
+

Member Function Documentation

+ +

◆ cam()

+ +
+
+ + + + + + + +
const PinholeCameraUniquePtr & msceqf::Tracker::cam () const
+
+ +

Get the camera pointer.

+
Returns
Pointer to the camera object
+ +
+
+ +

◆ currentFeatures()

+ +
+
+ + + + + + + +
const TimedFeatures & msceqf::Tracker::currentFeatures () const
+
+ +

Get the current detected/tracked features.

+
Returns
Current detected/tracked features
+ +
+
+ +

◆ processCamera()

+ +
+
+ + + + + + + +
void msceqf::Tracker::processCamera (Camera & cam)
+
+ +

This method process the input camera measurement. If first pre-process the camera image, and then it tracks features.

+
Parameters
+ + +
camCamera measurement
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_tracker.js b/classmsceqf_1_1_tracker.js new file mode 100644 index 0000000..e4d1d04 --- /dev/null +++ b/classmsceqf_1_1_tracker.js @@ -0,0 +1,9 @@ +var classmsceqf_1_1_tracker = +[ + [ "Keypoints", "classmsceqf_1_1_tracker.html#a32bd1cc7577153664283a2e378682881", null ], + [ "TimedFeatures", "classmsceqf_1_1_tracker.html#a66613c9455dfe4f6bcca3ba7cc2c85e8", null ], + [ "Tracker", "classmsceqf_1_1_tracker.html#afb492cf3bf3ce23424014fa4946b4c2a", null ], + [ "cam", "classmsceqf_1_1_tracker.html#ab0998a6999526305b7e0b4d958de7f93", null ], + [ "currentFeatures", "classmsceqf_1_1_tracker.html#a84f066b29a246c23ef9d78a646504b1b", null ], + [ "processCamera", "classmsceqf_1_1_tracker.html#adb6858134efd07895ccd41b56520e6e3", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_updater-members.html b/classmsceqf_1_1_updater-members.html new file mode 100644 index 0000000..418e934 --- /dev/null +++ b/classmsceqf_1_1_updater-members.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::Updater Member List
+
+
+ +

This is the complete list of members for msceqf::Updater, including all inherited members.

+ + + +
mscUpdate(MSCEqFState &X, const Tracks &tracks, std::unordered_set< uint > &ids)msceqf::Updater
Updater(const UpdaterOptions &opts, const SystemState &xi0) (defined in msceqf::Updater)msceqf::Updater
+
+ + + + diff --git a/classmsceqf_1_1_updater.html b/classmsceqf_1_1_updater.html new file mode 100644 index 0000000..4153873 --- /dev/null +++ b/classmsceqf_1_1_updater.html @@ -0,0 +1,175 @@ + + + + + + + +MSCEqF: msceqf::Updater Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::Updater Class Reference
+
+
+ +

Updater class. This class implements the Multi State Constraint update step of the MSCEqF filter. + More...

+ +

#include <updater.hpp>

+ + + + + + + +

+Public Member Functions

Updater (const UpdaterOptions &opts, const SystemState &xi0)
 
void mscUpdate (MSCEqFState &X, const Tracks &tracks, std::unordered_set< uint > &ids)
 Perform a Multi State Constraint update.
 
+

Detailed Description

+

Updater class. This class implements the Multi State Constraint update step of the MSCEqF filter.

+

Member Function Documentation

+ +

◆ mscUpdate()

+ +
+
+ + + + + + + + + + + + + + + + +
void msceqf::Updater::mscUpdate (MSCEqFState & X,
const Tracks & tracks,
std::unordered_set< uint > & ids )
+
+ +

Perform a Multi State Constraint update.

+
Parameters
+ + + + +
XMSCEqF state
tracksTracks to update
idsIndices of the tracks that are evaluated for an update
+
+
+
Note
Not all the tracks corresponding to the given ids will be used for the update. Tracks that do not contains at least two views, tracks for which the triangulation fails, and tracks that fail the chi2 test are discarded. The set ids will change accordingly.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_updater.js b/classmsceqf_1_1_updater.js new file mode 100644 index 0000000..d828fe4 --- /dev/null +++ b/classmsceqf_1_1_updater.js @@ -0,0 +1,4 @@ +var classmsceqf_1_1_updater = +[ + [ "mscUpdate", "classmsceqf_1_1_updater.html#a258710b1d247e606625306524ecbdb4d", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_visualizer-members.html b/classmsceqf_1_1_visualizer-members.html new file mode 100644 index 0000000..e104cba --- /dev/null +++ b/classmsceqf_1_1_visualizer-members.html @@ -0,0 +1,119 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::Visualizer Member List
+
+
+ +

This is the complete list of members for msceqf::Visualizer, including all inherited members.

+ + + + +
imageWithTracks(const Camera &cam, const std::string &text="") constmsceqf::Visualizerinline
visualizeImageWithTracks(const Camera &cam, const std::string &text="") constmsceqf::Visualizerinline
Visualizer(const TrackManager &track_manager)msceqf::Visualizerinline
+
+ + + + diff --git a/classmsceqf_1_1_visualizer.html b/classmsceqf_1_1_visualizer.html new file mode 100644 index 0000000..b81ec49 --- /dev/null +++ b/classmsceqf_1_1_visualizer.html @@ -0,0 +1,282 @@ + + + + + + + +MSCEqF: msceqf::Visualizer Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::Visualizer Class Reference
+
+
+ + + + + + + + + + + +

+Public Member Functions

 Visualizer (const TrackManager &track_manager)
 Construct a new Visualizer object.
 
cv::Mat3b imageWithTracks (const Camera &cam, const std::string &text="") const
 Camera image with overlayed tracks.
 
void visualizeImageWithTracks (const Camera &cam, const std::string &text="") const
 Visualize imge with history of tracks.
 
+

Constructor & Destructor Documentation

+ +

◆ Visualizer()

+ +
+
+ + + + + +
+ + + + + + + +
msceqf::Visualizer::Visualizer (const TrackManager & track_manager)
+
+inline
+
+ +

Construct a new Visualizer object.

+
Parameters
+ + +
track_manager
+
+
+ +
+
+

Member Function Documentation

+ +

◆ imageWithTracks()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
cv::Mat3b msceqf::Visualizer::imageWithTracks (const Camera & cam,
const std::string & text = "" ) const
+
+inline
+
+ +

Camera image with overlayed tracks.

+
Parameters
+ + +
cam
+
+
+
+Here is the call graph for this function:
+
+
+ + + + + + + + + +
+
+Here is the caller graph for this function:
+
+
+ + + + + +
+ +
+
+ +

◆ visualizeImageWithTracks()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
void msceqf::Visualizer::visualizeImageWithTracks (const Camera & cam,
const std::string & text = "" ) const
+
+inline
+
+ +

Visualize imge with history of tracks.

+
Parameters
+ + +
cam
+
+
+
+Here is the call graph for this function:
+
+
+ + + + + + + + + + + +
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_visualizer.js b/classmsceqf_1_1_visualizer.js new file mode 100644 index 0000000..073f0f4 --- /dev/null +++ b/classmsceqf_1_1_visualizer.js @@ -0,0 +1,6 @@ +var classmsceqf_1_1_visualizer = +[ + [ "Visualizer", "classmsceqf_1_1_visualizer.html#a06f94caa116397a1c4b52dea87c5cee6", null ], + [ "imageWithTracks", "classmsceqf_1_1_visualizer.html#af0b6220ad8dbb4d1925ba9121be6631e", null ], + [ "visualizeImageWithTracks", "classmsceqf_1_1_visualizer.html#a49e6c6116457f74dd68d81382c4e154b", null ] +]; \ No newline at end of file diff --git a/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.map b/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.map new file mode 100644 index 0000000..af43fb0 --- /dev/null +++ b/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.md5 b/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.md5 new file mode 100644 index 0000000..0fa3378 --- /dev/null +++ b/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.md5 @@ -0,0 +1 @@ +2a57e9ef413344f1f9567c6ff0d3d7a3 \ No newline at end of file diff --git a/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.png b/classmsceqf_1_1_visualizer_a49e6c6116457f74dd68d81382c4e154b_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..84e159317b4c2e00db5d1aecc196954d393b9506 GIT binary patch literal 20757 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 z zj7m=~=mvF7&7p|_=?TZ=n2A_kj(l|ujW_%nuU@?}jh}6J_u^ArLPDlR=SeJ#Nn@N} zt)OQIU9j7qWqrM=#=2_{*^e4l?<67EG1%T;CO)sVwe?|SWYD8W44|wAk)<~voPe

lEr#?&IHVP2?~)s-i+FQDf~FC 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 literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.map b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.map new file mode 100644 index 0000000..be6abc1 --- /dev/null +++ b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.md5 b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.md5 new file mode 100644 index 0000000..3cdda49 --- /dev/null +++ b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.md5 @@ -0,0 +1 @@ +06eced46508d9e544215bb22c812c18e \ No newline at end of file diff --git a/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.png b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..373114323f10c5cb5af7ea960eda54134ecc455b GIT binary patch literal 14747 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 literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.map b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.map new file mode 100644 index 0000000..74a3240 --- /dev/null +++ b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.md5 b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.md5 new file mode 100644 index 0000000..eebe021 --- /dev/null +++ b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.md5 @@ -0,0 +1 @@ +9d2eb878d2af10823f38e8ec4035135d \ No newline at end of file diff --git a/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.png b/classmsceqf_1_1_visualizer_af0b6220ad8dbb4d1925ba9121be6631e_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..b92db3b57e8c727187fae88da5fe36ddfce03e72 GIT binary patch literal 7368 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 literal 0 HcmV?d00001 diff --git a/classmsceqf_1_1_zero_velocity_updater-members.html b/classmsceqf_1_1_zero_velocity_updater-members.html new file mode 100644 index 0000000..ecb2490 --- /dev/null +++ b/classmsceqf_1_1_zero_velocity_updater-members.html @@ -0,0 +1,121 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +

+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf::ZeroVelocityUpdater Member List
+
+
+ +

This is the complete list of members for msceqf::ZeroVelocityUpdater, including all inherited members.

+ + + + + + +
isActive(const Tracks &tracks)msceqf::ZeroVelocityUpdater
setMeasurement(const SE23 &y)msceqf::ZeroVelocityUpdater
setMotion()msceqf::ZeroVelocityUpdater
ZeroVelocityUpdater(const ZeroVelocityUpdaterOptions &opts, const Checker &checker)msceqf::ZeroVelocityUpdater
zvUpdate(MSCEqFState &X, const SystemState &xi0) constmsceqf::ZeroVelocityUpdater
+
+ + + + diff --git a/classmsceqf_1_1_zero_velocity_updater.html b/classmsceqf_1_1_zero_velocity_updater.html new file mode 100644 index 0000000..7faa7fb --- /dev/null +++ b/classmsceqf_1_1_zero_velocity_updater.html @@ -0,0 +1,277 @@ + + + + + + + +MSCEqF: msceqf::ZeroVelocityUpdater Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
msceqf::ZeroVelocityUpdater Class Reference
+
+
+ +

Zero velocity updater class. This class implements the Equivariant Zero Velocity Update (ZVU) of the MSCEqF filter. + More...

+ +

#include <zero_velocity_updater.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 ZeroVelocityUpdater (const ZeroVelocityUpdaterOptions &opts, const Checker &checker)
 Zero velocity updater constructor.
 
+void setMotion ()
 Set motion flag indicating that we are not in the static phase at the beginning but we have moved.
 
void setMeasurement (const SE23 &y)
 Set the static extended pose measurement.
 
bool isActive (const Tracks &tracks)
 Check whether the zero velocity updater is active.
 
bool zvUpdate (MSCEqFState &X, const SystemState &xi0) const
 Perform a zero velocity update.
 
+

Detailed Description

+

Zero velocity updater class. This class implements the Equivariant Zero Velocity Update (ZVU) of the MSCEqF filter.

+

Constructor & Destructor Documentation

+ +

◆ ZeroVelocityUpdater()

+ +
+
+ + + + + + + + + + + +
msceqf::ZeroVelocityUpdater::ZeroVelocityUpdater (const ZeroVelocityUpdaterOptions & opts,
const Checker & checker )
+
+ +

Zero velocity updater constructor.

+
Parameters
+ + + +
optsZero velocity updater options
checkerRefernece to the MSCEqF checker
+
+
+ +
+
+

Member Function Documentation

+ +

◆ isActive()

+ +
+
+ + + + + +
+ + + + + + + +
bool msceqf::ZeroVelocityUpdater::isActive (const Tracks & tracks)
+
+nodiscard
+
+ +

Check whether the zero velocity updater is active.

+
Parameters
+ + +
trackstracks up to date used for disparity check
+
+
+
Returns
true if the zero velocity updater is active, and therefore the platform is in static phase, false otherwise
+ +
+
+ +

◆ setMeasurement()

+ +
+
+ + + + + + + +
void msceqf::ZeroVelocityUpdater::setMeasurement (const SE23 & y)
+
+ +

Set the static extended pose measurement.

+
Parameters
+ + +
ystatic extended pose
+
+
+ +
+
+ +

◆ zvUpdate()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
bool msceqf::ZeroVelocityUpdater::zvUpdate (MSCEqFState & X,
const SystemState & xi0 ) const
+
+nodiscard
+
+ +

Perform a zero velocity update.

+
Parameters
+ + + +
XMSCEqF state
xi0Origin state
+
+
+
Returns
always true, when zero velocity update has been performed
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classmsceqf_1_1_zero_velocity_updater.js b/classmsceqf_1_1_zero_velocity_updater.js new file mode 100644 index 0000000..05af148 --- /dev/null +++ b/classmsceqf_1_1_zero_velocity_updater.js @@ -0,0 +1,8 @@ +var classmsceqf_1_1_zero_velocity_updater = +[ + [ "ZeroVelocityUpdater", "classmsceqf_1_1_zero_velocity_updater.html#a75b934b99074efe88ad5706ef0b6be01", null ], + [ "isActive", "classmsceqf_1_1_zero_velocity_updater.html#af14a4da81ca7d243f79bd9e2f8e1d3b3", null ], + [ "setMeasurement", "classmsceqf_1_1_zero_velocity_updater.html#a04790d5df6a8dbebe6ecec357aea848b", null ], + [ "setMotion", "classmsceqf_1_1_zero_velocity_updater.html#aa6d1fe8c72e5c3f51a4c61dfee9bc2ab", null ], + [ "zvUpdate", "classmsceqf_1_1_zero_velocity_updater.html#a5f7685172128094eb6d5d0911ae5378a", null ] +]; \ No newline at end of file diff --git a/classutils_1_1_insertion_ordered_map-members.html b/classutils_1_1_insertion_ordered_map-members.html new file mode 100644 index 0000000..1728da1 --- /dev/null +++ b/classutils_1_1_insertion_ordered_map-members.html @@ -0,0 +1,122 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
utils::InsertionOrderedMap< Key, Value > Member List
+
+
+ +

This is the complete list of members for utils::InsertionOrderedMap< Key, Value >, including all inherited members.

+ + + + + + + +
at(const Key &key) constutils::InsertionOrderedMap< Key, Value >inline
at(const Key &key)utils::InsertionOrderedMap< Key, Value >inline
clear()utils::InsertionOrderedMap< Key, Value >inline
insert(const Key &key, const Value &value)utils::InsertionOrderedMap< Key, Value >inline
keys() constutils::InsertionOrderedMap< Key, Value >inline
values() constutils::InsertionOrderedMap< Key, Value >inline
+
+ + + + diff --git a/classutils_1_1_insertion_ordered_map.html b/classutils_1_1_insertion_ordered_map.html new file mode 100644 index 0000000..feba37a --- /dev/null +++ b/classutils_1_1_insertion_ordered_map.html @@ -0,0 +1,341 @@ + + + + + + + +MSCEqF: utils::InsertionOrderedMap< Key, Value > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
utils::InsertionOrderedMap< Key, Value > Class Template Reference
+
+
+ +

This calss define a map that keeps the insertion order. + More...

+ +

#include <tools.hpp>

+
+Inheritance diagram for utils::InsertionOrderedMap< Key, Value >:
+
+
Inheritance graph
+ + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void insert (const Key &key, const Value &value)
 Insert a key-value pair into the map if the key does not exists.
 
const Value & at (const Key &key) const
 Return the value associated with the key.
 
Value & at (const Key &key)
 Return the value associated with the key.
 
const std::vector< Key > keys () const
 Return a vector containing the keys.
 
const std::vector< Value > values () const
 Return a vector containing the values.
 
+void clear ()
 Clear the map and the vector.
 
+

Detailed Description

+
template<typename Key, typename Value>
+class utils::InsertionOrderedMap< Key, Value >

This calss define a map that keeps the insertion order.

+
Template Parameters
+ + + +
Key
Value
+
+
+

Member Function Documentation

+ +

◆ at() [1/2]

+ +
+
+
+template<typename Key , typename Value >
+ + + + + +
+ + + + + + + +
Value & utils::InsertionOrderedMap< Key, Value >::at (const Key & key)
+
+inline
+
+ +

Return the value associated with the key.

+
Parameters
+ + +
key
+
+
+
Returns
Value
+ +
+
+ +

◆ at() [2/2]

+ +
+
+
+template<typename Key , typename Value >
+ + + + + +
+ + + + + + + +
const Value & utils::InsertionOrderedMap< Key, Value >::at (const Key & key) const
+
+inline
+
+ +

Return the value associated with the key.

+
Parameters
+ + +
key
+
+
+
Returns
Value
+ +
+
+ +

◆ insert()

+ +
+
+
+template<typename Key , typename Value >
+ + + + + +
+ + + + + + + + + + + +
void utils::InsertionOrderedMap< Key, Value >::insert (const Key & key,
const Value & value )
+
+inline
+
+ +

Insert a key-value pair into the map if the key does not exists.

+
Parameters
+ + + +
keyKey
valueValue
+
+
+ +
+
+ +

◆ keys()

+ +
+
+
+template<typename Key , typename Value >
+ + + + + +
+ + + + + + + +
const std::vector< Key > utils::InsertionOrderedMap< Key, Value >::keys () const
+
+inline
+
+ +

Return a vector containing the keys.

+
Returns
Vector of keys
+ +
+
+ +

◆ values()

+ +
+
+
+template<typename Key , typename Value >
+ + + + + +
+ + + + + + + +
const std::vector< Value > utils::InsertionOrderedMap< Key, Value >::values () const
+
+inline
+
+ +

Return a vector containing the values.

+
Returns
Vector of values
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classutils_1_1_insertion_ordered_map.js b/classutils_1_1_insertion_ordered_map.js new file mode 100644 index 0000000..999c543 --- /dev/null +++ b/classutils_1_1_insertion_ordered_map.js @@ -0,0 +1,9 @@ +var classutils_1_1_insertion_ordered_map = +[ + [ "at", "classutils_1_1_insertion_ordered_map.html#ab659341ecf8995e225c1c4e2832ec098", null ], + [ "at", "classutils_1_1_insertion_ordered_map.html#a75e4c95149461f854cd43d9c70c12da8", null ], + [ "clear", "classutils_1_1_insertion_ordered_map.html#a8350ad05c98eb1e736c4b071442d2136", null ], + [ "insert", "classutils_1_1_insertion_ordered_map.html#a953c250c1bb59ee5594e6daec5e7c0f3", null ], + [ "keys", "classutils_1_1_insertion_ordered_map.html#a51efdc3177100f1e73e29c4a877a0bfb", null ], + [ "values", "classutils_1_1_insertion_ordered_map.html#ac54723bf987340bca7a1c78aba3b8155", null ] +]; \ No newline at end of file diff --git a/classutils_1_1_insertion_ordered_map__inherit__graph.map b/classutils_1_1_insertion_ordered_map__inherit__graph.map new file mode 100644 index 0000000..9f0bc53 --- /dev/null +++ b/classutils_1_1_insertion_ordered_map__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classutils_1_1_insertion_ordered_map__inherit__graph.md5 b/classutils_1_1_insertion_ordered_map__inherit__graph.md5 new file mode 100644 index 0000000..612cdf4 --- /dev/null +++ b/classutils_1_1_insertion_ordered_map__inherit__graph.md5 @@ -0,0 +1 @@ +08555b91df4b977adbf6b1adc63ebbd1 \ No newline at end of file diff --git a/classutils_1_1_insertion_ordered_map__inherit__graph.png b/classutils_1_1_insertion_ordered_map__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ad89f6406028f2f2578c6e033fadcbf8828552c0 GIT binary patch literal 12836 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 + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
utils::Logger Member List
+
+
+ +

This is the complete list of members for utils::Logger, including all inherited members.

+ + + + + + + +
debug(const T &msg)utils::Loggerinlinestatic
err(const T &msg)utils::Loggerinlinestatic
getlevel()utils::Loggerinlinestatic
info(const T &msg)utils::Loggerinlinestatic
setLevel(const LoggerLevel &level)utils::Loggerinlinestatic
warn(const T &msg)utils::Loggerinlinestatic
+
+ + + + diff --git a/classutils_1_1_logger.html b/classutils_1_1_logger.html new file mode 100644 index 0000000..49523da --- /dev/null +++ b/classutils_1_1_logger.html @@ -0,0 +1,379 @@ + + + + + + + +MSCEqF: utils::Logger Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
utils::Logger Class Reference
+
+
+ +

Logger. + More...

+ +

#include <logger.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static const LoggerLevel & getlevel ()
 Get the logger level (see LoggerLevel)
 
static void setLevel (const LoggerLevel &level)
 Set the logger level (see LoggerLevel)
 
template<typename T >
static void info (const T &msg)
 Format a info message and log it in white.
 
template<typename T >
static void err (const T &msg)
 Format a error message and log it in red.
 
template<typename T >
static void warn (const T &msg)
 Format a warn message and log it in yellow.
 
template<typename T >
static void debug (const T &msg)
 Format a debug message and log it in blue.
 
+

Detailed Description

+

Member Function Documentation

+ +

◆ debug()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
static void utils::Logger::debug (const T & msg)
+
+inlinestatic
+
+ +

Format a debug message and log it in blue.

+
Template Parameters
+ + +
TType of the message
+
+
+
Parameters
+ + +
msgmessage
+
+
+ +
+
+ +

◆ err()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
static void utils::Logger::err (const T & msg)
+
+inlinestatic
+
+ +

Format a error message and log it in red.

+
Template Parameters
+ + +
TType of the message
+
+
+
Parameters
+ + +
msgmessage
+
+
+ +
+
+ +

◆ getlevel()

+ +
+
+ + + + + +
+ + + + + + + +
static const LoggerLevel & utils::Logger::getlevel ()
+
+inlinestatic
+
+ +

Get the logger level (see LoggerLevel)

+
Returns
const LoggerLevel&
+ +
+
+ +

◆ info()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
static void utils::Logger::info (const T & msg)
+
+inlinestatic
+
+ +

Format a info message and log it in white.

+
Template Parameters
+ + +
TType of the message
+
+
+
Parameters
+ + +
msgmessage
+
+
+ +
+
+ +

◆ setLevel()

+ +
+
+ + + + + +
+ + + + + + + +
static void utils::Logger::setLevel (const LoggerLevel & level)
+
+inlinestatic
+
+ +

Set the logger level (see LoggerLevel)

+
Parameters
+ + +
levelLoggerLevel
+
+
+ +
+
+ +

◆ warn()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
static void utils::Logger::warn (const T & msg)
+
+inlinestatic
+
+ +

Format a warn message and log it in yellow.

+
Template Parameters
+ + +
TType of the message
+
+
+
Parameters
+ + +
msgmessage
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/clipboard.js b/clipboard.js new file mode 100644 index 0000000..42c1fb0 --- /dev/null +++ b/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/cookie.js b/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/dir_0ad255a918b7fba820a1ddafed6fa637.html b/dir_0ad255a918b7fba820a1ddafed6fa637.html new file mode 100644 index 0000000..88eaaaf --- /dev/null +++ b/dir_0ad255a918b7fba820a1ddafed6fa637.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: include/types Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
types Directory Reference
+
+
+
+Directory dependency graph for types:
+
+
include/types
+ + + + +
+ + + + +

+Files

 fptypes.hpp
 
+
+
+ + + + diff --git a/dir_0ad255a918b7fba820a1ddafed6fa637.js b/dir_0ad255a918b7fba820a1ddafed6fa637.js new file mode 100644 index 0000000..9e1f614 --- /dev/null +++ b/dir_0ad255a918b7fba820a1ddafed6fa637.js @@ -0,0 +1,4 @@ +var dir_0ad255a918b7fba820a1ddafed6fa637 = +[ + [ "fptypes.hpp", "fptypes_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_0ad255a918b7fba820a1ddafed6fa637_dep.map b/dir_0ad255a918b7fba820a1ddafed6fa637_dep.map new file mode 100644 index 0000000..0186889 --- /dev/null +++ b/dir_0ad255a918b7fba820a1ddafed6fa637_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_0ad255a918b7fba820a1ddafed6fa637_dep.md5 b/dir_0ad255a918b7fba820a1ddafed6fa637_dep.md5 new file mode 100644 index 0000000..a0ff01a --- /dev/null +++ b/dir_0ad255a918b7fba820a1ddafed6fa637_dep.md5 @@ -0,0 +1 @@ +6f7478f2453cfb82eca8c5cece726d91 \ No newline at end of file diff --git a/dir_0ad255a918b7fba820a1ddafed6fa637_dep.png b/dir_0ad255a918b7fba820a1ddafed6fa637_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..3b76dad0826c700d9bc9121a4f03bc03987e6ea1 GIT binary patch literal 2432 zcmV-`34iv9P)!#u}r>dWj1buy>u7%>jx&!a$ zA7*ym_nr5Be$Tu!v%j4I1VIo4K@bE%5ClOG1VIo4K@jR4MQt|Tt5>fnTCKKQ1w|Gm zB_$oLFZH!rZESLKa%u(bRY+2>)M~ZYKNc)bZQHK>W4G_zv5mAV-#xK@z`$UhRJX3x zPfaw>pqpVe?yRT&eCW!v0Jw7UL>^>UAw-7jg76;X6ihnxWI5# zx#6mEd)D1BdPZ^1+PrClZW@eV7RS`dQ4D)63>POm+}pR-o1#8XT#MIVy3kVDoUo9A zWMw^iH5|Vzj&YH%>(r^X zE$8Os=zUXeYHCXB)@=Z|_VdpiIed_f8`taAFDNLe{vc|BQ3lJzons-|(M;0_H})Pj+?|0O3O-Sh{2pCr=!wu&|J&aj^si z`k_$NYL2$bq#jvQcWmE^q4HUSf^^6FXj2J~eOQ;&jcYB3Jx3!g*5kpx zlo5k`>zBFL7iUh%ED2N@o|npPI?lnbW7Zefw6G%hyCc z%izK4?%jjI;SrS=G;$N8BFTE-CvJuyra>7I`79Zc6fBKK6Z>kwpqlE7Pzf;&%7_S- zjEGt4o~)#-dzSy?GxZr!Z+=uUlSw7U(chcsEE_2PvYR<$e74+xVv`*;D_(iNk~{uc2*W1 z9$koI8#B z?myQ0#rk#3nLQJAuRiqY>%#}LXR>+IhFTd*O)=W%vs5Y-0In((<`xzV3=Cq;Co7pS zaSFx7H`%*qH=5)W_V3?I6YC}~@Oh;lZ_k(oKz~1f zJUX@I+}SgnJ9m~29Xc^&=rGL9&GGc?iiL$mjgO-y8SOdiVSWPwxOm|_+1Xj_`g$kr zUw8qxw(S7;Qx{Ln&CPXXy}f&ocI7gcE?wa4*)s(A`x4;qOK5NacW&PyE$s@Ck>e>Y zzKMIgRtyaf=Gf5`Tv{6U7tBU`&U%=&wKY9@s@b)3JKui$Z^FWc=(ZIV{i0X4sHlj> zjT>|K&K&{<2I21?ptrr5U309ht=Y3r!}Yv8jvP6}vX2&%o_>{>g-Z-Fo~L2-M^K1sc77|2>>s7 zb>sY{bkft)F)>l#=GIQ{yl0GzHdp|S8d>4_VprYzv7@OJ78cUq@6p%YnVFfC+|=JjkEux$|{5wE#_;G{Mf!-XMK=){NqP zgH;i;aLHq@)FOtBG{o+Wg3(_M3jZg9B_jsEz{twXsF7E~J!`jbRWEh(M?NblDJkn| z_i6B8r5rg_CxTU759G7N>wxM5gB)2+n>AzVo9`H6R|eOpQ6q!xOH#1@$Y)jbKcwLP z&1ZM-9#VECAfC^X6>-jz5fLmI5y3K$I-Sp|YsC8o>lqO&8Ie2 + + + + + + +MSCEqF: wrappers/ros Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ros Directory Reference
+
+
+
+Directory dependency graph for ros:
+
+
wrappers/ros
+ + + + + +
+
+
+ + + + diff --git a/dir_3f2b7730da608901a4b99a4d72613b7a.js b/dir_3f2b7730da608901a4b99a4d72613b7a.js new file mode 100644 index 0000000..c65869f --- /dev/null +++ b/dir_3f2b7730da608901a4b99a4d72613b7a.js @@ -0,0 +1,4 @@ +var dir_3f2b7730da608901a4b99a4d72613b7a = +[ + [ "ros1", "dir_6bb3bf6d14f66522c3468e1b55d76771.html", "dir_6bb3bf6d14f66522c3468e1b55d76771" ] +]; \ No newline at end of file diff --git a/dir_3f2b7730da608901a4b99a4d72613b7a_dep.map b/dir_3f2b7730da608901a4b99a4d72613b7a_dep.map new file mode 100644 index 0000000..33f324f --- /dev/null +++ b/dir_3f2b7730da608901a4b99a4d72613b7a_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/dir_3f2b7730da608901a4b99a4d72613b7a_dep.md5 b/dir_3f2b7730da608901a4b99a4d72613b7a_dep.md5 new file mode 100644 index 0000000..cb6994f --- /dev/null +++ b/dir_3f2b7730da608901a4b99a4d72613b7a_dep.md5 @@ -0,0 +1 @@ +03c91aaeeee2c699986b56fadcffacce \ No newline at end of file diff --git a/dir_3f2b7730da608901a4b99a4d72613b7a_dep.png b/dir_3f2b7730da608901a4b99a4d72613b7a_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..2dc1dd0533556a61cd7c3ce6eda07d16ad0d9e9e GIT binary patch literal 2848 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 + + + + + + +MSCEqF: wrappers Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
wrappers Directory Reference
+
+
+
+
+ + + + diff --git a/dir_5cec92fd47c0900910bbc2480fdfd7be.js b/dir_5cec92fd47c0900910bbc2480fdfd7be.js new file mode 100644 index 0000000..b15b46b --- /dev/null +++ b/dir_5cec92fd47c0900910bbc2480fdfd7be.js @@ -0,0 +1,4 @@ +var dir_5cec92fd47c0900910bbc2480fdfd7be = +[ + [ "ros", "dir_3f2b7730da608901a4b99a4d72613b7a.html", "dir_3f2b7730da608901a4b99a4d72613b7a" ] +]; \ No newline at end of file diff --git a/dir_6bb3bf6d14f66522c3468e1b55d76771.html b/dir_6bb3bf6d14f66522c3468e1b55d76771.html new file mode 100644 index 0000000..18a411e --- /dev/null +++ b/dir_6bb3bf6d14f66522c3468e1b55d76771.html @@ -0,0 +1,130 @@ + + + + + + + +MSCEqF: wrappers/ros/ros1 Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ros1 Directory Reference
+
+
+
+Directory dependency graph for ros1:
+
+
wrappers/ros/ros1
+ + + + + +
+ + + + +

+Directories

 include
 
+
+
+ + + + diff --git a/dir_6bb3bf6d14f66522c3468e1b55d76771.js b/dir_6bb3bf6d14f66522c3468e1b55d76771.js new file mode 100644 index 0000000..ffbaf63 --- /dev/null +++ b/dir_6bb3bf6d14f66522c3468e1b55d76771.js @@ -0,0 +1,4 @@ +var dir_6bb3bf6d14f66522c3468e1b55d76771 = +[ + [ "include", "dir_8987e3b525563327f0de428880c40647.html", "dir_8987e3b525563327f0de428880c40647" ] +]; \ No newline at end of file diff --git a/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.map b/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.map new file mode 100644 index 0000000..ed60983 --- /dev/null +++ b/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.md5 b/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.md5 new file mode 100644 index 0000000..fbdefdf --- /dev/null +++ b/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.md5 @@ -0,0 +1 @@ +556c5557d40f6a66fafff54c6c1a547f \ No newline at end of file diff --git a/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.png b/dir_6bb3bf6d14f66522c3468e1b55d76771_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..e6dca7b66b7c730a9e3110a4bd8e3b2862004577 GIT binary patch literal 2599 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 Ub`P%ae+dClQyY`I%ieeX0h{^{DgXcg literal 0 HcmV?d00001 diff --git a/dir_821002d4f10779a80d4fb17bc32f21f1.html b/dir_821002d4f10779a80d4fb17bc32f21f1.html new file mode 100644 index 0000000..1da90c9 --- /dev/null +++ b/dir_821002d4f10779a80d4fb17bc32f21f1.html @@ -0,0 +1,133 @@ + + + + + + + +MSCEqF: include/utils Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
utils Directory Reference
+
+
+
+Directory dependency graph for utils:
+
+
include/utils
+ + + + +
+ + + + + + + + +

+Files

 logger.hpp
 
 tools.hpp
 
 visualizer.hpp
 
+
+
+ + + + diff --git a/dir_821002d4f10779a80d4fb17bc32f21f1.js b/dir_821002d4f10779a80d4fb17bc32f21f1.js new file mode 100644 index 0000000..833fbd2 --- /dev/null +++ b/dir_821002d4f10779a80d4fb17bc32f21f1.js @@ -0,0 +1,6 @@ +var dir_821002d4f10779a80d4fb17bc32f21f1 = +[ + [ "logger.hpp", "logger_8hpp_source.html", null ], + [ "tools.hpp", "tools_8hpp_source.html", null ], + [ "visualizer.hpp", "visualizer_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_821002d4f10779a80d4fb17bc32f21f1_dep.map b/dir_821002d4f10779a80d4fb17bc32f21f1_dep.map new file mode 100644 index 0000000..663aa87 --- /dev/null +++ b/dir_821002d4f10779a80d4fb17bc32f21f1_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_821002d4f10779a80d4fb17bc32f21f1_dep.md5 b/dir_821002d4f10779a80d4fb17bc32f21f1_dep.md5 new file mode 100644 index 0000000..c855c4a --- /dev/null +++ b/dir_821002d4f10779a80d4fb17bc32f21f1_dep.md5 @@ -0,0 +1 @@ +bef91dbc6c988ff45c6939c6e348675a \ No newline at end of file diff --git a/dir_821002d4f10779a80d4fb17bc32f21f1_dep.png b/dir_821002d4f10779a80d4fb17bc32f21f1_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7b77ffba22c802533375a81995501cb2ea77af GIT binary patch literal 2055 zcmV+i2>ADjP)a_|8U*2 zoC^aE=ghEY_-r-rg1AFEQ5hE#WHOazMGKPc$@ zreG(ea(Q`qUg_~uxyII;IrA|%J4=O}+A0YO#!yZ2@x>$`-{Ckl(}rcvI9hUqAEuNA z`N&+Cfy9KR@b+{=V88^uA>?rJA;=${j&WXNurwwDO--6U?I{cLk)FDe-|y+^fs2y^ zbgiubfOp<5z>MjE@b{77#Z6hbb?cU1Uqa+FFkUtm;ZKI4q5g`Au6l4xOyI@uA4J%~ zMfkD)XQZWPAZz^^{Q1Wp`24d^k-dEj_T(#3dG;$fIyz$Qn$yooxAf;_stKOJzIg;=y1JY-K{APPHpP#?d|(bF#;38 zm^y7bmM5-&qvL3#rmjYJcQ-maJ8|f}14v8HKu}N!#*d$XoxAp6ad@OrZGUk1A4p%l z24M>q!QI^hTmJqk?!Vt10Is)1J zWsT7l?=UQL#{cv79>;In+1vBmYPAZ>;+OOLZezya=@lu1w#RWCzultM>OGmYwY9~B z2@?STs>ViCo&6FYee{7|eVtBc{6&a>iD1~+^nZi8dw4*tR`L6~)>bGB-o)mu*?r1( zcX#vK8jYIY_VDz?)t?&p{odYQs8o#rfH7mo;_2iRq&$<#AHVS3x0pC-(vYu32tmV? zLZOhGa>9EmJ`sh=y{M}_53RNtn_qbWU)R;b*49?9oKz}BWyNVU)L+5Pn>Vp->&tp= z>{I5W{PY)S)9LV9_Et1EHvs^aJ+&Nr-^@i_?Rm7fw_|U99-<-_K_W3}&dng9cSh!k zvSTn+K4VE#40Nr(Ann;?w6?Y)C^!WB-Z{{xTvSvnKKu76%u|HmufP7pij}M2>gEOj zh+GnlmKH5C*JVJhR>8;D5Azp<0RUoR<8b5GcBH4Jphc_2)M?XD`teCPI*vBU^$doR zOQNCVl2xH#h=lSP45566m7!oTWLWYUqW%>SbZ7sXqaLM1%n|J43UVD z&k+1Xti7X)8@$v=K#xPL3I&59Oy@I38liVa=83XnqI87NFvS$J!sW}C0042Zk^H-~<|IZwgNe7$jdir- z2zq;a5VtG=0N~>4279~PO9^VKtI+lP?`H4Qw(MQ!T%1M;TAyK&cg7DFFW~zN-|_o9 zcILvz*KZhmBo1cpjJViH(2H=fH_%P*8+5wrP>n(8Wab#?LkDpez{UHu937ldJs zVjeC6f)U3 zJQfs;`1r&=tDacG_5^;%LdlLBH;k^ncKrr4Tx&w^p10uS z;4licwdVl$@xrE85TB3)jYbVu7gyYOpA&xj?LPp3#H3`%<-xGCyWRbFiw?rq z@AmJEl4E7?lF1;ENbv6dL(pi{_~rU_czSuk-Q8o@uIFwr8w>!D$-E(xdG~wF*Uz8d zet55VoZ58p`wNzp z&&b`KWA0O$#fZ&kSSz#K8H>ZC5EN_~ZxZ&$KVb6Ug+w4I82`&>4D>%J0Km^bV9+we z0`nQxjOGl6P%s!m!4Qd6=QAt~{k zpOks+FDjH9I&SIpheA*=IF8G+v9USY-?2-VE@}pPR-;fTyapO$EwMhwan**(6G8|f lgb+dqA%qY@2q9$1{tGfqz!73Gu2cX3002ovPDHLkV1mh*`8fap literal 0 HcmV?d00001 diff --git a/dir_8987e3b525563327f0de428880c40647.html b/dir_8987e3b525563327f0de428880c40647.html new file mode 100644 index 0000000..1197af5 --- /dev/null +++ b/dir_8987e3b525563327f0de428880c40647.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: wrappers/ros/ros1/include Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+
+Directory dependency graph for include:
+
+
wrappers/ros/ros1/include
+ + + + +
+ + + + +

+Files

 msceqf_ros.hpp
 
+
+
+ + + + diff --git a/dir_8987e3b525563327f0de428880c40647.js b/dir_8987e3b525563327f0de428880c40647.js new file mode 100644 index 0000000..b0bb029 --- /dev/null +++ b/dir_8987e3b525563327f0de428880c40647.js @@ -0,0 +1,4 @@ +var dir_8987e3b525563327f0de428880c40647 = +[ + [ "msceqf_ros.hpp", "msceqf__ros_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_8987e3b525563327f0de428880c40647_dep.map b/dir_8987e3b525563327f0de428880c40647_dep.map new file mode 100644 index 0000000..c04504c --- /dev/null +++ b/dir_8987e3b525563327f0de428880c40647_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_8987e3b525563327f0de428880c40647_dep.md5 b/dir_8987e3b525563327f0de428880c40647_dep.md5 new file mode 100644 index 0000000..9e82c1f --- /dev/null +++ b/dir_8987e3b525563327f0de428880c40647_dep.md5 @@ -0,0 +1 @@ +6cf00442c4dfd55caa37f4130761ea36 \ No newline at end of file diff --git a/dir_8987e3b525563327f0de428880c40647_dep.png b/dir_8987e3b525563327f0de428880c40647_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..c0528c97a2e29de1f1f7a6f696002dd8045880d2 GIT binary patch literal 2199 zcmV;I2x#|-P)1h8l&4pABhL?h$ul5HRh=o)uvBc<4sc)4-ixoJfgya)+kVnvP#+QA2eGK z@eyX1U55Ab*Zy|qcg()e{B~#FnOP7*2qA&ZCXf(cKwOXI8 zv~!JSxzT7$lKS?cD40g0F=+V6w~l#v`#g5}>6DY)$Td}3zemr$R93g{)z|E7uGbE) zbmga@D3}WtEZE`SzC&bK_%J2S2*4h}bhFn`g!4%-RYZd6BGOV%8H`4wK}j1DOc#-O zXkQQztfUPIriw@~RYXxRH5$z^Zy!a|yvvw1a|S!MZ*}%C6j2mRqtO`Cy+?0*jm0VQ z^YcmAxt%RvZglog6#JR82jFa@-;Cr=-W{-7ojnxAYUOw4non0UclJ!?&7DP1pKbtb zh+jvaUR`;nbt{Iw8pg%U3;@jLBBo9rPy4pMwDI%ecVov;RCM3g);D_&kaQxIfPfB8 z*%o`MmB9o^NZ5weY9)5IGKEwp1pb#88L(hW;1J6uOvPFEPwy@ z5PSD0a{6=%8`gj3?BQ2nXzgbzDJjWT(nhVFW?Oo;V$tHI04(`<5tAnWp8n6j0Koh6 zjO^ULmBWV*Qe-Zo_+c@Hg@ttQ(UT*`lF?`!nk=f8h{#b%&Gp)2O4_KkduBU-f7|OE zlZm$N{$JK;G(6L$EhbYoGv1lWz_7tgnmCp=eqM|p_ZxCdigo~(RcnJ;zkYq&Yi}PP zu3r7#R<>HLWL>|8udgpxE?;KsxCtCTnZ}7zXK-)Wkoh0XamJ7xPU)dZ(9IjU_8LpI zz4`06SR1>Fq@<(d<>e8*_#=voi}}?HFR?au6%)q2&A)Emr1(F@6hC~3rNrXwAv=Vk zU|Ox#sFdX6_8LpI4U32*D(XF^P99J9uD|4X(lK`a`LF17?#wqXMCa~K-`;`r5AKE8 z{D7q~E1f-Lhmhp7%aG)>C_{qjA|#)wB9hM(pw|f0D#Q`+_tYO)#*%y8YE? zFoXN`XXG2BYqCqHnm%m;rtGX5>rbXx6_I?Viby_FMP!;)5ecS>xMVO79@xkHd9xL@ zv3pkn%a$yzR^2}?c%OZH_bBSWs#JS_rdFpzuWzcTjhq}4nVA==RX08T9PRwuE9$?h z>~VjlO9nGI_&I`upL6ywY8{shX5!(49N52?4;MzWdshOtf4D`7rG&)8hw$+5V9L}# z5ZJ9d02eN#vmri?8@ajk33`@^6Q|HXt1Z{w?p+C7{r(CwqGkbLu~>L*=pZ(4*@j-P zCnfn58^2i3k3Zfe;`I^b>R!2giMY5}a!e)y1G_P8`V4eB_nP@2s>mhtnYV7;;@r8j zKgSsU{F{%fn5SfOFeCy z8C;1=PP32d+_?*GZl#lmUaz;kpK(5&=`&{9%3Zp2W!0zas?_$y%uL(#3(%-hV>)*1 z1VDQFS?=At$I$Qrw&ms`Gnttg63pr<`}~5kJUkk4_imxB{J?A`G4T*DhYqN)uC>fV zoAUGXZLjrBo06ZOS8m;cf&u_^S{*}QjUYUHXu0JrJX=42}nKyFSBojZ30V9K=VoH>(9myZ6l zYUNFKb`~EkipIys*Y4X=>++dT>%|vC=-8?Bduv!kB%x)d&3g6f@%1-*(Kl^M{rdIU zyk#4?xjFoB>lOhWI@k^y%GUGt_Tf~@InJL?$Na!dU|=`W&z-Zi@ztMpU@~Qsm318- zA73mbC3tu=LaWuW>C3I$ym^Bgxw*9S_os2=CN=+oJSCS5W(!YGT6lT_Ja#YW*ROxM zvX75%h4mgSH_&S7-lM0j+`CWTa?1^d)))+}A3Gi|FK@iOyq|spoJ8`ODkAwz6{*#~ zW<_}tOckloA3&z;ERG)et|q&5s-pW(cbO%W<}1TtdV{c1@otT=9B(IQm1n#_>qHr;TUp%ri#dSriw@~RYZd6 zBIJ3qDk9ID73D}URYdVggUgpPS@lVDh4+1Z{c>I(F{;wjQ)g0784j0DEss^#>sN=O zU|KAen0oc?CfjVPde9VG#U;6yXNJw>S+C=m8~y?5JCtcgb+dqA%qY@2q8or Z^j}vKH8Q6g732T_002ovPDHLkV1f=GPdWeq literal 0 HcmV?d00001 diff --git a/dir_993377b6c00ad4f5994cd91ea29d1161.html b/dir_993377b6c00ad4f5994cd91ea29d1161.html new file mode 100644 index 0000000..110f8f7 --- /dev/null +++ b/dir_993377b6c00ad4f5994cd91ea29d1161.html @@ -0,0 +1,131 @@ + + + + + + + +MSCEqF: include/msceqf/options Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
options Directory Reference
+
+
+
+Directory dependency graph for options:
+
+
include/msceqf/options
+ + + + +
+ + + + + + +

+Files

 msceqf_option_parser.hpp
 
 msceqf_options.hpp
 
+
+
+ + + + diff --git a/dir_993377b6c00ad4f5994cd91ea29d1161.js b/dir_993377b6c00ad4f5994cd91ea29d1161.js new file mode 100644 index 0000000..440b72c --- /dev/null +++ b/dir_993377b6c00ad4f5994cd91ea29d1161.js @@ -0,0 +1,5 @@ +var dir_993377b6c00ad4f5994cd91ea29d1161 = +[ + [ "msceqf_option_parser.hpp", "msceqf__option__parser_8hpp_source.html", null ], + [ "msceqf_options.hpp", "msceqf__options_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_993377b6c00ad4f5994cd91ea29d1161_dep.map b/dir_993377b6c00ad4f5994cd91ea29d1161_dep.map new file mode 100644 index 0000000..fe33582 --- /dev/null +++ b/dir_993377b6c00ad4f5994cd91ea29d1161_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_993377b6c00ad4f5994cd91ea29d1161_dep.md5 b/dir_993377b6c00ad4f5994cd91ea29d1161_dep.md5 new file mode 100644 index 0000000..2c6caca --- /dev/null +++ b/dir_993377b6c00ad4f5994cd91ea29d1161_dep.md5 @@ -0,0 +1 @@ +8ef0b3949d191a2a023449966b2bf200 \ No newline at end of file diff --git a/dir_993377b6c00ad4f5994cd91ea29d1161_dep.png b/dir_993377b6c00ad4f5994cd91ea29d1161_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9e833cc4463e09939d5cdca3fa1b025b27fc01 GIT binary patch literal 2570 zcmZWrX*3(!8jZFTrD&>@8fpwzLn&fz&7mYBX1RtMt0*dJh@oz%A-A|S6H{A5g`(ym zTs0@g7;3DsX4NNXP&fCzx7J(ly>-5G_OEZPZ>@dy{&pPP)PS9pj}-s_utN=X5p)cs zUr%Nx`g@7doQ(~10q1|8{MO<>000&uRQCb$dCtyUustPEuxEd={R@DL?Fa`- ze*ucU9Dn%K{2DO8;{Lt+^5kLlc2X^sm!$a1D-68(bAelvW6Fl@yV@*)TUq^Y3I6K$ zxNqvht1Y~8lg~O`6d5{hy2b3DoL*T|URYN44JZECKOyZY3p2m?|GHtQS{;DZPM)8d zf_&)e5KkFr#V+N0RHFE>WpI$ll7tv{Lqn5db4$rLx&FSUAt^@(z88ndN6hVrL zX)9{~8~Cu&$%d@+9m=I2ZXz!XYS4kT(9g<2mQ z$fNENylgG4ta>O?(Br@$$#NKM{<$|J4u=DPQpX<}@xqj4d6+o12eLE0Sgszp&dvB% zZA7z|N1US&#jugNE2CGLF#1xmM|Qv8$P+$l_RYw7ecxq;Q*+^jTMuiH!FgnW4?a}6 za3LfqMLjOj%90bP5K~@GR@d@oEgl3V8;Xf(3K)1;JFs5mHb)?IjlS!?2#p<%xPPfH zZvXiBIN1vR5@AFBSo(*bKUyOA`*l2?Hz6-iYhgvOP`}h=^R*ZN55q(SxDN@Z8udM2 zwa_4HlNHwC?qpLPa5_*Sgbj^GzZuNIwzg_?7U_RkT!eP68qYTDJ5U~TTZPl&!16Z( z)&`dwH%c=yGT^p|hkC&(d6+hi%!l1Tu;}Lx8$#CBw*IHjrMkNGp7hap)zs8-a&m(` zJMum^{6uN%be5KvI3D3K*4EZbtK+E$JUkz0xKvs=bo!HH5E0l=hZozF~^EkT0L z#x=<d5i!&lD zy|Xnj^xy@9eL!g~4>1@G2caog$g~WJL}F%P?;IS&yT!Y)s4+%_b_sQI%Vt1^KYkba7UGTfgm1UX6OTwcA;ym??v5Ndh>?{+gB7 z-9KqLCMkB^+}ymn9;5B*%D8wtij=Dno#-0j)cZ*1u7ZN-Nf8VrD_i92!3kXI<`g&+ z3mE$pJa)F%KYD8P~M}zT0LnMeRcT7Dh|EH3I06!m{!99F2cT?hmHyePiqWuWuqr->Bvg%bQ%hA@6t(u$EQup3(zgUW z;VYbL5C+Mwwr2pSC&rAS~PWISNN%*OhzWm^nTaCx8cCWgtX@@H&2z*j;%@#}C$SW6RnJWM>>%q%>GR9opi_RlTQ-5nDXGZ3VKUM*%S zCwK#PZ6=0?BWr7G^)XqQnTj(Nc0odiVSbUP(R!b{#glSdvEm6g>bx+|`W$sIVaLEH z)5n@x=V6SI7aewrs;g6?qD2^vf1X6IoLP>Rm6}!m=)|dO%9NG18ol)i%DV%7DKs$q zS>Y+#&uR7;qW^p1;_*I$Q0{IZH&wJiq40pD)wKhx)NcQD~uAznViW9!z;K0?LASJjZ`huNZbMtN^@*9Rr5|-26IR583KRHxE+sl}liDuE{6ct@3cV&}jrsaj5h2Lr+;bvx0adDTlh>^|nL+rSYn2_xE z@A)h4gqgfVN{fR)$M_zh;7{@2+Um;;*4A#&U30#ENbMZtlh9I>;p^lC-J8cuYeZny zUsI9%{QS2BasxGe+zUq1=viWdqAX)gAoP8-a7M&e#BL+m4%d&I#5YT|Yo3MYBY&Ns z*$6!dQ01VGq0}M;ngkCEM9@TiLrJ^G_g~>v8)H5Vt3V+0=TO`H4dOj6#r{o8qR#d9 z`T50y6J(oa+?F{msUuG!Z0hA6j5|yGKN*8=G;c;mDs@GqKGdb1M87#be3a?sfb%Ah zw?ATq>g!IOe2MNygO)S(*lsG)k-R79Rr|z6R@s-j{HhSMwZr&;^V0v;aOOF~tCg(l UBuI4#J=_7HdZxM++Kw;&0@BCu`Tzg` literal 0 HcmV?d00001 diff --git a/dir_ab1e5beeb058366671750909505e3165.html b/dir_ab1e5beeb058366671750909505e3165.html new file mode 100644 index 0000000..ddad071 --- /dev/null +++ b/dir_ab1e5beeb058366671750909505e3165.html @@ -0,0 +1,137 @@ + + + + + + + +MSCEqF: include/vision Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
vision Directory Reference
+
+
+
+Directory dependency graph for vision:
+
+
include/vision
+ + + + +
+ + + + + + + + + + + + +

+Files

 camera.hpp
 
 features.hpp
 
 track.hpp
 
 track_manager.hpp
 
 tracker.hpp
 
+
+
+ + + + diff --git a/dir_ab1e5beeb058366671750909505e3165.js b/dir_ab1e5beeb058366671750909505e3165.js new file mode 100644 index 0000000..1e77d09 --- /dev/null +++ b/dir_ab1e5beeb058366671750909505e3165.js @@ -0,0 +1,8 @@ +var dir_ab1e5beeb058366671750909505e3165 = +[ + [ "camera.hpp", "camera_8hpp_source.html", null ], + [ "features.hpp", "features_8hpp_source.html", null ], + [ "track.hpp", "track_8hpp_source.html", null ], + [ "track_manager.hpp", "track__manager_8hpp_source.html", null ], + [ "tracker.hpp", "tracker_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_ab1e5beeb058366671750909505e3165_dep.map b/dir_ab1e5beeb058366671750909505e3165_dep.map new file mode 100644 index 0000000..3f4ad97 --- /dev/null +++ b/dir_ab1e5beeb058366671750909505e3165_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_ab1e5beeb058366671750909505e3165_dep.md5 b/dir_ab1e5beeb058366671750909505e3165_dep.md5 new file mode 100644 index 0000000..9c2bb3b --- /dev/null +++ b/dir_ab1e5beeb058366671750909505e3165_dep.md5 @@ -0,0 +1 @@ +1c0970063e1bc173813ca3f18e6e9abd \ No newline at end of file diff --git a/dir_ab1e5beeb058366671750909505e3165_dep.png b/dir_ab1e5beeb058366671750909505e3165_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..b3307dbedc5e9ba5827b1be615e8de9a869e261e GIT binary patch literal 2252 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 MOl*wn3_X(m1y0Oh;Q#;t literal 0 HcmV?d00001 diff --git a/dir_b5890cce8ed709a85ddd543f1a2a5ff2.html b/dir_b5890cce8ed709a85ddd543f1a2a5ff2.html new file mode 100644 index 0000000..cb6bd06 --- /dev/null +++ b/dir_b5890cce8ed709a85ddd543f1a2a5ff2.html @@ -0,0 +1,133 @@ + + + + + + + +MSCEqF: include/msceqf/filter/updater Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
updater Directory Reference
+
+
+
+Directory dependency graph for updater:
+
+
include/msceqf/filter/updater
+ + + + +
+ + + + + + + + +

+Files

 updater.hpp
 
 updater_helper.hpp
 
 zero_velocity_updater.hpp
 
+
+
+ + + + diff --git a/dir_b5890cce8ed709a85ddd543f1a2a5ff2.js b/dir_b5890cce8ed709a85ddd543f1a2a5ff2.js new file mode 100644 index 0000000..0a556b3 --- /dev/null +++ b/dir_b5890cce8ed709a85ddd543f1a2a5ff2.js @@ -0,0 +1,6 @@ +var dir_b5890cce8ed709a85ddd543f1a2a5ff2 = +[ + [ "updater.hpp", "updater_8hpp_source.html", null ], + [ "updater_helper.hpp", "updater__helper_8hpp_source.html", null ], + [ "zero_velocity_updater.hpp", "zero__velocity__updater_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.map b/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.map new file mode 100644 index 0000000..768bf7a --- /dev/null +++ b/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.md5 b/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.md5 new file mode 100644 index 0000000..cf6783d --- /dev/null +++ b/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.md5 @@ -0,0 +1 @@ +28b04537be7627eaaad066f8caef36af \ No newline at end of file diff --git a/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.png b/dir_b5890cce8ed709a85ddd543f1a2a5ff2_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..143173488bacb42f54dd6fbb2317c1274c24ba3f GIT binary patch literal 2259 zcmZXWc{~&TAIBGSggMF)i+B`Ma*w{X+-l9O%_c`HcUW@e$i9+<$_f}bA<2u{eF+f?~m{2c)$O7|M7Z!-p|MD{fW1+f`bHP1ONa42yw;qDkleX z?k#>^P6UejI&l)Oi#gmBaPVj6)RUe80Q_+XQzKMp#^T65l=#4*R@U+vaVaBFNr~sc z)K~{Yd(#1_AvwLQBPUoK{sLN(OV4JyUIaAS8>8Z3R9yrgYD{gQ#nOP&Z|W8u2fQ9IAdXh zgFU*F`4ZViB{l=a>W`)7qzl)Hz2AIFD|l^Q&V z7tJ+G;kSEWNFDUJZ?ZlWz%k*wp-=}k`&rC^%oN=N~>4g7{9@LuEjKT{bDV-+LQ+E4HV)%lyWumPMZK5+V>^bfDUql!gu_ra_&JeCkdxZ|g z-9}Q%n?%ceB_?4R)aC0uIBhO9+fxClyBgwx!;KK?wT0^MHgGy^hjwrwQ!B}7X)=H& zl9gvC)1Ky;l~-Q=RF&m#5vnKts_;^Yl*XBQM!rMQT?9QQ(xqcEzq)!c47YBNYCLpY z?`{U-CX!5XY|p64JFR-UvB3|!iT4M>V7v6C_lXBTSb9-J8_gi4dxQ)5bI=l_S7|CV2Qc*aOlJIfof zF0e7fLN!*}4^N+cM-yd}WEA^CnB7dY{}atLtuU5jP0!c8R7sr4ab-k`ZAe2vt!h+< zysPf5BLsp#B88;oO{NL(m@}N+yOb=AhZrMomPcGGH=CC*51K$o)`2_dM%D9QH-%wj+{>{Se z&jCw}qQ0WM-!xfz@wN6T#AIAj8jTn$!j+P>d7h8@qjlVb&;DTlp5Y$1;oWz>Ghf^C zyRu>F%T&Fd9KV{|5*5C)#`~LJ%Onr5AC;fUTI&VwhzAD;Q)Zi*(jy`#DYqGqA zMf2lvP*^pjB8bHWaPhcYYH%`9)3vpyEbr*@*_U~at&iL8tgZ&UI-(CUIQUbL5?h>3ke9UasdC_-hMdoa&)>QhLDi(qXL%t-Lqn4eU&!{_p|yGL{U_0;T+(x>^W-V z$gg+JzO6_*Zoc{brTzjDVPWA2{FH{=$h}`&JjZfm+KT(c-L$0l_=Ma#nTb=(>v+4g|8$JjtGcVSnF7O$iM0@<|>&MaVi3(i2xRgZi%)s9uCJd&s!ro{?-!{iBCNB(c zoKH$hI;FHYR`gQ(6h}<<+?f&2iIiN0pv57O`zYhD3wN6v8>19VV#VslU3rCN9*~IV z=Gf?)etz9^I`dbCUNjA#*Hjkwsm0fcb40kDi?`V*k7)5`yp%-v`-=&9@(2qj_0jjq z=?$UnT8x7+S2MHy#AIuAUteFqG0gz+fz?QP^>aiDUoa2|4A6nZZZ0lvF}F?!1eWwt z>t*HSMtZ!UQ`hSV=>=fUE09sqrRC+lMUdS&5Qmep)Xv%2*|$D0{DA_cwhqibvC3tk zivonOF?al!;c_v?QO3DmC`NH+#(l%Lw<*{=kvaSP^nn2^<~9zO7&!{*mS11pyj3a( z27`b9{=Kc3>iuoa&s0UDlZ6sVUb07wDWFwb&bA`0vo6HO!b9?EeAFy9e+^vactkGZ zvYyTRx=1XWA8qckAUK#PQYjD`eV;5#g>t;o#%;kblhFwQN15{bhH3u zIhw6uo0|Fpx(j{{z;i$UN|O>YAI?5wq=ZlVb|ik(S|aVwg#5qbh0E@BxRqB5wE6wTjP|X-SK{*=1I?*nbax dQ6O>!Tkm;TL(&*x!}+BE5SOe>i;ZtQ_y<#rO;`W` literal 0 HcmV?d00001 diff --git a/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.html b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.html new file mode 100644 index 0000000..ddbbe51 --- /dev/null +++ b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: include/msceqf/filter/propagator Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
propagator Directory Reference
+
+
+
+Directory dependency graph for propagator:
+
+
include/msceqf/filter/propagator
+ + + + +
+ + + + +

+Files

 propagator.hpp
 
+
+
+ + + + diff --git a/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.js b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.js new file mode 100644 index 0000000..5135899 --- /dev/null +++ b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.js @@ -0,0 +1,4 @@ +var dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a = +[ + [ "propagator.hpp", "propagator_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.map b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.map new file mode 100644 index 0000000..f6e8fa6 --- /dev/null +++ b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.md5 b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.md5 new file mode 100644 index 0000000..ac46c58 --- /dev/null +++ b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.md5 @@ -0,0 +1 @@ +84b387185b69cbcdbb63f639e0ca0cb7 \ No newline at end of file diff --git a/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.png b/dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5509b1c3ed72cc95c0e7f263778a860109feee GIT binary patch literal 2432 zcmZWr3p5k@AD^o{GxNw*^3EtlVxGxsUNv$Xmn9aKcNooER+3lqNF*cSMh}lj$+~pI zBGf|LtZm*6&7&Ec9=5yA|NPIn_y0e?^ZS0!`JUhTozMB4&-s2nd0w8bax!~m004lT zyBqYhsOO4qgp`D+&eTO=L`@?2q$?C4{CVznH2D6;cMkC zy1TlG)u`-L%Yp26QGVtDa+c;QNYOR!bv(6=IA0V7cWr{f+s0s#R%Zy|ew7Us?sW8% zXq)^+75O@#yx5Ag<9l8cZbWcdF+U-P!2Ph5QQe0wo?1(L$^T-Nu%><~LGmidQA+#Y zg`-xFMxpCRx1JM&^V$e#Txi*7__0G=bqnFx%SX+)HfJCE>niZ0E$g?~e*^Y95NOmy4FEcnxEJ)~+V4uDbQ`6FLJr0z% zqks60oHR*SOd)^2mSf2dsKE`al(Qm8UL`^m=TeWj*KqA2Hr%Yz_{#SUIK213Ggh=q ztE{#?+Z9VGs;rEZDcXIPn*E#r$&ry+%^H)9P_I3xr#j zXF;n}ao{&3lC*K4vzD427eZ>eS$(KG81`*DiL<6O@O79$LkSPdV&}34o^LIh*$5_=_w&j=C5Qj zWjQ-EG>efTX)(YoN2l9m$MIM!;0D+OtOvm{7|j4PGqcCMO^ZBS!2p#?B{Hok7&LJG zQJ-9Xueaw;!5+0@jR7<7u1|)XM_C@Hl96 zjygPU;}Hd-{j&VyFk|s!Wh6w8aUvu{7cd_BN8I$>_MgH)BRM&_WuZaQa}$%BxA14_ z)5hNLfb6j=^@U!$K?TJ2>BSOb^36Ckc%vTogHjRacS@?GqeQ!&{w+)t^@z9TQ18N> zpiiHD^YXfg!}SVfbhLjH1_26WSg{dun->NkHUOHVB26nV`LXz~xG{p&r- zHaE`Fs$a_46LF;D0y}h)Ng(dQ6Ji)9T%)nj$(1iFgQmG&^Ba0Ox;ncqu6!iZ@S9S0 zf-T(vnLBhFhN&48} zSl_iA+kim%Iu-2N*m&;ds8*44bGeiRIz1-&~_nz5)>i87Yj+wQ3kF_dH+H1`r+@IZuy$q`GG_!6PdOg&&~a zNqSnip+aVbtqwMekG=oW=QCx|G5LCoM3TqGFbOj&D;dNI?g9zTnRO;4t=0PJA27L- zpC7MsIB=+EyXL52hB-h4cxG;{k7mxTtgJkv>5u>UXJU#Sqs(7&f7q~1x-UK6^{!Kn z;LWWZyD-@DgyHMtv@}z2;-M&{e-?3U-RQk967lwZZQmmKMJL(1 zR0w{G)<0?c0wIV8o32%O_CMARH{08w-#E)=pDfa_RbE)S=wx7Ms0T@r=~`Q9r{P~D zu(AC`C#P{u(V~5+cr*@Vo7!>gu<_Zd%b6rB1uZTKoSm-CM6)&yjD(uj24!)0yk`h~ zZW(4I?V{KMsm7^sd`?7N0H5L78hF_Z0$E2391a>9Ngm*D5;V}{$TjJ33|y-N2! zP$(12E1$RHTw~Nh;a#b!$8~1&h2!kZshFx;w|v=UPOfbGVdKZm+D^S<$y+4(yVRVJ zkz@tzt~r<40lkSTNsy{C^qg1m+sT%vnmpwQ)wd7YPy4VPym!uzr4}ngAWhP{cFkT> z`#9yxL|{~mQ|`Q2gXtN^%G(7z{|nch%Hdb>z4>!6o}YZ(e>^XsZ~UQRqzB88efEt0 zv2+8GeJqdl#oqQu5~Zl6B472ib3bfg=}5fit3Wh{`|`WTJC`=F(IfBTdEjiBpNpv~ z{#M_^AsMTt2^v=H<&&=x9arj+9NMc>D)$lcb-be%gl7$vT52_PN~;i%Vo@zSxb1MY z?~PTi*Z%*r@X(^~S@$nJ=w3!iXAcza(>NZCDtl_O7CWUF;DZR-bkS)GQ9|{Ivm|%& zF)OLXEEbDgZH*bS-CDX#nwt}ZVOKg6sZ92&YsW~$8%Ty21;wV4FCWD literal 0 HcmV?d00001 diff --git a/dir_c1e55025cdee8ca5c3a305d8e87e79d0.html b/dir_c1e55025cdee8ca5c3a305d8e87e79d0.html new file mode 100644 index 0000000..5465fe8 --- /dev/null +++ b/dir_c1e55025cdee8ca5c3a305d8e87e79d0.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: include/msceqf/symmetry Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
symmetry Directory Reference
+
+
+
+Directory dependency graph for symmetry:
+
+
include/msceqf/symmetry
+ + + + +
+ + + + +

+Files

 symmetry.hpp
 
+
+
+ + + + diff --git a/dir_c1e55025cdee8ca5c3a305d8e87e79d0.js b/dir_c1e55025cdee8ca5c3a305d8e87e79d0.js new file mode 100644 index 0000000..e104686 --- /dev/null +++ b/dir_c1e55025cdee8ca5c3a305d8e87e79d0.js @@ -0,0 +1,4 @@ +var dir_c1e55025cdee8ca5c3a305d8e87e79d0 = +[ + [ "symmetry.hpp", "symmetry_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.map b/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.map new file mode 100644 index 0000000..ff4b42a --- /dev/null +++ b/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.md5 b/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.md5 new file mode 100644 index 0000000..49f1c8a --- /dev/null +++ b/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.md5 @@ -0,0 +1 @@ +4999adb9814921e14cfdfbbf5951f70c \ No newline at end of file diff --git a/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.png b/dir_c1e55025cdee8ca5c3a305d8e87e79d0_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd135d9882fdffc406412a5485014caf5ffdf20 GIT binary patch literal 2649 zcmZWrc{mhY7azMs6mOX2CZw1lOV){@2^B`x7?jeGWoRrD%1#q9 zUVD;ltYPdk!kCEo#`pg9J>PSmbIx<`ea>^wJ?H$+IdM0wOoaqa3jhEBA+zhoHf$Ni zCNF+oHU}D}JY@@BHw#l^z`@~q+fW=7Du}e@y=>X52;Xsmx9kQ8p1#@saTz zH$GuDwlXc z6tZ9h{k`cwx!Mv_98Eaaoef%plqBA0kBhRbmZ-}AC#|{rX701<8#se=@<3`_qv)u* zW7*KPoXdy1#HbukfPXk81t}t6#+&=~0?H#@^QFRhEgj_bBHBcF2aPw|kryNvO-X9xM4t>aMt$2Qg zt@jFYIgx&T?B{6+;4z2ar8j!vFQKAk?rYf--FJRM!iqMQ#%TtRVlkqspv={AHRkeQ zR>7B-93wwFwR_)awe3F_4w@bi3__toQC$)M$?Z`63$Tj_dc6=*@^^f)l+Fo#Gzb99 ziKGl9%vU^wo*30CT3-iREpGq4yu7@*egxGP!W0`EC>tG&Fk(&HfZ3?N|6^Aeyg z>|WU1@mVWT_39A!t*tG>0h!=8j}@R~@(Q!u=FaH@I5|0Y&|B^lZeA`C-4IWXt+Pz(n{8Y!ifY#uy2n>knJ4?gR6%*DkB0ROY$sJFLcHc`0~oR^m~-JjbE zfR}q7ArjXDG%uv3`#QyCX`LeX?*lFlklb!Oe7&yj5*sL+dPk3)E~ZRiK9m70EiKC! z`!$YHaTp?h%CB3<#$=3bo;V4n9t6&KeEBxki}SJtq4pPuZwm^qhyTwbu*VfK>9L|m4OKVH;e0kL_cS zSbRFKTg3G7^n6=e`_D+$kQ_7Ihe)iw>GuvU=r`-L@=8wuyQZX6>w?CwR8>K~YXDST z-NYm`N)>lUtUJ5VKRj%6UX7WttA<4 zWFyp5kINPi7-J=sh}@?9_=h7XB4G>m?mtQ z96z0q7?mhVYcK!tNpK5jwVJ-vS^Ht8@Tqwl`$QXY#RL=b(f>2 z7Tf>PPB&x2f+5Yd^o@|Pfh;I0nmGssNa=)dP7}k9hU&_Qu;E?M*p$?9xgzn1An2~8 z$e3-lwKG%sDuz`*TkYZDu{x67{X+$nt}m1tPzz@@Q2dZzI}`mE_r#XYoA z-7Ql-wlP^b=7pvxZQLz6W9Rkooy}`R=TIX33{VuS#GC z`Dzh;2B&E(|2A)LOE3^HBYF~yVdz@T%?C_>j@UEZ#igN7T69Ts^E|(2xDA(6gwDsF zA*r^YkqK?CuC4~dB;mA=tc)ya4Yh%*ts&**H~l2k9Kv7CaUlJA1M3e+qBPn9a8c{o ztq-#m>|4FIP4UIJ7!$seDzDpXQv$ksoGumZ3I{9{<&do5@W)a4qT#Dj@TwrK_x_LU zy=-B3-hUuhxcSzQHTokT>lif8iZ9bU_|FJMu8zf~=I^DifLoF#);bzRqhp|+{cvqG zqlE(XU;q9_6YHrPP+60kH^Z6m@*>aY=KeV5M|`Pco%4b?<=LPJS;G}K5N%GFNmA}e zfAQkyZ4;g$b#-Pf4L13E3)MQ=oXRfpod_=s%N5~MG9Ia;@E4z{DQ#aOtHyP0dStGe z?e)M7OIaSCod@iXN%K96kKjzAIEA%MX_H8BXsQ{gRpq`fy}YWbfnIsLAw(pw>z01f z{QN2G!rNwz3G^@Vk5=dpnIPxC_vI>asygCAH-O3OW#`D9kQ_v%$4kN z>OD5u*-^I!B~Qv(ra9*roSVx$oKo1eD;Musvn80fBxv0y(;*{<6Ew{IWmeRJ+9|!W z`|Uv2&({|n@d#efJCLt<13C660x=xo^z9CLzb6+4hCm?l#KGl>8Yc%wN4wun3!PPt vWj%evGWE(!Q>FW{!BwaJe+Hwb9B_(pU41OdWADqJ6#-@@R>ma5yHEcEsHrg? literal 0 HcmV?d00001 diff --git a/dir_c4990541912a67b8bc941e361556c84e.html b/dir_c4990541912a67b8bc941e361556c84e.html new file mode 100644 index 0000000..0769a5b --- /dev/null +++ b/dir_c4990541912a67b8bc941e361556c84e.html @@ -0,0 +1,139 @@ + + + + + + + +MSCEqF: include/msceqf/filter Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
filter Directory Reference
+
+
+
+Directory dependency graph for filter:
+
+
include/msceqf/filter
+ + + + + + + + +
+ + + + + + + + + + +

+Directories

 checker
 
 initializer
 
 propagator
 
 updater
 
+
+
+ + + + diff --git a/dir_c4990541912a67b8bc941e361556c84e.js b/dir_c4990541912a67b8bc941e361556c84e.js new file mode 100644 index 0000000..7d86319 --- /dev/null +++ b/dir_c4990541912a67b8bc941e361556c84e.js @@ -0,0 +1,7 @@ +var dir_c4990541912a67b8bc941e361556c84e = +[ + [ "checker", "dir_ff799a592ed72ce1c58ad18aa13e1049.html", "dir_ff799a592ed72ce1c58ad18aa13e1049" ], + [ "initializer", "dir_f3487fe4a0195986466b4d5e74f4eea0.html", "dir_f3487fe4a0195986466b4d5e74f4eea0" ], + [ "propagator", "dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a.html", "dir_c1c77b7b1b9c1e2c55703a7fff6d1b5a" ], + [ "updater", "dir_b5890cce8ed709a85ddd543f1a2a5ff2.html", "dir_b5890cce8ed709a85ddd543f1a2a5ff2" ] +]; \ No newline at end of file diff --git a/dir_c4990541912a67b8bc941e361556c84e_dep.map b/dir_c4990541912a67b8bc941e361556c84e_dep.map new file mode 100644 index 0000000..beabe8a --- /dev/null +++ b/dir_c4990541912a67b8bc941e361556c84e_dep.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dir_c4990541912a67b8bc941e361556c84e_dep.md5 b/dir_c4990541912a67b8bc941e361556c84e_dep.md5 new file mode 100644 index 0000000..1611d40 --- /dev/null +++ b/dir_c4990541912a67b8bc941e361556c84e_dep.md5 @@ -0,0 +1 @@ +ed81ec0ff223de490a6a8944f2916078 \ No newline at end of file diff --git a/dir_c4990541912a67b8bc941e361556c84e_dep.png b/dir_c4990541912a67b8bc941e361556c84e_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..be29f87fb1305c8d6bf902e432abf61315efa4ce GIT binary patch literal 6042 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 Pwu6-9RAh^uz7F^w0A6M} literal 0 HcmV?d00001 diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..b6165f9 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,128 @@ + + + + + + + +MSCEqF: include Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+ + + + + + + + + + + + +

+Directories

 msceqf
 
 sensors
 
 types
 
 utils
 
 vision
 
+
+
+ +
+ + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.js b/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 0000000..11d12e6 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,8 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "msceqf", "dir_ec8c128d97e5fa483ab11a8a22012ca3.html", "dir_ec8c128d97e5fa483ab11a8a22012ca3" ], + [ "sensors", "dir_ebe552be396c660935f2efa76e6989b7.html", "dir_ebe552be396c660935f2efa76e6989b7" ], + [ "types", "dir_0ad255a918b7fba820a1ddafed6fa637.html", "dir_0ad255a918b7fba820a1ddafed6fa637" ], + [ "utils", "dir_821002d4f10779a80d4fb17bc32f21f1.html", "dir_821002d4f10779a80d4fb17bc32f21f1" ], + [ "vision", "dir_ab1e5beeb058366671750909505e3165.html", "dir_ab1e5beeb058366671750909505e3165" ] +]; \ No newline at end of file diff --git a/dir_daf8d2f1b5aa26079c0e1db96e2157f7.html b/dir_daf8d2f1b5aa26079c0e1db96e2157f7.html new file mode 100644 index 0000000..d12ab28 --- /dev/null +++ b/dir_daf8d2f1b5aa26079c0e1db96e2157f7.html @@ -0,0 +1,131 @@ + + + + + + + +MSCEqF: include/msceqf/system Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
system Directory Reference
+
+
+
+Directory dependency graph for system:
+
+
include/msceqf/system
+ + + + +
+ + + + + + +

+Files

 system.hpp
 
 system_elements.hpp
 
+
+
+ + + + diff --git a/dir_daf8d2f1b5aa26079c0e1db96e2157f7.js b/dir_daf8d2f1b5aa26079c0e1db96e2157f7.js new file mode 100644 index 0000000..73da647 --- /dev/null +++ b/dir_daf8d2f1b5aa26079c0e1db96e2157f7.js @@ -0,0 +1,5 @@ +var dir_daf8d2f1b5aa26079c0e1db96e2157f7 = +[ + [ "system.hpp", "system_8hpp_source.html", null ], + [ "system_elements.hpp", "system__elements_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.map b/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.map new file mode 100644 index 0000000..59625ef --- /dev/null +++ b/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.md5 b/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.md5 new file mode 100644 index 0000000..ef83976 --- /dev/null +++ b/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.md5 @@ -0,0 +1 @@ +d99f2652d22eace9841d778560b2eaa9 \ No newline at end of file diff --git a/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.png b/dir_daf8d2f1b5aa26079c0e1db96e2157f7_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0f0fb98665326172fddbcf6e4998fe8a53ff12 GIT binary patch literal 2567 zcmZWrX*3(!8jTu?OSN2AaM7AlR#8(>bBjoagh)|A&80|+ny0o(i%8A$JSXO%F$Se5 zBBoL`Q*&#Kp-A=R{(9@(x6XIY_vfs$_gQQ2y}n2z7=)8ufE@q;a6%3B5cKX%-!7~y z^pokbnouFriKmz55GH#y*-vIUVw98z@1-}GeoKA015BynI_b%W~&|KHDsesV3F(K9-&^XMRXl*<%tUp^g-*s6M~Ime_g@8HYBid zLzQ(!@sft(<4klEMa4Reix7RU!=k~)XN!Ti@31J!s^z_J**6N1cvys}*yUQEw+wbs zB)b1%fWZT%PohRucG!_KPo)u*K2t zKMacy3ajn2{iyXt>@B>B$!Il^C`mgpbWq^u0l~X_dLo|Od6Q?P>P7AG-kxoVHbr$+ zh=djvgfovJN~oK!BMrs5qhP%GvQmpw(#4wU>IF4_plh9W55WXP$&|{ku71HOsI4!V zFfuroomO|=(_DVMcg$6YtZ*7?3p0P@-Pv8FzEL$~ccLDR3QSOn8iBO~a5z}=PSNVB z>iM?ebgMlCARJ1QbDJeb(`c4KXMVe%b3=j>Nta$k^U38JsoLAx=0yu?1&M2EwORf= z53E;KX5wP+m>%H8$eFE@v-JwcT-DX{lT-07~>s$jK{Yg&O(G281wa| zX_>^@WQw?iG+W41)=QUg&PpkGJYH9tr2SbYL&eVZ38Vpi^gO9g6-ATb?)x>rB~od< za(Z|dJ=@&9Qma6hcuY|dFJM0S*u5-f&v@fZ?txKwack4*sJIHo@`-~vYm4tzVRJKk zh3UN*V#MQm3mT0vc0kCObSRmWlteq*y*4^lY==hUazX(LX`EDK9lpGL`Cvm-R4jse zvOToR#rn}&_DO&RyTAiAW)M8KDafS^M>Sqg`aCr?wE=?vjj3!?g1*Z}-$2zwHF?c- z49te7DUO=AI;aKzqHPT4F=i0mO6rjhavx(5CX#XTm}_BgG-8^X)H1Zb!k~TrrzgkP zv}EHKyCAXYT8wyPf6s#)gsD$t?s-UI3CwA!5MObN0=X8o9P@nXdlfJxvt#3TGSON6 zcU4JzT->!yd?!W^A=uY5k(_Eyf*k;{hEK(snvZmpF~+XG1;%=a2eJS7`w+<^zDYOu z&a|vFX0Fm5hhuFoneU!i!u*fXhM&dAK{CG!7W&qHV=26u5y!k{Mh@FVlcII9#EU8md~Gn6uFeRy!0+P3zy%|X$ggIQ`;dAuOEWONv-5&z=bI~6w6Kk-tlKkfT_@Bv z!0zEzSs*4w*2=H5*X$Vhl44bka+}$V_bTtVtkuu)2D-jM|6z=|q6avyoBjmUev4iEQQy&s46UoLe9mk+J3kBI5@UKiwLG%_h*UPy~Ix)f3) z0t&z2%LPZzwL+agT_%*3aj1Oy%dS4~sm1C2cy9Z?LCpwaaRgzLaBJwo-|`Bt4n9k9 z1g}1F+xl^?)H6ED4gxXD8;d=n>VgwWUc?RQzH~TO zO0IWsHj9$g0=Ud8bkBMH=4?P$XD2`KU>X$1AtZ2HZf8!0#FkEWPGGlj9LG}_26lvo zh6-wHQU*y!tY_RaXX+WRs08o9HUgd3@ GSN{Pz9{<1q literal 0 HcmV?d00001 diff --git a/dir_ebe552be396c660935f2efa76e6989b7.html b/dir_ebe552be396c660935f2efa76e6989b7.html new file mode 100644 index 0000000..98be0b2 --- /dev/null +++ b/dir_ebe552be396c660935f2efa76e6989b7.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: include/sensors Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sensors Directory Reference
+
+
+
+Directory dependency graph for sensors:
+
+
include/sensors
+ + + + +
+ + + + +

+Files

 sensor_data.hpp
 
+
+
+ + + + diff --git a/dir_ebe552be396c660935f2efa76e6989b7.js b/dir_ebe552be396c660935f2efa76e6989b7.js new file mode 100644 index 0000000..e93b7b9 --- /dev/null +++ b/dir_ebe552be396c660935f2efa76e6989b7.js @@ -0,0 +1,4 @@ +var dir_ebe552be396c660935f2efa76e6989b7 = +[ + [ "sensor_data.hpp", "sensor__data_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_ebe552be396c660935f2efa76e6989b7_dep.map b/dir_ebe552be396c660935f2efa76e6989b7_dep.map new file mode 100644 index 0000000..73fd90c --- /dev/null +++ b/dir_ebe552be396c660935f2efa76e6989b7_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_ebe552be396c660935f2efa76e6989b7_dep.md5 b/dir_ebe552be396c660935f2efa76e6989b7_dep.md5 new file mode 100644 index 0000000..af8799c --- /dev/null +++ b/dir_ebe552be396c660935f2efa76e6989b7_dep.md5 @@ -0,0 +1 @@ +372a5cc949c89909329e38e8f918da0e \ No newline at end of file diff --git a/dir_ebe552be396c660935f2efa76e6989b7_dep.png b/dir_ebe552be396c660935f2efa76e6989b7_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..86d5b290ab4e7ecdcbe01b4cda3dd2eb14e140d6 GIT binary patch literal 2212 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 ernx_c(;&X^kG{N42m + + + + + + +MSCEqF: include/msceqf Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
msceqf Directory Reference
+
+
+
+Directory dependency graph for msceqf:
+
+
include/msceqf
+ + + + + + + + + +
+ + + + + + + + + + +

+Directories

 options
 
 state
 
 symmetry
 
 system
 
+ + + +

+Files

 msceqf.hpp
 
+
+
+ + + + diff --git a/dir_ec8c128d97e5fa483ab11a8a22012ca3.js b/dir_ec8c128d97e5fa483ab11a8a22012ca3.js new file mode 100644 index 0000000..51e1c10 --- /dev/null +++ b/dir_ec8c128d97e5fa483ab11a8a22012ca3.js @@ -0,0 +1,9 @@ +var dir_ec8c128d97e5fa483ab11a8a22012ca3 = +[ + [ "filter", "dir_c4990541912a67b8bc941e361556c84e.html", "dir_c4990541912a67b8bc941e361556c84e" ], + [ "options", "dir_993377b6c00ad4f5994cd91ea29d1161.html", "dir_993377b6c00ad4f5994cd91ea29d1161" ], + [ "state", "dir_f55af2754190f9dcf47967cf64d54fa0.html", "dir_f55af2754190f9dcf47967cf64d54fa0" ], + [ "symmetry", "dir_c1e55025cdee8ca5c3a305d8e87e79d0.html", "dir_c1e55025cdee8ca5c3a305d8e87e79d0" ], + [ "system", "dir_daf8d2f1b5aa26079c0e1db96e2157f7.html", "dir_daf8d2f1b5aa26079c0e1db96e2157f7" ], + [ "msceqf.hpp", "msceqf_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.map b/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.map new file mode 100644 index 0000000..595c510 --- /dev/null +++ b/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.md5 b/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.md5 new file mode 100644 index 0000000..107e89c --- /dev/null +++ b/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.md5 @@ -0,0 +1 @@ +7ab9db529d025b66518c9997fc36801d \ No newline at end of file diff --git a/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.png b/dir_ec8c128d97e5fa483ab11a8a22012ca3_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..1229be92ca33d9cfc2162c7ed52d779a0fc7e162 GIT binary patch literal 6413 zcmbtZcT`i`myW0)MG%zUL69y@iZrD+L8{Vw5eX1LdJ%opPz_a@N|z>v-hxsCgd);A z0YZ=>ozOBD-+S|0v(~KnXKwCF?mF$BefIvov(K04r#fmkNf<~#Aka+>b!B}Jh(H*4 z4!J=Hd_R=sHwAtOZMD>tLHNthhn6B32t@Z?L;10xU)JWVuQh5M-@W6s(cv6bZYon% zpsF4VtyL}mai?5w)KsNJ9UQ}>v7z_VwWPKxMCI*z-80H^J(ZGFj^T*E)Rpfh;ZEC+ zGRMf=wp!#-zjo4Q0tax-gDGBHGMFI3sQ>R}Paj$4(qk`rU2ZKHKDkkT^11TgJD1wi zWa^Qjw&KG_9}x3b`@j=SSr;FUjI0j+xfM=-`a*oFohdt)sMGOW!W_Uw(f8vTx0>Ct!t(BFPJ3It5t+lxgo;o_QLIEr6AC$LU8neg~ zMwvwRmgvCFc!3N$xXGMc6~1p;ClpleEdQj1;c1~g zWi!Lr%Fwr~pu1dLA|V^6hQ6hbR!AKD+$XHxy?eLivR&h5@q7>aIW`wDf6jc9@#hsb zcJ>^~_Q(a(5`lx6Qn(LlJ=PP6L~3V?COv#$0Vy|3y>fnXi!l%tBS%Y_r$@laarD4f zhb;`g3fbs*VLm&PE^b2x3NhgJJpTQ-Hst&!qXgIve-SKTDtweQl_TsX9!bG$eO?H@ z20o5Ccx>e%CPE3q(}x5dSGY>2n_lHzk7m6$tM7TOXN zJkE~wPFhFt6}!Mf)8kt`*ah-#-YYuGl0KIa5{d&!g>DI8vDiC2PhSV&m~bwA|rg=X)dRVis`dXX^1!rt6dA*=Z2QrE@rDihTZ zxin5rY2QN%n*LlbGsZl%xP_l3F!TCb5!*eBZRPpc(TZ7mx!%Y<%phb@k?t};*OQ|q zHjAQUCzIQvdN?y>50uO;X8m?>h2Adn?*Wg{U*v3Ctf(G0>nbYBJ}7g;pw@Qfp;^(1+VEA^cp!&H(p0ENU{kE#wDbcx0VJ|B3qdR zz-)Znk1>}J=}{uxKe7w$nLBWVh5kOB6Gg}r-AxE4gSHd9H|D-&2^x2a`+RIGXEvm{~O7G z{r?~rfO#g#{!u$XC?-E5p19ddidi$TpB_#uJ-zIpmSg#ZPQ){IG~wS#XDVp6jg&^0 zQ}6=y#*V+TX`obeFyx&(Yuk|t+Y^x$c2EZ{VAQJe#9**%fGiO4|9MsWCBguc?Dk-O zD$2@t1NU~Ap-^~U9T)f?BmTAWA0waxVIrBRIYtShA}1qZ+h9cYNs6EqxZ0O4p&&SN zpuW+lMswP%b*jU?NXN7QoadK(DlPZfh(FbHrPraf#$8JVN`sD*JT)l*b0+8pj+|Lr zjAgO1r0Fc796x=k_@ZEcf8}%iv`n&^=fx4HU%-PJ(^EwDLu3^i@wCj)zmyrRLCs35 zWPdDO%7XsAsMK+f8@-|5`?}`oZ_7erZ3}uCx4e)fn2^)xp5G3}3OfGdjrD=8_6O+aBT0#1<-b_qCy=k`?T=jI z3eOYDS0lSWdi_nff4k|)^^;Q@(Tq0&FO>eLhyP(`8ZKdO7%$Jz{QXi}VBsnKc}&Bq zzM6!I6`Ow~>rODk|Im6ldAjKsvG1x`=`*@ETEQ@^N13JI^@d%p+;={F!*;taGee}J zvZejjAI>*UPEPJ9%eZhoLs+|vl{svCuuP|ZaM))Mj&I0Kr(Z+sUJ&Tc8gW}ID#SC- zy^LIo<-$60CRHJ5MzAw!*ek*Muazx$Jq`YE-u`rkTBNP1VOZ zIX(RmfG}!)<7!_XnrLWTp)%Hq*F0Y;PJ469Vl{w_7pWl;-|zQhWTb&6I2<4;-31<# zLME=hWVriNLReN-$H6ZV6HDVVEw2uAlh<6L8ChKMCum^U%yPnff?h|#waw=F zLM&;w$_{7!*5<_rTkq;NC%Zd4SxM|9oTM zM#1l=UCkp&lrS2&BT}5Nacrqu?%N#!!}P7-U}A(vsyo6`4S2;|OQfC40SRU>%NkiW zOkqS*zg>^;iZ6a%unOLLZE*2M{KX`;;yG>Eq+Jg_^E3|0B<&@7e9(0q^d(u-t>%jG z_6^&kft#@x9;3nCJK1|(Vk;KJBJK`-X<7{dD^x3d#(75{i0QpLabouxsOWXpSP}Z4 zUHwnUvlV|A8ZpV$XDSW|?T5NQq_)^R4PO33*lO-tQ^(I-*}*fnI&S3ZG09yphUa(| zh9hAF!^V!Oqy-fL;x5IL4TOK5?|;Y;=XMs`h_~(jqqV<<(-Ese?WF zMYGfOA^Q0K&B9MF1<$$>DxN={fE4@9Af+a`uM_Ifvw>2%0y({v-4qK5aXJv5>zk~> z+(FXRSqO%3U0hgXdt|nHeFAC(m1mR2a(`od23eeOkEM9t*OBo{%J+oU2W;jvO>q}m zZYoTiW?PV6WzTp%pE=X)Wz90$9ArQ@Odmk2s|^bW<~xYsh`Wob zOu&FM@Qp&Cb;#Ynl3;0~{yMj!qj$uF4wF>~Oom@y~!{kGt4`wH_0|AD;gk%~T!$+L*lm$I34p$k&2UUO1A zdm-``vMH8VyQsc+%Z$1N-V$B}>l+wcIbJ-i#7?{d!HqY*^MlkXK;=3$7B{bV|| zk7YSR= zx3{&kD=};!IXz@8w8EQd^scA$(F=Rrh-2{At1$O>JRU3rx`6~v{Y2yf4?aR*j&}r& z$yn!ymywxiiNS%#-lLj?7#RnDkuQ=_9rWT;a#ZQtx0? z8X6kh?DFyN9D4T_KUMlwDN&S$5{@M&d&4rLck=V^8UU|N4f0QP;-5R!XlHJ`X+6~Q zC?<^$YH*<_Ma$cDFcIj^7~BMA&bDIJE-B()&@a2wLiA*zZEiDSc1pc5Lp>niA!NK# zZ>{7z*={y+VHkd;c=`($?ZA0gN{gKiS`Po_!%r;V1sWYyNrM+GD$~kI}|VGrs&L(D;~z{Yo|G ziF_1i9NNN6A#(aQR1ho` zN*k52AI7@EZ+KTgAla?*{Jc-U%nuTPfc#od9NNQ7)*S`59xuVC;{$QK4&T2k`qxaq zq_14*&w%Z&@Y{olZm#YYke*TdtX7mJGx*gIe0cQO380l)HD{C6^%SjS0Sh6t6Ohyc zYpwNj1q$-b9@lSlRUzM)wb9G$)I2*6%n=)(SE`#Wt;>mRwjblMt*|T%$X4~<6njHe zkmH|KAxC+VkUoG9ZcRsWHo`d7bk_Y_Ui)q@F85))pH1>pE|!@}WxO0t<27w2gFwc4 zu<7^;Pst_Q21?q#Zm+I|h2KZ>Zr4euxw%hBRG^I86bTGlIn5V`Jhg;^4oUbMz0W@D zL{^-a;LPoIX?c`urdXKf5TxS_2T?6PDN_gUcQLqmNUxPJ8s4A6FX_L#jG}`zc&@Z= z(ovX6z#*YUp#xWsprges;@mG~F`aSsFaOGx>qOcqJZ+zaz0sxi&xbJiV|7F1LS6^s zaqG3?c6OgYJo?r4T`w<(`GpB31#)TNP~T$X^~Gj@?*!dX51gcOA!r3QQI0p!x4VUH z&Ya~fPPqy+)3^l$#Pc>*dekoyoa1N%9?MVHT2A*1w$0AP<`ho$DESP_dKw4iR}#dE z#4L5Sv^d50n+2N=I{ZI-=&k>B?^@7QVdf>U4B|iOn4W zGOr-)eG*zh4dr8hj_>Vm{Gr&&y*s=o3!7j2r_L~GTiM{cpc0wNeTFU|1qo^uO&m-k z`n^?;quCz{0TQ=*V25lWjOBEfSGypSL%lP}n`rTBw|M4SP*^DH)GM>kB%I1Uh#+h0 zsv#A9*Ba{CYxP>ze^(@6%B5G<>sQA~e!j9$*6C~_lJwDX0jXihArs0B(TnQ1)-N*- z2f|~u>?Gd2!E@vT}Wx&5JwaRq*ZPz8uLXMmVz9nWe z$yGOb(&hBZsowx97pf2D|Lza{5zyL&sjj@KRDu!_#VwW#T6A~I;Gz-{GDGa%Y~zvjTvi6tL%-L> z#XPI1Y!!?S7~NxF0+SPhPhF@#DwW+IETMg~Yd= zVXdy_O|Op`$AQ_gVOO90z&90K@epIr+20q}H-KsAXmB_Un9pcyFJRs_U7j14MOB-m@Fr+V6Y6e0=-6*ea7rn(6nxi)LF{ z1E_fhM=hkLD*VBUm4lP>#WJ?@6IWdYnSW;!|M0UsI;ju$Y1`XNjG82VNxBt03VYK$ zb?`taB2vtCjg5+G3A;2KSBQE)4bSu${s7^Z$2s#6??9S|wq8ZVS@qDCI(~KCk}{7; zS&H-JUNUVF0&>bPzQrcr^E4Q3?J9P6Hbl&!(VrAk7-F-U1<<{@7}@u?{jmhw6wX=~ zZ*+G~rt^v~=9Tl^@-Y6PZCctljyIB~nsY1Mo4a>$xBY-3z`_M%xID1ae9`F!+b{Gy z8WTECw3wFX3=LEC6L&+AZn}YYj6F-A#Ah|oO~L8+#y380CnAFy0%&rDcJd;cXyr~4 z9B?y`blWa877&F2JfkI8pr?}jvcm4&pa+>VKQcvPTGMUw^jA(#N83nNJ9-v z#M1oefBoXGjp?gx5vXseEW6Q1>-@~vp&f^S{h;=_k275M^DK^p+UO^_Du?7NNo6;f zI--*703X|?99}&?ulHLa6nxkWhM0ZJH1^!uCnm%(prJc6?g~4zsSd`>nM!k5wP>f8 zi(9yNqwzMRYKpa#lmW3g(lpb8;Fqz3*GD1^fIa6SLSCwGsyekhZd85m>LXKAzU@P| zfe%Sn49i!NxWJ};dHoa?4`&-^rbkMNIaTA4)y;rNp(3qbJEcfPi4>w*LQ4hj-iv3R z@|r$ef%T|YnXUuD+EiP?X(fMe#$~L|SIXx$Ac!FCzpnk2?OGFV&o5}&`Uud9HkczO zG$uWbzRv1b$oiAxe+&LfB^s(3yb+TY@YS8>MgDU^>goWAdkGinc*>FOK-*SXK!r6H zwqAfC4Ee_l+GqRb*rSH(Rn*$c9O-zCwOXV*>Lqo8e(;>%2G0KNRXkxL8QPD-E<#MG zFICzerD2l4b)x}5nJ~Ua{?+$}Zq^=xbr@sIMNVEP^jMziD{AiJ^RoVtF$JU{B2t$H zMWM^WB|I5hYBn0#D38}zUiaCK#5sf?GCxFP9cG*=WwCP`)49jT$Ni)XuVEvzgLb`q zsw}yOg*f(8Jpvf2zWz?l6e=gS|2-`C5%W>wA^Epk;_|uL?^(a*By2x7&th&7e4+G5 z8~Y<4UrzjAWoTGh*bzP%*uJ`;&AQ41h(+&G{&yV=wS9G@z<|+=RUeSKa@YWi)3poP z;FD()M{oYM`H8VLATCZW{Sm*MYEK60Gzdm2g6~b$Y}-SX0AWg9!g`qI9nziz(7^gW zKLozXw?TlebGWpUC5s@qpUXdpfzn1XKT@1;%rTdc|wm{;uG`0Bzs zU-chNzVd|T(j|a~ + + + + + + +MSCEqF: include/msceqf/filter/initializer Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
initializer Directory Reference
+
+
+
+Directory dependency graph for initializer:
+
+
include/msceqf/filter/initializer
+ + + + +
+ + + + +

+Files

 static_initializer.hpp
 
+
+
+ + + + diff --git a/dir_f3487fe4a0195986466b4d5e74f4eea0.js b/dir_f3487fe4a0195986466b4d5e74f4eea0.js new file mode 100644 index 0000000..4b6cfe6 --- /dev/null +++ b/dir_f3487fe4a0195986466b4d5e74f4eea0.js @@ -0,0 +1,4 @@ +var dir_f3487fe4a0195986466b4d5e74f4eea0 = +[ + [ "static_initializer.hpp", "static__initializer_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.map b/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.map new file mode 100644 index 0000000..e220488 --- /dev/null +++ b/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.md5 b/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.md5 new file mode 100644 index 0000000..efcb372 --- /dev/null +++ b/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.md5 @@ -0,0 +1 @@ +e5a84343e02180634d45ff29893277ee \ No newline at end of file diff --git a/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.png b/dir_f3487fe4a0195986466b4d5e74f4eea0_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..bcddc0e796a5e982e391b690b21f713a508e722a GIT binary patch literal 2071 zcmV+y2;mh3|#kMr1 zh=6wHHYKBGPliS)nTQ)Z*#sv`1@O6%nemw%SsyMemA$yiLWI8!N9u(lT6; zazn`d0dhsuahj(cacF zW_(cauP|0D#XmUyhadifj`lXF)oP=2$13StwrnZ#^zw;~R4ryx4KcvAt50`X?d)YZf(Br{tiN+5H2pRaB*>kQt5wR8NFVQ&fB-4 z*Xu3NL-vLTXO4o!z}l2Kr)xACJR2E-o}M1e_EEs=5jV{CQQTK9B*<^*GuRIe4Rrv3 zqN9f~FEkj6hvkS;J&CJLR{#v17BVw7AS*K+p^pc0wk_s1Ws)wF$#C-HGZ2f#_@?P5 zN=}@5V7bcb`k~LNdMK6tICr)j8R@BbeMdenRX1Sa!rvlpNfZVK1^@uX#Ydpm>#_H5 z2RYjobDJ_rH`c)e`>;G=1?DgK4P?&FSf9QLKexBXg^Ke4fEmtmyq2>ALBVq^+*8w; zQs;DIe0%dID!%#>M~=KdYI#>z7XZM+)6){&GArIEeTH0)KdeYX(jSvYmepRa!6P0X zc&G4fOq({%g1s{jR)=?nVM06F+f3CLPWANk005Rf|9kBIYaT9DehsZwi`~2O5fdE= zfxxWymsk|5JzcNYr&U+|3$`?$E)x9$�mh8WM<8r@ugK+){l1offNJNE8~g(T zaO`*)937`yx~pbGH&NImeY{j6Dl#^j_rKoxh?34jlyn}Vr1KCZork8}d^(vJ>k$ZT zcb{#}QQ9`pH7TIN#`L-IuB9Od5DtEL%f|&=QCDGzdN5!YzrOUZHy_N zPv>NC=0e4J8{Y~BK-ZOAlxJG7_s5a+|NKEAUdmCCqo)~emT$DS*kCtdaI zVua0Gz;&}$?Lx)VoVG`YcOIhobRJ?mIFmmoD8y8KAsnIkbQ?qS>BJ~joAmO}&*0Bl z8LY}pwvN)0V(i?WV^EAOv)ZIP2!)VHerZs-{{DWvn3RCNzB>lh(c0RArlxNUim_!@ zdrl7vn~$)t`39BK=>~ATxCnV~?14}?`8teg*Opmr($AeO$LF7&M)uZRl$I1j)71&x zpbqEGegQ{EN33464grC4MwMF@9|Hh*K0XG!-`t0mmgbRl08n=FLmV$Yir(H{`1tr@ zO-d?e$mL_U`}chXC@VWLYJK<P=wNwVrVs8 zkh{3z(@#Feo`U_{d|?K#+WGX(&Q3Hm480$wwY3F1cjlt5wiXF5BtoatAwD(=gM)*k z%5B}YedN>K{ozsT&YdmCODhu*JojCC&*4{vczAlk-oatiIUJ?Bkb+% zO|tE#X0?a+dnuKEu(KOFFi9j5gX14l`r(83-^HrrL^R*J1&vlSanP`=%^UIG{(j_c z&j$cBHrAuJw--^WCr8Ts*!LrvhF?YIA27#k3HS2$g_rlnc(qz>bR9O6bhht)NlQ(^ zzi(Ve_SRhZ2Lz(3suHVKCQcalPT^bl^wdW#3+Xk8CCj?;Sn{sZ=_$ z{CD9I`0Vs2aC3KuryP9ZMEJg98T(N3C0# z{3on`Wi5^s9Y$+w3lbAoqO1NjLGZjwWIrG!orP4NJ(tP?omP8NDr%(QNDSGD&F%ZqC z^AOFa^U##~A;$+apH7Uz`JR4tcnXtP4(CZfd7=bB3D?b%pP<7#4{@@m`}of0>nVN`@dADGcx5KS`v21b + + + + + + +MSCEqF: include/msceqf/state Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
state Directory Reference
+
+
+
+Directory dependency graph for state:
+
+
include/msceqf/state
+ + + + +
+ + + + + + +

+Files

 state.hpp
 
 state_elements.hpp
 
+
+
+ + + + diff --git a/dir_f55af2754190f9dcf47967cf64d54fa0.js b/dir_f55af2754190f9dcf47967cf64d54fa0.js new file mode 100644 index 0000000..7426ad9 --- /dev/null +++ b/dir_f55af2754190f9dcf47967cf64d54fa0.js @@ -0,0 +1,5 @@ +var dir_f55af2754190f9dcf47967cf64d54fa0 = +[ + [ "state.hpp", "state_8hpp_source.html", null ], + [ "state_elements.hpp", "state__elements_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_f55af2754190f9dcf47967cf64d54fa0_dep.map b/dir_f55af2754190f9dcf47967cf64d54fa0_dep.map new file mode 100644 index 0000000..28cb563 --- /dev/null +++ b/dir_f55af2754190f9dcf47967cf64d54fa0_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_f55af2754190f9dcf47967cf64d54fa0_dep.md5 b/dir_f55af2754190f9dcf47967cf64d54fa0_dep.md5 new file mode 100644 index 0000000..11d9626 --- /dev/null +++ b/dir_f55af2754190f9dcf47967cf64d54fa0_dep.md5 @@ -0,0 +1 @@ +36c1d1a2d1c4fad3ed8310d5a339ed72 \ No newline at end of file diff --git a/dir_f55af2754190f9dcf47967cf64d54fa0_dep.png b/dir_f55af2754190f9dcf47967cf64d54fa0_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..98b3c6d50e7dc565369fcfbd9a2f10b4343d631d GIT binary patch literal 2467 zcmZ8jX*3(!7LIwSp(RC?P!~~Sm0LViH9y`7b)u&giu01$=Ug2FlW zF-H)B{2V=X!<(05_}y)+pn#wM-G%L?7yv-X83r|X49R6u!XG$#f%>*ahGYuUb);x2 zLAA|vxXfEId`!Zunqd@W!>aXC#*he*#x`1;YOHtug^SK@-t!Oc^+ z9a_MR@pd6!Z>%sBRI~=l2D2`RvD@5gLZ4-=n2eb0L=yCTmJL=!1Yaut5cc0v%t!P|YW$kdT{_RM|`>64a&J^4JZ$Q<@0<%RS&w7S%jR+i;H9^OuyVM1#&1wHb2J0sVmH3#&3FMH8lc-MMZzauk8rYv5=K@d_4?P zUVXw9qY!=kF7!EO%x@E1hED#$S02Z^N5ketdmK(eg_Bn#Wody&#=Y---@bs`=zRMH zt88F^T4Rk-;d|dr@OV6oPG3}te3$l%JpOXZgNLm)XQZ_-oZ#_7)+KmX91L#$9kCYM z8KwDRb<~{P`tx~tuQQks5|9p@s_8^3m);;pFQgO`*Gf_+`QS;lcG-Ey?}0!$C9lZP z+XEVE=~0sBwR*1WT2^rCHt}&JHEdrjWlv$~eKHMrE4J(Ptr(>8z6N3^e73l7Aw_D0 zd1$e5qOsm?Xd{zxmM9_ZknnBd(61M5*M|?PMtkr ztHI$DWi^2dUGe1J6fSP=SV2LNuE+ZB`m$NNra}#e8N|QvGg%n$o0g|VQq@lL>}XB~ zj_Q?8k4^*q-N9cyuWk_x?r9E&Bz;&63XW*TFdzl>p%eUa^73obwUTM)my(#BL&J;A z7k;bbC1=FM5On_+I9~p!GZDL1yamvRpuw zP(x}}j0iuZv!3WfLq4;b^!;^2)y^CL0qN@(eWL{KfLanJ;j-+@9lOysic3o^j*h82 zyCgp4k$gOA{zRbRJ|VM~nrUE=RaXaB*U-q+)k@%eH-}1McW?6VbAK5D&qvyNdGYCV zu-YsFQM*~{0ryy~l6BmlUB&C-8v+Aq6L-W5N!P!uW}bsWMO1VV>VPv++LomgdWggwZ#71frAL{h@U^emuc_&k2y1^m<*SWX@vD(_+PN!t3s8{$e8m$JXa)18H-jZzD z?9i@`)RS#E3}_tp^u#@3=8VRL@LtXp>`#Q6-uezTEfYPvTNwO5@W)GXaXg&c8%{{l zWGuO&wE~1}lCa6`nxRn``%MAfvr}4)G6UYd-QX+NqFxgF&Y>0K>qAY|)C^PY^8Pgw z=KQ8P;^1mu5Somw?V%1qGY& z2@IPt!2P`xPIlR@A2Ztr%i|m`mH;0faLtyv*_OPqlB=Odn3|d ztEf5M4_3Wr4OBrfTs)wn=cU7jhRALTg-0MfJR;%*ASfp0HMt6A?Qe?SaB#TP15V8L zZ)KsEr5}|SnN%Bpf35KSsF!%p&*jy5dGb8`V(ug0pWS^VaW^xq@I8k2 zb}=u5$@DkI8yEM-aA14695Iw_l=KxHSG2qJCFE2tA;C-@L#I*)%kTDd_axKi!Z)dS z*j*VTcNw&$h_X_fSy55sK_3o1y}LE6>d$r6&5dvx87?F?Dk)dELLh2{L@wo28&O=~ z42cZ(kiI*0@v@dt5*F)0#hApPYZOBJ-dw!nv_(!d$Tad3%g}xZEnUZ(?*9ep>V`Ep zBfrhew7^_+bOOa9(rpoV1RXb7M5O2BqRkP&i)Ujn7)d)jJAx~TKuin3;gX`~Lq=;{ zHv=21?^g#%G&jV>y?S=&SX(A=Iju~9!Ut@@C?4PBOy6tsuzrH6b z2ic@hbe%*F>%V5J`ApacgKeu+*B~?MyzS7S{rNqf%od~92aJUdqo5A6TT>FKb`Y|1 zbCiq4VvKp4*{Z)byuPZfm>>K1aQ{DidnQn0Jv)id=`^A3WO;(HNZ2StIyvf-hfQb2 zfN*_0mURg-yR?U+P`pU79O`j3>*}wvguU3GrzGifu>#q7kF2e&qmwMDh>gR&j`n|Y e8Nr(xhdMB#@t=xfd8!=N1%O%DL2)-9z5EYmV&yCV literal 0 HcmV?d00001 diff --git a/dir_ff799a592ed72ce1c58ad18aa13e1049.html b/dir_ff799a592ed72ce1c58ad18aa13e1049.html new file mode 100644 index 0000000..27b07ce --- /dev/null +++ b/dir_ff799a592ed72ce1c58ad18aa13e1049.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: include/msceqf/filter/checker Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
checker Directory Reference
+
+
+
+Directory dependency graph for checker:
+
+
include/msceqf/filter/checker
+ + + + +
+ + + + +

+Files

 checker.hpp
 
+
+
+ + + + diff --git a/dir_ff799a592ed72ce1c58ad18aa13e1049.js b/dir_ff799a592ed72ce1c58ad18aa13e1049.js new file mode 100644 index 0000000..c5605b0 --- /dev/null +++ b/dir_ff799a592ed72ce1c58ad18aa13e1049.js @@ -0,0 +1,4 @@ +var dir_ff799a592ed72ce1c58ad18aa13e1049 = +[ + [ "checker.hpp", "checker_8hpp_source.html", null ] +]; \ No newline at end of file diff --git a/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.map b/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.map new file mode 100644 index 0000000..f82c8bd --- /dev/null +++ b/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.md5 b/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.md5 new file mode 100644 index 0000000..947bdf2 --- /dev/null +++ b/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.md5 @@ -0,0 +1 @@ +f723bf47cc8c3b4db2e56115dab9a6ae \ No newline at end of file diff --git a/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.png b/dir_ff799a592ed72ce1c58ad18aa13e1049_dep.png new file mode 100644 index 0000000000000000000000000000000000000000..90bd081625a8e364c9ca4cca5788bc9f60e0f819 GIT binary patch literal 2103 zcmY*bdpHvc8=p%cnxy;{X8Qg!N6R6EDW_ z3?U5UdDi;UDlY)NZLOeyqaX5&R*?e$2(4N}e|3&2Ses06kl9o2W$pcLDIvI0sCZVd zB;~Dh4hL`(8ege+L(TM;tmg=6G9>V#q9TN~atnkYKtEi${x%<}Qr^0`A?A%`b(7!4#S0ry1pPQ}!iVr2Yy70HS z$Zi%EV#m)g5^+h@2Du+8ocyXPFR;VY z+`nLFH)3>o`R*j-27l7Su;_F1iT`U#XO&^%WGzDFgboRDS+pAkTGzW97D&Rv!ma*! zWqN9#+x<}{JGF_Bstxg0i$8azl+7(f#Kg|&U1(ePt0qshhD~;xkT53_RjvoU9jL6X z_8v)j4o$`l{-a^~-!%JiogB84mWKU2ICeJ1wU#4@<#x=8sa$&!ZQt^IAR;Shn(YSI z%3S(bXMg21-Q6Atr@A>U(kfWr}tAXC~SjgT@Np^!B?-&Ch#=Sq#nyB+7f_ zF;^rN`}z@cdWspZCD6aWF7wp~8v-2e-TN?WcBvwS&UXdLAQz!Y=^%EOM4vas!Pz}# zz>%GjJOq#z1BwAHOm^OXS6tBGunh2E&b}(IuOPGWmJQW}Kp@~Y!Jua8%v4r>#E1ci zTc3NFH$p1mKFpRn6SdGM3$V3mJjML{o_<@K!RNw^@QtFt zbzBJ+i9~|KGnE~kUinB_W_o?ws9>#V*oufC243vuX?t*0@0~Nx1EWDI+FWTpJsPt; zKe!?_VRI#0rIujyo2wVv)4`WwQj~qD_1j0x=P$dd%-$)wN^1oJJP_T8936!8C4~B% z<3kn*lEb9xd#pRPKyzJ+OPMVA8q+{< zwjq^agcsxB6|Rm*lMtZ|)YX`I<`et+p4gpiEF4oGYHcv2sKJNyOcHHcYS>m=g{AkMA#iflLJ4*O;F?M5;nrG@G7e~Vn6Ce;s zJZaq%$W)Fsy~*2g!Tgae)ajA%L_JwM)D{jr(I}VHpzZOO- z4H(r;&Xxk3+1sgl%?EUJbgYxg?J9h_O7P3mhL3VbP8Bk)XB97{QY}up0L3or_*_HK zi#qe9!1m3eT>)442lcem>Ey$S;4#!R3>vyA-4Z?5WB=@R5J=PLb1*D{4(T?wsz+~_ z5)6^+P5E(k@gp zMoeQ8UcS^xNq@ZPxH6?iklIElNHDY%B;<6fwlwdw;(7ah#^i0oolCJhkIf-l^XD69 zzGBmki)w0VZ_aC-HW`B=3#?xHRZv2nD#zBMR4RV3QUhjsRKeyDQ(tm>hlfZ1BY{(% zbV*0UHZ%8D^@AUT^YcA;ue>L8(bNT@t9x#PL+Kv4KEB;i>Sy3r!;Ctd@W2W5CLBm) zv!j|M#Ny0ZG4& + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..574b333 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,2247 @@ +/* The standard CSS for doxygen 1.12.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen_crawl.html b/doxygen_crawl.html new file mode 100644 index 0000000..e65b809 --- /dev/null +++ b/doxygen_crawl.html @@ -0,0 +1,729 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..b05f4c8 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/features_8hpp_source.html b/features_8hpp_source.html new file mode 100644 index 0000000..666f25c --- /dev/null +++ b/features_8hpp_source.html @@ -0,0 +1,203 @@ + + + + + + + +MSCEqF: include/vision/features.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
features.hpp
+
+
+
1// Copyright (C) 2023 Alessandro Fornasier.
+
2// Control of Networked Systems, University of Klagenfurt, Austria.
+
3//
+
4// All rights reserved.
+
5//
+
6// This software is licensed under the terms of the BSD-2-Clause-License with
+
7// no commercial use allowed, the full terms of which are made available
+
8// in the LICENSE file. No license in patents is granted.
+
9//
+
10// You can contact the authors at <alessandro.fornasier@ieee.org>
+
11
+
12#ifndef FEATURES_HPP
+
13#define FEATURES_HPP
+
14
+
15#include <opencv2/opencv.hpp>
+
16
+
17#include "types/fptypes.hpp"
+
18
+
19namespace msceqf
+
20{
+
21using FeaturesCoordinates = std::vector<cv::Point2f>;
+
22
+
+ +
30{
+
31 using FeatureIds = std::vector<uint>;
+
32
+
38 inline bool empty() const noexcept { return uvs_.empty(); }
+
39
+
+
45 inline size_t size() const noexcept
+
46 {
+
47 assert(distorted_uvs_.size() == uvs_.size());
+
48 assert(distorted_uvs_.size() == normalized_uvs_.size());
+
49 assert(distorted_uvs_.size() == ids_.size());
+
50 return distorted_uvs_.size();
+
51 }
+
+
52
+
+
59 void removeInvalid(std::vector<bool>& invalid)
+
60 {
+
61 assert(invalid.size() == distorted_uvs_.size());
+
62 assert(distorted_uvs_.size() == uvs_.size());
+
63 assert(distorted_uvs_.size() == normalized_uvs_.size());
+
64 assert(distorted_uvs_.size() == ids_.size());
+
65
+
66 size_t i = 0;
+
67 size_t j = 0;
+
68
+
69 while (i < invalid.size())
+
70 {
+
71 if (!invalid[i])
+
72 {
+ +
74 uvs_[j] = uvs_[i];
+ +
76 ids_[j] = ids_[i];
+
77 ++j;
+
78 }
+
79 ++i;
+
80 }
+
81
+
82 distorted_uvs_.resize(j);
+
83 uvs_.resize(j);
+
84 normalized_uvs_.resize(j);
+
85 ids_.resize(j);
+
86 }
+
+
87
+
88 FeaturesCoordinates distorted_uvs_;
+
89 FeaturesCoordinates uvs_;
+
90 FeaturesCoordinates normalized_uvs_;
+ +
92};
+
+
93
+
94} // namespace msceqf
+
95
+
96#endif // FEATURES_HPP
+
(Cache friendly) Features struct. Define a set of features detected/tracked.
Definition features.hpp:30
+
FeaturesCoordinates distorted_uvs_
Distorted (u, v) coordinates of the features detected/tracked.
Definition features.hpp:88
+
FeaturesCoordinates uvs_
Undistorted (u, v) coordinates of the features detected/tracked.
Definition features.hpp:89
+
void removeInvalid(std::vector< bool > &invalid)
Remove invalid features coordinates, normalized feature coordinates and ids given a vector of boolean...
Definition features.hpp:59
+
FeatureIds ids_
Id of the features detected/tracked.
Definition features.hpp:91
+
FeaturesCoordinates normalized_uvs_
Undistorted normalized (u, v) coordinates of features detected/tracked.
Definition features.hpp:90
+
std::vector< uint > FeatureIds
Vector of feature ids.
Definition features.hpp:31
+
bool empty() const noexcept
Check if there valid coordinates in uvs_.
Definition features.hpp:38
+
size_t size() const noexcept
Return the amount of features (size of uvs_)
Definition features.hpp:45
+
+
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 0000000..5e9e8a2 --- /dev/null +++ b/files.html @@ -0,0 +1,161 @@ + + + + + + + +MSCEqF: File List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  include
  msceqf
  filter
  checker
 checker.hpp
  initializer
 static_initializer.hpp
  propagator
 propagator.hpp
  updater
 updater.hpp
 updater_helper.hpp
 zero_velocity_updater.hpp
  options
 msceqf_option_parser.hpp
 msceqf_options.hpp
  state
 state.hpp
 state_elements.hpp
  symmetry
 symmetry.hpp
  system
 system.hpp
 system_elements.hpp
 msceqf.hpp
  sensors
 sensor_data.hpp
  types
 fptypes.hpp
  utils
 logger.hpp
 tools.hpp
 visualizer.hpp
  vision
 camera.hpp
 features.hpp
 track.hpp
 track_manager.hpp
 tracker.hpp
  wrappers
  ros
  ros1
  include
 msceqf_ros.hpp
+
+
+
+ + + + diff --git a/files_dup.js b/files_dup.js new file mode 100644 index 0000000..a82eb40 --- /dev/null +++ b/files_dup.js @@ -0,0 +1,5 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], + [ "wrappers", "dir_5cec92fd47c0900910bbc2480fdfd7be.html", "dir_5cec92fd47c0900910bbc2480fdfd7be" ] +]; \ No newline at end of file diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/fptypes_8hpp_source.html b/fptypes_8hpp_source.html new file mode 100644 index 0000000..7f51671 --- /dev/null +++ b/fptypes_8hpp_source.html @@ -0,0 +1,227 @@ + + + + + + + +MSCEqF: include/types/fptypes.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
fptypes.hpp
+
+
+
1// Copyright (C) 2023 Alessandro Fornasier.
+
2// Control of Networked Systems, University of Klagenfurt, Austria.
+
3//
+
4// All rights reserved.
+
5//
+
6// This software is licensed under the terms of the BSD-2-Clause-License with
+
7// no commercial use allowed, the full terms of which are made available
+
8// in the LICENSE file. No license in patents is granted.
+
9//
+
10// You can contact the authors at <alessandro.fornasier@ieee.org>
+
11
+
12#ifndef FPTYPES_HPP
+
13#define FPTYPES_HPP
+
14
+
15#include <groups/In.hpp>
+
16#include <groups/SDB.hpp>
+
17#include <groups/TG.hpp>
+
18#include <groups/SOT3.hpp>
+
19
+
20namespace msceqf
+
21{
+
22#ifdef SINGLE_PRECISION
+
23
+
24using fp = float;
+
25
+
26#else
+
27
+
28using fp = double;
+
29
+
30#endif
+
31
+
32using SO3 = group::SO3<fp>;
+
33
+
34using SE3 = group::SEn3<fp, 1>;
+
35
+
36using SE23 = group::SEn3<fp, 2>;
+
37
+
38using SOT3 = group::SOT3<fp>;
+
39
+
40using In = group::In<fp>;
+
41
+
42using SDB = group::SemiDirectBias<fp>;
+
43
+
44using TG = group::Tangent<fp>;
+
45
+
46using Vector2 = Eigen::Matrix<fp, 2, 1>;
+
47
+
48using Vector3 = Eigen::Matrix<fp, 3, 1>;
+
49
+
50using Vector4 = Eigen::Matrix<fp, 4, 1>;
+
51
+
52using Vector6 = Eigen::Matrix<fp, 6, 1>;
+
53
+
54using Vector9 = Eigen::Matrix<fp, 9, 1>;
+
55
+
56using Vector15 = Eigen::Matrix<fp, 15, 1>;
+
57
+
58using Vector18 = Eigen::Matrix<fp, 18, 1>;
+
59
+
60using Vector21 = Eigen::Matrix<fp, 21, 1>;
+
61
+
62using Vector24 = Eigen::Matrix<fp, 24, 1>;
+
63
+
64using Vector25 = Eigen::Matrix<fp, 25, 1>;
+
65
+
66using Vector29 = Eigen::Matrix<fp, 29, 1>;
+
67
+
68using VectorX = Eigen::Matrix<fp, Eigen::Dynamic, 1>;
+
69
+
70using Matrix2 = Eigen::Matrix<fp, 2, 2>;
+
71
+
72using Matrix3 = Eigen::Matrix<fp, 3, 3>;
+
73
+
74using Matrix4 = Eigen::Matrix<fp, 4, 4>;
+
75
+
76using Matrix5 = Eigen::Matrix<fp, 5, 5>;
+
77
+
78using Matrix6 = Eigen::Matrix<fp, 6, 6>;
+
79
+
80using Matrix7 = Eigen::Matrix<fp, 7, 7>;
+
81
+
82using Matrix9 = Eigen::Matrix<fp, 9, 9>;
+
83
+
84using Matrix12 = Eigen::Matrix<fp, 12, 12>;
+
85
+
86using Matrix15 = Eigen::Matrix<fp, 15, 15>;
+
87
+
88using Matrix18 = Eigen::Matrix<fp, 18, 18>;
+
89
+
90using Matrix21 = Eigen::Matrix<fp, 21, 21>;
+
91
+
92using Matrix24 = Eigen::Matrix<fp, 24, 24>;
+
93
+
94using Matrix25 = Eigen::Matrix<fp, 25, 25>;
+
95
+
96using Matrix29 = Eigen::Matrix<fp, 24, 24>;
+
97
+
98using MatrixX = Eigen::MatrixXd;
+
99
+
100using Quaternion = Eigen::Quaternion<fp>;
+
101
+
102template <int R, int C, int T = Eigen::ColMajor>
+
103using Matrix = Eigen::Matrix<fp, R, C, T>;
+
104
+
105template <typename T>
+
106using Ref = Eigen::Ref<T>;
+
107
+
108template <typename T>
+
109using Map = Eigen::Map<T>;
+
110
+
111} // namespace msceqf
+
112
+
113#endif // FPTYPES_HPP
+
+
+ + + + diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..92cbebc --- /dev/null +++ b/functions.html @@ -0,0 +1,125 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+
+ + + + diff --git a/functions_b.html b/functions_b.html new file mode 100644 index 0000000..2eb9562 --- /dev/null +++ b/functions_b.html @@ -0,0 +1,120 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+
+ + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 0000000..d98ae52 --- /dev/null +++ b/functions_c.html @@ -0,0 +1,134 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+
+ + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 0000000..2ee8dd2 --- /dev/null +++ b/functions_d.html @@ -0,0 +1,136 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+
+ + + + diff --git a/functions_dup.js b/functions_dup.js new file mode 100644 index 0000000..7bb4064 --- /dev/null +++ b/functions_dup.js @@ -0,0 +1,27 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "g", "functions_g.html", null ], + [ "h", "functions_h.html", null ], + [ "i", "functions_i.html", null ], + [ "k", "functions_k.html", null ], + [ "l", "functions_l.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "q", "functions_q.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "t", "functions_t.html", null ], + [ "u", "functions_u.html", null ], + [ "v", "functions_v.html", null ], + [ "w", "functions_w.html", null ], + [ "x", "functions_x.html", null ], + [ "z", "functions_z.html", null ] +]; \ No newline at end of file diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 0000000..6c47d68 --- /dev/null +++ b/functions_e.html @@ -0,0 +1,121 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+
+ + + + diff --git a/functions_f.html b/functions_f.html new file mode 100644 index 0000000..9a8d3f7 --- /dev/null +++ b/functions_f.html @@ -0,0 +1,121 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..ef2da6e --- /dev/null +++ b/functions_func.html @@ -0,0 +1,333 @@ + + + + + + + +MSCEqF: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- w -

+ + +

- x -

+ + +

- z -

+
+
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 0000000..a49d20d --- /dev/null +++ b/functions_g.html @@ -0,0 +1,122 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+
+ + + + diff --git a/functions_h.html b/functions_h.html new file mode 100644 index 0000000..3bc48ea --- /dev/null +++ b/functions_h.html @@ -0,0 +1,115 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 0000000..45204a6 --- /dev/null +++ b/functions_i.html @@ -0,0 +1,140 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+
+ + + + diff --git a/functions_k.html b/functions_k.html new file mode 100644 index 0000000..c4562fb --- /dev/null +++ b/functions_k.html @@ -0,0 +1,119 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- k -

+
+
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 0000000..ea0af29 --- /dev/null +++ b/functions_l.html @@ -0,0 +1,119 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 0000000..1ff0fa4 --- /dev/null +++ b/functions_m.html @@ -0,0 +1,140 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 0000000..dc6f61d --- /dev/null +++ b/functions_n.html @@ -0,0 +1,119 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+
+ + + + diff --git a/functions_o.html b/functions_o.html new file mode 100644 index 0000000..3835804 --- /dev/null +++ b/functions_o.html @@ -0,0 +1,123 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 0000000..d4918bd --- /dev/null +++ b/functions_p.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+
+ + + + diff --git a/functions_q.html b/functions_q.html new file mode 100644 index 0000000..2dcf278 --- /dev/null +++ b/functions_q.html @@ -0,0 +1,117 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 0000000..0ffe60d --- /dev/null +++ b/functions_r.html @@ -0,0 +1,123 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+
+ + + + diff --git a/functions_rela.html b/functions_rela.html new file mode 100644 index 0000000..ebfabaa --- /dev/null +++ b/functions_rela.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Class Members - Related Symbols + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented related symbols with links to the class documentation for each member:
+
+
+ + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 0000000..c67791b --- /dev/null +++ b/functions_s.html @@ -0,0 +1,138 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+
+ + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 0000000..23c5b61 --- /dev/null +++ b/functions_t.html @@ -0,0 +1,130 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+
+ + + + diff --git a/functions_type.html b/functions_type.html new file mode 100644 index 0000000..217cf72 --- /dev/null +++ b/functions_type.html @@ -0,0 +1,124 @@ + + + + + + + +MSCEqF: Class Members - Typedefs + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented typedefs with links to the class documentation for each member:
+
+
+ + + + diff --git a/functions_u.html b/functions_u.html new file mode 100644 index 0000000..8ae2984 --- /dev/null +++ b/functions_u.html @@ -0,0 +1,125 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 0000000..055d1ec --- /dev/null +++ b/functions_v.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..dd7ab9d --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,302 @@ + + + + + + + +MSCEqF: Class Members - Variables + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- z -

+
+
+ + + + diff --git a/functions_w.html b/functions_w.html new file mode 100644 index 0000000..c2ad5db --- /dev/null +++ b/functions_w.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+
+ + + + diff --git a/functions_x.html b/functions_x.html new file mode 100644 index 0000000..8a60ee1 --- /dev/null +++ b/functions_x.html @@ -0,0 +1,115 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- x -

+
+
+ + + + diff --git a/functions_z.html b/functions_z.html new file mode 100644 index 0000000..effb558 --- /dev/null +++ b/functions_z.html @@ -0,0 +1,119 @@ + + + + + + + +MSCEqF: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- z -

+
+
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 0000000..f7e761a --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,173 @@ + + + + + + + +MSCEqF: Graph Legend + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 0000000..34a71d6 --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +238bc3d95adc1929b3259d0c39010ed6 \ No newline at end of file diff --git a/graph_legend.png b/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..02fbdac86106066e9c5808ccc5a71b94b10ce742 GIT binary patch literal 23252 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 TGK7IlHAG*>Si4HoDf<5ak0|d; literal 0 HcmV?d00001 diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..0495569 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,176 @@ + + + + + + + +MSCEqF: Class Hierarchy + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cmsceqf::Camera
 Cmsceqf::CameraOptions
 Cmsceqf::CheckerSimple class to perform various checks
 Cmsceqf::CheckerOptions
 Cstd::false_type
 Cutils::is_streamable< S, C, typename >
 Cmsceqf::FastOptions
 Cmsceqf::FeatHelperFeatHelper struct. This struct implements a helper structure holding all the information related to a single feature measurement to be used in the computation of the C matrix, Cf matrix and residual delta, for the MSCEqF update
 Cmsceqf::Features(Cache friendly) Features struct. Define a set of features detected/tracked
 Cmsceqf::GFTTOptions
 Cmsceqf::ImuStruct for one IMU reading. It includes timestamp, angular velocity and linear acceleration. -1 indicates an invalid timestamp
 Cmsceqf::InitializerOptions
 Cutils::InsertionOrderedMap< Key, Value >This calss define a map that keeps the insertion order
 Cutils::InsertionOrderedMap< MSCEqFState::MSCEqFKey, size_t >
 Cutils::LoggerLogger
 Cmsceqf::MSCEqF
 Cmsceqf::MSCEqFOptions
 CMSCEqFRos
 Cmsceqf::MSCEqFStateThis class represent the state of the MSCEqF. This includes the state of the lifted system (element of the symmetry group) and the covariance
 Cmsceqf::MSCEqFStateElementThis class represent the base class for a general element of the MSCEqF state. This include the index of the variable (index in the residual, and in the covariance), and the degrees of freedom
 Cmsceqf::MSCEqFInStateThis struct represent the Intrinsic state of the MSCEqF
 Cmsceqf::MSCEqFSDBStateThis struct represent the Semi Direct bias state of the MSCEqF
 Cmsceqf::MSCEqFSE3StateThis struct represent the Special Euclidean Group of dimension 3 state of the MSCEqF
 Cmsceqf::MSCEqFSOT3StateThis struct represent the Scaled Orthogonal Transforms state of the MSCEqF
 Cmsceqf::OptionParser
 Cmsceqf::PinholeCameraThis class represnt the base class for any pinhole camera type
 Cmsceqf::EquidistantCamera
 Cmsceqf::RadtanCameraThis class represent a pinhole camera with radtan distortion model
 Cmsceqf::ProjectionHelperProjectionHelper interface. This class provides an interface to the implementation of the projection function as well as its differential
 Cmsceqf::ProjectionHelperS2ProjectionHelperS2 class. This class provides an implementation of the projection on the unit sphere as well as its differential
 Cmsceqf::ProjectionHelperZ1ProjectionHelperZ1 class. This class provides an implementation of the projection on the unit plane as well as its differential
 Cmsceqf::Propagator
 Cmsceqf::PropagatorOptions
 Cmsceqf::StateOptions
 Cmsceqf::StaticInitializer
 Cmsceqf::Symmetry
 Cmsceqf::SystemStateRepresent the state of the system posed on the Homogenous space
 Cmsceqf::SystemStateElementThis struct represent the base struct for a general element of the system state
 Cmsceqf::BiasStateThis struct represent the IMU bias state of the system
 Cmsceqf::CameraExtrinsicStateThis struct represent the camera extrinsics state of the system
 Cmsceqf::CameraIntrinsicStateThis struct represent the camera intrinsics state of the system
 Cmsceqf::ExtendedPoseStateThis struct represent the extended pose state of the system
 Cmsceqf::FeatureStateThis struct represent a single persistent feature state of the system
 Cmsceqf::Track(Cache friendly) Track struct. Define a feature (labeled via a feature id) detected/tracked at different points in time
 Cmsceqf::TrackerThis class implement the feature tracker module based on Lucas-Kanade optical flow. The tracker tracks feature temporally in subsequent images and produces a set of matches
 Cmsceqf::TrackerOptions
 Cmsceqf::TrackManagerThis class manages the multiple tracks of feature traked in time
 Cmsceqf::TrackManagerOptions
 Cmsceqf::TriangulatedFeatures
 Cstd::true_type
 Cutils::is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>
 Cmsceqf::UpdaterUpdater class. This class implements the Multi State Constraint update step of the MSCEqF filter
 Cmsceqf::UpdaterHelperUpdater helper struct. This structs implements common helper methods for MSCEqF update
 Cmsceqf::UpdaterOptions
 Cmsceqf::Visualizer
 Cmsceqf::ZeroVelocityUpdaterZero velocity updater class. This class implements the Equivariant Zero Velocity Update (ZVU) of the MSCEqF filter
 Cmsceqf::ZeroVelocityUpdaterOptions
+
+
+
+ + + + diff --git a/hierarchy.js b/hierarchy.js new file mode 100644 index 0000000..60be614 --- /dev/null +++ b/hierarchy.js @@ -0,0 +1,66 @@ +var hierarchy = +[ + [ "msceqf::Camera", "structmsceqf_1_1_camera.html", null ], + [ "msceqf::CameraOptions", "structmsceqf_1_1_camera_options.html", null ], + [ "msceqf::Checker", "classmsceqf_1_1_checker.html", null ], + [ "msceqf::CheckerOptions", "structmsceqf_1_1_checker_options.html", null ], + [ "std::false_type", null, [ + [ "utils::is_streamable< S, C, typename >", "structutils_1_1is__streamable.html", null ] + ] ], + [ "msceqf::FastOptions", "structmsceqf_1_1_fast_options.html", null ], + [ "msceqf::FeatHelper", "structmsceqf_1_1_feat_helper.html", null ], + [ "msceqf::Features", "structmsceqf_1_1_features.html", null ], + [ "msceqf::GFTTOptions", "structmsceqf_1_1_g_f_t_t_options.html", null ], + [ "msceqf::Imu", "structmsceqf_1_1_imu.html", null ], + [ "msceqf::InitializerOptions", "structmsceqf_1_1_initializer_options.html", null ], + [ "utils::InsertionOrderedMap< Key, Value >", "classutils_1_1_insertion_ordered_map.html", null ], + [ "utils::InsertionOrderedMap< MSCEqFState::MSCEqFKey, size_t >", "classutils_1_1_insertion_ordered_map.html", null ], + [ "utils::Logger", "classutils_1_1_logger.html", null ], + [ "msceqf::MSCEqF", "classmsceqf_1_1_m_s_c_eq_f.html", null ], + [ "msceqf::MSCEqFOptions", "structmsceqf_1_1_m_s_c_eq_f_options.html", null ], + [ "MSCEqFRos", "class_m_s_c_eq_f_ros.html", null ], + [ "msceqf::MSCEqFState", "classmsceqf_1_1_m_s_c_eq_f_state.html", null ], + [ "msceqf::MSCEqFStateElement", "classmsceqf_1_1_m_s_c_eq_f_state_element.html", [ + [ "msceqf::MSCEqFInState", "structmsceqf_1_1_m_s_c_eq_f_in_state.html", null ], + [ "msceqf::MSCEqFSDBState", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html", null ], + [ "msceqf::MSCEqFSE3State", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html", null ], + [ "msceqf::MSCEqFSOT3State", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html", null ] + ] ], + [ "msceqf::OptionParser", "classmsceqf_1_1_option_parser.html", null ], + [ "msceqf::PinholeCamera", "classmsceqf_1_1_pinhole_camera.html", [ + [ "msceqf::EquidistantCamera", "structmsceqf_1_1_equidistant_camera.html", null ], + [ "msceqf::RadtanCamera", "structmsceqf_1_1_radtan_camera.html", null ] + ] ], + [ "msceqf::ProjectionHelper", "classmsceqf_1_1_projection_helper.html", [ + [ "msceqf::ProjectionHelperS2", "classmsceqf_1_1_projection_helper_s2.html", null ], + [ "msceqf::ProjectionHelperZ1", "classmsceqf_1_1_projection_helper_z1.html", null ] + ] ], + [ "msceqf::Propagator", "classmsceqf_1_1_propagator.html", null ], + [ "msceqf::PropagatorOptions", "structmsceqf_1_1_propagator_options.html", null ], + [ "msceqf::StateOptions", "structmsceqf_1_1_state_options.html", null ], + [ "msceqf::StaticInitializer", "classmsceqf_1_1_static_initializer.html", null ], + [ "msceqf::Symmetry", "classmsceqf_1_1_symmetry.html", null ], + [ "msceqf::SystemState", "classmsceqf_1_1_system_state.html", null ], + [ "msceqf::SystemStateElement", "classmsceqf_1_1_system_state_element.html", [ + [ "msceqf::BiasState", "structmsceqf_1_1_bias_state.html", null ], + [ "msceqf::CameraExtrinsicState", "structmsceqf_1_1_camera_extrinsic_state.html", null ], + [ "msceqf::CameraIntrinsicState", "structmsceqf_1_1_camera_intrinsic_state.html", null ], + [ "msceqf::ExtendedPoseState", "structmsceqf_1_1_extended_pose_state.html", null ], + [ "msceqf::FeatureState", "structmsceqf_1_1_feature_state.html", null ] + ] ], + [ "msceqf::Track", "structmsceqf_1_1_track.html", null ], + [ "msceqf::Tracker", "classmsceqf_1_1_tracker.html", null ], + [ "msceqf::TrackerOptions", "structmsceqf_1_1_tracker_options.html", null ], + [ "msceqf::TrackManager", "classmsceqf_1_1_track_manager.html", null ], + [ "msceqf::TrackManagerOptions", "structmsceqf_1_1_track_manager_options.html", null ], + [ "msceqf::TriangulatedFeatures", "structmsceqf_1_1_triangulated_features.html", null ], + [ "std::true_type", null, [ + [ "utils::is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>", "structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html", null ] + ] ], + [ "msceqf::Updater", "classmsceqf_1_1_updater.html", null ], + [ "msceqf::UpdaterHelper", "structmsceqf_1_1_updater_helper.html", null ], + [ "msceqf::UpdaterOptions", "structmsceqf_1_1_updater_options.html", null ], + [ "msceqf::Visualizer", "classmsceqf_1_1_visualizer.html", null ], + [ "msceqf::ZeroVelocityUpdater", "classmsceqf_1_1_zero_velocity_updater.html", null ], + [ "msceqf::ZeroVelocityUpdaterOptions", "structmsceqf_1_1_zero_velocity_updater_options.html", null ] +]; \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..4c8c7da --- /dev/null +++ b/index.html @@ -0,0 +1,328 @@ + + + + + + + +MSCEqF: MSCEqF + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
MSCEqF
+
+
+

License

+

MSCEqF logo

+
+

‍MSCEqF: Multi State Constraint Equivariant Filter

+
+

MSCEqF is a multi-state constraint equivariant filter for visual-inertial navigation. It is based on the recent advances in equivaraint inertial navigation systems [1, 2, 3, 4].

+

+Features

+

+Design features

+
    +
  • Developed as a pure C++ library with ROS1 and ROS2 wrappers available
  • +
+

+Filter features

+
    +
  • Supports online camera extrinsic and intrinsic parameters calibration
  • +
  • Supports unit-plane projection method
  • +
  • Supports anchored euclidean, anchored inverse depth and anchored polar feature representation methods
  • +
  • Includes a static initialization routine as well as parametric initialization with custom origin
  • +
  • Includes an equivariant zero velocity update routine
  • +
+

+Vision frontend features

+
    +
  • OpenCV based
  • +
  • Supports a grid-based multi-thread parallel feature extraction
  • +
  • Supports different features detector including FAST and Shi-Tomasi
  • +
  • Supports different image enhancment tecniques, including Histogram and CLAHE
  • +
+

+Future roadmap

+
    +
  • ROS1 wrapper
  • +
+
    +
  • ROS2 wrapper
  • +
+
    +
  • Equivariant Zero velocity Update (EqZVU)
  • +
  • Unit-sphere projection method support
  • +
+
    +
  • Equivariant Persistent (SLAM) features update support
  • +
+

+Documentation

+

Doxygen documentation is available here: MSCEqF documentation

+

+Dependencies

+

MSCEqF has the following dependencies which are automatically downloaded and linked against:

+ +

+Getting started

+

+ROS free setup

+
$ git clone <url> msceqf
+
$ cd msceqf
+
$ mkdir -p build/<build_type>
+
$ cd build/<build_type> && cmake -DCMAKE_BUILD_TYPE=<build_type> -DBUILD_TESTS=ON ../..
+
$ cmake --build . --config Debug --target all -j && cd ../..
+

+Run tests

+
$ cd msceqf/build/<build_type>
+
$ ./msceqf_tests
+

+Run example (Euroc)

+

After downloading the Euroc follows

+
$ cd msceqf/build/<build_type>
+
$ ./msceqf_euroc <sequence_name> <euroc_dataset_folder> <euroc_example_folder>
+

+ROS1 setup

+
$ cd ws/src
+
$ git clone <url> msceqf
+
$ cd msceqf
+
$ catkin build -DCMAKE_BUILD_TYPE=<build_type> -DROS_BUILD=ON
+

+ROS2 setup

+
$ cd ws/src
+
$ git clone <url> msceqf
+
$ cd msceqf
+
$ colcon build --event-handlers console_cohesion+ --cmake-args -DCMAKE_BUILD_TYPE=<build_type> --cmake-args -DROS_BUILD=ON
+

+Docker setup

+
$ sudo apt update
+
$ sudo apt install -y nvidia-docker2
+
$ sudo systemctl restart docker
+
$ cd <path_to_msceqf_folder>
+
$ docker build --network=host -t msceqf:ros<ros_version> -f docker/Dockerfile_ros<ros_version>
+
$ xhost +
+
$ docker run --net=host -it --gpus all --env="NVIDIA_DRIVER_CAPABILITIES=all" --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" msceqf:ros<ros_version> .
+

If Nvidia drivere are not supported, simply run docker as follows

+
$ docker run --net=host -it --gpus all --env="NVIDIA_DRIVER_CAPABILITIES=all" --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" msceqf:ros<ros_version> .
+

+Usage with custom dataset and/or with ROS

+

Utilizing MSCEqF with a custom dataset or specific sensors is a straightforward process. Follow these steps for seamless integration:

+

+Dataset/Sensor preparation

+

Ensure you possess the camera intrinsic and extrinsic parameters calibration if working with a custom dataset. In case you are working with real sensors, perform a camera calibration before starting. We recommend using Kalibr for efficient camera calibration.

+

+MSCEqF configuration file

+

Navigate to the desired location to store the filter configuration file:

+
cd <path_where_to_store_the_filter_configfile>
+
nano <configfile_name>.yaml
+

Populate your configuration file with the following settings:

+
# Initial standard deviations (attitude, velocity, position, bias, extrinsics, instrinsics)
+
extended_pose_std: [1.0e-1, 1.0e-1, 1.0e-9, 1.0e-1, 1.0e-1, 1.0e-1, 1.0e-9, 1.0e-9, 1.0e-9]
+
bias_std: [1.0e-1, 1.0e-1, 1.0e-1, 1.0e-1, 1.0e-1, 1.0e-1]
+
extrinsics_std: [1.0e-2, 1.0e-2, 1.0e-2, 1.0e-2, 1.0e-2, 1.0e-2]
+
intrinsics_std: [1.0, 1.0, 1.0, 1.0]
+
+
# IMU noise statistics
+
accelerometer_noise_density: 1.0-2
+
accelerometer_random_walk: 1.0e-3
+
gyroscope_noise_density: 1.0e-3
+
gyroscope_random_walk: 1.0e-4
+
+
# Camera calibration (according to kalibr format, both T_imu_cam and T_cam_imu)
+
distortion_coeffs: [0.0, 0.0, 0.0, 0.0]
+
distortion_model: radtan
+
resolution: [320, 240]
+
intrinsics: [250.0, 250.0, 160.0, 120.0]
+
T_imu_cam:
+
- [1.0, 0.0, 0.0, 0.0]
+
- [0.0, -1.0, 0.0, 0.0]
+
- [0.0, 0.0, -1.0, 0.0]
+
- [0.0, 0.0, 0.0, 1.0]
+
+
# Initializer options
+
# For IMU only motion detection set static_initializer_disparity_threshold: 0.0
+
# For DISPARITY only motion detection set static_initializer_acc_threshold: 0.0
+
static_initializer_imu_window: 1.0
+
static_initializer_disparity_window: 0.5
+
static_initializer_acc_threshold: 0.25
+
static_initializer_disparity_threshold: 1.0
+
+
# Propagator options
+
# For numerical exponential computation (costly) set state_transition_order: -1
+
# For approximated first-order exponential computation (recommended on low-power hardware) set state_transition_order: 0
+
state_transition_order: 0
+
imu_buffer_max_size: 1000
+
+
# Updater options
+
# Possible options for zero_velocity_update are enabled, disabled, beginning
+
refine_traingulation: true
+
feature_min_depth: 0.1
+
feature_max_depth: 20
+
feature_refinement_max_iterations: 20
+
feature_refinement_tollerance: 1e-10
+
measurement_projection_method: unit_plane
+
feature_representation: anchored_inverse_depth
+
pixel_standerd_deviation: 1.0
+
curvature_correction: true
+
zero_velocity_update: enabled
+
+
# State options
+
enable_camera_intrinsic_calibration: false
+
gravity: 9.81
+
num_clones: 11
+
+
# Tracker options
+
# Possible options for feature_detector are fast and shi-tomasi
+
equalization_method: histogram
+
optical_flow_pyramid_levels: 3
+
detector_pyramid_levels: 1
+
feature_detector: fast
+
grid_x_size: 4
+
grid_y_size: 4
+
min_feature_pixel_distance: 15
+
min_features: 100
+
max_features: 120
+
fast_threshold: 20
+
shi_tomasi_quality_level: 0.75
+
+
# Track Manager
+
max_track_length: 400
+
+
# Logger level
+
# Possible levels are 0: Full, 1: INFO, 2: WARN, 3: ERR, 4: INACTIVE
+
logger_level: 1
+

Adjust values as needed and customize settings thresholds based on your specific requirements.

+

+License

+

This software is made available to the public to use (source-available), licensed under the terms of the BSD-2-Clause-License with no commercial use allowed, the full terms of which are made available in the [LICENSE](LICENSE) file.

+

+Usage for academic purposes

+

If you use this software in an academic research setting, please cite the corresponding papers.

+
@article{fornasier2023msceqf,
+
title={MSCEqF: A Multi State Constraint Equivariant Filter for Vision-aided Inertial Navigation},
+
author={Fornasier, Alessandro and van Goor, Pieter and Allak, Eren and Mahony, Robert and Weiss, Stephan},
+
journal={arXiv preprint arXiv:2311.11649},
+
year={2023}
+
}
+
+
@article{fornasier2023equivariant,
+
title={Equivariant Symmetries for Inertial Navigation Systems},
+
author={Fornasier, Alessandro and Ge, Yixiao and van Goor, Pieter and Mahony, Robert and Weiss, Stephan},
+
journal={arXiv preprint arXiv:2309.03765},
+
year={2023}
+
}
+

+References

+

[1] van Goor, Pieter, Tarek Hamel, and Robert Mahony. "Equivariant filter (eqf)." IEEE Transactions on Automatic Control (2022).

+

[2] Fornasier, Alessandro, et al. "Equivariant filter design for inertial navigation systems with input measurement biases." 2022 International Conference on Robotics and Automation (ICRA). IEEE, 2022.

+

[3] Fornasier, Alessandro, et al. "Overcoming Bias: Equivariant Filter Design for Biased Attitude Estimation with Online Calibration." IEEE Robotics and Automation Letters 7.4 (2022): 12118-12125.

+

[4] Fornasier, Alessandro, et al. "Equivariant Symmetries for Inertial Navigation Systems." ArXiv preprint.

+
+ +
+
+ + + + diff --git a/inherit_graph_0.map b/inherit_graph_0.map new file mode 100644 index 0000000..02b8a23 --- /dev/null +++ b/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_0.md5 b/inherit_graph_0.md5 new file mode 100644 index 0000000..5bd16eb --- /dev/null +++ b/inherit_graph_0.md5 @@ -0,0 +1 @@ +ed0851ce7636a948f7f5a131e4abfae9 \ No newline at end of file diff --git a/inherit_graph_0.png b/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..de5ac23a4fd59bbc9090024b641b6a36bcdacedb GIT binary patch literal 1894 zcmV-s2buVZP)j^3bH^Vd}iz57F~B4@+Nj zzOO#NPxpOY7x#7A?)%xZ8{pyL;o;%oS&A@|1*xg2VuoQN79$v*g@K6P6crV9{VH2A z*@$772!>()a$HzE4j>W0qhAG68vm1mf`SE)hG*ePOG}$pE^u%hJpU2+#xGO&#xGO& z#xGO&#xGO&#xGNreB+y&n{ndA2|Ri7$t>c*S1vTG(R4PP8 zMd8t-M-YibxNzYDy1TnkSXhX$u`wu>N`!@l0RXD2t8x4GZS?i^Av81;N~IERZf*bo zlgWhZ*RSK_$BzgI2!K+lgtxah0N~rVZ^+HfMSXoe)~{cW%*;&q`S}3=`uh5ilam9T zPKV&&U~JyJ8O_bj`1*?OTd*tiuOXK6?oc`d! zgOr<_OU1>-B#}tSYPE8@ojZ3@N=gb55pCJBg(@p6?dFi5pHCqnA$DyH1_Kop6>;s8d$$kDKXZ+f=Yq>L2C=`NaSp)Xw-oAZ{;^Jb&#>S$t zu@P==Zs_Uhv9W*g;st_&g5cuff{2I+T)TG7M$fV=3JMBfFc@s)0|NtditFe0`Rv&< z?Ay1`MwgeD2NxF?+`oSx=g*%_J6E1wMWH1OTY1sX;0<55*rh26V%qrAKvb#-+BfX|;lb34U!==FM-&1RdiP$)!ZW+u|o z(okJp&DoZgmg4Etr#N-$6dD>D5Ed4O{rmTWWm%M!mBDJYVq#)qPBpNX%VhqP&sp(r z&Uh~`FK*t_(n2iDa`UdPF7ABm?d_$Ypdj+{@}i)iAX>F*73JmSakf{lUL}@gDKIdQ zR<2x0xw*MEIyW~r+O%mCxwyEHTrTI%^{lKca&mGai9|v^K0b8l(4iU6c%e{8`T6-% z#zaJyFJGoLYu1p5hX;v7B3iwAHQl*$hlq$ieE2{jk%$5V14%3vQ)+4|NhA`IN~LqE zfxTQNuVc^WY?lD zWj&M0L~6B~dV71P=mrJ`NUc_r!C;u8>+S8O_wV1+@bEBYXJ>Pb*Jw1<-`~&KRaI3{ zS6A1R@vpSBv`|x16Im=48~OL|-$|`jlhJ78;;E~vn{y3j%4PC8_I%EknHoRk&YfH? zPhc44umAH6oSd8-Xti3Dl$0!XD2q;7S{jHbv9Pev=IYgwd}S*X3gPMLx!7U+r&*G( zY-hS>#`6zL@*B_dd-%pLQ~1U&Q}}!J%akdN7YGFUiHV7_+S=O1h=*qZ5C{bN#g2i8 ghlhuUhsQDe4S%br-j?MK761SM07*qoM6N<$f{FK;!vFvP literal 0 HcmV?d00001 diff --git a/inherit_graph_1.map b/inherit_graph_1.map new file mode 100644 index 0000000..7374778 --- /dev/null +++ b/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_1.md5 b/inherit_graph_1.md5 new file mode 100644 index 0000000..5514575 --- /dev/null +++ b/inherit_graph_1.md5 @@ -0,0 +1 @@ +805c05544a6351ff26faec8561b05388 \ No newline at end of file diff --git a/inherit_graph_1.png b/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..798a71c442ac57cdfe7d5fbef9797e4a4533de46 GIT binary patch literal 2805 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_10.map b/inherit_graph_10.map new file mode 100644 index 0000000..b315dcc --- /dev/null +++ b/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_10.md5 b/inherit_graph_10.md5 new file mode 100644 index 0000000..565dddd --- /dev/null +++ b/inherit_graph_10.md5 @@ -0,0 +1 @@ +8c53867b62f2eed65d578f4493aae939 \ No newline at end of file diff --git a/inherit_graph_10.png b/inherit_graph_10.png new file mode 100644 index 0000000000000000000000000000000000000000..09f5d89ed3e1ded0384ec0407a31da7482dadcae GIT binary patch literal 2413 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 + + diff --git a/inherit_graph_11.md5 b/inherit_graph_11.md5 new file mode 100644 index 0000000..d5ef1a8 --- /dev/null +++ b/inherit_graph_11.md5 @@ -0,0 +1 @@ +2c7aec7c148194b1cf55f783199c6f3d \ No newline at end of file diff --git a/inherit_graph_11.png b/inherit_graph_11.png new file mode 100644 index 0000000000000000000000000000000000000000..e274eaf9c0cce471559f9abd8814c2c94d61f4a5 GIT binary patch literal 3177 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 htw4zXuQ8}h + + diff --git a/inherit_graph_12.md5 b/inherit_graph_12.md5 new file mode 100644 index 0000000..261d2ca --- /dev/null +++ b/inherit_graph_12.md5 @@ -0,0 +1 @@ +21ea9b0ab2c1d092c8034b4645b1ee62 \ No newline at end of file diff --git a/inherit_graph_12.png b/inherit_graph_12.png new file mode 100644 index 0000000000000000000000000000000000000000..45ed92784360b9a7b45e49abdbf3cae3c6230549 GIT binary patch literal 2685 zcmX|Dc{o&U8$Xm1-cO^*8Z)HQq)GO5Fc>tLv1Xqs`zT8^mO&Il#**-gtgk4dNhBI; zBoifuWXZlH+h7dI`yGFL-*c{W?&~^#Joo+F_iuR;tt?Fb;uGfs0N^iEGztgCf52Cc z_Xzks%9EZ0h9d-X6BO|8!Ba>t%K!jAB~z5X4JmIq*Z-=uz37L3U+{koysRREr>Lu- z;p(%t@2yI>NAie%$S>Xkmsv_Ko`?za4)3d0H2I%4LMTsBerv;!*j;^$T)2@n!~KxQ zQl5dCY^=lU*gC6xvdlQ?;>9hGBvSN8%!XBy5j6jB)+e5X@Yb;X5+KuAc4s78<+OjefW%TyqdNCE!3QG4I2bly6r#2ppX++tu|N^yzO zQJhu}sv#9Go#s?Wyjxaw76yameW$@6^!8c|Fq!zyWHIL`H#cc8dqQ2E>fb${K+981 zt`!a!JIlzPW?X7Uk;yu9p9@lDO;X(Zij9C6r#CmDii-cSF0<%pyU&lWbqt*8f;`I1 zENW;F7fL(~XTWrHq>74)v@c!B=0fM}HTUk|gsx|IteaMoCje>APV`F+=Uh=(r zhyQu{6n6P?`kns(rlzLn6cvqKT~E&!7?!G2l`}@Cd&CJcU5oj_R z8e+Azwdw&AK(euHCsiVWSz#}$tb7~k80q=>DG}Q%`bAdA z7k1azr#fCbzCfFra($70N2Aerd3jqNo-wz=V(-@a4RHf-5&q)h;(+ZH7r0Bq$vZ2f z`a~j}s44+A^thB1b>z*h>pQI3;}1G06bjPBMwIjOw-+}_4#J#f>zecq^`ASH1L z37Th*IA>=E&wOr6p;CDO&hBn3UbHb7proW2+uNV|xwOO;Gm>!T%$Yz{S>t5n&6|o~ zA3b{>-}fJ>n`F&0($I3e{QQT$NT==Z@2{~~ua>Gcg6Cx9<>Sq7jn+eg=X+qD9ZThi_-^A)_>Zeav-*G>3jxVShku*GISG%kVWTs8Lh_eY@y1_n^sm)zuG z#ZyxRzGKHGt45eiqX(xh$;Y)K!TOb>_DDaMmuI`1cjhF%(<9V`Po2teRy>>A)0x@x zL@PV%qLVS|k9pk%MzM{;nJkaR->c1KJ-KQpAbsG_&La?M6pGWUf<7>fZ|&nI&J_Pc zw48Dn>xO0o8xDaik2Pi+7#h0x29Gs_+}>Qkj$^H@uavtTVlusz-z{nNqu;y5Q;lV% zbR+-1u(Yrsla5AVFqqJ~-p+R0{WoVMfX);temy-sAjU?4ryVgm=ctew6v{6GM>;!8 z%3I`7UcN+p%DIy8JA+BOK#4Im z)}UzOVqA^aXJc#Y{tG(~A3eGU_MA9U_m?;|UQLU;rN7LwkIB4$?1a3GmX^fu@Gv6h z>bG}cSDOB?os`wouJ3Wy>%sZO40&A>8LD+9?F zfzwB{b#(d$2Rmz;N$arKxHxD!`T)FATA^#*V)6QTJQQTjrRJKNjZBr!_wPX|m;^bb z9yoOvT#tdU{52cji8cHO36rcnQi0eJs=z zjSur^cJAX4kozDD9Gatal9G}N?J8Ok0=m226Kesgr>hxGWJHx+1vHy6xw4YN;gBj_ z>Ehw^)0X+#tze5&y1UKxKv)2~S}LF8%^eYtdMjTqI^F>uk9#(AQxa4t(kui50eRll(_>_5DHyYF zV)%P|^~2eM$XK8Lr}_$+unQOX#l*zwgJ${c-&9r#lvzA6@bsK3ByYWnqE~i$ZL-w zq|wn)v|@HYI6pLKs-uQxrMT~ncUEKO;S3>2-+lg5yub^mHz^g{d#7=rmw*&gQ&W4a z>?0ILB3W5k9rvkqbp1gbYsduc%Fxx-RW9SB_vS+1X1}H0`fJYb-_`*EFURmShrC^t zZ?dxX%8D)xkK{3rQ6EyIN + + + + + + + + + + diff --git a/inherit_graph_13.md5 b/inherit_graph_13.md5 new file mode 100644 index 0000000..147f2df --- /dev/null +++ b/inherit_graph_13.md5 @@ -0,0 +1 @@ +f2536f4ff0006c0374b6cadc96873eae \ No newline at end of file diff --git a/inherit_graph_13.png b/inherit_graph_13.png new file mode 100644 index 0000000000000000000000000000000000000000..2574e85ca19de261cc74e5a7de1bfa5e15740814 GIT binary patch literal 18507 zcmZv^1z1+y_AmOSCi1E%8zc~lH;OKs2lQf(yAyFS_}NS?g}>iZ%S6E z1pFVi@#9C*sDH?RGn(^aQK&m8dFhAhZYi5HuKJ^gmu-9FE2w~O9{v1$!7^U{5q5S5 zw4^18DuS|r`FwV*zt+zVtXvw`olQU9Ni0Zgq|C?^cJi{bp1YhbQr(*NgI6oJMFnnlvlF7AyRC3qv8>jHdRE;n!9 z5ESBJ9x?98R#e>u7P8HZ-NT7--1U0mGl zv0@#Jwzm`yKJZ%;i=XdeJg}Y4FlhE@y8OH0=Ha0`5*`)B1otuNid4x}Bs)JpcUy|r zda96k*7vQbtVO}X!lKlqr)c{Tjd#bvfcTU5_nwj7w;>%6|L0Y@HEq1*Ms0?S`$(HB zQ4tdd=U~=zN2SHflG4iHe}z zU3;f=r{%uS@E_W=2Iq}s!P2I6%`yWjzpbfS!rQmwc7!Tkh^(!x{n?s&KT&DExVrkm z+!KqX2uAtz%C&10$QX0vx$RH)&Cq^NR$IF#z#Ne1>FHTc*OeFR)qXdg_`q$FtyB48 z;rDNPT3TV(?KlDkh3U~3S*`pfexI6za6mBD- zs;Y`Ba?g4_fkjO=fn6uYPH!xNiGe`|Rqu7`*s?{GUCd8FNXWp>u4pT!u#>hX3U3#; zKT{@L!22)X%J)a+Rz4zrNUHknH=015GTJ^l=9Dw?*n&WM~8Hp=eFRi#|Fm%b-!Kf#n&p!VFCAjdZpz1$gr11!%j}z z#QvQ--7{#CJ3HE{ciAF8TpwK=ej<*Q0SiD{R@T_WMC#w=MQB6>=BJbEw{G2Pi(zMM6%iAkd)gPlZaKlyWGZLYWv|3Nv%bariF5v$TwK` z+~jZnY>Y=~6ltpDDO25~6p(;PoTzz8@$cC8A5L3}pcAR62Olhtu7QE5p{z%|zL#Do zxXiD%_5l%_X7=Ov_t>>R`PI&PTxL{N(+!OrJ(Sdd2LDke(Cvub>*tjuy;>iIb_q2txUaOaNSQtx{cK5{ex z$KO}X2hwt2c*{I*$@ytvW16RXC%_!=zMSMk?#-%Is#v01?YH@QX=y2b@$dRXWnMj{ zUu&zln3x#xZ~}+kKBbnevy+gxyEO&Obfov$5k4{Tn<0yixjCBHZ>FPej8D>RE^8Iy zSv$UdCAfWCI-Hop4PMvJYHJeMDS`?8)>BYkL~rAI^E(I$2d4kcKnoQCaC_r$<-2;Z2(U`VvGu{4JL00GSb}4OaJj&pv(+C1g_QPvY;Nq8Aj@K?yo7M`$e8 zAM7qceWV{68d`4XP2h;N8ZBJXzF+pz{DybF+Hh5{YAmBtU;51SwA*??9vA8L<(=B= zWIV5ZFAvh)+}w7jod$+JO5q%ghQbbm7e1+9Ru;u>b;U;&duTeAu z(R7cl+_;egi{t$KU;xUo%G#_QuQLu{%OMk)tqfs^Zq)=qU6}ATKTmf zIoJ5oQYMpl&2K(@`0#wMi-w+wX=Tz5cEyoY(Qz`;HHbo!_^m6v&s>z##rom%5(OM+ zgYjrye2pLz5EgbiTsJJ!d;IvZ3A_g=B5D<;^62R3tCQ75GM-C4@g~qR^qbsN*Z%_)nqk9y|1$!vz z{>vWtPN(JozOt9cch;Q#dkW=LA$)T3u;5@EC;$sN?+ti%R8CG$@$vB=T3NB8(!Gz! zq~2Wr{G4lkW1|-ydH2tsZ1^7ihF77)9J=q4k`$(DUY>4N4%FHILPr&8l`-DEd$;S7 zmzVc+F-p95^gx-UJ zg8GqXIh>1$iD|z+!s0XsvxkwPS8ID(S`-kmvGeJLNUf=v8QO%W!%Ty7mP|M?3M$z3 z*l%$r6HPTUf!W8<*VzbmTF&lqwx09o)!5u+V+$V{QE$08(nG<{>M4EJn6F#S3a?(j z-Z2PnfX3x@Vt=$X6`YsHL`_YNylllJzR;d{HeUFG&-vb?LXDy~@Wsf;$a-o?VYl5o zuoxM|#HiaA4z}Q(La|OceRDX)Z#@N<4Q=1qgXu&}l! z4`o98({nVtmQ%(+9K08w1F%v=++!XFVmmDNk%^t}O2L{lQGq>|hqPbj)lLqkCuw|! z8ML%9adGsm=lkKOXV9e0pr$PE6ciLxxb7H0AAMl>+tJ(;DJLT%Bb1!4PS*0$9h)9O ztuTps_wJ5tmI@#hdLACtii!%;;asKVa3N^C$e*BHIF7IMCqGD@67s!lvYD)s=i%Xz zra$`?E?ruKp}X*!e{cFn#exyS^3QS7gbm>4 z)5#&Ytg4Ap?(t(imot+F+_%r1eG=>Sf9vEm(%j0fJiN_|K<3`z4+7<)iJvP?nS^{Z z@ZaIuNNCf!6h~R*MH0P?OL`%ST-5mZrvi&fRVR*&`MgX9-xqFwZL{a`<(L~QC;4CM z3lxT_xsc0D`bfD`tmFytC-1(J9U|bmyD44%!_;``J=N&v%t*Ci+(0O^M<2*3nUvSa zPC`OS;umBxXzhu$gFo>oX$!YzHRyI2S?PWphPOdYcQGa>Nj@R4xh!MkgpZiL8| zzo;owV4l3fzjcXR5?0P_((&$RjJe{MUI~(n`xBndMe($g&!1luAFbPoUdj(s^8?D( z+E8ldAvVQ2hlz~{ONC8&Qs1;ktL)t!fiF# zE(e^$^EGCdf^)o#`D<$CG%VXIHkic8o2Lfi+%m)adGINs9kw%u!J*$XuVAjDuY7C4 zbt=z_cK$2)AxV=920JO0YnLKG`eSd5B+p{<;v@1Mm;qx7EW#gSRWa|JVC48cyTTU7 z!A3h(Bqc+Yl}ki|JR<(pOXZXs3~nm7(G-4h2BZckF()M6o|AEYD*xX_kC0nq+^$ij ze9K_rc~BE*>lb*cpr}VITcc(kE+nhOwhc?B>a5rO!); zp>t`z$w*aKD7-!wn(Mj@Im0j4`V5bMh6a?N7b!9ldrhb?kT^#q9o7AS_kt@g7a?+Y zVyCn*ep3;>yvt zWtcK>=8M{xZ?WAr3n9~a?{7z#=T*8HB}Na{&TFPjjq$XY z`i-)E3lh#*$W!m zZ5BR&nnIK~^lc?ChkwRKSlX5ESHv?}PAU!pdv% z3gsFsP5xJn+nj1z_tUoWa@Vu9L|$!ACjwhLn6hhK(p_Fj_mySotQ-*Y9It>LN=ZfK z;No(BK(E5|DzJpM(b0Ig7N}qMC!_XT_)dvcReT2SOGGv{Hu?JXJkT!@j`gh3MdyzW zAmR0~5^HXyG!el8?j;RZXy2NhZsrteX=y)y{v0gQ;)LGf$gWnR%O9ue=IQCQ_Jg5l zJU9g5KgK+X0L>rvS|ue!U0N@#%~$jA)62$48cRzW|Cab?K}JYG#~&_K6D+T-{qw`| ztS6^Zm_H1doAkQla$llIZ)aCm_~+-hw6wGY-S@LQE1>O%CMPEg2nvRVbgvEPbmA)AtBRs4pNt=1HKBKVMGl4{2B|3 zi&((_80yI3bhN2cpi`L}K_xu4-U82u`L6dp=ZbJm zKwPyf-0*c!kUVhzizc7#L+W%*o7b|BE8meO-X@^)4f~{b^(B#)5#LkKn)E`NwX&~$ zM{2Dk&M8q9fC(M`tf~N#>w@3)ZhN#SGBUD`t}Z7)OyT>oS<$awW5US3b$8blHADaU z1ns`mu=VVI_rc0QrQI9|Bz0${(b?Jb1Ox;i5l{*`zD6zsB|(vq5I8Fx149r@-+jAT zMJubqPIFY?XNf%JRPBaW1u~6*w3iT+=qql2=d3_$rqQ))?EYEbQy^V#|1ORJ)$yPJ zcNxKbVE26pBVt3JpPz5*2qgq&_bZsj=acQyGEeEbHlc|!AS+pQ_1i$B7Jy+2Ca`Fg zQX=3=RCH#&rRL?-i_7D&S^74hMyG&H`owwNGm4FVWSAq!GVIOAGS}^p4)v)>bt~fylwt^*xL#EJRLIGvW1{H(}x7 z;mBP-(`Tb8_@vaJnH6~dJ_ry!0G>Kcd1k7W5!Ac} zJ1uQvOY1e)NM`H>t^5J5E~K z_F%mCKo1f(u(7b@rKMkogeay8X^=m#W!EY*fGdIA$pfgDk^UXd+42rlwGVi{FQ@BN z^q)Oj0`-H(tmk%tT3%#|sHdj1G|+>)exR82!0d2b*5&2p_3pI(y9c@xak?Et3jz)+ zD=XdE=e&+mwQpZ+KM1I^gHR-k9uDmj+aDomvtNio$1L-_enAl-`?I{*xKUoJ>Lr+ z^`3D*;i09K^z!oRu;5E-9fzvbRpI{9(|T1ZbyCV)F=hHdqr+&UlV3pgFJ@P_g4qJz zYu}FouNN4ecou#?(rV8X%AW}$D@&*Z=_L_w4JgBPJ3G5Vt+JaEunGEt^Wcx)BdLT> zK=A>@j%Vm|$^bwbXC7*j`FxxIa=4sqB;_}t4`|voHe{SlyXbp+dp5I8WPzXk8XJX? zjR&Qx>2x_cj!o;P-+M!!L`1$LH4i0V$XCh2W>ARxbmH~+TMWbA@v-?tg_*>W(RV*T zzs5<+AK6!}$BKW!OXy1%r+M_~5iGeb_*^^*pvQF{{43_s<}Y5vBqmy3wm?O>NhM^; z?YuhpxzJ%o=NOtqrO?-=?Ck9M^>vsw5ZSVfJHxJ13hbtxtC94HF9qpgqHBD&o^J15p%^;{+n*>4qq!koQgaxME;k0rbaOKLCc^I`xn;%-SZgtq+Vpr^k4;BV3rr!vF z@2rj%k-&F+85qD57Z(TG`_*%&xvS1$(cS*v&ru);W|{RS@L7$7r2G73 z>AKvXJPMNE*|R);wkl+4W6~~$Z_p;O)6@eS|Fbhj=oPkGg%~@NrmBKHPn;w7)tsDv zc%FElF1;5J5V%E6{ry*aFd2{OmBp?ooOzmmCpe9+|EdEoK}cTQ+Il-=k*!&xTV*{S z3H0#|^1I$?WnpPa2I^peMiDV^YyR=a^76l6snoBK0_WFn$bg8LByX?GBx*+Rrm=vm#siP6}_=2Q#SS%hA#w!x#jAJ4e%SY<(} zQA`(0HBWPY11eoSEHC@j!Mk7D+Y|4ucyotaZ^@;an%YEzGaD>6b71_$!G3m8dwn8PG<&jR0&n zic72S3dyqkGC{jNErhN4bu|8d+uxQU)qdF_!YlV5zMRK=+yNUVFfoQw?`?UA&MRK;B1b~DyTxtH~ z&2=(#Q<}-iItRL6zkb=wG{iG1CEX$-3W8w|h#pgxmzM*kxBuOZk9~vOw551Ny)1|_ls7>VHNFpqS;Yc(sUo_wFI$WYbLX+QwK3rJ?sB z5j0Oa5s?&VXnUO`hJ)Gigs|c|0LSP6K87~c@;}qAdP*`>6@V}q(wn3t&bNzJ{Iy=o&p==esqhKmr9qKegvgp3_vnsXVRe3 zy2uS9kRvpi0b+AJ=kb#h)4Ikcefb=Kq*GOptVpZ9F2e~nQnZ6qb z=kYwn&$oE$mV}8n?7!1v?=T*CGw*3N2zvQab)4`B)Yw3nd>_vVIDAr~lbq)-7B{!a zQmopbVOt76(8HJ1e5_&i+%5N(>`{r73(7cC*XVG_B>Ja7ql!UdesP;r8=;I0gE~Pz zraGnwTHe%s<)ka2xG^2ye@Pm3W?Dw!rk+%J64w|Me)w^!eETiFA~R1M`hFd*-fe6K zW;8vXwX2G~&4033Y~GG^t2PDs`#&g?s}(b%PvG$@lND@O21a^`Tw^tvl!nSIezAS=&m+S`^+Nd28byQc1! zJl-maZI32LAi(j3J12xl;0FCfo27}6uWWO1DbXu-fJpai=M+mVqY9g5WgQwD3DUor z?yDRuxp(O#07+-L4VZo*=|;c) z+dFOec@-U5U)LK>G7a!rlB zdgI0obp>x>c%00TN5j+}7}(b(Sf&hgW?p2o{lf6iWv+OKo+5M$n_RJjg)r~W;yB;d z=N~I4d|T8Xtg1^GB%S@4Zu>o#I{MX3;66_8$vM$BamDv=>f){Ha8=4`u)6hR^9lcQ zEweZgn@ldj#y$HXzLH(U{X0wk;yo((e5pV5 zv%^AMn(Q^K5=?_zAA?lmq@zQh-{Q*OoVpIeF*-u$@19LR%0W@sDo22F*1?xV`b!Xt z^NvVVrsHghMUqSFDo8uW6QnfpSep%kN@!Q~SdK4`)Rl%WiM=C1W@;<`z7D%7!!oMK zIQ;}X)Be~eV&9-}AFykI1U@}8v*S_8B>|?&Q-yN#0qQ$vjNk4`y?F}67YKHNUhTbq zz%aSUIShFaMwaG#=?*F;vtA8*s*p2J>$`o;bcKS(TtF1d!ll#eQ0kMh!uEW+t@S;R zHb1wwFSfvECnY4qhl6MKMbEC;O!(HI9{+}!W?|ZOb`8k{a5WvS9cSTYa8@8rFmm92ksRtfw|5D54 zU+eEFf+pN02F;U&ehbjR%9b{%zgK;+}$sz-+9PrOzJ((?e5 zXvV)BFQp16;jH;k`=Xz`si}!sh4$jL@N@XM)SlXFL4?eB@uhf1B>TSp@j1*5c(Jz81=q_K9^iWnD;ESdWOV4NOkC zCr@e%%L3vq8W%m@;R@Y@Jb<^a@ZQ!$WiYg$TLc6Fv9W}sg&HQ{|3rZQ2h>%y#zqJ6 z)|Qx*Q{>=FK<#b=q!DSo{5x(!?YjB%Ay{4xj*dL7nU@L8p2tae6!!tvf#3Pz{mZ$Q zRA7O>*4GuFWsr$^34oV`iH!}~I%1t72+40#yc_6z^9HYkgaiTuY6U0()2f22&^Pxu zj`=gPbovr`>tTn<%z&|c=j@g_d>T-KT5T=hVbH*W!3WT(wsoS=@+l7G2HO)Z`+Kxy zZSVjroRNGL3>+LBtC9TAC0*J}>i5gGRBqK*s|}_XHBEvQ&kc$%-_pG(ts zIe>*g3h|2@*RNe8wBDL+)pb!JdI2=?L{Z^l6F|o0TZ3)Eln!K`d z0?@n1Kr((0ew0GK2WB}AJQ#UcUuLsS?#AZkOfa{^_|X8&dZ9t}?E#6^0`X$|@8vO7(xRB12Br!sB; zv~T_O@v`)t1}7&c!iw}oBktzCuN0?|YXVcndO&&k$w$n$f6kH^IdTiQU4FCgXj9*viH02Y_c05UZ^SgudTZUvL!M>tdPHCga=X=UKksi?E*taLMFe!l>`LO{=JhW z2O(D|C{c@mNL`=ZAcbTFyq$c#+S1N*m|Q1twmiun!%hRkAA0vO~A#qcXc%fz+S9hA7eYypu^q@G#UPxmY;vr z*aw{crwR@if1M|*ECZ91Dd78w&7@z0a|vx`|Ly-U*&ROTb#>S_a{Bs|Q?+(0Kqem* zq!{L>jUO?G;EaCX()w)$L5IQCE3m(-Y-f^ybo}`71E%Q?FE1g;h2UO?hKHLVR;9Ra z8YBsL-S-sOk9_CvZ?WgFDE@5EP;hc`g0l3wq=W;^ zN)yoFB51_Zz&drDZ$rbrN!bkykW|nyyS|xCtJEIM*v8y|$f6AH*;#Q3@Vs4ITu9%_ z`uw|ah0sjoH`5BawA!9!c#Ra}Tg8@L4a*C0b7Pw<2Y9EBrq>UM$ zNKVLPARh|7=Qfml01~B5kUv9GRN>B*wlhMA0H~h-^dZ!4Cg|lc&_wh)ByW=Vqhb;g z5?1P_r>FNtTrHI%5d6^r0UH1W_n=pkKqp5kG9q~bUuG(6`CF)7pt@9Aar!c<>1#Da zAi~q%PfxOR4`@7`#K+$|I=Y{}*yyA`Hi$sFAx(Be=`)Z*f)Qd0Bg(v)^OR`ZLDUMI za=(y25g{SkugYHjc}rL;D7Nls^fkva$@z~|A^(;Sp~^?=0`u3J*lyGoY-`2nl3_xy zXDEq!JI3=>=z8KrWF z(kNH-y1cynKgMr91tC*S9*>*CYZr9R6vZw*|H=S%OpFJdw1oAiXD{xkAx;`mym2Co z-zSz_Y*cFO``_9tFO_o_vEooX>PI{3E}0lpjRTn&jGG;8YdBrd}LtWfa} zE5>HNiaS+2%RqB{d&(^iH{YOH2s+ns(KV&UGSITW!#*luP2S*KE$IpZRM^OE5_eVm zYVq|*Vmp*tc27#mGYw8xJZ{rOSX zL_eKvF7Jc}G5c2E*u~SKQ{v)6Uk&==W{$3I&oZr*it!x{XMf#%kd-CX>~ZH8<##Se z=X>>03M?trA1$L28VL+dO@Fh@r`h$5QuE^DhyU&B*7ZM?C;teWVg*_1Ug;qX3zZixA3zDfTikXr~fV85wbKkF(nFH*FJU1 zkw{eZ@=R}M^Het$&t-JZ=zkc4GAslwoB21z{C30CO&>Yq zl2Q}UE#hOVwTUi%apZk?DStEc0XsYU$>&GemNHUIVkLvpK=bbY;4tOb2{8`%{5qsZ z5RH`!w?k}|H2jB+xHCSf)`)|}uBnZr7FCh>a}lBPiEt zI86SQy>AeVhs*<;4N#wBnYgkr>?GD-`2oek#L2f@NHhEccBJuHWpBRe==Q%H;$eJM zJ@UOkNvRT%IW31WvCz=a+!Hn?tJxG-ph3HigEx`;G0yl$w!FmAL?IHc>)vIg} zZLgE_g#fJ48##k^a`noU3;>=Gl|q7A37m#LTIqsHKwC9CJy%9P8A%nH^p*X~dK9&= zvlCTR#0J?vV+g20_=m`XN(2`S&+X(1pY>ycBR;}TSJT$09pYFXt_NS9P<`0Sll9zg zQ+utM8A8;FioMY~s}Nvhoh_@6BsXKU~ z>w!wufkWff2Dvfqa$_t2FB#x*Eb{=a$bxiXU0vNL$jt)smI99tL}U;$C-rRyGadps zST6lGJ1aKl=2X}S)a}0~05MgqK$YPpjaXlk`vDT;fkb0%!v%nfeQ?8;g(CwJIBfn> zrn?w=Z)d6ATEnkMaP^DAibFT!GrqKTI$+#=*;YdxZu$YNUG6~)QXBPiHhS43l;Koc zrjCz-_@Zj>@ae%y0qlH0n5PNy~kQgybo>@LndZ|7Hp?qKMm z{!NhR8D)Ni%B7WFT$#tlx`qhmBnFOuxvT&Y0ml?*O(p);In#kuuU&*8v?_M`n-B>| zL8)&?^moAiCtc!~{^8-*jEszyE4aD2MGi;Q02!;++CI}P)weWo0sa7vhb(Zo0?2vs zzUbrPe5|aT3t%;lMePkldU#znwWTZYDCrp)f7CmfL)$|%{eKrbzI%WEn8HW(CGm#? z$xDHd<(;!#0|+GV{JlO{VfI)R6xmkaR`*#z^m_*f?Eqv%%E0VGd`^IZA6DWy4bz~< zKP}Z41dsJI1dd60OuL_LutNA7+GbDTVbWAxakOE?DR4$wUfx)UUmNixBH>jaG3{Ml zU4=)mXTE^({=HbIvTx%OwC4;Ux8N+sz=!ghcHfGSHHkDkn4C>IlG|w2OuHV5pB^x_ zLBVwMu62%+TtwfE&}i$s+%e8#{S;0Sh1j8bsJP(-^SObPc=@H6YVihg=LX*c`AFz+*p} zvg-}Or|T;RJ;DI+vhVl`2-e-8;{S#~b{vqBIsF#Idj~ENmY$xj2#&6_G$3V0Xyci2 zF?neo3V@0j0e&tELF|%P0x0EyzTLBiSKoZ-7OB*LtL#%jcoi&~k}&SpOS|zp2NSex zxTP^4d5NuWM+iPLh~!rB)8DcCKqTZbgprZ)4WJ4YaM;Q3 z+sJ|RghGlfa2{e3XC#OMY#%5aH@I;YgBkv(Uc=zJ)cagC)X#1O(^`+W9AEQ?MTi6r zaBfo0L##OqZim3|_h1wsz`_BVEDtLE)oa&GPWP86gEptPiEs3t^k#JS~ z^EAvZ!X-PnIDYhlwoPp3x=!lo#VN-RM`yt4z_t;y0umgM^&iT4OadN-64YKfMMZix zwrhG*o8mHv-3k3GOEL(zuCWm;%aG6SF8&>WAmRAy3l@Z0zW~{)cUZ&*=8QT2A0^EC z{2YnUB2@~g`e0?=67OF`Tmsq)74P?ic{=|<8IUS)OIIMM8^@{<2DFhI2ph!lIo1c# z#na)8OSowgAs$|oC-r-N?&TGzkJ&It$k28+iGq0Xsk*v3?+663&#J-F$k351&g`CLe7T50;MSq z!Y2{3bYM6F4+C8=U%Q-kr|IA(>D<)e8u1dxcrA#aJ;J zbR-0Az-bMre4Sl1E0+OLb#($z&9?t~HA2`LG5+B9+H`$oCr{38xN8=8bjWE4DCG9A zTaZ|-&)L=kbPNpt&E5m>{~v*6_Y-VR00JiPQHYo1uz2b5d;sRH9$4fvHIPoP@s)ap za+h6hj1&YyXZ&x}-%}UCTr~pq0lH+f#Fk;bBbFaLq7#9z@1+PxDW-7C?A+X04Up$b zEGI=*3E8%h$|4}E`KCio_FuK*Gp2`+j~yd-kSzEPhyd@P*Cw})7wZgr-Q)rlE6r

_NaI*Sax7HBF1JZYNT3ZCdL2!eFPp)~#F7|#Az6#g_I4@A8Y4$sXk)y& zAq^Y_Q0y_dd#3Pg^=XS6P(Z*jW9S-yry|6U1`&!yucjE-=#c)-k&_oR1*AJ8loh;G zL>tY47=OR1}c-{$rc(QK0I@uGBTWT8mk!e{5|GC=cG9 zq&s;)<&j#EOy9HZ3-2y?EXn;gs<4fXHKWbdBc-mfi8x(Qu_x-cego9umZS4<`;SsCg%$$Lj z3HTMV)D`(sEb5)k`p4~1;2?J~5EBv-LVX%Px^hz0)idp~j?P8$!SfM8g!;|bI9=T) z>6rW_br34`w3$i6lrsK(HFlR)kp3Z#XTn--y!bSnLbLYClygwk@6s3nq{`PI>6V`jbyZ0Mx+tw^RvMSp`QdED4E822aJ#BbJ)f>YG6+mdqc+ry>HnnKwRdzWL1`O62ufp_7EbEiwC&xL&>?4VH#$UP~EVK^=1JVP^Nqyu^ztJ^suN zfEjidLbm-14`SyPpD$-!nqql@O zQbM!LLKqlC2sHh_QCLwKO4~^3Z1c+;zO7#`xJZi|eyKppVbc2tSbEbQ1*HV&eqn76 zD#aZg3(Vp*S#h(&KdNvPkytG1YXp9KK?2`rX>*k(+!6H4+nufgxc z-{Q_fD7yb3X#uAsp2{E8I@*fA#qIDi1EZ}4iFlQcyH>j8h@ePRj$AURltD2_T9^OY z!heT8kn~~|7>_NPJT_e~olwDC7({G6 zKOjC+XGkZn^e=`sB5#AI!|eb4%Sf_yhnUjPWVRdGs^XFR=U8S<+~Nk8Af*R1wg3BM z1@dk>W=x;+;%Jp#_bY^auej@>jN_c0-#$`>^AH*P^%<|)`D+jGLS3+@ zZ$)11U=104@ZGvI@xR>lM!B4g{xeIj1Hnvqh;L? z<-57rjAo3X^t1dpB(%L958s@-WTlw$^U@)3jKqXQOH+_}HU~1rJdn9ox zJ}Wj*lOF)?qXlzL3&%QXoex^FVZ!C%%x9utDSh^&3GLHdy%CFP)PSEnJv}?d{yF8ow$73;g2OXnwXKN1J-{|P*6aj|-0O-GV zcAh+cen;WrurCViIB>B#p;^j5ew+ospb0DzU11WHj^QN$Hqt{~dFgOPC>gsW$ z+~`P}3Scjs(@+4JaTh#10Np4!F~{R`exkqlfzOfvNn8MWJ>PA|1H3i_X%PdDH3la# z>qWQ!mi;81_2v0#M`tHkSkdP7ARHpm3b6LvA*jQVAOm?1;Md4OMih9At79b;V68PB zOO-*9BCt`NKdv^;N9pv4l!8(9E7s3yr(Q@0*OCZe*arP=-^ndB> z#PS31icdiB1;{-D5rLN=yc0S02;@easO$Xn069jvHq11@O;S}1M~z3neEDJu3{#b| z>EdXL$LnO*tJit$hYWxl1ejHS@CBtFz;Xh}65WuYm63+Sh=#M?$IrqY5&f6+IyQp* zLqgzKoB~MctN`|xd7xP)J+Qk6V_g<|6hZ3nWU;5Ll%E?SH7X$8(n6NEg4q=^#7MFg z&Pn|+zJ#O@);pjC$tyW|dEo$jfv(Mn>{O2%!~zX2T7;9KuaOaIzHPi?R)SAWeedJP zkKsG#RD+(#elLJj7m^+U)(F1Nm76zn!I(voN+5O+l9F1?{&yJcgNQrNqe#k+a6~YI zlsf<_mjHFygrCnu;0&wF5en1PcD z2d9vH>^@=!y*Ka(1)!S|mnj`e;00&5yx?3m>Ks;f&B=A-z#7c8yrN<@#CTBlD7A&`@OPJZD)avefsw7}LwLau-t-+vgV+LtPfoMqCh zHgKXC2S&eNl57}(O845o3P_PJ>M#K$g@f(J9UeGp3BGHxoni9*mznMd%ga0OISucN zA2PKHAZW98&L=$NDI5b7yF4*L!in%Ufm^jf-mI-nqQP}14UVw++`GK#?GT=8={^b3 zFUYAeFf)h1k={Wd1As)=;D{W8(m_pUf~5H)>D|4(Ukjb#@RY$|f5UODzAZQ)UTObJ z60Szl)NqmzIkb+tPRiv6Htc0iLR-y#Z}oPTdSJ*%1+|M zASZ(tvnyhA;^)pj+qLy2y;1kXI0fv#yWd+mumLSCZ6!rMM-_6slC;qo_4Q<^cd@a7 zJv|B`oyM@isDXw_>giGZ7#@yJN(uuy{CjB$4TXu0hKcS!Dux0t6TC2t!^6Yr`i2G} zxg6E-qve&Atdf!&z-nY3K1AD|YsJeN3IUJ!OK$?EE z!@>U1wW+VKcbPIP+k8LJs}cdH^uFxwazQTN#wQOb`Je^ghs4D4vl-xjbSx}aMX2%M z`YX7&Uq(i5!zs@#bxP1D;nbHDm_)}^^7I7x>a1|0jS^%i0gpe-LPA0|%hj%iT-VzL zwycANyuG~(8X914!e~PWR@7uE zC-!EQ4eXM)JVYV1!ZMXj~gAAaLpisE1Pu}qOKnQE=AwF0Byv@ z#ih;c{HSdHhOpC^n}~==<>gC`EeLjm5C`vpxFba)=5;4puH%L?0Y2GV*~0w%jLl6O z0^Fb~u-{l&SngI%D2j@TV){kMX0=;`9-ykE^tN;C=g-wo&wAsjsHmJ-Wph;JQ5H5f zeJ^ZaJSgq!fs^Fx`h{6pfl%0_AzPjMESCDDvA-%4D3bj|o%q&O4 z!1Fk$^5;{gcCI;gMn-H@+v48*;$k~hV_lv7wR`6m7b^Pt5x_8D?SlD72GMqVXXhY= z97zic=GT&UwagtHxcxdcf<>sK^i0uEaMt}pO3G{ay0$hcu(G-;2*w46>mbL0~kcztICP%%?44h%eqZ@;8)+kKvrQPE>Gfh5D}++Rdh>;;l~eD z<@?&(-^$6!5pdn6L_G&R4rI9y4NCCoZ%$R~>zEt&b$9!L68-n=tp3;UoDnO2#8jW$ zmh&?6g+zT|u1<>uDvc{8=lLsj0Rk}ArQMl)6=*4+| zmp&=n+TH+qZAMoxDJNxD_g$Usm?$*)uA7f>4=;Z>ExRa##4sZ@7N%@4o?yIOOeH z8DC#{;<(wGuD)ZUH(yP(efAh%!0cDCtiwA}CA z=s*ZDz-e6Vl&NwPoIf7TY7Xa|Z)F3aCBw^F1j%Z3b5s9FOLB9DWG>v<>w5e7t<=<1 zdnc#%wl)+*G>~JwAYv`TL3MC5+kp*UUV1u=e6!%A6&0m&tfz$154+A^w?q~cAZXkH zK))8Croxar;c9qnG}Q3$a2;^T3hvcI5BODdk&~^;Qdm?pG&tx7Y*8<}9(F7T$Bom| zQ&MW`un5&uMNKX6 z8p*xq9vh|`V37eW8>z$V8q;F1H=XknmU!|GBAt(Cxz4eP=t|MC>_SwY5#PlK> zyfGls+&qbj($XV8f64(1y-h|YZ(v|RAFohf1-K#RDRXvrx7_~maUP(jXoE5)+RVRy zJr)j5Z&On%!-u|tpD$pxa?)YU9olJ}d2+8P-Ec}P zATW>xepCWfR1FOc9j|-;&JXZ{-n@y4io%05U??cy`5760*0I{`jQ$c5a6ndb3i|d| zP4Cd+_3vMQ&dewQKw_khdIV=aIu`esxw)f9tg1Cqd;9l*LkFLDi6L31vC?OcLB5=x z&gOMcS66?Ro=%f0==26;K4wt*kT3zIKE#7-@be z+d9#OpATYX6(;O+v`KaxL5x2Hh=haq+3G7HD{JdY51)t-ix)5606>!~8l6up5DQ%_If@rM?CYinaQi*ka3u%>9f`|h*c#x3f+r;rn)tE+2c3nj*7Do34_W72GA@_UB` z7pdI6_rm~0D%^8(bMtd@f}p6E{P^0{RRD)fV5ikuELktOUHs*5c0YInhh7*75C8nJ zcZP)&E%`BHZOyW%N&0B#+9U0*F0Si-bN|qea;Q4ee?NISK2W9K)wO&A%ccZ=Ai^Db z`rqckd+iqmTYrhlBcqHy%qhHj#RoIv>q06%ojzG=h`#|B8+{-OLbe-MU)UERm_O1N zGDcz~$Qj8e6sC_fF_i|L + + diff --git a/inherit_graph_14.md5 b/inherit_graph_14.md5 new file mode 100644 index 0000000..72b8848 --- /dev/null +++ b/inherit_graph_14.md5 @@ -0,0 +1 @@ +e21fb5da676f59dad2c8e6c17d3c832a \ No newline at end of file diff --git a/inherit_graph_14.png b/inherit_graph_14.png new file mode 100644 index 0000000000000000000000000000000000000000..6a250a7f09947cb3b14dcd38b3924b44a969648e GIT binary patch literal 2585 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_15.map b/inherit_graph_15.map new file mode 100644 index 0000000..dc829ec --- /dev/null +++ b/inherit_graph_15.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/inherit_graph_15.md5 b/inherit_graph_15.md5 new file mode 100644 index 0000000..3ad53ed --- /dev/null +++ b/inherit_graph_15.md5 @@ -0,0 +1 @@ +832e0045a934fc1f4324feb297685055 \ No newline at end of file diff --git a/inherit_graph_15.png b/inherit_graph_15.png new file mode 100644 index 0000000000000000000000000000000000000000..dff422eea3aa5fea4dfe4a7688a6261483a690c7 GIT binary patch literal 8677 zcmZX41yqz#*X|$!qJ&5a0*XpVBPFf0v^3IP(k%!IDhwr3(nyNL&`67;~6@fqy%F9VTLm;ri;NMzTaN+OCwa-=X z1=mzTRtj-}`JG;$8;wBRM#xJ&*6>Q+n0l$N;eLL!J(BPmtNN$3VoxpA@02G>*#j<0 ziln<*Nni4QvwQNnPLy_^R9848TCP1c)iWF>U}Ggc)%>V7i*p%&D?K>)DhtCEm!!i( zV$(Phsy0^Bw554&;@$;Uv9!abWasH*SIb{`WYTK?>(8c$o&jDuvuEgs42THcbj*A;{H}$y}dtTgsyhAI#?eItg1RBtnkdm+*r(m2wLH`W@2&0ks<>-_O z=H>oON88h`IQH7Sg&U-#EbQ#{vq8@8qK*y6jE(;eXlgyT+M1fMm@l>$Vb411ymv>- zS2joKhy0)ITWy zf2@JHgr=*5d09C*iNmq6u_g9nJnsl;+P*o@kJfskY*K=+Q&6-8lidBpWpb&%zdy%4 zJ3E`ruWEAsNfk>^&H zmWiE3hV_Z}72*(Fmfck7?3}qd)AQqAe;&7GRm>Lxu9J~TRXI#~tz^dshlZL>eskViLBAg^e2zvLiJ$DPG>?{;g@lEf|Nj2^ zmaqpw06r_St6-|6y16(_8$+-@Y|XEamvr%xT%IP1QzpmT4E`3jPdkcb?N znuXDer~W%VeE9Ofp6B7in_R|-qN1V#osu_>jsGa>4SUON(1^c(|8lh&cvBmrbCgo>8#N?;jLyjNlBZJ zw&z#+K4bSJ@|BI|WH5UM^!2HZLE-3h{roACzyJ+6x4zCcJ3Gt3V9HC~ibkt9 zoNfv~@;|Rb+@PgpXJGL5_AYf_(}E(8h5IO}s){ctU{kN>Y&85X;YgY)xuQ{Y0h ziWv7xX=&-9@psYD(OFqppN8vCR`Yo*I>|^#ws&?uroB3m2TZtESy{<9tfuyBKIy#?%f`X*<|Iuk%Q6ZnbKRY`^6ql4VK_Bs=Y^Vuo_%DB- zno6mf_6apP;BXigr}?XD7tw2@)Y392{~UrgiF-TVutf-E?0WXtg)6v}D|Byb!}Q z)X)oEAL6ruZ}UhB&n}|%gFy99~KtYE%8^ktgNg! z3~J1^_*q!+1DhlOU#thekeHa5SgyGX(dH_rFfcK-+aI@vQaajpD=RBkRNi68S-D2Z zp^?`-HC6wVR=ZdGiw!-W-Een-{?n&diN%g?Z#A59lv(xWIM283ZOzOSgz?SPxp;c! zdTvb@JgE^qJ3M*QB`Py*CQ z5ccGNZ!f&Yqf7ttrDG3ELr16M?ThMR#bfrJ-RH zUh1CJFPlkfaR+K|2L_%Yi0H+_%E}%>muA4-+>RD#;nlqt3GjzKbCPTlHB)b z_I*rjELO4q#Vf$L?|=&q-wLnBMJxrddXJxv+*2~AI(=1X{Yk^KinqJ?)pcR%SA|jFn$E3MwGFTb;qq(`Y zr$@=qdx89CR~MUGRC}3#~W+ec(FY)z4VH3J-LG}MbmEytZZk0Wk9dS)@T&=r4Q zOw5o&|J&_aj}0Eb>$zE3a<;Z#^YmR@O7Af-X$$`YqSiRAahiS8%KzY`+;vI$k=NgJ zb4$z4{!CdVzuul6zF1af<`4BR4?82p&za*njp9Z}M{T=w$7SCW(S8J|4GEUBvB|r~ z$OyNJqzac|;oyinI`U#+V=HjcS56i*L9VU(Jm~7~jyXCydLYn*$}SwA#^$5#%3sUN zQ?kno`pjH4TEQ45+%rVKxL-lI&^8pqH7H6Tt%fKrE6a3W8{TgqTo?vzQO(*t%IFbn z?M^G}2UI3tYHGUbN7GrDdE?zPRQQ<&wc?SCrT%cV(89&M?kNQ_L!WbBm>}Em>bcCV zjUblqGty3YZmmLkmvpPX_T)WpEgXDjY0;;V+piT=X%>^ORt*h8D> zB(O8DSm6xt&c@`-Q<4m@)crm0S|7flflH8=FqdQ+2>SFS} z^DB`SjYN9kI7t-wY+b!C6CTGm^n7Csix-`qcjd)3UOg-yl0IG}mx~@+ki!W#c!W2C z=Iy+XU}mh7>B9BG->dvjBqe7q&QG^OA|o4T|D`j#ue5}a4soEi3GUvz_a_b{>rme2 zO-ZvxQesK`hf-#hxChUgUuv;lq;K&#*CxwaztwtWnf~}%x;wWZ!aCrJ)oVABfquCs zW~|gq;ZJH_;IFX0x7MV;WsXA%#3i9cWcVlHpw z6GwI(Gqp!R_+TB2_2|{GOK$=Qf*vMDCg*iKvZhaZ!Zee;_uI-fh%x9%)- zjg^?;0d@ZQ^XG4*|5;!NDbrV@o2*Eeu1TjK9lgCwVq&RX@tmZTl(HbVRmHxY0wO$e z`YjRr0-CyMy8dN8fg$mS_;^_$n8trv`|XtgRO=H}sPU#bS65egIl1)o^nmqsdteF0 zXU}dd^`mbT^x83BhnO=rvPMcN$+~F@PoD}p{YK#9 z<6F+3X?1jTeEF|6iHt-!bG=mf*VEf;HT&bO@82f8z4bA4xo>9-%Vk{L8|35`dU2_# z7=GOlxU87C?zL_u&}VrOhf&*nwrk=&v2)QlaCL$ur zagJuK%r9(wUTIGvARrLh-eS$$S=KAY>fzxrx3UgG0H-W8(o3 z8hMH`6AKFqU!_eUNMbmYynh<1YB9pi`}YVW_#LNVeRd;7;48@BUNQVV zq-`V*mP*mAmqWL-h4-7!lP7NkA3gdB1uB*08>R=_4Mhrt$p#lb*qY&FV8~TTiv#u3 zbvWbC30E?8bmV+_uueh}H8`l@?CBZLZPpeXEC=4E`$p6DeEY&&Yp7<9fq}sSxZhgv zZBM17g6ejE3D0eAa)3#si290;{Q+|%!Ez1`MIZ&b;*DO}=vDdb+mev{?Cp&Q-O&L| zZ4P#I?)PtFYT`%i>`EA^I-z-wK;fT3rF{bE4_y&PJYu>S%*qlTT1iR$0aKe{lb9^* zxtSOdpDj2yH`g*etc8)0)h-LjR{p|l@bi;n4xLq5`uh4*LT=26sanr=V=gYAJ!^!| z!MePf8i`D1R2=*Bk4Z^glhv*_dCafexpPNQNa#{AoIWlwU07r!F#;n+1)UJk{|!fT z*Wg&Cl$D9#vX|3kBk3?g+SAh$-m7@HIfaE0(3!H4jGUaPah-{B8}$v|?;}S3J%Md>*TwGHx0HroDpQdPTIBz>2C}c=;4BbxxjQ)-pB-%@;M$n_zIyfQXqgqUirDcz zTH!eH`V7r{Es@>shhSh*z$t!OtsI&DC zE&~|_g&}&ol&l@fE41I*{QT^gir}5zga%pmc`XZmGdTWwL*jrO8!7_a_4RedUGf^Y z73j=MYa=MD&B^L}_wRFiZt7!pw6v^j8?0ph$ixIq0NCg#KppTSHYrWU=}Jlb;Dq|V zsNF5wpyspHF#A#bXQOInF@!0#_-g^crO?!c1D57yZf$Mtm~X2aY#x{d%Y82|FQ>o1 zAD3CgolHOzDW{6adwB4trY>T4g9V995%w%~m=cnSVDl%M&Wsd8rlqCn77WvIDmY6V zzv8DNkT~{ZQF!qH`Rrn9c*X?o7~?J{92*H^X52Ps8pXlBwY0aluiJgrF4Dil#q|Ni zVdTNaL>cH{@RHVg7eLsQoSdAzN@fe4vBAMB%^dvvaZrtuzlwBQCnl0$(-YVyD(oml zefGGXTjn)F{p7;k*Fh{%pkF;Oxb)`DC4T$S?^*KESBQz1K-Z$fRhMlJFsa#meTxxB|mcg#Q%aC_y;nJ=-Aj+Ae`XfU}He?mewJW<#EUu zjt?dr^A%@^nwpxxM(j?y_Lf+5QJn9@Hx|Dr=HDj3|Ef&quGyp$9fW zapUy#G|BIKc5ZIcCYDAj(UmJ-4g!l^#Ob{MMA@Da{9am;1-5tg@W=rlqB-pCU%I|HR4vs)(Y`i+;|-=qXQ)hf5KwDWn<3$IkiTNc=`h~LJflc zlO{a+L1__z)*o-L$tx>cPSv=((;{668C6pC=dTyW_JEMq-V?d~g!A?L*NE@566q7G zugA|PNKhGP{a>u)Sv>2Oz)%^=I=-H^7SX>w8EGuREc2f3v5{Kk;JdJzFio{hOHYd* zR3cu*V-^(I=hst|UpgeY^{p%u?meD2396JK><==%EUa!qh`o3?6gqq`@@r=C1Nj2+ ze32p*d84c9>dh3w8(gk2%I)m|DXLtq53094a}%B! z)8KbmAn56^56W9Ee*EPhchkZxCWrWJ>f|SPC3$(mp7^k0TP+@xl$4rN*)x{}fzVu{O8l(uqN75Y|iBsF|VzG8_php||hfYy1895^H-#Y`szi@vrdN zD{<5Fa%)`;jTWgOZI%oEn9bF#!GD{Er6zVzhl@Vn=Kiya-%O264hW*yo`u$+aj zal>(8I{%?XOIXTX^j{T3x9eOeE95L{H@!_>>KR35aFR&{x^-HVMAkBUop zbo}n%ZN?zZ{z&+F2 z-Kg26zG(+hQ19VvN;gYlGrv_Qc6obt;TaKRAt0FCcj z&jwZ*A|g+0v;)i<8^7{_0r)-qLCZpBQ(D&b*F903NpF=74YF&P57r;=^4IyeB){Se5?V|g2L5~Q?0C03O*{<)njkT!RWYbN z!pFNil274d{~5cpL(Dy?Nejb%?Fma(H_ zZ-#WJle6lJKd}usIb#s87;|Nb`v^Y&Wr?M2Oec^Vd1_~B5xFgMY4Jow)dHoldqFR zLCTL$L`0#jt!*<_nhpA)1123(Qd#BY8X#LB-U<^sP%}2 z5e5?CE9lIhNOD%VU~#ePn>TM1xhMTE{_T9nChqvEnQuP$MeS0Dx{B!iyu3V$HQjRS zCqYE8htvnFa9iIUw`tieu>)VHi@ery!w?|WB zB=~=IzFOptR?Nww&y9B}DJjWfetJ?;jEbLb`_vmgQ&*Rk`g6RL7BBv9MTLQZ2j&3Y zb0JKM6S#PI3SM5{f`jWo@eDvrQ|-3$F*uk_r&vPBa}%rrP}v929X}y8m6kGx6mI|$ z`kz04MuG7`!h%6lD@#dL+K({=6zEkvheru;|h;Fh;Ml%rEEwc5tu%MBpoqc`JxL#_Lj!;eNMWU>)hZ2 z0}YMDm@(!0GloUo$-@KJ7+REohMypySL`%Qmd?9HBT_lHxw$!z-v2BL0&C>Whn9Wc zoXrsLh-i^0lw*Z6H32UAXg6St_j_k7tI{^6-=G0~eSHz1cx`S#63f8H7Yi0(2U;|d zBMFKS3=;v^8LTT;uVzTTCmL!q&Z7%}YXyOV$GU#~Izqz4=bGs)joCL{jLaXb3T}4Jl2K*Oq52yaO4^V9YMWYRV z!eH5QV3m8TL!pqo7hCnxAzWNtdra}Zc54@F^bSpEPJ05LST?^S92y?0ax^;GUz3%P z2xzS-6jhEp5HNl!G`zRup(apIzQ6&eNDb$Pf9=}*-`VD~1y282`imnx1c0QaBqbnq zT0j7zv$NBBra=^DSymw0>?glPRoIQpZEdMQWrAN9<>uzj+1T0LJ%)LwI#!CXu!KPG?;g!Z z8hK7>mz6g*iBwM(@H@r`HLJ$db^{ye6dPk*qhL!fFULr5P}JBlMsIxf`eh*z$oAe{ z#E5m+5TJ?UiJ9}Z04!`^mG-W#(EYWM=(xDH?u3U4e0CI(q6btE3%IQfhyVTSROZN{ z=>cOUaINi0jt%(6{01q=hq1sE1KizsOg4Lf;S}gO57NS;dU&C z8p%Yj1S65q+Ns4lk@r(mQ!!Ht7`&B2SnPAS*#iKsTjRz8f?s5>PjbZIaENVVD__^P zY|dqRBmEaN37vI+#@n&|6M*f0uv+Ld(Zk8Wv^08zW8F3`W{?Ymtyyr1m@y>=lW!}n zF~Q>k5twHI5HQgorKMGZ;Ry^J5dC^_%G1M%Y%8O!XE1qs1X<& z(PL%@%4uRsQc{;8y1+~V5Rh2+L8+kqLIA^I0>{k3!Jp&-qa#-BYEBqV{ejK7!^Rf& zD@C}>wDl_HuxH=Xd!4N0LYC1oGm{3C_8Mk3Hz+7Dg|7=|1-6sVZ-0M2Qk;>MwaZjg zdrLtHjhUO`24V%kdETI*QCJ%;94ocBCL3|fWMv?`K(`F{cj9WLTQX*U)=CB!H?oEd zrPN}Q*m-%~8gg@&W+>TojI~Ef^ihyM$%Iig0TrzYk!4e0=DOQ$Gy)=0`A{(bd01c* z9wl%wz)Y;bBCQG$Ebu?Wh=sKsAhBWhE1fTLIOJLW--iwUGfU6<@ + + + + + + diff --git a/inherit_graph_16.md5 b/inherit_graph_16.md5 new file mode 100644 index 0000000..80b4995 --- /dev/null +++ b/inherit_graph_16.md5 @@ -0,0 +1 @@ +484eea1a720a64d63e40416ab67a9992 \ No newline at end of file diff --git a/inherit_graph_16.png b/inherit_graph_16.png new file mode 100644 index 0000000000000000000000000000000000000000..61f75421f8178121bee03fe83b01978c197a3ae8 GIT binary patch literal 9077 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 + + diff --git a/inherit_graph_17.md5 b/inherit_graph_17.md5 new file mode 100644 index 0000000..81d2a51 --- /dev/null +++ b/inherit_graph_17.md5 @@ -0,0 +1 @@ +a96da8df1bff85bd45cd95dfee4dd63f \ No newline at end of file diff --git a/inherit_graph_17.png b/inherit_graph_17.png new file mode 100644 index 0000000000000000000000000000000000000000..e343e975b8a802111a0e31b5f1f68c20f037ef97 GIT binary patch literal 2348 zcmV+{3Dfq8P)AP5?ZWO#mWi0J9rvu7JE z*TxNW5(orA0)gQA=%vN;2N4b6hULN_0rhd_%$Z-F4bPv$#*G`lxh@>#Jb3;xcmeTP z1uq~TtKbF1V->uBc&vgK5RX+1`56DVpwVb>{P=N1L_{DeDr!hSrBaEHA3w6Wv$Hc6 zEn0-6q$G?R_tziOPxIHG%z*<3AQFk-@9#gXUqL|uR4Ntb&6@`zLS0=Q($dmUU0scn zCr^%2wm;AQ{reFW6$L*(zfryJUoW8Q>S`Q5d>C$SZX^22<#L3Dg|T^8R~NFgv;PPI z-M@by0RaJ{E+DIWAgxx5#Kc5gym%4e;o(@fZXGHsE0Ld{kGQxvtX#PgYPFjAKY8*5 zYuBztSXda+($Ziw8kx;tFktWAy$BBv$M)^p@$TI_X6xwaKw4TFA|fKNb?a8t)zvXu zYilcZ?b?ON$VePKcn~*l-o(+PN3nC~PP~5o8vFL`!;KqX-@q%CO629`4H|z7Pft&D zbacREGO;>KOG^?ZkBaegVh2u8jZMg=@N2tbD>hH(A?Y%xm=Enj10uY#K2@SAv!vmC9hB@;NjuH z4mBku1;E!&dthK7nwpvrA0Lmpx;iKn3Yg7iba!_nC@2WEwY6BYW(|ZwA^iRQ(bm?6 zFJHbOFfb6+)zyfOj)qRB!>U!QpwVcMoSY0dH#cnFycr6G0st^|>QrzXH)uSN?(S}! zKYt!lsT4LgHZU5ExOeX!R4Nr_&z_Cm-d_0m`9Y`CVa=K~Fqus7_4S2buZPiS#O2GE znc#hWeGwlYkE>U&!eB5!E|-JjIILg49s+>?ix)43$z;NpFJG`=!2;;@dc?)WL9JFJ zH8mA=b#=qWB_}6i#*7)*v}qF*3I#rW`ZR2AmUY1b}*adMGb1k6c__sHLTah=}Uz>*?|1$3#SwlaoWf zzP@bVPoF+fOiTo)5GkMk&%>{nMpZ0IV6!t$ZR$<+oDB_X!YvV zL`3A{<3o4v-W{@_39N75uHALntXhG z`t1=C5<-U#9b&$vrKQYv>eMOn^70~`PDf|Yo@MK8ZEYkF2&lfke$W}1&1UlO@SxPx z)M4X@i2VHg=+>=U-N6WWEj#4!C;tDgdCYtPCcTiQPp2ptiOaE-o%` za&m%PE{9O~znkg8g$q$%U;o2(Bqb$b!GZ+<0DF6TNTpIZIyy4Dlamu95($8>Pj`L3 zeFOysL8H-N`SRruiA3=7@?y5&;9#Vrq+rUFDR6alMN(1{v|25UMk9!boq^?^LZOiL zG*hQe9WrhpBjsjUhqa7q6K!W_hbvdEz-Tn$*|TTJ$;m-TNC;lNdIgb4gqD_;e*XFS z`H;zEu(!8IP*4z#9Xr;~&T$;hoH+xXPS9831~O7^mUURmsJ=+d$jE?1B7vQq9YR7vuw}~@Xti2={`?uCp`o~Q z=MHLWY5)L*g@stUbSXMJI}s8Rf=7=Y!N$f0bLPy!#EBE3R4P$WP=F;%mf-g7+bAh1 z0RX&t^M>8IzC}Yr18dwZ$3IG6zLk}gY_BUg~wzia+nc2@K5{bym%Zu#o?I|%ak@Y?M_U$7Z8yk{HBs6W>G>VFf8nOoxi^Y_k zo&C-6aJ|yNI{R{RbaW(dZ*Sr_j#5%mn6I<5Gbxoya(8zp7Z(@u_4TF3#zrbFEhQHh z7m`Y)GgUlE-t3epFdN2dO8zOQBe`KwY4$7f`S5SY;64I z*wSyLIxX`pEG(qf)>gJ=`A4d$sUeL<)33?@`0*pD)oObG{ynR!q@;vCeE2~1_4U-; z+)QOca&mHpjUyuJ?(U|dq9ST;ZXPzbq3RfkUnZd65laD$1wZ>KfAQi4 zi9{kM5Uo~A4h|0N33n{{rB7kM8)C5-uCA_Qc70o0Tg;p}^M~UC0s@ebkN{6lPq@3g z)?OR!DAJ?fOxEe z7Z8tC@c$RaV--F+p7n` Sub2q{0000 + + diff --git a/inherit_graph_18.md5 b/inherit_graph_18.md5 new file mode 100644 index 0000000..e17918f --- /dev/null +++ b/inherit_graph_18.md5 @@ -0,0 +1 @@ +b442b7b20670c3a2466f6caaf2873051 \ No newline at end of file diff --git a/inherit_graph_18.png b/inherit_graph_18.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c352323533ee99fc7876231aae6a9a6520ae81 GIT binary patch literal 2836 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_19.map b/inherit_graph_19.map new file mode 100644 index 0000000..aafa422 --- /dev/null +++ b/inherit_graph_19.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_19.md5 b/inherit_graph_19.md5 new file mode 100644 index 0000000..f11303a --- /dev/null +++ b/inherit_graph_19.md5 @@ -0,0 +1 @@ +ec695d76543f5562defd471b31952a1d \ No newline at end of file diff --git a/inherit_graph_19.png b/inherit_graph_19.png new file mode 100644 index 0000000000000000000000000000000000000000..95f492919d8cd41f7e644677c0f769647b7881fc GIT binary patch literal 2746 zcmX|@2{=^y8^@1r42@CQGI!8L$`X>0C1PaAZbDP0OsR+niO6Ib`xCW;UR06@$djdBLB zPrySN3IWeqEQ8zN1%f|sg#z||?@yabvH(ET-x_rm6G~dnBiOp!l<8=xqr1+8n3b~X zEcAp%(?$SDPLu%+fgjmsNy$Rk{H2#*nHdTE3uuyo?a+Lr!QouGs;@8n)cJS20lf-z zXKzV&KYgS#f?<=iXofw;-f0iG;=|{;`j0h-O%2ZvBC{jH`#K-?e!~Is|J%qngcknV#W6>DWG313dSlXI;jZD(?L zrQ27}?~CpNy|u?MG<2hob=NeapG%i(o(mm=UkNt86R%|`Uw4v~Y+o|y$$FP+@NkPq zk3_|OZ~g`MZ`sjvc6P4v>XP2xTBP1_7JkJafm?2t{CVM5g;r{nHv%_Y-zDx8-B9Zv{^*wcd0Rft4J7i;X({pq6+s163KPf^N z(Gxpu|BiV}7vK5#h(X{C^v#<$Pcdr!pFYLqLaNQc-~@W9c6N3vKYqm6s>Ik7N28UaF>2q^l$4b2Zmf7}T&C~m za=ByvmtNjFFwJ5ekd%zw-i{bzGKg2+(6lqIK%MIS3!` z%p{FhS6ho8t@YdBb}0Ori6&M0p-_T|KmO<+8%s$@fJ#bAKBZE{84N~gd3lWEF%$|F zd)}BpAUu2iT=C>d3E-+;9(VWGcUDpQnP@B}4x>h_tJBXm%0$P?8HG%hQ=9qQwKKZD zIdl)B4DNG~z>walQ?JsHgoWi{pI6gw6D3M16ia)1`0skj$w{cL)~UEu2M=kG^Y-=z ztgHlpz@VTL{u9Q&6OFQ+ot;(g8faTv z!LI61_LKXq+Athp=icY#5Sd9XPhVgE+C*bmjwxZcl&P<(Dsuez@hU83W3@|*cAKdQ z>SkWxcvwkEpv3-3VB*c1k$|snga9*te=R&74@Q`gn=8^V4kw!P)r`Q(hm*d1!A7jK z3A?vMnn;QYO*~jUK1RQLZS1n$>8x?wDTJ7aAioYG6@?03Te!e)28oGENWfyTP(Tb0 zAE=v*Jby4TmNVX9g+eVaF9&m{Efp1CR8%Mv&D$uWqod~+KT(v5`q3Tf3MC&uIwFwB znI->5E=0~C;E|fTy0zNhkK4aa`F8ztyl8EaDbZiFyawtnv2`3=4CCs0uH2QP2rBeo zzBqd>ULkU7NvTdds}m(9B}Jk%G~^wMD_CFuuPO>A5B`$Y!Wln*uGPE|jf>p$8n~q^ z_^9$qOYcaUyon9y3{9?~k&!nD5fq9yax=faf{IZqd-g2$QcY1&Oikx?ofnmr^7?KP zUKPvtx@C5=z7l0{W@t1NXzl0_*66~wMGK8>YOAWMy3_DNvwivLpof)@9J#ASyoAN> zmyzk%?9DwX464o#fC>tPG>p$DE`i08fmROP-DGFxQ!RT(}tcdlH`}CnwV< zCUA`#)5-7q`m7=&&uB>ROG-}Wf~=ZeUmk@*p#lF&NJ{A0#fAk zX1*ywKCm81CX>-$5ljW3L`QnA>Xq~@RSlH;$Hj{Kv#28E!bs;(Y` zQDZEP)PO;AC&ItCUDclY+8*y-A9w^Lc5-d49*{2T$w-o#TU?BBE_w^FT0)DOgap0#B=ZX%vmJiPx=;=v=qyV{g=+GemfQgBHeV?fW zg~8scQybs(C?Ju7D|4Jz*Ee6; zz)C)thzg!+ivV9JONy!*8T2{4)}_~Aa6)@O$}2A=JG>>aJrGO7y0t#%PFus z4IcOUKo40)xKeScM)x_kb$^M}cn_-Vcfy8+)eo{4POhHHNl)*qSwr07Pe3Wg5{Y(o zDXMK02Py~uLVkJA?)|qwU0q#U@S*3qiTTjo@fFJsR><$E%V>MAX_YRQT_^z+d{ + + diff --git a/inherit_graph_2.md5 b/inherit_graph_2.md5 new file mode 100644 index 0000000..47fb3f9 --- /dev/null +++ b/inherit_graph_2.md5 @@ -0,0 +1 @@ +8fb37c2d59fa062c6664d283b95aae56 \ No newline at end of file diff --git a/inherit_graph_2.png b/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f174ea32aeeb662dddad244cab4e2386b3acb442 GIT binary patch literal 1941 zcmV;G2Wt3B7;9q`qhYc*01}zv1Ct^S zp~YyT!Jttd05wj51l|l_jf%lsQ$j?1@I?%Qm{O#g0!=}{6l4-1Hh>_wzK0vmM;Q)W z74Y)y-_zcEt*-pnIjg&?yQcty!C){L3veTvG@?t>pOSubWC0Q z&vYk&K;SPB2>x0+S&Stn4#4B73p0vflKlMqMOVXET2fL{W?dI9u@1%`2rB{xD*^^9 z0tQ$SFu;m{f&YUdXliQ0@#Du)T3R}6VdXJcq+2moL*nGhQr z`&+dwM$DgK#TP+lW+sF}A$IK8!Ry!3(gHs}Kj?HigoTA6ARqt_A3j82U?4_DMqsg6 zP*YR$TeU4l%%5S-!=jZ!b8|DUUcCybRLbj@n3#yLurS=deVbcLNJxN}mly8cyN8`S zcP_TnW#gB30+Y!ErBaCp4;~;QA_B*b9fQ$mL`6jf4jnp#n3x!7wOY=FId<`0ta_$jC^Pl$2PF^?E((>gsUi$`z~J+}zwy zUS1BlT+XfO^?D>HCnGvK8jl`5T97`zyr!a7t8wJW5eyFx^TwRK=I`FULqb9Vy1Kd+ zc(-Qfmy5t+v7o4^2pWwBDwPU7Jv~q;6v)obMtpoc#>U1F7Z=Bg4-O87x3@PE5)x2W zR)%xu&H(^MM@Ql7>x-_gE*w657;SBB2o4U$#KZ)?fBz1De}A;LwjwDhiQC@$`}^_j z+c)_7`l7kH8F6uO={&>qQk*(<3cFG)1YFPsolZwmsgw!|3dqjRj+&dBIX}LbI-QOHP(wol zujc8fR4P&`l`}fg-_jGfy1H_oxe|#4VzC(B-rn4Nk^=`0AS5IN>({Tx_U+pd6coh$ zs9`V|;Opzl`P$ptbKC9v_wO+_Hpac10id~Vpu^9RJ`RMHIv|1k=9Q;SR_U_$_v9U2cd-e?B;o(-c+}vDBnlP5TN@+5CweERtE0su!xN4UAU;lzm(*tBUAE?l@UZ_GvKXLT(wnQU!sDJLh# z%I4tUKwGwKA(2Q#N~MzP1Jcve$;QTpWHK48UAvYJ9y~Z_Pau&#+ZmGD=Ukf zoSewT#f6-mooUUQHFWpxT`o_lRBDxbU|=9=G@5z!&6U^mm<(|_TczBp=_K1i^M@Q-9%a`1IVq$_C8yiWh)zZMgz>IhU0|TVh zYN@ZUZ-#AfaFDcGtyOb2Nnc+dy?y(ZMn*>H=FOX25$JR}>hJI8{Hm&|sH3A}#&{}5 zqmddL8)DPRr%vA(4o-tG^m9YYW z;IDu4lSQ{~-GaejKv7ZAa!dK6NJ&Wn5ycf27Fs=Cwjz&>B@zkT+}xI1#=nLYd2Bq_ zvviEvS&=&dyXg6bjADt%1Q{Fc=KR bpUHm#{*c)V9SV&C00000NkvXXu0mjfN4ukd literal 0 HcmV?d00001 diff --git a/inherit_graph_20.map b/inherit_graph_20.map new file mode 100644 index 0000000..439e43a --- /dev/null +++ b/inherit_graph_20.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_20.md5 b/inherit_graph_20.md5 new file mode 100644 index 0000000..6adc4be --- /dev/null +++ b/inherit_graph_20.md5 @@ -0,0 +1 @@ +89c5f2374b787a75e17822b4a2f785f8 \ No newline at end of file diff --git a/inherit_graph_20.png b/inherit_graph_20.png new file mode 100644 index 0000000000000000000000000000000000000000..0a1d62c9c62ef67838e6b2d19a57828b592d9836 GIT binary patch literal 2424 zcmV-;35WKHP)&bTiWgK8v!A4-q~ETFg(WO3Y|!i6G1kGtq7iIjvW!dE z#AF$lu!+esE@2asWn980Cd;^F!Y5{Vc{xHtLU8x)UA1;ZggbZcAUHS}o}Qiv4-d!l z=g)tMhQ`K5xVgD$WE&F`gT%zdQT3^*KZ!(wb?erRSmRhQ;S=-t@#Elfxv;adQ)_qh z=uzz1vj;P0&O}g95T;F=23J>C+`fHV$wn*|YvfnaR!d6@Mn*;&wJR$tLq$c!uyzCc z{4f6GaybeM3rDPREST_#Sy54ewQJYH*w}bTo4&q2Bqk=}(xpo{dGaIz0s;^h7l-)x zcnF0;#_rLhN2sf-)5x!)t$~37u3ft}xAKeB9TBK5a7y{EAaC2 zLU3>}-oJm3+}vDj+_({betr;%M2!8@r%w?S6ol2QS0g$)8gjXusgucMIDGgpyu7@y zfB$}b`SOLS`}XY{qNAhXUg95?`9Uth$;#Nh7TyNHjEM`UCq zK7Ra&BS((l)~%mUyu7`=k(rsPR3;+ucs#s)`&KEo;NW0fxNrdg5E&VX4<9}tDk_TU ztGKur+qP|khldBYZQF)duU-vm`}ONrrQ4*sI0qZsoSYo^`T4=u*B9yO=}gT1eGcbu zD4mKZwkaqmz_Mk_l#al_K(+JGul3EFHwX+2M16hzpfPF6s1s8zmm@7L4H+332n`KI zV`C$noSYyO3bA3s26T0GAs`@t5%1>a26JV?d?%fQGtMf0Mymh!QbB> z<>lqrw{IVejg7H$=T2tOXU&=gKA*2t*3!~KR8$m>965p|OP1ioi4%DI_%V1q9u_WK z2msi(Zy#pQo{b$lcEHWe4KkSwPEJnX^ZD4ibt^a=4wf%pj;^jQ72D3vPUPq34;$xT zW1EqYf%y1%Y~H*Xwzjs|xN##&N=lUaROe5fPDK>kSXo&iE-nsnadC)^jYVr~E3~w< z)XsxkE=NvI4njjiVP<9q9*;NL)KW$u5cr3NhLWa;#bV-exg?cJiHNAEsE7cNL?R&~ zqSDe*0zf@IJ(QW5Nd^W6)YQ~OL`2oq)%5uBVr1CkpQhB*RI;?Rq~6|Mrf%7?Wwd$oW+Eb*KYu>mzkgq&SgNb5 zNhlPOhldC8csw#QGouF&9x(Nb7A>NztSllTs;jG`l#~>vuBD}gI2;aDS68dp*4Eb2 zq)C&8jgyFI{rdH^d-rZ;Yyr^c&z~84D=RBXPfu6sQ=LC`I>ll!&6qJmrHvx7v9V-p zYfEiyZEEMCUu#)enMPyXPiSZ;2?PTFfq6LOOB^F%`t<3{e>gooJ@EN_n46n3=lytk zdSbZ|1SPZmo7zhb+yL&fBg7?wzf8ynwlaqG7^!Ik&ww`ICkt9)~s2BnwlES zm@z}C&8%6oU}R*3@bGX*BofHwauCt5zSPAz7}KUrgNca=bFQziuW?+X(Fp)|?%ct- zbLSuuiJ+sSqjnx#TwI{5s|!m@%Ms}tieHkLnxd_(jqBI1LoS!&*|TRzO-+TnyF1Ft z$}n~6R5Ud;DcR@d=EBrax#QMA^3bgCQTZCIMu~zXlSTnKY8-x z5ydi)|Elx#>(>wn1h{wa9`nOcHxCUB4baii8I@K=#&lOM6bfN!X$fs@ZMeI;W7n=- zkVqux=;*-8l`C=Y-aUN!^a;SvWLdFd1=`!&;qLB^f`S4}nKA_y78WoxG=#UeH=aCs z0#{d8WM^lixVRVqP*YQ*b_J43rObw_ziek`hpw(JL`6lRySp2}&z<_&vu81L=1k0; zJC|wS)6)as=PJH<@nU#+d4bR8BO@aNy}iBY>+4goRYYB!qh&CEn&=!zV`C$He0*@` z%o#X1{QJ(hx_S83jA>$qgoHp#OAE7S&&J%jbK&Xf387HP{1OixI)wT2=fm3C8jg;R zNJvP4si`R(9UT!75dj+;8`#*`z}VOrE-o(c^YeqVvoj(hB4BTC4=XDxEM2-3PEJlk zYM3`~9xh(Is8rV0*2cq!50RCX1wNk-Gcz;j>gwX^)vL(L%3@Xm3kwSzJa`bdZr#F` zEn84nSO{xtYnYgrASWjWmX?+X4h~kaRYYB!qhTn2!|5E1*w|RKw6x&n&6`-YY87)V zSg>HodHC&&bn_#Z%c-!ikU4K}Z)Y|%L`0pPos^fC$DH@}_R_m|??@yPkxV92=}#t; zkw_$>=H_OVy4KcK5{X1qS68P}*WBDpuU@^Pj*bpGb?Owe`4Nl7)Y8(z*gbjjglcPR zRm%NHBoZnrDx${5Min33-Q6S>iS|{OIZFjjP9NEF))3 zcjaTnP~VZT{5?#_6_e%fhfPeDaS5B4EaMXPyK9+v+h qTrOAor!}y!u&}VOu&}U9eEtDp- + + diff --git a/inherit_graph_21.md5 b/inherit_graph_21.md5 new file mode 100644 index 0000000..96080c5 --- /dev/null +++ b/inherit_graph_21.md5 @@ -0,0 +1 @@ +34147b945b9a5fd99e3bf3c9cf89afe1 \ No newline at end of file diff --git a/inherit_graph_21.png b/inherit_graph_21.png new file mode 100644 index 0000000000000000000000000000000000000000..46671a4103c45c2e346ed322e7fe2669555d8988 GIT binary patch literal 2086 zcmV+>2-)|EP)V1A5~9RHFc_nxCT`J4LSI8P>MP0~7yO|S6ogt61qmfqNJUeSw6S3=@O(dv{X~|p zye#sPxqh8F=b1D2bIv_8XQoqtfq{X6fq{Wx@x%JPV*mdAE-V%+^iPOkSUeEXtD>T! z&%f6F=l38MixtXZvHo5-SqzJmL;&}Gt(ahzpA;4r&bu0h#YuX4`lR*j1=hjvFNQG- zgUK*vVK5oSEDR>Yn1#V)7_%^#%#t@tYilb~Q&Uk^RyJ)M5uvoS6nppXg-9gA!Gj0! z`t|DtQu*&-$(toFFAr=s8^OWB)5b|85*#^l1Wry)NJ&Y7y}dmmBO_5#QnElwXNE)~ zfm|+M&|^;dQf{fx-rkPWr%%Jh#bwHvv9U2+zI+*FWo3wtjs^fECMLqs(GgOq6bT6l z3nkZNYHDh*apOh=1qChGG0lFj2n-DLX0ccaadB}bb)Zx#k)53lolXadM1q={8hCno z;{E&gkVquBd-pEZtXYFqt5yL3UcP*Z+}vCg6&0batqnmzL9no}003yUTIA>FMGZg@pz9e7>>l>FJ3}mo8!b`t=A22{Gp8<>iHt zkPtXKJLBllqv-4F1E0?a0QC0uV%xTD@bdD)sZ*y+%73O~HC4`8Sy`y5sewYFfP;er zmMvR`?Cfl~xw+xkv12GHDFK_!o}e{8J{}wn=l{-Wb#*lW+*c?REx*>!`ZlE3>v8ku zP29hKA7Zf>8jS`*p%7B36iG=*7#`+W@aYmKa;VVF6WGl47j?w;=q9eh>D7WUa!ZK zCr=<2i^1dZz~k{I)oN>NJKO0VPg+{q4zXBFrXrWiiOpt{TCFA`qK1YB0zgWol8A_! zo0|y$jf{-Yg9i`D!NGyLySs^qsH3BUYHMqWh)5=r(S{8hjQ#fY^-)q%5~-dxzoSVdK>S08}a!92^{AV`BrMPzW~r ze;3KHurPFVbeODvaBvWPeSL6qb3;~E7P7Lkpw()To12U6+qa{$vlDCAu7$6!FRH4l zAQTGG)YOEEiVCPyDwFe{$yiO7^JLiA*cfj+Q)!(o3%bDNa5%Vq`!@7?J?iW0A(P1v z6BC1$mKIoBTcf+XdtCgpXV2i{;{!`eON54o;_TV8yd_in%tZ~gWA553? zWLQ~QjoY3Ntqc0-ER{;Z=kvkga1av{gTsdpL#b3^U|;}SwroLFRTVyd{0QL31V%?k zqrbl&F)=ZC@!|!{&CTKA;eqALmm@AN4s~^Ph>VOxWo0GazI_V-= zk&%%p_n!}~3u>0s)Kr+6nZec76~4Z{5Q#*PN~OlL=){Q=2nYy(kB<++!^2TfPyjbK zH-v|WBQrA-{{H^(_xFd3iwibw+JuCJ1VltcATu))0)YVD-rfic3xiN7oKl0IpCA7E z>#uQT4u^wBj~=1Cyc}FE7d##hHa0f6b?X+&%gc>t?YedA;N|57jYb2JNHniwHC@gC z;NjtcfXS%@E>-F^N)hpw6e}BJm(Mm)#G&DrdpFcNlkB*MghYug9 zv9Xb~TJ41Xv|24SHa1dEPtSxlolZxMjg8dR)it55r>BP$3Iz=e4A8lA=Zp(nxm-@Y zy}ib`y1F|0{Q2{Q@=ugXB{eiOkVd1KG~a#u_ECCz`ajBlreif-&IW^l#_qp)^X5OV literal 0 HcmV?d00001 diff --git a/inherit_graph_22.map b/inherit_graph_22.map new file mode 100644 index 0000000..42e7a46 --- /dev/null +++ b/inherit_graph_22.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_22.md5 b/inherit_graph_22.md5 new file mode 100644 index 0000000..01f86fb --- /dev/null +++ b/inherit_graph_22.md5 @@ -0,0 +1 @@ +2f50f13f83e74f9c5d583d36a1228789 \ No newline at end of file diff --git a/inherit_graph_22.png b/inherit_graph_22.png new file mode 100644 index 0000000000000000000000000000000000000000..de34da21a2231537129d6ca2ca5d0205f71cf134 GIT binary patch literal 2165 zcmV-*2#WWKP)zlkXeHzguB0XDC`8vO-0IsZp6>N~=7jrdcmc&1&W` zi?YIq)GPu!U{Dd%Pf|jIqCAyGL~o3=vbmJZ(pGt3&O9U=Ezi#D_ac1$&Qsf8Tm9_$ zyt+@jukZKX#eLsCj{{g(SXfwCSXfy8YjDOk#Kgqda5x(G1#Ky+%h>MG(*}}?|E2*TUWXdsWwVI5KjOfXeCmQWnu3RBk zSJ!F9U$bTn-M@c-T62s=TfMr(o@t$Nad8wI8@pp{eocFalS-wCjg3WaZY}}?0}&Y+ ziTe6_l$Mra=gyr72?>E%EM~?(fBqaIkqBG1Y(ZLD8dNG3)2C1cV3KR-W2M@OTos!C^_(`DKTr&6hK z>((vg=jS6XE)MPO?GOru$jHb*SXdYa1_lrs8VcaYqI!FK!@FJ4qfdQR#&N#XrsS=5VxLhvDWHKTms;HBw25}@+C@Y^j?{+_A8O^Lsi}!F zGBU`|&yRRK9@*R5)1ya^h={16p@9qx3`nU|5)sk*_3P=MfBu=$6OraoHI)xt)=?Y1 zV`IzZa>~leV*0wex`@N!P*YQrPCB(^vLkiUm-o7`Xwf3r*w_F7OiWC`=kwv<;K0;J z2nYy(kB<**ZEfM=;(`quHZU)FYin!a=H|wXoj-p*?%cTp0H~>{!N9-(vr7R$Lqh}1 z&CRi3!2$?{LU6hN+pIl2JkZqCq_zIOzCLt!cVpSIWk^a&LQ+x^6bc1So;-4grKmn5Us7P@b~wJsi`RdOzLSYQ~79XYnySsqsh(9#qs0EapT4f zWMpK3&*x+A+=;*bsdP>ky*?Jn$jE>|Ab_EvA$)y(ap1rKNTpKr_V!})=FKQ6DZ%H@ zp8@<>R39H7^z`(=*Vh-%o;`zsfdQ5;Uyg+f7a}Mq2<7GF@bdCPad9!KtE&M3&CSis z&NvY=nT)yAkCa_qT`@2)fYj7f3=R$g0EUN$arNp|SXo)Y+1VKY5E2rC$B!T5=FOYf zy?gghJ&iClGz0)s`p^Y!^^T5RQ&WSrYu6$$Fc5q`ANl$DP^;A#9v=Q>IeBbar-FLDh^U2ZCk><^t zr*UUUPfsUfV`EyeVg>PdJc^BtW$tas$;o73U_b(afEF)aOxw3_pY#rAVq!vi` + + + + + + + + + + + + diff --git a/inherit_graph_23.md5 b/inherit_graph_23.md5 new file mode 100644 index 0000000..54bbe11 --- /dev/null +++ b/inherit_graph_23.md5 @@ -0,0 +1 @@ +8f5af70d43e01f60f09358869919ede3 \ No newline at end of file diff --git a/inherit_graph_23.png b/inherit_graph_23.png new file mode 100644 index 0000000000000000000000000000000000000000..3bfcc8fd3a43b0a9e5d2574b6ba5c80f8ad4419b GIT binary patch literal 21161 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_24.map b/inherit_graph_24.map new file mode 100644 index 0000000..d318092 --- /dev/null +++ b/inherit_graph_24.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_24.md5 b/inherit_graph_24.md5 new file mode 100644 index 0000000..10f4761 --- /dev/null +++ b/inherit_graph_24.md5 @@ -0,0 +1 @@ +19ab8ad74aaed511dc0f2ca89c23e9c7 \ No newline at end of file diff --git a/inherit_graph_24.png b/inherit_graph_24.png new file mode 100644 index 0000000000000000000000000000000000000000..2316f220195ed5b239840432e5b0542f58996917 GIT binary patch literal 1810 zcmV+t2krQYP)!Q*9W>|7S&*97V_)#4MsDS}Tn(hT_(XuCS@}!M9$_ zv`s1~5=)BEBB*Tp&__)dq*N42VD>?xjC`wUTB0durHeIR6QxtW<-DE`;X#|4KKdx_ zIloW$xvz_R|7-u<=UlrvfQX2Qh=_>DWH7%^96x?s#xP9aVu%r$8AMc>o16P({M^#t zlNg2xWEke*!pRc(7sLQ~G=9R#$T70Bv;T87BC{tsIeF4~$pY&T`Hv8dbP+@&T?Elc z7eO@AMG%d25vKh6;VLvWHR0yXn}~>rz<~n?Ce1M#jd=R>>6B|cfBqa2$=rYQ9LM3( zrAv79=+U2(XNk)jnURqJ4-XFn1O!Z(qgJco+8dtH*XLV6SGhf=Y=`nFF1~aPNzd& zULLesEfNwE(A?aN($Z2KJa`aMQBg3P%|d=fMFox?J&OJN_ai+$9X!tqvEJTZT)1!n zTCEmm&z?nFTbmI3_U#+e)6)?V5rNaEPouT9Rfv84`W5HSokL_~BradRjK_~35u1r}0c`eE_r7Jvuu(p;D<}Fc=UU8;jxLVd2-! zaU4QILg4G`i@3Nr6crUAB_#y_Ff=p-rBaFZ_I4aPbO^1jtq2JTfy3dz&!0aL7#N6_ zmKMav$3r5KARr(BJv}`b92|sFsf5L1K}<{x>~=e%qodK()Pyr<&Oj!U;pEAa2nh)R z0IXiU8Z65?jsH|*Nl6LxdOg;!Uys4TL8w$Juq=zj#6&O*gWbD#V|aLY+B(LQlaqrh zSFRumrqtBbkVGOOo6SZ&!=riNrP8Qs2po7~*o$YQa~Sl1YOy`FSBUG(q1&C4@# z)v8s(Gsw%!3oOgR*Vk9L9wRI)456W+ShsE+wr}4KwOTD40yi`?K&ey;x$f@nc<|r> z0HD6U9>c@K!ma{P+VM$)YMdHwOXuLv0~2p7W6>CU@$-~ zm&47?4H}IGr%s&$$8i`K7{K1Wd-3GS6MXvg2>?)CU5(JtQ1tirL!;5))vH%nwrm+T zZrq5KD_0^sJRIfa<=C@l4~mM4P*+z60Qmg*v#O`A61{Q2{<{`|>UP$Q2WJBB4omSD}AHQ2Ic z3&O&}U@#bj9ha7t27iBlC=?0=2L~fFGZSmqu0?QgFj7)d;OFNDKR-XnWHRjBxf4-Q zQBbSZNJ&Y7QmMq|&6^Pv6a^t)7CK_hGCGEm4$ov?xC!#Y}Ok7$ZVS(p698uvQoJ2@9!5H7$Tyfp&@$t@}+R? za5(70hYw^no2j?A*J-`p-d-}B&D7o9?G)?l>m#$-Om@57Dc0THO|`YPG%zqgH*VYz znw^@O8tUok5%S8*%jwIPFHYkz+S=Nvy1IJW8i|O$fB#NqvzaF$!Sg&- zRaH$`=iR$^)ZE^U)WM*cfp`ii!`T2`2W!_0nP6iRh z + + diff --git a/inherit_graph_25.md5 b/inherit_graph_25.md5 new file mode 100644 index 0000000..2256e32 --- /dev/null +++ b/inherit_graph_25.md5 @@ -0,0 +1 @@ +1ed48bec9678a2378a81be5233b8ed58 \ No newline at end of file diff --git a/inherit_graph_25.png b/inherit_graph_25.png new file mode 100644 index 0000000000000000000000000000000000000000..19fd5eb2a7712be6e86ff95990a31fefaf72a34c GIT binary patch literal 1850 zcmV-A2gUe_P)!Q*9W>|7S($m?C5eF^edP)=DFcp*XE{g-xXozV%|J zZBjweu%rkrg39KHK5BD8O2rdOVD>?xjC`wUu4JZcrN)}CjY%tCmh*Z(Ldum7%d-{;zW4#2^|!NI}7u^3<`b{s!`T*xp?$U+3eG5ZivZDC>I=dpdu zCps|<6T&deKl2wB#~hOg;NjQ~m!$uqprByRqv4oaGBPqI?dQ#N92|cET+){yT+){y zT+){yT+){yT+){yQ~qUJEVQ(=;O5Pnh>eZKfddC7^~uZ2!;>dZrX1thvuEJ(X1+d* zMk6j=x`c-hAO7BX4q5a`&&kPwmzNiUgM+8^2@em4zrQ~K;OWz+sHmtwUS1w+XBd}* z%m0MkZbw~R-K>l?6Bd2aO(qkrUcCyTP&lPeaBwhtQ}p-u*8Shy} zqY(;)0!2kdkjv#rO-)5>Ybz=%D{=7PLBz+$L#NZR{xvl>>PM1cfS?j4eolhM`H1-)L6^z?M>+qVzt z>FH=}Y@C*kv1qkg9653X0|NtYHBL7FOqg-f?RGngi;GcGQUaw?iJqPwNTpJ!)oLUq zCBflvu&c&sG$JxG5&;1LNKQ^hSy>rWDir`=cz75Ri3D9;T{v{;5Zc?@5g8c?r_+fa zKYk!2Bm`}3ZAeK;0guN+aBwiJRx5^vh9HqhU^1DIn3xEQ#e#%{1hllY;LMpb5DJAj zdGaJ8BO?I-Yu2oRKp=2w|4w5?MFo^fB{po>fT5uwNTpH;1OlX`rGa4>?B2Z_4u`|7 zjwOZP~eLFku_wU~+DJhA} zW;5NrdzbwE{b^)mgtf=T#Zg{f9%;2&5{X3QbUInvu3fw6@ZrNmL=+ShMCIk>)7F!p zpHE`3*hM1%YHn^OA|i{$LWPBetlet062mam(b3^nM?*sc357zsefu_fczBS>WMci? zX`DF!bWtjmq);dlCgylnp6RPsuV$Z_K0ZDW2m}ZS2w<;&5gi?ksHiBcU%wtZcI-fS zcsTn~z+f;yB9XAZd_Er!9y|a5G&MEB;c&346#&}W+TiQ!3vX|4NTt$o)pclSC^|Yi zWQWnK$84-XIAzki>tVzpW=WHK3=o15X~<%Qnf-f{kwm6Z^S#qjj>L`X;o zu3x`C&MpuLP*6|+i^VdozrVkK)??@M`E0wWs0dkESUPRFlt zoD8Bz`y`xG8taJe2En+R$$YnO<1*R6=GsyP+eV(J$v?` ztgH-ry&eGY>C-26Wle_JY-WqcvF$&hsi_G&ckYB-E{8xMKuJjnoK7c3M@QZ20DkTm zetv#POH0G%&6{!l{CNOyt8uoO*Q6gib_~mwEyLQiYq53fRzycfL#-pVNj`52n-BFU|=AGLLnj|A`l-RkMQtts8lLQBob`dvIU`` zp^!?YQ^v4u+cw;}bH}CqC#0mLptiOaVzC(h{{E<_sDMZ$LTYNNTODIz7zX+I`M7uQ z9;&LU+-jV2{~sbY!#HT*kB6 zY^2lasIRZj#n#{7Pdc5BEEbE4t*@_-8XFsFaBz@r+_=FOat#d)WVKpZzv}90`uzE` zOZyj{ot;!)U+-2U5z)7A-$ + + diff --git a/inherit_graph_26.md5 b/inherit_graph_26.md5 new file mode 100644 index 0000000..aff0130 --- /dev/null +++ b/inherit_graph_26.md5 @@ -0,0 +1 @@ +7d0a97546beae08c31537f30f20ca704 \ No newline at end of file diff --git a/inherit_graph_26.png b/inherit_graph_26.png new file mode 100644 index 0000000000000000000000000000000000000000..2209eb2080870410acaa5242a1ca066f6cbca00f GIT binary patch literal 2738 zcmYM0c|4R|8^^~sJjyT>8T*WoMr2D!nx?TNAq@#5YLKNT`(8{nBiT)nJ)Z2#gvRn9 z+lUN}ElXLlm!&BC@}B;9-}l^~`<(m!e9pPA`&`%We6K6g%+!F77r_gGK=_Odu@+z~ z1h*^?6!fB9*@|F*I$k!wLJt01S@n5|5D2fc5%z**K-yBOhsiaoW9AFh+ZmNj!FIj!nzQMz zgeyt!c)6(NiViY&in5fFoTU!SCt+?iJH+km_$&u@hjySv*h3+z?9s{5&h?_qiRpUy`x{Jk6Z!7slQ{Zflte7k)RKAt4z#!i+~5 z?60{51O!!hjK0;|d5jY0=I`-tl2`0Wet6X~<1|}lzOECyo_QdHGvw9kv%j`Obv5i& z5Ybv8n=0xEK1U~~9r47Bj2Nk~&1{0y`GZ}xN6py>S5i&nLRLHEwSw0d-;ua47#MIj z>@4fd{|>6GtaSMKwe92GD(gxYR^$3WfB&P+%>dhmkU(okF;7P5tL5=VDM#8d85x6g%l30pT0ALrZ?2{|)rE4oP7WUDOdietwvu0mp^j ze-soIBPgZQ*n)jS(SMq6&xt>gNS(!4#p*==|5*2mP)>hn7@u=`A z+xda^*z^08J0G53D6qsJ<0twHuA$)D-lwO>)e<{6(@n`~Y2x_S`_E2hDv(wAfJfeH6aTK00(~y~&fVmdYfyWSk4m!WaE);+C42Y$128Z;U^1 z8gB^w=%OC5Qor$IqKSj(=IO~GONCLAlaGaLFXUDKJ;@G})TJaP9qI4ycUT##U!2p_ z)<(>Ar?0v2%SB+#?}Z8A);JdT<^QOZX1n6<8m%oS{`ZG{&v#O-qZ6G2sh31i?(g8&tH(ZgoKE~ zLPh*j^)qKsNMyto&8B3i%1z`|PR`H$ot2!@(r%^a&CQtBwl*0#IcQBy4asIaTV)zs zHM*pA|10O}+FE>aGUfGaxkqF&N=b>&?NjOFzJ=TV@`)XfC=?#Fb@@ZP%IWFbkcTak z`YtXC2n0evN-CC{Us4*0WIy%dkc5N;&!IytdpjHPadD7rGfG^X0MOUOLSG&aAKxWk zUyVu|CA9FN!QvYnIV?(UuB_od7XR)n*SW)qUCC@QQ@SG@u4ptG>*$D_Wu}tzu4W>2 zb;ZToZ>`NT1$a0E)|h7|eYESp%^TtI!Z2~IhrrZDS;4@8q2T?OFA-fC=fu2cyB5^! zsm702SG|BF({uw9jyGbm^+Q5*yVK5+fXzR%M(OtquvkuU7`+%>yx=d`|+%{@N#7OAi*5-Pg=cv!0tKK9M<+!-Hh2ZfP1-Vfo z%7Sq7(9m;Nl2yX(NMrjb6l$TON6$&``?qh&N(u@TFK_Sq(iI0I6BF5VQ~GOvd)VdZ z?cU4EG{nd8aVZeArUeTB+_**lb)MPbh*z;3%yj0^hJ&b~~vH=i~*h#_2zh}Ed zA^JCNh^Cq5jb7~o0hNh2R0&+Y4MbSC)JX_l(&!%?gpt)5(;bO2i5(E#Iw5XO&Oe7= zCB>wCbV>RZo3FZtMmCKG7Znv1h{RUkpMuWzWS-AroEZyf@z}Q_gdWw<(2#zmcP8li z_3OoYN2A(!U@)R45D8GT@IAt@XdIf*@VP`8jXsRaffwORnk!xVhGvBzuT9f=-|cL} zsPHc)TU%R`zZUx3H&WBnqu;+bw6wI;M+;A}atu7D%4}=cYiwg8h2)Xo8)TS-SB1AY z8D$Xj&XHFA8*mI3yoijaRC#-O{a_hL$(%fS$ko+#LJKA&r(2ga=Hs)oHS>aCW@h#f zPy-;!Bvq4H#9%OR^ew9K@sN;^xWq(KwAh*2=zDH%7fnrJek)^q5SM%R$Sso&RmDsq z$r`=BE!zSd54PwTT2fMyta^tRGSMbNSX|S+_g%*l_bdE?jSb?qs_5?Su7Id$WV()j z^KI41jzoFN)2GdVYq7x_%WRORQBgFn8RJSi9i^%&_^H&66dTKLA2@T=BvVg<#bQ;5 z?P-q%eOLO!94Ltm@?$RZ!5bZGLNb$xpV)9e5bNyhEO#GP1-tlLoV>dmQf+(6$JaM- zfK9hf?N8*uSq7;F?zc3;1+mvyCw3;CFuZc*l7)rf>gwvpfdMW^eo+w#mlKXfHUavx zK>%6E{8CVeR=R2K>(@v{#iv`}78ig07%$0w^CrPAuP^UvUHT`Hu|fZ#zzl?jib|Y> z6&^3xet)sLp&?@+A74bB_BzW2g(ldZ$}>uoV|^k#U^2pfwu!Xf7YAsK2ifGGyu7;M zR>#vo|9!2ILPmLgv|1m4?&+zii>fKlh}~&MG#YJhFn@o4KPf(blC}K05mA-L=@_6!R< z*z+$eF8)o)Y@&CW3+C2C^Cn^*mTWF@B?(ge6GhXBEtp0U!G90|e g`W@E&U*q`6?=Fdxd=aHV2Sq5v=#nY66yp%_9|^@hng9R* literal 0 HcmV?d00001 diff --git a/inherit_graph_27.map b/inherit_graph_27.map new file mode 100644 index 0000000..e3e165c --- /dev/null +++ b/inherit_graph_27.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_27.md5 b/inherit_graph_27.md5 new file mode 100644 index 0000000..194842d --- /dev/null +++ b/inherit_graph_27.md5 @@ -0,0 +1 @@ +5f49e5ffc3503a5a97e0ab7f95a23508 \ No newline at end of file diff --git a/inherit_graph_27.png b/inherit_graph_27.png new file mode 100644 index 0000000000000000000000000000000000000000..39b8dd6c57a50eb5f0428f6fecf53ce558fa921d GIT binary patch literal 2410 zcmV-w36=JVP)oXG4yPQSrr#7vJ_B z8~yDh4u|8x;c)&NK3OdPFkt|0^c^rM$X?RZ(|@@dmVcKmTekE&&K+hQEG!mb3zB6- z!4@RTh=MIhmJtP8kSrq#wjfzX6n}j|K6~~In>KAiPEL;5IVmYA@b&dI``6RcGbCD6 zDiuOQL(STQf`YJi?b?2ANl8iY_4S2Hr5X|~BNemvA^#SR9Xkda8ymQ}xtX2ghsQ?NRn4i6tbL|9nZa7i>`(V|7j&dxR} z$by0bI5;?zKD>DG0*4MA!i^hWpHKw_1wk&Cn;Z`$ z#>bBzBO)RK4Gj&bsHi|}Y%Br-0uUP;i}LdF0mac5sZ@&f>(`^by`348NF>P4&NiAS zm&;8q<>vhNYE>u{2nh*6aBwiPva-H=9ssnov|#Vvy;!|^HO`$ohm@2QT)K40V*dNf z&0rXGLF)B-T)A=uGMNnV@$qPCYJ#`7H<`J{~h>%s@v+2fV$#!RPZ46B7dthl8a{m!hky%VHdT$;imSi4!Mq?AS3_TU#^Z z9v&X}^yw3xJb3~DAR^@CD7WtE(#_BO_5&Rb}zK zj*bqvySt;Mr3I0Zkx(j?IDGgp>gwt&=KtH=SXo&OqMG_4E-o%KK0clXN?BPMak*To zudgQ}q6ZHi5CBrCR76BnU0qE8sJpwHiO z*8TM96NQI|Q+<6sUA}yo93360yStmQ2L}gJN=gbzrBZTsb|!F(A?@6`la3rYLPSI*B_%X#)+{0-;_-M?R#s-wf3MazZ{9HW zxpU`IR#w&z={6V)|f0t#SSObpSwBRTa9rx|m%K z0A9U%g$WZTz}D6l-rnBea{s^CdwP08tyT|3XbiTtws3ZK2Jm%fb#QRNwr$&>QmLTV z>p?`{jiafl35|`7ICt(GtgWq4R8)kSGiRFkl1L=jx^*i~o;(S;TyC^Ge$PJu*xTDP zO&S1YE*33X1i*6smn>Ogl$*gatW6D%$HTR2*O+coDwV?D-ybzK zHL$U8((7(M!HDlNs)yUyLacafKuhkg6@K`a)--rnA5zL%F5v|24{YHD!v z=1s_CG9$Ys{{S#%%$R;-uymfSt*yx|rQRmWQvMqo8;x=^ScdgJWO8ycoSmJ)g(&7Myl`ek5E-rg~f{(Lo619&*wuX zlfhsxpr@zDVjRHNf4qZ(17c!gFlWvj95`^mWPL7|i#2Q3;LxE%00384*8%(gS=|8v z0m#eCLv3v>0O0A5OxY1%9ec^C8 zNJ~q@)vH%gP*7mvLn4tNH#gVha{WF3KdW0L5@G-T{SXR;5DJBejg5t$pC87J8)q^9 zznmX!YV>+N6&DvXuiM+(nMQ?(sI#+^?%lg*^kMnw)2F0VDoLx=nyjbQYDuY7QcFvV ziA|@|ky5E7jYeZ)YiVhr^73-}{P{DTIdg_-YRbyWsI|3~nO9g?NN?Z1H979(-Me>G zT3Tu`Mk1n*A3u^(sielnMn+pjMTNyU^m;v&l$02)Q(0L_&!0bM^nCd6fryB@ySwS$ zy?aapNJMo1{(aKx^%nj2r?sM@f?3Dhc^^J}AhlXeO-)TyRaHd>gMn78SV2;$lv$_0 z{P*W?Aed`v23?RNk-i1VGB6%Kd`LDnHcX+aR4THzwr1|03^l*B%N}Xi+1bIt!Qpqy z_@h|7cri9_-i+C^XJh*G>3H+z4N_B6Ek5D;75tS2Y3}zLES5=4O+{*I>TlKX*MHlG z< + + diff --git a/inherit_graph_28.md5 b/inherit_graph_28.md5 new file mode 100644 index 0000000..163383b --- /dev/null +++ b/inherit_graph_28.md5 @@ -0,0 +1 @@ +77148df528f926e9fba8144a0d1a2fb6 \ No newline at end of file diff --git a/inherit_graph_28.png b/inherit_graph_28.png new file mode 100644 index 0000000000000000000000000000000000000000..84fd159ac69027b45ac2536e2fa47159379ec4ca GIT binary patch literal 3220 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 X#X6>Xz!!ku43M#r1){>>?u-8eVv|g4 literal 0 HcmV?d00001 diff --git a/inherit_graph_29.map b/inherit_graph_29.map new file mode 100644 index 0000000..d2f752d --- /dev/null +++ b/inherit_graph_29.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_29.md5 b/inherit_graph_29.md5 new file mode 100644 index 0000000..5b2701b --- /dev/null +++ b/inherit_graph_29.md5 @@ -0,0 +1 @@ +fa523e0f9e0ad0415b730afb0fe323ac \ No newline at end of file diff --git a/inherit_graph_29.png b/inherit_graph_29.png new file mode 100644 index 0000000000000000000000000000000000000000..946d7faf66e9e88b815b04f53964df1eec92725b GIT binary patch literal 2660 zcmYjTc|25o7au!gj~H7RLTCud*kiI)vL$)!Jhpf28aoxTj5XCODjp)TWs5Pkh*6Tg zY}qri%P?jb-e1pO@4cUU&*y$V=bm$Z=X}rioD>UlV@{|r6as;8nwp@jfb0j4G%GWB z%l`W60R*$#bz>Cd^v_+`_9h1cfeM+TuG)mZ*nAOl!Q8a= z0$p0)xH7CFJ8U+>YZ$YuvhJdM65!g?<#(}I+W9F*wl;)l{`$=uCC$>JBKo=5qbfs@xfrt8$Hh3kJIpLBwE=Uw4tUJKQsm1I zL84~YuMZCm?U>NUzJ2R*Q7){k`lNY{xZ z$&HMT*4|sUZK9D54vLD486ZO=BlJ(r694NQJL!4D+q-NUqf-)aK70dPQeV#}9z)`# zXJ8P^NJ&jy#QKDW@?Y_v(YLjI*1bzdN2d{WP)TTv%u~2iEupD7C55&8$3g;$oMd== z(vw4d7Jq*Gu11ETlhZk0U*D|9j~_CyaLtqF;*71W`ReNHv$M15(v7+^Pj?C8yDRwt za3oTQkRcY|nRISHBK1j-&UXz?SPC^DGQ(a}*(L7^KL5~qjD%FFva*QMBsIp6CXM>`uu z-s%bHpfQ(NeIl=iYKm%y^O%~NYJ~4dOifLpS1zlo!=3$H$}XjzOg@P7!r|c=m*&7PhvwmRJ5MR8mqBSn&4uXWj{Wpui6`kv`K(JDBE4 zL50)yzh6>SWx)14q*5baXavzCk;vq_w+8+UuF!4(wPMG04{ zY^M+9FJ8Rn;2?TxcJn3^YOi;N)aEIQ${P zxqTy8yCCia`N=~C52G6b-I$VG*3nVW+S;0&+~=WUdHeQRJxq9bE(*>olx`I36cC^^ zCw}gn`MrDhFuV3uwop#alHb3BM|>OkVKDFFg~snr#VswG;F~lPGKk#2iE04d+7h@x z&ztSSrFXQU3gzYw%QcLPi<3tnN`dOh_|VY&ShW`QMNg~psex|dx7>;{8+m}k{^(|P z?K-cBgGn!n&V!B)J?S%S9h5yXnMi2c?G>4*b!Socn@YIj6u~sz6hIWW$KP8QSPn+& zeIpQ98XFrSkT$1GfWiE~3bwZV85tQn2M4*KiCrrVYvXsE6NkM?C~xi9*w`$y63nKE zI=Yj(zrH&gwf$g8!%k6vhj;FjGbKK@s;~{muhEg*FN+m5VJ%6w{ zy|cgHh#&Cw^?i6lCcdfZikrLpF5r-9(sk)GFLYysWpX~1#)O8BEltHlM+^AXl$T#M zHDzl*Tx2gB_XQ{pkD%p$lP!o29*zLf&ue@w-8`Wk9q)Hz*Jj(I{EwWHEx0P)z8#vK z^&iz$QK>5v3)^TZ=H|(Wa6L(khE~;<)K%)4y#=;PtSTMx0&Hw-8lkH^8X4Wo%hG4~ z_=0|ooIj=z3n2INuLQUOO3Tg7)i*Gpk3C#qsk~dy?CR!+zsHO8T#YF1WO64@pe&d%Hw_ec=JB@r?CdOH1N~dKxFPeP4#$_O@$JNw6^Ooa5>Un<9m07e6S5q`NI2no z)dGWm(|e`=uYk71ygXs_OfxUwb1*CcSslw>1L=ap;XI$(2w*Mk>{xLQ8N`CPbMEf$7IOStms<}Pu^O?*8laWX z)u#$aE8(Gi>zZMn2Q7Dvzni@Yih=u%9yC#3J zuC6W~LBXV*oj}k@fVF@^^G`euCj=5Ghd?|U_r2!nS?a=-c}^!4Kr103q0>cKLPcey ztpp%69!k^x`>$A`E(;gfUN2OZ|`Ix= z5PU#~i+>*(F`&_CnD3{7#IIs45qqUBX@I83W@f&0#O=(}0b4CmWJHbio6*SuDfq~* zP!IKdA2d2G%}9!qi|esdjVuTtB_+ki(eWkgO_?afA8=A6yzlYEiWx~7s#vFW*A2bzn|J6lbve`mJa7NHHC3F+(g~q z?CJrtX|uCVHnz4Ciic9P2tOA|8?Hu13lY}?~|8E_dIDK>phH$&1 z=vLbt5F6Wm0@jMVY&smhZ}k-g$W;x@|1M+y?qq>Ur*t=vn)iOTI%B}v2r<28j;c0r GdH6pZ)gr3^ literal 0 HcmV?d00001 diff --git a/inherit_graph_3.map b/inherit_graph_3.map new file mode 100644 index 0000000..a06c71b --- /dev/null +++ b/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_3.md5 b/inherit_graph_3.md5 new file mode 100644 index 0000000..cab846b --- /dev/null +++ b/inherit_graph_3.md5 @@ -0,0 +1 @@ +a0321606a1e53fbcd5e5a93914fe116e \ No newline at end of file diff --git a/inherit_graph_3.png b/inherit_graph_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7239062a492eb1ccb8d8be891235a6371f7cb82b GIT binary patch literal 2797 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_30.map b/inherit_graph_30.map new file mode 100644 index 0000000..93c8007 --- /dev/null +++ b/inherit_graph_30.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_30.md5 b/inherit_graph_30.md5 new file mode 100644 index 0000000..6eaf987 --- /dev/null +++ b/inherit_graph_30.md5 @@ -0,0 +1 @@ +ae2a765fa4e964633ebbd180286c4a09 \ No newline at end of file diff --git a/inherit_graph_30.png b/inherit_graph_30.png new file mode 100644 index 0000000000000000000000000000000000000000..b06ca30c1eb2a6e52161746d6456ffb408fff580 GIT binary patch literal 2074 zcmV+#2<7*QP)q~txYNgDj80u`Mu5@{7OLBWzo!?HY_I(2H=cJ4CA!SX+X6@L}Oioc3s z#b3p+;;&*@@mDc_z4&Ui8YfPiKt)BxtbS2ZQK+e@v1-rA$iUsZcjq;BNl6KEa&qSN z+vVV|7yt6*%iwak*s){BtbPiG0(!mPs{Q@@_vq;8nAg~!KYxZ=t^TdwrAwEfQmN)O z#zOe(#cyqGMNCW#JUl#BI+PiC@!|z^I^D95yI}D(8V#gUDT<4W5g8eY*bD{(E?&Hd$jC^frl#V{moJR% z`}gn2&d$bx0|#*a{P`)X@$1*GxNzYDqNAg6<;oRQR8$}*CkN^2>G=5ZBQi5H@%Zuh zlg+58D3q6%Tb2JL*V58b#KgoPK0Y3mm6eRWr>6(0si}yLj)q(=hs9!HZ1wf^NJ>gV zcz8IHl9EtYR|fz{Pfy2(4-ps_MrKJG?hKGj{5DeYfMx%jTE(b9Frw$4V0-w*v$&)9+;c&2b?_QYAW~8K~VB^M(IDPswBofK2xf+c| zJb(TiGMNmUH*W@y$6Kg;Q;|xghh#Dt%@vhOMO-eIIy*awh^VHfh5(R8qah-q#>Peh zK%=9hR9;?ALZOiQ`ud27NUPP->({S|h^VNji2VHgn0^Nb2PrNtjygL#>E6A2v|+;r z8XX;F?9tKDl$V!BMMXs<5{bxSu`sqhd-hObVj>X{ZQZ(+o;`c^+dKpU!L)wi;o+2( zmBr)=fEpSa82hbTx5(Gmmu}y_O+G$8)5f9G>8P-?%i;7bc9GGT9jNCMf|y9XJ?0p4)n#d5VBn8qb8>RB8Xo|9dwb#R z?99|nCKHB-hhb}L3t)UpcW`jP`t|G4+}u3nw+4d&08m_9jEsy7+_`fHa=9FQJ|An= zOh5Ir<=WHJ1ABY>KhA9?mi4wTm&+j%iC|}EhtSYaoI7_88jS`+LqiA)3&Yc=Ptn%a z1^}q7twl&k2uvmuLPJCG>eVaQ*w|ppmMw5{aza#86ch>t_U+q;%F0UA*Vh98K7IPc z>=@J0+1bflGAEZKA|jBVpO3Dt|Gsx9EG&dttwvZ_7}I94Sa9RU4FG`IY({QwF2cgX z5FQ?G6-Q}lDS+|S?CmBC`MU~FuR>34K=6aZ$;b;+5}neXcA%G6t0 zT8Pi*Gxe^nF6PYd@9!tESWK?2t|S(VY3%`S|#dt*tHP<>gJW zIXF0wudgrhcs!CyrOf%7nVCs8HZ~*@iOAjEonm5QW<2u+0s-B;dDE(FGMVVekt1Yd zV?&;vp0sY=I&yb+XU^h@T>ts!ABu{KA}=p55(5 z9*+V811T{vks2BrNGKGNkB<*|cz959ax#fTA_@u$A|j%Mgaq>P@}ftN9?hETuX8E+9pOxQb{_U&dS!`-%oXQbu=_IM7g=SjQA>*iu8It%=PY;tz zeSJL<5si$DkV>VZ-rn9>bNzL$=gN|a|9@n%_>0MWSKdl9llXt-6Fz}J02ddRMeogB5=j!-~I(VZYm7#aM~Y z<#Id6#>UFty?eJ3@vtlrTrRhBrDI@WVPRomVObge1pr!A6oo@*hyVZp07*qoM6N<$ Ef<+naLjV8( literal 0 HcmV?d00001 diff --git a/inherit_graph_31.map b/inherit_graph_31.map new file mode 100644 index 0000000..4347d42 --- /dev/null +++ b/inherit_graph_31.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_31.md5 b/inherit_graph_31.md5 new file mode 100644 index 0000000..5095569 --- /dev/null +++ b/inherit_graph_31.md5 @@ -0,0 +1 @@ +a7801709b5d49732544832c9d30ecdf2 \ No newline at end of file diff --git a/inherit_graph_31.png b/inherit_graph_31.png new file mode 100644 index 0000000000000000000000000000000000000000..32fd4830fdb717214ddcf498a06c706bcb2f9ab4 GIT binary patch literal 2304 zcmZuzc{CJUA08^H5Ea?WzVA!Mnk9^~Cd-Ik6~drlvSsNF8T&HE5>X^cV=%Tz6B<&3 z7&WPoWsGfzH@h+K?R@9`@4NTh-@WIabGPSte$Tln4t7@DM}?0;eSwL8S>f??o3Jx&I508k6e^h=p zU~21P9z^!#ONNsCb*mEH>huoc1!Mm{cLK>7_ElWy#Q4ucUFj$S$-lBtgTk$q*Y9$N zc@4cg>ReS*v`^ocwyoXO->Y5Od=uZXJl+A%&iSuw>ztZ!RfacO;~eC>Sc!r~#N!ec z1N+R~GAb^R87r4$##iegzaM1mt{D$K@;0T7p9i*`(Q$WkKU_yM{#@E=wSDi7hN3&~ z-|wA*D)<=k{GX61P?jf)NjY>(;P%e%d5&EYiG-Z);ZEKe8FA(jH=O(OLr6#nG1m4O zS6@4IX>(_NakM35!oIh--}l+2qBVo3uWZxoKlB%$t8i8n(nsA&U^Wm4)z6>beol3+aHL!-UYN!A*RSpMCF=KtHX=&3l zeHb2EPh>xtd~RXV94CwtA&+_xg9=YNuEm$R>~?f z8;iXV8mdX7(dJP4U{@_)^5f>_{KUkAu-9IAIcaGN&63<)_Vc#3+;E&g8mVh(ln}Kx zb0oS$ynQUQ-&e}eu%x_Pa(3X6(paXFqT<%?`IB&5e)91%x!Kw0{rwfdD|>Hh)`!w; zMgnv`=Bt?FsRuqa1-d#bV$Dad;H|R6v8v?9rU`{ccXfdTV)nLjyt^MbUcGwB%#7Wa zAe7JviHRl5qx78>`H!7ewRqy7?n@R72n=+86)H2<9^u!QD>Jvg!_fi9xeSz<*n`J( zc6M%UZ9(dS$Mh|;#64H;Fn8|2BFr^B*Xfz65y-a9F+qf`$lZ-4Q=H35K|!=jjnC%t zSYl!#uc&CcWkqLjOW5YJCpZr%TlVbPduTMLjg1XNFMLTb=zBBm(-U*ZyWT&Dqe<5% zr$}k9<5{KM$;T-#t|&dTdt`$|Y9#ZBmB;RGL`Fp+7e*BFY-9+&{ZoJ?$iYL0CK(J{ z2M1m;eH3J2Wxkz2WX)6L8X6krCWs~wu)mCoN=C%W_~gpUU>`_wKW>Gmr+Ny!t9MNjK;luduMq`STDY5_!|lPb+-MZJ-2dZfeQ~ zu`e^mx_mw3=;S16boH}J@4I((VRXAv6V}S+GvGxaoA|`UR6dU~!o!!ovYihKQt|iq zx3IF(irb4kELK!h^p=VZ_*&=vuBWHmsrvng4_(16|Ij|3R#>JFmaz%{UQo?QnI})I ze4?fM+I|3z{0RuREn>xv7{^4Xq;&qJZoM)CY?*^c6m3}{At`yE@x6soVRc+mQqmd* z^L~4ejZ07+(ge4?c~hG5%oY=@1~UFl?5<|$j5SLC(PeI6dfW0AIe;Iy{vW!rt6M3hAb#&d*P6guXyJ%|qH?J9Ialh=^+L}dFR8)c&(S$l-II_N(VGyy5 zE-x=HDBNzY&37A;_#~!DA-Vu05Q=$;E|O zYxVN-`VDNmZ#w#D=@j0*>`n18KNfTAing$AhgzkFFqphho2SW|cn?#UM*c6bcJo*D zM01_0o%3V1*JKuF`-|hvvdGsSI8`feQ-p8+SK#8T1JMgMg>_1W{NPIifnBh(s5SfR F{=XSUhUx$S literal 0 HcmV?d00001 diff --git a/inherit_graph_32.map b/inherit_graph_32.map new file mode 100644 index 0000000..c1bc3ae --- /dev/null +++ b/inherit_graph_32.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_32.md5 b/inherit_graph_32.md5 new file mode 100644 index 0000000..d71631f --- /dev/null +++ b/inherit_graph_32.md5 @@ -0,0 +1 @@ +ca249a4259d41fd5c90c3f1ae36fcf0f \ No newline at end of file diff --git a/inherit_graph_32.png b/inherit_graph_32.png new file mode 100644 index 0000000000000000000000000000000000000000..4b11f5badcfe43226df797233b00945a8a7a0763 GIT binary patch literal 2719 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 N*j;o0s;y9u{{uyEL81Tv literal 0 HcmV?d00001 diff --git a/inherit_graph_33.map b/inherit_graph_33.map new file mode 100644 index 0000000..0f0c14e --- /dev/null +++ b/inherit_graph_33.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_33.md5 b/inherit_graph_33.md5 new file mode 100644 index 0000000..8ec0c4b --- /dev/null +++ b/inherit_graph_33.md5 @@ -0,0 +1 @@ +0c5665bf96d95c8ae85b77ecae032872 \ No newline at end of file diff --git a/inherit_graph_33.png b/inherit_graph_33.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6df0d7294c2622de8473ad59a4d5ddf1552d6d GIT binary patch literal 2164 zcmV-)2#fcLP) zlnSh*ka}T(Qi%n<>4m64N}ITlw%`kK&0?CI5|QyQ0C#^?Vcyg#RD9Q~JC zaX)b3+~+)VpXEGr&bfE)04yvlEG#T6ENc(vN5S#q$N3x%$7L;?VOe{Ks4*`uuWzBu z_(vrUhvUNGa2~FnTP%MV5dex73UrEOo}8SV759ea&muWF`KNO3D*M6m7s3_^i$T~T zVKE3>BrFDDi-g4>Y>}`S_AoLsf|ZrkiutKltI^ol2mmW?Yq|XMMbgpHfzZ%U@cDebI$>d9n3$MARaKRi zytK3whYugd`t|E!X=#bOckiyWy8y7NwwAl}flfJ7oeK|uim0|OBk7l(K6-l4j> z8qv|w2oDd3R4QfkpFe+&W5sO?wrz1Ex7%3?!=<4cX`aXaDjPvKuBP1jQmoHyNSy>sbT)BdC=g#57hYz@T@gjCR8$no%gd3P znhF4znwo-8C`5mMKaL(fimt9M`1trhqtReyW(F=UF6iv+L~Lv598anZx9NF z=;-J`L_`FXN+rZ%G1}YPar*RW@cDe4Jb98yy0x`6cs!m?J32ZVWo2c|l2cVx1tTLP z`1<-X{?*pj8jM4&R^!Es7g{-z%jFmx9K^`T2t*}A5=lu(*s)^=OifLHb(po0NF?HzkZ$a^Ycj{5RgWrVfs8h zJt-z8hKPuqoSf+Kb8~Zg^5h8-5lJKxN=Qgx`uqC&$k^DJh-lF`WHK4? z`FyQw@87?l9z1wJN~MzW^70t@@bEBkI2`Kk?k1T`Mw>Tp*0HsajEoF&c6O%m@$p4- zB9qAo0JXNZ8jO1(Nl8g0kx0Zp)`Z?4_?E+_O`DiC-@?KIJRT3WwzkaqJOKd#@b&e@ zwr$(6XU`tEySp<#Dz&tS{PRIKb4@6fQ0zsy0Dyvm0;Hv-AvZS{+1c6P@pv#cHarAx z-n@ZCB0)t(1#E0=0ASIa3=9mw%*<@r@#|w%?{2cQvmp=&U}9ndKR-X5I&}&Pg#we4 zlQ?kT04gdf@bTkE0KltPui)$Ji;0N|`1$#vuC5O2)~$n`ogFrA+=!r{AT%^Iz}wp! z<>lp&%jE!oo}M0N2KpJjy}isPb730*yuH1#e*Jo!IdcYKVPSd)aIrW{O-<3?-;bW2 z9sodneLdRS+W~x^5%=xehrqx<@OV5F7Z*dL(O_8tgOigJ92^|r=H`a1tSoHZx)pA2 zZb(f{g`=Y*9336O=kwv=;eqh*aJaj>BQ-S@LZJ}$_V#dfb%jVI((A*nUAu7m_HCUu z@csFOSS&_sYb&$aUTz$Ac6RXe^n|^=J%mCbqNAhXeX!V`C#692{U{V}r`d zN(cl3#KpzwwUv>Pf#Km{Jbd^N2M-=(j@`R=>&?lEv)qlVTCJwW#zy9RVq${X#1Roq zO-)fvO$~Fd(P*fxt&OBoDUFPb=v;4PWQ3$rDGdz`>GX|`j*?U=C8biS(>F9UL`_Xi zG&wm**REY-Hm)+6jE0AY8NG&v2I}kU(`nD6QmLq>rbcT+I3GuCZS9icn46oU=H_Oq zt*s@cQb}!XZOkTjY;26AQYj4#3@|at<#Me&F0}Rj{d=mZsnI#+{rg!?ejJmfqHp7> z^Ny=TA`x>qoQHq&n`v2DS!ii#L1AIxTD$UBk(`_iB8te(&DDB+@t=I+YGGmVM?Kd5 z+ga7So7G||x1%ge=bxNOSbi^Tk+2wqEfN-ku>ZSZF^Eo)aJk&xxw*OG*RNl%g+DB7 q442F8U27j$SXfwCSXfwo#{U3}ks1{u8JJ=K0000 + + diff --git a/inherit_graph_34.md5 b/inherit_graph_34.md5 new file mode 100644 index 0000000..159e2f4 --- /dev/null +++ b/inherit_graph_34.md5 @@ -0,0 +1 @@ +305b91517286666df4cf1229b3d825fd \ No newline at end of file diff --git a/inherit_graph_34.png b/inherit_graph_34.png new file mode 100644 index 0000000000000000000000000000000000000000..07a1dc433446e37ed3340de548c8deb65149411c GIT binary patch literal 3009 zcmYjTcQjmE`yO2gLJF4%qJE-8xMre7qK=6YM1(j1h@^3IK< zc9|`fE(ZTSra8WpqiL;2hX=|f|272lEv9ds`2Se+zc;mYcj|~iUGNe!J#Fy$vdXV` znZfZ_@lIJ;*@ZNATlx@62x_b)lxgC7_lme;IoPczE4%A`*2BeodRYY0As~C3C01^C zZ7Qg*h?Du0wa~KWNABdV+Jw-h<37O<4Z+)?%>pqt>hDl9*hgJ6B?JTirij9n9Hhui~=}O6f{rYl2 z2`QNki^WDpN2hx=ef-Fil#;^NS>rtMwuE@N9P8BC-Q8Af)v)???WB2S?K%gGK)^O9 z(#lHCm84SP+}PMy8hGMMmuisL_Lhxrno3oEQN4d~@VxtjH2UmhZ=+v>1HNe!c);-Z z@ndFY=F(A{yrHbZ!j)pD(u#_Y0YU;o;~5a>~ro66{5NPnMB{+k6Kn{&>Q*DT_cj$)FPWzI1xX*yNn<>hrd+p_UWc_@7b1NOFKa1?0oW8~KE5~PM#_6Xi{;{7^Q^U>4$+<+O%HxA>+7e;D z+Y+<0v!xCrlK!B2#sNAyOp30gXb?Bb&dwHv(#%&5I#u~u_%!tESBb)>720}o;^VNf zx>~+fC772IKf8ch^jv$Ku(b3!rkFW6biBP4&5Ds12-b07Vf3B*9UZ#+M@NX*?v4%! z3g|I66A|nY}&p^XJd)9UNMhM+%-hI!3+OTF3&iLS0Fk z_VyAo$lAYwwaS_rVKucI03Eu9h7oab93)?=H0AC3?(W-%V)9A?In~wI_!OO*SARF) zUQA*Fu?7(UR##uWdi7D&PtoOfeRzEQC1AvMXL+Qby2H%QuI=Lkg$T;YacXI4@$mA} zLeiC9vv_-Zn>V62oL|S}H8o8Y-artqU%##ihhKmQs;ctG-8+T-EU}3Lk)!?mgvG^m z1|NaSWn~F=J|0kG2{$YzmJKD8aU(5gal5!%Rsi)Ljwab_z$dd%DvP5oX575 zwY5BBJj%(bFnAJk3Syvr=IksD_n0CEq$~Rr-#-&Yd{|F3R1<=eYTZL!TwIPRd6~Kx z$>jHVJl>4Dxw%77 z$R2g@d)iuB?(MPsBL6wauCKSqKbwt`<+*a@n{3lDhK7blY!Oc&V3{~>B+UbRm1Skm zJv}QDViHqX9pMN>jvnrPCJ(DgxzOJBc9Ms09g;ouA!ATb5MD*w%S+*!to2138yl6Q zl?wA(x2)}fCx9#;XlUT7Xvc>+7=%3c5d^P=@k2d3c!Z?CiqA!)JyJ z@BR5Tr4u#U6x1{jW|<}&x41sj2J@I_{*iu{&d0|mR0(mYtfX|?_WMP+SW5T6=%_ua zZEqy39s z+lCErksdiXmCrWA?xD`kcR-&+bWHx_ z;NYlu^%#L*EwO5N=|<}BSLf#DULC7wpXZULWWr9%%kR|J)|L{9)`K$?N@sTVO?)qC zJXKZIKQ3KTPu6>_Q!hm+n@5r@E7$8L$6;)NN=R!}ypdCiV zZ5o12Paho})!m$`bdU-MtbzjQynOjGXlxhnjB2N`R&sX=;+M39gdn7oY0f#l2WcKv zSGi1N)B!{VvZRp7|1>wNgNWSLNCe}F!a}Jo)E!28`u>4|f$5jMU0tBww?acgKnxF) z^+d@fKx^_sLxI+b+Vy_=2gq(ki%?4U!NFoCUwR%6#|Z%^z%X0vw{MzJhx+=uW@gu{ zkjVY*Awv_fL^)yMwhq^|#w~W5^}VSeXnuuRim2*>|6Ms427_5zTx-D&*T*TR*0!_be|vNM2z%PprK?0*q5QKt^bEEu0Tv{-;}Ch(_K} zSz%#M^E=x#Cy#B)BP3EPSw~yj{K*rYDhvH0Ge=00Hv6G);W1X|Je}%@7|NZWu2kzmE|6LfY1B2nht0*XZ10)HQL$7>z*tGb3hO-Jf zJAvMkl>9ni4^vP;89`4M8oel7R4SECae96!kyu%o1VFg5yo@m;Qh$}06q!}zNnokm4-u(!+u#mZZ|xL7~^8D}T!JWcEe zwl~#_uhX`e{?Dj6duDcl{^e~Jc1z2NpO!T){AXKz_ww3q1V6JVt*Uayy72w~uuD(d da>jiI31W3lE`4!y8O-DmxR!xt@q=d}{{?))`WFBI literal 0 HcmV?d00001 diff --git a/inherit_graph_35.map b/inherit_graph_35.map new file mode 100644 index 0000000..3ffd988 --- /dev/null +++ b/inherit_graph_35.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_35.md5 b/inherit_graph_35.md5 new file mode 100644 index 0000000..7af186f --- /dev/null +++ b/inherit_graph_35.md5 @@ -0,0 +1 @@ +e465c9e636c60286f43eae493f067c56 \ No newline at end of file diff --git a/inherit_graph_35.png b/inherit_graph_35.png new file mode 100644 index 0000000000000000000000000000000000000000..7b954eacf7836f29cb366a307b95aaf714817ddb GIT binary patch literal 3908 zcmXAs2UJr_*MjGy@W)3IVBsP((zeDotskKujb73!NZRB1Mtj zoAi2vAkqn4>2Q%=|Ka;r*2%1#b#i9*?7iRT9X!fVo0SR51c5+Ub#;&?U~B`IJR?2$ z7NO_w00aGfeQhM<^8mc)gNp>Ekfs1H_=)FaYs1w1OBloJ3Veq3zkfs!hza}W5w~7O-`t-s^~ui9 zf1RK2ncDRaJ^l3d$|(9jRsYrI9>mF*493L7#B1{V%aGV$uKA-B$BOk|7IqCIBT)H= z-9M6@mxl^1%RN%=ko3rntwh+=^0JzJRYgUG{b-r{?sTNg_500?+$U{?cfSJ-uuJI#@0G$_ksu# z#1Hp^jFx-09Ubfxx(-T{)JNy|*m-$z-hU`A82_uXvK%fhE;@JbwqzS;uyk6K*B2D9 zcg0C*VK5h=P-uZ;8yg)x{r$hc|INwX?Icz_~|&q#nqftmHW`e~xT|2epuqlcSq;_%Zunx;s&x@$A`# zBB!qPrTqG$P3>p_2QVvG_nn|1H5FA=E3~F2jd{K;@pdG)!`9+2H~jFuwz{a6rS*~4 zG?N^!jal8ytSk`~73kL1*82AL>EGg{F>lJs6hWfo=YoTSrxq7GRXmmk@*trD1LoaH z3e3K~zBmG*IgH`l)6U77OPkD>_6J#hyON$ z?PnJdh#DC|het%DWoFXJ%F2Rz*xmeTG|W0RKhOA5Jol;VZEbC>5IbYR z<6q*ue0&bahkK7)U4Ql!$~Zc>xC~3w1`-WKnIog3K2zVv$7{E?wwhuvcag|)&k0dT zCQ1y4%g)ZmK~UP-3@NJqQAlA9^^n5^98O$9Vga=9W#M$Nu8qyj2V06tNe{XL?Uszb!!em2OOhSSVCqDc%%_B9>|B8u=zro?u)YRsuTOw;8>wA04 z>t5z$Vq+V?DP2a$$V5X>PoBtfa9mV=8V;Vi(Rr}9*Q+!Uq=iKGq#~}uV6gp_@(CPH zNAyE)uGyCWDOaEs`7w^!GOmvwxA*tQkafu>`*ZPjVEyUoue!UtvvYFrINWbaioSLf zzmTwS8Y;V3kVguQ4BTE8622d7Y-!ovcTVu8!M!X)vfzuucVlB?K2i7F-K8$7`Vm?r zV)f+Y4a@YBNBnB(EUNi7>u{K}lyu3dvvDF%a%f*M(gi;G|4#M?VMp7Heb z zL`jL~Pfx1Skh6MWSy^j;&ONK4wl)Uqa*vkrYJXY(RhyKVSx|PMJ?xM6w@_l|Q8}iU zgj2S5oFr}ImG(s+wlSJyLjGXtb)ec+M0MnYeP^yApD((b`d-c zg)1tOlM3z+sJEq7-OCj{}$}ad3JUU4h{~VgKhWPnG*L=MJ6Vu z`&*yMWDdvx!?^Eqm*pmRa96IYSzquBij*B=gAF7F2+&?C;J*cXW3XNGT~D6iO8E z4sF}CNX*WwygVu3Lf%J4GUJiLK(;cIk^qNC$~^@WlaoIng@r&GHa0fWL9vNTN`hr0 zL3o$BBVGPYQUJf&M@Ox*qCk;QuRl6vlGxR&+8JEGlHJn3c}9cua<48gXM!4gZzG)r z_?@>8g~4>CFC)47aYD*fr_hM~ zW>-&X1Zao>A`b8<>G3Pqti*2xof2^Lw+9iEoUG3j@oHprRH3hGf;2ZbXKG@SUPyCw zasP7_P!P@gQ?>If}gcyG+?%JhxH;lTjs_~n(A zYpSZ%Jx&J)|El-T%SSovF;}9*`n}#wZborkHME~@#;@<}w2_p(_iddel_V$9GX(%8mQ_q7y;30?b*{8}e zdRKtc!LF}+8GKZ$?D73II4B|~$7%7+hL7&9^3ls4{-eyQDkuP7^Et#}=vgk&?>#-| zK!CvUf!>}sy9m;8$JSN=;%@Pj@}tQ)Dx}Dvi5{+^A`F`32wD?z6cCQZ3g5VK{^re_ z&;F$NvkW}h+i>b8DRY_Rn0CdIY!vgLVrB_z0gqU6Qn^V4n!yNzvq4 z{rGKY9MeH_v^u}2B7><4|M3Gw$G|WH49{0mng|W4u7Q{#cnF*mFCwIddhZpO2=GsC zzH$8Lh3aaFN+ExrSiOkNO`lWaW^8P{zPX76PGNPd(s5k}lC`$(WQIVA$D%3taSlAP zTX(G`l1InL$oXTgxw$!xNWAUfAS5XzCBz-+;Ov|=rItt{v8bx5mUT0+vfc)&0D$uf z0O^K;f{?N@9{}^I=L!f=(bLmAbUoq9(;8f5$R_Sew!KmZZWoxG7wGjz7TsT2j z=MUyp0qIy#@~QNSkBeKBVy+ok8K+VOz^f$hx@V6^)9vo=UXqo4qS5oc-rZ|vo&ne& z(Du+j*ZXfMDT!RWcJ}!A7;@}8WuD;FPo%fDZnc5!jB zAaKVcCN{RArzgK>Wya@p-w03zrozHP93HRv__4TcUC`N2OYTrjO-*(@a@k!pB_#zH z8F}W1udSM*A~!RS^aEdCAD>6R>b<6J*;IJZ0Iv=q^D0RpmI5Cz2Jskis3 z!y~|y*nqR_wxkB{V1V<`nu%bBTo2rKTOKK82C)kW2)xy~jC=E@@%X3}Hhn8LuS_go8p+Jkd( z7!>L|Wv+fv2cn&5g8e2PRhx-_Sq*dBVovaDH{KnMtqB@5HdC-ZLj( zoY=I_p<5l?+-#0E=DIfPkM~{0Ho=*a&e73vHLc_S&z#`sNfkR`u;41wBCX<9!Lb;k Nd)pBC?Uwzk{{z0Zl?ng= literal 0 HcmV?d00001 diff --git a/inherit_graph_36.map b/inherit_graph_36.map new file mode 100644 index 0000000..c6fe86f --- /dev/null +++ b/inherit_graph_36.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_36.md5 b/inherit_graph_36.md5 new file mode 100644 index 0000000..ac20ba5 --- /dev/null +++ b/inherit_graph_36.md5 @@ -0,0 +1 @@ +d7b4527f7e25a96bad4df18ffffeabb4 \ No newline at end of file diff --git a/inherit_graph_36.png b/inherit_graph_36.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a1aab3f18f5cf0f71b1d03f6f2ba0ee9957b88 GIT binary patch literal 2034 zcmV0j(ir-`|6qyZa;n-m2zRggYVkT*+QGb|! zq+<(hsE}ENfg}cD(IN&>*2H(cYMBufL7)a%L?ZG39m$CN7eNr7UAuPeUlV1< z-y2CJ5`T$A^5d3mf^vj#yBC@CqSw6v7= z_I4Z{9Z5(?z{kf&&#$emjmwuWQ&Uresi`U6-rnrrzaI+=3th~H0~qoX-==+Gp+k&zK{xtxOs58~$LHmf=L6&R#g6%`fq^z=|uQ^Wf8>vi(c(NS`9 zb7^mH=j+$60Gv2+f*Ut(5FZ~;cz8IkUcDkXIGF3#uM-;^3qWIIBbzsG#>K^jty{M; zG&IEZ>(|k0wLE+F40CgHDk>^SN=jnGh7EeTEM2;ER{2il>+I}2rM|1Hi{j#90s{ki z`}Qpk4h}y*S%xGrF)=PFDM^?MGMP;9^z;uxJUS3|hwvUgGker;XXVcc!CRkcp3YRZm*2OFzP>axG_Z5$PFh=AiHnP)wzhU! z-^j?wAC9lOx|&a)KCyA*M*92v@$~ehwY8P__;`kfhH!Uxr=z2T`uci8LPBtMc4pVE zU6huVa_rc#dCl!O2HCR!q*5u{w{NGgun?tE$@AyWv9Pef)zwwc?(pHmL`6kWSXjuD zCr>zg_AJYnFX!ULi-d=V)7#sNOeULE%<%B=Dfb<%R*R{rDaFObNTpJC@7_&QQ_~N9 z7cE+(r{BMSKUP*&01ONa@ZrM;?%lhGTrMXsFAr;LYi{4Z4M1#cEKN;KT)lb~S65do zEiKV#G}zkO5)>3fOH0e_CUFJ~RxB7>3X_wQ$;`~8sHjNqR|POQI7okgKaP%$q@<*f zl9EDqcQ+?bo+K(Nist5K92^{Y|Ni}y{Z~{}P*qjM(W6HJP^nZzL_|!oyLIapDwRsN zWB~*O1n}X*2VHwQ-*NWs+lQZ@9{~OR{S*`wpwVcktE;27wpOPb$KT(d+S*!DQ&ZWz zc{6gk91jl<)N1v#7qfH4pwC%BK|yqPck|}W8;XmI_4X@(s;Vm7+}scZK_^?XWC_{X z*$fX4)7;$5rcIj|8XDrkg9nrPKY#u_)z#HA=3!}RNmo~wo~);*XHH{LDwU|!YSd~q zTefT=FE5Yw_I7G&YLLlfba!`8>i>^F{=m%446Rnn=g*%xapDAZb#;V>hR!MWbQrW) zQmK^a=xEZ@(*baIch}QC+BTeb|PQi)6^nD> zecru$2S7_p3tFv~u&^+4a&k~86quQr5gHoGfddDqudiodU|?SH!NAKPj4g#BAt9ut zrA^YAnVIqM;X~r%<2iTk94l6=;LDdUtXj2-yLa!hc=2KY&YU@ev9U4RwrxWyl_CfN zBO@c^=jRg`7^v%S;=VGG>gsBa9Xp1vuP;tcPW1NnqEe~mJ+@V=R#9GFPIh)S>FMcs zdV1pI+1bg>n>SgxawRr4HoSlTo}8Q<%+1Z`9e>hm{lvt?IEh5^ z=UiSsR#sM`R4TEuvSMUpgo=s^6bgmzL|0y3j=Q@%mX?+}pN578y1KfM%jMYF*-hJb zU0ofcqob@|y&4k}6TO(jTp`8jS`) z5O(J0=g;m<@mvT92+(~uGBQG~R_o~}9=FFCzb%-FwQJYT7;`#oY;3Txv6-{)bb5tC zq1TqlWO#adPO_6qrMS4b%$VO?`P*FN%49O^?d^Ye8uP;7d)EIdhB`j~PX0E(tp5kZ zVl5!VVl5!V{|zo6CKXF6m9~tIj{b8t*E%A<4yjaXnA=|w5fKp)k>9|-0sFP#nDGYd Qz5oCK07*qoM6N<$f`Hxf-~a#s literal 0 HcmV?d00001 diff --git a/inherit_graph_37.map b/inherit_graph_37.map new file mode 100644 index 0000000..c368f37 --- /dev/null +++ b/inherit_graph_37.map @@ -0,0 +1,5 @@ + + + + + diff --git a/inherit_graph_37.md5 b/inherit_graph_37.md5 new file mode 100644 index 0000000..5a0f0f8 --- /dev/null +++ b/inherit_graph_37.md5 @@ -0,0 +1 @@ +2d2818ecf1d093b7de4def18db25edac \ No newline at end of file diff --git a/inherit_graph_37.png b/inherit_graph_37.png new file mode 100644 index 0000000000000000000000000000000000000000..c05e71275e6bcd41a0fe072df59915f7e9e18b41 GIT binary patch literal 5899 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 + + + + diff --git a/inherit_graph_38.md5 b/inherit_graph_38.md5 new file mode 100644 index 0000000..d023020 --- /dev/null +++ b/inherit_graph_38.md5 @@ -0,0 +1 @@ +66ce602a107cc6c3d55ef2e388f8987f \ No newline at end of file diff --git a/inherit_graph_38.png b/inherit_graph_38.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1de85e13f6fe0244ac45e931a4ba108f5456eb GIT binary patch literal 10000 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 + + diff --git a/inherit_graph_39.md5 b/inherit_graph_39.md5 new file mode 100644 index 0000000..477ced2 --- /dev/null +++ b/inherit_graph_39.md5 @@ -0,0 +1 @@ +c1a12a23225085aa6c5f13400de1e0c8 \ No newline at end of file diff --git a/inherit_graph_39.png b/inherit_graph_39.png new file mode 100644 index 0000000000000000000000000000000000000000..2776c965195e53b863654f265c842373c67d979b GIT binary patch literal 4174 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_4.map b/inherit_graph_4.map new file mode 100644 index 0000000..16d5cc7 --- /dev/null +++ b/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_4.md5 b/inherit_graph_4.md5 new file mode 100644 index 0000000..5c1b8be --- /dev/null +++ b/inherit_graph_4.md5 @@ -0,0 +1 @@ +d42ca97e3f12cb9a640d692edc394850 \ No newline at end of file diff --git a/inherit_graph_4.png b/inherit_graph_4.png new file mode 100644 index 0000000000000000000000000000000000000000..480fe8477fd2f94599640f1c6e999ac5e4506d01 GIT binary patch literal 2615 zcmV-73dr?|P);Cvne#8RY;$8QsklxgtDrb1kPZu$Q3YEl z=l#QYXQ_(56n)2gKS`5wpYz=3KF_(|o_pxIfQ*ccjEszojLiK;G1;(r^JcX|p~!p? z$;kY>5kj=?*|VqjX4{;}P6~x0Q=w2a-@mkEW)a1}p_>gp0=vPdpME;y*~rWuDl02* zX%D#1dC2^qAqz}qMv(<3Go#1?lbKOufyvA$vcP0!l-vGHFrKN?6iVB{3>M1XKLPEl{uD^Zzb_xm#NJ~ot zpr@w?ys;VM3HkQMO4-*_548Yc{TPZ9oq_D7%tgI{^ zee}`0j;T_q*uQ_jUvu^+(-v4)R~JU3k>$&mbLh|^R4Ns(zy3Nln~mMOcQZCNMr~~^ z>FMbJ{QUFJeD>LA3=9mAnwm;&Z7t#9;Q%-s4(jXcIeq#x2?+_**47dm8wH2!Mfs0e0-zL04B7TCJ9ploYI1E0-@{=G?h+Y}>Ytk&zLK zii*h3&*y~~Uf}uXpZ97{g~ejwiL=+UEecXvzTx`AG=CpR~j4?g&SS6_Vr>{P73b+1YqJ9>&JT$jr>-{Q2{gmzNU|5Wuo!%NQIS!YZs2&>gfb#*mrwVIb+dWr1pYye_oV^J!VK5c+E-gtxOo_kLE{WhDz1EMWQa<@EIQ0I+}me!{}S*t>Tx0PEJR zW7DQh*laew`|dl2hlly{%P$EG3}pTK^<21cfxUb85*ZmuaBwh(4<9BVAb<@UHqhPO z4S+_YAtWROjYdOMR21O7$2xhxb@l4iUTd(qbLRpuIyy>2Lj#*OZ2}-WJDblx{~Vjm zcE_4D8V#YLp{UhrqN1W092_JvGV-?Ls8Xr8bmx^?R?nM_!%R_4x~ zd)peOi(drx$Rm$PYn+IP2$V{tv^b84h>-m9^72@sGqDx^Oz32qC7dX)=#L{y68(okIwLLgDkK6rG)&()uerJX{hNT%X-) zYHFnG-U_SL%F|Cj?Pbf%%*1N7l9!jq!w)}+fJ8At4+%Z~&Xl z#`f*o>Fn$zCnpEEKA^+H!(RU1fB!vpyPeR`P%<+!*|lqz^f`9y81KCE4oanx%a<>E zoi{WzcDB{w&hZ@&3Pdc2)Dae`H=RxvU%LQYN&KmPb5K|w)0_Sj=A zSg?Tn{CrwkT3ESqB}a}N!D6uh@aLa@N;BWB=;`Uf>2&(E??iihJL&1^tX;bnrBaE> zWWwX|FflQ4$C_?1K0Xe>{Q2{#tE;2Bx|-(ZW+o;k0JwPZB6__Zl}g2yEn5Kacs$hC z*8|{oyQ!x0yjyWMHTVsK!BA9DQ6cV@wzf7A6B8pH zpE+|zD3wa-xVN`g0AhT6T-fb)k(`_?Vq#)Ma&oc=3kwq;e)yr}``&x+38hjgl9G}{ zaB#5LxpSviUwC-9Sh{qn2n`Jt27^I(JRTv05ZktG6G1^iA~7*h#Kpylf`S6EapOiI zgb+_Y`J^~{^r#dkA|gUGG&J0@eY4-qoH}(%s8lMEl$0dYYPHzBd9z4NOcXkuZpxa< z%F4vz#fwFAbF*Y?Zf+JaF)?D^ym=xnE=~jm1&Q+Va`E@ye@kN;85t?^^Yg{x#fybX zr4m}LR`mAv`o!$*?Grx@?UZC2qB7h@80e8 z%Ji(o$X|bAKPZxullkSBUmkQCeqmP5U^4$Z z$O4m@QDlM1%qa5zMas-5J^~8}2 + + diff --git a/inherit_graph_40.md5 b/inherit_graph_40.md5 new file mode 100644 index 0000000..a78dca9 --- /dev/null +++ b/inherit_graph_40.md5 @@ -0,0 +1 @@ +399f3cd56b98b37d2687e0f6520952e8 \ No newline at end of file diff --git a/inherit_graph_40.png b/inherit_graph_40.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0b1f2b02476ece2c8d100b0acc53a8826e43f6 GIT binary patch literal 5306 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 literal 0 HcmV?d00001 diff --git a/inherit_graph_41.map b/inherit_graph_41.map new file mode 100644 index 0000000..b7544ae --- /dev/null +++ b/inherit_graph_41.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_41.md5 b/inherit_graph_41.md5 new file mode 100644 index 0000000..d3589b4 --- /dev/null +++ b/inherit_graph_41.md5 @@ -0,0 +1 @@ +544a55dd8b4e1cd5b8e219bad140587b \ No newline at end of file diff --git a/inherit_graph_41.png b/inherit_graph_41.png new file mode 100644 index 0000000000000000000000000000000000000000..2d810496cc9e88218e7d290bfeaaf5aaca369ea5 GIT binary patch literal 1560 zcmV+z2Iu*SP)P)k@PibWY&z|9{6Q;hkWix)4>do>bJUS9swxO{=@keDHoF>#7yOq?Pa z6Q@YV#3_<7ams=k-7M*-EQ{n+ZR(llgY&M=g;S&w76s5jX8b#G_9?z04Nj+ zmMvQbKqwTVrKKgN+|A9+3=Iv%Tw^>k@5VfM@Bp9B2S7?n3fHe+pYNCazaVB~+-^6; z#l;b^ii!#zJ$l566DMeIZ>OfFhMPBUGB`LGUdkr(^yyO$9z4jNJ$tZPt%O3Mux2uu zxOMB+l<}_^7#N_sx*C(o#Ia+?=;`T+(2gHJPC-Ed=g*(#+_`gHzI^$YS}+*IYPGU= z?_Me@D)4wb;XatnW?sL3O-V@!y}i9N?BLId*_co$#ItA5B4TZAZS?o|Q(0L_T3Q;1 z42d0|Ntm{rZ*M+*}3*2H3xUKX$vFnwlCs9#2$lY-|jjPDfW)7p0}8 z$mMc2Z{Ez%&=8?ei2L{NW3gCRy?QlDr81_zPJ3217pz>l5~Wg!Mx!A)IXS$fP3Fy; zH>gx9%FD}1O-&^)FAuNR8`gh3x0~r1-nDDjNKQ@;FP%k2MRay{a^b=SR;*ZoTCJv` zp#gxx!a_1LGXb#KY}0BtZrmUk4084ARTK&Zg@uK5cXxB;$`$hS^YMDU+`D&=tgNhA zc4{i~YRpX8y?Zx1ckV>1)v{^RCbnN z3>-ar6t~;WmoHxc@Or)B&A^Z2Xc&z~?%cV(;Hq z=kt-BogJZ9S64GWKF+pn+kTqk(4j*#G&GQwmPSfS3LcM#+S=Oi4Rrnb^_)3#hRVvy zh%vyCBS%oH)e-p`8ym^Z&E?doQ{?32ux8B~Iy*bDSS%D26aaAYFDU-z<~o46&2Ce))s3kqhmIki!Bz5m<CFiHV8A>-9#}=7Z^siHlv?LbGMd7Rt)X$jr=S)v8tW^z=|ySBFNU zL8H-3t1TqIr7-|?b#+*+Rt5(L(Q36Q6p9&X3&n4141C{GCnY7#T3ZOD-(%tw$(T4r z`d?X`GQ}9VT<)EinE30}t5^R + + diff --git a/inherit_graph_5.md5 b/inherit_graph_5.md5 new file mode 100644 index 0000000..1953270 --- /dev/null +++ b/inherit_graph_5.md5 @@ -0,0 +1 @@ +15bf6c23735b21552e2a44c6f5f18680 \ No newline at end of file diff --git a/inherit_graph_5.png b/inherit_graph_5.png new file mode 100644 index 0000000000000000000000000000000000000000..94ed0066529c81c81125b19a9d58598797b6da5f GIT binary patch literal 2058 zcmV+l2=(`gP)|C^O>n`mT)O)W$OTiTm46sOkIQkO`nsbSi3 z_5w*_i53`V3`qfBF(;!9aGUt-xblZhvM*_!wB;i2<5r^jSI z+9T%&gZtd~b*}%l+yBnFckT(Wu&}VOu&}VOaAtNKJ9bRK;c)zyqZpPyA3{j|ty{Og zOz&GYGl;|C_;Wa%zm~2nmj4;?03J^7Ffq|Dii(Q<^J-ZBU!A0HeNEtA$uB29L+X(W6Jf;c&2f_ipHPI%H&I zz}3|i$B!SU^=H!w2?;?%Ljyg|q&IW!%gf7Yqio;49Z5+^sHmu5%t28UYHDgAm&@Vq z?hb2fYqLDCD7Q1cUXPnMZ$cmtz{$x8B9RE!uV06UhX>r<-60eTVK5lb(a`}OkB9X1 zbT~RXA}}xzYPA{waPQtd*xK5nw6qie5FH&2nM?+aMuX?ipJQ}%6nF02frW(y4jw#+ zzP>(`mX^Z7!2y<*mU#U5F}PeV5)%{A-Q5iUaB*>gm6a7-TwJhr?OFiFdxA6f2lwsU zXS60-y?QkOprWE;PW^<01YEmz4KkSw03eY_P*PF?jYb1EH#b;YTSFia(E79K06;-O z0o`WO3l0u8I&WfP0+p4O@b>lw0NC2vB0oPLdcB@8hgz-1)2C12<>j@oKlUsviiy^* zUr(<&?CtHrA|{n>tJVR2eDWTF8AMyYCu2$`uh47{66Md6EW#KJ3GV4$q6S; zoPbKD0!2~tE|6!_DK9VoExnm0;`8~mfdC*VCR#*hmDPmSv5{)NuLub6bg8GdBMuc3SnVkICbh2R4Nt5$Hx&K9*!qZ zp3t|V#>Pg3hK6EnYz$#xVR-rSCDyE215Zy+I668)DwU$Ht`2+l>_K&PHCkF)005sq zf2OZsv!Pb2>Bao?HWN(xZEbDv^YcSgR1|nT9x5vA1SOI`ZYqms#7><7Q(n{U1Mm5T#N{1_lP`xR#a{ zLI@#xy`D5RHIc!=K}MbS_IA?K(=)H$^!aXTY9bppY#@XX(%s!nIy*aw!C+WWj)fqX z%Sl>VTHKYxO|%ruWug_icV=&I4<{$5KA)?lM;9w#Qt* z1zu?gg+il;l*`46yb`f2Ev$)H%!V})i`lUMcgA8iCMM!?x$3E@smix+-!4ZzEPps$ oE?2$WHL$R-u&}VOu>6Vq4W6tAk8Zk&A^-pY07*qoM6N<$g1j`z>% literal 0 HcmV?d00001 diff --git a/inherit_graph_6.map b/inherit_graph_6.map new file mode 100644 index 0000000..5830161 --- /dev/null +++ b/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_6.md5 b/inherit_graph_6.md5 new file mode 100644 index 0000000..dd18e00 --- /dev/null +++ b/inherit_graph_6.md5 @@ -0,0 +1 @@ +beb54e75029fdd7732771d51ec394d6a \ No newline at end of file diff --git a/inherit_graph_6.png b/inherit_graph_6.png new file mode 100644 index 0000000000000000000000000000000000000000..a3cc2b239fba9eaeaaf047ae4616e2de192d8d3d GIT binary patch literal 1980 zcmV;t2SfOYP)2Iiiy`j27jzgH9Qgrbb0` zvl5iT2rVp#jt1F3fmmTmnPLUjAJrdOX$8w1imA==fUc!x6DOL7dA)zc`@F8XS+D-I z{5>BK?!&d`dwKcYy?f972yk$4aBy&NaQr^Jp9hkYlZ8AUFKjN7;h0^B==JsM*E=VU zIs6>NJ;4F-4PNJVmGd;stRhg8f(_9u^0~u3YwPwi4!NFP$;l&-MVRAXSSI4 zhG=eX#+fr`AQTFxjFn2Ih>D7uQT?Y+pCU9g^sh0*wD%A?oenCM3WbG*h>niN{{8#W z)YOEEiV7qqCSupFUC?MWZ2YTNudr|5K14-DAv-%8CXwqJphsZEY1=tK)Q-wjoR=6N-w8P*zq3wOWm?t}aNW zQsm_1VE69b7#SHse0)5BALfzCWC#ihLPA0U%FD}f^ypCl!0_-eBoYY>1_P3klF-`P z3Ykm>v)PQ%(NTnjg`uUT1$+1I1)tAHNJt2JdwcQy`*%nr5;QkABR)PJdc7WTadBvD zY(#o`I)p+Y4j(=YnM?)%@bmKn!!TBD0LaYD#OBSL*&n%F4ghxbjYcD+QYjdQ!GQw@ zz~k|-Wy=XJsnGzF2%uv2O*QmU^1ET=FJ<6`f0UVba!{dWHRB&lP6HC)d&m> zgoA^FO-*}soGvr+kuf?tifh-dK`0c$$HxZ}i3C@#UPVw)5CQ`OAr^~aHk(mjUk`?1 zkdl%DZ*OmG+_(`P9UTCG+qZAS&CLx31qA?r*w|Pol}Z>420VNA4E_E6xOM9m7A#nR zojZ4;t*s3O1qE2NXc3&8oN)jCeen5wBqk=})2B}W0DpgfI6FJT-`^jeo}K_K&uD%= zui3tRyTu-2;lhOgfa2m}oB9a}3CPXOg;J>m0LWxA+`M@c27>|1mMw#eiwlH8Av`@j zE#Bdi(b3U?$B!RFBod*pu+XMvKtO=aI!>1vF~s7KpRT1O#C1+O^oUX%l)_7L{;{rvpk^vxPi#XNW6dl9`5e$=eh_9%qfLJVsi;D}w z!oqO={CSIchGCGGmj}IGZ!zB2*Egei+tV*BEX48S$C00(kDQzwFbo3+2is-+*(~3_ zePi3MuCBkNX|ImcWma!Y<>cf*Boe{d*%^_Mkw{HVg-)l#(9jUJZrzH94Z0%a?F;bi|4kE8y+z4Y^#7s;Vl4hliuQyc}As768!R-p;NplhM)9 z!EV4Nw(Vh0zpkzhp`oFOj*bSyFeoc4gV}7x`1m;c`mwPw06+f727>|Z?d<@7%F0SK zHa7mYroB4OI4YGYPOVncuTouIO}@UqY`>|gi5P}q`<0s_gUQLsi7sEhY%%BV?oKOLt|S*17gDKIWHy_Lh$t&7 ziyR#tNhA`{k|j$>p-|ACJ$s0VXw|A!^ytwe_BsNAfO2zlCv8uR`x#sMwY9b6<>f`e z!NDXH3Mn}`nM5KHNu^REB1%e1qUFn%Q%Ok)jg5^_cz8Iuxw+B$_3KF}6w>O|tLg6D zyH<6yr#V#}e+9K#O)8ZtZpIB^GMVW0>(^|5aBz?+D=XRl@bEA_fBu~9o6TlwXlNjf zMnguU(dv3eqmeWk4fXW&Sk3kI^^r!SA-!I2HP_SALp3!uG&D3s7cN|24N+ZPO})Ln zY+O}U6?JxYPTHOrHyO6{2L=X6qtVcpFJIU=tyW7!M5CjlR9#(7U0q#7L^M7=PIYy4 z^y0+}((Coq(9l5L-Q8AooJw=5I!=WxLs&gisZy!pcsyRo-~7bX#fukFUtf=+qN2G@ z<&PyLB?UwjpP!#^@d(|#Jlqlp1n}|knd>zEO6KLQ>zVor_HSfft`HpmKb#>rEZ_{m zVFCAl85|Z^8G_H}cZ`pZm%V%UZZ7iSm__(}{>+?+ad2>OaBy(^>-i5*1gKv^_fZG{ O0000 + + diff --git a/inherit_graph_7.md5 b/inherit_graph_7.md5 new file mode 100644 index 0000000..e5736b5 --- /dev/null +++ b/inherit_graph_7.md5 @@ -0,0 +1 @@ +2b85ce34c2b6a79da4a18138c479d7f0 \ No newline at end of file diff --git a/inherit_graph_7.png b/inherit_graph_7.png new file mode 100644 index 0000000000000000000000000000000000000000..b99c4b94290996a233bef58cebc4cd379990002b GIT binary patch literal 2751 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 + + diff --git a/inherit_graph_8.md5 b/inherit_graph_8.md5 new file mode 100644 index 0000000..588d9f8 --- /dev/null +++ b/inherit_graph_8.md5 @@ -0,0 +1 @@ +e9a4107530b7bc94eb2d5296bfe26452 \ No newline at end of file diff --git a/inherit_graph_8.png b/inherit_graph_8.png new file mode 100644 index 0000000000000000000000000000000000000000..f34ef626c98299029d616201a92a2f1d90edab76 GIT binary patch literal 1487 zcmV;=1u*)FP)3dS0>mGng4(+&MZb2XBH!i zGmDYMnZ?NB%wp!eI6j|`ii!#v8XA6RS6yArg$oxFX#q@<*fo16PX zJFnNv^5x4D(;GQRaFs*L}Gp6aF~-PPf}c5%+aGqdH?=>tZ!go zfU2r0wr$%+Wo0ED9UZa0j~_pB{P=N7OG~M)uBM@(fiq{$aO~JI-n@CksZ*!8efvvh zq@<*TyLa!#m8Tk$-|xq4HjjJ0va%AF%QfApoxV7cNQCJMQXfztq)6nh zzyU&`5Dy+aU|?W?YuB!kl$6Ad9Xsgk?4+))j>U@?Gk^Yk?%lhGQmMpZvGDfoTL3aL zGEk{hWMpKpWXTd>e9rJk`NPS^^eg!(;w)RXEVieorlz7+tI=w;vHDkvii#*KEM)cS z)oj?Xfr5g9Sklkq@gPZ3%yz+o1>CxI3xL+vRz^lfV!wWX_V#v`E?vr^MT;;P3@DZV zYy$cD`E+)6CM2d`NkUI+DwT?xH*dzaf-6_9U^1ETdcCBiq{M9nE|&|PPDgTbGI@D< zoIQJXT)$earna`0U@$nYy}!Tzm&fugLWptoPoF;hlyMV!T5~#`tX;bnl}d%lWa9AQ z!}$GvhK7dNvSkbR@86GYNzb1@r?9Y)!NEaHCKHbzKW5&%d1Pj0l9rZ6Nl6LK&CP7y zyqU(vMp{~00O;!KimkYRqr1C1b_n^lJXMmDlL>`FbaizB(A3m~&*z)gm|sb#I29EY zBqb%Wa^*_aty@P?Q4vn3Gqy5LoH#*FP7XSq4!vGaO-&7}R;@y>*W++F$j;6tJ3AYV zM#IL98!0O*qoAMwhr@v+Nn~YZk)NNB!C;ushxO~%bM@-gxbjrV%*jTLgo_xW3-rUh(SHD={=QB+i{XC-&^wBZLs* z#fulBudgp=*WBDJ-o1MlSN3|nA`l2nDWZnRaDT*zID=f8`EY^=GG>VcveED)F p{P}HBDwW+c?SqVrjEv0h%U^(PDyf>Js_y^*002ovPDHLkV1k$B?STLQ literal 0 HcmV?d00001 diff --git a/inherit_graph_9.map b/inherit_graph_9.map new file mode 100644 index 0000000..05d25ef --- /dev/null +++ b/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_9.md5 b/inherit_graph_9.md5 new file mode 100644 index 0000000..cb95ea2 --- /dev/null +++ b/inherit_graph_9.md5 @@ -0,0 +1 @@ +f61e386063b75968215eaa01f1eed654 \ No newline at end of file diff --git a/inherit_graph_9.png b/inherit_graph_9.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e6853ce47598aaff6a56104fc420a54762dea4 GIT binary patch literal 2692 zcmXw*2Q*w;7sp44FoYl(B}#}Ey+rgrj09thULsmZ^fI10(ViGJ57CJzLqxBMh>~C? z2|;)w#wUhRpZ>JODBrQZ^_{!!J!{={?>_tN{olWRl2Ay*Whf660)bqoFF=v*d^4~L`e$LayP37Qk)zleH-@{K4B>wO& zo)xI1di(m~pNRBO^E(s|!-s>1HJ4SZBDaFKW+1TtkDN2*q6g~VYwh}$161ZW1D+<} zm2l$JuH zC-uX}vDHR{p)ra}N*O==$%%XBcsDdAYo?vC%5h+S-~+4I@7Ovoln7At=11IcIbg^J#e4FBch! zs+q`BcnC!nt0iRIMCb`+ynOqXODKaODJjXfc}G1kgfkk;#tDN7si<&8Y4upFPfbr# zzGO?9P=9tsjy}5m^~)2YlV@Wf#ZW~>MMoyrZMGY0+w(*djYj`fP>^g|ct;nHZu2TH z4-66ElX1-h1*%cQrEuL+}3Dg@t=bB+`OyY;5fI{{BD`hZt8^YwK;g zOP6j+Nio0ipY^kFw6e1L(d2gN!i5Ws4+mk-b8_0%{OcCGZ(`o!Le%)q1DKH!`{|RB zrKM%>;2_h^&W>%fJ0mkat)9L<%`x*Bk$7o%czCG70D+)|>_up5Xlj}}Ii)`w%$Wmj zZ13#EetQJRVm13+`hVcU_och(4LJ|_t zC@q2OcYK^P$z(Ew|Cwj|nYRfyH@8aEFS(C>eS%k^O_){m!qSpn!zATfIRX;%>Xo>P zs;bM(yAZIPe8%H8`>^ovSR%z`;BNnqcMNz?5M`2V4i6;$o&}NYJyiva%~uHtyKMRG?SqLDak?gF1@dI?7Z} zcnJwboF1#v+{nIX0EdT%httLI@bIi0?XS7}`+93rWQ9V@fch-ZXm&=r3kp1GsXj|X`B(Y*k#IOaKR@Ph zbHCT-yMy940 zAt2`;o#pZz$AFM7MMg&MZOsZeIXRJo&bnTi6yCWkA|k?<{CM=GZU6@3P680}$?cAh zr+v!8mkbI+ACK0p8jr=1Dk3R_%SBpP9))~nU>Zg#k$0m%I^1H7)qy~`l>K;Rs&sK8bUfB6Qr@NEuphh{pRk$fguLdYM>2RS&1z68WV%1lv+y6EiX^bzqk8> zMXWv-@{NxuL{})|hPJjqdwct<+S=RPXXFpGZ#z0lAM`xAk}{wY zw17)0B2wnor&@+CRAdws6tGZ9ouOMSt72keZp*{PMkXfks3?sv4gQFIFYLPqT@mN} zQV-pf8*sjLYF484fk1e=%8>+L8Lwi^%*twt`W=+D)7I8zghUeR?{`8VAt527Yx_f8 zE!H&&b#=Zi1GBi|Vm>GoYI5Y|qTKXF@GA!oi=0;{_p6NFB_Q}1yIzOhT-9X_( zAm!h1Zp3sN2q4q^{5*MW&0D^npwWe;!g@zk-$(4fPI3yiJx|b>kW)vHNNsH`d12wt z9SX5;WP}w^Z7AOZM0$IBJEpMkdZk%OIzWMIKaMR=3#(REUM}zQk?3BE^j?_f1W4 zgH`S9?1rwnkb7f4eg6DmbA5>>(~oYCfo5+cnw4Q)qtsG0;dNIu z%iPK;JHNKF@~OK5_v70{M*vw08; f;_<(+Xhso0kF$)ULN(jKu@Z9E012 + + + + + + +MSCEqF: Class Hierarchy + + + + + + + + + + + + + + + +

+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + +
+ + + +
+ + + + + + + +
+ + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + +
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/logger_8hpp_source.html b/logger_8hpp_source.html new file mode 100644 index 0000000..68b13ab --- /dev/null +++ b/logger_8hpp_source.html @@ -0,0 +1,229 @@ + + + + + + + +MSCEqF: include/utils/logger.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
MSCEqF 1.0 +
+
Multi State Constraint Equivariant Filter for visual inertial navigation
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
logger.hpp
+
+
+
1// Copyright (C) 2023 Alessandro Fornasier.
+
2// Control of Networked Systems, University of Klagenfurt, Austria.
+
3//
+
4// All rights reserved.
+
5//
+
6// This software is licensed under the terms of the BSD-2-Clause-License with
+
7// no commercial use allowed, the full terms of which are made available
+
8// in the LICENSE file. No license in patents is granted.
+
9//
+
10// You can contact the authors at <alessandro.fornasier@ieee.org>
+
11
+
12#ifndef LOGGER_HPP_
+
13#define LOGGER_HPP_
+
14
+
15#include <iostream>
+
16#include <memory>
+
17
+
18namespace utils
+
19{
+
20template <class S, class C, typename = void>
+
+
21struct is_streamable : ::std::false_type
+
22{
+
23};
+
+
24
+
25template <class S, class C>
+
+
26struct is_streamable<S, C, decltype(void(std::declval<S&>() << std::declval<C const&>()))> : ::std::true_type
+
27{
+
28};
+
+
29
+
30enum class LoggerLevel
+
31{
+
32 FULL,
+
33 INFO,
+
34 WARN,
+
35 ERR,
+
36 INACTIVE,
+
37};
+
38
+
+
43class Logger
+
44{
+
45 public:
+
51 static const LoggerLevel& getlevel() { return level_; }
+
52
+
58 static void setLevel(const LoggerLevel& level) { level_ = level; }
+
59
+
66 template <typename T>
+
+
67 static void info(const T& msg)
+
68 {
+ +
70 if (level_ == LoggerLevel::INFO || level_ == LoggerLevel::FULL)
+
71 {
+
72 std::cout << "[ INFO]: " << msg << '.' << std::endl;
+
73 }
+
74 }
+
+
75
+
82 template <typename T>
+
+
83 static void err(const T& msg)
+
84 {
+ +
86 if (level_ == LoggerLevel::INFO || level_ == LoggerLevel::WARN || level_ == LoggerLevel::ERR ||
+
87 level_ == LoggerLevel::FULL)
+
88 {
+
89 std::cout << "\033[31m[ ERROR]: " << msg << ".\033[0m" << std::endl;
+
90 }
+
91 }
+
+
92
+
99 template <typename T>
+
+
100 static void warn(const T& msg)
+
101 {
+ +
103 if (level_ == LoggerLevel::INFO || level_ == LoggerLevel::WARN || level_ == LoggerLevel::FULL)
+
104 {
+
105 std::cout << "\033[33m[ WARNING]: " << msg << ".\033[0m" << std::endl;
+
106 }
+
107 }
+
+
108
+
115 template <typename T>
+
+
116 static void debug(const T& msg)
+
117 {
+ +
119 if (level_ == LoggerLevel::FULL)
+
120 {
+
121 std::cout << "\033[34m[ DEBUG]: " << msg << ".\033[0m" << std::endl;
+
122 }
+
123 }
+
+
124
+
125 private:
+
126 static inline LoggerLevel level_ = LoggerLevel::INFO;
+
127};
+
+
128
+
129} // namespace utils
+
130
+
131#endif // LOGGER_HPP_
+
Logger.
Definition logger.hpp:44
+
static void warn(const T &msg)
Format a warn message and log it in yellow.
Definition logger.hpp:100
+
static const LoggerLevel & getlevel()
Get the logger level (see LoggerLevel)
Definition logger.hpp:51
+
static void debug(const T &msg)
Format a debug message and log it in blue.
Definition logger.hpp:116
+
static void err(const T &msg)
Format a error message and log it in red.
Definition logger.hpp:83
+
static void info(const T &msg)
Format a info message and log it in white.
Definition logger.hpp:67
+
static void setLevel(const LoggerLevel &level)
Set the logger level (see LoggerLevel)
Definition logger.hpp:58
+
Definition logger.hpp:22
+
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..0fd1e99 --- /dev/null +++ b/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..86685fe --- /dev/null +++ b/menudata.js @@ -0,0 +1,107 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"o",url:"functions_o.html#index_o"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"q",url:"functions_q.html#index_q"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}, +{text:"w",url:"functions_w.html#index_w"}, +{text:"x",url:"functions_x.html#index_x"}, +{text:"z",url:"functions_z.html#index_z"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func.html#index_b"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"k",url:"functions_func.html#index_k"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"q",url:"functions_func.html#index_q"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"v",url:"functions_func.html#index_v"}, +{text:"w",url:"functions_func.html#index_w"}, +{text:"x",url:"functions_func.html#index_x"}, +{text:"z",url:"functions_func.html#index_z"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"g",url:"functions_vars.html#index_g"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"q",url:"functions_vars.html#index_q"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"w",url:"functions_vars.html#index_w"}, +{text:"z",url:"functions_vars.html#index_z"}]}, +{text:"Typedefs",url:"functions_type.html"}, +{text:"Related Symbols",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/msceqf_8hpp_source.html b/msceqf_8hpp_source.html new file mode 100644 index 0000000..708bb97 --- /dev/null +++ b/msceqf_8hpp_source.html @@ -0,0 +1,248 @@ + + + + + + + +MSCEqF: include/msceqf/msceqf.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    msceqf.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef MSCEQF_HPP
    +
    13#define MSCEQF_HPP
    +
    14
    +
    15#include <future>
    +
    16
    +
    17#include "msceqf/filter/initializer/static_initializer.hpp"
    +
    18#include "msceqf/filter/propagator/propagator.hpp"
    +
    19#include "msceqf/filter/updater/updater.hpp"
    +
    20#include "msceqf/filter/updater/zero_velocity_updater.hpp"
    +
    21#include "msceqf/options/msceqf_option_parser.hpp"
    +
    22#include "msceqf/state/state.hpp"
    +
    23#include "vision/track_manager.hpp"
    +
    24#include "utils/visualizer.hpp"
    +
    25
    +
    26namespace msceqf
    +
    27{
    +
    +
    28class MSCEqF
    +
    29{
    +
    30 public:
    +
    36 MSCEqF(const std::string& params_filepath);
    +
    37
    +
    43 void processMeasurement(const Imu& meas) { processImuMeasurement(meas); }
    +
    44
    +
    50 void processMeasurement(Camera& meas) { processCameraMeasurement(meas); }
    +
    51
    +
    57 void processMeasurement(TriangulatedFeatures& meas) { processFeaturesMeasurement(meas); }
    +
    58
    +
    64 const MSCEqFOptions& options() const;
    +
    65
    +
    71 const StateOptions& stateOptions() const;
    +
    72
    +
    78 const MatrixX& covariance() const;
    +
    79
    +
    85 const MatrixX coreCovariance() const;
    +
    86
    +
    92 const SystemState& stateEstimate() const;
    +
    93
    +
    99 const SystemState& stateOrigin() const;
    +
    100
    +
    108 void setGivenOrigin(const SE23& T0, const Vector6& b0, const fp& timestamp);
    +
    109
    +
    115 const cv::Mat3b imageWithTracks(const Camera& cam) const;
    +
    116
    +
    122 void visualizeImageWithTracks(const Camera& cam) const;
    +
    123
    +
    129 [[nodiscard]] const bool& isInit() const;
    +
    130
    +
    136 [[nodiscard]] const bool& zvuPerformed() const;
    +
    137
    +
    138 private:
    +
    145 void processImuMeasurement(const Imu& imu);
    +
    146
    +
    158 void processCameraMeasurement(Camera& cam);
    +
    159
    +
    171 void processFeaturesMeasurement(TriangulatedFeatures& features);
    +
    172
    +
    180 void initialize(Camera& cam);
    +
    181
    +
    189 void initialize(TriangulatedFeatures& features);
    +
    190
    +
    195 void setGivenOrigin();
    +
    196
    +
    201 void logInit() const;
    +
    202
    +
    203 OptionParser parser_;
    +
    204 MSCEqFOptions opts_;
    +
    205
    +
    206 SystemState xi0_;
    +
    207 MSCEqFState X_;
    +
    208 SystemState xi_;
    +
    209
    +
    210 TrackManager track_manager_;
    +
    211 Checker checker_;
    +
    212 StaticInitializer initializer_;
    +
    213 Propagator propagator_;
    +
    214 Updater updater_;
    +
    215 ZeroVelocityUpdater zvupdater_;
    +
    216 Visualizer visualizer_; //<! The MSCEqF visualizer
    +
    217
    +
    218 std::unordered_set<uint> ids_to_update_;
    +
    219
    +
    220 fp timestamp_;
    +
    221
    +
    222 bool is_filter_initialized_;
    +
    223 bool zvu_performed_;
    +
    224};
    +
    +
    225
    +
    226} // namespace msceqf
    +
    227
    +
    228#endif // MSCEQF_HPP
    +
    Simple class to perform various checks.
    Definition checker.hpp:27
    +
    Definition msceqf.hpp:29
    +
    void setGivenOrigin(const SE23 &T0, const Vector6 &b0, const fp &timestamp)
    Set origin xi0 with given state programatically.
    +
    void processMeasurement(TriangulatedFeatures &meas)
    Process triangulated features measurement.
    Definition msceqf.hpp:57
    +
    void visualizeImageWithTracks(const Camera &cam) const
    Visualize the processed image with overlayed tracks.
    +
    const bool & zvuPerformed() const
    Check if a zero velocity update has been performed.
    +
    const MatrixX & covariance() const
    Get a constant reference to the covariance matrix of the MSCEqF state.
    +
    const StateOptions & stateOptions() const
    Get a constant reference to the MSCEqF state options.
    +
    void processMeasurement(const Imu &meas)
    Process IMU measurement.
    Definition msceqf.hpp:43
    +
    const bool & isInit() const
    Check if the filter is initialized.
    +
    const MatrixX coreCovariance() const
    Get the covariance of the navigation states (D, delta)
    +
    const cv::Mat3b imageWithTracks(const Camera &cam) const
    Get the processed image with overlayed tracks.
    +
    MSCEqF(const std::string &params_filepath)
    MSCEqF Constructor.
    +
    void processMeasurement(Camera &meas)
    Process camera measurement.
    Definition msceqf.hpp:50
    +
    const MSCEqFOptions & options() const
    Get a constant reference to the MSCEqF options.
    +
    const SystemState & stateEstimate() const
    Get a constant reference to the estimated state.
    +
    const SystemState & stateOrigin() const
    Get a constant reference to the origin state.
    +
    this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
    Definition state.hpp:30
    +
    Definition msceqf_option_parser.hpp:29
    +
    Definition propagator.hpp:25
    +
    Definition static_initializer.hpp:21
    +
    The SystemState class represent the state of the system posed on the Homogenous space.
    Definition system.hpp:29
    +
    This class manages the multiple tracks of feature traked in time.
    Definition track_manager.hpp:28
    +
    Updater class. This class implements the Multi State Constraint update step of the MSCEqF filter.
    Definition updater.hpp:30
    +
    Definition visualizer.hpp:23
    +
    Zero velocity updater class. This class implements the Equivariant Zero Velocity Update (ZVU) of the ...
    Definition zero_velocity_updater.hpp:26
    +
    Definition sensor_data.hpp:78
    +
    Struct for one IMU reading. It includes timestamp, angular velocity and linear acceleration....
    Definition sensor_data.hpp:29
    +
    Definition msceqf_options.hpp:206
    +
    Definition msceqf_options.hpp:98
    +
    Definition sensor_data.hpp:98
    +
    +
    + + + + diff --git a/msceqf__option__parser_8hpp_source.html b/msceqf__option__parser_8hpp_source.html new file mode 100644 index 0000000..6045d27 --- /dev/null +++ b/msceqf__option__parser_8hpp_source.html @@ -0,0 +1,290 @@ + + + + + + + +MSCEqF: include/msceqf/options/msceqf_option_parser.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    msceqf_option_parser.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef OPTIONS_PARSER_HPP
    +
    13#define OPTIONS_PARSER_HPP
    +
    14
    +
    15#include <yaml-cpp/yaml.h>
    +
    16
    +
    17#include <numeric>
    +
    18#include <sstream>
    +
    19#include <opencv2/opencv.hpp>
    +
    20
    +
    21#include "msceqf/options/msceqf_options.hpp"
    +
    22#include "types/fptypes.hpp"
    +
    23#include "utils/logger.hpp"
    +
    24#include "utils/tools.hpp"
    +
    25
    +
    26namespace msceqf
    +
    27{
    +
    + +
    29 {
    +
    30 public:
    +
    36 OptionParser(const std::string &filepath);
    +
    37
    + +
    44
    +
    45 private:
    +
    58 template <int Rows, int Cols>
    +
    59 [[nodiscard]] bool read(Matrix<Rows, Cols> &x, const std::string &param)
    +
    60 {
    +
    61 if (node_[param])
    +
    62 {
    +
    63 using vector = std::vector<fp>;
    +
    64 using vectorvector = std::vector<std::vector<fp>>;
    +
    65
    +
    66 int rows = Rows;
    +
    67 int cols = Cols;
    +
    68
    +
    69 if constexpr (Rows == 1 || Cols == 1)
    +
    70 {
    +
    71 vector vec = node_[param].as<vector>();
    +
    72 if constexpr (Rows == -1)
    +
    73 {
    +
    74 rows = vec.size();
    +
    75 }
    +
    76 else if (Cols == -1)
    +
    77 {
    +
    78 cols = vec.size();
    +
    79 }
    +
    80 x = Map<Matrix<Rows, Cols>>(vec.data(), rows, cols);
    +
    81 }
    +
    82 else
    +
    83 {
    +
    84 vectorvector mat = node_[param].as<vectorvector>();
    +
    85 vector vec = utils::flatten(mat);
    +
    86 if constexpr (Rows == 1 && Cols == 1)
    +
    87 {
    +
    88 rows = mat.size();
    +
    89 cols = vec.size() / mat.size();
    +
    90 }
    +
    91 x = Map<Matrix<Rows, Cols, Eigen::RowMajor>>(vec.data(), rows, cols);
    +
    92 }
    +
    93 if constexpr (Rows == 1)
    +
    94 {
    +
    95 utils::Logger::info("Parameter: [" + param + "] found. Option set to:" +
    +
    96 (std::ostringstream{} << x).str());
    +
    97 }
    +
    98 else if (Cols == 1)
    +
    99 {
    +
    100 utils::Logger::info("Parameter: [" + param + "] found. Option set to: " +
    +
    101 (std::ostringstream{} << x.transpose()).str());
    +
    102 }
    +
    103 else
    +
    104 {
    +
    105 utils::Logger::info("Parameter: [" + param + "] found. Option set to: \n" +
    +
    106 (std::ostringstream{} << x).str());
    +
    107 }
    +
    108
    +
    109 return true;
    +
    110 }
    +
    111 utils::Logger::warn("Parameter: [" + param + "] not found");
    +
    112 return false;
    +
    113 }
    +
    114
    +
    125 template <typename Scalar>
    +
    126 [[nodiscard]] bool read(Quaternion &q, const std::string &param)
    +
    127 {
    +
    128 if (node_[param])
    +
    129 {
    +
    130 using vector = std::vector<fp>;
    +
    131 vector vec = node_[param].as<vector>();
    +
    132 q = Quaternion(vec).normalize();
    +
    133 utils::Logger::info("Parameter: [" + param + "] found. Option set to: \n" +
    +
    134 (std::ostringstream{} << q).str());
    +
    135 return true;
    +
    136 }
    +
    137 utils::Logger::warn("Parameter: [" + param + "] not found");
    +
    138 return false;
    +
    139 }
    +
    140
    +
    149 template <typename T>
    +
    150 [[nodiscard]] bool read(T &p, const std::string &param)
    +
    151 {
    +
    152 if (node_[param])
    +
    153 {
    +
    154 p = node_[param].as<T>();
    +
    155 utils::Logger::info("Parameter: [" + param + "] found. Option set to: " +
    +
    156 (std::ostringstream{} << p).str());
    +
    157 return true;
    +
    158 }
    +
    159 utils::Logger::warn("Parameter: [" + param + "] not found");
    +
    160 return false;
    +
    161 }
    +
    162
    +
    163 template <typename T, typename Convertible>
    +
    164 void readDefault(T &p, const Convertible &def, const std::string &param)
    +
    165 {
    +
    166 static_assert(std::is_convertible_v<Convertible, T>);
    +
    167 if (!read(p, param))
    +
    168 {
    +
    169 p = def;
    +
    170 utils::Logger::warn("Parameter: [" + param + "] set to default value: " +
    +
    171 (std::ostringstream{} << p).str());
    +
    172 }
    +
    173 }
    +
    174
    +
    188 void parseCameraParameters(SE3 &extrinsics,
    +
    189 In &intrinsics,
    +
    190 DistortionModel &distortion_model,
    +
    191 VectorX &distortion_coefficients,
    +
    192 Vector2 &resolution,
    +
    193 fp &timeshift_cam_imu,
    +
    194 cv::Mat &mask,
    +
    195 MaskType &mask_type);
    +
    196
    +
    204 void parseGivenOrigin(SE23 &T, Vector6 &b, fp &t0);
    +
    205
    +
    211 void parseEqualizationMethod(EqualizationMethod &eq);
    +
    212
    +
    218 void parseFeatureRepresentation(FeatureRepresentation &rep);
    +
    219
    +
    225 void parseProjectionMethod(ProjectionMethod &proj);
    +
    226
    +
    232 void parseDetectorType(FeatureDetector &detector);
    +
    233
    +
    243 void parseInitialCovariance(Matrix9 &D_cov, Matrix6 &delta_cov, Matrix6 &E_cov, Matrix4 &L_cov);
    +
    244
    +
    253 void parseProcessNoise(fp &w_std, fp &a_std, fp &bw_std, fp &ba_std);
    +
    254
    +
    262 void parsePixStd(fp &pix_std, const StateOptions &opts);
    +
    263
    +
    269 void parseZeroVelocityUpdate(ZeroVelocityUpdate &zvu);
    +
    270
    +
    271 YAML::Node node_;
    +
    272 std::string filepath_;
    +
    273 };
    +
    +
    274
    +
    275} // namespace msceqf
    +
    276
    +
    277#endif // OPTIONS_HPP
    +
    Definition msceqf_option_parser.hpp:29
    +
    MSCEqFOptions parseOptions()
    Parse oprion and create MSCEqFOptions struct.
    +
    OptionParser(const std::string &filepath)
    Option parser constructor.
    +
    static void warn(const T &msg)
    Format a warn message and log it in yellow.
    Definition logger.hpp:100
    +
    static void info(const T &msg)
    Format a info message and log it in white.
    Definition logger.hpp:67
    +
    Definition msceqf_options.hpp:206
    +
    +
    + + + + diff --git a/msceqf__options_8hpp_source.html b/msceqf__options_8hpp_source.html new file mode 100644 index 0000000..4e1f3ce --- /dev/null +++ b/msceqf__options_8hpp_source.html @@ -0,0 +1,408 @@ + + + + + + + +MSCEqF: include/msceqf/options/msceqf_options.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    msceqf_options.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef OPTIONS_HPP
    +
    13#define OPTIONS_HPP
    +
    14
    +
    15#include <opencv2/opencv.hpp>
    +
    16
    +
    17#include "types/fptypes.hpp"
    +
    18
    +
    19namespace msceqf
    +
    20{
    +
    25enum class FeatureRepresentation
    +
    26{
    +
    27 ANCHORED_EUCLIDEAN,
    +
    28 ANCHORED_POLAR,
    +
    29 ANCHORED_INVERSE_DEPTH,
    +
    30};
    +
    31
    +
    36enum class ProjectionMethod
    +
    37{
    +
    38 UNIT_SPHERE,
    +
    39 UNIT_PLANE,
    +
    40};
    +
    41
    +
    46enum class DistortionModel
    +
    47{
    +
    48 RADTAN,
    +
    49 EQUIDISTANT,
    +
    50};
    +
    51
    +
    56enum class EqualizationMethod
    +
    57{
    +
    58 HISTOGRAM,
    +
    59 CLAHE,
    +
    60 NONE,
    +
    61};
    +
    62
    +
    67enum class FeatureDetector
    +
    68{
    +
    69 FAST,
    +
    70 GFTT,
    +
    71};
    +
    72
    +
    77enum class ZeroVelocityUpdate
    +
    78{
    +
    79 DISABLE,
    +
    80 ENABLE,
    +
    81 BEGINNING,
    +
    82};
    +
    83
    +
    89enum class MaskType
    +
    90{
    +
    91 STATIC,
    +
    92 DYNAMIC,
    +
    93};
    +
    94
    + +
    110
    + +
    120
    + +
    135
    +
    + +
    137{
    +
    138 ZeroVelocityUpdate zero_velocity_update_;
    + +
    140};
    +
    +
    141
    + +
    153
    + +
    159
    +
    + +
    161{
    + +
    163 Vector2 resolution_;
    + +
    165 cv::Mat static_mask_;
    +
    166 MaskType mask_type_;
    +
    167};
    +
    +
    168
    +
    + +
    170{
    + +
    172};
    +
    +
    173
    +
    + +
    175{
    + +
    177};
    +
    +
    178
    + +
    198
    + +
    204
    + +
    215
    +
    216} // namespace msceqf
    +
    217
    +
    218#endif // OPTIONS_HPP
    +
    Definition msceqf_options.hpp:161
    +
    fp timeshift_cam_imu_
    The time shift between camera and imu (t_imu = t_cam + shift)
    Definition msceqf_options.hpp:164
    +
    cv::Mat static_mask_
    The static image mask.
    Definition msceqf_options.hpp:165
    +
    VectorX distortion_coefficients_
    Distortion coefficients.
    Definition msceqf_options.hpp:162
    +
    Vector2 resolution_
    Width, Height.
    Definition msceqf_options.hpp:163
    +
    MaskType mask_type_
    The mask type.
    Definition msceqf_options.hpp:166
    +
    Definition msceqf_options.hpp:155
    +
    fp disparity_window_
    The window is seconds used to check disparity.
    Definition msceqf_options.hpp:157
    +
    fp disparity_threshold_
    the disparity threshold for the disparity check
    Definition msceqf_options.hpp:156
    +
    Definition msceqf_options.hpp:170
    +
    int fast_threshold_
    Fast detector threshold (The lower the more feature are detected/accepted)
    Definition msceqf_options.hpp:171
    +
    Definition msceqf_options.hpp:175
    +
    fp quality_level_
    Shi-Tomasi detector quality level (The lower the more feature are detected/accepted)
    Definition msceqf_options.hpp:176
    +
    Definition msceqf_options.hpp:143
    +
    fp imu_init_window_
    The window in seconds used to check for acceleration spikes.
    Definition msceqf_options.hpp:145
    +
    SE23 initial_extended_pose_
    Initial extended pose.
    Definition msceqf_options.hpp:149
    +
    bool identity_b0_
    Boolean to fix identity bias origin (b0)git.
    Definition msceqf_options.hpp:147
    +
    fp acc_threshold_
    The acceleration threshold for the static initializer.
    Definition msceqf_options.hpp:144
    +
    fp initial_timestamp_
    Initial timestamp.
    Definition msceqf_options.hpp:151
    +
    bool init_with_given_state_
    Boolean to initialize the state with the given state.
    Definition msceqf_options.hpp:148
    +
    Vector6 initial_bias_
    Initial bias.
    Definition msceqf_options.hpp:150
    +
    fp gravity_
    The magnitude of the gravity vector in m/s^2.
    Definition msceqf_options.hpp:146
    +
    Definition msceqf_options.hpp:206
    +
    TrackManagerOptions track_manager_options_
    The track manager options.
    Definition msceqf_options.hpp:207
    +
    StateOptions state_options_
    The state options.
    Definition msceqf_options.hpp:208
    +
    InitializerOptions init_options_
    The initializer options.
    Definition msceqf_options.hpp:210
    +
    ZeroVelocityUpdaterOptions zvupdater_options_
    The zero velocity updater options.
    Definition msceqf_options.hpp:213
    +
    UpdaterOptions updater_options_
    The updater options.
    Definition msceqf_options.hpp:212
    +
    PropagatorOptions propagator_options_
    The propagator options.
    Definition msceqf_options.hpp:211
    +
    CheckerOptions checker_options_
    The checker options.
    Definition msceqf_options.hpp:209
    +
    Definition msceqf_options.hpp:112
    +
    fp acceleration_bias_std_
    Continuous time acceleration bias (random walk) standard deviation.
    Definition msceqf_options.hpp:116
    +
    fp angular_velocity_std_
    Continuous time angular velocity standard deviation.
    Definition msceqf_options.hpp:113
    +
    int state_transition_order_
    The order for the computation of the state transition matrix.
    Definition msceqf_options.hpp:118
    +
    uint imu_buffer_max_size_
    The maximum size of the propagator's imu buffer.
    Definition msceqf_options.hpp:117
    +
    fp acceleration_std_
    Continuous time acceleration standard deviation.
    Definition msceqf_options.hpp:114
    +
    fp angular_velocity_bias_std_
    Continuous time angular velocity bias (random walk) standard deviation.
    Definition msceqf_options.hpp:115
    +
    Definition msceqf_options.hpp:98
    +
    fp gravity_
    The magnitude of the gravity vector in m/s^2.
    Definition msceqf_options.hpp:106
    +
    Matrix6 E_init_cov_
    Initial covariance of the E element of the state.
    Definition msceqf_options.hpp:101
    +
    bool enable_camera_intrinsics_calibration_
    Boolean to enable intinsic camera calibration.
    Definition msceqf_options.hpp:105
    +
    Matrix9 D_init_cov_
    Initial covariance of the D element of the state.
    Definition msceqf_options.hpp:99
    +
    uint num_persistent_features_
    The maximum number of persistent (SLAM) features.
    Definition msceqf_options.hpp:108
    +
    uint num_clones_
    The maximum number of stochastic clones.
    Definition msceqf_options.hpp:107
    +
    Matrix4 L_init_cov_
    Initial covariance of the L element of the state.
    Definition msceqf_options.hpp:102
    +
    In initial_camera_intrinsics_
    Initial camera intrinsics.
    Definition msceqf_options.hpp:104
    +
    Matrix6 delta_init_cov_
    Initial covariance of the delta element of the state.
    Definition msceqf_options.hpp:100
    +
    SE3 initial_camera_extrinsics_
    Initial camera extrinsics.
    Definition msceqf_options.hpp:103
    +
    Definition msceqf_options.hpp:200
    +
    size_t max_track_length_
    The maximul length of a track.
    Definition msceqf_options.hpp:202
    +
    TrackerOptions tracker_options_
    The vision tracker options.
    Definition msceqf_options.hpp:201
    +
    Definition msceqf_options.hpp:180
    +
    uint optical_flow_win_size_
    Window size for optical flow.
    Definition msceqf_options.hpp:192
    +
    uint min_px_dist_
    Minimum pixel distance between features.
    Definition msceqf_options.hpp:189
    +
    uint min_features_
    Minimum feature to track/detect.
    Definition msceqf_options.hpp:186
    +
    FastOptions fast_opts_
    Fast feature detector options.
    Definition msceqf_options.hpp:195
    +
    uint grid_y_size_
    y size of the grid
    Definition msceqf_options.hpp:188
    +
    uint max_features_
    Maximum feature to track/detect.
    Definition msceqf_options.hpp:185
    +
    fp ransac_reprojection_
    RANSAC reprojection threshold.
    Definition msceqf_options.hpp:194
    +
    FeatureDetector detector_
    The feature detector.
    Definition msceqf_options.hpp:184
    +
    int opencv_threads_
    Number of threads for opencv.
    Definition msceqf_options.hpp:193
    +
    CameraOptions cam_options_
    The camera options.
    Definition msceqf_options.hpp:181
    +
    uint optical_flow_pyramid_levels_
    Pyramids levels for optical flow (1-based)
    Definition msceqf_options.hpp:190
    +
    DistortionModel distortion_model_
    Distortion Model.
    Definition msceqf_options.hpp:182
    +
    uint grid_x_size_
    x size of the grid
    Definition msceqf_options.hpp:187
    +
    EqualizationMethod equalizer_
    The image equalization method.
    Definition msceqf_options.hpp:183
    +
    GFTTOptions gftt_opts_
    Shi-Tomasi feature detector options.
    Definition msceqf_options.hpp:196
    +
    uint detector_pyramid_levels_
    Pyramids levels for feature detection (1-based)
    Definition msceqf_options.hpp:191
    +
    Definition msceqf_options.hpp:122
    +
    FeatureRepresentation msc_features_representation_
    Multi State Constraint features representation.
    Definition msceqf_options.hpp:128
    +
    fp min_depth_
    Minimum depth of triangulated features.
    Definition msceqf_options.hpp:124
    +
    ProjectionMethod projection_method_
    The feature projection method.
    Definition msceqf_options.hpp:129
    +
    fp pixel_std_
    The pixel standard deviation.
    Definition msceqf_options.hpp:132
    +
    bool curvature_correction_
    Boolean to enable the curvature correction.
    Definition msceqf_options.hpp:133
    +
    fp tollerance_
    Tollerance for features triangulation refinement.
    Definition msceqf_options.hpp:127
    +
    fp min_angle_
    Minimum angle (in degrees) between views for trianglulation.
    Definition msceqf_options.hpp:131
    +
    uint max_iterations_
    Maximum number of iteration for features triangulation refinement.
    Definition msceqf_options.hpp:126
    +
    bool refine_traingulation_
    Boolean to enable feature triangulation refinement via nonlinear optimization.
    Definition msceqf_options.hpp:123
    +
    fp max_depth_
    Maximum depth of triangulated features.
    Definition msceqf_options.hpp:125
    +
    uint min_track_lenght_
    Minimum track length for triangulation.
    Definition msceqf_options.hpp:130
    +
    Definition msceqf_options.hpp:137
    +
    bool curvature_correction_
    Boolean to enable the curvature correction on the zero velocity update.
    Definition msceqf_options.hpp:139
    +
    ZeroVelocityUpdate zero_velocity_update_
    The zero velocity update method.
    Definition msceqf_options.hpp:138
    +
    +
    + + + + diff --git a/msceqf__ros_8hpp_source.html b/msceqf__ros_8hpp_source.html new file mode 100644 index 0000000..4955bb7 --- /dev/null +++ b/msceqf__ros_8hpp_source.html @@ -0,0 +1,205 @@ + + + + + + + +MSCEqF: wrappers/ros/ros1/include/msceqf_ros.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    msceqf_ros.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef MSCEQF_ROS_H
    +
    13#define MSCEQF_ROS_H
    +
    14
    +
    15#include <ros/ros.h>
    +
    16#include <Eigen/Eigen>
    +
    17#include <atomic>
    +
    18#include <sensor_msgs/Image.h>
    +
    19#include <sensor_msgs/Imu.h>
    +
    20#include <sensor_msgs/CameraInfo.h>
    +
    21#include <sensor_msgs/PointCloud.h>
    +
    22#include <geometry_msgs/PoseWithCovarianceStamped.h>
    +
    23#include <nav_msgs/Path.h>
    +
    24#include <opencv2/opencv.hpp>
    +
    25#include <cv_bridge/cv_bridge.h>
    +
    26#include <rosbag/bag.h>
    +
    27
    +
    28#include "msceqf/msceqf.hpp"
    +
    29
    +
    + +
    31{
    +
    32 public:
    +
    47 MSCEqFRos(const ros::NodeHandle &nh,
    +
    48 const std::string &msceqf_config_filepath,
    +
    49 const std::string &imu_topic,
    +
    50 const std::string &cam_topic,
    +
    51 const std::string &pose_topic,
    +
    52 const std::string &path_topic,
    +
    53 const std::string &image_topic,
    +
    54 const std::string &extrinsics_topic,
    +
    55 const std::string &intrinsics_topic,
    +
    56 const std::string &origin_topic,
    +
    57 const bool &record,
    +
    58 const std::string &bagfile);
    +
    59
    +
    64 void callback_image(const sensor_msgs::Image::ConstPtr &msg);
    +
    65
    +
    70 void callback_imu(const sensor_msgs::Imu::ConstPtr &msg);
    +
    71
    +
    72 private:
    +
    78 void publish(const msceqf::Camera &cam);
    +
    79
    +
    80 ros::NodeHandle nh_;
    +
    81
    +
    82 msceqf::MSCEqF sys_;
    +
    83
    +
    84 ros::Subscriber sub_cam_;
    +
    85 ros::Subscriber sub_imu_;
    +
    86
    +
    87 ros::Publisher pub_pose_;
    +
    88 ros::Publisher pub_image_;
    +
    89 ros::Publisher pub_path_;
    +
    90 ros::Publisher pub_extrinsics_;
    +
    91 ros::Publisher pub_intrinsics_;
    +
    92 ros::Publisher pub_origin_;
    +
    93
    +
    94 geometry_msgs::PoseWithCovarianceStamped pose_;
    +
    95 nav_msgs::Path path_;
    +
    96 geometry_msgs::PoseStamped extrinsics_;
    +
    97 sensor_msgs::CameraInfo intrinsics_;
    +
    98 geometry_msgs::PoseStamped origin_;
    +
    99
    +
    100 std::deque<msceqf::Camera> cams_;
    +
    101 std::mutex mutex_;
    +
    102 std::atomic<bool> processing_ = false;
    +
    103
    +
    104 bool record_;
    +
    105 rosbag::Bag bag_;
    +
    106
    +
    107 uint seq_ = 0;
    +
    108};
    +
    +
    109
    +
    110#endif // MSCEQF_ROS_H
    +
    Definition msceqf_ros.hpp:31
    +
    MSCEqFRos(const ros::NodeHandle &nh, const std::string &msceqf_config_filepath, const std::string &imu_topic, const std::string &cam_topic, const std::string &pose_topic, const std::string &path_topic, const std::string &image_topic, const std::string &extrinsics_topic, const std::string &intrinsics_topic, const std::string &origin_topic, const bool &record, const std::string &bagfile)
    Constructor.
    +
    void callback_imu(const sensor_msgs::Imu::ConstPtr &msg)
    IMU callback.
    +
    void callback_image(const sensor_msgs::Image::ConstPtr &msg)
    Image callback.
    +
    Definition msceqf.hpp:29
    +
    Definition sensor_data.hpp:78
    +
    +
    + + + + diff --git a/msceqf_logo_docs.png b/msceqf_logo_docs.png new file mode 100644 index 0000000000000000000000000000000000000000..e461ce627adfd24264bb68a89608a77e3394314a GIT binary patch literal 14800 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 literal 0 HcmV?d00001 diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/navtree.css b/navtree.css new file mode 100644 index 0000000..69211d4 --- /dev/null +++ b/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/navtree.js b/navtree.js new file mode 100644 index 0000000..9027ce6 --- /dev/null +++ b/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/propagator_8hpp_source.html b/propagator_8hpp_source.html new file mode 100644 index 0000000..12721b4 --- /dev/null +++ b/propagator_8hpp_source.html @@ -0,0 +1,188 @@ + + + + + + + +MSCEqF: include/msceqf/filter/propagator/propagator.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    propagator.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef PROPAGATOR_HPP
    +
    13#define PROPAGATOR_HPP
    +
    14
    +
    15#include "msceqf/options/msceqf_options.hpp"
    +
    16#include "msceqf/symmetry/symmetry.hpp"
    +
    17#include "sensors/sensor_data.hpp"
    +
    18#include "msceqf/state/state.hpp"
    +
    19#include "types/fptypes.hpp"
    +
    20#include "utils/tools.hpp"
    +
    21
    +
    22namespace msceqf
    +
    23{
    +
    + +
    25{
    +
    26 public:
    +
    27 using ImuBuffer = std::deque<Imu>;
    +
    28
    + +
    35
    +
    48 void insertImu(MSCEqFState& X, const SystemState& xi0, const Imu& imu, fp& timestamp);
    +
    49
    +
    59 bool propagate(MSCEqFState& X, const SystemState& xi0, fp& timestamp, const fp& new_timestamp);
    +
    60
    +
    61 private:
    +
    76 ImuBuffer getImuReadings(const fp& t0, const fp& t1);
    +
    77
    +
    86 Imu lerp(const Imu& pre, const Imu& post, const fp& alpha);
    +
    87
    +
    96 void propagateMean(MSCEqFState& X, const SystemState& xi0, const Imu& u, const fp& dt);
    +
    97
    +
    106 void propagateCovariance(MSCEqFState& X, const SystemState& xi0, const Imu& u, const fp& dt);
    +
    107
    +
    118 const MatrixX stateMatrix(MSCEqFState& X, const SystemState& xi0, const Imu& u) const;
    +
    119
    +
    127 const MatrixX inputMatrix(MSCEqFState& X, const SystemState& xi0) const;
    +
    128
    +
    146 const MatrixX discreteTimeMatrix(const MatrixX& A, const MatrixX& B, const fp& dt) const;
    +
    147
    +
    148 ImuBuffer imu_buffer_;
    +
    149 Matrix12 Q_;
    +
    150
    +
    151 int state_transition_order_;
    +
    152 uint imu_buffer_max_size_;
    +
    153
    +
    154 std::mutex mutex_;
    +
    155
    +
    156 static constexpr fp eps_ = 1e-6;
    +
    157};
    +
    +
    158
    +
    159} // namespace msceqf
    +
    160
    +
    161#endif // PROPAGATOR_HPP
    +
    this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
    Definition state.hpp:30
    +
    Definition propagator.hpp:25
    +
    Propagator(const PropagatorOptions &opts)
    Construct a Propagator object given the options.
    +
    std::deque< Imu > ImuBuffer
    The Imu measurement buffer.
    Definition propagator.hpp:27
    +
    void insertImu(MSCEqFState &X, const SystemState &xi0, const Imu &imu, fp &timestamp)
    insert a new IMU measurement into the imu buffer, if the given IMU measurement has a grater timestamp...
    +
    bool propagate(MSCEqFState &X, const SystemState &xi0, fp &timestamp, const fp &new_timestamp)
    This function implements the mean and covariance propagation from timestamp to new_timestamp for the ...
    +
    The SystemState class represent the state of the system posed on the Homogenous space.
    Definition system.hpp:29
    +
    Struct for one IMU reading. It includes timestamp, angular velocity and linear acceleration....
    Definition sensor_data.hpp:29
    +
    Definition msceqf_options.hpp:112
    +
    +
    + + + + diff --git a/resize.js b/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..f9464a1 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['a_5ff_5f_0',['A_f_',['../structmsceqf_1_1_feat_helper.html#a2bb785571bb0f5a5e2ffd1d7c4df4703',1,'msceqf::FeatHelper']]], + ['academic_20purposes_1',['Usage for academic purposes',['../index.html#autotoc_md18',1,'']]], + ['acc_5f_2',['acc_',['../structmsceqf_1_1_imu.html#a1b29298f3701300d491570bd8cd5c4f0',1,'msceqf::Imu']]], + ['acc_5fthreshold_5f_3',['acc_threshold_',['../structmsceqf_1_1_initializer_options.html#a3637229cb8d7ea08e6f6db72f2a50aa7',1,'msceqf::InitializerOptions']]], + ['acceleration_5fbias_5fstd_5f_4',['acceleration_bias_std_',['../structmsceqf_1_1_propagator_options.html#a320de7822195cffbe2ae222a16f97cdb',1,'msceqf::PropagatorOptions']]], + ['acceleration_5fstd_5f_5',['acceleration_std_',['../structmsceqf_1_1_propagator_options.html#af5f66f20c165f0ca57564fe767d8bf0c',1,'msceqf::PropagatorOptions']]], + ['activetracksids_6',['activeTracksIds',['../classmsceqf_1_1_track_manager.html#a0c0ff31e29de9e63a454a58af7c9b931',1,'msceqf::TrackManager']]], + ['anchor_5ftimestamp_5f_7',['anchor_timestamp_',['../structmsceqf_1_1_feat_helper.html#a528f8cd86b7b60150a89fe7033f31a87',1,'msceqf::FeatHelper']]], + ['and_20or_20with_20ros_8',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]], + ['ang_5f_9',['ang_',['../structmsceqf_1_1_imu.html#acde575da260744b95bf84f6bd1fb1c96',1,'msceqf::Imu']]], + ['angular_5fvelocity_5fbias_5fstd_5f_10',['angular_velocity_bias_std_',['../structmsceqf_1_1_propagator_options.html#afce5ba5fda7ed445ed7d99d96b15609c',1,'msceqf::PropagatorOptions']]], + ['angular_5fvelocity_5fstd_5f_11',['angular_velocity_std_',['../structmsceqf_1_1_propagator_options.html#a404f38084c32c44d4f6851de43a9b422',1,'msceqf::PropagatorOptions']]], + ['at_12',['at',['../classutils_1_1_insertion_ordered_map.html#a75e4c95149461f854cd43d9c70c12da8',1,'utils::InsertionOrderedMap::at(const Key &key) const'],['../classutils_1_1_insertion_ordered_map.html#ab659341ecf8995e225c1c4e2832ec098',1,'utils::InsertionOrderedMap::at(const Key &key)']]] +]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..71cfa42 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['b_0',['B',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a2ba8e8aa0d8fac30959ad516098a7c15',1,'msceqf::MSCEqFState']]], + ['b_1',['b',['../classmsceqf_1_1_system_state.html#aa3d4b2cdfdd1063f53c8260f8e1d3987',1,'msceqf::SystemState']]], + ['b0_2',['b0',['../classmsceqf_1_1_static_initializer.html#a28a97008c469fd24d5bad902bd4637dc',1,'msceqf::StaticInitializer']]], + ['b_5f_3',['b_',['../structmsceqf_1_1_bias_state.html#a4d343a459e30978111c7875f8bb3f6ff',1,'msceqf::BiasState']]], + ['biasstate_4',['BiasState',['../structmsceqf_1_1_bias_state.html',1,'msceqf']]], + ['block_5frows_5',['block_rows',['../classmsceqf_1_1_projection_helper.html#a772f3460fab451ec75cea7bde3a5cf1d',1,'msceqf::ProjectionHelper']]], + ['block_5frows_5f_6',['block_rows_',['../classmsceqf_1_1_projection_helper.html#a4514958bb1cbd316db046c870f5096a9',1,'msceqf::ProjectionHelper']]] +]; diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 0000000..ac1916e --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['radtancamera_0',['RadtanCamera',['../structmsceqf_1_1_radtan_camera.html',1,'msceqf']]], + ['random_1',['Random',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a3cb9682d076eae9b1463a2dbdaa5d2f4',1,'msceqf::MSCEqFState']]], + ['ransac_5freprojection_5f_2',['ransac_reprojection_',['../structmsceqf_1_1_tracker_options.html#a7e438ee7012eeafd573d79a5a95578ea',1,'msceqf::TrackerOptions']]], + ['references_3',['References',['../index.html#autotoc_md19',1,'']]], + ['refine_5ftraingulation_5f_4',['refine_traingulation_',['../structmsceqf_1_1_updater_options.html#ad2f00bf871333e924379f7a51f8050eb',1,'msceqf::UpdaterOptions']]], + ['removeinvalid_5',['removeInvalid',['../structmsceqf_1_1_features.html#a7c88b6d974425f8fc019183328f8a59a',1,'msceqf::Features::removeInvalid()'],['../structmsceqf_1_1_track.html#a23ea6d1201294522d8058d625792cc39',1,'msceqf::Track::removeInvalid(std::vector< bool > &invalid)']]], + ['removetail_6',['removeTail',['../structmsceqf_1_1_track.html#a555ada2c730ab5161f7c908400c91d6e',1,'msceqf::Track']]], + ['removetracksid_7',['removeTracksId',['../classmsceqf_1_1_track_manager.html#aefb19f95a52046a2939b94abf1e5a22e',1,'msceqf::TrackManager']]], + ['removetrackstail_8',['removeTracksTail',['../classmsceqf_1_1_track_manager.html#a72c21cede157880964b2494123e640f2',1,'msceqf::TrackManager']]], + ['residualjacobianblock_9',['residualJacobianBlock',['../classmsceqf_1_1_projection_helper.html#a6e5d693becca05644db55c84444491e2',1,'msceqf::ProjectionHelper::residualJacobianBlock()'],['../classmsceqf_1_1_projection_helper_s2.html#a675fb8dc7bd5a8af52e7a9a86b54e0f8',1,'msceqf::ProjectionHelperS2::residualJacobianBlock()'],['../classmsceqf_1_1_projection_helper_z1.html#a62f13a69d5d0917693edfa373d80f479',1,'msceqf::ProjectionHelperZ1::residualJacobianBlock()']]], + ['resolution_5f_10',['resolution_',['../structmsceqf_1_1_camera_options.html#a95b5f534cb0fd7bb974aecc891c494e4',1,'msceqf::CameraOptions']]], + ['roadmap_11',['Future roadmap',['../index.html#autotoc_md4',1,'']]], + ['ros_12',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]], + ['ros_20free_20setup_13',['ROS free setup',['../index.html#autotoc_md8',1,'']]], + ['ros1_20setup_14',['ROS1 setup',['../index.html#autotoc_md11',1,'']]], + ['ros2_20setup_15',['ROS2 setup',['../index.html#autotoc_md12',1,'']]], + ['run_20example_20euroc_16',['Run example (Euroc)',['../index.html#autotoc_md10',1,'']]], + ['run_20tests_17',['Run tests',['../index.html#autotoc_md9',1,'']]] +]; diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 0000000..c8c648d --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['s_0',['S',['../classmsceqf_1_1_system_state.html#ae6a0a7129eb4ff2eabdb3c788f5e069d',1,'msceqf::SystemState']]], + ['s_5f_1',['S_',['../structmsceqf_1_1_camera_extrinsic_state.html#a8ce1fcc6761d9b48947283362cdeff6d',1,'msceqf::CameraExtrinsicState']]], + ['sensor_20preparation_2',['Dataset/Sensor preparation',['../index.html#autotoc_md15',1,'']]], + ['setgivenorigin_3',['setGivenOrigin',['../classmsceqf_1_1_m_s_c_eq_f.html#a2287aa91e58c6190cd94aeacedfe9c7d',1,'msceqf::MSCEqF']]], + ['setintrinsics_4',['setIntrinsics',['../classmsceqf_1_1_pinhole_camera.html#a0f35048114204c3577a67b60cf720555',1,'msceqf::PinholeCamera']]], + ['setlevel_5',['setLevel',['../classutils_1_1_logger.html#af532d3fa4a0b29b27f9caa3447122817',1,'utils::Logger']]], + ['setmeasurement_6',['setMeasurement',['../classmsceqf_1_1_zero_velocity_updater.html#a04790d5df6a8dbebe6ecec357aea848b',1,'msceqf::ZeroVelocityUpdater']]], + ['setmotion_7',['setMotion',['../classmsceqf_1_1_zero_velocity_updater.html#aa6d1fe8c72e5c3f51a4c61dfee9bc2ab',1,'msceqf::ZeroVelocityUpdater']]], + ['setup_8',['setup',['../index.html#autotoc_md13',1,'Docker setup'],['../index.html#autotoc_md8',1,'ROS free setup'],['../index.html#autotoc_md11',1,'ROS1 setup'],['../index.html#autotoc_md12',1,'ROS2 setup']]], + ['size_9',['size',['../structmsceqf_1_1_features.html#afe00a99b4854fc45c7d07b4ce3253c7b',1,'msceqf::Features::size()'],['../structmsceqf_1_1_track.html#a9c9438e708358c0e8be003e44ba7d04a',1,'msceqf::Track::size()']]], + ['started_10',['Getting started',['../index.html#autotoc_md7',1,'']]], + ['state_5foptions_5f_11',['state_options_',['../structmsceqf_1_1_m_s_c_eq_f_options.html#a44a0bb324dc700c40146b30fea096ada',1,'msceqf::MSCEqFOptions']]], + ['state_5ftransition_5forder_5f_12',['state_transition_order_',['../structmsceqf_1_1_propagator_options.html#a4d38b1d64b701fa1690d4f49745c89ac',1,'msceqf::PropagatorOptions']]], + ['stateestimate_13',['stateEstimate',['../classmsceqf_1_1_m_s_c_eq_f.html#af1c4f54460f44e87eb7e3ab7b9655973',1,'msceqf::MSCEqF']]], + ['stateoptions_14',['StateOptions',['../structmsceqf_1_1_state_options.html',1,'msceqf']]], + ['stateoptions_15',['stateOptions',['../classmsceqf_1_1_m_s_c_eq_f.html#a4d284b06bf0e6717b2f48fe20e0d26ba',1,'msceqf::MSCEqF']]], + ['stateorigin_16',['stateOrigin',['../classmsceqf_1_1_m_s_c_eq_f.html#af8d31b5b7ee3089c6967d952b9c9848b',1,'msceqf::MSCEqF']]], + ['static_5fmask_5f_17',['static_mask_',['../structmsceqf_1_1_camera_options.html#a76ca9bba5e63f809621c07207584c01f',1,'msceqf::CameraOptions']]], + ['staticinitializer_18',['StaticInitializer',['../classmsceqf_1_1_static_initializer.html',1,'msceqf::StaticInitializer'],['../classmsceqf_1_1_static_initializer.html#abe3e0c8fcc63851184c8fb296d1cde61',1,'msceqf::StaticInitializer::StaticInitializer()']]], + ['stochasticcloning_19',['stochasticCloning',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a40572c524f1776af3f2b213d73d9f257',1,'msceqf::MSCEqFState']]], + ['subcov_20',['subCov',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ad14329a60c17ff014c1940da434df263',1,'msceqf::MSCEqFState']]], + ['subcovcols_21',['subCovCols',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a43759d5a32ac4133e7a30a4faa8620ac',1,'msceqf::MSCEqFState']]], + ['symmetry_22',['Symmetry',['../classmsceqf_1_1_symmetry.html',1,'msceqf::Symmetry'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a41706e12d68690130eaf013ca5aa311b',1,'msceqf::MSCEqFState::Symmetry'],['../classmsceqf_1_1_system_state.html#a41706e12d68690130eaf013ca5aa311b',1,'msceqf::SystemState::Symmetry']]], + ['systemstate_23',['SystemState',['../classmsceqf_1_1_system_state.html',1,'msceqf::SystemState'],['../classmsceqf_1_1_system_state.html#aa842c21ee431baf8fe29cb26d341c16c',1,'msceqf::SystemState::SystemState()=delete'],['../classmsceqf_1_1_system_state.html#a95d992717a66448018694a8931288207',1,'msceqf::SystemState::SystemState(const StateOptions &opts, const SE23 &T0=SE23(), const Vector6 &b0=Vector6::Zero())'],['../classmsceqf_1_1_system_state.html#acd7791337e2a823b2ddd845489f66561',1,'msceqf::SystemState::SystemState(const StateOptions &opts, Args &&... pairs_of_key_ptr)'],['../classmsceqf_1_1_system_state.html#a99428a0cf85c79a9c96df85b07d9f90f',1,'msceqf::SystemState::SystemState(const SystemState &other)']]], + ['systemstatealgebramap_24',['SystemStateAlgebraMap',['../classmsceqf_1_1_system_state.html#a41e4f4879a6ec4c126767e815fec5016',1,'msceqf::SystemState']]], + ['systemstateelement_25',['SystemStateElement',['../classmsceqf_1_1_system_state_element.html',1,'msceqf::SystemStateElement'],['../classmsceqf_1_1_system_state_element.html#a852facaeb4453b2d1eb1ab2d4ed47968',1,'msceqf::SystemStateElement::SystemStateElement()']]], + ['systemstatekey_26',['SystemStateKey',['../classmsceqf_1_1_system_state.html#a0ec44fd4c4b70431fc1eefe9bfe7b64a',1,'msceqf::SystemState']]], + ['systemstatemap_27',['SystemStateMap',['../classmsceqf_1_1_system_state.html#a6f24e3392809c21dd8565e4605298dda',1,'msceqf::SystemState']]] +]; diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 0000000..bb14498 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['t_0',['T',['../classmsceqf_1_1_system_state.html#a388d36c3791f50f0cd1cfc9b5e3c7b9b',1,'msceqf::SystemState']]], + ['t0_1',['T0',['../classmsceqf_1_1_static_initializer.html#a6a483ed7576aae6b537d21308ddc7bba',1,'msceqf::StaticInitializer']]], + ['t_5f_2',['T_',['../structmsceqf_1_1_extended_pose_state.html#aabbae1e01b277093fa711d5566add492',1,'msceqf::ExtendedPoseState']]], + ['tests_3',['Run tests',['../index.html#autotoc_md9',1,'']]], + ['timedfeatures_4',['TimedFeatures',['../classmsceqf_1_1_tracker.html#a66613c9455dfe4f6bcca3ba7cc2c85e8',1,'msceqf::Tracker']]], + ['times_5',['Times',['../structmsceqf_1_1_track.html#af9c2230e603fe30de05a00b85cefa0c7',1,'msceqf::Track']]], + ['timeshift_5fcam_5fimu_5f_6',['timeshift_cam_imu_',['../structmsceqf_1_1_camera_options.html#a714e564848487561d2789e51a8f2522d',1,'msceqf::CameraOptions']]], + ['timestamp_5f_7',['timestamp_',['../structmsceqf_1_1_imu.html#a1376f522b2baafc4f5f37d27fe1afa65',1,'msceqf::Imu::timestamp_'],['../structmsceqf_1_1_camera.html#a90f9e8c1c1768342735573b808f375c3',1,'msceqf::Camera::timestamp_'],['../structmsceqf_1_1_triangulated_features.html#a53d61f771a055963bb72c0bea3eb758d',1,'msceqf::TriangulatedFeatures::timestamp_']]], + ['timestamps_5f_8',['timestamps_',['../structmsceqf_1_1_track.html#aed5463581a0aeb5cc9f73d8c1d67ae3b',1,'msceqf::Track']]], + ['tollerance_5f_9',['tollerance_',['../structmsceqf_1_1_updater_options.html#a8a74476884b4f6adac06662b41e484cf',1,'msceqf::UpdaterOptions']]], + ['tostring_10',['toString',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ae43ed2381a1333a620ad37ecb269d97f',1,'msceqf::MSCEqFState::toString()'],['../classmsceqf_1_1_system_state.html#a8772fe6e1d6f17db099407ee4679945b',1,'msceqf::SystemState::toString()']]], + ['track_11',['Track',['../structmsceqf_1_1_track.html',1,'msceqf']]], + ['track_5fmanager_5foptions_5f_12',['track_manager_options_',['../structmsceqf_1_1_m_s_c_eq_f_options.html#a3e766d4912438667c47a3370986e36f9',1,'msceqf::MSCEqFOptions']]], + ['tracker_13',['Tracker',['../classmsceqf_1_1_tracker.html',1,'msceqf::Tracker'],['../classmsceqf_1_1_tracker.html#afb492cf3bf3ce23424014fa4946b4c2a',1,'msceqf::Tracker::Tracker()']]], + ['tracker_5foptions_5f_14',['tracker_options_',['../structmsceqf_1_1_track_manager_options.html#ae10dd9b24aacff441a637c5d5cb989a3',1,'msceqf::TrackManagerOptions']]], + ['trackeroptions_15',['TrackerOptions',['../structmsceqf_1_1_tracker_options.html',1,'msceqf']]], + ['trackmanager_16',['TrackManager',['../classmsceqf_1_1_track_manager.html',1,'msceqf::TrackManager'],['../classmsceqf_1_1_track_manager.html#abf577306739781c993b88c01f2e627b6',1,'msceqf::TrackManager::TrackManager()']]], + ['trackmanageroptions_17',['TrackManagerOptions',['../structmsceqf_1_1_track_manager_options.html',1,'msceqf']]], + ['tracks_18',['tracks',['../classmsceqf_1_1_track_manager.html#acd15a87fdc24b43e2cb9f41e179a85e3',1,'msceqf::TrackManager']]], + ['tracksids_19',['tracksIds',['../classmsceqf_1_1_track_manager.html#aa0b99fd74bebf540e0b1d2f8abbd062b',1,'msceqf::TrackManager']]], + ['triangulatedfeatures_20',['TriangulatedFeatures',['../structmsceqf_1_1_triangulated_features.html',1,'msceqf']]] +]; diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 0000000..106151d --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['undistort_0',['undistort',['../classmsceqf_1_1_pinhole_camera.html#aac9dfa0d780e38b9aaf2afba4a834ecd',1,'msceqf::PinholeCamera::undistort(std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)'],['../classmsceqf_1_1_pinhole_camera.html#a00b6ab4337fd7db73e51eaac8d736632',1,'msceqf::PinholeCamera::undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize=false)=0'],['../structmsceqf_1_1_radtan_camera.html#a6bbf98ed9be455ecf0e58a5c93b6f41d',1,'msceqf::RadtanCamera::undistort()'],['../structmsceqf_1_1_equidistant_camera.html#a819c5607c1f0913c6e6bb77c5de43b3f',1,'msceqf::EquidistantCamera::undistort()']]], + ['undistortimage_1',['undistortImage',['../classmsceqf_1_1_pinhole_camera.html#a732c98908e5a69c70f001e39e1461b78',1,'msceqf::PinholeCamera::undistortImage()'],['../structmsceqf_1_1_radtan_camera.html#a148e2f48b5813ce91b35ee4ea62114fe',1,'msceqf::RadtanCamera::undistortImage()'],['../structmsceqf_1_1_equidistant_camera.html#a3515afec6d02105114599ba93a7d6862',1,'msceqf::EquidistantCamera::undistortImage()']]], + ['updateindex_2',['updateIndex',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a529dd668cc095fb064ce315536cbe49f',1,'msceqf::MSCEqFStateElement']]], + ['updateleft_3',['updateLeft',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a954034d163f3b9c87ba2fdb9fd505ed9',1,'msceqf::MSCEqFStateElement::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#ab5561a8eb740efdbb1a1d0dc029210fa',1,'msceqf::MSCEqFSDBState::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#ab41b071e0f3a55feb8191c9ac0704791',1,'msceqf::MSCEqFSE3State::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#ab02dac4244b83fe1eac44772441ac9c1',1,'msceqf::MSCEqFInState::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a8ae5dc4e2fa9ac8ad81718704649da0f',1,'msceqf::MSCEqFSOT3State::updateLeft()']]], + ['updateqrcompression_4',['updateQRCompression',['../structmsceqf_1_1_updater_helper.html#ad3e81ddc4140702bc0ded6d43709169f',1,'msceqf::UpdaterHelper']]], + ['updater_5',['Updater',['../classmsceqf_1_1_updater.html',1,'msceqf::Updater'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a263621696f00d0fefadbd6b1b52da6b5',1,'msceqf::MSCEqFState::Updater']]], + ['updater_5foptions_5f_6',['updater_options_',['../structmsceqf_1_1_m_s_c_eq_f_options.html#a9c225f2da97619b0b32b82f64a40ad64',1,'msceqf::MSCEqFOptions']]], + ['updaterhelper_7',['UpdaterHelper',['../structmsceqf_1_1_updater_helper.html',1,'msceqf']]], + ['updateright_8',['updateRight',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a5a9d827886bbe93e86a422aef4ad868b',1,'msceqf::MSCEqFStateElement::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a275db0af3885e1f4f5876057c97cdf6c',1,'msceqf::MSCEqFSDBState::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#ace3dc196bb8db7dd700af8a7a02795be',1,'msceqf::MSCEqFSE3State::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#ae3b474fb0284b4f30b20ffc9ca010cec',1,'msceqf::MSCEqFInState::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#ab0d5eb9400a99969dab552b49dbc83fc',1,'msceqf::MSCEqFSOT3State::updateRight()']]], + ['updateroptions_9',['UpdaterOptions',['../structmsceqf_1_1_updater_options.html',1,'msceqf']]], + ['usage_20for_20academic_20purposes_10',['Usage for academic purposes',['../index.html#autotoc_md18',1,'']]], + ['usage_20with_20custom_20dataset_20and_20or_20with_20ros_11',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]], + ['uv_5f_12',['uv_',['../structmsceqf_1_1_feat_helper.html#a31cf87e6ea5ab46cc607c753e0fde2e7',1,'msceqf::FeatHelper']]], + ['uvn_5f_13',['uvn_',['../structmsceqf_1_1_feat_helper.html#ae475cbe6d060b3a0616eca56220011c1',1,'msceqf::FeatHelper']]], + ['uvs_5f_14',['uvs_',['../structmsceqf_1_1_features.html#a730289b0f2b09da19b28b3dc02030b42',1,'msceqf::Features::uvs_'],['../structmsceqf_1_1_track.html#a9810ae5c3ac451401f3ca849cea5cff7',1,'msceqf::Track::uvs_']]] +]; diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 0000000..d166eb0 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['v_0',['V',['../classmsceqf_1_1_system_state.html#aa03192f66803c072bb937809b375dcd5',1,'msceqf::SystemState']]], + ['values_1',['values',['../classutils_1_1_insertion_ordered_map.html#ac54723bf987340bca7a1c78aba3b8155',1,'utils::InsertionOrderedMap']]], + ['vision_20frontend_20features_2',['Vision frontend features',['../index.html#autotoc_md3',1,'']]], + ['visualizeimagewithtracks_3',['visualizeImageWithTracks',['../classmsceqf_1_1_m_s_c_eq_f.html#a2fadf3c923da1763c0d51023e6def3f1',1,'msceqf::MSCEqF::visualizeImageWithTracks()'],['../classmsceqf_1_1_visualizer.html#a49e6c6116457f74dd68d81382c4e154b',1,'msceqf::Visualizer::visualizeImageWithTracks()']]], + ['visualizer_4',['Visualizer',['../classmsceqf_1_1_visualizer.html',1,'msceqf::Visualizer'],['../classmsceqf_1_1_visualizer.html#a06f94caa116397a1c4b52dea87c5cee6',1,'msceqf::Visualizer::Visualizer()']]] +]; diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 0000000..a8ff705 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['w_0',['W',['../structmsceqf_1_1_imu.html#abfb41a7dd565a216b9d2392e4b308fcf',1,'msceqf::Imu']]], + ['w_1',['w',['../structmsceqf_1_1_imu.html#a8995590a4492fb0fcec520efe985456b',1,'msceqf::Imu']]], + ['warn_2',['warn',['../classutils_1_1_logger.html#a59f29785c6f21449afca65db49c7d966',1,'utils::Logger']]], + ['width_5f_3',['width_',['../classmsceqf_1_1_pinhole_camera.html#a780e1bd4774b8451af7af73bc34f76bc',1,'msceqf::PinholeCamera']]], + ['with_20custom_20dataset_20and_20or_20with_20ros_4',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]], + ['with_20ros_5',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]] +]; diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 0000000..ea5e69b --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xi_0',['Xi',['../structmsceqf_1_1_updater_helper.html#a3711d18a8750685abb57baa925e37683',1,'msceqf::UpdaterHelper']]] +]; diff --git a/search/all_17.js b/search/all_17.js new file mode 100644 index 0000000..3504965 --- /dev/null +++ b/search/all_17.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['zero_5fvelocity_5fupdate_5f_0',['zero_velocity_update_',['../structmsceqf_1_1_zero_velocity_updater_options.html#ab85ba685a33d090effe44bb93c23f48e',1,'msceqf::ZeroVelocityUpdaterOptions']]], + ['zerovelocityupdater_1',['ZeroVelocityUpdater',['../classmsceqf_1_1_zero_velocity_updater.html',1,'msceqf::ZeroVelocityUpdater'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#ad4f72ce3a5f4c9e1de3b516ac2a76d05',1,'msceqf::MSCEqFState::ZeroVelocityUpdater'],['../classmsceqf_1_1_zero_velocity_updater.html#a75b934b99074efe88ad5706ef0b6be01',1,'msceqf::ZeroVelocityUpdater::ZeroVelocityUpdater()']]], + ['zerovelocityupdateroptions_2',['ZeroVelocityUpdaterOptions',['../structmsceqf_1_1_zero_velocity_updater_options.html',1,'msceqf']]], + ['zvupdate_3',['zvUpdate',['../classmsceqf_1_1_zero_velocity_updater.html#a5f7685172128094eb6d5d0911ae5378a',1,'msceqf::ZeroVelocityUpdater']]], + ['zvupdater_5foptions_5f_4',['zvupdater_options_',['../structmsceqf_1_1_m_s_c_eq_f_options.html#a8216128a46cf1f1f9ae60334b014e5ca',1,'msceqf::MSCEqFOptions']]], + ['zvuperformed_5',['zvuPerformed',['../classmsceqf_1_1_m_s_c_eq_f.html#a3d7135418997539dcb59078c592f8c5e',1,'msceqf::MSCEqF']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..c08f3b0 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['c_0',['C',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a07ca6f8a7c48f784c5c9641fb7ef4f69',1,'msceqf::MSCEqFState']]], + ['callback_5fimage_1',['callback_image',['../class_m_s_c_eq_f_ros.html#abab3928b6c09f7a3c580c30c5eef0d45',1,'MSCEqFRos']]], + ['callback_5fimu_2',['callback_imu',['../class_m_s_c_eq_f_ros.html#aa2340b07b206b75ffd4e4fdeee562942',1,'MSCEqFRos']]], + ['cam_3',['cam',['../classmsceqf_1_1_track_manager.html#afe813535e2b8bc3fa2f68ea611fb7015',1,'msceqf::TrackManager::cam()'],['../classmsceqf_1_1_tracker.html#ab0998a6999526305b7e0b4d958de7f93',1,'msceqf::Tracker::cam()']]], + ['cam_5foptions_5f_4',['cam_options_',['../structmsceqf_1_1_tracker_options.html#ab1df268e9c2088af91331b6ac69f5d48',1,'msceqf::TrackerOptions']]], + ['camera_5',['Camera',['../structmsceqf_1_1_camera.html',1,'msceqf']]], + ['cameraextrinsicstate_6',['CameraExtrinsicState',['../structmsceqf_1_1_camera_extrinsic_state.html',1,'msceqf']]], + ['cameraintrinsicstate_7',['CameraIntrinsicState',['../structmsceqf_1_1_camera_intrinsic_state.html',1,'msceqf']]], + ['cameraoptions_8',['CameraOptions',['../structmsceqf_1_1_camera_options.html',1,'msceqf']]], + ['checker_9',['Checker',['../classmsceqf_1_1_checker.html',1,'msceqf::Checker'],['../classmsceqf_1_1_checker.html#a7b5b818584c855a09faed1cde6f78a6c',1,'msceqf::Checker::Checker()']]], + ['checker_5foptions_5f_10',['checker_options_',['../structmsceqf_1_1_m_s_c_eq_f_options.html#ad4bed3e7a75974a68885be31c5e3c5c2',1,'msceqf::MSCEqFOptions']]], + ['checkeroptions_11',['CheckerOptions',['../structmsceqf_1_1_checker_options.html',1,'msceqf']]], + ['chi2test_12',['chi2Test',['../structmsceqf_1_1_updater_helper.html#aa1dd34539620eb11b485a7ea140a3eea',1,'msceqf::UpdaterHelper']]], + ['clear_13',['clear',['../classutils_1_1_insertion_ordered_map.html#a8350ad05c98eb1e736c4b071442d2136',1,'utils::InsertionOrderedMap::clear()'],['../classmsceqf_1_1_track_manager.html#a5a2d6ad04970e43e2cb393e74228db2b',1,'msceqf::TrackManager::clear()']]], + ['clone_14',['clone',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a8b38b0d21df9ae3a07bbaaca7daf6f7b',1,'msceqf::MSCEqFState::clone()'],['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a494c18ed513e08d5ef8939e1242551a5',1,'msceqf::MSCEqFStateElement::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#ac54188e937b0053709fe62506efe2bad',1,'msceqf::MSCEqFSDBState::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a550e5c1d5306407e4f155c1de772c165',1,'msceqf::MSCEqFSE3State::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#a16b225fd2d52d4cd68ed3db04e367126',1,'msceqf::MSCEqFInState::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a8d787857699430eb312419a8b512eaed',1,'msceqf::MSCEqFSOT3State::clone()'],['../classmsceqf_1_1_system_state_element.html#ac44336562c195471cdfb2b16cdfe50b9',1,'msceqf::SystemStateElement::clone()'],['../structmsceqf_1_1_extended_pose_state.html#ac350cd78075510c502a3d462425650fb',1,'msceqf::ExtendedPoseState::clone()'],['../structmsceqf_1_1_bias_state.html#aef8a73120661539e79a72ac3778bef24',1,'msceqf::BiasState::clone()'],['../structmsceqf_1_1_camera_extrinsic_state.html#ad625489db42b5727fbc7673307df8693',1,'msceqf::CameraExtrinsicState::clone()'],['../structmsceqf_1_1_camera_intrinsic_state.html#ae67dc5c98714c1db2dd5a7b4306e43d9',1,'msceqf::CameraIntrinsicState::clone()'],['../structmsceqf_1_1_feature_state.html#a78732a75e6d2b2704c8f26581f9aaf3c',1,'msceqf::FeatureState::clone()']]], + ['clone_5ftimestamp_5f_15',['clone_timestamp_',['../structmsceqf_1_1_feat_helper.html#a767bb0ca608969f02995fd66fbf4a0e2',1,'msceqf::FeatHelper']]], + ['clonessize_16',['clonesSize',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ad63c4591dfbba61f680c92bbe6b327a1',1,'msceqf::MSCEqFState']]], + ['clonetimestamptomarginalize_17',['cloneTimestampToMarginalize',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ab74dc134ababe6a2914a703746fe2879',1,'msceqf::MSCEqFState']]], + ['configuration_20file_18',['MSCEqF configuration file',['../index.html#autotoc_md16',1,'']]], + ['corecovariance_19',['coreCovariance',['../classmsceqf_1_1_m_s_c_eq_f.html#a997db7a553e9889015b9678080c86be8',1,'msceqf::MSCEqF']]], + ['cov_20',['cov',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a19c6f21068871bbd9bc1cd725284487a',1,'msceqf::MSCEqFState']]], + ['covariance_21',['covariance',['../classmsceqf_1_1_m_s_c_eq_f.html#a4a9975dea4d9c62ce4505fba3296dd18',1,'msceqf::MSCEqF']]], + ['covblock_22',['covBlock',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a88df644cc8a6c623020128e2b1266c25',1,'msceqf::MSCEqFState']]], + ['currentfeatures_23',['currentFeatures',['../classmsceqf_1_1_tracker.html#a84f066b29a246c23ef9d78a646504b1b',1,'msceqf::Tracker']]], + ['curvature_5fcorrection_5f_24',['curvature_correction_',['../structmsceqf_1_1_updater_options.html#a6d505cec7564bdc4d1ae1cbc3903ce49',1,'msceqf::UpdaterOptions::curvature_correction_'],['../structmsceqf_1_1_zero_velocity_updater_options.html#a5bc059095e6b6528a98b3c24939bfe5b',1,'msceqf::ZeroVelocityUpdaterOptions::curvature_correction_']]], + ['curvaturecorrection_25',['curvatureCorrection',['../classmsceqf_1_1_symmetry.html#ad44fe8b6425747cb14dffb26052db110',1,'msceqf::Symmetry']]], + ['custom_20dataset_20and_20or_20with_20ros_26',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..e136870 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['d_0',['D',['../classmsceqf_1_1_symmetry.html#a7bde19c73569f7621e0f2e89c104c31a',1,'msceqf::Symmetry::D'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a71b238cde922261accd48f8269817d4c',1,'msceqf::MSCEqFState::D()']]], + ['d_5finit_5fcov_5f_1',['D_init_cov_',['../structmsceqf_1_1_state_options.html#a4c71c9019e4bd17dd3398d57ad92319c',1,'msceqf::StateOptions']]], + ['dataset_20and_20or_20with_20ros_2',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]], + ['dataset_20sensor_20preparation_3',['Dataset/Sensor preparation',['../index.html#autotoc_md15',1,'']]], + ['dd_5f_4',['Dd_',['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a8a5178aa7e317b030b7528752981aed0',1,'msceqf::MSCEqFSDBState']]], + ['debug_5',['debug',['../classutils_1_1_logger.html#a7cfbfed6c23af6db8d928cc33f883f50',1,'utils::Logger']]], + ['delta_6',['delta',['../classmsceqf_1_1_m_s_c_eq_f_state.html#aa46141f5f1104a05a627fdd6370f9a9b',1,'msceqf::MSCEqFState']]], + ['delta_5finit_5fcov_5f_7',['delta_init_cov_',['../structmsceqf_1_1_state_options.html#acdb4a9c56aed3886ca5494579a75f9aa',1,'msceqf::StateOptions']]], + ['denormalize_8',['denormalize',['../classmsceqf_1_1_pinhole_camera.html#a94a994903a29fbdd86b06442fe44f0bb',1,'msceqf::PinholeCamera::denormalize(std::vector< Eigen::Vector2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a47eb22e8ca894ac475d799c4ae8fe36e',1,'msceqf::PinholeCamera::denormalize(std::vector< cv::Point2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#ad772fe1e146f5094aa6110611ae748f6',1,'msceqf::PinholeCamera::denormalize(Eigen::Vector2f &uv)'],['../classmsceqf_1_1_pinhole_camera.html#af4918235c0ffab8adc1ca7231f19215b',1,'msceqf::PinholeCamera::denormalize(cv::Point2f &uv)']]], + ['dependencies_9',['Dependencies',['../index.html#autotoc_md6',1,'']]], + ['design_20features_10',['Design features',['../index.html#autotoc_md1',1,'']]], + ['detectmotion_11',['detectMotion',['../classmsceqf_1_1_static_initializer.html#a962b4f00af698b6e9d5681a2387e4470',1,'msceqf::StaticInitializer']]], + ['detector_5f_12',['detector_',['../structmsceqf_1_1_tracker_options.html#aa7a2f93c3f70726c21085f92c02547d0',1,'msceqf::TrackerOptions']]], + ['detector_5fpyramid_5flevels_5f_13',['detector_pyramid_levels_',['../structmsceqf_1_1_tracker_options.html#afd28b684f8aad10a16d766e68e775987',1,'msceqf::TrackerOptions']]], + ['dim_5floss_14',['dim_loss',['../classmsceqf_1_1_projection_helper.html#a5db4746cda6be4f465dc88d3cce68863',1,'msceqf::ProjectionHelper']]], + ['dim_5floss_5f_15',['dim_loss_',['../classmsceqf_1_1_projection_helper.html#a5ac595a77f1968b887c49e4635066b3a',1,'msceqf::ProjectionHelper']]], + ['disparity_5fthreshold_5f_16',['disparity_threshold_',['../structmsceqf_1_1_checker_options.html#af3d4bcc36823c0cd80d5d8ff81f3336d',1,'msceqf::CheckerOptions']]], + ['disparity_5fwindow_5f_17',['disparity_window_',['../structmsceqf_1_1_checker_options.html#a04fe4e24079d810781cf1c5081e88233',1,'msceqf::CheckerOptions']]], + ['disparitycheck_18',['disparityCheck',['../classmsceqf_1_1_checker.html#ae352383ab698870d55cd3244f2f1e031',1,'msceqf::Checker']]], + ['distorted_5fuvs_5f_19',['distorted_uvs_',['../structmsceqf_1_1_features.html#a5fbe92994383ca26927684c8367bfa49',1,'msceqf::Features']]], + ['distortion_5fcoefficients_5f_20',['distortion_coefficients_',['../structmsceqf_1_1_camera_options.html#a824c7e14a954432b3a88f20c4a232e87',1,'msceqf::CameraOptions::distortion_coefficients_'],['../classmsceqf_1_1_pinhole_camera.html#af4b4a83ad80144eb2dabda3b8a79334c',1,'msceqf::PinholeCamera::distortion_coefficients_']]], + ['distortion_5fmodel_5f_21',['distortion_model_',['../structmsceqf_1_1_tracker_options.html#abc7141ac141452c29ce8631531584d4b',1,'msceqf::TrackerOptions']]], + ['distortioncoefficients_22',['distortionCoefficients',['../classmsceqf_1_1_pinhole_camera.html#a50d70d4232a386f6feef1db182d4d447',1,'msceqf::PinholeCamera']]], + ['docker_20setup_23',['Docker setup',['../index.html#autotoc_md13',1,'']]], + ['documentation_24',['Documentation',['../index.html#autotoc_md5',1,'']]], + ['dof_25',['dof',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a60595205c41950307960c6666c78c63c',1,'msceqf::MSCEqFState']]], + ['dof_5f_26',['dof_',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#ab8dd7e06eb85c24c497aa25871465a71',1,'msceqf::MSCEqFStateElement']]], + ['dpi_27',['dpi',['../classmsceqf_1_1_projection_helper.html#a6a67252b227c043f901c7742aec9ad29',1,'msceqf::ProjectionHelper::dpi()'],['../classmsceqf_1_1_projection_helper_s2.html#a0acd0d20cd2b4df21bcdc55d62d7bd10',1,'msceqf::ProjectionHelperS2::dpi()'],['../classmsceqf_1_1_projection_helper_z1.html#a31884382388f3acf7b6a95e0d146d7c9',1,'msceqf::ProjectionHelperZ1::dpi()']]] +]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..1fab271 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['e_0',['E',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a57d02c2929be3bb2b0d38a3dd8b13569',1,'msceqf::MSCEqFState']]], + ['e_5f_1',['E_',['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#abf952efaefe220a9a9004cd697cbd719',1,'msceqf::MSCEqFSE3State']]], + ['e_5finit_5fcov_5f_2',['E_init_cov_',['../structmsceqf_1_1_state_options.html#a1b26a41cbad4ab428d9046cd87247e39',1,'msceqf::StateOptions']]], + ['empty_3',['empty',['../structmsceqf_1_1_features.html#ad5ba9089e87e84c92e1a95b0bce56dd1',1,'msceqf::Features::empty()'],['../structmsceqf_1_1_track.html#a4b70af76854a4aa9760be3c8bb096d10',1,'msceqf::Track::empty()']]], + ['enable_5fcamera_5fintrinsics_5fcalibration_5f_4',['enable_camera_intrinsics_calibration_',['../structmsceqf_1_1_state_options.html#a49bf34d99ff5ba49db7cac82f8f52111',1,'msceqf::StateOptions']]], + ['equalizer_5f_5',['equalizer_',['../structmsceqf_1_1_tracker_options.html#ad726557ba1916cbad8ee30ab8d08773e',1,'msceqf::TrackerOptions']]], + ['equidistantcamera_6',['EquidistantCamera',['../structmsceqf_1_1_equidistant_camera.html',1,'msceqf']]], + ['err_7',['err',['../classutils_1_1_logger.html#adabf5e33082840c328280cfdc0768c04',1,'utils::Logger']]], + ['euroc_8',['Run example (Euroc)',['../index.html#autotoc_md10',1,'']]], + ['example_20euroc_9',['Run example (Euroc)',['../index.html#autotoc_md10',1,'']]], + ['extendedposestate_10',['ExtendedPoseState',['../structmsceqf_1_1_extended_pose_state.html',1,'msceqf']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..e9d2030 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['f_0',['f',['../classmsceqf_1_1_system_state.html#aa57f29ac63c94d167d9261fd9c8ac889',1,'msceqf::SystemState']]], + ['f_5f_1',['f_',['../structmsceqf_1_1_feature_state.html#a462010b6dbc917a495bc0e91d779b00e',1,'msceqf::FeatureState']]], + ['fast_5fopts_5f_2',['fast_opts_',['../structmsceqf_1_1_tracker_options.html#a4ae32a3f199faaa11a94039c4ba86785',1,'msceqf::TrackerOptions']]], + ['fast_5fthreshold_5f_3',['fast_threshold_',['../structmsceqf_1_1_fast_options.html#ade4338d85623f9b9112b81da82b1a144',1,'msceqf::FastOptions']]], + ['fastoptions_4',['FastOptions',['../structmsceqf_1_1_fast_options.html',1,'msceqf']]], + ['feathelper_5',['FeatHelper',['../structmsceqf_1_1_feat_helper.html',1,'msceqf']]], + ['feature_5frepresentation_5f_6',['feature_representation_',['../classmsceqf_1_1_projection_helper.html#a82ccba4a9cd4f53cd4b760e3f255050c',1,'msceqf::ProjectionHelper']]], + ['featureids_7',['FeatureIds',['../structmsceqf_1_1_features.html#a8fde740a86aff8771dcd4136da02e465',1,'msceqf::Features']]], + ['features_8',['Features',['../structmsceqf_1_1_features.html',1,'msceqf::Features'],['../index.html#autotoc_md0',1,'Features']]], + ['features_9',['features',['../index.html#autotoc_md1',1,'Design features'],['../index.html#autotoc_md2',1,'Filter features'],['../index.html#autotoc_md3',1,'Vision frontend features']]], + ['features_5f_10',['features_',['../structmsceqf_1_1_triangulated_features.html#abb6a71075a806d1cc1995f890dfed3bc',1,'msceqf::TriangulatedFeatures']]], + ['featurestate_11',['FeatureState',['../structmsceqf_1_1_feature_state.html',1,'msceqf']]], + ['file_12',['MSCEqF configuration file',['../index.html#autotoc_md16',1,'']]], + ['filter_20features_13',['Filter features',['../index.html#autotoc_md2',1,'']]], + ['for_20academic_20purposes_14',['Usage for academic purposes',['../index.html#autotoc_md18',1,'']]], + ['free_20setup_15',['ROS free setup',['../index.html#autotoc_md8',1,'']]], + ['frontend_20features_16',['Vision frontend features',['../index.html#autotoc_md3',1,'']]], + ['future_20roadmap_17',['Future roadmap',['../index.html#autotoc_md4',1,'']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..1acfc48 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['ge3_0',['ge3',['../classmsceqf_1_1_system_state.html#ae4ffdd10423f0189684a01a190d9929b',1,'msceqf::SystemState']]], + ['getdof_1',['getDof',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a7441186a74539dc0b7ba6e0a61b8ec3b',1,'msceqf::MSCEqFStateElement']]], + ['getindex_2',['getIndex',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a53882d76f6e925923c1f8b7678e525a1',1,'msceqf::MSCEqFStateElement']]], + ['getlevel_3',['getlevel',['../classutils_1_1_logger.html#a611319c8d86aef3493155ca2df9f2461',1,'utils::Logger']]], + ['getting_20started_4',['Getting started',['../index.html#autotoc_md7',1,'']]], + ['gftt_5fopts_5f_5',['gftt_opts_',['../structmsceqf_1_1_tracker_options.html#ad740af34a868c8cea98b6275522295ac',1,'msceqf::TrackerOptions']]], + ['gfttoptions_6',['GFTTOptions',['../structmsceqf_1_1_g_f_t_t_options.html',1,'msceqf']]], + ['gravity_5f_7',['gravity_',['../structmsceqf_1_1_state_options.html#a0e33344fd38ef3fb3ccf76fe77e2af47',1,'msceqf::StateOptions::gravity_'],['../structmsceqf_1_1_initializer_options.html#af5d2bb0318dc2a628104617913cabf2a',1,'msceqf::InitializerOptions::gravity_']]], + ['grid_5fx_5fsize_5f_8',['grid_x_size_',['../structmsceqf_1_1_tracker_options.html#ac077f52604f8d0e621adb1dea4fcf34f',1,'msceqf::TrackerOptions']]], + ['grid_5fy_5fsize_5f_9',['grid_y_size_',['../structmsceqf_1_1_tracker_options.html#a52b0bc8a5a05e2e1d7536356dfe468cf',1,'msceqf::TrackerOptions']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000..a063742 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['height_5f_0',['height_',['../classmsceqf_1_1_pinhole_camera.html#a45e790baa7d185202bd128332b484006',1,'msceqf::PinholeCamera']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000..fe7f989 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['identity_5fb0_5f_0',['identity_b0_',['../structmsceqf_1_1_initializer_options.html#a194530030e0eba4dfffe36bb6f5f374f',1,'msceqf::InitializerOptions']]], + ['ids_5f_1',['ids_',['../structmsceqf_1_1_features.html#a81dc275fec850f5776c43ae1e59ef34b',1,'msceqf::Features']]], + ['idx_5f_2',['idx_',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a237a7c1dcdf475facb6ee2a8e08f2970',1,'msceqf::MSCEqFStateElement']]], + ['image_5f_3',['image_',['../structmsceqf_1_1_camera.html#a9c42d17258738934a794ec81456ae37d',1,'msceqf::Camera']]], + ['imagewithtracks_4',['imageWithTracks',['../classmsceqf_1_1_m_s_c_eq_f.html#aa093952ba96078a35ed821bcccfd4eb6',1,'msceqf::MSCEqF::imageWithTracks()'],['../classmsceqf_1_1_visualizer.html#af0b6220ad8dbb4d1925ba9121be6631e',1,'msceqf::Visualizer::imageWithTracks()']]], + ['imu_5',['Imu',['../structmsceqf_1_1_imu.html',1,'msceqf']]], + ['imu_5fbuffer_5fmax_5fsize_5f_6',['imu_buffer_max_size_',['../structmsceqf_1_1_propagator_options.html#aa604db901d516ebeea24421392e84fce',1,'msceqf::PropagatorOptions']]], + ['imu_5finit_5fwindow_5f_7',['imu_init_window_',['../structmsceqf_1_1_initializer_options.html#a01c8b424c7af158a387246a9ae0696cc',1,'msceqf::InitializerOptions']]], + ['imubuffer_8',['ImuBuffer',['../classmsceqf_1_1_static_initializer.html#aeb0f5be124a2f7c58485ec8be12b8e68',1,'msceqf::StaticInitializer::ImuBuffer'],['../classmsceqf_1_1_propagator.html#a60ca36e107717ab32687f610d44e5494',1,'msceqf::Propagator::ImuBuffer']]], + ['index_9',['index',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a396d28ac19c3de4d5912f328d68048ea',1,'msceqf::MSCEqFState']]], + ['info_10',['info',['../classutils_1_1_logger.html#adf4693f33250758a3db3730d460caded',1,'utils::Logger']]], + ['init_5foptions_5f_11',['init_options_',['../structmsceqf_1_1_m_s_c_eq_f_options.html#a5344579e4360786c93cb0d18a19a0b7a',1,'msceqf::MSCEqFOptions']]], + ['init_5fwith_5fgiven_5fstate_5f_12',['init_with_given_state_',['../structmsceqf_1_1_initializer_options.html#a97f3c4efe0e032f6c170a6f740501720',1,'msceqf::InitializerOptions']]], + ['initial_5fbias_5f_13',['initial_bias_',['../structmsceqf_1_1_initializer_options.html#ae95ee6e8ceea1c1777e11531f3c24fb7',1,'msceqf::InitializerOptions']]], + ['initial_5fcamera_5fextrinsics_5f_14',['initial_camera_extrinsics_',['../structmsceqf_1_1_state_options.html#ae0a2fd5147883e76d5a66112a7f749f1',1,'msceqf::StateOptions']]], + ['initial_5fcamera_5fintrinsics_5f_15',['initial_camera_intrinsics_',['../structmsceqf_1_1_state_options.html#a8df04119a203ced58a7bb49617bf9c8c',1,'msceqf::StateOptions']]], + ['initial_5fextended_5fpose_5f_16',['initial_extended_pose_',['../structmsceqf_1_1_initializer_options.html#a140a7ca78f60b62e07ddbb7bb6d4a166',1,'msceqf::InitializerOptions']]], + ['initial_5ftimestamp_5f_17',['initial_timestamp_',['../structmsceqf_1_1_initializer_options.html#a4dea2104c8933f1ade1aa06be40da2d1',1,'msceqf::InitializerOptions']]], + ['initializeorigin_18',['initializeOrigin',['../classmsceqf_1_1_static_initializer.html#a0ea57db9c8ffd6c456924aaf2ca02fa9',1,'msceqf::StaticInitializer']]], + ['initializeroptions_19',['InitializerOptions',['../structmsceqf_1_1_initializer_options.html',1,'msceqf']]], + ['initializestateelement_20',['initializeStateElement',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a9a8dffcf54ed656e0e6e82a07608532b',1,'msceqf::MSCEqFState']]], + ['insert_21',['insert',['../classutils_1_1_insertion_ordered_map.html#a953c250c1bb59ee5594e6daec5e7c0f3',1,'utils::InsertionOrderedMap']]], + ['insertimu_22',['insertImu',['../classmsceqf_1_1_static_initializer.html#aeb636116cd6495e52fb93284be828f38',1,'msceqf::StaticInitializer::insertImu()'],['../classmsceqf_1_1_propagator.html#a85447d7e988ac5bb6e9646929c0b3da9',1,'msceqf::Propagator::insertImu()']]], + ['insertionorderedmap_23',['InsertionOrderedMap',['../classutils_1_1_insertion_ordered_map.html',1,'utils']]], + ['insertionorderedmap_3c_20msceqfstate_3a_3amsceqfkey_2c_20size_5ft_20_3e_24',['InsertionOrderedMap< MSCEqFState::MSCEqFKey, size_t >',['../classutils_1_1_insertion_ordered_map.html',1,'utils']]], + ['intrinsics_25',['intrinsics',['../classmsceqf_1_1_pinhole_camera.html#a282aa4f8f7bc9d6044a52a9c811718d0',1,'msceqf::PinholeCamera']]], + ['intrinsics_5f_26',['intrinsics_',['../classmsceqf_1_1_pinhole_camera.html#ae8e0ea25ffc07d76f2692470b66c58a7',1,'msceqf::PinholeCamera']]], + ['inversedepthjacobian_27',['inverseDepthJacobian',['../structmsceqf_1_1_updater_helper.html#a70f743ea4e65dce3daa75cb381cbf531',1,'msceqf::UpdaterHelper']]], + ['is_5fstreamable_28',['is_streamable',['../structutils_1_1is__streamable.html',1,'utils']]], + ['is_5fstreamable_3c_20s_2c_20c_2c_20decltype_28void_28std_3a_3adeclval_3c_20s_20_26_20_3e_28_29_3c_3c_20std_3a_3adeclval_3c_20c_20const_20_26_20_3e_28_29_29_29_3e_29',['is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>',['../structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html',1,'utils']]], + ['isactive_30',['isActive',['../classmsceqf_1_1_zero_velocity_updater.html#af14a4da81ca7d243f79bd9e2f8e1d3b3',1,'msceqf::ZeroVelocityUpdater']]], + ['isinit_31',['isInit',['../classmsceqf_1_1_m_s_c_eq_f.html#a92233266c8048557db3873405a7fa7a7',1,'msceqf::MSCEqF']]] +]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000..0f3d670 --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['k_0',['K',['../classmsceqf_1_1_system_state.html#aa78b01151738dce902450e73c6f5d5a1',1,'msceqf::SystemState']]], + ['k_1',['k',['../classmsceqf_1_1_system_state.html#abdd483746a154dbe39860b36b82223a1',1,'msceqf::SystemState']]], + ['k_5f_2',['K_',['../structmsceqf_1_1_camera_intrinsic_state.html#af6b53256d2e9370108b110b6f50b6305',1,'msceqf::CameraIntrinsicState']]], + ['keypoints_3',['Keypoints',['../classmsceqf_1_1_tracker.html#a32bd1cc7577153664283a2e378682881',1,'msceqf::Tracker']]], + ['keys_4',['keys',['../classutils_1_1_insertion_ordered_map.html#a51efdc3177100f1e73e29c4a877a0bfb',1,'utils::InsertionOrderedMap']]] +]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000..34acd4f --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['l_0',['L',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a22cbea48d7ddf2508d3f5249616616ce',1,'msceqf::MSCEqFState']]], + ['l_5f_1',['L_',['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#a65501fee59803d8c5d23a0267905aaad',1,'msceqf::MSCEqFInState']]], + ['l_5finit_5fcov_5f_2',['L_init_cov_',['../structmsceqf_1_1_state_options.html#a85416530843a1bc2bf42a84855767b51',1,'msceqf::StateOptions']]], + ['license_3',['License',['../index.html#autotoc_md17',1,'']]], + ['lift_4',['lift',['../classmsceqf_1_1_symmetry.html#ab64734f839852247858fde35474f435e',1,'msceqf::Symmetry']]], + ['logger_5',['Logger',['../classutils_1_1_logger.html',1,'utils']]], + ['losttracksids_6',['lostTracksIds',['../classmsceqf_1_1_track_manager.html#a12e65c2082c9caf011e8a1fe118a51e1',1,'msceqf::TrackManager']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000..2de2dbe --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['marginalizecloneat_0',['marginalizeCloneAt',['../classmsceqf_1_1_m_s_c_eq_f_state.html#aa4c997fa07b165c6ea942a6e1b725e08',1,'msceqf::MSCEqFState']]], + ['mask_5f_1',['mask_',['../structmsceqf_1_1_camera.html#a241156d766d8dfc8d187508dc4d02130',1,'msceqf::Camera']]], + ['mask_5ftype_5f_2',['mask_type_',['../structmsceqf_1_1_camera_options.html#ab7f12a8380cdc751c11ab1f241b5e5f4',1,'msceqf::CameraOptions']]], + ['max_5fdepth_5f_3',['max_depth_',['../structmsceqf_1_1_updater_options.html#ad3afe1345d2c413460e5ce7a86f17dad',1,'msceqf::UpdaterOptions']]], + ['max_5ffeatures_5f_4',['max_features_',['../structmsceqf_1_1_tracker_options.html#a54077a1c6fd051b530eb51fa6f097805',1,'msceqf::TrackerOptions']]], + ['max_5fiterations_5f_5',['max_iterations_',['../structmsceqf_1_1_updater_options.html#ad1653bda53f03f976de18bb337730145',1,'msceqf::UpdaterOptions']]], + ['max_5ftrack_5flength_5f_6',['max_track_length_',['../structmsceqf_1_1_track_manager_options.html#aa553008f2fc66a5135c53312093d1363',1,'msceqf::TrackManagerOptions']]], + ['min_5fangle_5f_7',['min_angle_',['../structmsceqf_1_1_updater_options.html#aa34278f6298f4649e86a2a88494aa369',1,'msceqf::UpdaterOptions']]], + ['min_5fdepth_5f_8',['min_depth_',['../structmsceqf_1_1_updater_options.html#a39b8f06d758472140e1c3fa450cb9221',1,'msceqf::UpdaterOptions']]], + ['min_5ffeatures_5f_9',['min_features_',['../structmsceqf_1_1_tracker_options.html#a48eb521e83637c9fc4ea0a97cd2a5856',1,'msceqf::TrackerOptions']]], + ['min_5fpx_5fdist_5f_10',['min_px_dist_',['../structmsceqf_1_1_tracker_options.html#a3592276cfee7a4c004a2c7a1d60df943',1,'msceqf::TrackerOptions']]], + ['min_5ftrack_5flenght_5f_11',['min_track_lenght_',['../structmsceqf_1_1_updater_options.html#afb462136dd7dca62faedea777e253a20',1,'msceqf::UpdaterOptions']]], + ['msc_5ffeatures_5frepresentation_5f_12',['msc_features_representation_',['../structmsceqf_1_1_updater_options.html#a116df98da8d38dcb4240736ef8b13f1c',1,'msceqf::UpdaterOptions']]], + ['msceqf_13',['MSCEqF',['../classmsceqf_1_1_m_s_c_eq_f.html',1,'msceqf::MSCEqF'],['../classmsceqf_1_1_m_s_c_eq_f.html#abb3bc947ff4ae1a330fdb709aff7cb11',1,'msceqf::MSCEqF::MSCEqF()'],['../index.html',1,'MSCEqF']]], + ['msceqf_20configuration_20file_14',['MSCEqF configuration file',['../index.html#autotoc_md16',1,'']]], + ['msceqfclonesmap_15',['MSCEqFClonesMap',['../classmsceqf_1_1_m_s_c_eq_f_state.html#aaacdfe3336e1bfaea66ea4a34b380660',1,'msceqf::MSCEqFState']]], + ['msceqfinstate_16',['MSCEqFInState',['../structmsceqf_1_1_m_s_c_eq_f_in_state.html',1,'msceqf::MSCEqFInState'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#ae00aed09ebc708074e19e0764af02a2f',1,'msceqf::MSCEqFInState::MSCEqFInState()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#a38c26be4cf996d2b7e0830a655204e84',1,'msceqf::MSCEqFInState::MSCEqFInState(const uint &idx)']]], + ['msceqfkey_17',['MSCEqFKey',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a6571b3bd28273d40c214ebd495fbc8b5',1,'msceqf::MSCEqFState']]], + ['msceqfoptions_18',['MSCEqFOptions',['../structmsceqf_1_1_m_s_c_eq_f_options.html',1,'msceqf']]], + ['msceqfros_19',['MSCEqFRos',['../class_m_s_c_eq_f_ros.html',1,'MSCEqFRos'],['../class_m_s_c_eq_f_ros.html#a982967b357cb43548ab7a2e78536daa4',1,'MSCEqFRos::MSCEqFRos()']]], + ['msceqfsdbstate_20',['MSCEqFSDBState',['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html',1,'msceqf::MSCEqFSDBState'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#aed312cc3420563250609ffa6c04c1d81',1,'msceqf::MSCEqFSDBState::MSCEqFSDBState()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a75f90fb123c5d3d4361214b805a19e0c',1,'msceqf::MSCEqFSDBState::MSCEqFSDBState(const uint &idx)']]], + ['msceqfse3state_21',['MSCEqFSE3State',['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html',1,'msceqf::MSCEqFSE3State'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a778cea47a1d588d385b2cddae63ee052',1,'msceqf::MSCEqFSE3State::MSCEqFSE3State()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a74fc4265af22a3aff056b75e60ae858b',1,'msceqf::MSCEqFSE3State::MSCEqFSE3State(const uint &idx)']]], + ['msceqfsot3state_22',['MSCEqFSOT3State',['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html',1,'msceqf::MSCEqFSOT3State'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a149aa3e73d21920ee993f7e03d35cc46',1,'msceqf::MSCEqFSOT3State::MSCEqFSOT3State()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a80c3df4e312fe54cb1aea249e06d25a2',1,'msceqf::MSCEqFSOT3State::MSCEqFSOT3State(const uint &idx)']]], + ['msceqfstate_23',['MSCEqFState',['../classmsceqf_1_1_m_s_c_eq_f_state.html',1,'msceqf::MSCEqFState'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#afec7530ecddab98b45948a2820ce59d6',1,'msceqf::MSCEqFState::MSCEqFState()=delete'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a587407b4418bb38c79ed0ca0c63254ac',1,'msceqf::MSCEqFState::MSCEqFState(const StateOptions &opts, const SystemState &xi0)'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a934d93f3e3fccc098fdd05bceda29858',1,'msceqf::MSCEqFState::MSCEqFState(const MSCEqFState &other)']]], + ['msceqfstateelement_24',['MSCEqFStateElement',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html',1,'msceqf::MSCEqFStateElement'],['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a7ec47e75578d8cc1c87a3a63a13abeec',1,'msceqf::MSCEqFStateElement::MSCEqFStateElement()=delete'],['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#acd4ce57105c76dbef374f0ea282dddb3',1,'msceqf::MSCEqFStateElement::MSCEqFStateElement(const uint &idx, const uint &dof)']]], + ['msceqfstatekey_25',['MSCEqFStateKey',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a0a0e82d009caba522b4cd9bb54277f33',1,'msceqf::MSCEqFState']]], + ['msceqfstatemap_26',['MSCEqFStateMap',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a1ae0771ee7b8b3d7c90dccb15ff45898',1,'msceqf::MSCEqFState']]], + ['mscupdate_27',['mscUpdate',['../classmsceqf_1_1_updater.html#a258710b1d247e606625306524ecbdb4d',1,'msceqf::Updater']]] +]; diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 0000000..c123767 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['normalize_0',['normalize',['../classmsceqf_1_1_pinhole_camera.html#a5175a8d0505b607ed1a234d1579bbdc1',1,'msceqf::PinholeCamera::normalize(std::vector< Eigen::Vector2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a889c70211a8a88fb8e8709fe95cbbce2',1,'msceqf::PinholeCamera::normalize(std::vector< cv::Point2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a95d95360114f2097275e7c3918d1d55e',1,'msceqf::PinholeCamera::normalize(Eigen::Vector2f &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a0ed3882ef9693cfb016e00890aefdb9f',1,'msceqf::PinholeCamera::normalize(cv::Point2f &uv)']]], + ['normalized_5fuvs_5f_1',['normalized_uvs_',['../structmsceqf_1_1_features.html#a8cf1d4a15a874c7c233ca7a80cbeea2a',1,'msceqf::Features::normalized_uvs_'],['../structmsceqf_1_1_track.html#ae8fb006108f4f14deafbce5c25172f86',1,'msceqf::Track::normalized_uvs_']]], + ['nullspaceprojection_2',['nullspaceProjection',['../structmsceqf_1_1_updater_helper.html#ab68320ec8375ca8d1c56de51235d0281',1,'msceqf::UpdaterHelper']]], + ['num_5fclones_5f_3',['num_clones_',['../structmsceqf_1_1_state_options.html#a7e1b60805d75a9d056bc44598ca9f94a',1,'msceqf::StateOptions']]], + ['num_5fpersistent_5ffeatures_5f_4',['num_persistent_features_',['../structmsceqf_1_1_state_options.html#a67799453c4c8aae2944547aa3ee52e73',1,'msceqf::StateOptions']]] +]; diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 0000000..5e32ce7 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['opencv_5fthreads_5f_0',['opencv_threads_',['../structmsceqf_1_1_tracker_options.html#aadeb5121adee235acc42946e208f6b82',1,'msceqf::TrackerOptions']]], + ['operator_2a_1',['operator*',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a2ed5779e4d4df55eb0a3be4f6f6375b4',1,'msceqf::MSCEqFState']]], + ['operator_3c_2',['operator<',['../structmsceqf_1_1_imu.html#a1fbb26978848607614bfc802d9af2b65',1,'msceqf::Imu::operator<'],['../structmsceqf_1_1_imu.html#a781bdbdb2b8f42651f7af7973f4e58f4',1,'msceqf::Imu::operator<'],['../structmsceqf_1_1_camera.html#ad7ccf94075a0ec098e03c90d78019485',1,'msceqf::Camera::operator<'],['../structmsceqf_1_1_camera.html#addebf47a948140644806152e1b3c9e76',1,'msceqf::Camera::operator<'],['../structmsceqf_1_1_triangulated_features.html#ad9e38234e508ac0466a461b54764706d',1,'msceqf::TriangulatedFeatures::operator<'],['../structmsceqf_1_1_triangulated_features.html#a403118b276d90f8a86c0c9d74f954a3f',1,'msceqf::TriangulatedFeatures::operator<'],['../structmsceqf_1_1_track.html#aab82b71fb82726c14eda7cfcf6feba0a',1,'msceqf::Track::operator<']]], + ['operator_3c_3c_3',['operator<<',['../structmsceqf_1_1_imu.html#adff300fb97f6ad0dd6cc8145da362e0d',1,'msceqf::Imu']]], + ['optical_5fflow_5fpyramid_5flevels_5f_4',['optical_flow_pyramid_levels_',['../structmsceqf_1_1_tracker_options.html#ab51e27a794eede37dd4a7b4a0a39ba8f',1,'msceqf::TrackerOptions']]], + ['optical_5fflow_5fwin_5fsize_5f_5',['optical_flow_win_size_',['../structmsceqf_1_1_tracker_options.html#a2e594e1311109ed437b10a9efd31a62c',1,'msceqf::TrackerOptions']]], + ['optionparser_6',['OptionParser',['../classmsceqf_1_1_option_parser.html',1,'msceqf::OptionParser'],['../classmsceqf_1_1_option_parser.html#a8f797dbe136a1aa8399ed6f7279b92c0',1,'msceqf::OptionParser::OptionParser()']]], + ['options_7',['options',['../classmsceqf_1_1_m_s_c_eq_f.html#acb5d226d4ad65d27c358ef828db00087',1,'msceqf::MSCEqF']]], + ['opts_8',['opts',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a5e24084e77a9ff5469afe48e17db7c9b',1,'msceqf::MSCEqFState::opts()'],['../classmsceqf_1_1_system_state.html#a4eb9dffa95fa3caf6a7b8f9c7079fb46',1,'msceqf::SystemState::opts()']]], + ['or_20with_20ros_9',['Usage with custom dataset and/or with ROS',['../index.html#autotoc_md14',1,'']]] +]; diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 0000000..583424a --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['p_0',['P',['../classmsceqf_1_1_system_state.html#aff5c1d9314c92dd709cc1a7f14c285b9',1,'msceqf::SystemState']]], + ['parseoptions_1',['parseOptions',['../classmsceqf_1_1_option_parser.html#a045e263acada6289b9d331c689b0e7b5',1,'msceqf::OptionParser']]], + ['phi_2',['phi',['../classmsceqf_1_1_symmetry.html#a801380a30e9961a72de49bb50f5793a7',1,'msceqf::Symmetry']]], + ['pi_3',['pi',['../classmsceqf_1_1_projection_helper.html#acf572fee6dd470f8b74152831a9066ad',1,'msceqf::ProjectionHelper::pi()'],['../classmsceqf_1_1_projection_helper_s2.html#a4c351bcc3cf3d7941e9d620cc23ea7fa',1,'msceqf::ProjectionHelperS2::pi()'],['../classmsceqf_1_1_projection_helper_z1.html#af6b6ea58659baef976e65e2144463677',1,'msceqf::ProjectionHelperZ1::pi()']]], + ['pinholecamera_4',['PinholeCamera',['../classmsceqf_1_1_pinhole_camera.html',1,'msceqf::PinholeCamera'],['../classmsceqf_1_1_pinhole_camera.html#a5868e865166a3cf4b67427caaed1eddb',1,'msceqf::PinholeCamera::PinholeCamera()']]], + ['pixel_5fstd_5f_5',['pixel_std_',['../structmsceqf_1_1_updater_options.html#a689194e8a0c0d615aa508301ea22978b',1,'msceqf::UpdaterOptions']]], + ['points_5f_6',['points_',['../structmsceqf_1_1_triangulated_features.html#a5ec9e04c743e8af61e04036df3e2f004',1,'msceqf::TriangulatedFeatures']]], + ['preparation_7',['Dataset/Sensor preparation',['../index.html#autotoc_md15',1,'']]], + ['processcamera_8',['processCamera',['../classmsceqf_1_1_track_manager.html#a22727a0d230248e3786cb6cae36178b1',1,'msceqf::TrackManager::processCamera()'],['../classmsceqf_1_1_tracker.html#adb6858134efd07895ccd41b56520e6e3',1,'msceqf::Tracker::processCamera()']]], + ['processfeatures_9',['processFeatures',['../classmsceqf_1_1_track_manager.html#a8a8e67cb8b718fcd3ca60e7db5ef4ac7',1,'msceqf::TrackManager']]], + ['processmeasurement_10',['processMeasurement',['../classmsceqf_1_1_m_s_c_eq_f.html#a55cd046228cd54d23f1854684b64a801',1,'msceqf::MSCEqF::processMeasurement(const Imu &meas)'],['../classmsceqf_1_1_m_s_c_eq_f.html#ac2017b25449e411f5d77c3b5fe59b011',1,'msceqf::MSCEqF::processMeasurement(Camera &meas)'],['../classmsceqf_1_1_m_s_c_eq_f.html#a2bbc3010eb9e56c60b7378ea7864fe52',1,'msceqf::MSCEqF::processMeasurement(TriangulatedFeatures &meas)']]], + ['projection_5fmethod_5f_11',['projection_method_',['../structmsceqf_1_1_updater_options.html#a561da6631d8b7881810bcd096f24ac96',1,'msceqf::UpdaterOptions']]], + ['projectionhelper_12',['ProjectionHelper',['../classmsceqf_1_1_projection_helper.html',1,'msceqf::ProjectionHelper'],['../classmsceqf_1_1_projection_helper.html#a5e04febec3b043a59995fa76d48c8f4c',1,'msceqf::ProjectionHelper::ProjectionHelper()']]], + ['projectionhelpers2_13',['ProjectionHelperS2',['../classmsceqf_1_1_projection_helper_s2.html',1,'msceqf']]], + ['projectionhelperz1_14',['ProjectionHelperZ1',['../classmsceqf_1_1_projection_helper_z1.html',1,'msceqf']]], + ['propagate_15',['propagate',['../classmsceqf_1_1_propagator.html#aaad9301ac9aec60ed75dbb0f662e2f36',1,'msceqf::Propagator']]], + ['propagator_16',['Propagator',['../classmsceqf_1_1_propagator.html',1,'msceqf::Propagator'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a9d01c82a7038a8c986c6b15c15b2e631',1,'msceqf::MSCEqFState::Propagator'],['../classmsceqf_1_1_propagator.html#a2e20b4a9aa97c3101b19833a7afacc41',1,'msceqf::Propagator::Propagator()']]], + ['propagator_5foptions_5f_17',['propagator_options_',['../structmsceqf_1_1_m_s_c_eq_f_options.html#aca71bafd065f917ba0ac290bab7f9c5d',1,'msceqf::MSCEqFOptions']]], + ['propagatoroptions_18',['PropagatorOptions',['../structmsceqf_1_1_propagator_options.html',1,'msceqf']]], + ['purposes_19',['Usage for academic purposes',['../index.html#autotoc_md18',1,'']]] +]; diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 0000000..2337e23 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['q_0',['Q',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a65fcd0fe59fb233ddb207d2afab5136c',1,'msceqf::MSCEqFState']]], + ['q_5f_1',['Q_',['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#aee9bc3dfa678e5432fa16633f3132228',1,'msceqf::MSCEqFSOT3State']]], + ['quality_5flevel_5f_2',['quality_level_',['../structmsceqf_1_1_g_f_t_t_options.html#a60bcbc0484630508adbf7ccfffe8c8fc',1,'msceqf::GFTTOptions']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000..2363e41 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['biasstate_0',['BiasState',['../structmsceqf_1_1_bias_state.html',1,'msceqf']]] +]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000..d0d8a96 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['camera_0',['Camera',['../structmsceqf_1_1_camera.html',1,'msceqf']]], + ['cameraextrinsicstate_1',['CameraExtrinsicState',['../structmsceqf_1_1_camera_extrinsic_state.html',1,'msceqf']]], + ['cameraintrinsicstate_2',['CameraIntrinsicState',['../structmsceqf_1_1_camera_intrinsic_state.html',1,'msceqf']]], + ['cameraoptions_3',['CameraOptions',['../structmsceqf_1_1_camera_options.html',1,'msceqf']]], + ['checker_4',['Checker',['../classmsceqf_1_1_checker.html',1,'msceqf']]], + ['checkeroptions_5',['CheckerOptions',['../structmsceqf_1_1_checker_options.html',1,'msceqf']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000..df23db9 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['equidistantcamera_0',['EquidistantCamera',['../structmsceqf_1_1_equidistant_camera.html',1,'msceqf']]], + ['extendedposestate_1',['ExtendedPoseState',['../structmsceqf_1_1_extended_pose_state.html',1,'msceqf']]] +]; diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 0000000..1e4d316 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['fastoptions_0',['FastOptions',['../structmsceqf_1_1_fast_options.html',1,'msceqf']]], + ['feathelper_1',['FeatHelper',['../structmsceqf_1_1_feat_helper.html',1,'msceqf']]], + ['features_2',['Features',['../structmsceqf_1_1_features.html',1,'msceqf']]], + ['featurestate_3',['FeatureState',['../structmsceqf_1_1_feature_state.html',1,'msceqf']]] +]; diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 0000000..d85c1d4 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gfttoptions_0',['GFTTOptions',['../structmsceqf_1_1_g_f_t_t_options.html',1,'msceqf']]] +]; diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 0000000..edd59fe --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['imu_0',['Imu',['../structmsceqf_1_1_imu.html',1,'msceqf']]], + ['initializeroptions_1',['InitializerOptions',['../structmsceqf_1_1_initializer_options.html',1,'msceqf']]], + ['insertionorderedmap_2',['InsertionOrderedMap',['../classutils_1_1_insertion_ordered_map.html',1,'utils']]], + ['insertionorderedmap_3c_20msceqfstate_3a_3amsceqfkey_2c_20size_5ft_20_3e_3',['InsertionOrderedMap< MSCEqFState::MSCEqFKey, size_t >',['../classutils_1_1_insertion_ordered_map.html',1,'utils']]], + ['is_5fstreamable_4',['is_streamable',['../structutils_1_1is__streamable.html',1,'utils']]], + ['is_5fstreamable_3c_20s_2c_20c_2c_20decltype_28void_28std_3a_3adeclval_3c_20s_20_26_20_3e_28_29_3c_3c_20std_3a_3adeclval_3c_20c_20const_20_26_20_3e_28_29_29_29_3e_5',['is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>',['../structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html',1,'utils']]] +]; diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 0000000..0c81674 --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['logger_0',['Logger',['../classutils_1_1_logger.html',1,'utils']]] +]; diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 0000000..96b58df --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['msceqf_0',['MSCEqF',['../classmsceqf_1_1_m_s_c_eq_f.html',1,'msceqf']]], + ['msceqfinstate_1',['MSCEqFInState',['../structmsceqf_1_1_m_s_c_eq_f_in_state.html',1,'msceqf']]], + ['msceqfoptions_2',['MSCEqFOptions',['../structmsceqf_1_1_m_s_c_eq_f_options.html',1,'msceqf']]], + ['msceqfros_3',['MSCEqFRos',['../class_m_s_c_eq_f_ros.html',1,'']]], + ['msceqfsdbstate_4',['MSCEqFSDBState',['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html',1,'msceqf']]], + ['msceqfse3state_5',['MSCEqFSE3State',['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html',1,'msceqf']]], + ['msceqfsot3state_6',['MSCEqFSOT3State',['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html',1,'msceqf']]], + ['msceqfstate_7',['MSCEqFState',['../classmsceqf_1_1_m_s_c_eq_f_state.html',1,'msceqf']]], + ['msceqfstateelement_8',['MSCEqFStateElement',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html',1,'msceqf']]] +]; diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 0000000..ad542df --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['optionparser_0',['OptionParser',['../classmsceqf_1_1_option_parser.html',1,'msceqf']]] +]; diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 0000000..720fc9d --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['pinholecamera_0',['PinholeCamera',['../classmsceqf_1_1_pinhole_camera.html',1,'msceqf']]], + ['projectionhelper_1',['ProjectionHelper',['../classmsceqf_1_1_projection_helper.html',1,'msceqf']]], + ['projectionhelpers2_2',['ProjectionHelperS2',['../classmsceqf_1_1_projection_helper_s2.html',1,'msceqf']]], + ['projectionhelperz1_3',['ProjectionHelperZ1',['../classmsceqf_1_1_projection_helper_z1.html',1,'msceqf']]], + ['propagator_4',['Propagator',['../classmsceqf_1_1_propagator.html',1,'msceqf']]], + ['propagatoroptions_5',['PropagatorOptions',['../structmsceqf_1_1_propagator_options.html',1,'msceqf']]] +]; diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 0000000..087d515 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['radtancamera_0',['RadtanCamera',['../structmsceqf_1_1_radtan_camera.html',1,'msceqf']]] +]; diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 0000000..317b1e0 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['stateoptions_0',['StateOptions',['../structmsceqf_1_1_state_options.html',1,'msceqf']]], + ['staticinitializer_1',['StaticInitializer',['../classmsceqf_1_1_static_initializer.html',1,'msceqf']]], + ['symmetry_2',['Symmetry',['../classmsceqf_1_1_symmetry.html',1,'msceqf']]], + ['systemstate_3',['SystemState',['../classmsceqf_1_1_system_state.html',1,'msceqf']]], + ['systemstateelement_4',['SystemStateElement',['../classmsceqf_1_1_system_state_element.html',1,'msceqf']]] +]; diff --git a/search/classes_c.js b/search/classes_c.js new file mode 100644 index 0000000..eb3e43f --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['track_0',['Track',['../structmsceqf_1_1_track.html',1,'msceqf']]], + ['tracker_1',['Tracker',['../classmsceqf_1_1_tracker.html',1,'msceqf']]], + ['trackeroptions_2',['TrackerOptions',['../structmsceqf_1_1_tracker_options.html',1,'msceqf']]], + ['trackmanager_3',['TrackManager',['../classmsceqf_1_1_track_manager.html',1,'msceqf']]], + ['trackmanageroptions_4',['TrackManagerOptions',['../structmsceqf_1_1_track_manager_options.html',1,'msceqf']]], + ['triangulatedfeatures_5',['TriangulatedFeatures',['../structmsceqf_1_1_triangulated_features.html',1,'msceqf']]] +]; diff --git a/search/classes_d.js b/search/classes_d.js new file mode 100644 index 0000000..e135674 --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['updater_0',['Updater',['../classmsceqf_1_1_updater.html',1,'msceqf']]], + ['updaterhelper_1',['UpdaterHelper',['../structmsceqf_1_1_updater_helper.html',1,'msceqf']]], + ['updateroptions_2',['UpdaterOptions',['../structmsceqf_1_1_updater_options.html',1,'msceqf']]] +]; diff --git a/search/classes_e.js b/search/classes_e.js new file mode 100644 index 0000000..6b89341 --- /dev/null +++ b/search/classes_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['visualizer_0',['Visualizer',['../classmsceqf_1_1_visualizer.html',1,'msceqf']]] +]; diff --git a/search/classes_f.js b/search/classes_f.js new file mode 100644 index 0000000..e322d68 --- /dev/null +++ b/search/classes_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['zerovelocityupdater_0',['ZeroVelocityUpdater',['../classmsceqf_1_1_zero_velocity_updater.html',1,'msceqf']]], + ['zerovelocityupdateroptions_1',['ZeroVelocityUpdaterOptions',['../structmsceqf_1_1_zero_velocity_updater_options.html',1,'msceqf']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..a309f73 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['activetracksids_0',['activeTracksIds',['../classmsceqf_1_1_track_manager.html#a0c0ff31e29de9e63a454a58af7c9b931',1,'msceqf::TrackManager']]], + ['at_1',['at',['../classutils_1_1_insertion_ordered_map.html#a75e4c95149461f854cd43d9c70c12da8',1,'utils::InsertionOrderedMap::at(const Key &key) const'],['../classutils_1_1_insertion_ordered_map.html#ab659341ecf8995e225c1c4e2832ec098',1,'utils::InsertionOrderedMap::at(const Key &key)']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000..c0d026e --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['b_0',['B',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a2ba8e8aa0d8fac30959ad516098a7c15',1,'msceqf::MSCEqFState']]], + ['b_1',['b',['../classmsceqf_1_1_system_state.html#aa3d4b2cdfdd1063f53c8260f8e1d3987',1,'msceqf::SystemState']]], + ['b0_2',['b0',['../classmsceqf_1_1_static_initializer.html#a28a97008c469fd24d5bad902bd4637dc',1,'msceqf::StaticInitializer']]], + ['block_5frows_3',['block_rows',['../classmsceqf_1_1_projection_helper.html#a772f3460fab451ec75cea7bde3a5cf1d',1,'msceqf::ProjectionHelper']]] +]; diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 0000000..7fa017e --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['s_0',['S',['../classmsceqf_1_1_system_state.html#ae6a0a7129eb4ff2eabdb3c788f5e069d',1,'msceqf::SystemState']]], + ['setgivenorigin_1',['setGivenOrigin',['../classmsceqf_1_1_m_s_c_eq_f.html#a2287aa91e58c6190cd94aeacedfe9c7d',1,'msceqf::MSCEqF']]], + ['setintrinsics_2',['setIntrinsics',['../classmsceqf_1_1_pinhole_camera.html#a0f35048114204c3577a67b60cf720555',1,'msceqf::PinholeCamera']]], + ['setlevel_3',['setLevel',['../classutils_1_1_logger.html#af532d3fa4a0b29b27f9caa3447122817',1,'utils::Logger']]], + ['setmeasurement_4',['setMeasurement',['../classmsceqf_1_1_zero_velocity_updater.html#a04790d5df6a8dbebe6ecec357aea848b',1,'msceqf::ZeroVelocityUpdater']]], + ['setmotion_5',['setMotion',['../classmsceqf_1_1_zero_velocity_updater.html#aa6d1fe8c72e5c3f51a4c61dfee9bc2ab',1,'msceqf::ZeroVelocityUpdater']]], + ['size_6',['size',['../structmsceqf_1_1_features.html#afe00a99b4854fc45c7d07b4ce3253c7b',1,'msceqf::Features::size()'],['../structmsceqf_1_1_track.html#a9c9438e708358c0e8be003e44ba7d04a',1,'msceqf::Track::size()']]], + ['stateestimate_7',['stateEstimate',['../classmsceqf_1_1_m_s_c_eq_f.html#af1c4f54460f44e87eb7e3ab7b9655973',1,'msceqf::MSCEqF']]], + ['stateoptions_8',['stateOptions',['../classmsceqf_1_1_m_s_c_eq_f.html#a4d284b06bf0e6717b2f48fe20e0d26ba',1,'msceqf::MSCEqF']]], + ['stateorigin_9',['stateOrigin',['../classmsceqf_1_1_m_s_c_eq_f.html#af8d31b5b7ee3089c6967d952b9c9848b',1,'msceqf::MSCEqF']]], + ['staticinitializer_10',['StaticInitializer',['../classmsceqf_1_1_static_initializer.html#abe3e0c8fcc63851184c8fb296d1cde61',1,'msceqf::StaticInitializer']]], + ['stochasticcloning_11',['stochasticCloning',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a40572c524f1776af3f2b213d73d9f257',1,'msceqf::MSCEqFState']]], + ['subcov_12',['subCov',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ad14329a60c17ff014c1940da434df263',1,'msceqf::MSCEqFState']]], + ['subcovcols_13',['subCovCols',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a43759d5a32ac4133e7a30a4faa8620ac',1,'msceqf::MSCEqFState']]], + ['systemstate_14',['SystemState',['../classmsceqf_1_1_system_state.html#aa842c21ee431baf8fe29cb26d341c16c',1,'msceqf::SystemState::SystemState()=delete'],['../classmsceqf_1_1_system_state.html#a95d992717a66448018694a8931288207',1,'msceqf::SystemState::SystemState(const StateOptions &opts, const SE23 &T0=SE23(), const Vector6 &b0=Vector6::Zero())'],['../classmsceqf_1_1_system_state.html#acd7791337e2a823b2ddd845489f66561',1,'msceqf::SystemState::SystemState(const StateOptions &opts, Args &&... pairs_of_key_ptr)'],['../classmsceqf_1_1_system_state.html#a99428a0cf85c79a9c96df85b07d9f90f',1,'msceqf::SystemState::SystemState(const SystemState &other)']]], + ['systemstateelement_15',['SystemStateElement',['../classmsceqf_1_1_system_state_element.html#a852facaeb4453b2d1eb1ab2d4ed47968',1,'msceqf::SystemStateElement']]] +]; diff --git a/search/functions_11.js b/search/functions_11.js new file mode 100644 index 0000000..6738f0c --- /dev/null +++ b/search/functions_11.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['t_0',['T',['../classmsceqf_1_1_system_state.html#a388d36c3791f50f0cd1cfc9b5e3c7b9b',1,'msceqf::SystemState']]], + ['t0_1',['T0',['../classmsceqf_1_1_static_initializer.html#a6a483ed7576aae6b537d21308ddc7bba',1,'msceqf::StaticInitializer']]], + ['tostring_2',['toString',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ae43ed2381a1333a620ad37ecb269d97f',1,'msceqf::MSCEqFState::toString()'],['../classmsceqf_1_1_system_state.html#a8772fe6e1d6f17db099407ee4679945b',1,'msceqf::SystemState::toString()']]], + ['tracker_3',['Tracker',['../classmsceqf_1_1_tracker.html#afb492cf3bf3ce23424014fa4946b4c2a',1,'msceqf::Tracker']]], + ['trackmanager_4',['TrackManager',['../classmsceqf_1_1_track_manager.html#abf577306739781c993b88c01f2e627b6',1,'msceqf::TrackManager']]], + ['tracks_5',['tracks',['../classmsceqf_1_1_track_manager.html#acd15a87fdc24b43e2cb9f41e179a85e3',1,'msceqf::TrackManager']]], + ['tracksids_6',['tracksIds',['../classmsceqf_1_1_track_manager.html#aa0b99fd74bebf540e0b1d2f8abbd062b',1,'msceqf::TrackManager']]] +]; diff --git a/search/functions_12.js b/search/functions_12.js new file mode 100644 index 0000000..4a24b88 --- /dev/null +++ b/search/functions_12.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['undistort_0',['undistort',['../classmsceqf_1_1_pinhole_camera.html#aac9dfa0d780e38b9aaf2afba4a834ecd',1,'msceqf::PinholeCamera::undistort(std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)'],['../classmsceqf_1_1_pinhole_camera.html#a00b6ab4337fd7db73e51eaac8d736632',1,'msceqf::PinholeCamera::undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize=false)=0'],['../structmsceqf_1_1_radtan_camera.html#a6bbf98ed9be455ecf0e58a5c93b6f41d',1,'msceqf::RadtanCamera::undistort()'],['../structmsceqf_1_1_equidistant_camera.html#a819c5607c1f0913c6e6bb77c5de43b3f',1,'msceqf::EquidistantCamera::undistort()']]], + ['undistortimage_1',['undistortImage',['../classmsceqf_1_1_pinhole_camera.html#a732c98908e5a69c70f001e39e1461b78',1,'msceqf::PinholeCamera::undistortImage()'],['../structmsceqf_1_1_radtan_camera.html#a148e2f48b5813ce91b35ee4ea62114fe',1,'msceqf::RadtanCamera::undistortImage()'],['../structmsceqf_1_1_equidistant_camera.html#a3515afec6d02105114599ba93a7d6862',1,'msceqf::EquidistantCamera::undistortImage()']]], + ['updateindex_2',['updateIndex',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a529dd668cc095fb064ce315536cbe49f',1,'msceqf::MSCEqFStateElement']]], + ['updateleft_3',['updateLeft',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a954034d163f3b9c87ba2fdb9fd505ed9',1,'msceqf::MSCEqFStateElement::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#ab5561a8eb740efdbb1a1d0dc029210fa',1,'msceqf::MSCEqFSDBState::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#ab41b071e0f3a55feb8191c9ac0704791',1,'msceqf::MSCEqFSE3State::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#ab02dac4244b83fe1eac44772441ac9c1',1,'msceqf::MSCEqFInState::updateLeft()'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a8ae5dc4e2fa9ac8ad81718704649da0f',1,'msceqf::MSCEqFSOT3State::updateLeft()']]], + ['updateqrcompression_4',['updateQRCompression',['../structmsceqf_1_1_updater_helper.html#ad3e81ddc4140702bc0ded6d43709169f',1,'msceqf::UpdaterHelper']]], + ['updateright_5',['updateRight',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a5a9d827886bbe93e86a422aef4ad868b',1,'msceqf::MSCEqFStateElement::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a275db0af3885e1f4f5876057c97cdf6c',1,'msceqf::MSCEqFSDBState::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#ace3dc196bb8db7dd700af8a7a02795be',1,'msceqf::MSCEqFSE3State::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#ae3b474fb0284b4f30b20ffc9ca010cec',1,'msceqf::MSCEqFInState::updateRight()'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#ab0d5eb9400a99969dab552b49dbc83fc',1,'msceqf::MSCEqFSOT3State::updateRight()']]] +]; diff --git a/search/functions_13.js b/search/functions_13.js new file mode 100644 index 0000000..f83c58c --- /dev/null +++ b/search/functions_13.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['v_0',['V',['../classmsceqf_1_1_system_state.html#aa03192f66803c072bb937809b375dcd5',1,'msceqf::SystemState']]], + ['values_1',['values',['../classutils_1_1_insertion_ordered_map.html#ac54723bf987340bca7a1c78aba3b8155',1,'utils::InsertionOrderedMap']]], + ['visualizeimagewithtracks_2',['visualizeImageWithTracks',['../classmsceqf_1_1_m_s_c_eq_f.html#a2fadf3c923da1763c0d51023e6def3f1',1,'msceqf::MSCEqF::visualizeImageWithTracks()'],['../classmsceqf_1_1_visualizer.html#a49e6c6116457f74dd68d81382c4e154b',1,'msceqf::Visualizer::visualizeImageWithTracks(const Camera &cam, const std::string &text="") const']]], + ['visualizer_3',['Visualizer',['../classmsceqf_1_1_visualizer.html#a06f94caa116397a1c4b52dea87c5cee6',1,'msceqf::Visualizer']]] +]; diff --git a/search/functions_14.js b/search/functions_14.js new file mode 100644 index 0000000..1bc5e10 --- /dev/null +++ b/search/functions_14.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['w_0',['W',['../structmsceqf_1_1_imu.html#abfb41a7dd565a216b9d2392e4b308fcf',1,'msceqf::Imu']]], + ['w_1',['w',['../structmsceqf_1_1_imu.html#a8995590a4492fb0fcec520efe985456b',1,'msceqf::Imu']]], + ['warn_2',['warn',['../classutils_1_1_logger.html#a59f29785c6f21449afca65db49c7d966',1,'utils::Logger']]] +]; diff --git a/search/functions_15.js b/search/functions_15.js new file mode 100644 index 0000000..ea5e69b --- /dev/null +++ b/search/functions_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xi_0',['Xi',['../structmsceqf_1_1_updater_helper.html#a3711d18a8750685abb57baa925e37683',1,'msceqf::UpdaterHelper']]] +]; diff --git a/search/functions_16.js b/search/functions_16.js new file mode 100644 index 0000000..9f38797 --- /dev/null +++ b/search/functions_16.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['zerovelocityupdater_0',['ZeroVelocityUpdater',['../classmsceqf_1_1_zero_velocity_updater.html#a75b934b99074efe88ad5706ef0b6be01',1,'msceqf::ZeroVelocityUpdater']]], + ['zvupdate_1',['zvUpdate',['../classmsceqf_1_1_zero_velocity_updater.html#a5f7685172128094eb6d5d0911ae5378a',1,'msceqf::ZeroVelocityUpdater']]], + ['zvuperformed_2',['zvuPerformed',['../classmsceqf_1_1_m_s_c_eq_f.html#a3d7135418997539dcb59078c592f8c5e',1,'msceqf::MSCEqF']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000..361fa4b --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['c_0',['C',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a07ca6f8a7c48f784c5c9641fb7ef4f69',1,'msceqf::MSCEqFState']]], + ['callback_5fimage_1',['callback_image',['../class_m_s_c_eq_f_ros.html#abab3928b6c09f7a3c580c30c5eef0d45',1,'MSCEqFRos']]], + ['callback_5fimu_2',['callback_imu',['../class_m_s_c_eq_f_ros.html#aa2340b07b206b75ffd4e4fdeee562942',1,'MSCEqFRos']]], + ['cam_3',['cam',['../classmsceqf_1_1_track_manager.html#afe813535e2b8bc3fa2f68ea611fb7015',1,'msceqf::TrackManager::cam()'],['../classmsceqf_1_1_tracker.html#ab0998a6999526305b7e0b4d958de7f93',1,'msceqf::Tracker::cam()']]], + ['checker_4',['Checker',['../classmsceqf_1_1_checker.html#a7b5b818584c855a09faed1cde6f78a6c',1,'msceqf::Checker']]], + ['chi2test_5',['chi2Test',['../structmsceqf_1_1_updater_helper.html#aa1dd34539620eb11b485a7ea140a3eea',1,'msceqf::UpdaterHelper']]], + ['clear_6',['clear',['../classutils_1_1_insertion_ordered_map.html#a8350ad05c98eb1e736c4b071442d2136',1,'utils::InsertionOrderedMap::clear()'],['../classmsceqf_1_1_track_manager.html#a5a2d6ad04970e43e2cb393e74228db2b',1,'msceqf::TrackManager::clear()']]], + ['clone_7',['clone',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a8b38b0d21df9ae3a07bbaaca7daf6f7b',1,'msceqf::MSCEqFState::clone()'],['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a494c18ed513e08d5ef8939e1242551a5',1,'msceqf::MSCEqFStateElement::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#ac54188e937b0053709fe62506efe2bad',1,'msceqf::MSCEqFSDBState::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a550e5c1d5306407e4f155c1de772c165',1,'msceqf::MSCEqFSE3State::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#a16b225fd2d52d4cd68ed3db04e367126',1,'msceqf::MSCEqFInState::clone()'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a8d787857699430eb312419a8b512eaed',1,'msceqf::MSCEqFSOT3State::clone()'],['../classmsceqf_1_1_system_state_element.html#ac44336562c195471cdfb2b16cdfe50b9',1,'msceqf::SystemStateElement::clone()'],['../structmsceqf_1_1_extended_pose_state.html#ac350cd78075510c502a3d462425650fb',1,'msceqf::ExtendedPoseState::clone()'],['../structmsceqf_1_1_bias_state.html#aef8a73120661539e79a72ac3778bef24',1,'msceqf::BiasState::clone()'],['../structmsceqf_1_1_camera_extrinsic_state.html#ad625489db42b5727fbc7673307df8693',1,'msceqf::CameraExtrinsicState::clone()'],['../structmsceqf_1_1_camera_intrinsic_state.html#ae67dc5c98714c1db2dd5a7b4306e43d9',1,'msceqf::CameraIntrinsicState::clone()'],['../structmsceqf_1_1_feature_state.html#a78732a75e6d2b2704c8f26581f9aaf3c',1,'msceqf::FeatureState::clone()']]], + ['clonessize_8',['clonesSize',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ad63c4591dfbba61f680c92bbe6b327a1',1,'msceqf::MSCEqFState']]], + ['clonetimestamptomarginalize_9',['cloneTimestampToMarginalize',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ab74dc134ababe6a2914a703746fe2879',1,'msceqf::MSCEqFState']]], + ['corecovariance_10',['coreCovariance',['../classmsceqf_1_1_m_s_c_eq_f.html#a997db7a553e9889015b9678080c86be8',1,'msceqf::MSCEqF']]], + ['cov_11',['cov',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a19c6f21068871bbd9bc1cd725284487a',1,'msceqf::MSCEqFState']]], + ['covariance_12',['covariance',['../classmsceqf_1_1_m_s_c_eq_f.html#a4a9975dea4d9c62ce4505fba3296dd18',1,'msceqf::MSCEqF']]], + ['covblock_13',['covBlock',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a88df644cc8a6c623020128e2b1266c25',1,'msceqf::MSCEqFState']]], + ['currentfeatures_14',['currentFeatures',['../classmsceqf_1_1_tracker.html#a84f066b29a246c23ef9d78a646504b1b',1,'msceqf::Tracker']]], + ['curvaturecorrection_15',['curvatureCorrection',['../classmsceqf_1_1_symmetry.html#ad44fe8b6425747cb14dffb26052db110',1,'msceqf::Symmetry']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000..edcebc6 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['d_0',['D',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a71b238cde922261accd48f8269817d4c',1,'msceqf::MSCEqFState']]], + ['debug_1',['debug',['../classutils_1_1_logger.html#a7cfbfed6c23af6db8d928cc33f883f50',1,'utils::Logger']]], + ['delta_2',['delta',['../classmsceqf_1_1_m_s_c_eq_f_state.html#aa46141f5f1104a05a627fdd6370f9a9b',1,'msceqf::MSCEqFState']]], + ['denormalize_3',['denormalize',['../classmsceqf_1_1_pinhole_camera.html#a94a994903a29fbdd86b06442fe44f0bb',1,'msceqf::PinholeCamera::denormalize(std::vector< Eigen::Vector2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a47eb22e8ca894ac475d799c4ae8fe36e',1,'msceqf::PinholeCamera::denormalize(std::vector< cv::Point2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#ad772fe1e146f5094aa6110611ae748f6',1,'msceqf::PinholeCamera::denormalize(Eigen::Vector2f &uv)'],['../classmsceqf_1_1_pinhole_camera.html#af4918235c0ffab8adc1ca7231f19215b',1,'msceqf::PinholeCamera::denormalize(cv::Point2f &uv)']]], + ['detectmotion_4',['detectMotion',['../classmsceqf_1_1_static_initializer.html#a962b4f00af698b6e9d5681a2387e4470',1,'msceqf::StaticInitializer']]], + ['dim_5floss_5',['dim_loss',['../classmsceqf_1_1_projection_helper.html#a5db4746cda6be4f465dc88d3cce68863',1,'msceqf::ProjectionHelper']]], + ['disparitycheck_6',['disparityCheck',['../classmsceqf_1_1_checker.html#ae352383ab698870d55cd3244f2f1e031',1,'msceqf::Checker']]], + ['distortioncoefficients_7',['distortionCoefficients',['../classmsceqf_1_1_pinhole_camera.html#a50d70d4232a386f6feef1db182d4d447',1,'msceqf::PinholeCamera']]], + ['dof_8',['dof',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a60595205c41950307960c6666c78c63c',1,'msceqf::MSCEqFState']]], + ['dpi_9',['dpi',['../classmsceqf_1_1_projection_helper.html#a6a67252b227c043f901c7742aec9ad29',1,'msceqf::ProjectionHelper::dpi()'],['../classmsceqf_1_1_projection_helper_s2.html#a0acd0d20cd2b4df21bcdc55d62d7bd10',1,'msceqf::ProjectionHelperS2::dpi()'],['../classmsceqf_1_1_projection_helper_z1.html#a31884382388f3acf7b6a95e0d146d7c9',1,'msceqf::ProjectionHelperZ1::dpi()']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000..98f8941 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['e_0',['E',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a57d02c2929be3bb2b0d38a3dd8b13569',1,'msceqf::MSCEqFState']]], + ['empty_1',['empty',['../structmsceqf_1_1_features.html#ad5ba9089e87e84c92e1a95b0bce56dd1',1,'msceqf::Features::empty()'],['../structmsceqf_1_1_track.html#a4b70af76854a4aa9760be3c8bb096d10',1,'msceqf::Track::empty()']]], + ['err_2',['err',['../classutils_1_1_logger.html#adabf5e33082840c328280cfdc0768c04',1,'utils::Logger']]] +]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000..ca1eb35 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['f_0',['f',['../classmsceqf_1_1_system_state.html#aa57f29ac63c94d167d9261fd9c8ac889',1,'msceqf::SystemState']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 0000000..7b3396b --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['ge3_0',['ge3',['../classmsceqf_1_1_system_state.html#ae4ffdd10423f0189684a01a190d9929b',1,'msceqf::SystemState']]], + ['getdof_1',['getDof',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a7441186a74539dc0b7ba6e0a61b8ec3b',1,'msceqf::MSCEqFStateElement']]], + ['getindex_2',['getIndex',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a53882d76f6e925923c1f8b7678e525a1',1,'msceqf::MSCEqFStateElement']]], + ['getlevel_3',['getlevel',['../classutils_1_1_logger.html#a611319c8d86aef3493155ca2df9f2461',1,'utils::Logger']]] +]; diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 0000000..859b88a --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['imagewithtracks_0',['imageWithTracks',['../classmsceqf_1_1_m_s_c_eq_f.html#aa093952ba96078a35ed821bcccfd4eb6',1,'msceqf::MSCEqF::imageWithTracks()'],['../classmsceqf_1_1_visualizer.html#af0b6220ad8dbb4d1925ba9121be6631e',1,'msceqf::Visualizer::imageWithTracks()']]], + ['index_1',['index',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a396d28ac19c3de4d5912f328d68048ea',1,'msceqf::MSCEqFState']]], + ['info_2',['info',['../classutils_1_1_logger.html#adf4693f33250758a3db3730d460caded',1,'utils::Logger']]], + ['initializeorigin_3',['initializeOrigin',['../classmsceqf_1_1_static_initializer.html#a0ea57db9c8ffd6c456924aaf2ca02fa9',1,'msceqf::StaticInitializer']]], + ['initializestateelement_4',['initializeStateElement',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a9a8dffcf54ed656e0e6e82a07608532b',1,'msceqf::MSCEqFState']]], + ['insert_5',['insert',['../classutils_1_1_insertion_ordered_map.html#a953c250c1bb59ee5594e6daec5e7c0f3',1,'utils::InsertionOrderedMap']]], + ['insertimu_6',['insertImu',['../classmsceqf_1_1_static_initializer.html#aeb636116cd6495e52fb93284be828f38',1,'msceqf::StaticInitializer::insertImu()'],['../classmsceqf_1_1_propagator.html#a85447d7e988ac5bb6e9646929c0b3da9',1,'msceqf::Propagator::insertImu()']]], + ['intrinsics_7',['intrinsics',['../classmsceqf_1_1_pinhole_camera.html#a282aa4f8f7bc9d6044a52a9c811718d0',1,'msceqf::PinholeCamera']]], + ['inversedepthjacobian_8',['inverseDepthJacobian',['../structmsceqf_1_1_updater_helper.html#a70f743ea4e65dce3daa75cb381cbf531',1,'msceqf::UpdaterHelper']]], + ['isactive_9',['isActive',['../classmsceqf_1_1_zero_velocity_updater.html#af14a4da81ca7d243f79bd9e2f8e1d3b3',1,'msceqf::ZeroVelocityUpdater']]], + ['isinit_10',['isInit',['../classmsceqf_1_1_m_s_c_eq_f.html#a92233266c8048557db3873405a7fa7a7',1,'msceqf::MSCEqF']]] +]; diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 0000000..10d8537 --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['k_0',['K',['../classmsceqf_1_1_system_state.html#aa78b01151738dce902450e73c6f5d5a1',1,'msceqf::SystemState']]], + ['k_1',['k',['../classmsceqf_1_1_system_state.html#abdd483746a154dbe39860b36b82223a1',1,'msceqf::SystemState']]], + ['keys_2',['keys',['../classutils_1_1_insertion_ordered_map.html#a51efdc3177100f1e73e29c4a877a0bfb',1,'utils::InsertionOrderedMap']]] +]; diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 0000000..682cff4 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['l_0',['L',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a22cbea48d7ddf2508d3f5249616616ce',1,'msceqf::MSCEqFState']]], + ['lift_1',['lift',['../classmsceqf_1_1_symmetry.html#ab64734f839852247858fde35474f435e',1,'msceqf::Symmetry']]], + ['losttracksids_2',['lostTracksIds',['../classmsceqf_1_1_track_manager.html#a12e65c2082c9caf011e8a1fe118a51e1',1,'msceqf::TrackManager']]] +]; diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 0000000..d1dca1a --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['marginalizecloneat_0',['marginalizeCloneAt',['../classmsceqf_1_1_m_s_c_eq_f_state.html#aa4c997fa07b165c6ea942a6e1b725e08',1,'msceqf::MSCEqFState']]], + ['msceqf_1',['MSCEqF',['../classmsceqf_1_1_m_s_c_eq_f.html#abb3bc947ff4ae1a330fdb709aff7cb11',1,'msceqf::MSCEqF']]], + ['msceqfinstate_2',['MSCEqFInState',['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#ae00aed09ebc708074e19e0764af02a2f',1,'msceqf::MSCEqFInState::MSCEqFInState()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_in_state.html#a38c26be4cf996d2b7e0830a655204e84',1,'msceqf::MSCEqFInState::MSCEqFInState(const uint &idx)']]], + ['msceqfros_3',['MSCEqFRos',['../class_m_s_c_eq_f_ros.html#a982967b357cb43548ab7a2e78536daa4',1,'MSCEqFRos']]], + ['msceqfsdbstate_4',['MSCEqFSDBState',['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#aed312cc3420563250609ffa6c04c1d81',1,'msceqf::MSCEqFSDBState::MSCEqFSDBState()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a75f90fb123c5d3d4361214b805a19e0c',1,'msceqf::MSCEqFSDBState::MSCEqFSDBState(const uint &idx)']]], + ['msceqfse3state_5',['MSCEqFSE3State',['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a778cea47a1d588d385b2cddae63ee052',1,'msceqf::MSCEqFSE3State::MSCEqFSE3State()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a74fc4265af22a3aff056b75e60ae858b',1,'msceqf::MSCEqFSE3State::MSCEqFSE3State(const uint &idx)']]], + ['msceqfsot3state_6',['MSCEqFSOT3State',['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a149aa3e73d21920ee993f7e03d35cc46',1,'msceqf::MSCEqFSOT3State::MSCEqFSOT3State()=delete'],['../structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a80c3df4e312fe54cb1aea249e06d25a2',1,'msceqf::MSCEqFSOT3State::MSCEqFSOT3State(const uint &idx)']]], + ['msceqfstate_7',['MSCEqFState',['../classmsceqf_1_1_m_s_c_eq_f_state.html#afec7530ecddab98b45948a2820ce59d6',1,'msceqf::MSCEqFState::MSCEqFState()=delete'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a587407b4418bb38c79ed0ca0c63254ac',1,'msceqf::MSCEqFState::MSCEqFState(const StateOptions &opts, const SystemState &xi0)'],['../classmsceqf_1_1_m_s_c_eq_f_state.html#a934d93f3e3fccc098fdd05bceda29858',1,'msceqf::MSCEqFState::MSCEqFState(const MSCEqFState &other)']]], + ['msceqfstateelement_8',['MSCEqFStateElement',['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#a7ec47e75578d8cc1c87a3a63a13abeec',1,'msceqf::MSCEqFStateElement::MSCEqFStateElement()=delete'],['../classmsceqf_1_1_m_s_c_eq_f_state_element.html#acd4ce57105c76dbef374f0ea282dddb3',1,'msceqf::MSCEqFStateElement::MSCEqFStateElement(const uint &idx, const uint &dof)']]], + ['mscupdate_9',['mscUpdate',['../classmsceqf_1_1_updater.html#a258710b1d247e606625306524ecbdb4d',1,'msceqf::Updater']]] +]; diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 0000000..0a00025 --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['normalize_0',['normalize',['../classmsceqf_1_1_pinhole_camera.html#a5175a8d0505b607ed1a234d1579bbdc1',1,'msceqf::PinholeCamera::normalize(std::vector< Eigen::Vector2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a889c70211a8a88fb8e8709fe95cbbce2',1,'msceqf::PinholeCamera::normalize(std::vector< cv::Point2f > &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a95d95360114f2097275e7c3918d1d55e',1,'msceqf::PinholeCamera::normalize(Eigen::Vector2f &uv)'],['../classmsceqf_1_1_pinhole_camera.html#a0ed3882ef9693cfb016e00890aefdb9f',1,'msceqf::PinholeCamera::normalize(cv::Point2f &uv)']]], + ['nullspaceprojection_1',['nullspaceProjection',['../structmsceqf_1_1_updater_helper.html#ab68320ec8375ca8d1c56de51235d0281',1,'msceqf::UpdaterHelper']]] +]; diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 0000000..3e3536e --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['operator_2a_0',['operator*',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a2ed5779e4d4df55eb0a3be4f6f6375b4',1,'msceqf::MSCEqFState']]], + ['optionparser_1',['OptionParser',['../classmsceqf_1_1_option_parser.html#a8f797dbe136a1aa8399ed6f7279b92c0',1,'msceqf::OptionParser']]], + ['options_2',['options',['../classmsceqf_1_1_m_s_c_eq_f.html#acb5d226d4ad65d27c358ef828db00087',1,'msceqf::MSCEqF']]], + ['opts_3',['opts',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a5e24084e77a9ff5469afe48e17db7c9b',1,'msceqf::MSCEqFState::opts()'],['../classmsceqf_1_1_system_state.html#a4eb9dffa95fa3caf6a7b8f9c7079fb46',1,'msceqf::SystemState::opts()']]] +]; diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 0000000..2ba9d9c --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['p_0',['P',['../classmsceqf_1_1_system_state.html#aff5c1d9314c92dd709cc1a7f14c285b9',1,'msceqf::SystemState']]], + ['parseoptions_1',['parseOptions',['../classmsceqf_1_1_option_parser.html#a045e263acada6289b9d331c689b0e7b5',1,'msceqf::OptionParser']]], + ['phi_2',['phi',['../classmsceqf_1_1_symmetry.html#a801380a30e9961a72de49bb50f5793a7',1,'msceqf::Symmetry']]], + ['pi_3',['pi',['../classmsceqf_1_1_projection_helper.html#acf572fee6dd470f8b74152831a9066ad',1,'msceqf::ProjectionHelper::pi()'],['../classmsceqf_1_1_projection_helper_s2.html#a4c351bcc3cf3d7941e9d620cc23ea7fa',1,'msceqf::ProjectionHelperS2::pi()'],['../classmsceqf_1_1_projection_helper_z1.html#af6b6ea58659baef976e65e2144463677',1,'msceqf::ProjectionHelperZ1::pi()']]], + ['pinholecamera_4',['PinholeCamera',['../classmsceqf_1_1_pinhole_camera.html#a5868e865166a3cf4b67427caaed1eddb',1,'msceqf::PinholeCamera']]], + ['processcamera_5',['processCamera',['../classmsceqf_1_1_track_manager.html#a22727a0d230248e3786cb6cae36178b1',1,'msceqf::TrackManager::processCamera()'],['../classmsceqf_1_1_tracker.html#adb6858134efd07895ccd41b56520e6e3',1,'msceqf::Tracker::processCamera()']]], + ['processfeatures_6',['processFeatures',['../classmsceqf_1_1_track_manager.html#a8a8e67cb8b718fcd3ca60e7db5ef4ac7',1,'msceqf::TrackManager']]], + ['processmeasurement_7',['processMeasurement',['../classmsceqf_1_1_m_s_c_eq_f.html#a55cd046228cd54d23f1854684b64a801',1,'msceqf::MSCEqF::processMeasurement(const Imu &meas)'],['../classmsceqf_1_1_m_s_c_eq_f.html#ac2017b25449e411f5d77c3b5fe59b011',1,'msceqf::MSCEqF::processMeasurement(Camera &meas)'],['../classmsceqf_1_1_m_s_c_eq_f.html#a2bbc3010eb9e56c60b7378ea7864fe52',1,'msceqf::MSCEqF::processMeasurement(TriangulatedFeatures &meas)']]], + ['projectionhelper_8',['ProjectionHelper',['../classmsceqf_1_1_projection_helper.html#a5e04febec3b043a59995fa76d48c8f4c',1,'msceqf::ProjectionHelper']]], + ['propagate_9',['propagate',['../classmsceqf_1_1_propagator.html#aaad9301ac9aec60ed75dbb0f662e2f36',1,'msceqf::Propagator']]], + ['propagator_10',['Propagator',['../classmsceqf_1_1_propagator.html#a2e20b4a9aa97c3101b19833a7afacc41',1,'msceqf::Propagator']]] +]; diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 0000000..9a988f9 --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['q_0',['Q',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a65fcd0fe59fb233ddb207d2afab5136c',1,'msceqf::MSCEqFState']]] +]; diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 0000000..23f0d58 --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['random_0',['Random',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a3cb9682d076eae9b1463a2dbdaa5d2f4',1,'msceqf::MSCEqFState']]], + ['removeinvalid_1',['removeInvalid',['../structmsceqf_1_1_features.html#a7c88b6d974425f8fc019183328f8a59a',1,'msceqf::Features::removeInvalid()'],['../structmsceqf_1_1_track.html#a23ea6d1201294522d8058d625792cc39',1,'msceqf::Track::removeInvalid(std::vector< bool > &invalid)']]], + ['removetail_2',['removeTail',['../structmsceqf_1_1_track.html#a555ada2c730ab5161f7c908400c91d6e',1,'msceqf::Track']]], + ['removetracksid_3',['removeTracksId',['../classmsceqf_1_1_track_manager.html#aefb19f95a52046a2939b94abf1e5a22e',1,'msceqf::TrackManager']]], + ['removetrackstail_4',['removeTracksTail',['../classmsceqf_1_1_track_manager.html#a72c21cede157880964b2494123e640f2',1,'msceqf::TrackManager']]], + ['residualjacobianblock_5',['residualJacobianBlock',['../classmsceqf_1_1_projection_helper.html#a6e5d693becca05644db55c84444491e2',1,'msceqf::ProjectionHelper::residualJacobianBlock()'],['../classmsceqf_1_1_projection_helper_s2.html#a675fb8dc7bd5a8af52e7a9a86b54e0f8',1,'msceqf::ProjectionHelperS2::residualJacobianBlock()'],['../classmsceqf_1_1_projection_helper_z1.html#a62f13a69d5d0917693edfa373d80f479',1,'msceqf::ProjectionHelperZ1::residualJacobianBlock()']]] +]; diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000..3627e38 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['msceqf_0',['MSCEqF',['../index.html',1,'']]] +]; diff --git a/search/related_0.js b/search/related_0.js new file mode 100644 index 0000000..e58770c --- /dev/null +++ b/search/related_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_3c_0',['operator<',['../structmsceqf_1_1_imu.html#a1fbb26978848607614bfc802d9af2b65',1,'msceqf::Imu::operator<'],['../structmsceqf_1_1_imu.html#a781bdbdb2b8f42651f7af7973f4e58f4',1,'msceqf::Imu::operator<'],['../structmsceqf_1_1_camera.html#ad7ccf94075a0ec098e03c90d78019485',1,'msceqf::Camera::operator<'],['../structmsceqf_1_1_camera.html#addebf47a948140644806152e1b3c9e76',1,'msceqf::Camera::operator<'],['../structmsceqf_1_1_triangulated_features.html#ad9e38234e508ac0466a461b54764706d',1,'msceqf::TriangulatedFeatures::operator<'],['../structmsceqf_1_1_triangulated_features.html#a403118b276d90f8a86c0c9d74f954a3f',1,'msceqf::TriangulatedFeatures::operator<'],['../structmsceqf_1_1_track.html#aab82b71fb82726c14eda7cfcf6feba0a',1,'msceqf::Track::operator<']]], + ['operator_3c_3c_1',['operator<<',['../structmsceqf_1_1_imu.html#adff300fb97f6ad0dd6cc8145da362e0d',1,'msceqf::Imu']]] +]; diff --git a/search/related_1.js b/search/related_1.js new file mode 100644 index 0000000..f66a4fc --- /dev/null +++ b/search/related_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['propagator_0',['Propagator',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a9d01c82a7038a8c986c6b15c15b2e631',1,'msceqf::MSCEqFState']]] +]; diff --git a/search/related_2.js b/search/related_2.js new file mode 100644 index 0000000..d755e92 --- /dev/null +++ b/search/related_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['symmetry_0',['Symmetry',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a41706e12d68690130eaf013ca5aa311b',1,'msceqf::MSCEqFState::Symmetry'],['../classmsceqf_1_1_system_state.html#a41706e12d68690130eaf013ca5aa311b',1,'msceqf::SystemState::Symmetry']]] +]; diff --git a/search/related_3.js b/search/related_3.js new file mode 100644 index 0000000..8f9caf7 --- /dev/null +++ b/search/related_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['updater_0',['Updater',['../classmsceqf_1_1_m_s_c_eq_f_state.html#a263621696f00d0fefadbd6b1b52da6b5',1,'msceqf::MSCEqFState']]] +]; diff --git a/search/related_4.js b/search/related_4.js new file mode 100644 index 0000000..88f58ad --- /dev/null +++ b/search/related_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zerovelocityupdater_0',['ZeroVelocityUpdater',['../classmsceqf_1_1_m_s_c_eq_f_state.html#ad4f72ce3a5f4c9e1de3b516ac2a76d05',1,'msceqf::MSCEqFState']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +MSCEqF: include/sensors/sensor_data.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    sensor_data.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef INPUT_HPP
    +
    13#define INPUT_HPP
    +
    14
    +
    15#include <opencv2/opencv.hpp>
    +
    16
    +
    17#include "types/fptypes.hpp"
    +
    18#include "vision/features.hpp"
    +
    19
    +
    20namespace msceqf
    +
    21{
    +
    +
    28struct Imu
    +
    29{
    +
    35 const Vector6 w() const { return (Vector6() << ang_, acc_).finished(); }
    +
    36
    +
    +
    42 const Matrix5 W() const
    +
    43 {
    +
    44 Matrix5 W = Matrix5::Zero();
    +
    45 W.block<3, 3>(0, 0) = SO3::wedge(ang_);
    +
    46 W.block<3, 1>(0, 3) = acc_;
    +
    47 return W;
    +
    48 }
    +
    +
    49
    +
    54 friend bool operator<(const Imu& lhs, const Imu& rhs) { return lhs.timestamp_ < rhs.timestamp_; }
    +
    55
    +
    60 friend bool operator<(const Imu& lhs, const fp& timestamp) { return lhs.timestamp_ < timestamp; }
    +
    61 friend bool operator<(const fp& timestamp, const Imu& rhs) { return timestamp < rhs.timestamp_; }
    +
    62
    +
    +
    67 friend std::ostream& operator<<(std::ostream& stream, Imu const& imu)
    +
    68 {
    +
    69 return stream << "(" << imu.timestamp_ << ", " << imu.ang_.transpose() << ", " << imu.acc_.transpose() << ")";
    +
    70 }
    +
    +
    71
    +
    72 Vector3 ang_ = Vector3::Zero();
    +
    73 Vector3 acc_ = Vector3::Zero();
    +
    74 fp timestamp_ = -1;
    +
    75};
    +
    +
    76
    +
    +
    77struct Camera
    +
    78{
    +
    83 friend bool operator<(const Camera& lhs, const Camera& rhs) { return lhs.timestamp_ < rhs.timestamp_; }
    +
    84
    +
    89 friend bool operator<(const Camera& lhs, const fp& timestamp) { return lhs.timestamp_ < timestamp; }
    +
    90 friend bool operator<(const fp& timestamp, const Camera& rhs) { return timestamp < rhs.timestamp_; }
    +
    91
    +
    92 cv::Mat image_;
    +
    93 cv::Mat mask_;
    +
    94 fp timestamp_ = -1;
    +
    95};
    +
    +
    96
    +
    + +
    98{
    +
    +
    103 friend bool operator<(const TriangulatedFeatures& lhs, const TriangulatedFeatures& rhs)
    +
    104 {
    +
    105 return lhs.timestamp_ < rhs.timestamp_;
    +
    106 }
    +
    +
    107
    +
    112 friend bool operator<(const TriangulatedFeatures& lhs, const fp& timestamp) { return lhs.timestamp_ < timestamp; }
    +
    113 friend bool operator<(const fp& timestamp, const TriangulatedFeatures& rhs) { return timestamp < rhs.timestamp_; }
    +
    114
    + +
    116 std::vector<Vector3> points_;
    +
    117 fp timestamp_ = -1;
    +
    118};
    +
    +
    119
    +
    120} // namespace msceqf
    +
    121
    +
    122#endif // INPUT_HPP
    +
    Definition sensor_data.hpp:78
    +
    cv::Mat mask_
    The mask for the given image, 255 in valid reagions, 0 in regions to be masked out.
    Definition sensor_data.hpp:93
    +
    fp timestamp_
    Timestamp of the Camera reading.
    Definition sensor_data.hpp:94
    +
    cv::Mat image_
    The image taken from the camera.
    Definition sensor_data.hpp:92
    +
    friend bool operator<(const Camera &lhs, const Camera &rhs)
    Comparison operator with other camera.
    Definition sensor_data.hpp:83
    +
    friend bool operator<(const Camera &lhs, const fp &timestamp)
    Comparison operator with timestamp.
    Definition sensor_data.hpp:89
    +
    (Cache friendly) Features struct. Define a set of features detected/tracked.
    Definition features.hpp:30
    +
    Struct for one IMU reading. It includes timestamp, angular velocity and linear acceleration....
    Definition sensor_data.hpp:29
    +
    fp timestamp_
    Timestamp of the IMU reading.
    Definition sensor_data.hpp:74
    +
    Vector3 acc_
    Acceleration vector.
    Definition sensor_data.hpp:73
    +
    friend bool operator<(const Imu &lhs, const Imu &rhs)
    Comparison operator with other imu.
    Definition sensor_data.hpp:54
    +
    friend bool operator<(const Imu &lhs, const fp &timestamp)
    Comparison operator with timestamp.
    Definition sensor_data.hpp:60
    +
    const Vector6 w() const
    Get the IMU measurement as a 6 vector (ang, acc)
    Definition sensor_data.hpp:35
    +
    const Matrix5 W() const
    get the IMU measurement as an extended matrix (ang, acc, 0)^ (SE23 lie algebra element)
    Definition sensor_data.hpp:42
    +
    Vector3 ang_
    Angular velocity vector.
    Definition sensor_data.hpp:72
    +
    friend std::ostream & operator<<(std::ostream &stream, Imu const &imu)
    Stream an Imu.
    Definition sensor_data.hpp:67
    +
    Definition sensor_data.hpp:98
    +
    friend bool operator<(const TriangulatedFeatures &lhs, const fp &timestamp)
    Comparison operator with timestamp.
    Definition sensor_data.hpp:112
    +
    fp timestamp_
    Timestamp of the Camera reading.
    Definition sensor_data.hpp:117
    +
    std::vector< Vector3 > points_
    The 3D points corresponding to the features.
    Definition sensor_data.hpp:116
    +
    Features features_
    The features detected in the image.
    Definition sensor_data.hpp:115
    +
    friend bool operator<(const TriangulatedFeatures &lhs, const TriangulatedFeatures &rhs)
    Comparison operator with other imu.
    Definition sensor_data.hpp:103
    +
    +
    + + + + diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/splitbard.png b/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/state_8hpp_source.html b/state_8hpp_source.html new file mode 100644 index 0000000..94ba270 --- /dev/null +++ b/state_8hpp_source.html @@ -0,0 +1,265 @@ + + + + + + + +MSCEqF: include/msceqf/state/state.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    state.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef STATE_HPP
    +
    13#define STATE_HPP
    +
    14
    +
    15#include <map>
    +
    16#include <variant>
    +
    17
    +
    18#include "msceqf/system/system.hpp"
    +
    19#include "msceqf/options/msceqf_options.hpp"
    +
    20#include "msceqf/state/state_elements.hpp"
    +
    21
    +
    22namespace msceqf
    +
    23{
    +
    + +
    30{
    +
    31 public:
    +
    32 using MSCEqFStateKey = std::variant<MSCEqFStateElementName, uint>;
    +
    33 using MSCEqFKey = std::variant<MSCEqFStateKey, fp>;
    +
    34
    +
    35 using MSCEqFStateMap = std::unordered_map<MSCEqFStateKey, MSCEqFStateElementSharedPtr>;
    +
    36 using MSCEqFClonesMap = std::map<fp, MSCEqFStateElementSharedPtr>;
    +
    37
    +
    41 MSCEqFState() = delete;
    +
    42
    + +
    54
    +
    56 MSCEqFState(const MSCEqFState& other);
    +
    57 MSCEqFState(MSCEqFState&& other) noexcept;
    +
    58 MSCEqFState& operator=(const MSCEqFState& other);
    +
    59 MSCEqFState& operator=(MSCEqFState&& other) noexcept;
    + +
    61
    +
    69 [[nodiscard]] const SE23& D() const;
    +
    70
    +
    79 [[nodiscard]] const SE3 B() const;
    +
    80
    +
    89 [[nodiscard]] const SE3 C() const;
    +
    90
    +
    98 [[nodiscard]] const Vector6& delta() const;
    +
    99
    +
    107 [[nodiscard]] const SE3& E() const;
    +
    108
    +
    116 [[nodiscard]] const In& L() const;
    +
    117
    +
    126 [[nodiscard]] const SOT3& Q(const uint& feat_id) const;
    +
    127
    +
    136 [[nodiscard]] const SE3& clone(const fp& timestamp) const;
    +
    137
    +
    144 [[nodiscard]] const uint& index(const MSCEqFKey& key) const;
    +
    145
    +
    152 [[nodiscard]] const uint& dof(const MSCEqFKey& key) const;
    +
    153
    +
    159 [[nodiscard]] inline size_t clonesSize() const { return clones_.size(); }
    +
    160
    +
    167 [[nodiscard]] const fp& cloneTimestampToMarginalize() const;
    +
    168
    +
    174 [[nodiscard]] const MatrixX& cov() const;
    +
    175
    +
    183 [[nodiscard]] const MatrixX covBlock(const MSCEqFKey& key) const;
    +
    184
    +
    193 [[nodiscard]] const MatrixX subCov(const std::vector<MSCEqFKey>& keys) const;
    +
    194
    +
    203 [[nodiscard]] const MatrixX subCovCols(const std::vector<MSCEqFKey>& keys) const;
    +
    204
    +
    210 [[nodiscard]] inline const StateOptions& opts() const { return opts_; }
    +
    211
    +
    221 void initializeStateElement(const MSCEqFStateKey& key, const MatrixX& cov_block);
    +
    222
    +
    229 void stochasticCloning(const fp& timestamp);
    +
    230
    +
    236 void marginalizeCloneAt(const fp& timestamp);
    +
    237
    +
    244 static std::string toString(const MSCEqFStateKey& key);
    +
    245
    +
    256 [[nodiscard]] const MSCEqFState Random() const;
    +
    257
    +
    268 [[nodiscard]] const MSCEqFState operator*(const MSCEqFState& other) const;
    +
    269
    +
    270 private:
    +
    274 void preallocate();
    +
    275
    +
    283 [[nodiscard]] bool insertStateElement(const MSCEqFStateKey& key, MSCEqFStateElementUniquePtr ptr);
    +
    284
    +
    292 [[nodiscard]] bool insertCloneElement(const fp& timestamp, MSCEqFStateElementUniquePtr ptr);
    +
    293
    +
    300 [[nodiscard]] const MSCEqFStateElementSharedPtr& getPtr(const MSCEqFKey& key) const;
    +
    301
    +
    302 friend class Symmetry;
    +
    303 friend class Propagator;
    +
    304 friend class Updater;
    +
    305 friend class ZeroVelocityUpdater;
    +
    306
    +
    307 StateOptions opts_;
    +
    308
    +
    309 MatrixX cov_;
    +
    310 MSCEqFStateMap state_;
    +
    311 MSCEqFClonesMap clones_;
    +
    312};
    +
    +
    313
    +
    314} // namespace msceqf
    +
    315
    +
    316#endif // STATE_HPP
    +
    this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
    Definition state.hpp:30
    +
    const SE3 C() const
    Get a copy of to the SE3 component of the Semi Direct Bias Group element of the MSCEqF state that inc...
    +
    std::variant< MSCEqFStateElementName, uint > MSCEqFStateKey
    Key to access the msceqf state map.
    Definition state.hpp:32
    +
    const MatrixX & cov() const
    Get a reference to the covariance matrix.
    +
    std::unordered_map< MSCEqFStateKey, MSCEqFStateElementSharedPtr > MSCEqFStateMap
    MSCEqF state map.
    Definition state.hpp:35
    +
    const In & L() const
    Get a reference to the In element of the MSCEqF state.
    +
    const SE3 B() const
    Get a copy of the SE3 component of the Semi Direct Bias Group element of the MSCEqF state that includ...
    +
    const MSCEqFState operator*(const MSCEqFState &other) const
    operator* overloading for MSCEqFState. This function will perform the composition this * other for ea...
    +
    const uint & index(const MSCEqFKey &key) const
    Get a reference to the index of the state element or the clone element corresponding to the given key...
    +
    const MSCEqFState Random() const
    Return a random MSCEqF state without changing this. This method *WILL NOT change the actual values of...
    +
    void stochasticCloning(const fp &timestamp)
    Augment the MSCEqF clones map with a new clone of the actual E element of the MSCEqF state....
    +
    const MatrixX subCovCols(const std::vector< MSCEqFKey > &keys) const
    Get a constant copy of the the covariance submatrix (including cross-correlations) constructed with c...
    +
    const SE3 & E() const
    Get a reference to the SE3 element of the MSCEqF state.
    +
    MSCEqFState(const StateOptions &opts, const SystemState &xi0)
    Construct the state of the MSCEqF given the options.
    +
    const StateOptions & opts() const
    Get the state options.
    Definition state.hpp:210
    +
    const uint & dof(const MSCEqFKey &key) const
    Get a reference to the dof of the state element or the clone element corresponding to the given key.
    +
    std::variant< MSCEqFStateKey, fp > MSCEqFKey
    Key to access the msceqf state and clones map.
    Definition state.hpp:33
    +
    const SOT3 & Q(const uint &feat_id) const
    Get a reference to the SOT3 element of the MSCEqF state that correspond to the given feature id.
    +
    const SE23 & D() const
    Get a reference to the SE23 component of the Semi Direct Bias Group element of the MSCEqF state.
    +
    const MatrixX covBlock(const MSCEqFKey &key) const
    get a constant copy of the covariance block relative to the elements (states or clones) corresponding...
    +
    const SE3 & clone(const fp &timestamp) const
    Get a reference to the SE3 element of the MSCEqF clones that correspond to the given timestamp.
    +
    MSCEqFState(const MSCEqFState &other)
    Rule of Five.
    +
    void initializeStateElement(const MSCEqFStateKey &key, const MatrixX &cov_block)
    Initialize MSCEqF state element into the state map, and the relative covariance block.
    +
    const Vector6 & delta() const
    Get a reference to the R6 component of the Semi Direct Bias Group element of the MSCEqF state.
    +
    void marginalizeCloneAt(const fp &timestamp)
    Marginalize out clone at a given timestamp.
    +
    std::map< fp, MSCEqFStateElementSharedPtr > MSCEqFClonesMap
    MSCEqF clones map.
    Definition state.hpp:36
    +
    const fp & cloneTimestampToMarginalize() const
    Get the timestamp of the clone to marginalize. We implement our keyframing strategy here....
    +
    const MatrixX subCov(const std::vector< MSCEqFKey > &keys) const
    Get a constant copy of the the covariance submatrix (including cross-correlations) constructed with c...
    +
    size_t clonesSize() const
    Get the amount of clones.
    Definition state.hpp:159
    +
    static std::string toString(const MSCEqFStateKey &key)
    Get a string describing the given MSCEqFStateKey.
    +
    MSCEqFState()=delete
    Deleted default constructor.
    +
    Definition propagator.hpp:25
    +
    Definition symmetry.hpp:23
    +
    The SystemState class represent the state of the system posed on the Homogenous space.
    Definition system.hpp:29
    +
    Updater class. This class implements the Multi State Constraint update step of the MSCEqF filter.
    Definition updater.hpp:30
    +
    Zero velocity updater class. This class implements the Equivariant Zero Velocity Update (ZVU) of the ...
    Definition zero_velocity_updater.hpp:26
    +
    Definition msceqf_options.hpp:98
    +
    +
    + + + + diff --git a/state__elements_8hpp_source.html b/state__elements_8hpp_source.html new file mode 100644 index 0000000..45b77ed --- /dev/null +++ b/state__elements_8hpp_source.html @@ -0,0 +1,307 @@ + + + + + + + +MSCEqF: include/msceqf/state/state_elements.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    state_elements.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef STATE_ELEMENTS_HPP
    +
    13#define STATE_ELEMENTS_HPP
    +
    14
    +
    15#include <memory>
    +
    16
    +
    17#include "types/fptypes.hpp"
    +
    18
    +
    19namespace msceqf
    +
    20{
    +
    28enum class MSCEqFStateElementName
    +
    29{
    +
    30 Dd,
    +
    31 E,
    +
    32 L,
    +
    33};
    +
    34
    +
    + +
    45{
    +
    46 public:
    +
    47 virtual ~MSCEqFStateElement() = default;
    +
    48
    +
    54 [[nodiscard]] const uint& getIndex() { return idx_; }
    +
    55
    +
    61 [[nodiscard]] const uint& getDof() { return dof_; }
    +
    62
    +
    68 void updateIndex(const uint& new_idx) { idx_ = new_idx; }
    +
    69
    +
    75 virtual void updateRight(const VectorX& delta) = 0;
    +
    76
    +
    82 virtual void updateLeft(const VectorX& delta) = 0;
    +
    83
    +
    89 virtual std::unique_ptr<MSCEqFStateElement> clone() const = 0;
    +
    90
    +
    91 protected:
    + +
    94 MSCEqFStateElement(const MSCEqFStateElement&) = default;
    + +
    96 MSCEqFStateElement& operator=(const MSCEqFStateElement&) = default;
    +
    97 MSCEqFStateElement& operator=(MSCEqFStateElement&&) = default;
    +
    98
    +
    105 MSCEqFStateElement(const uint& idx, const uint& dof) : idx_(idx), dof_(dof){};
    +
    106
    +
    107 uint idx_;
    +
    108 uint dof_;
    +
    109};
    +
    +
    110
    +
    + +
    116{
    +
    121 MSCEqFSDBState() = delete;
    +
    122
    +
    128 MSCEqFSDBState(const uint& idx) : MSCEqFStateElement(idx, 15), Dd_(){};
    +
    129
    +
    135 void updateRight(const VectorX& delta) override { Dd_.multiplyRight(SDB::exp(delta)); }
    +
    136
    +
    142 void updateLeft(const VectorX& delta) override { Dd_.multiplyLeft(SDB::exp(delta)); }
    +
    143
    +
    149 std::unique_ptr<MSCEqFStateElement> clone() const override { return std::make_unique<MSCEqFSDBState>(*this); }
    +
    150
    +
    151 SDB Dd_;
    +
    152};
    +
    +
    153
    +
    + +
    159{
    +
    164 MSCEqFSE3State() = delete;
    +
    165
    +
    171 MSCEqFSE3State(const uint& idx) : MSCEqFStateElement(idx, 6), E_(){};
    +
    172
    +
    178 void updateRight(const VectorX& delta) override { E_.multiplyRight(SE3::exp(delta)); }
    +
    179
    +
    185 void updateLeft(const VectorX& delta) override { E_.multiplyLeft(SE3::exp(delta)); }
    +
    186
    +
    192 std::unique_ptr<MSCEqFStateElement> clone() const override { return std::make_unique<MSCEqFSE3State>(*this); }
    +
    193
    +
    194 SE3 E_;
    +
    195};
    +
    +
    196
    +
    + +
    202{
    +
    207 MSCEqFInState() = delete;
    +
    208
    +
    214 MSCEqFInState(const uint& idx) : MSCEqFStateElement(idx, 4), L_(){};
    +
    215
    +
    221 void updateRight(const VectorX& delta) override { L_.multiplyRight(In::exp(delta)); }
    +
    222
    +
    228 void updateLeft(const VectorX& delta) override { L_.multiplyLeft(In::exp(delta)); }
    +
    229
    +
    235 std::unique_ptr<MSCEqFStateElement> clone() const override { return std::make_unique<MSCEqFInState>(*this); }
    +
    236
    +
    237 In L_;
    +
    238};
    +
    +
    239
    +
    + +
    245{
    +
    250 MSCEqFSOT3State() = delete;
    +
    251
    +
    257 MSCEqFSOT3State(const uint& idx) : MSCEqFStateElement(idx, 4), Q_(){};
    +
    258
    +
    264 void updateRight(const VectorX& delta) override { Q_.multiplyRight(SOT3::exp(delta)); }
    +
    265
    +
    271 void updateLeft(const VectorX& delta) override { Q_.multiplyLeft(SOT3::exp(delta)); }
    +
    272
    +
    278 std::unique_ptr<MSCEqFStateElement> clone() const override { return std::make_unique<MSCEqFSOT3State>(*this); }
    +
    279
    +
    280 SOT3 Q_;
    +
    281};
    +
    +
    282
    +
    283using MSCEqFStateElementSharedPtr = std::shared_ptr<MSCEqFStateElement>;
    +
    284using MSCEqFStateElementUniquePtr = std::unique_ptr<MSCEqFStateElement>;
    +
    285using MSCEqFSDBStateSharedPtr = std::shared_ptr<MSCEqFSDBState>;
    +
    286using MSCEqFSDBStateUniquePtr = std::unique_ptr<MSCEqFSDBState>;
    +
    287using MSCEqFSE3StateSharedPtr = std::shared_ptr<MSCEqFSE3State>;
    +
    288using MSCEqFSE3StateUniquePtr = std::unique_ptr<MSCEqFSE3State>;
    +
    289using MSCEqFInStateSharedPtr = std::shared_ptr<MSCEqFInState>;
    +
    290using MSCEqFInStateUniquePtr = std::unique_ptr<MSCEqFInState>;
    +
    291using MSCEqFSOT3StateSharedPtr = std::shared_ptr<MSCEqFSOT3State>;
    +
    292using MSCEqFSOT3StateUniquePtr = std::unique_ptr<MSCEqFSOT3State>;
    +
    293
    +
    301template <typename T>
    +
    302[[nodiscard]] static MSCEqFStateElementUniquePtr createMSCEqFStateElement(const uint& idx)
    +
    303{
    +
    304 if constexpr (std::is_base_of_v<MSCEqFStateElement, T>)
    +
    305 {
    +
    306 return std::make_unique<T>(idx);
    +
    307 }
    +
    308 else
    +
    309 {
    +
    310 return nullptr;
    +
    311 }
    +
    312}
    +
    313
    +
    314} // namespace msceqf
    +
    315
    +
    316#endif // STATE_ELEMENTS_HPP
    +
    This class represent the base class for a general element of the MSCEqF state. This include the index...
    Definition state_elements.hpp:45
    +
    uint idx_
    Starting index of the element in the residual, and in the covariance.
    Definition state_elements.hpp:107
    +
    virtual std::unique_ptr< MSCEqFStateElement > clone() const =0
    Clone.
    +
    void updateIndex(const uint &new_idx)
    Update index.
    Definition state_elements.hpp:68
    +
    const uint & getIndex()
    Get the starting index of the state element in the residual, and in the covariance.
    Definition state_elements.hpp:54
    +
    virtual void updateRight(const VectorX &delta)=0
    update function to update the value of the state element by right multiplication
    +
    const uint & getDof()
    Get the degrees of freedom of the state element (dimension of relative covariance and residual block)
    Definition state_elements.hpp:61
    +
    MSCEqFStateElement()=delete
    Rule of Five.
    +
    virtual void updateLeft(const VectorX &delta)=0
    update function to update the value of the state element by left multiplication
    +
    uint dof_
    Degrees of freedom of the element (dimension of relative covariance and residual block)
    Definition state_elements.hpp:108
    +
    MSCEqFStateElement(const uint &idx, const uint &dof)
    Construct a MSCEqFStateElement object.
    Definition state_elements.hpp:105
    +
    This struct represent the Intrinsic state of the MSCEqF.
    Definition state_elements.hpp:202
    +
    std::unique_ptr< MSCEqFStateElement > clone() const override
    Clone the Special Intrinsic (In) element of state of the MSCEqF.
    Definition state_elements.hpp:235
    +
    MSCEqFInState(const uint &idx)
    Construct an identity MSCEqFInState object.
    Definition state_elements.hpp:214
    +
    In L_
    The Intrinsic element of the state.
    Definition state_elements.hpp:237
    +
    void updateLeft(const VectorX &delta) override
    Update the Intrinsic element of the state by left multiplication.
    Definition state_elements.hpp:228
    +
    MSCEqFInState()=delete
    Deleted default constructor.
    +
    void updateRight(const VectorX &delta) override
    Update the Intrinsic element of the state by right multiplication.
    Definition state_elements.hpp:221
    +
    This struct represent the Semi Direct bias state of the MSCEqF.
    Definition state_elements.hpp:116
    +
    void updateRight(const VectorX &delta) override
    Update the Semi Direct Bias element of the state by right multiplication.
    Definition state_elements.hpp:135
    +
    MSCEqFSDBState(const uint &idx)
    Construct an identity MSCEqFSDBState object.
    Definition state_elements.hpp:128
    +
    SDB Dd_
    The Semi Direct Bias element of the state.
    Definition state_elements.hpp:151
    +
    void updateLeft(const VectorX &delta) override
    Update the Semi Direct Bias element of the state by left multiplication.
    Definition state_elements.hpp:142
    +
    std::unique_ptr< MSCEqFStateElement > clone() const override
    Clone the Semi Direct bias (SDB) element of state of the MSCEqF.
    Definition state_elements.hpp:149
    +
    MSCEqFSDBState()=delete
    Deleted default constructor.
    +
    This struct represent the Special Euclidean Group of dimension 3 state of the MSCEqF.
    Definition state_elements.hpp:159
    +
    std::unique_ptr< MSCEqFStateElement > clone() const override
    Clone the Special Euclidean Group (SE3) element of state of the MSCEqF.
    Definition state_elements.hpp:192
    +
    MSCEqFSE3State(const uint &idx)
    Construct an identity MSCEqFSE3State object.
    Definition state_elements.hpp:171
    +
    MSCEqFSE3State()=delete
    Deleted default constructor.
    +
    void updateLeft(const VectorX &delta) override
    Update the Special Euclidean Group element of the state by left multiplication.
    Definition state_elements.hpp:185
    +
    SE3 E_
    The Special Euclidean element of the state.
    Definition state_elements.hpp:194
    +
    void updateRight(const VectorX &delta) override
    Update the Special Euclidean Group element of the state by right multiplication.
    Definition state_elements.hpp:178
    +
    This struct represent the Scaled Orthogonal Transforms state of the MSCEqF.
    Definition state_elements.hpp:245
    +
    MSCEqFSOT3State()=delete
    Deleted default constructor.
    +
    MSCEqFSOT3State(const uint &idx)
    Construct an identity MSCEqFSOT3State object.
    Definition state_elements.hpp:257
    +
    void updateLeft(const VectorX &delta) override
    Update the Scaled Orthogonal Transforms element of the state by left multiplication.
    Definition state_elements.hpp:271
    +
    std::unique_ptr< MSCEqFStateElement > clone() const override
    Clone the Scaled Orthogonal Transforms (SOT3) element of state of the MSCEqF.
    Definition state_elements.hpp:278
    +
    void updateRight(const VectorX &delta) override
    Update the Scaled Orthogonal Transforms element of the state by right multiplication.
    Definition state_elements.hpp:264
    +
    SOT3 Q_
    The Scaled Orthogonal Transforms element of the state.
    Definition state_elements.hpp:280
    +
    +
    + + + + diff --git a/static__initializer_8hpp_source.html b/static__initializer_8hpp_source.html new file mode 100644 index 0000000..1bbdb1f --- /dev/null +++ b/static__initializer_8hpp_source.html @@ -0,0 +1,183 @@ + + + + + + + +MSCEqF: include/msceqf/filter/initializer/static_initializer.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    static_initializer.hpp
    +
    +
    +
    1// Copyright (C) 2023 Alessandro Fornasier.
    +
    2// Control of Networked Systems, University of Klagenfurt, Austria.
    +
    3//
    +
    4// All rights reserved.
    +
    5//
    +
    6// This software is licensed under the terms of the BSD-2-Clause-License with
    +
    7// no commercial use allowed, the full terms of which are made available
    +
    8// in the LICENSE file. No license in patents is granted.
    +
    9//
    +
    10// You can contact the authors at <alessandro.fornasier@ieee.org>
    +
    11
    +
    12#ifndef STATIC_INITIALIZER_HPP
    +
    13#define STATIC_INITIALIZER_HPP
    +
    14
    +
    15#include "msceqf/filter/checker/checker.hpp"
    +
    16#include "sensors/sensor_data.hpp"
    +
    17
    +
    18namespace msceqf
    +
    19{
    +
    + +
    21{
    +
    22 public:
    +
    23 using ImuBuffer = std::deque<Imu>;
    +
    24
    +
    31 StaticInitializer(const InitializerOptions& opts, const Checker& checker);
    +
    32
    +
    38 void insertImu(const Imu& imu);
    +
    39
    +
    47 [[nodiscard]] bool detectMotion(const Tracks& tracks);
    +
    48
    +
    55 [[nodiscard]] bool initializeOrigin();
    +
    56
    +
    62 [[nodiscard]] const SE23& T0() const;
    +
    63
    +
    69 [[nodiscard]] const Vector6& b0() const;
    +
    70
    +
    71 private:
    +
    79 [[nodiscard]] bool detectAccelerationSpike();
    +
    80
    +
    92 [[nodiscard]] bool imuMeanStd(Vector3& acc_mean, Vector3& ang_mean, fp& acc_std) const;
    +
    93
    +
    101 void computeOrigin(Vector3& acc_mean, Vector3& ang_mean);
    +
    102
    +
    103 InitializerOptions opts_;
    +
    104
    +
    105 const Checker& checker_; // The MSCEqF checker
    +
    106
    +
    107 ImuBuffer imu_buffer_;
    +
    108
    +
    109 SE23 T0_;
    +
    110 Vector6 b0_;
    +
    111};
    +
    +
    112
    +
    113} // namespace msceqf
    +
    114
    +
    115#endif // STATIC_INITIALIZER_HPP
    +
    Simple class to perform various checks.
    Definition checker.hpp:27
    +
    Definition static_initializer.hpp:21
    +
    bool initializeOrigin()
    This fnctions collects a predefined window of IMU measurments and compute the roll and pitch fo the p...
    +
    const Vector6 & b0() const
    This function returns the initial IMU bias, to be used as origin.
    +
    const SE23 & T0() const
    This function returns the initial Extended pose of the platform, to be used as origin.
    +
    bool detectMotion(const Tracks &tracks)
    This function detects if the platform is moving based on acceleration measurements and image disparit...
    +
    StaticInitializer(const InitializerOptions &opts, const Checker &checker)
    StaticInitializer constructor.
    +
    std::deque< Imu > ImuBuffer
    The Imu measurement buffer.
    Definition static_initializer.hpp:23
    +
    void insertImu(const Imu &imu)
    Populate imu internal buffer used for acceleration check.
    +
    Struct for one IMU reading. It includes timestamp, angular velocity and linear acceleration....
    Definition sensor_data.hpp:29
    +
    Definition msceqf_options.hpp:143
    +
    +
    + + + + diff --git a/structmsceqf_1_1_bias_state-members.html b/structmsceqf_1_1_bias_state-members.html new file mode 100644 index 0000000..6eb3819 --- /dev/null +++ b/structmsceqf_1_1_bias_state-members.html @@ -0,0 +1,126 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    msceqf::BiasState Member List
    +
    +
    + +

    This is the complete list of members for msceqf::BiasState, including all inherited members.

    + + + + + + + + + + + +
    b_msceqf::BiasState
    BiasState() (defined in msceqf::BiasState)msceqf::BiasStateinline
    BiasState(const Vector6 &b) (defined in msceqf::BiasState)msceqf::BiasStateinline
    clone() const overridemsceqf::BiasStateinlinevirtual
    operator=(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
    operator=(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
    SystemStateElement()=defaultmsceqf::SystemStateElementprotected
    SystemStateElement(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
    SystemStateElement(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
    ~SystemStateElement()=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementvirtual
    +
    + + + + diff --git a/structmsceqf_1_1_bias_state.html b/structmsceqf_1_1_bias_state.html new file mode 100644 index 0000000..5568f07 --- /dev/null +++ b/structmsceqf_1_1_bias_state.html @@ -0,0 +1,217 @@ + + + + + + + +MSCEqF: msceqf::BiasState Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    MSCEqF 1.0 +
    +
    Multi State Constraint Equivariant Filter for visual inertial navigation
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    msceqf::BiasState Struct Referencefinal
    +
    +
    + +

    This struct represent the IMU bias state of the system. + More...

    + +

    #include <system_elements.hpp>

    +
    +Inheritance diagram for msceqf::BiasState:
    +
    +
    Inheritance graph
    + + + + + +
    [legend]
    +
    +Collaboration diagram for msceqf::BiasState:
    +
    +
    Collaboration graph
    + + + + + +
    [legend]
    + + + + + + + + +

    +Public Member Functions

    BiasState (const Vector6 &b)
     
    std::unique_ptr< SystemStateElementclone () const override
     Clone the bias state element of the system.
     
    - Public Member Functions inherited from msceqf::SystemStateElement
    + + + + +

    +Public Attributes

    +Vector6 b_
     The Inertial Measurement Unit (IMU) biases (bw, ba)
     
    + + + + + + + + + + + + + +

    +Additional Inherited Members

    - Protected Member Functions inherited from msceqf::SystemStateElement
    SystemStateElement ()=default
     Rule of Five.
     
    SystemStateElement (const SystemStateElement &)=default
     
    SystemStateElement (SystemStateElement &&)=default
     
    +SystemStateElementoperator= (const SystemStateElement &)=default
     
    +SystemStateElementoperator= (SystemStateElement &&)=default
     
    +

    Detailed Description

    +

    This struct represent the IMU bias state of the system.

    +

    Member Function Documentation

    + +

    ◆ clone()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::unique_ptr< SystemStateElement > msceqf::BiasState::clone () const
    +
    +inlineoverridevirtual
    +
    + +

    Clone the bias state element of the system.

    +
    Returns
    Clone of the bias state element
    + +

    Implements msceqf::SystemStateElement.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structmsceqf_1_1_bias_state.js b/structmsceqf_1_1_bias_state.js new file mode 100644 index 0000000..7f10790 --- /dev/null +++ b/structmsceqf_1_1_bias_state.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_bias_state = +[ + [ "clone", "structmsceqf_1_1_bias_state.html#aef8a73120661539e79a72ac3778bef24", null ], + [ "b_", "structmsceqf_1_1_bias_state.html#a4d343a459e30978111c7875f8bb3f6ff", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_bias_state__coll__graph.map b/structmsceqf_1_1_bias_state__coll__graph.map new file mode 100644 index 0000000..6701638 --- /dev/null +++ b/structmsceqf_1_1_bias_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_bias_state__coll__graph.md5 b/structmsceqf_1_1_bias_state__coll__graph.md5 new file mode 100644 index 0000000..0d22f11 --- /dev/null +++ b/structmsceqf_1_1_bias_state__coll__graph.md5 @@ -0,0 +1 @@ +18433b44a17aaaeb3e7b4304dd3b521b \ No newline at end of file diff --git a/structmsceqf_1_1_bias_state__coll__graph.png b/structmsceqf_1_1_bias_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..acdf304cf1e1c37058a9588f8137b0a80d8ca81a GIT binary patch literal 5157 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 Y8>2D3SRpqB&;1~U7b>!)(#8S*0VPQVHvj+t literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_bias_state__inherit__graph.map b/structmsceqf_1_1_bias_state__inherit__graph.map new file mode 100644 index 0000000..6701638 --- /dev/null +++ b/structmsceqf_1_1_bias_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_bias_state__inherit__graph.md5 b/structmsceqf_1_1_bias_state__inherit__graph.md5 new file mode 100644 index 0000000..0d22f11 --- /dev/null +++ b/structmsceqf_1_1_bias_state__inherit__graph.md5 @@ -0,0 +1 @@ +18433b44a17aaaeb3e7b4304dd3b521b \ No newline at end of file diff --git a/structmsceqf_1_1_bias_state__inherit__graph.png b/structmsceqf_1_1_bias_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..acdf304cf1e1c37058a9588f8137b0a80d8ca81a GIT binary patch literal 5157 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 Y8>2D3SRpqB&;1~U7b>!)(#8S*0VPQVHvj+t literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_camera-members.html b/structmsceqf_1_1_camera-members.html new file mode 100644 index 0000000..4472b16 --- /dev/null +++ b/structmsceqf_1_1_camera-members.html @@ -0,0 +1,122 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::Camera Member List
        +
        +
        + +

        This is the complete list of members for msceqf::Camera, including all inherited members.

        + + + + + + + +
        image_msceqf::Camera
        mask_msceqf::Camera
        operator<(const Camera &lhs, const Camera &rhs)msceqf::Camerafriend
        operator<(const Camera &lhs, const fp &timestamp)msceqf::Camerafriend
        operator< (defined in msceqf::Camera)msceqf::Camerafriend
        timestamp_msceqf::Camera
        +
        + + + + diff --git a/structmsceqf_1_1_camera.html b/structmsceqf_1_1_camera.html new file mode 100644 index 0000000..a944cb5 --- /dev/null +++ b/structmsceqf_1_1_camera.html @@ -0,0 +1,151 @@ + + + + + + + +MSCEqF: msceqf::Camera Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::Camera Struct Reference
        +
        +
        + + + + + + + + + + + +

        +Public Attributes

        +cv::Mat image_
         The image taken from the camera.
         
        +cv::Mat mask_
         The mask for the given image, 255 in valid reagions, 0 in regions to be masked out.
         
        +fp timestamp_ = -1
         Timestamp of the Camera reading.
         
        + + + + + + + + + +

        +Friends

        +bool operator< (const Camera &lhs, const Camera &rhs)
         Comparison operator with other camera.
         
        +bool operator< (const Camera &lhs, const fp &timestamp)
         Comparison operator with timestamp.
         
        +bool operator< (const fp &timestamp, const Camera &rhs)
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_camera.js b/structmsceqf_1_1_camera.js new file mode 100644 index 0000000..ad1a0c5 --- /dev/null +++ b/structmsceqf_1_1_camera.js @@ -0,0 +1,8 @@ +var structmsceqf_1_1_camera = +[ + [ "operator<", "structmsceqf_1_1_camera.html#ad7ccf94075a0ec098e03c90d78019485", null ], + [ "operator<", "structmsceqf_1_1_camera.html#addebf47a948140644806152e1b3c9e76", null ], + [ "image_", "structmsceqf_1_1_camera.html#a9c42d17258738934a794ec81456ae37d", null ], + [ "mask_", "structmsceqf_1_1_camera.html#a241156d766d8dfc8d187508dc4d02130", null ], + [ "timestamp_", "structmsceqf_1_1_camera.html#a90f9e8c1c1768342735573b808f375c3", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_camera_extrinsic_state-members.html b/structmsceqf_1_1_camera_extrinsic_state-members.html new file mode 100644 index 0000000..869e5c1 --- /dev/null +++ b/structmsceqf_1_1_camera_extrinsic_state-members.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::CameraExtrinsicState Member List
        +
        +
        + +

        This is the complete list of members for msceqf::CameraExtrinsicState, including all inherited members.

        + + + + + + + + + + + + + + +
        CameraExtrinsicState() (defined in msceqf::CameraExtrinsicState)msceqf::CameraExtrinsicStateinline
        CameraExtrinsicState(const Quaternion &q, const Vector3 &t) (defined in msceqf::CameraExtrinsicState)msceqf::CameraExtrinsicStateinline
        CameraExtrinsicState(const Matrix3 &R, const Vector3 &t) (defined in msceqf::CameraExtrinsicState)msceqf::CameraExtrinsicStateinline
        CameraExtrinsicState(const Matrix4 &S) (defined in msceqf::CameraExtrinsicState)msceqf::CameraExtrinsicStateinline
        CameraExtrinsicState(const SE3 &S) (defined in msceqf::CameraExtrinsicState)msceqf::CameraExtrinsicStateinline
        clone() const overridemsceqf::CameraExtrinsicStateinlinevirtual
        operator=(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        operator=(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        S_msceqf::CameraExtrinsicState
        SystemStateElement()=defaultmsceqf::SystemStateElementprotected
        SystemStateElement(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        SystemStateElement(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        ~SystemStateElement()=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_camera_extrinsic_state.html b/structmsceqf_1_1_camera_extrinsic_state.html new file mode 100644 index 0000000..5bc583a --- /dev/null +++ b/structmsceqf_1_1_camera_extrinsic_state.html @@ -0,0 +1,226 @@ + + + + + + + +MSCEqF: msceqf::CameraExtrinsicState Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::CameraExtrinsicState Struct Referencefinal
        +
        +
        + +

        This struct represent the camera extrinsics state of the system. + More...

        + +

        #include <system_elements.hpp>

        +
        +Inheritance diagram for msceqf::CameraExtrinsicState:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::CameraExtrinsicState:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + +

        +Public Member Functions

        CameraExtrinsicState (const Quaternion &q, const Vector3 &t)
         
        CameraExtrinsicState (const Matrix3 &R, const Vector3 &t)
         
        CameraExtrinsicState (const Matrix4 &S)
         
        CameraExtrinsicState (const SE3 &S)
         
        std::unique_ptr< SystemStateElementclone () const override
         Clone the camera extrinsics state element of the system.
         
        - Public Member Functions inherited from msceqf::SystemStateElement
        + + + + +

        +Public Attributes

        +SE3 S_
         The camera extrinsics calibration (SR, St)
         
        + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::SystemStateElement
        SystemStateElement ()=default
         Rule of Five.
         
        SystemStateElement (const SystemStateElement &)=default
         
        SystemStateElement (SystemStateElement &&)=default
         
        +SystemStateElementoperator= (const SystemStateElement &)=default
         
        +SystemStateElementoperator= (SystemStateElement &&)=default
         
        +

        Detailed Description

        +

        This struct represent the camera extrinsics state of the system.

        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< SystemStateElement > msceqf::CameraExtrinsicState::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the camera extrinsics state element of the system.

        +
        Returns
        Clone of the camera extrinsics state element
        + +

        Implements msceqf::SystemStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_camera_extrinsic_state.js b/structmsceqf_1_1_camera_extrinsic_state.js new file mode 100644 index 0000000..ed44aed --- /dev/null +++ b/structmsceqf_1_1_camera_extrinsic_state.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_camera_extrinsic_state = +[ + [ "clone", "structmsceqf_1_1_camera_extrinsic_state.html#ad625489db42b5727fbc7673307df8693", null ], + [ "S_", "structmsceqf_1_1_camera_extrinsic_state.html#a8ce1fcc6761d9b48947283362cdeff6d", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_camera_extrinsic_state__coll__graph.map b/structmsceqf_1_1_camera_extrinsic_state__coll__graph.map new file mode 100644 index 0000000..7f8e313 --- /dev/null +++ b/structmsceqf_1_1_camera_extrinsic_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_camera_extrinsic_state__coll__graph.md5 b/structmsceqf_1_1_camera_extrinsic_state__coll__graph.md5 new file mode 100644 index 0000000..4cb1b38 --- /dev/null +++ b/structmsceqf_1_1_camera_extrinsic_state__coll__graph.md5 @@ -0,0 +1 @@ +d3e5739e9ca47299ab579a099ab781f9 \ No newline at end of file diff --git a/structmsceqf_1_1_camera_extrinsic_state__coll__graph.png b/structmsceqf_1_1_camera_extrinsic_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..52ea99ac3570aceef1f05127c9da9e3594c41bf4 GIT binary patch literal 5692 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 K@XCi~Z~qUDb>lt& literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.map b/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.map new file mode 100644 index 0000000..7f8e313 --- /dev/null +++ b/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.md5 b/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.md5 new file mode 100644 index 0000000..4cb1b38 --- /dev/null +++ b/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.md5 @@ -0,0 +1 @@ +d3e5739e9ca47299ab579a099ab781f9 \ No newline at end of file diff --git a/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.png b/structmsceqf_1_1_camera_extrinsic_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..52ea99ac3570aceef1f05127c9da9e3594c41bf4 GIT binary patch literal 5692 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 K@XCi~Z~qUDb>lt& literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_camera_intrinsic_state-members.html b/structmsceqf_1_1_camera_intrinsic_state-members.html new file mode 100644 index 0000000..d602716 --- /dev/null +++ b/structmsceqf_1_1_camera_intrinsic_state-members.html @@ -0,0 +1,129 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::CameraIntrinsicState Member List
        +
        +
        + +

        This is the complete list of members for msceqf::CameraIntrinsicState, including all inherited members.

        + + + + + + + + + + + + + + +
        CameraIntrinsicState() (defined in msceqf::CameraIntrinsicState)msceqf::CameraIntrinsicStateinline
        CameraIntrinsicState(const fp &fx, const fp &fy, const fp &cx, const fp &cy) (defined in msceqf::CameraIntrinsicState)msceqf::CameraIntrinsicStateinline
        CameraIntrinsicState(const Vector4 &intr) (defined in msceqf::CameraIntrinsicState)msceqf::CameraIntrinsicStateinline
        CameraIntrinsicState(const Matrix3 &K) (defined in msceqf::CameraIntrinsicState)msceqf::CameraIntrinsicStateinline
        CameraIntrinsicState(const In &K) (defined in msceqf::CameraIntrinsicState)msceqf::CameraIntrinsicStateinline
        clone() const overridemsceqf::CameraIntrinsicStateinlinevirtual
        K_msceqf::CameraIntrinsicState
        operator=(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        operator=(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        SystemStateElement()=defaultmsceqf::SystemStateElementprotected
        SystemStateElement(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        SystemStateElement(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        ~SystemStateElement()=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_camera_intrinsic_state.html b/structmsceqf_1_1_camera_intrinsic_state.html new file mode 100644 index 0000000..3dd2269 --- /dev/null +++ b/structmsceqf_1_1_camera_intrinsic_state.html @@ -0,0 +1,226 @@ + + + + + + + +MSCEqF: msceqf::CameraIntrinsicState Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::CameraIntrinsicState Struct Referencefinal
        +
        +
        + +

        This struct represent the camera intrinsics state of the system. + More...

        + +

        #include <system_elements.hpp>

        +
        +Inheritance diagram for msceqf::CameraIntrinsicState:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::CameraIntrinsicState:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + +

        +Public Member Functions

        CameraIntrinsicState (const fp &fx, const fp &fy, const fp &cx, const fp &cy)
         
        CameraIntrinsicState (const Vector4 &intr)
         
        CameraIntrinsicState (const Matrix3 &K)
         
        CameraIntrinsicState (const In &K)
         
        std::unique_ptr< SystemStateElementclone () const override
         Clone the camera instirnsic state element of the system.
         
        - Public Member Functions inherited from msceqf::SystemStateElement
        + + + + +

        +Public Attributes

        +In K_
         The camera intrinsics calibration (K)
         
        + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::SystemStateElement
        SystemStateElement ()=default
         Rule of Five.
         
        SystemStateElement (const SystemStateElement &)=default
         
        SystemStateElement (SystemStateElement &&)=default
         
        +SystemStateElementoperator= (const SystemStateElement &)=default
         
        +SystemStateElementoperator= (SystemStateElement &&)=default
         
        +

        Detailed Description

        +

        This struct represent the camera intrinsics state of the system.

        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< SystemStateElement > msceqf::CameraIntrinsicState::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the camera instirnsic state element of the system.

        +
        Returns
        Clone of the camera instirnsic state element
        + +

        Implements msceqf::SystemStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_camera_intrinsic_state.js b/structmsceqf_1_1_camera_intrinsic_state.js new file mode 100644 index 0000000..42a2047 --- /dev/null +++ b/structmsceqf_1_1_camera_intrinsic_state.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_camera_intrinsic_state = +[ + [ "clone", "structmsceqf_1_1_camera_intrinsic_state.html#ae67dc5c98714c1db2dd5a7b4306e43d9", null ], + [ "K_", "structmsceqf_1_1_camera_intrinsic_state.html#af6b53256d2e9370108b110b6f50b6305", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_camera_intrinsic_state__coll__graph.map b/structmsceqf_1_1_camera_intrinsic_state__coll__graph.map new file mode 100644 index 0000000..6927be9 --- /dev/null +++ b/structmsceqf_1_1_camera_intrinsic_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_camera_intrinsic_state__coll__graph.md5 b/structmsceqf_1_1_camera_intrinsic_state__coll__graph.md5 new file mode 100644 index 0000000..a413875 --- /dev/null +++ b/structmsceqf_1_1_camera_intrinsic_state__coll__graph.md5 @@ -0,0 +1 @@ +99af4b8e4471ea59b186be9e2a4675de \ No newline at end of file diff --git a/structmsceqf_1_1_camera_intrinsic_state__coll__graph.png b/structmsceqf_1_1_camera_intrinsic_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eedca0a0fcfab5f84fb373be311261af14630e0f GIT binary patch literal 5460 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.map b/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.map new file mode 100644 index 0000000..6927be9 --- /dev/null +++ b/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.md5 b/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.md5 new file mode 100644 index 0000000..a413875 --- /dev/null +++ b/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.md5 @@ -0,0 +1 @@ +99af4b8e4471ea59b186be9e2a4675de \ No newline at end of file diff --git a/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.png b/structmsceqf_1_1_camera_intrinsic_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..eedca0a0fcfab5f84fb373be311261af14630e0f GIT binary patch literal 5460 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_camera_options-members.html b/structmsceqf_1_1_camera_options-members.html new file mode 100644 index 0000000..45ef700 --- /dev/null +++ b/structmsceqf_1_1_camera_options-members.html @@ -0,0 +1,121 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::CameraOptions Member List
        +
        + +
        + + + + diff --git a/structmsceqf_1_1_camera_options.html b/structmsceqf_1_1_camera_options.html new file mode 100644 index 0000000..8e44387 --- /dev/null +++ b/structmsceqf_1_1_camera_options.html @@ -0,0 +1,144 @@ + + + + + + + +MSCEqF: msceqf::CameraOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::CameraOptions Struct Reference
        +
        +
        + + + + + + + + + + + + + + + + + +

        +Public Attributes

        +VectorX distortion_coefficients_
         Distortion coefficients.
         
        +Vector2 resolution_
         Width, Height.
         
        +fp timeshift_cam_imu_
         The time shift between camera and imu (t_imu = t_cam + shift)
         
        +cv::Mat static_mask_
         The static image mask.
         
        +MaskType mask_type_
         The mask type.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_camera_options.js b/structmsceqf_1_1_camera_options.js new file mode 100644 index 0000000..c07fe9e --- /dev/null +++ b/structmsceqf_1_1_camera_options.js @@ -0,0 +1,8 @@ +var structmsceqf_1_1_camera_options = +[ + [ "distortion_coefficients_", "structmsceqf_1_1_camera_options.html#a824c7e14a954432b3a88f20c4a232e87", null ], + [ "mask_type_", "structmsceqf_1_1_camera_options.html#ab7f12a8380cdc751c11ab1f241b5e5f4", null ], + [ "resolution_", "structmsceqf_1_1_camera_options.html#a95b5f534cb0fd7bb974aecc891c494e4", null ], + [ "static_mask_", "structmsceqf_1_1_camera_options.html#a76ca9bba5e63f809621c07207584c01f", null ], + [ "timeshift_cam_imu_", "structmsceqf_1_1_camera_options.html#a714e564848487561d2789e51a8f2522d", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_checker_options-members.html b/structmsceqf_1_1_checker_options-members.html new file mode 100644 index 0000000..9ee81cc --- /dev/null +++ b/structmsceqf_1_1_checker_options-members.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::CheckerOptions Member List
        +
        +
        + +

        This is the complete list of members for msceqf::CheckerOptions, including all inherited members.

        + + + +
        disparity_threshold_msceqf::CheckerOptions
        disparity_window_msceqf::CheckerOptions
        +
        + + + + diff --git a/structmsceqf_1_1_checker_options.html b/structmsceqf_1_1_checker_options.html new file mode 100644 index 0000000..27a5a0b --- /dev/null +++ b/structmsceqf_1_1_checker_options.html @@ -0,0 +1,132 @@ + + + + + + + +MSCEqF: msceqf::CheckerOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::CheckerOptions Struct Reference
        +
        +
        + + + + + + + + +

        +Public Attributes

        +fp disparity_threshold_
         the disparity threshold for the disparity check
         
        +fp disparity_window_
         The window is seconds used to check disparity.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_checker_options.js b/structmsceqf_1_1_checker_options.js new file mode 100644 index 0000000..7ec0812 --- /dev/null +++ b/structmsceqf_1_1_checker_options.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_checker_options = +[ + [ "disparity_threshold_", "structmsceqf_1_1_checker_options.html#af3d4bcc36823c0cd80d5d8ff81f3336d", null ], + [ "disparity_window_", "structmsceqf_1_1_checker_options.html#a04fe4e24079d810781cf1c5081e88233", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_equidistant_camera-members.html b/structmsceqf_1_1_equidistant_camera-members.html new file mode 100644 index 0000000..d877d80 --- /dev/null +++ b/structmsceqf_1_1_equidistant_camera-members.html @@ -0,0 +1,142 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::EquidistantCamera Member List
        +
        +
        + +

        This is the complete list of members for msceqf::EquidistantCamera, including all inherited members.

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        denormalize(std::vector< Eigen::Vector2f > &uv)msceqf::PinholeCamera
        denormalize(std::vector< cv::Point2f > &uv)msceqf::PinholeCamera
        denormalize(Eigen::Vector2f &uv)msceqf::PinholeCamera
        denormalize(cv::Point2f &uv)msceqf::PinholeCamera
        distortion_coefficients_msceqf::PinholeCameraprotected
        distortionCoefficients() constmsceqf::PinholeCamera
        EquidistantCamera(const CameraOptions &opts, const Vector4 &intrinsics) (defined in msceqf::EquidistantCamera)msceqf::EquidistantCamera
        height_msceqf::PinholeCameraprotected
        intrinsics() constmsceqf::PinholeCamera
        intrinsics_msceqf::PinholeCameraprotected
        normalize(std::vector< Eigen::Vector2f > &uv)msceqf::PinholeCamera
        normalize(std::vector< cv::Point2f > &uv)msceqf::PinholeCamera
        normalize(Eigen::Vector2f &uv)msceqf::PinholeCamera
        normalize(cv::Point2f &uv)msceqf::PinholeCamera
        operator=(const PinholeCamera &)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        operator=(PinholeCamera &&)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        PinholeCamera(const VectorX &distortion_coefficients, const Vector4 instrinsics, const uint &width, const uint &height) (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        PinholeCamera()=deletemsceqf::PinholeCameraprotected
        PinholeCamera(const PinholeCamera &)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        PinholeCamera(PinholeCamera &&)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        setIntrinsics(const Vector4 &intrinsics)msceqf::PinholeCamera
        undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize) overridemsceqf::EquidistantCameravirtual
        msceqf::PinholeCamera::undistort(std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)msceqf::PinholeCamera
        undistortImage(const cv::Mat &image, cv::Mat &image_undistorted) overridemsceqf::EquidistantCameravirtual
        width_msceqf::PinholeCameraprotected
        ~PinholeCamera()=default (defined in msceqf::PinholeCamera)msceqf::PinholeCameravirtual
        +
        + + + + diff --git a/structmsceqf_1_1_equidistant_camera.html b/structmsceqf_1_1_equidistant_camera.html new file mode 100644 index 0000000..1bd4e48 --- /dev/null +++ b/structmsceqf_1_1_equidistant_camera.html @@ -0,0 +1,311 @@ + + + + + + + +MSCEqF: msceqf::EquidistantCamera Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::EquidistantCamera Struct Referencefinal
        +
        +
        +
        +Inheritance diagram for msceqf::EquidistantCamera:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::EquidistantCamera:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        EquidistantCamera (const CameraOptions &opts, const Vector4 &intrinsics)
         
        void undistort (std::vector< cv::Point2f > &uv_cv, const bool &normalize) override
         Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)
         
        void undistortImage (const cv::Mat &image, cv::Mat &image_undistorted) override
         Undistort given image in openCV format (cv::Mat)
         
        - Public Member Functions inherited from msceqf::PinholeCamera
        void undistort (std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)
         Undistort given distorted point in Eigen format (std::vector<Eigen::Vector2f>)
         
        void normalize (std::vector< Eigen::Vector2f > &uv)
         Normalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
         
        void normalize (std::vector< cv::Point2f > &uv)
         Normalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
         
        void normalize (Eigen::Vector2f &uv)
         Normalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
         
        void normalize (cv::Point2f &uv)
         Normalize multiple features uv coordinates in OpenCV format (cv::Point2f)
         
        void denormalize (std::vector< Eigen::Vector2f > &uv)
         Denormalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
         
        void denormalize (std::vector< cv::Point2f > &uv)
         Denormalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
         
        void denormalize (Eigen::Vector2f &uv)
         Denormalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
         
        void denormalize (cv::Point2f &uv)
         Denormalize multiple features uv coordinates in OpenCV format (cv::Point2f)
         
        void setIntrinsics (const Vector4 &intrinsics)
         Set the value of the intrinsic parameters.
         
        const Vector4 & intrinsics () const
         Get camera intrinsics parameter (fx, fy, cx, cy) as a 4 vector.
         
        const VectorX & distortionCoefficients () const
         Get camera distortion coefficients (k1, k2, p1, p2, ...) as a vector.
         
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::PinholeCamera
        PinholeCamera (const VectorX &distortion_coefficients, const Vector4 instrinsics, const uint &width, const uint &height)
         
        PinholeCamera ()=delete
         Rule of Five.
         
        PinholeCamera (const PinholeCamera &)=delete
         
        PinholeCamera (PinholeCamera &&)=delete
         
        +PinholeCameraoperator= (const PinholeCamera &)=delete
         
        +PinholeCameraoperator= (PinholeCamera &&)=delete
         
        - Protected Attributes inherited from msceqf::PinholeCamera
        +VectorX distortion_coefficients_
         Vector of distortion coefficients (k1, k2, p1, p2, ...)
         
        +Vector4 intrinsics_
         Vector of intrinsic paramater (fx, fy, cx, cy)
         
        +uint width_
         Image width.
         
        +uint height_
         Image height.
         
        +

        Member Function Documentation

        + +

        ◆ undistort()

        + +
        +
        + + + + + +
        + + + + + + + + + + + +
        void msceqf::EquidistantCamera::undistort (std::vector< cv::Point2f > & uv_cv,
        const bool & normalize )
        +
        +overridevirtual
        +
        + +

        Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)

        +
        Parameters
        + + + +
        uv_cvuv coordinates
        normalizeFlag to decide wether normalize coordinates or not
        +
        +
        + +

        Implements msceqf::PinholeCamera.

        + +
        +
        + +

        ◆ undistortImage()

        + +
        +
        + + + + + +
        + + + + + + + + + + + +
        void msceqf::EquidistantCamera::undistortImage (const cv::Mat & image,
        cv::Mat & image_undistorted )
        +
        +overridevirtual
        +
        + +

        Undistort given image in openCV format (cv::Mat)

        +
        Parameters
        + + + +
        imageImage to be undistorted
        image_undistortedUndistorted image
        +
        +
        + +

        Implements msceqf::PinholeCamera.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_equidistant_camera.js b/structmsceqf_1_1_equidistant_camera.js new file mode 100644 index 0000000..bd6df4a --- /dev/null +++ b/structmsceqf_1_1_equidistant_camera.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_equidistant_camera = +[ + [ "undistort", "structmsceqf_1_1_equidistant_camera.html#a819c5607c1f0913c6e6bb77c5de43b3f", null ], + [ "undistortImage", "structmsceqf_1_1_equidistant_camera.html#a3515afec6d02105114599ba93a7d6862", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_equidistant_camera__coll__graph.map b/structmsceqf_1_1_equidistant_camera__coll__graph.map new file mode 100644 index 0000000..6e42c85 --- /dev/null +++ b/structmsceqf_1_1_equidistant_camera__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_equidistant_camera__coll__graph.md5 b/structmsceqf_1_1_equidistant_camera__coll__graph.md5 new file mode 100644 index 0000000..cad86a4 --- /dev/null +++ b/structmsceqf_1_1_equidistant_camera__coll__graph.md5 @@ -0,0 +1 @@ +723732692512030af9ae637a7bd2e276 \ No newline at end of file diff --git a/structmsceqf_1_1_equidistant_camera__coll__graph.png b/structmsceqf_1_1_equidistant_camera__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ac13321bc0c1733a56632c0345a661fbb7b934a9 GIT binary patch literal 5250 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 M1r7Pq=N3W#20%n`KmY&$ literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_equidistant_camera__inherit__graph.map b/structmsceqf_1_1_equidistant_camera__inherit__graph.map new file mode 100644 index 0000000..6e42c85 --- /dev/null +++ b/structmsceqf_1_1_equidistant_camera__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_equidistant_camera__inherit__graph.md5 b/structmsceqf_1_1_equidistant_camera__inherit__graph.md5 new file mode 100644 index 0000000..cad86a4 --- /dev/null +++ b/structmsceqf_1_1_equidistant_camera__inherit__graph.md5 @@ -0,0 +1 @@ +723732692512030af9ae637a7bd2e276 \ No newline at end of file diff --git a/structmsceqf_1_1_equidistant_camera__inherit__graph.png b/structmsceqf_1_1_equidistant_camera__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ac13321bc0c1733a56632c0345a661fbb7b934a9 GIT binary patch literal 5250 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 M1r7Pq=N3W#20%n`KmY&$ literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_extended_pose_state-members.html b/structmsceqf_1_1_extended_pose_state-members.html new file mode 100644 index 0000000..6e2b18c --- /dev/null +++ b/structmsceqf_1_1_extended_pose_state-members.html @@ -0,0 +1,126 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::ExtendedPoseState Member List
        +
        +
        + +

        This is the complete list of members for msceqf::ExtendedPoseState, including all inherited members.

        + + + + + + + + + + + +
        clone() const overridemsceqf::ExtendedPoseStateinlinevirtual
        ExtendedPoseState() (defined in msceqf::ExtendedPoseState)msceqf::ExtendedPoseStateinline
        ExtendedPoseState(const SE23 &T) (defined in msceqf::ExtendedPoseState)msceqf::ExtendedPoseStateinline
        operator=(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        operator=(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        SystemStateElement()=defaultmsceqf::SystemStateElementprotected
        SystemStateElement(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        SystemStateElement(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        T_msceqf::ExtendedPoseState
        ~SystemStateElement()=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_extended_pose_state.html b/structmsceqf_1_1_extended_pose_state.html new file mode 100644 index 0000000..508d1d1 --- /dev/null +++ b/structmsceqf_1_1_extended_pose_state.html @@ -0,0 +1,217 @@ + + + + + + + +MSCEqF: msceqf::ExtendedPoseState Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::ExtendedPoseState Struct Referencefinal
        +
        +
        + +

        This struct represent the extended pose state of the system. + More...

        + +

        #include <system_elements.hpp>

        +
        +Inheritance diagram for msceqf::ExtendedPoseState:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::ExtendedPoseState:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + +

        +Public Member Functions

        ExtendedPoseState (const SE23 &T)
         
        std::unique_ptr< SystemStateElementclone () const override
         Clone the extended pose state element of the system.
         
        - Public Member Functions inherited from msceqf::SystemStateElement
        + + + + +

        +Public Attributes

        +SE23 T_
         The extended pose of the system (R, v, p)
         
        + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::SystemStateElement
        SystemStateElement ()=default
         Rule of Five.
         
        SystemStateElement (const SystemStateElement &)=default
         
        SystemStateElement (SystemStateElement &&)=default
         
        +SystemStateElementoperator= (const SystemStateElement &)=default
         
        +SystemStateElementoperator= (SystemStateElement &&)=default
         
        +

        Detailed Description

        +

        This struct represent the extended pose state of the system.

        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< SystemStateElement > msceqf::ExtendedPoseState::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the extended pose state element of the system.

        +
        Returns
        Clone of the extended pose state element
        + +

        Implements msceqf::SystemStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_extended_pose_state.js b/structmsceqf_1_1_extended_pose_state.js new file mode 100644 index 0000000..0183e01 --- /dev/null +++ b/structmsceqf_1_1_extended_pose_state.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_extended_pose_state = +[ + [ "clone", "structmsceqf_1_1_extended_pose_state.html#ac350cd78075510c502a3d462425650fb", null ], + [ "T_", "structmsceqf_1_1_extended_pose_state.html#aabbae1e01b277093fa711d5566add492", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_extended_pose_state__coll__graph.map b/structmsceqf_1_1_extended_pose_state__coll__graph.map new file mode 100644 index 0000000..caefe58 --- /dev/null +++ b/structmsceqf_1_1_extended_pose_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_extended_pose_state__coll__graph.md5 b/structmsceqf_1_1_extended_pose_state__coll__graph.md5 new file mode 100644 index 0000000..135db7b --- /dev/null +++ b/structmsceqf_1_1_extended_pose_state__coll__graph.md5 @@ -0,0 +1 @@ +ad01a3132ab9c74950421ec98b3f3161 \ No newline at end of file diff --git a/structmsceqf_1_1_extended_pose_state__coll__graph.png b/structmsceqf_1_1_extended_pose_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..765c871d64f1883d62a8bfcc6f28897794d8b0b3 GIT binary patch literal 5686 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_extended_pose_state__inherit__graph.map b/structmsceqf_1_1_extended_pose_state__inherit__graph.map new file mode 100644 index 0000000..caefe58 --- /dev/null +++ b/structmsceqf_1_1_extended_pose_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_extended_pose_state__inherit__graph.md5 b/structmsceqf_1_1_extended_pose_state__inherit__graph.md5 new file mode 100644 index 0000000..135db7b --- /dev/null +++ b/structmsceqf_1_1_extended_pose_state__inherit__graph.md5 @@ -0,0 +1 @@ +ad01a3132ab9c74950421ec98b3f3161 \ No newline at end of file diff --git a/structmsceqf_1_1_extended_pose_state__inherit__graph.png b/structmsceqf_1_1_extended_pose_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..765c871d64f1883d62a8bfcc6f28897794d8b0b3 GIT binary patch literal 5686 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_fast_options-members.html b/structmsceqf_1_1_fast_options-members.html new file mode 100644 index 0000000..4c8a16e --- /dev/null +++ b/structmsceqf_1_1_fast_options-members.html @@ -0,0 +1,117 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::FastOptions Member List
        +
        +
        + +

        This is the complete list of members for msceqf::FastOptions, including all inherited members.

        + + +
        fast_threshold_msceqf::FastOptions
        +
        + + + + diff --git a/structmsceqf_1_1_fast_options.html b/structmsceqf_1_1_fast_options.html new file mode 100644 index 0000000..83513c6 --- /dev/null +++ b/structmsceqf_1_1_fast_options.html @@ -0,0 +1,128 @@ + + + + + + + +MSCEqF: msceqf::FastOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::FastOptions Struct Reference
        +
        +
        + + + + + +

        +Public Attributes

        +int fast_threshold_
         Fast detector threshold (The lower the more feature are detected/accepted)
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_fast_options.js b/structmsceqf_1_1_fast_options.js new file mode 100644 index 0000000..37f65d2 --- /dev/null +++ b/structmsceqf_1_1_fast_options.js @@ -0,0 +1,4 @@ +var structmsceqf_1_1_fast_options = +[ + [ "fast_threshold_", "structmsceqf_1_1_fast_options.html#ade4338d85623f9b9112b81da82b1a144", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_feat_helper-members.html b/structmsceqf_1_1_feat_helper-members.html new file mode 100644 index 0000000..1ab14d9 --- /dev/null +++ b/structmsceqf_1_1_feat_helper-members.html @@ -0,0 +1,122 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::FeatHelper Member List
        +
        +
        + +

        This is the complete list of members for msceqf::FeatHelper, including all inherited members.

        + + + + + + + +
        A_f_msceqf::FeatHelper
        anchor_timestamp_msceqf::FeatHelper
        clone_timestamp_msceqf::FeatHelper
        FeatHelper(const Vector3 &A_f, const Vector2 &uv, const Vector2 &uvn, const fp &anchor_timestamp, const fp &clone_timestamp) (defined in msceqf::FeatHelper)msceqf::FeatHelperinline
        uv_msceqf::FeatHelper
        uvn_msceqf::FeatHelper
        +
        + + + + diff --git a/structmsceqf_1_1_feat_helper.html b/structmsceqf_1_1_feat_helper.html new file mode 100644 index 0000000..751585d --- /dev/null +++ b/structmsceqf_1_1_feat_helper.html @@ -0,0 +1,158 @@ + + + + + + + +MSCEqF: msceqf::FeatHelper Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::FeatHelper Struct Reference
        +
        +
        + +

        FeatHelper struct. This struct implements a helper structure holding all the information related to a single feature measurement to be used in the computation of the C matrix, Cf matrix and residual delta, for the MSCEqF update. + More...

        + +

        #include <updater_helper.hpp>

        + + + + +

        +Public Member Functions

        FeatHelper (const Vector3 &A_f, const Vector2 &uv, const Vector2 &uvn, const fp &anchor_timestamp, const fp &clone_timestamp)
         
        + + + + + + + + + + + + + + + + +

        +Public Attributes

        +const Vector3 & A_f_
         Triangulated feature in anchor frame.
         
        +const Vector2 & uv_
         (measured) feature coordinates
         
        +const Vector2 & uvn_
         Normalized (measured) feature coordinates.
         
        +const fp & anchor_timestamp_
         Timestamp of the anchor.
         
        +const fp & clone_timestamp_
         Timestamp of the feature measurement.
         
        +

        Detailed Description

        +

        FeatHelper struct. This struct implements a helper structure holding all the information related to a single feature measurement to be used in the computation of the C matrix, Cf matrix and residual delta, for the MSCEqF update.

        +

        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_feat_helper.js b/structmsceqf_1_1_feat_helper.js new file mode 100644 index 0000000..d33cbd2 --- /dev/null +++ b/structmsceqf_1_1_feat_helper.js @@ -0,0 +1,8 @@ +var structmsceqf_1_1_feat_helper = +[ + [ "A_f_", "structmsceqf_1_1_feat_helper.html#a2bb785571bb0f5a5e2ffd1d7c4df4703", null ], + [ "anchor_timestamp_", "structmsceqf_1_1_feat_helper.html#a528f8cd86b7b60150a89fe7033f31a87", null ], + [ "clone_timestamp_", "structmsceqf_1_1_feat_helper.html#a767bb0ca608969f02995fd66fbf4a0e2", null ], + [ "uv_", "structmsceqf_1_1_feat_helper.html#a31cf87e6ea5ab46cc607c753e0fde2e7", null ], + [ "uvn_", "structmsceqf_1_1_feat_helper.html#ae475cbe6d060b3a0616eca56220011c1", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_feature_state-members.html b/structmsceqf_1_1_feature_state-members.html new file mode 100644 index 0000000..e5aa349 --- /dev/null +++ b/structmsceqf_1_1_feature_state-members.html @@ -0,0 +1,127 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::FeatureState Member List
        +
        +
        + +

        This is the complete list of members for msceqf::FeatureState, including all inherited members.

        + + + + + + + + + + + + +
        clone() const overridemsceqf::FeatureStateinlinevirtual
        f_msceqf::FeatureState
        FeatureState() (defined in msceqf::FeatureState)msceqf::FeatureStateinline
        FeatureState(const Vector3 &f) (defined in msceqf::FeatureState)msceqf::FeatureStateinline
        FeatureState(const fp &x, const fp &y, const fp &z) (defined in msceqf::FeatureState)msceqf::FeatureStateinline
        operator=(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        operator=(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        SystemStateElement()=defaultmsceqf::SystemStateElementprotected
        SystemStateElement(const SystemStateElement &)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        SystemStateElement(SystemStateElement &&)=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementprotected
        ~SystemStateElement()=default (defined in msceqf::SystemStateElement)msceqf::SystemStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_feature_state.html b/structmsceqf_1_1_feature_state.html new file mode 100644 index 0000000..ae8ba93 --- /dev/null +++ b/structmsceqf_1_1_feature_state.html @@ -0,0 +1,220 @@ + + + + + + + +MSCEqF: msceqf::FeatureState Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::FeatureState Struct Referencefinal
        +
        +
        + +

        This struct represent a single persistent feature state of the system. + More...

        + +

        #include <system_elements.hpp>

        +
        +Inheritance diagram for msceqf::FeatureState:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::FeatureState:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + +

        +Public Member Functions

        FeatureState (const Vector3 &f)
         
        FeatureState (const fp &x, const fp &y, const fp &z)
         
        std::unique_ptr< SystemStateElementclone () const override
         Clone the persistent feature state element of the system.
         
        - Public Member Functions inherited from msceqf::SystemStateElement
        + + + + +

        +Public Attributes

        +Vector3 f_
         The persistent feature (f)
         
        + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::SystemStateElement
        SystemStateElement ()=default
         Rule of Five.
         
        SystemStateElement (const SystemStateElement &)=default
         
        SystemStateElement (SystemStateElement &&)=default
         
        +SystemStateElementoperator= (const SystemStateElement &)=default
         
        +SystemStateElementoperator= (SystemStateElement &&)=default
         
        +

        Detailed Description

        +

        This struct represent a single persistent feature state of the system.

        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< SystemStateElement > msceqf::FeatureState::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the persistent feature state element of the system.

        +
        Returns
        Clone of the persistent feature state element
        + +

        Implements msceqf::SystemStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_feature_state.js b/structmsceqf_1_1_feature_state.js new file mode 100644 index 0000000..4fef6a7 --- /dev/null +++ b/structmsceqf_1_1_feature_state.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_feature_state = +[ + [ "clone", "structmsceqf_1_1_feature_state.html#a78732a75e6d2b2704c8f26581f9aaf3c", null ], + [ "f_", "structmsceqf_1_1_feature_state.html#a462010b6dbc917a495bc0e91d779b00e", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_feature_state__coll__graph.map b/structmsceqf_1_1_feature_state__coll__graph.map new file mode 100644 index 0000000..88d2cb2 --- /dev/null +++ b/structmsceqf_1_1_feature_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_feature_state__coll__graph.md5 b/structmsceqf_1_1_feature_state__coll__graph.md5 new file mode 100644 index 0000000..a735049 --- /dev/null +++ b/structmsceqf_1_1_feature_state__coll__graph.md5 @@ -0,0 +1 @@ +05b2ab42b9f462bebe2c4e957c1ba910 \ No newline at end of file diff --git a/structmsceqf_1_1_feature_state__coll__graph.png b/structmsceqf_1_1_feature_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..30057a32cccb7c08cc739fd9791e23b8c3de449f GIT binary patch literal 5190 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_feature_state__inherit__graph.map b/structmsceqf_1_1_feature_state__inherit__graph.map new file mode 100644 index 0000000..88d2cb2 --- /dev/null +++ b/structmsceqf_1_1_feature_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_feature_state__inherit__graph.md5 b/structmsceqf_1_1_feature_state__inherit__graph.md5 new file mode 100644 index 0000000..a735049 --- /dev/null +++ b/structmsceqf_1_1_feature_state__inherit__graph.md5 @@ -0,0 +1 @@ +05b2ab42b9f462bebe2c4e957c1ba910 \ No newline at end of file diff --git a/structmsceqf_1_1_feature_state__inherit__graph.png b/structmsceqf_1_1_feature_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..30057a32cccb7c08cc739fd9791e23b8c3de449f GIT binary patch literal 5190 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_features-members.html b/structmsceqf_1_1_features-members.html new file mode 100644 index 0000000..21b5cec --- /dev/null +++ b/structmsceqf_1_1_features-members.html @@ -0,0 +1,124 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::Features Member List
        +
        +
        + +

        This is the complete list of members for msceqf::Features, including all inherited members.

        + + + + + + + + + +
        distorted_uvs_msceqf::Features
        empty() const noexceptmsceqf::Featuresinline
        FeatureIds typedefmsceqf::Features
        ids_msceqf::Features
        normalized_uvs_msceqf::Features
        removeInvalid(std::vector< bool > &invalid)msceqf::Featuresinline
        size() const noexceptmsceqf::Featuresinline
        uvs_msceqf::Features
        +
        + + + + diff --git a/structmsceqf_1_1_features.html b/structmsceqf_1_1_features.html new file mode 100644 index 0000000..25c5335 --- /dev/null +++ b/structmsceqf_1_1_features.html @@ -0,0 +1,259 @@ + + + + + + + +MSCEqF: msceqf::Features Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::Features Struct Reference
        +
        +
        + +

        (Cache friendly) Features struct. Define a set of features detected/tracked. + More...

        + +

        #include <features.hpp>

        + + + + + +

        +Public Types

        +using FeatureIds = std::vector<uint>
         Vector of feature ids.
         
        + + + + + + + + + + +

        +Public Member Functions

        bool empty () const noexcept
         Check if there valid coordinates in uvs_.
         
        size_t size () const noexcept
         Return the amount of features (size of uvs_)
         
        void removeInvalid (std::vector< bool > &invalid)
         Remove invalid features coordinates, normalized feature coordinates and ids given a vector of boolean flags indicating invalid features.
         
        + + + + + + + + + + + + + +

        +Public Attributes

        +FeaturesCoordinates distorted_uvs_
         Distorted (u, v) coordinates of the features detected/tracked.
         
        +FeaturesCoordinates uvs_
         Undistorted (u, v) coordinates of the features detected/tracked.
         
        +FeaturesCoordinates normalized_uvs_
         Undistorted normalized (u, v) coordinates of features detected/tracked.
         
        +FeatureIds ids_
         Id of the features detected/tracked.
         
        +

        Detailed Description

        +

        (Cache friendly) Features struct. Define a set of features detected/tracked.

        +
        Note
        Note that feature cordinates are of cv::Point2f type for compatibility with OpenCV.
        +

        Member Function Documentation

        + +

        ◆ empty()

        + +
        +
        + + + + + +
        + + + + + + + +
        bool msceqf::Features::empty () const
        +
        +inlinenoexcept
        +
        + +

        Check if there valid coordinates in uvs_.

        +
        Returns
        true if coordinates are found, false otherwise
        + +
        +
        + +

        ◆ removeInvalid()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::Features::removeInvalid (std::vector< bool > & invalid)
        +
        +inline
        +
        + +

        Remove invalid features coordinates, normalized feature coordinates and ids given a vector of boolean flags indicating invalid features.

        +
        Parameters
        + + +
        invalidVector of boolean flags indicating invalid features
        +
        +
        + +
        +
        + +

        ◆ size()

        + +
        +
        + + + + + +
        + + + + + + + +
        size_t msceqf::Features::size () const
        +
        +inlinenoexcept
        +
        + +

        Return the amount of features (size of uvs_)

        +
        Returns
        Number of features
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_features.js b/structmsceqf_1_1_features.js new file mode 100644 index 0000000..2dacc84 --- /dev/null +++ b/structmsceqf_1_1_features.js @@ -0,0 +1,11 @@ +var structmsceqf_1_1_features = +[ + [ "FeatureIds", "structmsceqf_1_1_features.html#a8fde740a86aff8771dcd4136da02e465", null ], + [ "empty", "structmsceqf_1_1_features.html#ad5ba9089e87e84c92e1a95b0bce56dd1", null ], + [ "removeInvalid", "structmsceqf_1_1_features.html#a7c88b6d974425f8fc019183328f8a59a", null ], + [ "size", "structmsceqf_1_1_features.html#afe00a99b4854fc45c7d07b4ce3253c7b", null ], + [ "distorted_uvs_", "structmsceqf_1_1_features.html#a5fbe92994383ca26927684c8367bfa49", null ], + [ "ids_", "structmsceqf_1_1_features.html#a81dc275fec850f5776c43ae1e59ef34b", null ], + [ "normalized_uvs_", "structmsceqf_1_1_features.html#a8cf1d4a15a874c7c233ca7a80cbeea2a", null ], + [ "uvs_", "structmsceqf_1_1_features.html#a730289b0f2b09da19b28b3dc02030b42", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_g_f_t_t_options-members.html b/structmsceqf_1_1_g_f_t_t_options-members.html new file mode 100644 index 0000000..65832c1 --- /dev/null +++ b/structmsceqf_1_1_g_f_t_t_options-members.html @@ -0,0 +1,117 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::GFTTOptions Member List
        +
        +
        + +

        This is the complete list of members for msceqf::GFTTOptions, including all inherited members.

        + + +
        quality_level_msceqf::GFTTOptions
        +
        + + + + diff --git a/structmsceqf_1_1_g_f_t_t_options.html b/structmsceqf_1_1_g_f_t_t_options.html new file mode 100644 index 0000000..1a751a8 --- /dev/null +++ b/structmsceqf_1_1_g_f_t_t_options.html @@ -0,0 +1,128 @@ + + + + + + + +MSCEqF: msceqf::GFTTOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::GFTTOptions Struct Reference
        +
        +
        + + + + + +

        +Public Attributes

        +fp quality_level_
         Shi-Tomasi detector quality level (The lower the more feature are detected/accepted)
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_g_f_t_t_options.js b/structmsceqf_1_1_g_f_t_t_options.js new file mode 100644 index 0000000..4e604f6 --- /dev/null +++ b/structmsceqf_1_1_g_f_t_t_options.js @@ -0,0 +1,4 @@ +var structmsceqf_1_1_g_f_t_t_options = +[ + [ "quality_level_", "structmsceqf_1_1_g_f_t_t_options.html#a60bcbc0484630508adbf7ccfffe8c8fc", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_imu-members.html b/structmsceqf_1_1_imu-members.html new file mode 100644 index 0000000..2bf8e3f --- /dev/null +++ b/structmsceqf_1_1_imu-members.html @@ -0,0 +1,125 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::Imu Member List
        +
        +
        + +

        This is the complete list of members for msceqf::Imu, including all inherited members.

        + + + + + + + + + + +
        acc_msceqf::Imu
        ang_msceqf::Imu
        operator<(const Imu &lhs, const Imu &rhs)msceqf::Imufriend
        operator<(const Imu &lhs, const fp &timestamp)msceqf::Imufriend
        operator< (defined in msceqf::Imu)msceqf::Imufriend
        operator<<(std::ostream &stream, Imu const &imu)msceqf::Imufriend
        timestamp_msceqf::Imu
        W() constmsceqf::Imuinline
        w() constmsceqf::Imuinline
        +
        + + + + diff --git a/structmsceqf_1_1_imu.html b/structmsceqf_1_1_imu.html new file mode 100644 index 0000000..15e0484 --- /dev/null +++ b/structmsceqf_1_1_imu.html @@ -0,0 +1,247 @@ + + + + + + + +MSCEqF: msceqf::Imu Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::Imu Struct Reference
        +
        +
        + +

        Struct for one IMU reading. It includes timestamp, angular velocity and linear acceleration. -1 indicates an invalid timestamp. + More...

        + +

        #include <sensor_data.hpp>

        + + + + + + + + +

        +Public Member Functions

        const Vector6 w () const
         Get the IMU measurement as a 6 vector (ang, acc)
         
        const Matrix5 W () const
         get the IMU measurement as an extended matrix (ang, acc, 0)^ (SE23 lie algebra element)
         
        + + + + + + + + + + +

        +Public Attributes

        +Vector3 ang_ = Vector3::Zero()
         Angular velocity vector.
         
        +Vector3 acc_ = Vector3::Zero()
         Acceleration vector.
         
        +fp timestamp_ = -1
         Timestamp of the IMU reading.
         
        + + + + + + + + + + + + +

        +Friends

        +bool operator< (const Imu &lhs, const Imu &rhs)
         Comparison operator with other imu.
         
        +bool operator< (const Imu &lhs, const fp &timestamp)
         Comparison operator with timestamp.
         
        +bool operator< (const fp &timestamp, const Imu &rhs)
         
        +std::ostream & operator<< (std::ostream &stream, Imu const &imu)
         Stream an Imu.
         
        +

        Detailed Description

        +

        Struct for one IMU reading. It includes timestamp, angular velocity and linear acceleration. -1 indicates an invalid timestamp.

        +

        Member Function Documentation

        + +

        ◆ W()

        + +
        +
        + + + + + +
        + + + + + + + +
        const Matrix5 msceqf::Imu::W () const
        +
        +inline
        +
        + +

        get the IMU measurement as an extended matrix (ang, acc, 0)^ (SE23 lie algebra element)

        +
        Returns
        IMU measurement as a SE23 lie algebra element
        +
        +Here is the call graph for this function:
        +
        +
        + + + + +
        +
        +Here is the caller graph for this function:
        +
        +
        + + + + +
        + +
        +
        + +

        ◆ w()

        + +
        +
        + + + + + +
        + + + + + + + +
        const Vector6 msceqf::Imu::w () const
        +
        +inline
        +
        + +

        Get the IMU measurement as a 6 vector (ang, acc)

        +
        Returns
        R6 vector representing the IMU measurement as stacked angular velocity and linear acceleration
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_imu.js b/structmsceqf_1_1_imu.js new file mode 100644 index 0000000..2adea81 --- /dev/null +++ b/structmsceqf_1_1_imu.js @@ -0,0 +1,11 @@ +var structmsceqf_1_1_imu = +[ + [ "W", "structmsceqf_1_1_imu.html#abfb41a7dd565a216b9d2392e4b308fcf", null ], + [ "w", "structmsceqf_1_1_imu.html#a8995590a4492fb0fcec520efe985456b", null ], + [ "operator<", "structmsceqf_1_1_imu.html#a781bdbdb2b8f42651f7af7973f4e58f4", null ], + [ "operator<", "structmsceqf_1_1_imu.html#a1fbb26978848607614bfc802d9af2b65", null ], + [ "operator<<", "structmsceqf_1_1_imu.html#adff300fb97f6ad0dd6cc8145da362e0d", null ], + [ "acc_", "structmsceqf_1_1_imu.html#a1b29298f3701300d491570bd8cd5c4f0", null ], + [ "ang_", "structmsceqf_1_1_imu.html#acde575da260744b95bf84f6bd1fb1c96", null ], + [ "timestamp_", "structmsceqf_1_1_imu.html#a1376f522b2baafc4f5f37d27fe1afa65", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.map b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.map new file mode 100644 index 0000000..e58fcac --- /dev/null +++ b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.md5 b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.md5 new file mode 100644 index 0000000..2f29118 --- /dev/null +++ b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.md5 @@ -0,0 +1 @@ +b9424e4f45137b18f1be0beca1523376 \ No newline at end of file diff --git a/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.png b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_cgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..cab1765d765af9cc5de8b8e663f642c653030f09 GIT binary patch literal 2839 zcmV+y3+VKTP)PEyh_Ba)B>qyN3rVjc=ol1q_%5U-YmFFCTkmXf*O>gvJUL%0cu;Y$K|%t8IAAfL znZoIVKrK)q1w{fr>1e0u)RUrrRzdvkY6!G6FDT#)d#)4}OC9~DhA{r;3Qa+!}pqLicn2@r9e*e5+-Wet zi6l|n(ZL2GIV&Y+QqRbrxHJAtxFc%vo-=Z-Q&1@2_3R{`Q#%PtJ1bw8@GIcQ$CAb8 zYHFDZ9&hsATTZ>0T!H;3&HOYEcSD<{BMtlJ~cE= z6(6+)OoqdU-vUO(ho{vt7@*IGChZ`pfCB~1a8qJesNa277D~xAp>PdJnMQ*pYpZBi zOY0Bu=$ibSkEPD8&?qFYWIrs@)z-87tZV{8epoI+DuR9~(K3|h96XjRo_D*zaq#HG z%dW5m2y!SKQ(FswgfEBwj7ETv5*1WkUDzq?b?RPbn%gtwuij*T2wd{aX1neaKZ#>?%cq@?7Qz4zXGeE8vqqsj^j3dqdN#Ob^_@4#lW@$$aSaU(*laepX!7;-rMS3wR9R6`5oKj%R9D|zFj-Mi zL2YdZva*tb zf&#j_y14h=dr3@8WZt}a0NCwz^78Viudl~sGLe{=NKjA^FmxmG^Yf{ztHWqCvSrH_ zf`fwr=<4bsFE0Ns;a73v0??~<>iEggpiPs zz=aDJ*uH&ev(r%s&$U~q7djEoH0+uK>cem%|2&8|Mm;c)QMOE1yf z+)P430*a#W;)^fR-QCT=zyKK;8Cb1W)~s1WTU#4hSy?nTHnMs1W()=cn>KACK7MGb z*n$NM(CKtzwx@edy}i9uRaK2Tzpk#%RZDLbPpj1u5fR}!@7lF%#K*^DHk+xbsljfy z)7#riLqh{GF*AShc3T#_IUEjl?b?OGU?4Cskc^BBcJADX$z)>DqD34yZ~&*%Nkc;e zI-QP<8#fXV5I|H^6s@hT02CJ&<eq3R>qDUJ1`gwm`o-t77KoUerUDYNpp#*a9d0c2ncZXdH(+X=yWxJVq$pcp@)E>#3v#m!gZ{#uPG1wo6+m_`1$z}9UYAr@kS^zGLn{-7Pnl}bcv0PB`+_J@4owvrluxWjWwIiT)ldg zg$oxF5fOn#GxIr&Ze6;n)oMvgOLH}GpMCZjnVFfSr>8S--aJ=?CQr_)hTP(WK-+o-D_)>Z@G8ex10uI7&-PsjC~Bq|wsS!snllzxcnkwUyr9 z-Z9(L#n;!D_V#vH%TZBLK~vMsA0Qep-f+KMSXk)F7htFvZ*6U*tgP&|ne5h@ykWxz zE?v6BzJ2@9>-Ds>wD80ePq=Doa&j_<4jsa1G-9*ac>M9lF&d2+jYhU^-O8auhX@W1 z#%i_lzylAkdi83A5Nz49g^Y|07A;ytPfyQ;H|OBNgKXQjjm?`kkJ_FtAt52e#>R5s zzyU%-LuqSkBP=XzO7UW1Vkj>!CoV3|b-YfeBQi3Q>gsC3!^5YoYb0Z)HtgB6=Sd;N zJ5!xB(AU>TeSN*FKOGntptiP_sHiAlC~K~&s&d_UDJ4x!P4xBkVKSM<^lx^%9h=QY zaBwhsy?)fbo}M18Rx3e4L9R!uVY<4yXl-rfo_p@${Q2|L*VmJpno4bLEy2OTuEeXd zvJ#`wNKjDFsO`qaMl>1?CX;De*VNF^fZc9){iEsidIACh#*GKi+1W{BVUEe&yT=Bk69{{c@TV7=cyKNkQ1002ovPDHLkV1iIea@qg@ literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.map b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.map new file mode 100644 index 0000000..9683cdc --- /dev/null +++ b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.md5 b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.md5 new file mode 100644 index 0000000..0ff63a4 --- /dev/null +++ b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.md5 @@ -0,0 +1 @@ +ec398960d476171eb16ce49cb768d3b5 \ No newline at end of file diff --git a/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.png b/structmsceqf_1_1_imu_abfb41a7dd565a216b9d2392e4b308fcf_icgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..463495518d5bdadb7fb5b022156a6460e1b4f9e6 GIT binary patch literal 2835 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 lx5WCa009C72oPW<@?Tv$T + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + + + + + + diff --git a/structmsceqf_1_1_initializer_options.html b/structmsceqf_1_1_initializer_options.html new file mode 100644 index 0000000..e931335 --- /dev/null +++ b/structmsceqf_1_1_initializer_options.html @@ -0,0 +1,156 @@ + + + + + + + +MSCEqF: msceqf::InitializerOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::InitializerOptions Struct Reference
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Attributes

        +fp acc_threshold_
         The acceleration threshold for the static initializer.
         
        +fp imu_init_window_
         The window in seconds used to check for acceleration spikes.
         
        +fp gravity_
         The magnitude of the gravity vector in m/s^2.
         
        +bool identity_b0_
         Boolean to fix identity bias origin (b0)git.
         
        +bool init_with_given_state_
         Boolean to initialize the state with the given state.
         
        +SE23 initial_extended_pose_
         Initial extended pose.
         
        +Vector6 initial_bias_
         Initial bias.
         
        +fp initial_timestamp_
         Initial timestamp.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_initializer_options.js b/structmsceqf_1_1_initializer_options.js new file mode 100644 index 0000000..64feb54 --- /dev/null +++ b/structmsceqf_1_1_initializer_options.js @@ -0,0 +1,11 @@ +var structmsceqf_1_1_initializer_options = +[ + [ "acc_threshold_", "structmsceqf_1_1_initializer_options.html#a3637229cb8d7ea08e6f6db72f2a50aa7", null ], + [ "gravity_", "structmsceqf_1_1_initializer_options.html#af5d2bb0318dc2a628104617913cabf2a", null ], + [ "identity_b0_", "structmsceqf_1_1_initializer_options.html#a194530030e0eba4dfffe36bb6f5f374f", null ], + [ "imu_init_window_", "structmsceqf_1_1_initializer_options.html#a01c8b424c7af158a387246a9ae0696cc", null ], + [ "init_with_given_state_", "structmsceqf_1_1_initializer_options.html#a97f3c4efe0e032f6c170a6f740501720", null ], + [ "initial_bias_", "structmsceqf_1_1_initializer_options.html#ae95ee6e8ceea1c1777e11531f3c24fb7", null ], + [ "initial_extended_pose_", "structmsceqf_1_1_initializer_options.html#a140a7ca78f60b62e07ddbb7bb6d4a166", null ], + [ "initial_timestamp_", "structmsceqf_1_1_initializer_options.html#a4dea2104c8933f1ade1aa06be40da2d1", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state-members.html b/structmsceqf_1_1_m_s_c_eq_f_in_state-members.html new file mode 100644 index 0000000..d8e5660 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_in_state-members.html @@ -0,0 +1,134 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::MSCEqFInState Member List
        +
        +
        + +

        This is the complete list of members for msceqf::MSCEqFInState, including all inherited members.

        + + + + + + + + + + + + + + + + + + + +
        clone() const overridemsceqf::MSCEqFInStateinlinevirtual
        dof_msceqf::MSCEqFStateElementprotected
        getDof()msceqf::MSCEqFStateElementinline
        getIndex()msceqf::MSCEqFStateElementinline
        idx_msceqf::MSCEqFStateElementprotected
        L_msceqf::MSCEqFInState
        MSCEqFInState()=deletemsceqf::MSCEqFInState
        MSCEqFInState(const uint &idx)msceqf::MSCEqFInStateinline
        MSCEqFStateElement()=deletemsceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const uint &idx, const uint &dof)msceqf::MSCEqFStateElementinlineprotected
        operator=(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        operator=(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        updateIndex(const uint &new_idx)msceqf::MSCEqFStateElementinline
        updateLeft(const VectorX &delta) overridemsceqf::MSCEqFInStateinlinevirtual
        updateRight(const VectorX &delta) overridemsceqf::MSCEqFInStateinlinevirtual
        ~MSCEqFStateElement()=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state.html b/structmsceqf_1_1_m_s_c_eq_f_in_state.html new file mode 100644 index 0000000..6d1ca32 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_in_state.html @@ -0,0 +1,352 @@ + + + + + + + +MSCEqF: msceqf::MSCEqFInState Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::MSCEqFInState Struct Referencefinal
        +
        +
        + +

        This struct represent the Intrinsic state of the MSCEqF. + More...

        + +

        #include <state_elements.hpp>

        +
        +Inheritance diagram for msceqf::MSCEqFInState:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::MSCEqFInState:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        MSCEqFInState ()=delete
         Deleted default constructor.
         
         MSCEqFInState (const uint &idx)
         Construct an identity MSCEqFInState object.
         
        void updateRight (const VectorX &delta) override
         Update the Intrinsic element of the state by right multiplication.
         
        void updateLeft (const VectorX &delta) override
         Update the Intrinsic element of the state by left multiplication.
         
        std::unique_ptr< MSCEqFStateElementclone () const override
         Clone the Special Intrinsic (In) element of state of the MSCEqF.
         
        - Public Member Functions inherited from msceqf::MSCEqFStateElement
        const uint & getIndex ()
         Get the starting index of the state element in the residual, and in the covariance.
         
        const uint & getDof ()
         Get the degrees of freedom of the state element (dimension of relative covariance and residual block)
         
        void updateIndex (const uint &new_idx)
         Update index.
         
        + + + + +

        +Public Attributes

        +In L_
         The Intrinsic element of the state.
         
        + + + + + + + + + + + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::MSCEqFStateElement
        MSCEqFStateElement ()=delete
         Rule of Five.
         
        MSCEqFStateElement (const MSCEqFStateElement &)=default
         
        MSCEqFStateElement (MSCEqFStateElement &&)=default
         
        +MSCEqFStateElementoperator= (const MSCEqFStateElement &)=default
         
        +MSCEqFStateElementoperator= (MSCEqFStateElement &&)=default
         
         MSCEqFStateElement (const uint &idx, const uint &dof)
         Construct a MSCEqFStateElement object.
         
        - Protected Attributes inherited from msceqf::MSCEqFStateElement
        +uint idx_
         Starting index of the element in the residual, and in the covariance.
         
        +uint dof_
         Degrees of freedom of the element (dimension of relative covariance and residual block)
         
        +

        Detailed Description

        +

        This struct represent the Intrinsic state of the MSCEqF.

        +

        Constructor & Destructor Documentation

        + +

        ◆ MSCEqFInState()

        + +
        +
        + + + + + +
        + + + + + + + +
        msceqf::MSCEqFInState::MSCEqFInState (const uint & idx)
        +
        +inline
        +
        + +

        Construct an identity MSCEqFInState object.

        +
        Parameters
        + + +
        idxStarting index of the variable in the covariance
        +
        +
        + +
        +
        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< MSCEqFStateElement > msceqf::MSCEqFInState::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the Special Intrinsic (In) element of state of the MSCEqF.

        +
        Returns
        Clone of the In element
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateLeft()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFInState::updateLeft (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Intrinsic element of the state by left multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the left side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateRight()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFInState::updateRight (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Intrinsic element of the state by right multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the right side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state.js b/structmsceqf_1_1_m_s_c_eq_f_in_state.js new file mode 100644 index 0000000..e67765b --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_in_state.js @@ -0,0 +1,9 @@ +var structmsceqf_1_1_m_s_c_eq_f_in_state = +[ + [ "MSCEqFInState", "structmsceqf_1_1_m_s_c_eq_f_in_state.html#ae00aed09ebc708074e19e0764af02a2f", null ], + [ "MSCEqFInState", "structmsceqf_1_1_m_s_c_eq_f_in_state.html#a38c26be4cf996d2b7e0830a655204e84", null ], + [ "clone", "structmsceqf_1_1_m_s_c_eq_f_in_state.html#a16b225fd2d52d4cd68ed3db04e367126", null ], + [ "updateLeft", "structmsceqf_1_1_m_s_c_eq_f_in_state.html#ab02dac4244b83fe1eac44772441ac9c1", null ], + [ "updateRight", "structmsceqf_1_1_m_s_c_eq_f_in_state.html#ae3b474fb0284b4f30b20ffc9ca010cec", null ], + [ "L_", "structmsceqf_1_1_m_s_c_eq_f_in_state.html#a65501fee59803d8c5d23a0267905aaad", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.map b/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.map new file mode 100644 index 0000000..07436bc --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.md5 new file mode 100644 index 0000000..19ffb45 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.md5 @@ -0,0 +1 @@ +fce8cb80bfd0d4541e57d6b521d077fb \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.png b/structmsceqf_1_1_m_s_c_eq_f_in_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d1708e8493c1cf93bc21a8ef5b47c108c49e49ac GIT binary patch literal 6044 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 b9Fy$6leJ3YPPh&0b_7yM^KOaa!x#SrQ$+7g literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.map b/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.map new file mode 100644 index 0000000..07436bc --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.md5 new file mode 100644 index 0000000..19ffb45 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.md5 @@ -0,0 +1 @@ +fce8cb80bfd0d4541e57d6b521d077fb \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.png b/structmsceqf_1_1_m_s_c_eq_f_in_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d1708e8493c1cf93bc21a8ef5b47c108c49e49ac GIT binary patch literal 6044 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 b9Fy$6leJ3YPPh&0b_7yM^KOaa!x#SrQ$+7g literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_options-members.html b/structmsceqf_1_1_m_s_c_eq_f_options-members.html new file mode 100644 index 0000000..96c7d1f --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_options-members.html @@ -0,0 +1,123 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::MSCEqFOptions Member List
        +
        + +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_options.html b/structmsceqf_1_1_m_s_c_eq_f_options.html new file mode 100644 index 0000000..6bb2a30 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_options.html @@ -0,0 +1,182 @@ + + + + + + + +MSCEqF: msceqf::MSCEqFOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::MSCEqFOptions Struct Reference
        +
        +
        +
        +Collaboration diagram for msceqf::MSCEqFOptions:
        +
        +
        Collaboration graph
        + + + + + + + + + + + + + + + + + + + + + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Attributes

        +TrackManagerOptions track_manager_options_
         The track manager options.
         
        +StateOptions state_options_
         The state options.
         
        +CheckerOptions checker_options_
         The checker options.
         
        +InitializerOptions init_options_
         The initializer options.
         
        +PropagatorOptions propagator_options_
         The propagator options.
         
        +UpdaterOptions updater_options_
         The updater options.
         
        +ZeroVelocityUpdaterOptions zvupdater_options_
         The zero velocity updater options.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_options.js b/structmsceqf_1_1_m_s_c_eq_f_options.js new file mode 100644 index 0000000..05a075c --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_options.js @@ -0,0 +1,10 @@ +var structmsceqf_1_1_m_s_c_eq_f_options = +[ + [ "checker_options_", "structmsceqf_1_1_m_s_c_eq_f_options.html#ad4bed3e7a75974a68885be31c5e3c5c2", null ], + [ "init_options_", "structmsceqf_1_1_m_s_c_eq_f_options.html#a5344579e4360786c93cb0d18a19a0b7a", null ], + [ "propagator_options_", "structmsceqf_1_1_m_s_c_eq_f_options.html#aca71bafd065f917ba0ac290bab7f9c5d", null ], + [ "state_options_", "structmsceqf_1_1_m_s_c_eq_f_options.html#a44a0bb324dc700c40146b30fea096ada", null ], + [ "track_manager_options_", "structmsceqf_1_1_m_s_c_eq_f_options.html#a3e766d4912438667c47a3370986e36f9", null ], + [ "updater_options_", "structmsceqf_1_1_m_s_c_eq_f_options.html#a9c225f2da97619b0b32b82f64a40ad64", null ], + [ "zvupdater_options_", "structmsceqf_1_1_m_s_c_eq_f_options.html#a8216128a46cf1f1f9ae60334b014e5ca", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.map b/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.map new file mode 100644 index 0000000..22aa958 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.md5 new file mode 100644 index 0000000..2b3d368 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.md5 @@ -0,0 +1 @@ +95bc08304308820449ab915818116560 \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.png b/structmsceqf_1_1_m_s_c_eq_f_options__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..94036bdb6d3ad11a5bd80c8cf72ce750530f833f GIT binary patch literal 69713 zcma&Oby!tv*FC&8Al)q?9TFm;C{iLRp(5RaARS6cZUqEE1VKPikdoMxgdiZLgi1+C zhae3CO6ND%^PclOzdyh0T<3U%y<*?@j4{U?^L~6?M~#A%g%m*$3JrB-T?8SBMG#Ch zF(Ld!CoQTC{vfp0R8vNd(SOovbK((%6VXtdhi`8iLb!2J{TgPK{27>DE;lQh7oTBe;7A%E~mdvUHV{1VR<@xCna6 zhEle-)#A>1#dFd&Z2y(LKbUfHM($4Bt?l-gl8DU{@fPO)pZ^(*77%hh%Mxv&OmD=| zc-G)5af#`T=g;?^hWz&)*t#h~Zc=)sg8UdOW?>a&8>FCk^}>H2V9<={o;FT&vtoX7 zsG;A#NBQ8tSK6v?vj0DCQ&Y8$(Ejhe%A$y3|9h8~7v{3qrvLqQc?!e(zb|3OM8)~v zyFL-G+1O-nm=F~gr};bA)fz#=bN22p^%{rXo}RUtBune#qeJ(*cR$H(kA?`m37~a# zb(Izzt`-&&`V`3^Onvg?<0ntZH~a zQTxANyJY0Dz5Tp>X197}ltryy_iV>2C#~(`;KL}p&ez7SrY0sVRW&ueNtQvoK4IHQ z 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state-members.html b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state-members.html new file mode 100644 index 0000000..6e162b5 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state-members.html @@ -0,0 +1,134 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::MSCEqFSDBState Member List
        +
        +
        + +

        This is the complete list of members for msceqf::MSCEqFSDBState, including all inherited members.

        + + + + + + + + + + + + + + + + + + + +
        clone() const overridemsceqf::MSCEqFSDBStateinlinevirtual
        Dd_msceqf::MSCEqFSDBState
        dof_msceqf::MSCEqFStateElementprotected
        getDof()msceqf::MSCEqFStateElementinline
        getIndex()msceqf::MSCEqFStateElementinline
        idx_msceqf::MSCEqFStateElementprotected
        MSCEqFSDBState()=deletemsceqf::MSCEqFSDBState
        MSCEqFSDBState(const uint &idx)msceqf::MSCEqFSDBStateinline
        MSCEqFStateElement()=deletemsceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const uint &idx, const uint &dof)msceqf::MSCEqFStateElementinlineprotected
        operator=(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        operator=(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        updateIndex(const uint &new_idx)msceqf::MSCEqFStateElementinline
        updateLeft(const VectorX &delta) overridemsceqf::MSCEqFSDBStateinlinevirtual
        updateRight(const VectorX &delta) overridemsceqf::MSCEqFSDBStateinlinevirtual
        ~MSCEqFStateElement()=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html new file mode 100644 index 0000000..5383169 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html @@ -0,0 +1,352 @@ + + + + + + + +MSCEqF: msceqf::MSCEqFSDBState Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::MSCEqFSDBState Struct Referencefinal
        +
        +
        + +

        This struct represent the Semi Direct bias state of the MSCEqF. + More...

        + +

        #include <state_elements.hpp>

        +
        +Inheritance diagram for msceqf::MSCEqFSDBState:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::MSCEqFSDBState:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        MSCEqFSDBState ()=delete
         Deleted default constructor.
         
         MSCEqFSDBState (const uint &idx)
         Construct an identity MSCEqFSDBState object.
         
        void updateRight (const VectorX &delta) override
         Update the Semi Direct Bias element of the state by right multiplication.
         
        void updateLeft (const VectorX &delta) override
         Update the Semi Direct Bias element of the state by left multiplication.
         
        std::unique_ptr< MSCEqFStateElementclone () const override
         Clone the Semi Direct bias (SDB) element of state of the MSCEqF.
         
        - Public Member Functions inherited from msceqf::MSCEqFStateElement
        const uint & getIndex ()
         Get the starting index of the state element in the residual, and in the covariance.
         
        const uint & getDof ()
         Get the degrees of freedom of the state element (dimension of relative covariance and residual block)
         
        void updateIndex (const uint &new_idx)
         Update index.
         
        + + + + +

        +Public Attributes

        +SDB Dd_
         The Semi Direct Bias element of the state.
         
        + + + + + + + + + + + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::MSCEqFStateElement
        MSCEqFStateElement ()=delete
         Rule of Five.
         
        MSCEqFStateElement (const MSCEqFStateElement &)=default
         
        MSCEqFStateElement (MSCEqFStateElement &&)=default
         
        +MSCEqFStateElementoperator= (const MSCEqFStateElement &)=default
         
        +MSCEqFStateElementoperator= (MSCEqFStateElement &&)=default
         
         MSCEqFStateElement (const uint &idx, const uint &dof)
         Construct a MSCEqFStateElement object.
         
        - Protected Attributes inherited from msceqf::MSCEqFStateElement
        +uint idx_
         Starting index of the element in the residual, and in the covariance.
         
        +uint dof_
         Degrees of freedom of the element (dimension of relative covariance and residual block)
         
        +

        Detailed Description

        +

        This struct represent the Semi Direct bias state of the MSCEqF.

        +

        Constructor & Destructor Documentation

        + +

        ◆ MSCEqFSDBState()

        + +
        +
        + + + + + +
        + + + + + + + +
        msceqf::MSCEqFSDBState::MSCEqFSDBState (const uint & idx)
        +
        +inline
        +
        + +

        Construct an identity MSCEqFSDBState object.

        +
        Parameters
        + + +
        idxStarting index of the variable in the covariance
        +
        +
        + +
        +
        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< MSCEqFStateElement > msceqf::MSCEqFSDBState::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the Semi Direct bias (SDB) element of state of the MSCEqF.

        +
        Returns
        Clone of the SDB element
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateLeft()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFSDBState::updateLeft (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Semi Direct Bias element of the state by left multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the left side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateRight()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFSDBState::updateRight (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Semi Direct Bias element of the state by right multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the right side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.js b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.js new file mode 100644 index 0000000..503ca59 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.js @@ -0,0 +1,9 @@ +var structmsceqf_1_1_m_s_c_eq_f_s_d_b_state = +[ + [ "MSCEqFSDBState", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#aed312cc3420563250609ffa6c04c1d81", null ], + [ "MSCEqFSDBState", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a75f90fb123c5d3d4361214b805a19e0c", null ], + [ "clone", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#ac54188e937b0053709fe62506efe2bad", null ], + [ "updateLeft", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#ab5561a8eb740efdbb1a1d0dc029210fa", null ], + [ "updateRight", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a275db0af3885e1f4f5876057c97cdf6c", null ], + [ "Dd_", "structmsceqf_1_1_m_s_c_eq_f_s_d_b_state.html#a8a5178aa7e317b030b7528752981aed0", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.map b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.map new file mode 100644 index 0000000..c440893 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.md5 new file mode 100644 index 0000000..5dbc111 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.md5 @@ -0,0 +1 @@ +369e046201fe6aef78f0bfbf279e941f \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.png b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd9393008d502dd9654bf9c49051b38b9795ab5 GIT binary patch literal 6159 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 G4f-G2$Hqed literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.map b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.map new file mode 100644 index 0000000..c440893 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.md5 new file mode 100644 index 0000000..5dbc111 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.md5 @@ -0,0 +1 @@ +369e046201fe6aef78f0bfbf279e941f \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.png b/structmsceqf_1_1_m_s_c_eq_f_s_d_b_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd9393008d502dd9654bf9c49051b38b9795ab5 GIT binary patch literal 6159 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 G4f-G2$Hqed literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state-members.html b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state-members.html new file mode 100644 index 0000000..b203495 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state-members.html @@ -0,0 +1,134 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::MSCEqFSE3State Member List
        +
        +
        + +

        This is the complete list of members for msceqf::MSCEqFSE3State, including all inherited members.

        + + + + + + + + + + + + + + + + + + + +
        clone() const overridemsceqf::MSCEqFSE3Stateinlinevirtual
        dof_msceqf::MSCEqFStateElementprotected
        E_msceqf::MSCEqFSE3State
        getDof()msceqf::MSCEqFStateElementinline
        getIndex()msceqf::MSCEqFStateElementinline
        idx_msceqf::MSCEqFStateElementprotected
        MSCEqFSE3State()=deletemsceqf::MSCEqFSE3State
        MSCEqFSE3State(const uint &idx)msceqf::MSCEqFSE3Stateinline
        MSCEqFStateElement()=deletemsceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const uint &idx, const uint &dof)msceqf::MSCEqFStateElementinlineprotected
        operator=(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        operator=(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        updateIndex(const uint &new_idx)msceqf::MSCEqFStateElementinline
        updateLeft(const VectorX &delta) overridemsceqf::MSCEqFSE3Stateinlinevirtual
        updateRight(const VectorX &delta) overridemsceqf::MSCEqFSE3Stateinlinevirtual
        ~MSCEqFStateElement()=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html new file mode 100644 index 0000000..321f500 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html @@ -0,0 +1,352 @@ + + + + + + + +MSCEqF: msceqf::MSCEqFSE3State Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::MSCEqFSE3State Struct Referencefinal
        +
        +
        + +

        This struct represent the Special Euclidean Group of dimension 3 state of the MSCEqF. + More...

        + +

        #include <state_elements.hpp>

        +
        +Inheritance diagram for msceqf::MSCEqFSE3State:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::MSCEqFSE3State:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        MSCEqFSE3State ()=delete
         Deleted default constructor.
         
         MSCEqFSE3State (const uint &idx)
         Construct an identity MSCEqFSE3State object.
         
        void updateRight (const VectorX &delta) override
         Update the Special Euclidean Group element of the state by right multiplication.
         
        void updateLeft (const VectorX &delta) override
         Update the Special Euclidean Group element of the state by left multiplication.
         
        std::unique_ptr< MSCEqFStateElementclone () const override
         Clone the Special Euclidean Group (SE3) element of state of the MSCEqF.
         
        - Public Member Functions inherited from msceqf::MSCEqFStateElement
        const uint & getIndex ()
         Get the starting index of the state element in the residual, and in the covariance.
         
        const uint & getDof ()
         Get the degrees of freedom of the state element (dimension of relative covariance and residual block)
         
        void updateIndex (const uint &new_idx)
         Update index.
         
        + + + + +

        +Public Attributes

        +SE3 E_
         The Special Euclidean element of the state.
         
        + + + + + + + + + + + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::MSCEqFStateElement
        MSCEqFStateElement ()=delete
         Rule of Five.
         
        MSCEqFStateElement (const MSCEqFStateElement &)=default
         
        MSCEqFStateElement (MSCEqFStateElement &&)=default
         
        +MSCEqFStateElementoperator= (const MSCEqFStateElement &)=default
         
        +MSCEqFStateElementoperator= (MSCEqFStateElement &&)=default
         
         MSCEqFStateElement (const uint &idx, const uint &dof)
         Construct a MSCEqFStateElement object.
         
        - Protected Attributes inherited from msceqf::MSCEqFStateElement
        +uint idx_
         Starting index of the element in the residual, and in the covariance.
         
        +uint dof_
         Degrees of freedom of the element (dimension of relative covariance and residual block)
         
        +

        Detailed Description

        +

        This struct represent the Special Euclidean Group of dimension 3 state of the MSCEqF.

        +

        Constructor & Destructor Documentation

        + +

        ◆ MSCEqFSE3State()

        + +
        +
        + + + + + +
        + + + + + + + +
        msceqf::MSCEqFSE3State::MSCEqFSE3State (const uint & idx)
        +
        +inline
        +
        + +

        Construct an identity MSCEqFSE3State object.

        +
        Parameters
        + + +
        idxStarting index of the variable in the covariance
        +
        +
        + +
        +
        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< MSCEqFStateElement > msceqf::MSCEqFSE3State::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the Special Euclidean Group (SE3) element of state of the MSCEqF.

        +
        Returns
        Clone of the SE3 element
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateLeft()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFSE3State::updateLeft (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Special Euclidean Group element of the state by left multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the left side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateRight()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFSE3State::updateRight (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Special Euclidean Group element of the state by right multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the right side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state.js b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state.js new file mode 100644 index 0000000..934c4fd --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state.js @@ -0,0 +1,9 @@ +var structmsceqf_1_1_m_s_c_eq_f_s_e3_state = +[ + [ "MSCEqFSE3State", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a778cea47a1d588d385b2cddae63ee052", null ], + [ "MSCEqFSE3State", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a74fc4265af22a3aff056b75e60ae858b", null ], + [ "clone", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#a550e5c1d5306407e4f155c1de772c165", null ], + [ "updateLeft", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#ab41b071e0f3a55feb8191c9ac0704791", null ], + [ "updateRight", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#ace3dc196bb8db7dd700af8a7a02795be", null ], + [ "E_", "structmsceqf_1_1_m_s_c_eq_f_s_e3_state.html#abf952efaefe220a9a9004cd697cbd719", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.map b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.map new file mode 100644 index 0000000..78ddf4e --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.md5 new file mode 100644 index 0000000..6fd7584 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.md5 @@ -0,0 +1 @@ +41c706be1cead796a4003e2eef9874fb \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.png b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd069b810117dffa46a1307059cf2db88c96096 GIT binary patch literal 6109 zcmcIoc{J4TzyDau8e_|3-@dkzosng-OR{8*vQ`*bv+t6zZy}08B9bkUeJ~iZC5Fm6 ziR@%w2KVv%-E;1_=bqo6m*I0}=5wCU^SqbW@{Tps*SO z&Z{HbHr=0GbCyKZ2$l@jJ(mnm#5K@Zi&T3$NO0YV`XI@e9OJ}O%<;hfO02#>JY^S? z5d-<}i#||mE3?7v?!Q9+?yZ#3gq z5J_8);%(vc4^%Z+TaI_fiRdl8*X|vjIYKy3Z7cCB=m3#^QjZS=+A{n1pB)EZW0cs? z0hh$Ao9c!Ro|q*?+FiS1rbp`_@F5G{rDGu}nUGp(Zx83U>+F!w`u4lvZ_=;%{_Opg z>Ol#gC6oPw1KA$~V`Hp*sgzY!RhGTAZj*7t?+hFUUn|2A9y~FWo}QkFfK35iU0qvu z_vE}ho~FND>}<;{EG)cye59G;Ht3QP5%dLi^n>2#Z4(nY(+?j!C>-78;N<*^H@8{r zD=qOkCK4;{JExXgXYpuBLw)fYL@A_2YvuBLmb6!yE;m)$>Oe;xWE|NP<@K!s%)LhbS0uj77>9?`B zM*&ULKc<+)CF5q=A_=pzkqr&k&c2F?i))XfVdc3P&zsf*V`L zAUjVhf#}*<9>Wd}(yy(p1%4jOscqPN);m|{L3lEyVtMoNCaQL3W+pr(1-2w?9d_&! zmz+E{t}mMLtg%rsDk{pk&p=;akd>8HN?N+$(a^$wt4l=xB=5 z!$kS1ynk*!clsnED#{nDp~k?#K$K%*WV99*zqicBRsh!GM21e}t;)VDEC2rO+qdq~ z(b2q6OZCT_?^zic)!N$HNCwCBZ!I2P2LEnzUQK+h_cK7vl{HS)6bR6K= zKRV)(;A(da9-Hc=m0St-GxxVw_Z z-O|!RgcT5EpuQXhCM0nqQY#eHPnM*^`O}v%AlRNeOQwmwV0-%@lOzzRldi&>nUxQE zFDA-?9~~W?@apPn)uY;yrfo@qt{RuIU!!GK-z)9NFz!-PQk5PAHN6}J0}bm{jljUb zG*=(ar`KGf|AhXwV;VW-PM+c990C{I; zCtNvDrX7oAfWu=zDfGRRrD?71Xlibjv~7j@UMsT;8NBXT!k3ajH8nMGm0$!l4UMGV z+FcL@`l+cY!x9riVdjnPZ4F;vx%t6d`iScgJw1JTW@bTA(Rpk%J#KaUv!u)D6=r5; z9v&V@-hHa$OU7k8N5|;1Mi?JwhrX7Yi|Yt5mN`Rb%b1$7gfV_QT~~ZKkkj*daioMv z?$P&f5YGg-B&k*Hqqc*sKfD*?CA}96p~1KkgItx$+S<{dHV$10ZN)|f`(yd}`5T*? z-}VoF#fy8N)hobLAGFvZR1S0X-tmIqmu2;6o8kG*11331@;R=!simzEBr zN|*f?dP{ll9n1V_`Zi{ur$>9%=>c2wZFoG(9#=i>F~e|t*yBj z7>-Yl*2%*`&Beql{H$>y4^P+qr?ac;Sw;p+MtVAo!AM`9?iDiZbxh3e>bQ1!d3i9# z)YOz24%Z0?2=E5Yx-{7+FOs1fdhp44*y(6@^^^OwikG*yK!$Fo_}1p;8?Xb0p=!I= zyy_w)Cc08D5}u3O=(Eea3Gls1PiOY>@ZjP56&e);q?9A5pQB@6m1P~WV+sI? zkMGUBM&H!z>}=KXyPw@SHMO-}h<6*jZ@610ma((5mkwdd;juE&h;!%8ZLfZw-t7I- z+Z#KJ_|nre^xpv?NEnzS`xPp-cgVumrZI!!kG;I!EG#&cHPPZnBnE})c>=c=NE8(n zp>Pw?C=EV>`_sbPBGYc0zkA@wP$lbtITl*ZYs?@?1f-1r>Q7l(Zj~JO@%qP(9133K zkjLB?mJvMOxhd$rqa*gq7izHI&V``@UKlYTHDs$_J~b_EORfH_hd=_`o{L$*z_vY2 zNyA^hWHT`}ZJV0nav3Y{1fe%FGKxrKm$yIMUhMAg*Ib`!&gR(dzAtsR$)BOrtc(;& z;8JEYF47x9?H%t;FZTo7y%0MzI%?+d%DOqQt*h(&&CIKsW@Ze4{>;N(uY(5 zG<#=y0};v;P2bFZ*8YrLb4?6 zNXu<7NmuVRKznm!%1xSFa{={U#*TEnR?YMl1F8^~4QfNlByS zr$6f-3w796O(6srduaYV&`B6%9d3)H_?sL?Bn#SG)AaWT-%#o4u_2Yc0Y-eq8yFd- z4jnR3NA<@oYt}4@yJE3e!omWjw6wHdmITQ<=2QjL^Tzg~aT8$InB-&}Kxq;sMc%Gt z?&PH<)Y(mc23|$#2t0|5B>PZSMp#~^d7+2)ob4j~?n&$J?uMY>^YfeLpSpg}&HbfU zX44;Iq9otg+ETZ$fJ3c#ys1My0R5$|ic);YYR5-Me>rGIXm@ zc+o4?O>oTdE<47}#DrNt2N41IVPVp|zrVCza@1Hf1A5)uNY5@utD>Tkq9YI!8ylfp z_{6eo^sI7aw1XDksfZT@r3MwDldplJ-QY{z0F1eHQ040EETW*Om{wLMc6O<+S6H2> zPjf%&5z0-`;Nuk%5|WaYox{!S^fq`es#P@avc-1VQ`6DSuM4%ew*%xzEhykWUUd)S zMo4Bk7FqpSQ#$1QLQhLW14G=TA<6Su9{sy4+vKQw^CrKxwl-s|#z=(?Qc7MP ztS+Q`>lXgIJa@=8!yQY@XEimlckbLtjfy&_silSL`1a0#+soH?^suC?4F4jt1-FFm zKmgcX8mr*uR1Qo(*`K8c>EQ$Ge5|f6(2T!$ww**SWy{jCmf8Hv6@U?(a>Q@#4CidU zS2%_-ByuP`!#D=2h^x!^437M=2h{CNXg_!2+)JKLAvtnWZ68Gsh&#@N%dDoJ^J zMWfDh_B?)c6xEm6b3Z*NXJR24B=AM1p5SnIsYrvpi7<2e^XFaSr5`@L9T_nJ;LZ2O z@ko)MzhJ0#rwH()=s2&9jON2lwfmPJRQvz6hYfvb4%$Nzz22*bel-=%Xz%JOD#J=N zB)v4(9^yr2kB#_k+xT+IRwTVqw|)UH68j&$*nZ;1g@wnONm7wNQL3@z9Nv&N(HsBu z=#^OUf~BSvu8nwu2liVTX|TMfr+38oOiRu5QaLh!^ba>_T|;eBv@=_yBkE5vhdUXZ zXBAE5%1Kkee!0k3zpQHleJZue%06G?uzsR3ucmg1B8!1gq6RIiyFWH{VCe2DwQm8=bUOG ztbIOD-n`twv?#Iivaup~pSw^$izN}%Z5r0%l?<%3N4<;LSlik{gwIlLjq`D7A?5m9 zqAwElnh~;_U%Rt8J$W8*26AuDQM292a8_UWGD1f+lGT5FFr!LFA$&_uqO``re%qmQ zgpNVN=7KlMzKV*XY3x0TUTjyT ztJ*83>mJ9MU3liq2qJiOpIMG+mh6Ku1zbUySsrL03&rBCEUdr?2H7 zdH8iN7q$2gjItw-97?Iag3x^n78n;07dS>Nyoa<$TfYyn*W zX1i2y8SU%?^z3!uRN{~9_WqOi`PUIUgp<1zsrlMpD+hV(t=)SX9WDQ3t?z|2!gmEu zJU%9@u9j6@K_a=i!-$gBL94P&rzb~H`0`i#KtB|hmv^AfHsokmQ&p7&AeimY zOd8eV;v!te33hr2p0Y5F!DtQjXGxODyG^tL)l8V5N1vYTVT7+M?=T8BU(-sZhB7Ob+Mz?Q2 z0fOdCkM;G@x;O7!6f}5EJ2Pl!WNFF9Onq)*V&W_vOiWB52pu>aFjOpnOFX>2J63*F z1BIS%BFezd9uKS@Wt18%AZS)`>kc5n8CY1NfNJ|-gW<{z-lQ7HQHXr{lze5P-q?W+ z(%@qN%%75)8d2qdBZcDPyfZ!S_ zHVWp&vnzNBKB5xn*CDLC>(ohR8@Ce(H|MKI|H`xpCB%z>)&jPIO$bw3dKoAJ5I#Dc z!rS1qtwTc$>d|y_<1DPKTOl$6FiKlz=N`;Je}5+smNh?DzgLmnxN#$KzR+bdJRC}3 zmmkQ3@3>+@r#TdTX&nc0RL9EiRRMP#xvL6vZIx{sX%51ZlwA(g80cx$GBbzSu0+F9 zJi=oJ($7^%yd?e5sRr-UWM!PqJRHNo|FuAy9%^lkARB59^4nhd!30S-edRe}EH@N3 zw6dZpyd4X4ssrd`;&FHV<3E+askP*uqq#WqcNPbQ|Nedd%H29xZEY(dK9J>JvN)m78cp$yzzq2iNr!Ynp84rQ7O5ViGOs>Jkn{yq#R}oet zCsKsog9{1@T2?HJ0ecx68~eT1m7ScFz@*ga*?=A&1)}kcqi@K|=!@ zz&i@u@xcYASdAy`?P?<a3?Z0mI?@YNigstZsne80EG-X@WK)%|Kmp~4wYbdGB*-k zSa^mfU%$&Uf%6{vSlw(4fmAj8_cwS+$;j+bs5lCGE*>cb`U560)f- zXzwa;FcJ^@-~bOm523?w#=^|qgM-npUU7os0i(JvWKvjIc;4m`+bqC70NyOrQKaf< z+MxzaYR~=3&!2H`Z=~%90M7dtYTlS5V59j(M5w?V0v4+g+<3_DZDnNzP#n_(zvj0# z@urD3)`&IYdU#9>W$;EDh5ruToFsfuod+h<7*=DM2tFo1f4+Tqmd( zO%jJ?=thBzmT^a^4Si^`200zCC@saN@TzYxIfA`BI1gNLJ=o0S{<*4;c#!6=7^ z58$?NhOYP02o-o+7q}w|9tRq-6mK^6*Ufcx_X{}$OhgAjl9ZgB1c15N$w^MYDp2?f zX-7Uexr@1>haw{=S-=GQekx&MVZ{B}RRPA z#D`E+B=g_BdP0ci=Hulh!6kER+u8Ag<0OF%qLlOp1_yCV_@C1@*$7Yj>dnAZ(7i}7 zaMDiVXaf^75{QnD?u^WBU90Fb~G zbU#{Y2MpBKM@N2Dl!@Q@_`5tY@fIfYpf{p7Qyd2pVdv^P`ELi&`~Bo}u65;<_y<{0 z`!?5CvCknZ^TK68rAEhvm@w>{f_c1k&2muDs1zv6S~`OGkkJ;Z;(NybmYoh0(j|aE zj4Ujio|eOlT!CgWy?Ny1DOqCjo*wdcaYoV(KQ|G@&(aVwJ?Twmk( SClAc)p&Od|8s%!XPyP$(9m4DY literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.map b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.map new file mode 100644 index 0000000..78ddf4e --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.md5 new file mode 100644 index 0000000..6fd7584 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.md5 @@ -0,0 +1 @@ +41c706be1cead796a4003e2eef9874fb \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.png b/structmsceqf_1_1_m_s_c_eq_f_s_e3_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd069b810117dffa46a1307059cf2db88c96096 GIT binary patch literal 6109 zcmcIoc{J4TzyDau8e_|3-@dkzosng-OR{8*vQ`*bv+t6zZy}08B9bkUeJ~iZC5Fm6 ziR@%w2KVv%-E;1_=bqo6m*I0}=5wCU^SqbW@{Tps*SO z&Z{HbHr=0GbCyKZ2$l@jJ(mnm#5K@Zi&T3$NO0YV`XI@e9OJ}O%<;hfO02#>JY^S? z5d-<}i#||mE3?7v?!Q9+?yZ#3gq z5J_8);%(vc4^%Z+TaI_fiRdl8*X|vjIYKy3Z7cCB=m3#^QjZS=+A{n1pB)EZW0cs? z0hh$Ao9c!Ro|q*?+FiS1rbp`_@F5G{rDGu}nUGp(Zx83U>+F!w`u4lvZ_=;%{_Opg z>Ol#gC6oPw1KA$~V`Hp*sgzY!RhGTAZj*7t?+hFUUn|2A9y~FWo}QkFfK35iU0qvu z_vE}ho~FND>}<;{EG)cye59G;Ht3QP5%dLi^n>2#Z4(nY(+?j!C>-78;N<*^H@8{r zD=qOkCK4;{JExXgXYpuBLw)fYL@A_2YvuBLmb6!yE;m)$>Oe;xWE|NP<@K!s%)LhbS0uj77>9?`B zM*&ULKc<+)CF5q=A_=pzkqr&k&c2F?i))XfVdc3P&zsf*V`L zAUjVhf#}*<9>Wd}(yy(p1%4jOscqPN);m|{L3lEyVtMoNCaQL3W+pr(1-2w?9d_&! zmz+E{t}mMLtg%rsDk{pk&p=;akd>8HN?N+$(a^$wt4l=xB=5 z!$kS1ynk*!clsnED#{nDp~k?#K$K%*WV99*zqicBRsh!GM21e}t;)VDEC2rO+qdq~ z(b2q6OZCT_?^zic)!N$HNCwCBZ!I2P2LEnzUQK+h_cK7vl{HS)6bR6K= zKRV)(;A(da9-Hc=m0St-GxxVw_Z z-O|!RgcT5EpuQXhCM0nqQY#eHPnM*^`O}v%AlRNeOQwmwV0-%@lOzzRldi&>nUxQE zFDA-?9~~W?@apPn)uY;yrfo@qt{RuIU!!GK-z)9NFz!-PQk5PAHN6}J0}bm{jljUb zG*=(ar`KGf|AhXwV;VW-PM+c990C{I; zCtNvDrX7oAfWu=zDfGRRrD?71Xlibjv~7j@UMsT;8NBXT!k3ajH8nMGm0$!l4UMGV z+FcL@`l+cY!x9riVdjnPZ4F;vx%t6d`iScgJw1JTW@bTA(Rpk%J#KaUv!u)D6=r5; z9v&V@-hHa$OU7k8N5|;1Mi?JwhrX7Yi|Yt5mN`Rb%b1$7gfV_QT~~ZKkkj*daioMv z?$P&f5YGg-B&k*Hqqc*sKfD*?CA}96p~1KkgItx$+S<{dHV$10ZN)|f`(yd}`5T*? z-}VoF#fy8N)hobLAGFvZR1S0X-tmIqmu2;6o8kG*11331@;R=!simzEBr zN|*f?dP{ll9n1V_`Zi{ur$>9%=>c2wZFoG(9#=i>F~e|t*yBj z7>-Yl*2%*`&Beql{H$>y4^P+qr?ac;Sw;p+MtVAo!AM`9?iDiZbxh3e>bQ1!d3i9# z)YOz24%Z0?2=E5Yx-{7+FOs1fdhp44*y(6@^^^OwikG*yK!$Fo_}1p;8?Xb0p=!I= zyy_w)Cc08D5}u3O=(Eea3Gls1PiOY>@ZjP56&e);q?9A5pQB@6m1P~WV+sI? zkMGUBM&H!z>}=KXyPw@SHMO-}h<6*jZ@610ma((5mkwdd;juE&h;!%8ZLfZw-t7I- z+Z#KJ_|nre^xpv?NEnzS`xPp-cgVumrZI!!kG;I!EG#&cHPPZnBnE})c>=c=NE8(n zp>Pw?C=EV>`_sbPBGYc0zkA@wP$lbtITl*ZYs?@?1f-1r>Q7l(Zj~JO@%qP(9133K zkjLB?mJvMOxhd$rqa*gq7izHI&V``@UKlYTHDs$_J~b_EORfH_hd=_`o{L$*z_vY2 zNyA^hWHT`}ZJV0nav3Y{1fe%FGKxrKm$yIMUhMAg*Ib`!&gR(dzAtsR$)BOrtc(;& z;8JEYF47x9?H%t;FZTo7y%0MzI%?+d%DOqQt*h(&&CIKsW@Ze4{>;N(uY(5 zG<#=y0};v;P2bFZ*8YrLb4?6 zNXu<7NmuVRKznm!%1xSFa{={U#*TEnR?YMl1F8^~4QfNlByS zr$6f-3w796O(6srduaYV&`B6%9d3)H_?sL?Bn#SG)AaWT-%#o4u_2Yc0Y-eq8yFd- z4jnR3NA<@oYt}4@yJE3e!omWjw6wHdmITQ<=2QjL^Tzg~aT8$InB-&}Kxq;sMc%Gt z?&PH<)Y(mc23|$#2t0|5B>PZSMp#~^d7+2)ob4j~?n&$J?uMY>^YfeLpSpg}&HbfU zX44;Iq9otg+ETZ$fJ3c#ys1My0R5$|ic);YYR5-Me>rGIXm@ zc+o4?O>oTdE<47}#DrNt2N41IVPVp|zrVCza@1Hf1A5)uNY5@utD>Tkq9YI!8ylfp z_{6eo^sI7aw1XDksfZT@r3MwDldplJ-QY{z0F1eHQ040EETW*Om{wLMc6O<+S6H2> zPjf%&5z0-`;Nuk%5|WaYox{!S^fq`es#P@avc-1VQ`6DSuM4%ew*%xzEhykWUUd)S zMo4Bk7FqpSQ#$1QLQhLW14G=TA<6Su9{sy4+vKQw^CrKxwl-s|#z=(?Qc7MP ztS+Q`>lXgIJa@=8!yQY@XEimlckbLtjfy&_silSL`1a0#+soH?^suC?4F4jt1-FFm zKmgcX8mr*uR1Qo(*`K8c>EQ$Ge5|f6(2T!$ww**SWy{jCmf8Hv6@U?(a>Q@#4CidU zS2%_-ByuP`!#D=2h^x!^437M=2h{CNXg_!2+)JKLAvtnWZ68Gsh&#@N%dDoJ^J zMWfDh_B?)c6xEm6b3Z*NXJR24B=AM1p5SnIsYrvpi7<2e^XFaSr5`@L9T_nJ;LZ2O z@ko)MzhJ0#rwH()=s2&9jON2lwfmPJRQvz6hYfvb4%$Nzz22*bel-=%Xz%JOD#J=N zB)v4(9^yr2kB#_k+xT+IRwTVqw|)UH68j&$*nZ;1g@wnONm7wNQL3@z9Nv&N(HsBu z=#^OUf~BSvu8nwu2liVTX|TMfr+38oOiRu5QaLh!^ba>_T|;eBv@=_yBkE5vhdUXZ zXBAE5%1Kkee!0k3zpQHleJZue%06G?uzsR3ucmg1B8!1gq6RIiyFWH{VCe2DwQm8=bUOG ztbIOD-n`twv?#Iivaup~pSw^$izN}%Z5r0%l?<%3N4<;LSlik{gwIlLjq`D7A?5m9 zqAwElnh~;_U%Rt8J$W8*26AuDQM292a8_UWGD1f+lGT5FFr!LFA$&_uqO``re%qmQ zgpNVN=7KlMzKV*XY3x0TUTjyT ztJ*83>mJ9MU3liq2qJiOpIMG+mh6Ku1zbUySsrL03&rBCEUdr?2H7 zdH8iN7q$2gjItw-97?Iag3x^n78n;07dS>Nyoa<$TfYyn*W zX1i2y8SU%?^z3!uRN{~9_WqOi`PUIUgp<1zsrlMpD+hV(t=)SX9WDQ3t?z|2!gmEu zJU%9@u9j6@K_a=i!-$gBL94P&rzb~H`0`i#KtB|hmv^AfHsokmQ&p7&AeimY zOd8eV;v!te33hr2p0Y5F!DtQjXGxODyG^tL)l8V5N1vYTVT7+M?=T8BU(-sZhB7Ob+Mz?Q2 z0fOdCkM;G@x;O7!6f}5EJ2Pl!WNFF9Onq)*V&W_vOiWB52pu>aFjOpnOFX>2J63*F z1BIS%BFezd9uKS@Wt18%AZS)`>kc5n8CY1NfNJ|-gW<{z-lQ7HQHXr{lze5P-q?W+ z(%@qN%%75)8d2qdBZcDPyfZ!S_ zHVWp&vnzNBKB5xn*CDLC>(ohR8@Ce(H|MKI|H`xpCB%z>)&jPIO$bw3dKoAJ5I#Dc z!rS1qtwTc$>d|y_<1DPKTOl$6FiKlz=N`;Je}5+smNh?DzgLmnxN#$KzR+bdJRC}3 zmmkQ3@3>+@r#TdTX&nc0RL9EiRRMP#xvL6vZIx{sX%51ZlwA(g80cx$GBbzSu0+F9 zJi=oJ($7^%yd?e5sRr-UWM!PqJRHNo|FuAy9%^lkARB59^4nhd!30S-edRe}EH@N3 zw6dZpyd4X4ssrd`;&FHV<3E+askP*uqq#WqcNPbQ|Nedd%H29xZEY(dK9J>JvN)m78cp$yzzq2iNr!Ynp84rQ7O5ViGOs>Jkn{yq#R}oet zCsKsog9{1@T2?HJ0ecx68~eT1m7ScFz@*ga*?=A&1)}kcqi@K|=!@ zz&i@u@xcYASdAy`?P?<a3?Z0mI?@YNigstZsne80EG-X@WK)%|Kmp~4wYbdGB*-k zSa^mfU%$&Uf%6{vSlw(4fmAj8_cwS+$;j+bs5lCGE*>cb`U560)f- zXzwa;FcJ^@-~bOm523?w#=^|qgM-npUU7os0i(JvWKvjIc;4m`+bqC70NyOrQKaf< z+MxzaYR~=3&!2H`Z=~%90M7dtYTlS5V59j(M5w?V0v4+g+<3_DZDnNzP#n_(zvj0# z@urD3)`&IYdU#9>W$;EDh5ruToFsfuod+h<7*=DM2tFo1f4+Tqmd( zO%jJ?=thBzmT^a^4Si^`200zCC@saN@TzYxIfA`BI1gNLJ=o0S{<*4;c#!6=7^ z58$?NhOYP02o-o+7q}w|9tRq-6mK^6*Ufcx_X{}$OhgAjl9ZgB1c15N$w^MYDp2?f zX-7Uexr@1>haw{=S-=GQekx&MVZ{B}RRPA z#D`E+B=g_BdP0ci=Hulh!6kER+u8Ag<0OF%qLlOp1_yCV_@C1@*$7Yj>dnAZ(7i}7 zaMDiVXaf^75{QnD?u^WBU90Fb~G zbU#{Y2MpBKM@N2Dl!@Q@_`5tY@fIfYpf{p7Qyd2pVdv^P`ELi&`~Bo}u65;<_y<{0 z`!?5CvCknZ^TK68rAEhvm@w>{f_c1k&2muDs1zv6S~`OGkkJ;Z;(NybmYoh0(j|aE zj4Ujio|eOlT!CgWy?Ny1DOqCjo*wdcaYoV(KQ|G@&(aVwJ?Twmk( SClAc)p&Od|8s%!XPyP$(9m4DY literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state-members.html b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state-members.html new file mode 100644 index 0000000..24da71d --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state-members.html @@ -0,0 +1,134 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::MSCEqFSOT3State Member List
        +
        +
        + +

        This is the complete list of members for msceqf::MSCEqFSOT3State, including all inherited members.

        + + + + + + + + + + + + + + + + + + + +
        clone() const overridemsceqf::MSCEqFSOT3Stateinlinevirtual
        dof_msceqf::MSCEqFStateElementprotected
        getDof()msceqf::MSCEqFStateElementinline
        getIndex()msceqf::MSCEqFStateElementinline
        idx_msceqf::MSCEqFStateElementprotected
        MSCEqFSOT3State()=deletemsceqf::MSCEqFSOT3State
        MSCEqFSOT3State(const uint &idx)msceqf::MSCEqFSOT3Stateinline
        MSCEqFStateElement()=deletemsceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        MSCEqFStateElement(const uint &idx, const uint &dof)msceqf::MSCEqFStateElementinlineprotected
        operator=(const MSCEqFStateElement &)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        operator=(MSCEqFStateElement &&)=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementprotected
        Q_msceqf::MSCEqFSOT3State
        updateIndex(const uint &new_idx)msceqf::MSCEqFStateElementinline
        updateLeft(const VectorX &delta) overridemsceqf::MSCEqFSOT3Stateinlinevirtual
        updateRight(const VectorX &delta) overridemsceqf::MSCEqFSOT3Stateinlinevirtual
        ~MSCEqFStateElement()=default (defined in msceqf::MSCEqFStateElement)msceqf::MSCEqFStateElementvirtual
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html new file mode 100644 index 0000000..1be1d2c --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html @@ -0,0 +1,352 @@ + + + + + + + +MSCEqF: msceqf::MSCEqFSOT3State Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::MSCEqFSOT3State Struct Referencefinal
        +
        +
        + +

        This struct represent the Scaled Orthogonal Transforms state of the MSCEqF. + More...

        + +

        #include <state_elements.hpp>

        +
        +Inheritance diagram for msceqf::MSCEqFSOT3State:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::MSCEqFSOT3State:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        MSCEqFSOT3State ()=delete
         Deleted default constructor.
         
         MSCEqFSOT3State (const uint &idx)
         Construct an identity MSCEqFSOT3State object.
         
        void updateRight (const VectorX &delta) override
         Update the Scaled Orthogonal Transforms element of the state by right multiplication.
         
        void updateLeft (const VectorX &delta) override
         Update the Scaled Orthogonal Transforms element of the state by left multiplication.
         
        std::unique_ptr< MSCEqFStateElementclone () const override
         Clone the Scaled Orthogonal Transforms (SOT3) element of state of the MSCEqF.
         
        - Public Member Functions inherited from msceqf::MSCEqFStateElement
        const uint & getIndex ()
         Get the starting index of the state element in the residual, and in the covariance.
         
        const uint & getDof ()
         Get the degrees of freedom of the state element (dimension of relative covariance and residual block)
         
        void updateIndex (const uint &new_idx)
         Update index.
         
        + + + + +

        +Public Attributes

        +SOT3 Q_
         The Scaled Orthogonal Transforms element of the state.
         
        + + + + + + + + + + + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::MSCEqFStateElement
        MSCEqFStateElement ()=delete
         Rule of Five.
         
        MSCEqFStateElement (const MSCEqFStateElement &)=default
         
        MSCEqFStateElement (MSCEqFStateElement &&)=default
         
        +MSCEqFStateElementoperator= (const MSCEqFStateElement &)=default
         
        +MSCEqFStateElementoperator= (MSCEqFStateElement &&)=default
         
         MSCEqFStateElement (const uint &idx, const uint &dof)
         Construct a MSCEqFStateElement object.
         
        - Protected Attributes inherited from msceqf::MSCEqFStateElement
        +uint idx_
         Starting index of the element in the residual, and in the covariance.
         
        +uint dof_
         Degrees of freedom of the element (dimension of relative covariance and residual block)
         
        +

        Detailed Description

        +

        This struct represent the Scaled Orthogonal Transforms state of the MSCEqF.

        +

        Constructor & Destructor Documentation

        + +

        ◆ MSCEqFSOT3State()

        + +
        +
        + + + + + +
        + + + + + + + +
        msceqf::MSCEqFSOT3State::MSCEqFSOT3State (const uint & idx)
        +
        +inline
        +
        + +

        Construct an identity MSCEqFSOT3State object.

        +
        Parameters
        + + +
        idxStarting index of the variable in the covariance
        +
        +
        + +
        +
        +

        Member Function Documentation

        + +

        ◆ clone()

        + +
        +
        + + + + + +
        + + + + + + + +
        std::unique_ptr< MSCEqFStateElement > msceqf::MSCEqFSOT3State::clone () const
        +
        +inlineoverridevirtual
        +
        + +

        Clone the Scaled Orthogonal Transforms (SOT3) element of state of the MSCEqF.

        +
        Returns
        Clone of the SOT3 element
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateLeft()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFSOT3State::updateLeft (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Scaled Orthogonal Transforms element of the state by left multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the left side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        + +

        ◆ updateRight()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::MSCEqFSOT3State::updateRight (const VectorX & delta)
        +
        +inlineoverridevirtual
        +
        + +

        Update the Scaled Orthogonal Transforms element of the state by right multiplication.

        +
        Parameters
        + + +
        deltaDelta vector to update the state element with on the right side
        +
        +
        + +

        Implements msceqf::MSCEqFStateElement.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.js b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.js new file mode 100644 index 0000000..d726670 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.js @@ -0,0 +1,9 @@ +var structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state = +[ + [ "MSCEqFSOT3State", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a149aa3e73d21920ee993f7e03d35cc46", null ], + [ "MSCEqFSOT3State", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a80c3df4e312fe54cb1aea249e06d25a2", null ], + [ "clone", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a8d787857699430eb312419a8b512eaed", null ], + [ "updateLeft", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#a8ae5dc4e2fa9ac8ad81718704649da0f", null ], + [ "updateRight", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#ab0d5eb9400a99969dab552b49dbc83fc", null ], + [ "Q_", "structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state.html#aee9bc3dfa678e5432fa16633f3132228", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.map b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.map new file mode 100644 index 0000000..17e0078 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.md5 new file mode 100644 index 0000000..07706c8 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.md5 @@ -0,0 +1 @@ +621483841e81b17ec22347dff3e0fb88 \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.png b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa30028db26932b79fce7ccae6d80e4fd855be4 GIT binary patch literal 6373 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.map b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.map new file mode 100644 index 0000000..17e0078 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.md5 b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.md5 new file mode 100644 index 0000000..07706c8 --- /dev/null +++ b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.md5 @@ -0,0 +1 @@ +621483841e81b17ec22347dff3e0fb88 \ No newline at end of file diff --git a/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.png b/structmsceqf_1_1_m_s_c_eq_f_s_o_t3_state__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa30028db26932b79fce7ccae6d80e4fd855be4 GIT binary patch literal 6373 zcmcgxcRW_{+df$#d-Yi1A?hI`n~;$$WF&hlB4lUpt)h%55|R*EiBPtuLPWNV?7ioE zKfm|=eBQs_f8USKaX9BZ-*cb)-1l`~*Y(8c+*BbaWg#iL9 zx;-^HG&kI0Cf~9%sZ7zZx^+E{$!)6P;<1l+yNG5Y#Ymbn*S~mI(_nE-o{{bcg%0>-J$-diCF>?)?_J&A|t}>M4IYrteQdz6It4P z#UoHeQ=TEw{6UAy)soxQ>2;`Pw@mRiw>I-EKBB2gTcY5pZSlA1g^4ncc0_8K;9}d! zuMy-f=j*Il$&}+F(qozgX|S4Pkxwk`tp(!=glWU9xYE*5WSlwcJw6(fKeD9vmOlOz zyw}UMx4(Zcesg;}B0Zha+SDVu6HQ!JRwm)OKu3D+Tu+|H zc>*FL>xsq?%=X6SX4#`%7t_yPH0C_zhvLBO0$Lqj9*6+Jz@V;vOw*_yPg~#cnh)1a@|IHD1e1 zWB!|3fuC;`HkX)v)-f_7PS+$tjH+E&DOjb#KRx_sJyPRV<2FU4oWK-;f0m+ge4Gt& zT^*B&zaYa@|7f?hIfhnOPcIBkv0uGPlPX{lsdFh@2`%sHDtPVMHT?=B6O%=(hTiA} z8Naz=x6xY9wav}2f`Wn{$BZ;ZR|L{EBfC-s7Vl3PSgD#5(bCb0$Vf<}8IwNvvd`Vp z(lQ@U8`m;DKd+XPlY<$irKK&@ekE&bWhH;BFolkk@Q$%@ueRLr8=7jT0sf7RjlTnD zDOglFI5;pu`}_M`G%3SXFapk=+x>H}6wl4fZl|EgX2)OL&(u4{#>`8- z%n2i>4OAdxLPA2VpdRTUzaJ?tUnXW}v$M$hqiA_o*emNGepmwoSdlM zyg54+v_Esc?)2m^P0$KY%w?qAV);yVMFpMHKuHVarObcd{hHraw7{c{X%aXct(MGf zHQ$@(vo>+Y!qC(-K1ud~IGIPgwT&$(esIv}{#YGjkzw&yNGlZ+Q|wgRtA_o_#lA-h(uNi46>Kaj5#;DZGmE>tZ6+il`ny=#K!o6m=)Gb}On~R(>zniD4S|7y0q*+1(_?Sks-Hf6N|Ozc zS{eBiX4mz+si%iJ?z})`QW7Q7*wl0e{Y2H75vi-M*S&M6!&~9t)VB@twU=gCY;1LW zuuV)(-ZIe?M$NzwsgcSre~IpO(CG>C@&{W!->!5Tux^f~ z#=H{vvZvr=p0RLnaIjG9_NUx#Zse1&f`Y=t)Kpk+?=3QBF*5WM;?3Fb_-$?|Np~(s zN5?+v$}CDV-+mPn>Buc!vt`JV4P1~W>_9OxIx6J!o6oc%(CmspuFagFHs;yW>+IP} zOZU;}gY5we5+tvnfR?)F`wMXrq+`ZCHYSFHnVA{G$H#?!jm2u#dd$;MQ!fu!C&5zt zUc9`#m)Y5a%Rhdchp_t!^?06k&G_$6cO>5%u5zw;FfQxv=Ef1B(3F~h5(=HgrYkD_ zjPgAo%WJk4QsbgAF1ICd9{dmz9sTs_)Am1q(xaojj)PKtOf8PSkNY_&2! z&{0spgS(D=N`_|M8v3`;UvwF2VdmlXfxgnXwlp#~`7O#ny{L%y#*G_=GkF3Tk-o~lNKcO9 zSqUjAJOrXsLQ~68GsLy{kL;~a3Hfc^^;rB(etfvwwl?`~Kb7dgSY3>K7}0uJu}O7n zPp--tWT4bSMN2E8v!9cb6JJbB?Cx;Yl}K`CqL7KC7fU7&>LajNY-*<+Kp!y)iM){! z3eZ=7MIF&GFo@{vRQH(gCB${zJA)z}W8+wIW--gol*{d%oeEI8A{39fXh=#-KZVY8 zrQ##7Y$ORS_uH0$-BE9;&0hW6YzaF%I~Y$E78Xkfho~EI3>-2ttXI>?l=>_whJHlx zJ3}}27iCqC2b!z~<`uCzIXQVO^u-8#EH8HyES2lx4ajh?vI=Q$S8cbw%60Lg)%ceH zl(0RS%V=$cnDbEfhYvazp*c5QA3h8NV1-6GIbIDaN{LfKFa7y=7IKam?&|C`H=cqr z(1rL-s$C|d*aEM6cvPtGKjXbE_;6O!*1;ic>g6d5wzHEI&bO?Letz=oSqo*-%~!I; zzjM5n2G8W^yw!_R%J!lhZj13ky{)ns_ErQpmXi;1a^l%Ny5_E2`w> zC3f1Kd*aTD7lH%^20|kfA~l~s7o|J`l*rE~0why$cD@q)FX?B)(T0Y{(jaxf!B&V7 zU+cz9SDEXi!qG;Tfd44uH}je=4NL~9q-Qz4jPJ@QKABQX?Dq#W2A@fja6?1Yz0S?e z(YchZkLky?vEp6+<-Qp^4|Dq;`lq@M#>PxBO6Wit9-b(+VFr5oCof(w{}~=mh8=DQ zC9+EI4Z$2SDZeW=wat&Q)Py&hzKb9}JJ5 zD8mym{nNBAOY>S8`7=?jgyulMeid|*j&wt#?fY&2(}X!^YHHe!#l~l5X14eCJ~cHn zyDTYrXJ*j;^JM$ypFup;O*kp4=Rv^Tf7xOk%7>H82;dqDn&*0!=XhBISsoqe+bL}lH5m4Cq3`L9nce@rLZ4A9O6JT zU9}~abMO-q2Y(xks=}b^}>Rqx~Asz06i(;=$C*OPm_}i zD=PGh>j5LxZ{Ey*{Tf|aUS56`_xH$%X=OPaP*+pSarpVN=lKnll34G4%^l`Vye+N{p!iS5<&PT60-e$5Y91m%T>;$2ah^Hr${I21Fu zeY@y>Dtt68ZE!-RP~Y*p2Kvd{={yo=CTKM^%(D$UAW12inVLWdl(vq13i9*CP$sv> zy7#-E55Vx%KZyI!ygR5;R7%On=zKLCxzQWJEnIj^9-Wt-e=E6!;v~) zT54))tt%~WEBflp#TocbiP0Hl-mB)%1PY9&<4UZ{P+neMT35c!!FglSD;uNNv>JMX zM(-8+R?-z#CH)UMY{E8MqDXeUH*rMKo;&3F<6?bG?qY*t%UxrMN8-Gl4R?n6 zq)LBl$Zrw7I_2d>8d@2)W4k;#IE}JQUR`j>=&ab8wv1AsIW5W4MGo8nJzv9A6&^xJ)65oLFa48M0AaAhu)L z(~Xy(BoOg?HHS=#&Up-`b~$Hba!IVb^X;Rr$E1(2QC`rWKt9Eg*w;B~k&Oxpiz*VQ z6%iQUyCgOlylYX&9%+tS$mWD`fnvhj%ngq)bNA*%uSEz~ zunBt`9i1Z%$soHKbLY+BgNJFZ&13yeF1Q8IM(X(+)?}p(3Be_JmZdbre}l0HcHCk$ zYY9BJ57lp675R$o!;(lTmZ(qUBd){J&p-F~`JpnbzFi~wrYa~bgi;Ruzj^inNT3*D$QouK8YNVP)O-bN|Ew0tr}Z zh$gq<;m-2p@^XTZP3v`bsbBu12CyCf)8pMe;4bW`U6V^o@xj4Jbc=O;QvYJJ z#cxeUMn)WCKiMt~nvZwxe@B1o)~!A)Uao5Zq%pjad0y*{d_iqMDHd!TGTdtR~0kPiW0q2p4xw&ZIw1xNXjn-D) ztRGrf$fZVhmi~kR?E}@A19IXLFYh;a#I>J6C$zkV?}Kx5b31Qb;^QNO2a*TMa0UTs zsH&>k2t2k7Nd6@{QYB?&G$=A)$-gz)U?{lGVj1}?zL+}vh-?;P2)ZL|ps$~8_Ss8N zTzr6WxYFtN^z7_w5HE(?V+xRE`BL-xy=@q;xsP^NF!?W}JTWfgUlPWHPFXKpxUe^V zdJ+XV?7z{$BPc3Lhzt%6X1{)o*VEIpw!KZbHqz)kToq6_QqkY9G6gK;@$=`AA3g|v zVU?DamXMa_M5FOkk}kBUum!v+r%ascuJv?!=6vtoJ)gzmY9LZ)5tNWMLC`>-N|Y(T zik)4axg;~qu#w2S^e+bsytpBMtB?+GeXhUgynjG|+t!@!^z?K#uz913yVUUZb&ZUo zVdmS~+TvKrgN9?V)+9E{i6pBh`j{KQ7l6%DQBffvC?QkLEiD|9l8jLAt{|nc>B1az zq#UVT)U>qth5DqxbI4GF$n6r-rj*NiRE&%<@7`hFn^aT03Ou+B`aWuJ&u3|{Owo=J z0ixMmpw0FsKi_(~{Rt8b3DVcsw*-pO-rkO^)qTs7dBgyUR1voQsSj4)hyo=qUnWtE zqL@k0Z+pz4II*xm8ghMC#8A(iEpRXAN9}W30 zGL~30P&ha^)O*<4+gqQW9Ao~?fmn-fGJM7 zLHHsMk4;M~Jv;jTXf6F`ujQ|u&v<*@8Swg_?Eh0$R}TeAmB=EA2h$TA2(*9zrG@`G zA+QddCxPQolozfw!bfz0JwsdLs0B*gg$0DB+u@EgpII%Py}f;OZ0y%3oGKqIoA8=j zThTy?L3Tv|DT0+l|Ngc1SRSH>W|0Uu5K&N6JcEGZjm*o-8**pG5&fTXr`Q*lFJ2^E zSy{nkjgOA9LJQ*B8q@(0#>u~bLr;zmH{F0z`7>`*6BB%>s+t`DM*RW!US$nvBu);F zoTj>p{wz?8U|i&-wnDWv4G({A+PusV*ORZs3>X@5T zAgY?0&A{-j9z38#(nOsYz_N*JY`hMHnD0(GL6(%~->!w5vvCp<5^Jk0zb#6>eg95= zmhyrU@T8$ir>K+^I?XI8`a5^-_{SF(UdF@26LkBl^d>KlQmb%4KL)rgp>et;=Xv$HCpci0kaZru+lEloOwxsKlc}!ovx|qoO$Z_?GfKG}8pn zJb(V2iZtSJhwa^g5>^Zb!!%M*6{s8Z(n*tPRCD_uikq9;anTc(u>$Q^t-p&+IH-sx zR#qtFx<#BQ{zP7e@=vl{Q!3qY(bt*!A)OiVO0L`Y8e+T?Wf^~0fev!u-5)YPC<5?SOS*YAsq!CZ)m z3~b6Sw&?43Cd+8SCq{pTAi?`U9zJ{sRuA#v?rM}0x~csMr=@=L`wBN?Y#%_HP7J=-a{(Ka4M^OuDghImc>#}$Pkz@g9$;5Badem?Z`1={3m)EF6rXcsNV;{*6*@;^R+QMW_Y8-Iec@)b`l4khgCy;hst%hYAWy#m~<#?63i3 z4$jA$naL|RWrIQktvvw}9+T9(I5$wrhKG;8{!3eqLrjbTp!Wlm0kp)#>?{$;+kLo+ zlE42oNPkFO-8JxqE^w+O>icSD0`sEh?F&j31NsxT;m4SOP|?tYLg+`k4W|bCy8YD# zYtYH&EAg%3Uwo0iWXc*70uK32VQ0nn2bD3&SQd6Vq>gtrKzgdd#5a5M;ee4s4eWP>fgd#gjJ{A=}Ko_B)JJ!ea hKVJ&KE;ny2C^%7eOY?SA6nt-isNJ}!RH9%R`d=Q`5(fYP literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_propagator_options-members.html b/structmsceqf_1_1_propagator_options-members.html new file mode 100644 index 0000000..a99e416 --- /dev/null +++ b/structmsceqf_1_1_propagator_options-members.html @@ -0,0 +1,122 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::PropagatorOptions Member List
        +
        + +
        + + + + diff --git a/structmsceqf_1_1_propagator_options.html b/structmsceqf_1_1_propagator_options.html new file mode 100644 index 0000000..1e6cc6e --- /dev/null +++ b/structmsceqf_1_1_propagator_options.html @@ -0,0 +1,148 @@ + + + + + + + +MSCEqF: msceqf::PropagatorOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::PropagatorOptions Struct Reference
        +
        +
        + + + + + + + + + + + + + + + + + + + + +

        +Public Attributes

        +fp angular_velocity_std_
         Continuous time angular velocity standard deviation.
         
        +fp acceleration_std_
         Continuous time acceleration standard deviation.
         
        +fp angular_velocity_bias_std_
         Continuous time angular velocity bias (random walk) standard deviation.
         
        +fp acceleration_bias_std_
         Continuous time acceleration bias (random walk) standard deviation.
         
        +uint imu_buffer_max_size_
         The maximum size of the propagator's imu buffer.
         
        +int state_transition_order_
         The order for the computation of the state transition matrix.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_propagator_options.js b/structmsceqf_1_1_propagator_options.js new file mode 100644 index 0000000..6d315c8 --- /dev/null +++ b/structmsceqf_1_1_propagator_options.js @@ -0,0 +1,9 @@ +var structmsceqf_1_1_propagator_options = +[ + [ "acceleration_bias_std_", "structmsceqf_1_1_propagator_options.html#a320de7822195cffbe2ae222a16f97cdb", null ], + [ "acceleration_std_", "structmsceqf_1_1_propagator_options.html#af5f66f20c165f0ca57564fe767d8bf0c", null ], + [ "angular_velocity_bias_std_", "structmsceqf_1_1_propagator_options.html#afce5ba5fda7ed445ed7d99d96b15609c", null ], + [ "angular_velocity_std_", "structmsceqf_1_1_propagator_options.html#a404f38084c32c44d4f6851de43a9b422", null ], + [ "imu_buffer_max_size_", "structmsceqf_1_1_propagator_options.html#aa604db901d516ebeea24421392e84fce", null ], + [ "state_transition_order_", "structmsceqf_1_1_propagator_options.html#a4d38b1d64b701fa1690d4f49745c89ac", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_radtan_camera-members.html b/structmsceqf_1_1_radtan_camera-members.html new file mode 100644 index 0000000..e734d06 --- /dev/null +++ b/structmsceqf_1_1_radtan_camera-members.html @@ -0,0 +1,142 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::RadtanCamera Member List
        +
        +
        + +

        This is the complete list of members for msceqf::RadtanCamera, including all inherited members.

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        denormalize(std::vector< Eigen::Vector2f > &uv)msceqf::PinholeCamera
        denormalize(std::vector< cv::Point2f > &uv)msceqf::PinholeCamera
        denormalize(Eigen::Vector2f &uv)msceqf::PinholeCamera
        denormalize(cv::Point2f &uv)msceqf::PinholeCamera
        distortion_coefficients_msceqf::PinholeCameraprotected
        distortionCoefficients() constmsceqf::PinholeCamera
        height_msceqf::PinholeCameraprotected
        intrinsics() constmsceqf::PinholeCamera
        intrinsics_msceqf::PinholeCameraprotected
        normalize(std::vector< Eigen::Vector2f > &uv)msceqf::PinholeCamera
        normalize(std::vector< cv::Point2f > &uv)msceqf::PinholeCamera
        normalize(Eigen::Vector2f &uv)msceqf::PinholeCamera
        normalize(cv::Point2f &uv)msceqf::PinholeCamera
        operator=(const PinholeCamera &)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        operator=(PinholeCamera &&)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        PinholeCamera(const VectorX &distortion_coefficients, const Vector4 instrinsics, const uint &width, const uint &height) (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        PinholeCamera()=deletemsceqf::PinholeCameraprotected
        PinholeCamera(const PinholeCamera &)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        PinholeCamera(PinholeCamera &&)=delete (defined in msceqf::PinholeCamera)msceqf::PinholeCameraprotected
        RadtanCamera(const CameraOptions &opts, const Vector4 &intrinsics) (defined in msceqf::RadtanCamera)msceqf::RadtanCamera
        setIntrinsics(const Vector4 &intrinsics)msceqf::PinholeCamera
        undistort(std::vector< cv::Point2f > &uv_cv, const bool &normalize) overridemsceqf::RadtanCameravirtual
        msceqf::PinholeCamera::undistort(std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)msceqf::PinholeCamera
        undistortImage(const cv::Mat &image, cv::Mat &image_undistorted) overridemsceqf::RadtanCameravirtual
        width_msceqf::PinholeCameraprotected
        ~PinholeCamera()=default (defined in msceqf::PinholeCamera)msceqf::PinholeCameravirtual
        +
        + + + + diff --git a/structmsceqf_1_1_radtan_camera.html b/structmsceqf_1_1_radtan_camera.html new file mode 100644 index 0000000..fc05d6f --- /dev/null +++ b/structmsceqf_1_1_radtan_camera.html @@ -0,0 +1,318 @@ + + + + + + + +MSCEqF: msceqf::RadtanCamera Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::RadtanCamera Struct Referencefinal
        +
        +
        + +

        This class represent a pinhole camera with radtan distortion model. + More...

        + +

        #include <camera.hpp>

        +
        +Inheritance diagram for msceqf::RadtanCamera:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for msceqf::RadtanCamera:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Member Functions

        RadtanCamera (const CameraOptions &opts, const Vector4 &intrinsics)
         
        void undistort (std::vector< cv::Point2f > &uv_cv, const bool &normalize) override
         Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)
         
        void undistortImage (const cv::Mat &image, cv::Mat &image_undistorted) override
         Undistort given image in openCV format (cv::Mat)
         
        - Public Member Functions inherited from msceqf::PinholeCamera
        void undistort (std::vector< Eigen::Vector2f > &uv, const bool &normalize=false)
         Undistort given distorted point in Eigen format (std::vector<Eigen::Vector2f>)
         
        void normalize (std::vector< Eigen::Vector2f > &uv)
         Normalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
         
        void normalize (std::vector< cv::Point2f > &uv)
         Normalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
         
        void normalize (Eigen::Vector2f &uv)
         Normalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
         
        void normalize (cv::Point2f &uv)
         Normalize multiple features uv coordinates in OpenCV format (cv::Point2f)
         
        void denormalize (std::vector< Eigen::Vector2f > &uv)
         Denormalize multiple features uv coordinates in Eigen format (std::vector<Eigen::Vector2f>)
         
        void denormalize (std::vector< cv::Point2f > &uv)
         Denormalize multiple features uv coordinates in OpenCV format (std::vector<cv::Point2f>)
         
        void denormalize (Eigen::Vector2f &uv)
         Denormalize a single feature uv coordinates in Eigen format (Eigen::Vector2f)
         
        void denormalize (cv::Point2f &uv)
         Denormalize multiple features uv coordinates in OpenCV format (cv::Point2f)
         
        void setIntrinsics (const Vector4 &intrinsics)
         Set the value of the intrinsic parameters.
         
        const Vector4 & intrinsics () const
         Get camera intrinsics parameter (fx, fy, cx, cy) as a 4 vector.
         
        const VectorX & distortionCoefficients () const
         Get camera distortion coefficients (k1, k2, p1, p2, ...) as a vector.
         
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Additional Inherited Members

        - Protected Member Functions inherited from msceqf::PinholeCamera
        PinholeCamera (const VectorX &distortion_coefficients, const Vector4 instrinsics, const uint &width, const uint &height)
         
        PinholeCamera ()=delete
         Rule of Five.
         
        PinholeCamera (const PinholeCamera &)=delete
         
        PinholeCamera (PinholeCamera &&)=delete
         
        +PinholeCameraoperator= (const PinholeCamera &)=delete
         
        +PinholeCameraoperator= (PinholeCamera &&)=delete
         
        - Protected Attributes inherited from msceqf::PinholeCamera
        +VectorX distortion_coefficients_
         Vector of distortion coefficients (k1, k2, p1, p2, ...)
         
        +Vector4 intrinsics_
         Vector of intrinsic paramater (fx, fy, cx, cy)
         
        +uint width_
         Image width.
         
        +uint height_
         Image height.
         
        +

        Detailed Description

        +

        This class represent a pinhole camera with radtan distortion model.

        +

        Member Function Documentation

        + +

        ◆ undistort()

        + +
        +
        + + + + + +
        + + + + + + + + + + + +
        void msceqf::RadtanCamera::undistort (std::vector< cv::Point2f > & uv_cv,
        const bool & normalize )
        +
        +overridevirtual
        +
        + +

        Undistort given distorted point in OpenCV format (std::vector<cv::Point2f>)

        +
        Parameters
        + + + +
        uv_cvuv coordinates
        normalizeFlag to decide wether normalize coordinates or not
        +
        +
        + +

        Implements msceqf::PinholeCamera.

        + +
        +
        + +

        ◆ undistortImage()

        + +
        +
        + + + + + +
        + + + + + + + + + + + +
        void msceqf::RadtanCamera::undistortImage (const cv::Mat & image,
        cv::Mat & image_undistorted )
        +
        +overridevirtual
        +
        + +

        Undistort given image in openCV format (cv::Mat)

        +
        Parameters
        + + + +
        imageImage to be undistorted
        image_undistortedUndistorted image
        +
        +
        + +

        Implements msceqf::PinholeCamera.

        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_radtan_camera.js b/structmsceqf_1_1_radtan_camera.js new file mode 100644 index 0000000..e7905d7 --- /dev/null +++ b/structmsceqf_1_1_radtan_camera.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_radtan_camera = +[ + [ "undistort", "structmsceqf_1_1_radtan_camera.html#a6bbf98ed9be455ecf0e58a5c93b6f41d", null ], + [ "undistortImage", "structmsceqf_1_1_radtan_camera.html#a148e2f48b5813ce91b35ee4ea62114fe", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_radtan_camera__coll__graph.map b/structmsceqf_1_1_radtan_camera__coll__graph.map new file mode 100644 index 0000000..56aa3a9 --- /dev/null +++ b/structmsceqf_1_1_radtan_camera__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_radtan_camera__coll__graph.md5 b/structmsceqf_1_1_radtan_camera__coll__graph.md5 new file mode 100644 index 0000000..3bba5fa --- /dev/null +++ b/structmsceqf_1_1_radtan_camera__coll__graph.md5 @@ -0,0 +1 @@ +f8b85f3663219e79e1863ff79e160458 \ No newline at end of file diff --git a/structmsceqf_1_1_radtan_camera__coll__graph.png b/structmsceqf_1_1_radtan_camera__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc338415dca8a813e8b436bc26f95f426fdb82b GIT binary patch literal 5196 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 MRafP!lHJSy1L%8Z>i_@% literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_radtan_camera__inherit__graph.map b/structmsceqf_1_1_radtan_camera__inherit__graph.map new file mode 100644 index 0000000..56aa3a9 --- /dev/null +++ b/structmsceqf_1_1_radtan_camera__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_radtan_camera__inherit__graph.md5 b/structmsceqf_1_1_radtan_camera__inherit__graph.md5 new file mode 100644 index 0000000..3bba5fa --- /dev/null +++ b/structmsceqf_1_1_radtan_camera__inherit__graph.md5 @@ -0,0 +1 @@ +f8b85f3663219e79e1863ff79e160458 \ No newline at end of file diff --git a/structmsceqf_1_1_radtan_camera__inherit__graph.png b/structmsceqf_1_1_radtan_camera__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc338415dca8a813e8b436bc26f95f426fdb82b GIT binary patch literal 5196 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 MRafP!lHJSy1L%8Z>i_@% literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_state_options-members.html b/structmsceqf_1_1_state_options-members.html new file mode 100644 index 0000000..2674af7 --- /dev/null +++ b/structmsceqf_1_1_state_options-members.html @@ -0,0 +1,126 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + + + + + + diff --git a/structmsceqf_1_1_state_options.html b/structmsceqf_1_1_state_options.html new file mode 100644 index 0000000..36dab73 --- /dev/null +++ b/structmsceqf_1_1_state_options.html @@ -0,0 +1,168 @@ + + + + + + + +MSCEqF: msceqf::StateOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::StateOptions Struct Reference
        +
        +
        + +

        #include <msceqf_options.hpp>

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Attributes

        +Matrix9 D_init_cov_
         Initial covariance of the D element of the state.
         
        +Matrix6 delta_init_cov_
         Initial covariance of the delta element of the state.
         
        +Matrix6 E_init_cov_
         Initial covariance of the E element of the state.
         
        +Matrix4 L_init_cov_
         Initial covariance of the L element of the state.
         
        +SE3 initial_camera_extrinsics_
         Initial camera extrinsics.
         
        +In initial_camera_intrinsics_
         Initial camera intrinsics.
         
        +bool enable_camera_intrinsics_calibration_
         Boolean to enable intinsic camera calibration.
         
        +fp gravity_
         The magnitude of the gravity vector in m/s^2.
         
        +uint num_clones_
         The maximum number of stochastic clones.
         
        +uint num_persistent_features_
         The maximum number of persistent (SLAM) features.
         
        +

        Detailed Description

        +
        Note
        The camera extrinsics are interpreted as IC_S, thus IC_S transofrm vectors in camera frame to vectors in imu frame according to the following equation: I_x = IC_S * C_x
        +

        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_state_options.js b/structmsceqf_1_1_state_options.js new file mode 100644 index 0000000..0f1e922 --- /dev/null +++ b/structmsceqf_1_1_state_options.js @@ -0,0 +1,13 @@ +var structmsceqf_1_1_state_options = +[ + [ "D_init_cov_", "structmsceqf_1_1_state_options.html#a4c71c9019e4bd17dd3398d57ad92319c", null ], + [ "delta_init_cov_", "structmsceqf_1_1_state_options.html#acdb4a9c56aed3886ca5494579a75f9aa", null ], + [ "E_init_cov_", "structmsceqf_1_1_state_options.html#a1b26a41cbad4ab428d9046cd87247e39", null ], + [ "enable_camera_intrinsics_calibration_", "structmsceqf_1_1_state_options.html#a49bf34d99ff5ba49db7cac82f8f52111", null ], + [ "gravity_", "structmsceqf_1_1_state_options.html#a0e33344fd38ef3fb3ccf76fe77e2af47", null ], + [ "initial_camera_extrinsics_", "structmsceqf_1_1_state_options.html#ae0a2fd5147883e76d5a66112a7f749f1", null ], + [ "initial_camera_intrinsics_", "structmsceqf_1_1_state_options.html#a8df04119a203ced58a7bb49617bf9c8c", null ], + [ "L_init_cov_", "structmsceqf_1_1_state_options.html#a85416530843a1bc2bf42a84855767b51", null ], + [ "num_clones_", "structmsceqf_1_1_state_options.html#a7e1b60805d75a9d056bc44598ca9f94a", null ], + [ "num_persistent_features_", "structmsceqf_1_1_state_options.html#a67799453c4c8aae2944547aa3ee52e73", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_track-members.html b/structmsceqf_1_1_track-members.html new file mode 100644 index 0000000..38a1724 --- /dev/null +++ b/structmsceqf_1_1_track-members.html @@ -0,0 +1,125 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::Track Member List
        +
        +
        + +

        This is the complete list of members for msceqf::Track, including all inherited members.

        + + + + + + + + + + +
        empty() const noexceptmsceqf::Trackinline
        normalized_uvs_msceqf::Track
        operator<(const Track &lhs, const Track &rhs)msceqf::Trackfriend
        removeInvalid(std::vector< bool > &invalid)msceqf::Trackinline
        removeTail(const fp &timestamp, const bool &remove_equal=true)msceqf::Trackinline
        size() const noexceptmsceqf::Trackinline
        Times typedefmsceqf::Track
        timestamps_msceqf::Track
        uvs_msceqf::Track
        +
        + + + + diff --git a/structmsceqf_1_1_track.html b/structmsceqf_1_1_track.html new file mode 100644 index 0000000..415a87e --- /dev/null +++ b/structmsceqf_1_1_track.html @@ -0,0 +1,304 @@ + + + + + + + +MSCEqF: msceqf::Track Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::Track Struct Reference
        +
        +
        + +

        (Cache friendly) Track struct. Define a feature (labeled via a feature id) detected/tracked at different points in time. + More...

        + +

        #include <track.hpp>

        + + + + + +

        +Public Types

        +using Times = std::vector<fp>
         vector of timestamps
         
        + + + + + + + + + + + + + +

        +Public Member Functions

        bool empty () const noexcept
         Check if there valid coordinates in uvs_.
         
        size_t size () const noexcept
         Return the amount of features (size of uvs_)
         
        void removeInvalid (std::vector< bool > &invalid)
         Remove invalid features coordinates, normalized feature coordinates and ids given a vector of boolean flags indicating invalid features.
         
        void removeTail (const fp &timestamp, const bool &remove_equal=true)
         Remove the tail of the track. this method removes coordinates and timestamps that are older or equal than the given timestamp.
         
        + + + + + + + + + + +

        +Public Attributes

        +FeaturesCoordinates uvs_
         (u, v) coordinates of the same feature at different time steps
         
        +FeaturesCoordinates normalized_uvs_
         Normalized (u, v) coordinates of the same feature at different time steps.
         
        +Times timestamps_
         Timestamps of the camera measurement containing the feature.
         
        + + + + +

        +Friends

        +bool operator< (const Track &lhs, const Track &rhs)
         Comparison operator with other tracks for sorting based on track length.
         
        +

        Detailed Description

        +

        (Cache friendly) Track struct. Define a feature (labeled via a feature id) detected/tracked at different points in time.

        +
        Note
        Note that feature cordinates are of cv::Point2f type for compatibility with OpenCV.
        +

        Member Function Documentation

        + +

        ◆ empty()

        + +
        +
        + + + + + +
        + + + + + + + +
        bool msceqf::Track::empty () const
        +
        +inlinenoexcept
        +
        + +

        Check if there valid coordinates in uvs_.

        +
        Returns
        true if coordinates are found, false otherwise
        + +
        +
        + +

        ◆ removeInvalid()

        + +
        +
        + + + + + +
        + + + + + + + +
        void msceqf::Track::removeInvalid (std::vector< bool > & invalid)
        +
        +inline
        +
        + +

        Remove invalid features coordinates, normalized feature coordinates and ids given a vector of boolean flags indicating invalid features.

        +
        Parameters
        + + +
        invalidVector of boolean flags indicating invalid features
        +
        +
        + +
        +
        + +

        ◆ removeTail()

        + +
        +
        + + + + + +
        + + + + + + + + + + + +
        void msceqf::Track::removeTail (const fp & timestamp,
        const bool & remove_equal = true )
        +
        +inline
        +
        + +

        Remove the tail of the track. this method removes coordinates and timestamps that are older or equal than the given timestamp.

        +
        Parameters
        + + + +
        timestampTimestamp
        remove_equalFlag to indicate whether to include in the removal also the coordinates and timestamps at the given timestamp
        +
        +
        + +
        +
        + +

        ◆ size()

        + +
        +
        + + + + + +
        + + + + + + + +
        size_t msceqf::Track::size () const
        +
        +inlinenoexcept
        +
        + +

        Return the amount of features (size of uvs_)

        +
        Returns
        Amount of features
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_track.js b/structmsceqf_1_1_track.js new file mode 100644 index 0000000..31295ba --- /dev/null +++ b/structmsceqf_1_1_track.js @@ -0,0 +1,12 @@ +var structmsceqf_1_1_track = +[ + [ "Times", "structmsceqf_1_1_track.html#af9c2230e603fe30de05a00b85cefa0c7", null ], + [ "empty", "structmsceqf_1_1_track.html#a4b70af76854a4aa9760be3c8bb096d10", null ], + [ "removeInvalid", "structmsceqf_1_1_track.html#a23ea6d1201294522d8058d625792cc39", null ], + [ "removeTail", "structmsceqf_1_1_track.html#a555ada2c730ab5161f7c908400c91d6e", null ], + [ "size", "structmsceqf_1_1_track.html#a9c9438e708358c0e8be003e44ba7d04a", null ], + [ "operator<", "structmsceqf_1_1_track.html#aab82b71fb82726c14eda7cfcf6feba0a", null ], + [ "normalized_uvs_", "structmsceqf_1_1_track.html#ae8fb006108f4f14deafbce5c25172f86", null ], + [ "timestamps_", "structmsceqf_1_1_track.html#aed5463581a0aeb5cc9f73d8c1d67ae3b", null ], + [ "uvs_", "structmsceqf_1_1_track.html#a9810ae5c3ac451401f3ca849cea5cff7", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_track_manager_options-members.html b/structmsceqf_1_1_track_manager_options-members.html new file mode 100644 index 0000000..424e25b --- /dev/null +++ b/structmsceqf_1_1_track_manager_options-members.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::TrackManagerOptions Member List
        +
        +
        + +

        This is the complete list of members for msceqf::TrackManagerOptions, including all inherited members.

        + + + +
        max_track_length_msceqf::TrackManagerOptions
        tracker_options_msceqf::TrackManagerOptions
        +
        + + + + diff --git a/structmsceqf_1_1_track_manager_options.html b/structmsceqf_1_1_track_manager_options.html new file mode 100644 index 0000000..6eb070c --- /dev/null +++ b/structmsceqf_1_1_track_manager_options.html @@ -0,0 +1,148 @@ + + + + + + + +MSCEqF: msceqf::TrackManagerOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::TrackManagerOptions Struct Reference
        +
        +
        +
        +Collaboration diagram for msceqf::TrackManagerOptions:
        +
        +
        Collaboration graph
        + + + + + + + + + + + +
        [legend]
        + + + + + + + + +

        +Public Attributes

        +TrackerOptions tracker_options_
         The vision tracker options.
         
        +size_t max_track_length_
         The maximul length of a track.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_track_manager_options.js b/structmsceqf_1_1_track_manager_options.js new file mode 100644 index 0000000..40a2d87 --- /dev/null +++ b/structmsceqf_1_1_track_manager_options.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_track_manager_options = +[ + [ "max_track_length_", "structmsceqf_1_1_track_manager_options.html#aa553008f2fc66a5135c53312093d1363", null ], + [ "tracker_options_", "structmsceqf_1_1_track_manager_options.html#ae10dd9b24aacff441a637c5d5cb989a3", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_track_manager_options__coll__graph.map b/structmsceqf_1_1_track_manager_options__coll__graph.map new file mode 100644 index 0000000..e5573f5 --- /dev/null +++ b/structmsceqf_1_1_track_manager_options__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/structmsceqf_1_1_track_manager_options__coll__graph.md5 b/structmsceqf_1_1_track_manager_options__coll__graph.md5 new file mode 100644 index 0000000..a54e812 --- /dev/null +++ b/structmsceqf_1_1_track_manager_options__coll__graph.md5 @@ -0,0 +1 @@ +9a978824fe49d73355cf360b78e42109 \ No newline at end of file diff --git a/structmsceqf_1_1_track_manager_options__coll__graph.png b/structmsceqf_1_1_track_manager_options__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1a10199f79f5fde884077cc2d1e6a7d5e08ec723 GIT binary patch literal 22052 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 literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_tracker_options-members.html b/structmsceqf_1_1_tracker_options-members.html new file mode 100644 index 0000000..023890e --- /dev/null +++ b/structmsceqf_1_1_tracker_options-members.html @@ -0,0 +1,132 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + + + + + + diff --git a/structmsceqf_1_1_tracker_options.html b/structmsceqf_1_1_tracker_options.html new file mode 100644 index 0000000..18ee324 --- /dev/null +++ b/structmsceqf_1_1_tracker_options.html @@ -0,0 +1,202 @@ + + + + + + + +MSCEqF: msceqf::TrackerOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::TrackerOptions Struct Reference
        +
        +
        +
        +Collaboration diagram for msceqf::TrackerOptions:
        +
        +
        Collaboration graph
        + + + + + + + + + +
        [legend]
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Attributes

        +CameraOptions cam_options_
         The camera options.
         
        +DistortionModel distortion_model_
         Distortion Model.
         
        +EqualizationMethod equalizer_
         The image equalization method.
         
        +FeatureDetector detector_
         The feature detector.
         
        +uint max_features_
         Maximum feature to track/detect.
         
        +uint min_features_
         Minimum feature to track/detect.
         
        +uint grid_x_size_
         x size of the grid
         
        +uint grid_y_size_
         y size of the grid
         
        +uint min_px_dist_
         Minimum pixel distance between features.
         
        +uint optical_flow_pyramid_levels_
         Pyramids levels for optical flow (1-based)
         
        +uint detector_pyramid_levels_
         Pyramids levels for feature detection (1-based)
         
        +uint optical_flow_win_size_
         Window size for optical flow.
         
        +int opencv_threads_
         Number of threads for opencv.
         
        +fp ransac_reprojection_
         RANSAC reprojection threshold.
         
        +FastOptions fast_opts_
         Fast feature detector options.
         
        +GFTTOptions gftt_opts_
         Shi-Tomasi feature detector options.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_tracker_options.js b/structmsceqf_1_1_tracker_options.js new file mode 100644 index 0000000..d6d06a7 --- /dev/null +++ b/structmsceqf_1_1_tracker_options.js @@ -0,0 +1,19 @@ +var structmsceqf_1_1_tracker_options = +[ + [ "cam_options_", "structmsceqf_1_1_tracker_options.html#ab1df268e9c2088af91331b6ac69f5d48", null ], + [ "detector_", "structmsceqf_1_1_tracker_options.html#aa7a2f93c3f70726c21085f92c02547d0", null ], + [ "detector_pyramid_levels_", "structmsceqf_1_1_tracker_options.html#afd28b684f8aad10a16d766e68e775987", null ], + [ "distortion_model_", "structmsceqf_1_1_tracker_options.html#abc7141ac141452c29ce8631531584d4b", null ], + [ "equalizer_", "structmsceqf_1_1_tracker_options.html#ad726557ba1916cbad8ee30ab8d08773e", null ], + [ "fast_opts_", "structmsceqf_1_1_tracker_options.html#a4ae32a3f199faaa11a94039c4ba86785", null ], + [ "gftt_opts_", "structmsceqf_1_1_tracker_options.html#ad740af34a868c8cea98b6275522295ac", null ], + [ "grid_x_size_", "structmsceqf_1_1_tracker_options.html#ac077f52604f8d0e621adb1dea4fcf34f", null ], + [ "grid_y_size_", "structmsceqf_1_1_tracker_options.html#a52b0bc8a5a05e2e1d7536356dfe468cf", null ], + [ "max_features_", "structmsceqf_1_1_tracker_options.html#a54077a1c6fd051b530eb51fa6f097805", null ], + [ "min_features_", "structmsceqf_1_1_tracker_options.html#a48eb521e83637c9fc4ea0a97cd2a5856", null ], + [ "min_px_dist_", "structmsceqf_1_1_tracker_options.html#a3592276cfee7a4c004a2c7a1d60df943", null ], + [ "opencv_threads_", "structmsceqf_1_1_tracker_options.html#aadeb5121adee235acc42946e208f6b82", null ], + [ "optical_flow_pyramid_levels_", "structmsceqf_1_1_tracker_options.html#ab51e27a794eede37dd4a7b4a0a39ba8f", null ], + [ "optical_flow_win_size_", "structmsceqf_1_1_tracker_options.html#a2e594e1311109ed437b10a9efd31a62c", null ], + [ "ransac_reprojection_", "structmsceqf_1_1_tracker_options.html#a7e438ee7012eeafd573d79a5a95578ea", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_tracker_options__coll__graph.map b/structmsceqf_1_1_tracker_options__coll__graph.map new file mode 100644 index 0000000..5a0a305 --- /dev/null +++ b/structmsceqf_1_1_tracker_options__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/structmsceqf_1_1_tracker_options__coll__graph.md5 b/structmsceqf_1_1_tracker_options__coll__graph.md5 new file mode 100644 index 0000000..6784be6 --- /dev/null +++ b/structmsceqf_1_1_tracker_options__coll__graph.md5 @@ -0,0 +1 @@ +27c6b3a3b3944a5c9a0979b3948544f0 \ No newline at end of file diff --git a/structmsceqf_1_1_tracker_options__coll__graph.png b/structmsceqf_1_1_tracker_options__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7649cc44d3e3c3e511c56c920074e5c939ef7e GIT binary patch literal 16431 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 LL!tDxdC30&8i5gt literal 0 HcmV?d00001 diff --git a/structmsceqf_1_1_triangulated_features-members.html b/structmsceqf_1_1_triangulated_features-members.html new file mode 100644 index 0000000..a99ee74 --- /dev/null +++ b/structmsceqf_1_1_triangulated_features-members.html @@ -0,0 +1,122 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::TriangulatedFeatures Member List
        +
        +
        + +

        This is the complete list of members for msceqf::TriangulatedFeatures, including all inherited members.

        + + + + + + + +
        features_msceqf::TriangulatedFeatures
        operator<(const TriangulatedFeatures &lhs, const TriangulatedFeatures &rhs)msceqf::TriangulatedFeaturesfriend
        operator<(const TriangulatedFeatures &lhs, const fp &timestamp)msceqf::TriangulatedFeaturesfriend
        operator< (defined in msceqf::TriangulatedFeatures)msceqf::TriangulatedFeaturesfriend
        points_msceqf::TriangulatedFeatures
        timestamp_msceqf::TriangulatedFeatures
        +
        + + + + diff --git a/structmsceqf_1_1_triangulated_features.html b/structmsceqf_1_1_triangulated_features.html new file mode 100644 index 0000000..014411f --- /dev/null +++ b/structmsceqf_1_1_triangulated_features.html @@ -0,0 +1,161 @@ + + + + + + + +MSCEqF: msceqf::TriangulatedFeatures Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::TriangulatedFeatures Struct Reference
        +
        +
        +
        +Collaboration diagram for msceqf::TriangulatedFeatures:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        + + + + + + + + + + + +

        +Public Attributes

        +Features features_
         The features detected in the image.
         
        +std::vector< Vector3 > points_
         The 3D points corresponding to the features.
         
        +fp timestamp_ = -1
         Timestamp of the Camera reading.
         
        + + + + + + + + + +

        +Friends

        +bool operator< (const TriangulatedFeatures &lhs, const TriangulatedFeatures &rhs)
         Comparison operator with other imu.
         
        +bool operator< (const TriangulatedFeatures &lhs, const fp &timestamp)
         Comparison operator with timestamp.
         
        +bool operator< (const fp &timestamp, const TriangulatedFeatures &rhs)
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_triangulated_features.js b/structmsceqf_1_1_triangulated_features.js new file mode 100644 index 0000000..b5cc60e --- /dev/null +++ b/structmsceqf_1_1_triangulated_features.js @@ -0,0 +1,8 @@ +var structmsceqf_1_1_triangulated_features = +[ + [ "operator<", "structmsceqf_1_1_triangulated_features.html#a403118b276d90f8a86c0c9d74f954a3f", null ], + [ "operator<", "structmsceqf_1_1_triangulated_features.html#ad9e38234e508ac0466a461b54764706d", null ], + [ "features_", "structmsceqf_1_1_triangulated_features.html#abb6a71075a806d1cc1995f890dfed3bc", null ], + [ "points_", "structmsceqf_1_1_triangulated_features.html#a5ec9e04c743e8af61e04036df3e2f004", null ], + [ "timestamp_", "structmsceqf_1_1_triangulated_features.html#a53d61f771a055963bb72c0bea3eb758d", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_triangulated_features__coll__graph.map b/structmsceqf_1_1_triangulated_features__coll__graph.map new file mode 100644 index 0000000..6523e17 --- /dev/null +++ b/structmsceqf_1_1_triangulated_features__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structmsceqf_1_1_triangulated_features__coll__graph.md5 b/structmsceqf_1_1_triangulated_features__coll__graph.md5 new file mode 100644 index 0000000..e2eddd1 --- /dev/null +++ b/structmsceqf_1_1_triangulated_features__coll__graph.md5 @@ -0,0 +1 @@ +163ec44c9db86b21ffacd89118a9c9c1 \ No newline at end of file diff --git a/structmsceqf_1_1_triangulated_features__coll__graph.png b/structmsceqf_1_1_triangulated_features__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..495808cc10abf1c41795897ee82c956f238b6c6c GIT binary patch literal 5834 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 z zv-0IC(zS!g&%)w{jEu}To8eo8BqXTWw#W*X1?o5fELv-Fu=Zh#}FJGY;%yu18Q^DLmE-^@GdgF`|dX6syn=6@tpaB_0Cw6|a9;kg9eahX?ZUV?8g zm7VO3JAxq%_w|(lm1S8X1K2#!X&?zoIywvk0|QR`e~p?)e$~BX>xvUpG&AD?0+;-~ zO33oEjqg?`Kai!Ieh1v4)Yrnbv(!s%fAzGcNP7q!?X6*fLWRTOxNFUTdtY<}kVpDO z=42qUnAlhpgYD_jE>6NR<+tPSrVz-qY-(=~pRx&1{O;AkU$T4Oq~`9a3B{uT<~TVy z$y-^$s5xXXH?=bxKt-e4qaImW^6hv(xW`I`A-%8yK;mO!VxVMo5(ox^1=QEewMAUL z3}GT7g0WbNzmv6Cz-T?aypUiTK>;5>a)GQ(x4gdM+93a8rRa(3j?R9sHm9!nP(9C2aGrUD%YDeH8mgcEBzVDG*Cmbbp3fgjE)=hE;ThZ zDJ3Nw2uw|IFW}b*2?mL<+eNT3f^dG{LbeDl01kFiO1Ed|dF1 z@S#=l6sTG3wyo;+rkv|yOegNut5gH?)ud0>}XgmNCm?wR7h& zUnU9@ZEY#n<<_eFDW4b><5tQa9F}Gtic4_%yNL9xp=ffng*S$6#7<66>42^a4JDrY z^9KoP=c1&_9VRrMKes7417!}n@e)8Jnd8-BoU})N+S<|X3J{JRy}e;7pGCb5m6^#m z+SUE)fz16KZ{pVoV3vxRnHgxmjQF&~lvnHcTAzI;ubg3<=Hm6!-q3&k`DZO^BB@eD z00xssAYS($;R{S8K2(1`E#t2*E2}&_NW@w@aN3@=oN`I+W`0un+>{_@tMTj^S)MKh zC>!w9WDqfHA^oCr3pfNH0j`nIaI}<9`B4Do7r`z`kN%O=xIg6|T~#H;z|4#qEwa$a z8NTSoN|%L?I=3{nwS&^rd14(4i38T_&pGt+4Xs5^KeDp20=fzc#`*Nf4Iowkrf+1# zYR~z)QbYq-=rq$pHZ(l^8&Czm(&3YrL3L z{%5|i(JPa+(vzOERG+f4PypyJKD$umz)JCSTfhp}$r~A61IEqs2a$J}eg1rZf05Ft zYtkAfCN#jGa;Ib#&<}`+pajdCCnq^Fl%qqHGOS&WefCzZi%c9H*WLf1JH^Wx2dAc{ z<^XU!XGdS5r#B;dIKs%ze$tn0pt@b%Tc(nydoc`p+7C0LWkJAKHtt8i)YH(>A>>J@ z1mkFDzN`A=3BsVvqKoN1n2}sukle|}Wia=SMt=49(Ytk;ZEkM9%E`$o9lVo+?oGjf z*<1JWSi{JO3LtCE?oWd?Kg4^t6rpDVpkzzk$(gRo`rZ$v;dEHLhYL9nJo>*pBNi_Z zH~G$N715urk6Dz4?&if%pu}g5uid$@eMQ + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::UpdaterHelper Member List
        +
        +
        + +

        This is the complete list of members for msceqf::UpdaterHelper, including all inherited members.

        + + + + + + +
        chi2Test(const fp &chi2, const size_t &dof, const std::map< uint, fp > &chi2_table)msceqf::UpdaterHelperstatic
        inverseDepthJacobian(const Vector3 &A_f)msceqf::UpdaterHelperstatic
        nullspaceProjection(Ref< MatrixX > Cf, MatrixXBlockRowRef Ct, VectorXBlockRowRef delta)msceqf::UpdaterHelperstatic
        updateQRCompression(MatrixX &C, VectorX &delta)msceqf::UpdaterHelperstatic
        Xi(const Vector3 &f)msceqf::UpdaterHelperstatic
        +
        + + + + diff --git a/structmsceqf_1_1_updater_helper.html b/structmsceqf_1_1_updater_helper.html new file mode 100644 index 0000000..2a1d0b7 --- /dev/null +++ b/structmsceqf_1_1_updater_helper.html @@ -0,0 +1,342 @@ + + + + + + + +MSCEqF: msceqf::UpdaterHelper Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::UpdaterHelper Struct Reference
        +
        +
        + +

        Updater helper struct. This structs implements common helper methods for MSCEqF update. + More...

        + +

        #include <updater_helper.hpp>

        + + + + + + + + + + + + + + + + + +

        +Static Public Member Functions

        static Matrix< 2, 4 > Xi (const Vector3 &f)
         Xi operator R^3 -> R^2x4.
         
        static Matrix3 inverseDepthJacobian (const Vector3 &A_f)
         Compute the Jacobian for inverse depth parametrization, used in the Cf matrix.
         
        static void nullspaceProjection (Ref< MatrixX > Cf, MatrixXBlockRowRef Ct, VectorXBlockRowRef delta)
         Perform in-place nullspace projection of the Cf matrix on the Ct matrix and the residual using QR decomposition.
         
        static void updateQRCompression (MatrixX &C, VectorX &delta)
         Perform in-place compression of the C matrix and the residual using QR decomposition.
         
        static bool chi2Test (const fp &chi2, const size_t &dof, const std::map< uint, fp > &chi2_table)
         Perform chi2 test (based on precomputed table) on the given block of the residual.
         
        +

        Detailed Description

        +

        Updater helper struct. This structs implements common helper methods for MSCEqF update.

        +

        Member Function Documentation

        + +

        ◆ chi2Test()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + +
        static bool msceqf::UpdaterHelper::chi2Test (const fp & chi2,
        const size_t & dof,
        const std::map< uint, fp > & chi2_table )
        +
        +staticnodiscard
        +
        + +

        Perform chi2 test (based on precomputed table) on the given block of the residual.

        +
        Parameters
        + + + + +
        chi2Chi2 value
        dofDegrees of freedom
        chi2_tablePrecomputed chi2 table
        +
        +
        +
        Returns
        true if test passed, false otherwise
        + +
        +
        + +

        ◆ inverseDepthJacobian()

        + +
        +
        + + + + + +
        + + + + + + + +
        static Matrix3 msceqf::UpdaterHelper::inverseDepthJacobian (const Vector3 & A_f)
        +
        +staticnodiscard
        +
        + +

        Compute the Jacobian for inverse depth parametrization, used in the Cf matrix.

        +
        Parameters
        + + +
        A_fGiven feature in the anchor frame
        +
        +
        +
        Returns
        Jacobian matrix for inverse depth parametrization
        + +
        +
        + +

        ◆ nullspaceProjection()

        + +
        +
        + + + + + +
        + + + + + + + + + + + + + + + + +
        static void msceqf::UpdaterHelper::nullspaceProjection (Ref< MatrixX > Cf,
        MatrixXBlockRowRef Ct,
        VectorXBlockRowRef delta )
        +
        +static
        +
        + +

        Perform in-place nullspace projection of the Cf matrix on the Ct matrix and the residual using QR decomposition.

        +
        Parameters
        + + + + +
        CtC matrix
        deltaResidual
        CfCf matrix
        +
        +
        + +
        +
        + +

        ◆ updateQRCompression()

        + +
        +
        + + + + + +
        + + + + + + + + + + + +
        static void msceqf::UpdaterHelper::updateQRCompression (MatrixX & C,
        VectorX & delta )
        +
        +static
        +
        + +

        Perform in-place compression of the C matrix and the residual using QR decomposition.

        +
        Parameters
        + + + +
        CC matrix
        deltaResidual
        +
        +
        + +
        +
        + +

        ◆ Xi()

        + +
        +
        + + + + + +
        + + + + + + + +
        static Matrix< 2, 4 > msceqf::UpdaterHelper::Xi (const Vector3 & f)
        +
        +staticnodiscard
        +
        + +

        Xi operator R^3 -> R^2x4.

        +
        Parameters
        + + +
        f
        +
        +
        +
        Returns
        Matrix representing the Xi operator
        + +
        +
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_updater_options-members.html b/structmsceqf_1_1_updater_options-members.html new file mode 100644 index 0000000..1fc7862 --- /dev/null +++ b/structmsceqf_1_1_updater_options-members.html @@ -0,0 +1,127 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + + + + + + diff --git a/structmsceqf_1_1_updater_options.html b/structmsceqf_1_1_updater_options.html new file mode 100644 index 0000000..2488b8c --- /dev/null +++ b/structmsceqf_1_1_updater_options.html @@ -0,0 +1,168 @@ + + + + + + + +MSCEqF: msceqf::UpdaterOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::UpdaterOptions Struct Reference
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

        +Public Attributes

        +bool refine_traingulation_
         Boolean to enable feature triangulation refinement via nonlinear optimization.
         
        +fp min_depth_
         Minimum depth of triangulated features.
         
        +fp max_depth_
         Maximum depth of triangulated features.
         
        +uint max_iterations_
         Maximum number of iteration for features triangulation refinement.
         
        +fp tollerance_
         Tollerance for features triangulation refinement.
         
        +FeatureRepresentation msc_features_representation_
         Multi State Constraint features representation.
         
        +ProjectionMethod projection_method_
         The feature projection method.
         
        +uint min_track_lenght_
         Minimum track length for triangulation.
         
        +fp min_angle_
         Minimum angle (in degrees) between views for trianglulation.
         
        +fp pixel_std_
         The pixel standard deviation.
         
        +bool curvature_correction_
         Boolean to enable the curvature correction.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_updater_options.js b/structmsceqf_1_1_updater_options.js new file mode 100644 index 0000000..834f249 --- /dev/null +++ b/structmsceqf_1_1_updater_options.js @@ -0,0 +1,14 @@ +var structmsceqf_1_1_updater_options = +[ + [ "curvature_correction_", "structmsceqf_1_1_updater_options.html#a6d505cec7564bdc4d1ae1cbc3903ce49", null ], + [ "max_depth_", "structmsceqf_1_1_updater_options.html#ad3afe1345d2c413460e5ce7a86f17dad", null ], + [ "max_iterations_", "structmsceqf_1_1_updater_options.html#ad1653bda53f03f976de18bb337730145", null ], + [ "min_angle_", "structmsceqf_1_1_updater_options.html#aa34278f6298f4649e86a2a88494aa369", null ], + [ "min_depth_", "structmsceqf_1_1_updater_options.html#a39b8f06d758472140e1c3fa450cb9221", null ], + [ "min_track_lenght_", "structmsceqf_1_1_updater_options.html#afb462136dd7dca62faedea777e253a20", null ], + [ "msc_features_representation_", "structmsceqf_1_1_updater_options.html#a116df98da8d38dcb4240736ef8b13f1c", null ], + [ "pixel_std_", "structmsceqf_1_1_updater_options.html#a689194e8a0c0d615aa508301ea22978b", null ], + [ "projection_method_", "structmsceqf_1_1_updater_options.html#a561da6631d8b7881810bcd096f24ac96", null ], + [ "refine_traingulation_", "structmsceqf_1_1_updater_options.html#ad2f00bf871333e924379f7a51f8050eb", null ], + [ "tollerance_", "structmsceqf_1_1_updater_options.html#a8a74476884b4f6adac06662b41e484cf", null ] +]; \ No newline at end of file diff --git a/structmsceqf_1_1_zero_velocity_updater_options-members.html b/structmsceqf_1_1_zero_velocity_updater_options-members.html new file mode 100644 index 0000000..49ebfa5 --- /dev/null +++ b/structmsceqf_1_1_zero_velocity_updater_options-members.html @@ -0,0 +1,118 @@ + + + + + + + +MSCEqF: Member List + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        msceqf::ZeroVelocityUpdaterOptions Member List
        +
        + +
        + + + + diff --git a/structmsceqf_1_1_zero_velocity_updater_options.html b/structmsceqf_1_1_zero_velocity_updater_options.html new file mode 100644 index 0000000..c91d95d --- /dev/null +++ b/structmsceqf_1_1_zero_velocity_updater_options.html @@ -0,0 +1,132 @@ + + + + + + + +MSCEqF: msceqf::ZeroVelocityUpdaterOptions Struct Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        + +
        msceqf::ZeroVelocityUpdaterOptions Struct Reference
        +
        +
        + + + + + + + + +

        +Public Attributes

        +ZeroVelocityUpdate zero_velocity_update_
         The zero velocity update method.
         
        +bool curvature_correction_
         Boolean to enable the curvature correction on the zero velocity update.
         
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structmsceqf_1_1_zero_velocity_updater_options.js b/structmsceqf_1_1_zero_velocity_updater_options.js new file mode 100644 index 0000000..923bced --- /dev/null +++ b/structmsceqf_1_1_zero_velocity_updater_options.js @@ -0,0 +1,5 @@ +var structmsceqf_1_1_zero_velocity_updater_options = +[ + [ "curvature_correction_", "structmsceqf_1_1_zero_velocity_updater_options.html#a5bc059095e6b6528a98b3c24939bfe5b", null ], + [ "zero_velocity_update_", "structmsceqf_1_1_zero_velocity_updater_options.html#ab85ba685a33d090effe44bb93c23f48e", null ] +]; \ No newline at end of file diff --git a/structutils_1_1is__streamable.html b/structutils_1_1is__streamable.html new file mode 100644 index 0000000..e408cb6 --- /dev/null +++ b/structutils_1_1is__streamable.html @@ -0,0 +1,137 @@ + + + + + + + +MSCEqF: utils::is_streamable< S, C, typename > Struct Template Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        utils::is_streamable< S, C, typename > Struct Template Reference
        +
        +
        +
        +Inheritance diagram for utils::is_streamable< S, C, typename >:
        +
        +
        Inheritance graph
        + + + + + +
        [legend]
        +
        +Collaboration diagram for utils::is_streamable< S, C, typename >:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.map b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.map new file mode 100644 index 0000000..d7f02b8 --- /dev/null +++ b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.md5 b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.md5 new file mode 100644 index 0000000..aed5d34 --- /dev/null +++ b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.md5 @@ -0,0 +1 @@ +e75d683f4f14f244d9963ab33c24fe63 \ No newline at end of file diff --git a/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.png b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_00b71ef35aa394ab1c5e764056d1aea2a.png new file mode 100644 index 0000000000000000000000000000000000000000..086d5be82b05c1ef584d38cbef58204d782e03e9 GIT binary patch literal 7644 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 literal 0 HcmV?d00001 diff --git a/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.map b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.map new file mode 100644 index 0000000..d7f02b8 --- /dev/null +++ b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.md5 b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.md5 new file mode 100644 index 0000000..aed5d34 --- /dev/null +++ b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.md5 @@ -0,0 +1 @@ +e75d683f4f14f244d9963ab33c24fe63 \ No newline at end of file diff --git a/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.png b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0b2a2cd6c00d705f80882ad508db62e0e.png new file mode 100644 index 0000000000000000000000000000000000000000..086d5be82b05c1ef584d38cbef58204d782e03e9 GIT binary patch literal 7644 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 literal 0 HcmV?d00001 diff --git a/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html new file mode 100644 index 0000000..d74198e --- /dev/null +++ b/structutils_1_1is__streamable_3_01_s_00_01_c_00_01decltype_07void_07std_1_1declval_3_01_s_01_6_0f58e90958705880955bd917882569c69.html @@ -0,0 +1,137 @@ + + + + + + + +MSCEqF: utils::is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))> Struct Template Reference + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        utils::is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))> Struct Template Reference
        +
        +
        +
        +Inheritance diagram for utils::is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>:
        +
        +
        +Collaboration diagram for utils::is_streamable< S, C, decltype(void(std::declval< S & >()<< std::declval< C const & >()))>:
        +
        +
        Collaboration graph
        + + + + + +
        [legend]
        +
        The documentation for this struct was generated from the following file: +
        +
        + + + + diff --git a/structutils_1_1is__streamable__coll__graph.map b/structutils_1_1is__streamable__coll__graph.map new file mode 100644 index 0000000..26bfae9 --- /dev/null +++ b/structutils_1_1is__streamable__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structutils_1_1is__streamable__coll__graph.md5 b/structutils_1_1is__streamable__coll__graph.md5 new file mode 100644 index 0000000..08bbaca --- /dev/null +++ b/structutils_1_1is__streamable__coll__graph.md5 @@ -0,0 +1 @@ +cc16c70f1a9f68beae116ea2681fbaf5 \ No newline at end of file diff --git a/structutils_1_1is__streamable__coll__graph.png b/structutils_1_1is__streamable__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a36e884f1b7eba6d69dcf793b02c2bfd436aaa0c GIT binary patch literal 5739 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 + + + + diff --git a/structutils_1_1is__streamable__inherit__graph.md5 b/structutils_1_1is__streamable__inherit__graph.md5 new file mode 100644 index 0000000..08bbaca --- /dev/null +++ b/structutils_1_1is__streamable__inherit__graph.md5 @@ -0,0 +1 @@ +cc16c70f1a9f68beae116ea2681fbaf5 \ No newline at end of file diff --git a/structutils_1_1is__streamable__inherit__graph.png b/structutils_1_1is__streamable__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..a36e884f1b7eba6d69dcf793b02c2bfd436aaa0c GIT binary patch literal 5739 zcmcIoWmweRw#Ou-C8VW68l+39lA?|A*9ac zoO?dq`}IEaF!S(_9c!=kiv?9zmB+y%$3jCx!%zVd?J&wwrw-ebHULgCtv!P&q@ zX0ae{!<(VV%g2-i@mRrk?N?k8DjaJFO|X@Vjd(^JD-$=jl4#53N{O#d%Z+dFFyr9w z4fo0WR}Y-nWOgrhy>t)|gy&&p*$(n+D-I!4hAu&YAzl*8U0CVO8x)CDSo&b@+H#&c ziz+U)n9ww3EBo;B!&evt#p*0x|GxD+EbU={HLj`kQ#Fpz$2h!jWoWvP*It^zHS6%s zn?EwN-Sj+Utklqcg(C$OxhVN}yqaQ!Nf+Hw%se~^>w~Ej9ED@HKI0LcN8GJ3wAzo}bjLM($bjvb_+FVy3lgIXy#CtCWk``$ywgp|sd}ia|SYPW;V(OmN z%y1axN&wGGN8l!;rk=f$2s&Rz?}?*|hQs0M1-w-5-(d*zQ|6(H<#|Y()%9N#5eW$) zCFKwWq~$|s=!3S~>%&Gr)C)-4wSbO}j!KqL!aN*ud~T1$(Vi04jMNB9#=EG&E1w`kr6 z3+C$sDOr-i)HF0SBpilem6eraUdY9qBxW^20s`}AFQTKO(zwm<9~~Vz&QyKKmyW1$ znC5hJa!Tj5!s6lKVVb_?wyVuy=Hp8$DPhS8JT)j*N$+S4ywq>;;X$iJoRVjYdRrq~ zd}U;1HB3xY6%;TG3=C81%6Sey=!#_YMw5$5IHA z|M5OV#_E=JcXWj8&%=*5C2!Ny(w^Oa@E~2li5v=rf(1t}ZH*N^)zZ?ERlc}79u1F< zj%HzD!I#2FNJ(K-%@Q*2JDi7Cp07l6h2cw;8^Kjiw#KBlJVc~#mfAzRPqrswr^aAv zG_FfO?$L(f`}+E>B&kX8tPv9vV}?u7*3{I58CH-`Q&SK3)L9LZ91Zb}MrLG?hvtqI z%15WL=?TmuoAw)nuA8dr>q!_H8Kp32>FDUXByW!J@^#A|J?DJeU{-Z`z8Wukh(yqo z92jb9X?25lnKO1X;Imbzab>O}u(p-mU1b*+?g!|&mIn)sv7aYxU&_eHDanm8AFH5*V)1 z1ToVVESZpykR|N?G5C7d^ewoLj*jkkcHqP!>az5Tgv(?o{0ZrhCS2H#?`URjuEu>+ zRY_S{QBBQewI>#vLLf#tm6M-kcW-Y96wq!FF)1nhYiorO{LhpTq}sgmF*tK@-1>$B zj;+-VdwY8rPoAtof-jB4Gv{b)`Bl=mKZyIEx*Tu3k&B~*CM7*Z17X$H(J{BMu&{-J zdY}^V;5PbaqhNSL3=cz#ykKYr}%T+-ZB}TGE z(O-Fa2`DNmesmKS7Eb>BSwQI9V0Sbrc-{P0iAIU`i^Qa)v2Bkn)L)Wbe#aT^){6~_ z@`?)IgT_r4Pftb>k&N%(zmwE8){DESiLtV>2K?QIb#-@>jeCkvvFVnhZOq#%@Gfeh=|ylt%X&=;iL{zlhhP1$j-jAr==Gw-SmcVe9hNd&GUYfa?s9`#nOCpg zN5;gI3vSwRemg_@s|g7SMIsUYPeesUdHhfJ{M@UH8`{LBFbIf<7_zdmWUQ=;Kx)?+ za@_sn;qm?V@$pkmPEI;*ZuPZ|4GHys>eBp2ECdYMsAhIbP7v&|s3I zTSjbOXSlYxNiiN36(wV6n9T0cp*j)V8#6FY!{(<}7?Q#t8;Hc^f4o8%JH#76+; zAo*jqrO50ZA7CDOZOD z7heV-YpkABw%v%(%f~T@i7k9`wy+3|k00&Co-9w>pMEMIPn}%?7@=Q$Xg}4WH;y(e z?WJWOey!ts2;9La@id+&zRU894+E3MDW&C($PDTZ56g&S_O8&?b> z9zKQ|8e>zgX-|tZ(r!&x#uvY1xBjVJ`=jc&v&9y_Lq%< zVS0p=qWQHa*T)qh=$hB$&fB!j)3szJmawnR$S4+WAyoy%!p+P$v&S!`Ocl7?@=8b=d_ab*ZP{~VDSR;cXDM$5wTQu94}oRVz%ZY^~2uKc{^ z_(n9Mys!qj;~e$1Diq&wE1|QYI9&bNwbVB8XP-dAqP}3u4|NunqsM&weoSo1TbZoI z)4R68Z4$QhUwne(SkhlSRC=V%nuqn8|2|cSy)-!saUc4}x<2zKX@w-ZO;RKpX8|lO z@>Lj*9Pocp6^DgCahN*Ov8D0N+s9@F@y(|5+gkQ#JXzqDqJ_%~gizKqFwy^?9GL3Qldi0+xOjV`n~fF7#*p(z0r@~47aAJ6d%5<4>+B*SzBBCS#2Tz?%lhs2^bz4vuf6JM#k{OL_$g` zDl(pT4+#hez+P*8kF5g&12xJf0hIT|(~JW25%$`9CXyXjZPCkX_5-aj$o}qvY49~a zAijs_=uasq=JR3&ofm9*N6?q^PsQ9fhL+Q9a?F8-!lo3e>UW#|X1x02!-JN;J7w&~ zO+;YAxenYZWC>7K=#%^qv#tN*7%|9rKF^M4iRUOP^kGt z@tcL#z)WyJUVAg`=SQp1_;?#YID0eIp#uX-XwJwMXkj5eV36lRLTRYoX)P0zk?|sB zXiN-)u<)#UE{`No2evQC??^Y~(US&`Z9;Th%980GATgL$1JtP-HhIv2)S!L1zP^5b ze$MTG>gdsQdp&G(dvi@enVOvZeFpigpr zNZ3)T1$zcU30S*(co+v^qShNnb&rLM3;oByK-6+)1mIn1Fr09}IX4&Lgs{H8J}e@_ z{rA%A6F>16DFY=m?;9F~v|kWYiF#Rro$bxlMd#%`m%ahxX2iGygfVuW zyUrip)+YIsS(O1CqngA;7^iU)x7(TmptmFSeIo}O2qYeHjR+p%WM^NSsxZPiun!3h z)p(H-a6Bvs0^#WB`1{YFuX;TrBe)b46lm-m9Mv^7yytb_uNE2YM${s3serclIGU4_ zv(V@cGa<8Zm0+7OmW^QkEYFRK!WtMH z#OYvTVfisT+n9rQHzl6frbekYSVBZh4EA?J4%0vsad&q&YG4835WqD#S*B-DXHP5$ zL4E;3C0jK@6((KULW%@@*x=F4M5GdgcA*D;@@8#>K^DH*KXX((Hf2)$${f zfWEK4-%cY7Pbt)?q}FCM=Z?73EmV@lsI$cVNoc#i;7|wz=n5Ktb5c|(HeUED$qr@# z($0=|v9~t@q^o2{BsCYc!;#1KcsS4&^`6h-IoxIv(^N7~#8NqpR|dJ-7`V9b*x1+r zWRQvby+k6B95t1trRG3vTUuJG8yZH{*7AYq0xerUE6NVN@L5|aHCCYFv&QDL9(q-( z?RItUDsjH_02z2@Oi4)@GdKO~*Y7cT8VzIPVK975Ss5EZ7PHNfY;A3AZs!G|!c+3t zkIBhIz+YL8Sc@l!xgEW2@kwz0r-=Z>K_NOeb{&YWtKXe?s3|M*)nBDrKycMM&hmC@ zX@UR`3=Al!sxpa)%xz6fWMpLcIY<*u_}Z?F+1C*f5&Z;(=C^%ta1d~fntt2t6$^$X z8(;L@%qF>bqo&48M_2IS6|jk~;;F@BaE*ZZa-91P1^Dxs-JoM{w$`B58mCORf|p(1 zaiM{LnVA{99}b5L+Sg?OpateEP0W|KwY3%apVPy|QK0ThzkOqR{`@_wRdy(&*{w0mugua~0@r$NBo$GQG+Ib(XEE3W~OiVTcc?E&XOM4p5*allEX^ zTS$cH*w`3I!^F%?We~D-$zX}o(^I+KN@c)kz&pz2+x`|BW!GQG#iyiPkj__EX$U6x zRs`hc(WIVfH85D<49Ktk{2CsP1z3=nn0S6V59uEsmMxoH+1{QlkURLNIrZmHbun@A z-6A$3ED?__GwnN-?XmLiZ7A22;8CAV{&tIOJUy$D54-7rd`uzrOQLAaDN+uvKzf4?P1w zEfjns2C@mfpD8XnF0asHF4`0Pqil?8N8trvg2rgRlF^$jDIjIvGx0zUu?T04RHRCd;a;tC#oT zi`Fw$<~Rf3n0b8vSn8JRw>P-1R#jEqfdacxeR+F^j>UJc?pEQDkPsl{(U!o98k(BO z{RXS5xWP3S4-Wo3vAXJ$t0U==ssCj2+XOBbV zKimrfdchpW8^abOS;A}U>qjG^ho92YW(wRFG>3Q{5w|y&z|5t(uJ(+T>2Vc`_W>x3 z2Z;$z?qq*H6|@+5gRXpZD-63+O@sQuPM(*&Ln z_#tv8U~1Fzq8_)ZGHPmSZtm`-pg97jN6nRLmY#3Ja?!9ao%3##0?f^6MZNZxV7WmB zz%C@Grdl{SIP`gcJ(hZ;tUUNQcNwYFRQ-2%3TJ75e;7C=GC^m`?d@#_1_pd;YUEa2 z=hQorqq`o(S|0%}m57X|C;x{JA5f}>#&=fc(%QbduCB=c>;M$Gppo7kxBC2k4q6`i zMn)9l4$KRnb5IfW&-64Ypg3M$-k-KF0jLgt(otnm9tLwvH8(_7-?DwjIZ*O!Vrq#8z4)r&erRC)^6}s+!))aw{G-^@% zDm+A&1H>NaJb(!R57qdeIp4vAjLgHcwy%sYUnalF6fk#ihz5*JLPBzfEP%MV-8WR0 zkS(mB-9u{PliyCs1Rey{QSG*_bl20$%%lJw8!GNa(tB(6ii+1jd#Df@&z>Ji<;D9&B(hUBES0*Vp%Sc7_5F9ILfaL%TW7y{!Ur z5)=Zq=z%@ByW!n-Nd;8b5>Tg0pwfgyMfrex?A&kT@dq`Uti%Xuy>rLA)C3YHH{>IpYxi zXNk$lz}TZDF}-=WJ5^DEWSJWOd$vC>e|GQ>G&Z(EP%I9d@ySuC6@jc+_7&n+L~_73w;-{?!kr znoTbDHbDOrKyy!f`v=g@nNr5Xz_3NFT`CqDM{R1 +* @license MIT +* +* BUILT: Wed Jan 26 2022 23:19:07 GMT+0100 (Mitteleuropäische Normalzeit) +*/var SVG=function(){"use strict";const methods$1={};const names=[];function registerMethods(name,m){if(Array.isArray(name)){for(const _name of name){registerMethods(_name,m)}return}if(typeof name==="object"){for(const _name in name){registerMethods(_name,name[_name])}return}addMethodNames(Object.getOwnPropertyNames(m));methods$1[name]=Object.assign(methods$1[name]||{},m)}function getMethodsFor(name){return methods$1[name]||{}}function getMethodNames(){return[...new Set(names)]}function addMethodNames(_names){names.push(..._names)}function map(array,block){let i;const il=array.length;const result=[];for(i=0;i=0;i--){assignNewId(node.children[i])}if(node.id){node.id=eid(node.nodeName);return node}return node}function extend(modules,methods){let key,i;modules=Array.isArray(modules)?modules:[modules];for(i=modules.length-1;i>=0;i--){for(key in methods){modules[i].prototype[key]=methods[key]}}}function wrapWithAttrCheck(fn){return function(...args){const o=args[args.length-1];if(o&&o.constructor===Object&&!(o instanceof Array)){return fn.apply(this,args.slice(0,-1)).attr(o)}else{return fn.apply(this,args)}}}function siblings(){return this.parent().children()}function position(){return this.parent().index(this)}function next(){return this.siblings()[this.position()+1]}function prev(){return this.siblings()[this.position()-1]}function forward(){const i=this.position();const p=this.parent();p.add(this.remove(),i+1);return this}function backward(){const i=this.position();const p=this.parent();p.add(this.remove(),i?i-1:0);return this}function front(){const p=this.parent();p.add(this.remove());return this}function back(){const p=this.parent();p.add(this.remove(),0);return this}function before(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i);return this}function after(element){element=makeInstance(element);element.remove();const i=this.position();this.parent().add(element,i+1);return this}function insertBefore(element){element=makeInstance(element);element.before(this);return this}function insertAfter(element){element=makeInstance(element);element.after(this);return this}registerMethods("Dom",{siblings:siblings,position:position,next:next,prev:prev,forward:forward,backward:backward,front:front,back:back,before:before,after:after,insertBefore:insertBefore,insertAfter:insertAfter});const numberAndUnit=/^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i;const hex=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;const rgb=/rgb\((\d+),(\d+),(\d+)\)/;const reference=/(#[a-z_][a-z0-9\-_]*)/i;const transforms=/\)\s*,?\s*/;const whitespace=/\s/g;const isHex=/^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i;const isRgb=/^rgb\(/;const isBlank=/^(\s+)?$/;const isNumber=/^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i;const isImage=/\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i;const delimiter=/[\s,]+/;const isPathLetter=/[MLHVCSQTAZ]/i;var regex={__proto__:null,numberAndUnit:numberAndUnit,hex:hex,rgb:rgb,reference:reference,transforms:transforms,whitespace:whitespace,isHex:isHex,isRgb:isRgb,isBlank:isBlank,isNumber:isNumber,isImage:isImage,delimiter:delimiter,isPathLetter:isPathLetter};function classes(){const attr=this.attr("class");return attr==null?[]:attr.trim().split(delimiter)}function hasClass(name){return this.classes().indexOf(name)!==-1}function addClass(name){if(!this.hasClass(name)){const array=this.classes();array.push(name);this.attr("class",array.join(" "))}return this}function removeClass(name){if(this.hasClass(name)){this.attr("class",this.classes().filter(function(c){return c!==name}).join(" "))}return this}function toggleClass(name){return this.hasClass(name)?this.removeClass(name):this.addClass(name)}registerMethods("Dom",{classes:classes,hasClass:hasClass,addClass:addClass,removeClass:removeClass,toggleClass:toggleClass});function css(style,val){const ret={};if(arguments.length===0){this.node.style.cssText.split(/\s*;\s*/).filter(function(el){return!!el.length}).forEach(function(el){const t=el.split(/\s*:\s*/);ret[t[0]]=t[1]});return ret}if(arguments.length<2){if(Array.isArray(style)){for(const name of style){const cased=camelCase(name);ret[name]=this.node.style[cased]}return ret}if(typeof style==="string"){return this.node.style[camelCase(style)]}if(typeof style==="object"){for(const name in style){this.node.style[camelCase(name)]=style[name]==null||isBlank.test(style[name])?"":style[name]}}}if(arguments.length===2){this.node.style[camelCase(style)]=val==null||isBlank.test(val)?"":val}return this}function show(){return this.css("display","")}function hide(){return this.css("display","none")}function visible(){return this.css("display")!=="none"}registerMethods("Dom",{css:css,show:show,hide:hide,visible:visible});function data(a,v,r){if(a==null){return this.data(map(filter(this.node.attributes,el=>el.nodeName.indexOf("data-")===0),el=>el.nodeName.slice(5)))}else if(a instanceof Array){const data={};for(const key of a){data[key]=this.data(key)}return data}else if(typeof a==="object"){for(v in a){this.data(v,a[v])}}else if(arguments.length<2){try{return JSON.parse(this.attr("data-"+a))}catch(e){return this.attr("data-"+a)}}else{this.attr("data-"+a,v===null?null:r===true||typeof v==="string"||typeof v==="number"?v:JSON.stringify(v))}return this}registerMethods("Dom",{data:data});function remember(k,v){if(typeof arguments[0]==="object"){for(const key in k){this.remember(key,k[key])}}else if(arguments.length===1){return this.memory()[k]}else{this.memory()[k]=v}return this}function forget(){if(arguments.length===0){this._memory={}}else{for(let i=arguments.length-1;i>=0;i--){delete this.memory()[arguments[i]]}}return this}function memory(){return this._memory=this._memory||{}}registerMethods("Dom",{remember:remember,forget:forget,memory:memory});function sixDigitHex(hex){return hex.length===4?["#",hex.substring(1,2),hex.substring(1,2),hex.substring(2,3),hex.substring(2,3),hex.substring(3,4),hex.substring(3,4)].join(""):hex}function componentHex(component){const integer=Math.round(component);const bounded=Math.max(0,Math.min(255,integer));const hex=bounded.toString(16);return hex.length===1?"0"+hex:hex}function is(object,space){for(let i=space.length;i--;){if(object[space[i]]==null){return false}}return true}function getParameters(a,b){const params=is(a,"rgb")?{_a:a.r,_b:a.g,_c:a.b,_d:0,space:"rgb"}:is(a,"xyz")?{_a:a.x,_b:a.y,_c:a.z,_d:0,space:"xyz"}:is(a,"hsl")?{_a:a.h,_b:a.s,_c:a.l,_d:0,space:"hsl"}:is(a,"lab")?{_a:a.l,_b:a.a,_c:a.b,_d:0,space:"lab"}:is(a,"lch")?{_a:a.l,_b:a.c,_c:a.h,_d:0,space:"lch"}:is(a,"cmyk")?{_a:a.c,_b:a.m,_c:a.y,_d:a.k,space:"cmyk"}:{_a:0,_b:0,_c:0,space:"rgb"};params.space=b||params.space;return params}function cieSpace(space){if(space==="lab"||space==="xyz"||space==="lch"){return true}else{return false}}function hueToRgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p}class Color{constructor(...inputs){this.init(...inputs)}static isColor(color){return color&&(color instanceof Color||this.isRgb(color)||this.test(color))}static isRgb(color){return color&&typeof color.r==="number"&&typeof color.g==="number"&&typeof color.b==="number"}static random(mode="vibrant",t,u){const{random,round,sin,PI:pi}=Math;if(mode==="vibrant"){const l=(81-57)*random()+57;const c=(83-45)*random()+45;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="sine"){t=t==null?random():t;const r=round(80*sin(2*pi*t/.5+.01)+150);const g=round(50*sin(2*pi*t/.5+4.6)+200);const b=round(100*sin(2*pi*t/.5+2.3)+150);const color=new Color(r,g,b);return color}else if(mode==="pastel"){const l=(94-86)*random()+86;const c=(26-9)*random()+9;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="dark"){const l=10+10*random();const c=(125-75)*random()+86;const h=360*random();const color=new Color(l,c,h,"lch");return color}else if(mode==="rgb"){const r=255*random();const g=255*random();const b=255*random();const color=new Color(r,g,b);return color}else if(mode==="lab"){const l=100*random();const a=256*random()-128;const b=256*random()-128;const color=new Color(l,a,b,"lab");return color}else if(mode==="grey"){const grey=255*random();const color=new Color(grey,grey,grey);return color}else{throw new Error("Unsupported random color mode")}}static test(color){return typeof color==="string"&&(isHex.test(color)||isRgb.test(color))}cmyk(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const k=Math.min(1-r,1-g,1-b);if(k===1){return new Color(0,0,0,1,"cmyk")}const c=(1-r-k)/(1-k);const m=(1-g-k)/(1-k);const y=(1-b-k)/(1-k);const color=new Color(c,m,y,k,"cmyk");return color}hsl(){const{_a,_b,_c}=this.rgb();const[r,g,b]=[_a,_b,_c].map(v=>v/255);const max=Math.max(r,g,b);const min=Math.min(r,g,b);const l=(max+min)/2;const isGrey=max===min;const delta=max-min;const s=isGrey?0:l>.5?delta/(2-max-min):delta/(max+min);const h=isGrey?0:max===r?((g-b)/delta+(gparseInt(v));Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else if(isHex.test(a)){const hexParse=v=>parseInt(v,16);const[,_a,_b,_c]=hex.exec(sixDigitHex(a)).map(hexParse);Object.assign(this,{_a:_a,_b:_b,_c:_c,_d:0,space:"rgb"})}else throw Error("Unsupported string format, can't construct Color")}const{_a,_b,_c,_d}=this;const components=this.space==="rgb"?{r:_a,g:_b,b:_c}:this.space==="xyz"?{x:_a,y:_b,z:_c}:this.space==="hsl"?{h:_a,s:_b,l:_c}:this.space==="lab"?{l:_a,a:_b,b:_c}:this.space==="lch"?{l:_a,c:_b,h:_c}:this.space==="cmyk"?{c:_a,m:_b,y:_c,k:_d}:{};Object.assign(this,components)}lab(){const{x,y,z}=this.xyz();const l=116*y-16;const a=500*(x-y);const b=200*(y-z);const color=new Color(l,a,b,"lab");return color}lch(){const{l,a,b}=this.lab();const c=Math.sqrt(a**2+b**2);let h=180*Math.atan2(b,a)/Math.PI;if(h<0){h*=-1;h=360-h}const color=new Color(l,c,h,"lch");return color}rgb(){if(this.space==="rgb"){return this}else if(cieSpace(this.space)){let{x,y,z}=this;if(this.space==="lab"||this.space==="lch"){let{l,a,b}=this;if(this.space==="lch"){const{c,h}=this;const dToR=Math.PI/180;a=c*Math.cos(dToR*h);b=c*Math.sin(dToR*h)}const yL=(l+16)/116;const xL=a/500+yL;const zL=yL-b/200;const ct=16/116;const mx=.008856;const nm=7.787;x=.95047*(xL**3>mx?xL**3:(xL-ct)/nm);y=1*(yL**3>mx?yL**3:(yL-ct)/nm);z=1.08883*(zL**3>mx?zL**3:(zL-ct)/nm)}const rU=x*3.2406+y*-1.5372+z*-.4986;const gU=x*-.9689+y*1.8758+z*.0415;const bU=x*.0557+y*-.204+z*1.057;const pow=Math.pow;const bd=.0031308;const r=rU>bd?1.055*pow(rU,1/2.4)-.055:12.92*rU;const g=gU>bd?1.055*pow(gU,1/2.4)-.055:12.92*gU;const b=bU>bd?1.055*pow(bU,1/2.4)-.055:12.92*bU;const color=new Color(255*r,255*g,255*b);return color}else if(this.space==="hsl"){let{h,s,l}=this;h/=360;s/=100;l/=100;if(s===0){l*=255;const color=new Color(l,l,l);return color}const q=l<.5?l*(1+s):l+s-l*s;const p=2*l-q;const r=255*hueToRgb(p,q,h+1/3);const g=255*hueToRgb(p,q,h);const b=255*hueToRgb(p,q,h-1/3);const color=new Color(r,g,b);return color}else if(this.space==="cmyk"){const{c,m,y,k}=this;const r=255*(1-Math.min(1,c*(1-k)+k));const g=255*(1-Math.min(1,m*(1-k)+k));const b=255*(1-Math.min(1,y*(1-k)+k));const color=new Color(r,g,b);return color}else{return this}}toArray(){const{_a,_b,_c,_d,space}=this;return[_a,_b,_c,_d,space]}toHex(){const[r,g,b]=this._clamped().map(componentHex);return`#${r}${g}${b}`}toRgb(){const[rV,gV,bV]=this._clamped();const string=`rgb(${rV},${gV},${bV})`;return string}toString(){return this.toHex()}xyz(){const{_a:r255,_b:g255,_c:b255}=this.rgb();const[r,g,b]=[r255,g255,b255].map(v=>v/255);const rL=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92;const gL=g>.04045?Math.pow((g+.055)/1.055,2.4):g/12.92;const bL=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92;const xU=(rL*.4124+gL*.3576+bL*.1805)/.95047;const yU=(rL*.2126+gL*.7152+bL*.0722)/1;const zU=(rL*.0193+gL*.1192+bL*.9505)/1.08883;const x=xU>.008856?Math.pow(xU,1/3):7.787*xU+16/116;const y=yU>.008856?Math.pow(yU,1/3):7.787*yU+16/116;const z=zU>.008856?Math.pow(zU,1/3):7.787*zU+16/116;const color=new Color(x,y,z,"xyz");return color}_clamped(){const{_a,_b,_c}=this.rgb();const{max,min,round}=Math;const format=v=>max(0,min(round(v),255));return[_a,_b,_c].map(format)}}class Point{constructor(...args){this.init(...args)}clone(){return new Point(this)}init(x,y){const base={x:0,y:0};const source=Array.isArray(x)?{x:x[0],y:x[1]}:typeof x==="object"?{x:x.x,y:x.y}:{x:x,y:y};this.x=source.x==null?base.x:source.x;this.y=source.y==null?base.y:source.y;return this}toArray(){return[this.x,this.y]}transform(m){return this.clone().transformO(m)}transformO(m){if(!Matrix.isMatrixLike(m)){m=new Matrix(m)}const{x,y}=this;this.x=m.a*x+m.c*y+m.e;this.y=m.b*x+m.d*y+m.f;return this}}function point(x,y){return new Point(x,y).transform(this.screenCTM().inverse())}function closeEnough(a,b,threshold){return Math.abs(b-a)<(threshold||1e-6)}class Matrix{constructor(...args){this.init(...args)}static formatTransforms(o){const flipBoth=o.flip==="both"||o.flip===true;const flipX=o.flip&&(flipBoth||o.flip==="x")?-1:1;const flipY=o.flip&&(flipBoth||o.flip==="y")?-1:1;const skewX=o.skew&&o.skew.length?o.skew[0]:isFinite(o.skew)?o.skew:isFinite(o.skewX)?o.skewX:0;const skewY=o.skew&&o.skew.length?o.skew[1]:isFinite(o.skew)?o.skew:isFinite(o.skewY)?o.skewY:0;const scaleX=o.scale&&o.scale.length?o.scale[0]*flipX:isFinite(o.scale)?o.scale*flipX:isFinite(o.scaleX)?o.scaleX*flipX:flipX;const scaleY=o.scale&&o.scale.length?o.scale[1]*flipY:isFinite(o.scale)?o.scale*flipY:isFinite(o.scaleY)?o.scaleY*flipY:flipY;const shear=o.shear||0;const theta=o.rotate||o.theta||0;const origin=new Point(o.origin||o.around||o.ox||o.originX,o.oy||o.originY);const ox=origin.x;const oy=origin.y;const position=new Point(o.position||o.px||o.positionX||NaN,o.py||o.positionY||NaN);const px=position.x;const py=position.y;const translate=new Point(o.translate||o.tx||o.translateX,o.ty||o.translateY);const tx=translate.x;const ty=translate.y;const relative=new Point(o.relative||o.rx||o.relativeX,o.ry||o.relativeY);const rx=relative.x;const ry=relative.y;return{scaleX:scaleX,scaleY:scaleY,skewX:skewX,skewY:skewY,shear:shear,theta:theta,rx:rx,ry:ry,tx:tx,ty:ty,ox:ox,oy:oy,px:px,py:py}}static fromArray(a){return{a:a[0],b:a[1],c:a[2],d:a[3],e:a[4],f:a[5]}}static isMatrixLike(o){return o.a!=null||o.b!=null||o.c!=null||o.d!=null||o.e!=null||o.f!=null}static matrixMultiply(l,r,o){const a=l.a*r.a+l.c*r.b;const b=l.b*r.a+l.d*r.b;const c=l.a*r.c+l.c*r.d;const d=l.b*r.c+l.d*r.d;const e=l.e+l.a*r.e+l.c*r.f;const f=l.f+l.b*r.e+l.d*r.f;o.a=a;o.b=b;o.c=c;o.d=d;o.e=e;o.f=f;return o}around(cx,cy,matrix){return this.clone().aroundO(cx,cy,matrix)}aroundO(cx,cy,matrix){const dx=cx||0;const dy=cy||0;return this.translateO(-dx,-dy).lmultiplyO(matrix).translateO(dx,dy)}clone(){return new Matrix(this)}decompose(cx=0,cy=0){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const determinant=a*d-b*c;const ccw=determinant>0?1:-1;const sx=ccw*Math.sqrt(a*a+b*b);const thetaRad=Math.atan2(ccw*b,ccw*a);const theta=180/Math.PI*thetaRad;const ct=Math.cos(thetaRad);const st=Math.sin(thetaRad);const lam=(a*c+b*d)/determinant;const sy=c*sx/(lam*a-b)||d*sx/(lam*b+a);const tx=e-cx+cx*ct*sx+cy*(lam*ct*sx-st*sy);const ty=f-cy+cx*st*sx+cy*(lam*st*sx+ct*sy);return{scaleX:sx,scaleY:sy,shear:lam,rotate:theta,translateX:tx,translateY:ty,originX:cx,originY:cy,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}equals(other){if(other===this)return true;const comp=new Matrix(other);return closeEnough(this.a,comp.a)&&closeEnough(this.b,comp.b)&&closeEnough(this.c,comp.c)&&closeEnough(this.d,comp.d)&&closeEnough(this.e,comp.e)&&closeEnough(this.f,comp.f)}flip(axis,around){return this.clone().flipO(axis,around)}flipO(axis,around){return axis==="x"?this.scaleO(-1,1,around,0):axis==="y"?this.scaleO(1,-1,0,around):this.scaleO(-1,-1,axis,around||axis)}init(source){const base=Matrix.fromArray([1,0,0,1,0,0]);source=source instanceof Element?source.matrixify():typeof source==="string"?Matrix.fromArray(source.split(delimiter).map(parseFloat)):Array.isArray(source)?Matrix.fromArray(source):typeof source==="object"&&Matrix.isMatrixLike(source)?source:typeof source==="object"?(new Matrix).transform(source):arguments.length===6?Matrix.fromArray([].slice.call(arguments)):base;this.a=source.a!=null?source.a:base.a;this.b=source.b!=null?source.b:base.b;this.c=source.c!=null?source.c:base.c;this.d=source.d!=null?source.d:base.d;this.e=source.e!=null?source.e:base.e;this.f=source.f!=null?source.f:base.f;return this}inverse(){return this.clone().inverseO()}inverseO(){const a=this.a;const b=this.b;const c=this.c;const d=this.d;const e=this.e;const f=this.f;const det=a*d-b*c;if(!det)throw new Error("Cannot invert "+this);const na=d/det;const nb=-b/det;const nc=-c/det;const nd=a/det;const ne=-(na*e+nc*f);const nf=-(nb*e+nd*f);this.a=na;this.b=nb;this.c=nc;this.d=nd;this.e=ne;this.f=nf;return this}lmultiply(matrix){return this.clone().lmultiplyO(matrix)}lmultiplyO(matrix){const r=this;const l=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}multiply(matrix){return this.clone().multiplyO(matrix)}multiplyO(matrix){const l=this;const r=matrix instanceof Matrix?matrix:new Matrix(matrix);return Matrix.matrixMultiply(l,r,this)}rotate(r,cx,cy){return this.clone().rotateO(r,cx,cy)}rotateO(r,cx=0,cy=0){r=radians(r);const cos=Math.cos(r);const sin=Math.sin(r);const{a,b,c,d,e,f}=this;this.a=a*cos-b*sin;this.b=b*cos+a*sin;this.c=c*cos-d*sin;this.d=d*cos+c*sin;this.e=e*cos-f*sin+cy*sin-cx*cos+cx;this.f=f*cos+e*sin-cx*sin-cy*cos+cy;return this}scale(x,y,cx,cy){return this.clone().scaleO(...arguments)}scaleO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}const{a,b,c,d,e,f}=this;this.a=a*x;this.b=b*y;this.c=c*x;this.d=d*y;this.e=e*x-cx*x+cx;this.f=f*y-cy*y+cy;return this}shear(a,cx,cy){return this.clone().shearO(a,cx,cy)}shearO(lx,cx=0,cy=0){const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.c=c+d*lx;this.e=e+f*lx-cy*lx;return this}skew(x,y,cx,cy){return this.clone().skewO(...arguments)}skewO(x,y=x,cx=0,cy=0){if(arguments.length===3){cy=cx;cx=y;y=x}x=radians(x);y=radians(y);const lx=Math.tan(x);const ly=Math.tan(y);const{a,b,c,d,e,f}=this;this.a=a+b*lx;this.b=b+a*ly;this.c=c+d*lx;this.d=d+c*ly;this.e=e+f*lx-cy*lx;this.f=f+e*ly-cx*ly;return this}skewX(x,cx,cy){return this.skew(x,0,cx,cy)}skewY(y,cx,cy){return this.skew(0,y,cx,cy)}toArray(){return[this.a,this.b,this.c,this.d,this.e,this.f]}toString(){return"matrix("+this.a+","+this.b+","+this.c+","+this.d+","+this.e+","+this.f+")"}transform(o){if(Matrix.isMatrixLike(o)){const matrix=new Matrix(o);return matrix.multiplyO(this)}const t=Matrix.formatTransforms(o);const current=this;const{x:ox,y:oy}=new Point(t.ox,t.oy).transform(current);const transformer=(new Matrix).translateO(t.rx,t.ry).lmultiplyO(current).translateO(-ox,-oy).scaleO(t.scaleX,t.scaleY).skewO(t.skewX,t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox,oy);if(isFinite(t.px)||isFinite(t.py)){const origin=new Point(ox,oy).transform(transformer);const dx=isFinite(t.px)?t.px-origin.x:0;const dy=isFinite(t.py)?t.py-origin.y:0;transformer.translateO(dx,dy)}transformer.translateO(t.tx,t.ty);return transformer}translate(x,y){return this.clone().translateO(x,y)}translateO(x,y){this.e+=x||0;this.f+=y||0;return this}valueOf(){return{a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f}}}function ctm(){return new Matrix(this.node.getCTM())}function screenCTM(){if(typeof this.isRoot==="function"&&!this.isRoot()){const rect=this.rect(1,1);const m=rect.node.getScreenCTM();rect.remove();return new Matrix(m)}return new Matrix(this.node.getScreenCTM())}register(Matrix,"Matrix");function parser(){if(!parser.nodes){const svg=makeInstance().size(2,0);svg.node.style.cssText=["opacity: 0","position: absolute","left: -100%","top: -100%","overflow: hidden"].join(";");svg.attr("focusable","false");svg.attr("aria-hidden","true");const path=svg.path().node;parser.nodes={svg:svg,path:path}}if(!parser.nodes.svg.node.parentNode){const b=globals.document.body||globals.document.documentElement;parser.nodes.svg.addTo(b)}return parser.nodes}function isNulledBox(box){return!box.width&&!box.height&&!box.x&&!box.y}function domContains(node){return node===globals.document||(globals.document.documentElement.contains||function(node){while(node.parentNode){node=node.parentNode}return node===globals.document}).call(globals.document.documentElement,node)}class Box{constructor(...args){this.init(...args)}addOffset(){this.x+=globals.window.pageXOffset;this.y+=globals.window.pageYOffset;return new Box(this)}init(source){const base=[0,0,0,0];source=typeof source==="string"?source.split(delimiter).map(parseFloat):Array.isArray(source)?source:typeof source==="object"?[source.left!=null?source.left:source.x,source.top!=null?source.top:source.y,source.width,source.height]:arguments.length===4?[].slice.call(arguments):base;this.x=source[0]||0;this.y=source[1]||0;this.width=this.w=source[2]||0;this.height=this.h=source[3]||0;this.x2=this.x+this.w;this.y2=this.y+this.h;this.cx=this.x+this.w/2;this.cy=this.y+this.h/2;return this}isNulled(){return isNulledBox(this)}merge(box){const x=Math.min(this.x,box.x);const y=Math.min(this.y,box.y);const width=Math.max(this.x+this.width,box.x+box.width)-x;const height=Math.max(this.y+this.height,box.y+box.height)-y;return new Box(x,y,width,height)}toArray(){return[this.x,this.y,this.width,this.height]}toString(){return this.x+" "+this.y+" "+this.width+" "+this.height}transform(m){if(!(m instanceof Matrix)){m=new Matrix(m)}let xMin=Infinity;let xMax=-Infinity;let yMin=Infinity;let yMax=-Infinity;const pts=[new Point(this.x,this.y),new Point(this.x2,this.y),new Point(this.x,this.y2),new Point(this.x2,this.y2)];pts.forEach(function(p){p=p.transform(m);xMin=Math.min(xMin,p.x);xMax=Math.max(xMax,p.x);yMin=Math.min(yMin,p.y);yMax=Math.max(yMax,p.y)});return new Box(xMin,yMin,xMax-xMin,yMax-yMin)}}function getBox(el,getBBoxFn,retry){let box;try{box=getBBoxFn(el.node);if(isNulledBox(box)&&!domContains(el.node)){throw new Error("Element not in the dom")}}catch(e){box=retry(el)}return box}function bbox(){const getBBox=node=>node.getBBox();const retry=el=>{try{const clone=el.clone().addTo(parser().svg).show();const box=clone.node.getBBox();clone.remove();return box}catch(e){throw new Error(`Getting bbox of element "${el.node.nodeName}" is not possible: ${e.toString()}`)}};const box=getBox(this,getBBox,retry);const bbox=new Box(box);return bbox}function rbox(el){const getRBox=node=>node.getBoundingClientRect();const retry=el=>{throw new Error(`Getting rbox of element "${el.node.nodeName}" is not possible`)};const box=getBox(this,getRBox,retry);const rbox=new Box(box);if(el){return rbox.transform(el.screenCTM().inverseO())}return rbox.addOffset()}function inside(x,y){const box=this.bbox();return x>box.x&&y>box.y&&x{return fnOrMethodName.call(el,el,i,arr)})}else{return this.map(el=>{return el[fnOrMethodName](...args)})}},toArray(){return Array.prototype.concat.apply([],this)}});const reserved=["toArray","constructor","each"];List.extend=function(methods){methods=methods.reduce((obj,name)=>{if(reserved.includes(name))return obj;if(name[0]==="_")return obj;obj[name]=function(...attrs){return this.each(name,...attrs)};return obj},{});extend([List],methods)};function baseFind(query,parent){return new List(map((parent||globals.document).querySelectorAll(query),function(node){return adopt(node)}))}function find(query){return baseFind(query,this.node)}function findOne(query){return adopt(this.node.querySelector(query))}let listenerId=0;const windowEvents={};function getEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(!n.events)n.events={};return n.events}function getEventTarget(instance){return instance.getEventTarget()}function clearEvents(instance){let n=instance.getEventHolder();if(n===globals.window)n=windowEvents;if(n.events)n.events={}}function on(node,events,listener,binding,options){const l=listener.bind(binding||node);const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);events=Array.isArray(events)?events:events.split(delimiter);if(!listener._svgjsListenerId){listener._svgjsListenerId=++listenerId}events.forEach(function(event){const ev=event.split(".")[0];const ns=event.split(".")[1]||"*";bag[ev]=bag[ev]||{};bag[ev][ns]=bag[ev][ns]||{};bag[ev][ns][listener._svgjsListenerId]=l;n.addEventListener(ev,l,options||false)})}function off(node,events,listener,options){const instance=makeInstance(node);const bag=getEvents(instance);const n=getEventTarget(instance);if(typeof listener==="function"){listener=listener._svgjsListenerId;if(!listener)return}events=Array.isArray(events)?events:(events||"").split(delimiter);events.forEach(function(event){const ev=event&&event.split(".")[0];const ns=event&&event.split(".")[1];let namespace,l;if(listener){if(bag[ev]&&bag[ev][ns||"*"]){n.removeEventListener(ev,bag[ev][ns||"*"][listener],options||false);delete bag[ev][ns||"*"][listener]}}else if(ev&&ns){if(bag[ev]&&bag[ev][ns]){for(l in bag[ev][ns]){off(n,[ev,ns].join("."),l)}delete bag[ev][ns]}}else if(ns){for(event in bag){for(namespace in bag[event]){if(ns===namespace){off(n,[event,ns].join("."))}}}}else if(ev){if(bag[ev]){for(namespace in bag[ev]){off(n,[ev,namespace].join("."))}delete bag[ev]}}else{for(event in bag){off(n,event)}clearEvents(instance)}})}function dispatch(node,event,data,options){const n=getEventTarget(node);if(event instanceof globals.window.Event){n.dispatchEvent(event)}else{event=new globals.window.CustomEvent(event,{detail:data,cancelable:true,...options});n.dispatchEvent(event)}return event}class EventTarget extends Base{addEventListener(){}dispatch(event,data,options){return dispatch(this,event,data,options)}dispatchEvent(event){const bag=this.getEventHolder().events;if(!bag)return true;const events=bag[event.type];for(const i in events){for(const j in events[i]){events[i][j](event)}}return!event.defaultPrevented}fire(event,data,options){this.dispatch(event,data,options);return this}getEventHolder(){return this}getEventTarget(){return this}off(event,listener,options){off(this,event,listener,options);return this}on(event,listener,binding,options){on(this,event,listener,binding,options);return this}removeEventListener(){}}register(EventTarget,"EventTarget");function noop(){}const timeline={duration:400,ease:">",delay:0};const attrs={"fill-opacity":1,"stroke-opacity":1,"stroke-width":0,"stroke-linejoin":"miter","stroke-linecap":"butt",fill:"#000000",stroke:"#000000",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,"stop-opacity":1,"stop-color":"#000000","text-anchor":"start"};var defaults={__proto__:null,noop:noop,timeline:timeline,attrs:attrs};class SVGArray extends Array{constructor(...args){super(...args);this.init(...args)}clone(){return new this.constructor(this)}init(arr){if(typeof arr==="number")return this;this.length=0;this.push(...this.parse(arr));return this}parse(array=[]){if(array instanceof Array)return array;return array.trim().split(delimiter).map(parseFloat)}toArray(){return Array.prototype.concat.apply([],this)}toSet(){return new Set(this)}toString(){return this.join(" ")}valueOf(){const ret=[];ret.push(...this);return ret}}class SVGNumber{constructor(...args){this.init(...args)}convert(unit){return new SVGNumber(this.value,unit)}divide(number){number=new SVGNumber(number);return new SVGNumber(this/number,this.unit||number.unit)}init(value,unit){unit=Array.isArray(value)?value[1]:unit;value=Array.isArray(value)?value[0]:value;this.value=0;this.unit=unit||"";if(typeof value==="number"){this.value=isNaN(value)?0:!isFinite(value)?value<0?-34e37:+34e37:value}else if(typeof value==="string"){unit=value.match(numberAndUnit);if(unit){this.value=parseFloat(unit[1]);if(unit[5]==="%"){this.value/=100}else if(unit[5]==="s"){this.value*=1e3}this.unit=unit[5]}}else{if(value instanceof SVGNumber){this.value=value.valueOf();this.unit=value.unit}}return this}minus(number){number=new SVGNumber(number);return new SVGNumber(this-number,this.unit||number.unit)}plus(number){number=new SVGNumber(number);return new SVGNumber(this+number,this.unit||number.unit)}times(number){number=new SVGNumber(number);return new SVGNumber(this*number,this.unit||number.unit)}toArray(){return[this.value,this.unit]}toJSON(){return this.toString()}toString(){return(this.unit==="%"?~~(this.value*1e8)/1e6:this.unit==="s"?this.value/1e3:this.value)+this.unit}valueOf(){return this.value}}const hooks=[];function registerAttrHook(fn){hooks.push(fn)}function attr(attr,val,ns){if(attr==null){attr={};val=this.node.attributes;for(const node of val){attr[node.nodeName]=isNumber.test(node.nodeValue)?parseFloat(node.nodeValue):node.nodeValue}return attr}else if(attr instanceof Array){return attr.reduce((last,curr)=>{last[curr]=this.attr(curr);return last},{})}else if(typeof attr==="object"&&attr.constructor===Object){for(val in attr)this.attr(val,attr[val])}else if(val===null){this.node.removeAttribute(attr)}else if(val==null){val=this.node.getAttribute(attr);return val==null?attrs[attr]:isNumber.test(val)?parseFloat(val):val}else{val=hooks.reduce((_val,hook)=>{return hook(attr,_val,this)},val);if(typeof val==="number"){val=new SVGNumber(val)}else if(Color.isColor(val)){val=new Color(val)}else if(val.constructor===Array){val=new SVGArray(val)}if(attr==="leading"){if(this.leading){this.leading(val)}}else{typeof ns==="string"?this.node.setAttributeNS(ns,attr,val.toString()):this.node.setAttribute(attr,val.toString())}if(this.rebuild&&(attr==="font-size"||attr==="x")){this.rebuild()}}return this}class Dom extends EventTarget{constructor(node,attrs){super();this.node=node;this.type=node.nodeName;if(attrs&&node!==attrs){this.attr(attrs)}}add(element,i){element=makeInstance(element);if(element.removeNamespace&&this.node instanceof globals.window.SVGElement){element.removeNamespace()}if(i==null){this.node.appendChild(element.node)}else if(element.node!==this.node.childNodes[i]){this.node.insertBefore(element.node,this.node.childNodes[i])}return this}addTo(parent,i){return makeInstance(parent).put(this,i)}children(){return new List(map(this.node.children,function(node){return adopt(node)}))}clear(){while(this.node.hasChildNodes()){this.node.removeChild(this.node.lastChild)}return this}clone(deep=true){this.writeDataToDom();return new this.constructor(assignNewId(this.node.cloneNode(deep)))}each(block,deep){const children=this.children();let i,il;for(i=0,il=children.length;i=0}html(htmlOrFn,outerHTML){return this.xml(htmlOrFn,outerHTML,html)}id(id){if(typeof id==="undefined"&&!this.node.id){this.node.id=eid(this.type)}return this.attr("id",id)}index(element){return[].slice.call(this.node.childNodes).indexOf(element.node)}last(){return adopt(this.node.lastChild)}matches(selector){const el=this.node;const matcher=el.matches||el.matchesSelector||el.msMatchesSelector||el.mozMatchesSelector||el.webkitMatchesSelector||el.oMatchesSelector||null;return matcher&&matcher.call(el,selector)}parent(type){let parent=this;if(!parent.node.parentNode)return null;parent=adopt(parent.node.parentNode);if(!type)return parent;do{if(typeof type==="string"?parent.matches(type):parent instanceof type)return parent}while(parent=adopt(parent.node.parentNode));return parent}put(element,i){element=makeInstance(element);this.add(element,i);return element}putIn(parent,i){return makeInstance(parent).add(this,i)}remove(){if(this.parent()){this.parent().removeElement(this)}return this}removeElement(element){this.node.removeChild(element.node);return this}replace(element){element=makeInstance(element);if(this.node.parentNode){this.node.parentNode.replaceChild(element.node,this.node)}return element}round(precision=2,map=null){const factor=10**precision;const attrs=this.attr(map);for(const i in attrs){if(typeof attrs[i]==="number"){attrs[i]=Math.round(attrs[i]*factor)/factor}}this.attr(attrs);return this}svg(svgOrFn,outerSVG){return this.xml(svgOrFn,outerSVG,svg)}toString(){return this.id()}words(text){this.node.textContent=text;return this}wrap(node){const parent=this.parent();if(!parent){return this.addTo(node)}const position=parent.index(this);return parent.put(node,position).put(this)}writeDataToDom(){this.each(function(){this.writeDataToDom()});return this}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){outerXML=outerXML==null?true:outerXML;this.writeDataToDom();let current=this;if(xmlOrFn!=null){current=adopt(current.node.cloneNode(true));if(outerXML){const result=xmlOrFn(current);current=result||current;if(result===false)return""}current.each(function(){const result=xmlOrFn(this);const _this=result||this;if(result===false){this.remove()}else if(result&&this!==_this){this.replace(_this)}},true)}return outerXML?current.node.outerHTML:current.node.innerHTML}outerXML=outerXML==null?false:outerXML;const well=create("wrapper",ns);const fragment=globals.document.createDocumentFragment();well.innerHTML=xmlOrFn;for(let len=well.children.length;len--;){fragment.appendChild(well.firstElementChild)}const parent=this.parent();return outerXML?this.replace(fragment)&&parent:this.add(fragment)}}extend(Dom,{attr:attr,find:find,findOne:findOne});register(Dom,"Dom");class Element extends Dom{constructor(node,attrs){super(node,attrs);this.dom={};this.node.instance=this;if(node.hasAttribute("svgjs:data")){this.setData(JSON.parse(node.getAttribute("svgjs:data"))||{})}}center(x,y){return this.cx(x).cy(y)}cx(x){return x==null?this.x()+this.width()/2:this.x(x-this.width()/2)}cy(y){return y==null?this.y()+this.height()/2:this.y(y-this.height()/2)}defs(){const root=this.root();return root&&root.defs()}dmove(x,y){return this.dx(x).dy(y)}dx(x=0){return this.x(new SVGNumber(x).plus(this.x()))}dy(y=0){return this.y(new SVGNumber(y).plus(this.y()))}getEventHolder(){return this}height(height){return this.attr("height",height)}move(x,y){return this.x(x).y(y)}parents(until=this.root()){const isSelector=typeof until==="string";if(!isSelector){until=makeInstance(until)}const parents=new List;let parent=this;while((parent=parent.parent())&&parent.node!==globals.document&&parent.nodeName!=="#document-fragment"){parents.push(parent);if(!isSelector&&parent.node===until.node){break}if(isSelector&&parent.matches(until)){break}if(parent.node===this.root().node){return null}}return parents}reference(attr){attr=this.attr(attr);if(!attr)return null;const m=(attr+"").match(reference);return m?makeInstance(m[1]):null}root(){const p=this.parent(getClass(root));return p&&p.root()}setData(o){this.dom=o;return this}size(width,height){const p=proportionalSize(this,width,height);return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height))}width(width){return this.attr("width",width)}writeDataToDom(){this.node.removeAttribute("svgjs:data");if(Object.keys(this.dom).length){this.node.setAttribute("svgjs:data",JSON.stringify(this.dom))}return super.writeDataToDom()}x(x){return this.attr("x",x)}y(y){return this.attr("y",y)}}extend(Element,{bbox:bbox,rbox:rbox,inside:inside,point:point,ctm:ctm,screenCTM:screenCTM});register(Element,"Element");const sugar={stroke:["color","width","opacity","linecap","linejoin","miterlimit","dasharray","dashoffset"],fill:["color","opacity","rule"],prefix:function(t,a){return a==="color"?t:t+"-"+a}};["fill","stroke"].forEach(function(m){const extension={};let i;extension[m]=function(o){if(typeof o==="undefined"){return this.attr(m)}if(typeof o==="string"||o instanceof Color||Color.isRgb(o)||o instanceof Element){this.attr(m,o)}else{for(i=sugar[m].length-1;i>=0;i--){if(o[sugar[m][i]]!=null){this.attr(sugar.prefix(m,sugar[m][i]),o[sugar[m][i]])}}}return this};registerMethods(["Element","Runner"],extension)});registerMethods(["Element","Runner"],{matrix:function(mat,b,c,d,e,f){if(mat==null){return new Matrix(this)}return this.attr("transform",new Matrix(mat,b,c,d,e,f))},rotate:function(angle,cx,cy){return this.transform({rotate:angle,ox:cx,oy:cy},true)},skew:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({skew:x,ox:y,oy:cx},true):this.transform({skew:[x,y],ox:cx,oy:cy},true)},shear:function(lam,cx,cy){return this.transform({shear:lam,ox:cx,oy:cy},true)},scale:function(x,y,cx,cy){return arguments.length===1||arguments.length===3?this.transform({scale:x,ox:y,oy:cx},true):this.transform({scale:[x,y],ox:cx,oy:cy},true)},translate:function(x,y){return this.transform({translate:[x,y]},true)},relative:function(x,y){return this.transform({relative:[x,y]},true)},flip:function(direction="both",origin="center"){if("xybothtrue".indexOf(direction)===-1){origin=direction;direction="both"}return this.transform({flip:direction,origin:origin},true)},opacity:function(value){return this.attr("opacity",value)}});registerMethods("radius",{radius:function(x,y=x){const type=(this._element||this).type;return type==="radialGradient"?this.attr("r",new SVGNumber(x)):this.rx(x).ry(y)}});registerMethods("Path",{length:function(){return this.node.getTotalLength()},pointAt:function(length){return new Point(this.node.getPointAtLength(length))}});registerMethods(["Element","Runner"],{font:function(a,v){if(typeof a==="object"){for(v in a)this.font(v,a[v]);return this}return a==="leading"?this.leading(v):a==="anchor"?this.attr("text-anchor",v):a==="size"||a==="family"||a==="weight"||a==="stretch"||a==="variant"||a==="style"?this.attr("font-"+a,v):this.attr(a,v)}});const methods=["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","mouseenter","mouseleave","touchstart","touchmove","touchleave","touchend","touchcancel"].reduce(function(last,event){const fn=function(f){if(f===null){this.off(event)}else{this.on(event,f)}return this};last[event]=fn;return last},{});registerMethods("Element",methods);function untransform(){return this.attr("transform",null)}function matrixify(){const matrix=(this.attr("transform")||"").split(transforms).slice(0,-1).map(function(str){const kv=str.trim().split("(");return[kv[0],kv[1].split(delimiter).map(function(str){return parseFloat(str)})]}).reverse().reduce(function(matrix,transform){if(transform[0]==="matrix"){return matrix.lmultiply(Matrix.fromArray(transform[1]))}return matrix[transform[0]].apply(matrix,transform[1])},new Matrix);return matrix}function toParent(parent,i){if(this===parent)return this;const ctm=this.screenCTM();const pCtm=parent.screenCTM().inverse();this.addTo(parent,i).untransform().transform(pCtm.multiply(ctm));return this}function toRoot(i){return this.toParent(this.root(),i)}function transform(o,relative){if(o==null||typeof o==="string"){const decomposed=new Matrix(this).decompose();return o==null?decomposed:decomposed[o]}if(!Matrix.isMatrixLike(o)){o={...o,origin:getOrigin(o,this)}}const cleanRelative=relative===true?this:relative||false;const result=new Matrix(cleanRelative).transform(o);return this.attr("transform",result)}registerMethods("Element",{untransform:untransform,matrixify:matrixify,toParent:toParent,toRoot:toRoot,transform:transform});class Container extends Element{flatten(parent=this,index){this.each(function(){if(this instanceof Container){return this.flatten().ungroup()}});return this}ungroup(parent=this.parent(),index=parent.index(this)){index=index===-1?parent.children().length:index;this.each(function(i,children){return children[children.length-i-1].toParent(parent,index)});return this.remove()}}register(Container,"Container");class Defs extends Container{constructor(node,attrs=node){super(nodeOrNew("defs",node),attrs)}flatten(){return this}ungroup(){return this}}register(Defs,"Defs");class Shape extends Element{}register(Shape,"Shape");function rx(rx){return this.attr("rx",rx)}function ry(ry){return this.attr("ry",ry)}function x$3(x){return x==null?this.cx()-this.rx():this.cx(x+this.rx())}function y$3(y){return y==null?this.cy()-this.ry():this.cy(y+this.ry())}function cx$1(x){return this.attr("cx",x)}function cy$1(y){return this.attr("cy",y)}function width$2(width){return width==null?this.rx()*2:this.rx(new SVGNumber(width).divide(2))}function height$2(height){return height==null?this.ry()*2:this.ry(new SVGNumber(height).divide(2))}var circled={__proto__:null,rx:rx,ry:ry,x:x$3,y:y$3,cx:cx$1,cy:cy$1,width:width$2,height:height$2};class Ellipse extends Shape{constructor(node,attrs=node){super(nodeOrNew("ellipse",node),attrs)}size(width,height){const p=proportionalSize(this,width,height);return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2))}}extend(Ellipse,circled);registerMethods("Container",{ellipse:wrapWithAttrCheck(function(width=0,height=width){return this.put(new Ellipse).size(width,height).move(0,0)})});register(Ellipse,"Ellipse");class Fragment extends Dom{constructor(node=globals.document.createDocumentFragment()){super(node)}xml(xmlOrFn,outerXML,ns){if(typeof xmlOrFn==="boolean"){ns=outerXML;outerXML=xmlOrFn;xmlOrFn=null}if(xmlOrFn==null||typeof xmlOrFn==="function"){const wrapper=new Dom(create("wrapper",ns));wrapper.add(this.node.cloneNode(true));return wrapper.xml(false,ns)}return super.xml(xmlOrFn,false,ns)}}register(Fragment,"Fragment");function from(x,y){return(this._element||this).type==="radialGradient"?this.attr({fx:new SVGNumber(x),fy:new SVGNumber(y)}):this.attr({x1:new SVGNumber(x),y1:new SVGNumber(y)})}function to(x,y){return(this._element||this).type==="radialGradient"?this.attr({cx:new SVGNumber(x),cy:new SVGNumber(y)}):this.attr({x2:new SVGNumber(x),y2:new SVGNumber(y)})}var gradiented={__proto__:null,from:from,to:to};class Gradient extends Container{constructor(type,attrs){super(nodeOrNew(type+"Gradient",typeof type==="string"?null:type),attrs)}attr(a,b,c){if(a==="transform")a="gradientTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}extend(Gradient,gradiented);registerMethods({Container:{gradient(...args){return this.defs().gradient(...args)}},Defs:{gradient:wrapWithAttrCheck(function(type,block){return this.put(new Gradient(type)).update(block)})}});register(Gradient,"Gradient");class Pattern extends Container{constructor(node,attrs=node){super(nodeOrNew("pattern",node),attrs)}attr(a,b,c){if(a==="transform")a="patternTransform";return super.attr(a,b,c)}bbox(){return new Box}targets(){return baseFind('svg [fill*="'+this.id()+'"]')}toString(){return this.url()}update(block){this.clear();if(typeof block==="function"){block.call(this,this)}return this}url(){return'url("#'+this.id()+'")'}}registerMethods({Container:{pattern(...args){return this.defs().pattern(...args)}},Defs:{pattern:wrapWithAttrCheck(function(width,height,block){return this.put(new Pattern).update(block).attr({x:0,y:0,width:width,height:height,patternUnits:"userSpaceOnUse"})})}});register(Pattern,"Pattern");class Image extends Shape{constructor(node,attrs=node){super(nodeOrNew("image",node),attrs)}load(url,callback){if(!url)return this;const img=new globals.window.Image;on(img,"load",function(e){const p=this.parent(Pattern);if(this.width()===0&&this.height()===0){this.size(img.width,img.height)}if(p instanceof Pattern){if(p.width()===0&&p.height()===0){p.size(this.width(),this.height())}}if(typeof callback==="function"){callback.call(this,e)}},this);on(img,"load error",function(){off(img)});return this.attr("href",img.src=url,xlink)}}registerAttrHook(function(attr,val,_this){if(attr==="fill"||attr==="stroke"){if(isImage.test(val)){val=_this.root().defs().image(val)}}if(val instanceof Image){val=_this.root().defs().pattern(0,0,pattern=>{pattern.add(val)})}return val});registerMethods({Container:{image:wrapWithAttrCheck(function(source,callback){return this.put(new Image).size(0,0).load(source,callback)})}});register(Image,"Image");class PointArray extends SVGArray{bbox(){let maxX=-Infinity;let maxY=-Infinity;let minX=Infinity;let minY=Infinity;this.forEach(function(el){maxX=Math.max(el[0],maxX);maxY=Math.max(el[1],maxY);minX=Math.min(el[0],minX);minY=Math.min(el[1],minY)});return new Box(minX,minY,maxX-minX,maxY-minY)}move(x,y){const box=this.bbox();x-=box.x;y-=box.y;if(!isNaN(x)&&!isNaN(y)){for(let i=this.length-1;i>=0;i--){this[i]=[this[i][0]+x,this[i][1]+y]}}return this}parse(array=[0,0]){const points=[];if(array instanceof Array){array=Array.prototype.concat.apply([],array)}else{array=array.trim().split(delimiter).map(parseFloat)}if(array.length%2!==0)array.pop();for(let i=0,len=array.length;i=0;i--){if(box.width)this[i][0]=(this[i][0]-box.x)*width/box.width+box.x;if(box.height)this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}return this}toLine(){return{x1:this[0][0],y1:this[0][1],x2:this[1][0],y2:this[1][1]}}toString(){const array=[];for(let i=0,il=this.length;i":function(pos){return-Math.cos(pos*Math.PI)/2+.5},">":function(pos){return Math.sin(pos*Math.PI/2)},"<":function(pos){return-Math.cos(pos*Math.PI/2)+1},bezier:function(x1,y1,x2,y2){return function(t){if(t<0){if(x1>0){return y1/x1*t}else if(x2>0){return y2/x2*t}else{return 0}}else if(t>1){if(x2<1){return(1-y2)/(1-x2)*t+(y2-x2)/(1-x2)}else if(x1<1){return(1-y1)/(1-x1)*t+(y1-x1)/(1-x1)}else{return 1}}else{return 3*t*(1-t)**2*y1+3*t**2*(1-t)*y2+t**3}}},steps:function(steps,stepPosition="end"){stepPosition=stepPosition.split("-").reverse()[0];let jumps=steps;if(stepPosition==="none"){--jumps}else if(stepPosition==="both"){++jumps}return(t,beforeFlag=false)=>{let step=Math.floor(t*steps);const jumping=t*step%1===0;if(stepPosition==="start"||stepPosition==="both"){++step}if(beforeFlag&&jumping){--step}if(t>=0&&step<0){step=0}if(t<=1&&step>jumps){step=jumps}return step/jumps}}};class Stepper{done(){return false}}class Ease extends Stepper{constructor(fn=timeline.ease){super();this.ease=easing[fn]||fn}step(from,to,pos){if(typeof from!=="number"){return pos<1?from:to}return from+(to-from)*this.ease(pos)}}class Controller extends Stepper{constructor(fn){super();this.stepper=fn}done(c){return c.done}step(current,target,dt,c){return this.stepper(current,target,dt,c)}}function recalculate(){const duration=(this._duration||500)/1e3;const overshoot=this._overshoot||0;const eps=1e-10;const pi=Math.PI;const os=Math.log(overshoot/100+eps);const zeta=-os/Math.sqrt(pi*pi+os*os);const wn=3.9/(zeta*duration);this.d=2*zeta*wn;this.k=wn*wn}class Spring extends Controller{constructor(duration=500,overshoot=0){super();this.duration(duration).overshoot(overshoot)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;if(dt>100)dt=16;dt/=1e3;const velocity=c.velocity||0;const acceleration=-this.d*velocity-this.k*(current-target);const newPosition=current+velocity*dt+acceleration*dt*dt/2;c.velocity=velocity+acceleration*dt;c.done=Math.abs(target-newPosition)+Math.abs(velocity)<.002;return c.done?target:newPosition}}extend(Spring,{duration:makeSetterGetter("_duration",recalculate),overshoot:makeSetterGetter("_overshoot",recalculate)});class PID extends Controller{constructor(p=.1,i=.01,d=0,windup=1e3){super();this.p(p).i(i).d(d).windup(windup)}step(current,target,dt,c){if(typeof current==="string")return current;c.done=dt===Infinity;if(dt===Infinity)return target;if(dt===0)return current;const p=target-current;let i=(c.integral||0)+p*dt;const d=(p-(c.error||0))/dt;const windup=this._windup;if(windup!==false){i=Math.max(-windup,Math.min(i,windup))}c.error=p;c.integral=i;c.done=Math.abs(p)<.001;return c.done?target:current+(this.P*p+this.I*i+this.D*d)}}extend(PID,{windup:makeSetterGetter("_windup"),p:makeSetterGetter("P"),i:makeSetterGetter("I"),d:makeSetterGetter("D")});const segmentParameters={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};const pathHandlers={M:function(c,p,p0){p.x=p0.x=c[0];p.y=p0.y=c[1];return["M",p.x,p.y]},L:function(c,p){p.x=c[0];p.y=c[1];return["L",c[0],c[1]]},H:function(c,p){p.x=c[0];return["H",c[0]]},V:function(c,p){p.y=c[0];return["V",c[0]]},C:function(c,p){p.x=c[4];p.y=c[5];return["C",c[0],c[1],c[2],c[3],c[4],c[5]]},S:function(c,p){p.x=c[2];p.y=c[3];return["S",c[0],c[1],c[2],c[3]]},Q:function(c,p){p.x=c[2];p.y=c[3];return["Q",c[0],c[1],c[2],c[3]]},T:function(c,p){p.x=c[0];p.y=c[1];return["T",c[0],c[1]]},Z:function(c,p,p0){p.x=p0.x;p.y=p0.y;return["Z"]},A:function(c,p){p.x=c[5];p.y=c[6];return["A",c[0],c[1],c[2],c[3],c[4],c[5],c[6]]}};const mlhvqtcsaz="mlhvqtcsaz".split("");for(let i=0,il=mlhvqtcsaz.length;i=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]+=x;this[i][2]+=y}else if(l==="H"){this[i][1]+=x}else if(l==="V"){this[i][1]+=y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]+=x;this[i][2]+=y;this[i][3]+=x;this[i][4]+=y;if(l==="C"){this[i][5]+=x;this[i][6]+=y}}else if(l==="A"){this[i][6]+=x;this[i][7]+=y}}}return this}parse(d="M0 0"){if(Array.isArray(d)){d=Array.prototype.concat.apply([],d).toString()}return pathParser(d)}size(width,height){const box=this.bbox();let i,l;box.width=box.width===0?1:box.width;box.height=box.height===0?1:box.height;for(i=this.length-1;i>=0;i--){l=this[i][0];if(l==="M"||l==="L"||l==="T"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y}else if(l==="H"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x}else if(l==="V"){this[i][1]=(this[i][1]-box.y)*height/box.height+box.y}else if(l==="C"||l==="S"||l==="Q"){this[i][1]=(this[i][1]-box.x)*width/box.width+box.x;this[i][2]=(this[i][2]-box.y)*height/box.height+box.y;this[i][3]=(this[i][3]-box.x)*width/box.width+box.x;this[i][4]=(this[i][4]-box.y)*height/box.height+box.y;if(l==="C"){this[i][5]=(this[i][5]-box.x)*width/box.width+box.x;this[i][6]=(this[i][6]-box.y)*height/box.height+box.y}}else if(l==="A"){this[i][1]=this[i][1]*width/box.width;this[i][2]=this[i][2]*height/box.height;this[i][6]=(this[i][6]-box.x)*width/box.width+box.x;this[i][7]=(this[i][7]-box.y)*height/box.height+box.y}}return this}toString(){return arrayToString(this)}}const getClassForType=value=>{const type=typeof value;if(type==="number"){return SVGNumber}else if(type==="string"){if(Color.isColor(value)){return Color}else if(delimiter.test(value)){return isPathLetter.test(value)?PathArray:SVGArray}else if(numberAndUnit.test(value)){return SVGNumber}else{return NonMorphable}}else if(morphableTypes.indexOf(value.constructor)>-1){return value.constructor}else if(Array.isArray(value)){return SVGArray}else if(type==="object"){return ObjectBag}else{return NonMorphable}};class Morphable{constructor(stepper){this._stepper=stepper||new Ease("-");this._from=null;this._to=null;this._type=null;this._context=null;this._morphObj=null}at(pos){return this._morphObj.morph(this._from,this._to,pos,this._stepper,this._context)}done(){const complete=this._context.map(this._stepper.done).reduce(function(last,curr){return last&&curr},true);return complete}from(val){if(val==null){return this._from}this._from=this._set(val);return this}stepper(stepper){if(stepper==null)return this._stepper;this._stepper=stepper;return this}to(val){if(val==null){return this._to}this._to=this._set(val);return this}type(type){if(type==null){return this._type}this._type=type;return this}_set(value){if(!this._type){this.type(getClassForType(value))}let result=new this._type(value);if(this._type===Color){result=this._to?result[this._to[4]]():this._from?result[this._from[4]]():result}if(this._type===ObjectBag){result=this._to?result.align(this._to):this._from?result.align(this._from):result}result=result.toConsumable();this._morphObj=this._morphObj||new this._type;this._context=this._context||Array.apply(null,Array(result.length)).map(Object).map(function(o){o.done=true;return o});return result}}class NonMorphable{constructor(...args){this.init(...args)}init(val){val=Array.isArray(val)?val[0]:val;this.value=val;return this}toArray(){return[this.value]}valueOf(){return this.value}}class TransformBag{constructor(...args){this.init(...args)}init(obj){if(Array.isArray(obj)){obj={scaleX:obj[0],scaleY:obj[1],shear:obj[2],rotate:obj[3],translateX:obj[4],translateY:obj[5],originX:obj[6],originY:obj[7]}}Object.assign(this,TransformBag.defaults,obj);return this}toArray(){const v=this;return[v.scaleX,v.scaleY,v.shear,v.rotate,v.translateX,v.translateY,v.originX,v.originY]}}TransformBag.defaults={scaleX:1,scaleY:1,shear:0,rotate:0,translateX:0,translateY:0,originX:0,originY:0};const sortByKey=(a,b)=>{return a[0]b[0]?1:0};class ObjectBag{constructor(...args){this.init(...args)}align(other){const values=this.values;for(let i=0,il=values.length;ilast.concat(curr),[]);return this}toArray(){return this.values}valueOf(){const obj={};const arr=this.values;while(arr.length){const key=arr.shift();const Type=arr.shift();const num=arr.shift();const values=arr.splice(0,num);obj[key]=new Type(values)}return obj}}const morphableTypes=[NonMorphable,TransformBag,ObjectBag];function registerMorphableType(type=[]){morphableTypes.push(...[].concat(type))}function makeMorphable(){extend(morphableTypes,{to(val){return(new Morphable).type(this.constructor).from(this.toArray()).to(val)},fromArray(arr){this.init(arr);return this},toConsumable(){return this.toArray()},morph(from,to,pos,stepper,context){const mapper=function(i,index){return stepper.step(i,to[index],pos,context[index],context)};return this.fromArray(from.map(mapper))}})}class Path extends Shape{constructor(node,attrs=node){super(nodeOrNew("path",node),attrs)}array(){return this._array||(this._array=new PathArray(this.attr("d")))}clear(){delete this._array;return this}height(height){return height==null?this.bbox().height:this.size(this.bbox().width,height)}move(x,y){return this.attr("d",this.array().move(x,y))}plot(d){return d==null?this.array():this.clear().attr("d",typeof d==="string"?d:this._array=new PathArray(d))}size(width,height){const p=proportionalSize(this,width,height);return this.attr("d",this.array().size(p.width,p.height))}width(width){return width==null?this.bbox().width:this.size(width,this.bbox().height)}x(x){return x==null?this.bbox().x:this.move(x,this.bbox().y)}y(y){return y==null?this.bbox().y:this.move(this.bbox().x,y)}}Path.prototype.MorphArray=PathArray;registerMethods({Container:{path:wrapWithAttrCheck(function(d){return this.put(new Path).plot(d||new PathArray)})}});register(Path,"Path");function array(){return this._array||(this._array=new PointArray(this.attr("points")))}function clear(){delete this._array;return this}function move$2(x,y){return this.attr("points",this.array().move(x,y))}function plot(p){return p==null?this.array():this.clear().attr("points",typeof p==="string"?p:this._array=new PointArray(p))}function size$1(width,height){const p=proportionalSize(this,width,height);return this.attr("points",this.array().size(p.width,p.height))}var poly={__proto__:null,array:array,clear:clear,move:move$2,plot:plot,size:size$1};class Polygon extends Shape{constructor(node,attrs=node){super(nodeOrNew("polygon",node),attrs)}}registerMethods({Container:{polygon:wrapWithAttrCheck(function(p){return this.put(new Polygon).plot(p||new PointArray)})}});extend(Polygon,pointed);extend(Polygon,poly);register(Polygon,"Polygon");class Polyline extends Shape{constructor(node,attrs=node){super(nodeOrNew("polyline",node),attrs)}}registerMethods({Container:{polyline:wrapWithAttrCheck(function(p){return this.put(new Polyline).plot(p||new PointArray)})}});extend(Polyline,pointed);extend(Polyline,poly);register(Polyline,"Polyline");class Rect extends Shape{constructor(node,attrs=node){super(nodeOrNew("rect",node),attrs)}}extend(Rect,{rx:rx,ry:ry});registerMethods({Container:{rect:wrapWithAttrCheck(function(width,height){return this.put(new Rect).size(width,height)})}});register(Rect,"Rect");class Queue{constructor(){this._first=null;this._last=null}first(){return this._first&&this._first.value}last(){return this._last&&this._last.value}push(value){const item=typeof value.next!=="undefined"?value:{value:value,next:null,prev:null};if(this._last){item.prev=this._last;this._last.next=item;this._last=item}else{this._last=item;this._first=item}return item}remove(item){if(item.prev)item.prev.next=item.next;if(item.next)item.next.prev=item.prev;if(item===this._last)this._last=item.prev;if(item===this._first)this._first=item.next;item.prev=null;item.next=null}shift(){const remove=this._first;if(!remove)return null;this._first=remove.next;if(this._first)this._first.prev=null;this._last=this._first?this._last:null;return remove.value}}const Animator={nextDraw:null,frames:new Queue,timeouts:new Queue,immediates:new Queue,timer:()=>globals.window.performance||globals.window.Date,transforms:[],frame(fn){const node=Animator.frames.push({run:fn});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},timeout(fn,delay){delay=delay||0;const time=Animator.timer().now()+delay;const node=Animator.timeouts.push({run:fn,time:time});if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},immediate(fn){const node=Animator.immediates.push(fn);if(Animator.nextDraw===null){Animator.nextDraw=globals.window.requestAnimationFrame(Animator._draw)}return node},cancelFrame(node){node!=null&&Animator.frames.remove(node)},clearTimeout(node){node!=null&&Animator.timeouts.remove(node)},cancelImmediate(node){node!=null&&Animator.immediates.remove(node)},_draw(now){let nextTimeout=null;const lastTimeout=Animator.timeouts.last();while(nextTimeout=Animator.timeouts.shift()){if(now>=nextTimeout.time){nextTimeout.run()}else{Animator.timeouts.push(nextTimeout)}if(nextTimeout===lastTimeout)break}let nextFrame=null;const lastFrame=Animator.frames.last();while(nextFrame!==lastFrame&&(nextFrame=Animator.frames.shift())){nextFrame.run(now)}let nextImmediate=null;while(nextImmediate=Animator.immediates.shift()){nextImmediate()}Animator.nextDraw=Animator.timeouts.first()||Animator.frames.first()?globals.window.requestAnimationFrame(Animator._draw):null}};const makeSchedule=function(runnerInfo){const start=runnerInfo.start;const duration=runnerInfo.runner.duration();const end=start+duration;return{start:start,duration:duration,end:end,runner:runnerInfo.runner}};const defaultSource=function(){const w=globals.window;return(w.performance||w.Date).now()};class Timeline extends EventTarget{constructor(timeSource=defaultSource){super();this._timeSource=timeSource;this._startTime=0;this._speed=1;this._persist=0;this._nextFrame=null;this._paused=true;this._runners=[];this._runnerIds=[];this._lastRunnerId=-1;this._time=0;this._lastSourceTime=0;this._lastStepTime=0;this._step=this._stepFn.bind(this,false);this._stepImmediate=this._stepFn.bind(this,true)}active(){return!!this._nextFrame}finish(){this.time(this.getEndTimeOfTimeline()+1);return this.pause()}getEndTime(){const lastRunnerInfo=this.getLastRunnerInfo();const lastDuration=lastRunnerInfo?lastRunnerInfo.runner.duration():0;const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;return lastStartTime+lastDuration}getEndTimeOfTimeline(){const endTimes=this._runners.map(i=>i.start+i.runner.duration());return Math.max(0,...endTimes)}getLastRunnerInfo(){return this.getRunnerInfoById(this._lastRunnerId)}getRunnerInfoById(id){return this._runners[this._runnerIds.indexOf(id)]||null}pause(){this._paused=true;return this._continue()}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}play(){this._paused=false;return this.updateTime()._continue()}reverse(yes){const currentSpeed=this.speed();if(yes==null)return this.speed(-currentSpeed);const positive=Math.abs(currentSpeed);return this.speed(yes?-positive:positive)}schedule(runner,delay,when){if(runner==null){return this._runners.map(makeSchedule)}let absoluteStartTime=0;const endTime=this.getEndTime();delay=delay||0;if(when==null||when==="last"||when==="after"){absoluteStartTime=endTime}else if(when==="absolute"||when==="start"){absoluteStartTime=delay;delay=0}else if(when==="now"){absoluteStartTime=this._time}else if(when==="relative"){const runnerInfo=this.getRunnerInfoById(runner.id);if(runnerInfo){absoluteStartTime=runnerInfo.start+delay;delay=0}}else if(when==="with-last"){const lastRunnerInfo=this.getLastRunnerInfo();const lastStartTime=lastRunnerInfo?lastRunnerInfo.start:this._time;absoluteStartTime=lastStartTime}else{throw new Error('Invalid value for the "when" parameter')}runner.unschedule();runner.timeline(this);const persist=runner.persist();const runnerInfo={persist:persist===null?this._persist:persist,start:absoluteStartTime+delay,runner:runner};this._lastRunnerId=runner.id;this._runners.push(runnerInfo);this._runners.sort((a,b)=>a.start-b.start);this._runnerIds=this._runners.map(info=>info.runner.id);this.updateTime()._continue();return this}seek(dt){return this.time(this._time+dt)}source(fn){if(fn==null)return this._timeSource;this._timeSource=fn;return this}speed(speed){if(speed==null)return this._speed;this._speed=speed;return this}stop(){this.time(0);return this.pause()}time(time){if(time==null)return this._time;this._time=time;return this._continue(true)}unschedule(runner){const index=this._runnerIds.indexOf(runner.id);if(index<0)return this;this._runners.splice(index,1);this._runnerIds.splice(index,1);runner.timeline(null);return this}updateTime(){if(!this.active()){this._lastSourceTime=this._timeSource()}return this}_continue(immediateStep=false){Animator.cancelFrame(this._nextFrame);this._nextFrame=null;if(immediateStep)return this._stepImmediate();if(this._paused)return this;this._nextFrame=Animator.frame(this._step);return this}_stepFn(immediateStep=false){const time=this._timeSource();let dtSource=time-this._lastSourceTime;if(immediateStep)dtSource=0;const dtTime=this._speed*dtSource+(this._time-this._lastStepTime);this._lastSourceTime=time;if(!immediateStep){this._time+=dtTime;this._time=this._time<0?0:this._time}this._lastStepTime=this._time;this.fire("time",this._time);for(let k=this._runners.length;k--;){const runnerInfo=this._runners[k];const runner=runnerInfo.runner;const dtToStart=this._time-runnerInfo.start;if(dtToStart<=0){runner.reset()}}let runnersLeft=false;for(let i=0,len=this._runners.length;i0){this._continue()}else{this.pause();this.fire("finished")}return this}}registerMethods({Element:{timeline:function(timeline){if(timeline==null){this._timeline=this._timeline||new Timeline;return this._timeline}else{this._timeline=timeline;return this}}}});class Runner extends EventTarget{constructor(options){super();this.id=Runner.id++;options=options==null?timeline.duration:options;options=typeof options==="function"?new Controller(options):options;this._element=null;this._timeline=null;this.done=false;this._queue=[];this._duration=typeof options==="number"&&options;this._isDeclarative=options instanceof Controller;this._stepper=this._isDeclarative?options:new Ease;this._history={};this.enabled=true;this._time=0;this._lastTime=0;this._reseted=true;this.transforms=new Matrix;this.transformId=1;this._haveReversed=false;this._reverse=false;this._loopsDone=0;this._swing=false;this._wait=0;this._times=1;this._frameId=null;this._persist=this._isDeclarative?true:null}static sanitise(duration,delay,when){let times=1;let swing=false;let wait=0;duration=duration||timeline.duration;delay=delay||timeline.delay;when=when||"last";if(typeof duration==="object"&&!(duration instanceof Stepper)){delay=duration.delay||delay;when=duration.when||when;swing=duration.swing||swing;times=duration.times||times;wait=duration.wait||wait;duration=duration.duration||timeline.duration}return{duration:duration,delay:delay,swing:swing,times:times,wait:wait,when:when}}active(enabled){if(enabled==null)return this.enabled;this.enabled=enabled;return this}addTransform(transform,index){this.transforms.lmultiplyO(transform);return this}after(fn){return this.on("finished",fn)}animate(duration,delay,when){const o=Runner.sanitise(duration,delay,when);const runner=new Runner(o.duration);if(this._timeline)runner.timeline(this._timeline);if(this._element)runner.element(this._element);return runner.loop(o).schedule(o.delay,o.when)}clearTransform(){this.transforms=new Matrix;return this}clearTransformsFromQueue(){if(!this.done||!this._timeline||!this._timeline._runnerIds.includes(this.id)){this._queue=this._queue.filter(item=>{return!item.isTransform})}}delay(delay){return this.animate(0,delay)}duration(){return this._times*(this._wait+this._duration)-this._wait}during(fn){return this.queue(null,fn)}ease(fn){this._stepper=new Ease(fn);return this}element(element){if(element==null)return this._element;this._element=element;element._prepareRunner();return this}finish(){return this.step(Infinity)}loop(times,swing,wait){if(typeof times==="object"){swing=times.swing;wait=times.wait;times=times.times}this._times=times||Infinity;this._swing=swing||false;this._wait=wait||0;if(this._times===true){this._times=Infinity}return this}loops(p){const loopDuration=this._duration+this._wait;if(p==null){const loopsDone=Math.floor(this._time/loopDuration);const relativeTime=this._time-loopsDone*loopDuration;const position=relativeTime/this._duration;return Math.min(loopsDone+position,this._times)}const whole=Math.floor(p);const partial=p%1;const time=loopDuration*whole+this._duration*partial;return this.time(time)}persist(dtOrForever){if(dtOrForever==null)return this._persist;this._persist=dtOrForever;return this}position(p){const x=this._time;const d=this._duration;const w=this._wait;const t=this._times;const s=this._swing;const r=this._reverse;let position;if(p==null){const f=function(x){const swinging=s*Math.floor(x%(2*(w+d))/(w+d));const backwards=swinging&&!r||!swinging&&r;const uncliped=Math.pow(-1,backwards)*(x%(w+d))/d+backwards;const clipped=Math.max(Math.min(uncliped,1),0);return clipped};const endTime=t*(w+d)-w;position=x<=0?Math.round(f(1e-5)):x=0;this._lastPosition=position;const duration=this.duration();const justStarted=this._lastTime<=0&&this._time>0;const justFinished=this._lastTime=duration;this._lastTime=this._time;if(justStarted){this.fire("start",this)}const declarative=this._isDeclarative;this.done=!declarative&&!justFinished&&this._time>=duration;this._reseted=false;let converged=false;if(running||declarative){this._initialise(running);this.transforms=new Matrix;converged=this._run(declarative?dt:position);this.fire("step",this)}this.done=this.done||converged&&declarative;if(justFinished){this.fire("finished",this)}return this}time(time){if(time==null){return this._time}const dt=time-this._time;this.step(dt);return this}timeline(timeline){if(typeof timeline==="undefined")return this._timeline;this._timeline=timeline;return this}unschedule(){const timeline=this.timeline();timeline&&timeline.unschedule(this);return this}_initialise(running){if(!running&&!this._isDeclarative)return;for(let i=0,len=this._queue.length;ilast.lmultiplyO(curr);const getRunnerTransform=runner=>runner.transforms;function mergeTransforms(){const runners=this._transformationRunners.runners;const netTransform=runners.map(getRunnerTransform).reduce(lmultiply,new Matrix);this.transform(netTransform);this._transformationRunners.merge();if(this._transformationRunners.length()===1){this._frameId=null}}class RunnerArray{constructor(){this.runners=[];this.ids=[]}add(runner){if(this.runners.includes(runner))return;const id=runner.id+1;this.runners.push(runner);this.ids.push(id);return this}clearBefore(id){const deleteCnt=this.ids.indexOf(id+1)||1;this.ids.splice(0,deleteCnt,0);this.runners.splice(0,deleteCnt,new FakeRunner).forEach(r=>r.clearTransformsFromQueue());return this}edit(id,newRunner){const index=this.ids.indexOf(id+1);this.ids.splice(index,1,id+1);this.runners.splice(index,1,newRunner);return this}getByID(id){return this.runners[this.ids.indexOf(id+1)]}length(){return this.ids.length}merge(){let lastRunner=null;for(let i=0;irunner.id<=current.id).map(getRunnerTransform).reduce(lmultiply,new Matrix)},_addRunner(runner){this._transformationRunners.add(runner);Animator.cancelImmediate(this._frameId);this._frameId=Animator.immediate(mergeTransforms.bind(this))},_prepareRunner(){if(this._frameId==null){this._transformationRunners=(new RunnerArray).add(new FakeRunner(new Matrix(this)))}}}});const difference=(a,b)=>a.filter(x=>!b.includes(x));extend(Runner,{attr(a,v){return this.styleAttr("attr",a,v)},css(s,v){return this.styleAttr("css",s,v)},styleAttr(type,nameOrAttrs,val){if(typeof nameOrAttrs==="string"){return this.styleAttr(type,{[nameOrAttrs]:val})}let attrs=nameOrAttrs;if(this._tryRetarget(type,attrs))return this;let morpher=new Morphable(this._stepper).to(attrs);let keys=Object.keys(attrs);this.queue(function(){morpher=morpher.from(this.element()[type](keys))},function(pos){this.element()[type](morpher.at(pos).valueOf());return morpher.done()},function(newToAttrs){const newKeys=Object.keys(newToAttrs);const differences=difference(newKeys,keys);if(differences.length){const addedFromAttrs=this.element()[type](differences);const oldFromAttrs=new ObjectBag(morpher.from()).valueOf();Object.assign(oldFromAttrs,addedFromAttrs);morpher.from(oldFromAttrs)}const oldToAttrs=new ObjectBag(morpher.to()).valueOf();Object.assign(oldToAttrs,newToAttrs);morpher.to(oldToAttrs);keys=newKeys;attrs=newToAttrs});this._rememberMorpher(type,morpher);return this},zoom(level,point){if(this._tryRetarget("zoom",level,point))return this;let morpher=new Morphable(this._stepper).to(new SVGNumber(level));this.queue(function(){morpher=morpher.from(this.element().zoom())},function(pos){this.element().zoom(morpher.at(pos),point);return morpher.done()},function(newLevel,newPoint){point=newPoint;morpher.to(newLevel)});this._rememberMorpher("zoom",morpher);return this},transform(transforms,relative,affine){relative=transforms.relative||relative;if(this._isDeclarative&&!relative&&this._tryRetarget("transform",transforms)){return this}const isMatrix=Matrix.isMatrixLike(transforms);affine=transforms.affine!=null?transforms.affine:affine!=null?affine:!isMatrix;const morpher=new Morphable(this._stepper).type(affine?TransformBag:Matrix);let origin;let element;let current;let currentAngle;let startTransform;function setup(){element=element||this.element();origin=origin||getOrigin(transforms,element);startTransform=new Matrix(relative?undefined:element);element._addRunner(this);if(!relative){element._clearTransformRunnersBefore(this)}}function run(pos){if(!relative)this.clearTransform();const{x,y}=new Point(origin).transform(element._currentTransform(this));let target=new Matrix({...transforms,origin:[x,y]});let start=this._isDeclarative&¤t?current:startTransform;if(affine){target=target.decompose(x,y);start=start.decompose(x,y);const rTarget=target.rotate;const rCurrent=start.rotate;const possibilities=[rTarget-360,rTarget,rTarget+360];const distances=possibilities.map(a=>Math.abs(a-rCurrent));const shortest=Math.min(...distances);const index=distances.indexOf(shortest);target.rotate=possibilities[index]}if(relative){if(!isMatrix){target.rotate=transforms.rotate||0}if(this._isDeclarative&¤tAngle){start.rotate=currentAngle}}morpher.from(start);morpher.to(target);const affineParameters=morpher.at(pos);currentAngle=affineParameters.rotate;current=new Matrix(affineParameters);this.addTransform(current);element._addRunner(this);return morpher.done()}function retarget(newTransforms){if((newTransforms.origin||"center").toString()!==(transforms.origin||"center").toString()){origin=getOrigin(newTransforms,element)}transforms={...newTransforms,origin:origin}}this.queue(setup,run,retarget,true);this._isDeclarative&&this._rememberMorpher("transform",morpher);return this},x(x,relative){return this._queueNumber("x",x)},y(y){return this._queueNumber("y",y)},dx(x=0){return this._queueNumberDelta("x",x)},dy(y=0){return this._queueNumberDelta("y",y)},dmove(x,y){return this.dx(x).dy(y)},_queueNumberDelta(method,to){to=new SVGNumber(to);if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);let from=null;this.queue(function(){from=this.element()[method]();morpher.from(from);morpher.to(from+to)},function(pos){this.element()[method](morpher.at(pos));return morpher.done()},function(newTo){morpher.to(from+new SVGNumber(newTo))});this._rememberMorpher(method,morpher);return this},_queueObject(method,to){if(this._tryRetarget(method,to))return this;const morpher=new Morphable(this._stepper).to(to);this.queue(function(){morpher.from(this.element()[method]())},function(pos){this.element()[method](morpher.at(pos));return morpher.done()});this._rememberMorpher(method,morpher);return this},_queueNumber(method,value){return this._queueObject(method,new SVGNumber(value))},cx(x){return this._queueNumber("cx",x)},cy(y){return this._queueNumber("cy",y)},move(x,y){return this.x(x).y(y)},center(x,y){return this.cx(x).cy(y)},size(width,height){let box;if(!width||!height){box=this._element.bbox()}if(!width){width=box.width/box.height*height}if(!height){height=box.height/box.width*width}return this.width(width).height(height)},width(width){return this._queueNumber("width",width)},height(height){return this._queueNumber("height",height)},plot(a,b,c,d){if(arguments.length===4){return this.plot([a,b,c,d])}if(this._tryRetarget("plot",a))return this;const morpher=new Morphable(this._stepper).type(this._element.MorphArray).to(a);this.queue(function(){morpher.from(this._element.array())},function(pos){this._element.plot(morpher.at(pos));return morpher.done()});this._rememberMorpher("plot",morpher);return this},leading(value){return this._queueNumber("leading",value)},viewbox(x,y,width,height){return this._queueObject("viewbox",new Box(x,y,width,height))},update(o){if(typeof o!=="object"){return this.update({offset:arguments[0],color:arguments[1],opacity:arguments[2]})}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",o.offset);return this}});extend(Runner,{rx:rx,ry:ry,from:from,to:to});register(Runner,"Runner");class Svg extends Container{constructor(node,attrs=node){super(nodeOrNew("svg",node),attrs);this.namespace()}defs(){if(!this.isRoot())return this.root().defs();return adopt(this.node.querySelector("defs"))||this.put(new Defs)}isRoot(){return!this.node.parentNode||!(this.node.parentNode instanceof globals.window.SVGElement)&&this.node.parentNode.nodeName!=="#document-fragment"}namespace(){if(!this.isRoot())return this.root().namespace();return this.attr({xmlns:svg,version:"1.1"}).attr("xmlns:xlink",xlink,xmlns).attr("xmlns:svgjs",svgjs,xmlns)}removeNamespace(){return this.attr({xmlns:null,version:null}).attr("xmlns:xlink",null,xmlns).attr("xmlns:svgjs",null,xmlns)}root(){if(this.isRoot())return this;return super.root()}}registerMethods({Container:{nested:wrapWithAttrCheck(function(){return this.put(new Svg)})}});register(Svg,"Svg",true);class Symbol extends Container{constructor(node,attrs=node){super(nodeOrNew("symbol",node),attrs)}}registerMethods({Container:{symbol:wrapWithAttrCheck(function(){return this.put(new Symbol)})}});register(Symbol,"Symbol");function plain(text){if(this._build===false){this.clear()}this.node.appendChild(globals.document.createTextNode(text));return this}function length(){return this.node.getComputedTextLength()}function x$1(x,box=this.bbox()){if(x==null){return box.x}return this.attr("x",this.attr("x")+x-box.x)}function y$1(y,box=this.bbox()){if(y==null){return box.y}return this.attr("y",this.attr("y")+y-box.y)}function move$1(x,y,box=this.bbox()){return this.x(x,box).y(y,box)}function cx(x,box=this.bbox()){if(x==null){return box.cx}return this.attr("x",this.attr("x")+x-box.cx)}function cy(y,box=this.bbox()){if(y==null){return box.cy}return this.attr("y",this.attr("y")+y-box.cy)}function center(x,y,box=this.bbox()){return this.cx(x,box).cy(y,box)}function ax(x){return this.attr("x",x)}function ay(y){return this.attr("y",y)}function amove(x,y){return this.ax(x).ay(y)}function build(build){this._build=!!build;return this}var textable={__proto__:null,plain:plain,length:length,x:x$1,y:y$1,move:move$1,cx:cx,cy:cy,center:center,ax:ax,ay:ay,amove:amove,build:build};class Text extends Shape{constructor(node,attrs=node){super(nodeOrNew("text",node),attrs);this.dom.leading=new SVGNumber(1.3);this._rebuild=true;this._build=false}leading(value){if(value==null){return this.dom.leading}this.dom.leading=new SVGNumber(value);return this.rebuild()}rebuild(rebuild){if(typeof rebuild==="boolean"){this._rebuild=rebuild}if(this._rebuild){const self=this;let blankLineOffset=0;const leading=this.dom.leading;this.each(function(i){const fontSize=globals.window.getComputedStyle(this.node).getPropertyValue("font-size");const dy=leading*new SVGNumber(fontSize);if(this.dom.newLined){this.attr("x",self.attr("x"));if(this.text()==="\n"){blankLineOffset+=dy}else{this.attr("dy",i?dy+blankLineOffset:0);blankLineOffset=0}}});this.fire("rebuild")}return this}setData(o){this.dom=o;this.dom.leading=new SVGNumber(o.leading||1.3);return this}text(text){if(text===undefined){const children=this.node.childNodes;let firstLine=0;text="";for(let i=0,len=children.length;i{let bbox;try{bbox=child.bbox()}catch(e){return}const m=new Matrix(child);const matrix=m.translate(dx,dy).transform(m.inverse());const p=new Point(bbox.x,bbox.y).transform(matrix);child.move(p.x,p.y)});return this}function dx(dx){return this.dmove(dx,0)}function dy(dy){return this.dmove(0,dy)}function height(height,box=this.bbox()){if(height==null)return box.height;return this.size(box.width,height,box)}function move(x=0,y=0,box=this.bbox()){const dx=x-box.x;const dy=y-box.y;return this.dmove(dx,dy)}function size(width,height,box=this.bbox()){const p=proportionalSize(this,width,height,box);const scaleX=p.width/box.width;const scaleY=p.height/box.height;this.children().forEach((child,i)=>{const o=new Point(box).transform(new Matrix(child).inverse());child.scale(scaleX,scaleY,o.x,o.y)});return this}function width(width,box=this.bbox()){if(width==null)return box.width;return this.size(width,box.height,box)}function x(x,box=this.bbox()){if(x==null)return box.x;return this.move(x,box.y,box)}function y(y,box=this.bbox()){if(y==null)return box.y;return this.move(box.x,y,box)}var containerGeometry={__proto__:null,dmove:dmove,dx:dx,dy:dy,height:height,move:move,size:size,width:width,x:x,y:y};class G extends Container{constructor(node,attrs=node){super(nodeOrNew("g",node),attrs)}}extend(G,containerGeometry);registerMethods({Container:{group:wrapWithAttrCheck(function(){return this.put(new G)})}});register(G,"G");class A extends Container{constructor(node,attrs=node){super(nodeOrNew("a",node),attrs)}target(target){return this.attr("target",target)}to(url){return this.attr("href",url,xlink)}}extend(A,containerGeometry);registerMethods({Container:{link:wrapWithAttrCheck(function(url){return this.put(new A).to(url)})},Element:{unlink(){const link=this.linker();if(!link)return this;const parent=link.parent();if(!parent){return this.remove()}const index=parent.index(link);parent.add(this,index);link.remove();return this},linkTo(url){let link=this.linker();if(!link){link=new A;this.wrap(link)}if(typeof url==="function"){url.call(link,link)}else{link.to(url)}return this},linker(){const link=this.parent();if(link&&link.node.nodeName.toLowerCase()==="a"){return link}return null}}});register(A,"A");class Mask extends Container{constructor(node,attrs=node){super(nodeOrNew("mask",node),attrs)}remove(){this.targets().forEach(function(el){el.unmask()});return super.remove()}targets(){return baseFind('svg [mask*="'+this.id()+'"]')}}registerMethods({Container:{mask:wrapWithAttrCheck(function(){return this.defs().put(new Mask)})},Element:{masker(){return this.reference("mask")},maskWith(element){const masker=element instanceof Mask?element:this.parent().mask().add(element);return this.attr("mask",'url("#'+masker.id()+'")')},unmask(){return this.attr("mask",null)}}});register(Mask,"Mask");class Stop extends Element{constructor(node,attrs=node){super(nodeOrNew("stop",node),attrs)}update(o){if(typeof o==="number"||o instanceof SVGNumber){o={offset:arguments[0],color:arguments[1],opacity:arguments[2]}}if(o.opacity!=null)this.attr("stop-opacity",o.opacity);if(o.color!=null)this.attr("stop-color",o.color);if(o.offset!=null)this.attr("offset",new SVGNumber(o.offset));return this}}registerMethods({Gradient:{stop:function(offset,color,opacity){return this.put(new Stop).update(offset,color,opacity)}}});register(Stop,"Stop");function cssRule(selector,rule){if(!selector)return"";if(!rule)return selector;let ret=selector+"{";for(const i in rule){ret+=unCamelCase(i)+":"+rule[i]+";"}ret+="}";return ret}class Style extends Element{constructor(node,attrs=node){super(nodeOrNew("style",node),attrs)}addText(w=""){this.node.textContent+=w;return this}font(name,src,params={}){return this.rule("@font-face",{fontFamily:name,src:src,...params})}rule(selector,obj){return this.addText(cssRule(selector,obj))}}registerMethods("Dom",{style(selector,obj){return this.put(new Style).rule(selector,obj)},fontface(name,src,params){return this.put(new Style).font(name,src,params)}});register(Style,"Style");class TextPath extends Text{constructor(node,attrs=node){super(nodeOrNew("textPath",node),attrs)}array(){const track=this.track();return track?track.array():null}plot(d){const track=this.track();let pathArray=null;if(track){pathArray=track.plot(d)}return d==null?pathArray:this}track(){return this.reference("href")}}registerMethods({Container:{textPath:wrapWithAttrCheck(function(text,path){if(!(text instanceof Text)){text=this.text(text)}return text.path(path)})},Text:{path:wrapWithAttrCheck(function(track,importNodes=true){const textPath=new TextPath;if(!(track instanceof Path)){track=this.defs().path(track)}textPath.attr("href","#"+track,xlink);let node;if(importNodes){while(node=this.node.firstChild){textPath.node.appendChild(node)}}return this.put(textPath)}),textPath(){return this.findOne("textPath")}},Path:{text:wrapWithAttrCheck(function(text){if(!(text instanceof Text)){text=(new Text).addTo(this.parent()).text(text)}return text.path(this)}),targets(){return baseFind("svg textPath").filter(node=>{return(node.attr("href")||"").includes(this.id())})}}});TextPath.prototype.MorphArray=PathArray;register(TextPath,"TextPath");class Use extends Shape{constructor(node,attrs=node){super(nodeOrNew("use",node),attrs)}use(element,file){return this.attr("href",(file||"")+"#"+element,xlink)}}registerMethods({Container:{use:wrapWithAttrCheck(function(element,file){return this.put(new Use).use(element,file)})}});register(Use,"Use");const SVG$1=makeInstance;extend([Svg,Symbol,Image,Pattern,Marker],getMethodsFor("viewbox"));extend([Line,Polyline,Polygon,Path],getMethodsFor("marker"));extend(Text,getMethodsFor("Text"));extend(Path,getMethodsFor("Path"));extend(Defs,getMethodsFor("Defs"));extend([Text,Tspan],getMethodsFor("Tspan"));extend([Rect,Ellipse,Gradient,Runner],getMethodsFor("radius"));extend(EventTarget,getMethodsFor("EventTarget"));extend(Dom,getMethodsFor("Dom"));extend(Element,getMethodsFor("Element"));extend(Shape,getMethodsFor("Shape"));extend([Container,Fragment],getMethodsFor("Container"));extend(Gradient,getMethodsFor("Gradient"));extend(Runner,getMethodsFor("Runner"));List.extend(getMethodNames());registerMorphableType([SVGNumber,Color,Box,Matrix,SVGArray,PointArray,PathArray,Point]);makeMorphable();var svgMembers={__proto__:null,Morphable:Morphable,registerMorphableType:registerMorphableType,makeMorphable:makeMorphable,TransformBag:TransformBag,ObjectBag:ObjectBag,NonMorphable:NonMorphable,defaults:defaults,utils:utils,namespaces:namespaces,regex:regex,SVG:SVG$1,parser:parser,find:baseFind,getWindow:getWindow,registerWindow:registerWindow,restoreWindow:restoreWindow,saveWindow:saveWindow,withWindow:withWindow,Animator:Animator,Controller:Controller,Ease:Ease,PID:PID,Spring:Spring,easing:easing,Queue:Queue,Runner:Runner,Timeline:Timeline,Array:SVGArray,Box:Box,Color:Color,EventTarget:EventTarget,Matrix:Matrix,Number:SVGNumber,PathArray:PathArray,Point:Point,PointArray:PointArray,List:List,Circle:Circle,ClipPath:ClipPath,Container:Container,Defs:Defs,Dom:Dom,Element:Element,Ellipse:Ellipse,ForeignObject:ForeignObject,Fragment:Fragment,Gradient:Gradient,G:G,A:A,Image:Image,Line:Line,Marker:Marker,Mask:Mask,Path:Path,Pattern:Pattern,Polygon:Polygon,Polyline:Polyline,Rect:Rect,Shape:Shape,Stop:Stop,Style:Style,Svg:Svg,Symbol:Symbol,Text:Text,TextPath:TextPath,Tspan:Tspan,Use:Use,windowEvents:windowEvents,getEvents:getEvents,getEventTarget:getEventTarget,clearEvents:clearEvents,on:on,off:off,dispatch:dispatch,root:root,create:create,makeInstance:makeInstance,nodeOrNew:nodeOrNew,adopt:adopt,mockAdopt:mockAdopt,register:register,getClass:getClass,eid:eid,assignNewId:assignNewId,extend:extend,wrapWithAttrCheck:wrapWithAttrCheck};function SVG(element,isHTML){return makeInstance(element,isHTML)}Object.assign(SVG,svgMembers);return SVG}(); +/*! + @licstart The following is the entire license notice for the JavaScript code in this file. + The code below is based on SVGPan Library 1.2 and was modified for doxygen + to support both zooming and panning via the mouse and via embedded buttons. + + This code is licensed under the following BSD license: + + Copyright 2009-2010 Andrea Leofreddi . All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + The views and conclusions contained in the software and documentation are those of the + authors and should not be interpreted as representing official policies, either expressed + or implied, of Andrea Leofreddi. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var root=document.documentElement;var state="none";var stateOrigin;var stateTf=root.createSVGMatrix();var cursorGrab=' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';var zoomSteps=10;var zoomInFactor;var zoomOutFactor;var windowWidth;var windowHeight;var svgDoc;var minZoom;var maxZoom;if(!window)window=this;function show(){if(window.innerHeight){windowWidth=window.innerWidth;windowHeight=window.innerHeight}else if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight}if(!windowWidth||!windowHeight){windowWidth=800;windowHeight=600}minZoom=Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);maxZoom=minZoom+1.5;zoomInFactor=Math.pow(maxZoom/minZoom,1/zoomSteps);zoomOutFactor=1/zoomInFactor;var g=svgDoc.getElementById("viewport");try{var bb=g.getBBox();var tx=(windowWidth-viewWidth*minZoom+8)/(2*minZoom);var ty=viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);var a="scale("+minZoom+") rotate(0) translate("+tx+" "+ty+")";g.setAttribute("transform",a)}catch(e){}}function init(evt){svgDoc=evt.target.ownerDocument;try{if(top.window&&top.window.registerShow){top.window.registerShow(sectionId,show)}}catch(e){}show();setAttributes(root,{onmousedown:"handleMouseDown(evt)",onmousemove:"handleMouseMove(evt)",onmouseup:"handleMouseUp(evt)"});if(window.addEventListener){if(navigator.userAgent.toLowerCase().indexOf("webkit")>=0||navigator.userAgent.toLowerCase().indexOf("opera")>=0||navigator.appVersion.indexOf("MSIE")!=-1){window.addEventListener("mousewheel",handleMouseWheel,false)}else{window.addEventListener("DOMMouseScroll",handleMouseWheel,false)}}}window.onresize=function(){if(svgDoc){show()}};function getEventPoint(evt){var p=root.createSVGPoint();p.x=evt.clientX;p.y=evt.clientY;return p}function setCTM(element,matrix){var s="matrix("+matrix.a+","+matrix.b+","+matrix.c+","+matrix.d+","+matrix.e+","+matrix.f+")";element.setAttribute("transform",s)}function setAttributes(element,attributes){for(i in attributes)element.setAttributeNS(null,i,attributes[i])}function doZoom(g,point,zoomFactor){var p=point.matrixTransform(g.getCTM().inverse());var k=root.createSVGMatrix().translate(p.x,p.y).scale(zoomFactor).translate(-p.x,-p.y);var n=g.getCTM().multiply(k);var s=Math.max(n.a,n.d);if(s>maxZoom)n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);else if(s');d.write("Print SVG");d.write('');d.write('
        '+xs+"
        ");d.write("");d.write("");d.close()}catch(e){alert("Failed to open popup window needed for printing!\n"+e.message)}}function highlightEdges(){var elems=document.getElementsByTagName("g");if(elems){for(var i=0;i g");function findEnclosingG(domEl){let curEl=domEl;while(curEl.nodeName!="g"||curEl.id.substr(0,4)!="Node"){curEl=curEl.parentElement}return curEl}function onMouseOverElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>{if(SVG(e)!=s)SVG(e).attr("data-mouse-over-selected","false")});walk(e,e=>SVG(e).attr("data-mouse-over-selected","true"));let{nodes,edges}=getEdgesAndDistance1Nodes(SVG(e),s);for(let node of nodes){walk(node,e=>SVG(e).attr("data-mouse-over-selected","true"))}for(let edge of edges){walk(edge,e=>SVG(e).attr("data-mouse-over-selected","true"))}}function onMouseOutElem(domEl){let e=SVG(findEnclosingG(domEl.target));walk(s,e=>e.attr("data-mouse-over-selected",null))}let gs=s.find("g[id^=Node]");for(let g of gs){g.on("mouseover",onMouseOverElem);g.on("mouseout",onMouseOutElem)}} diff --git a/symmetry_8hpp_source.html b/symmetry_8hpp_source.html new file mode 100644 index 0000000..59eae7e --- /dev/null +++ b/symmetry_8hpp_source.html @@ -0,0 +1,164 @@ + + + + + + + +MSCEqF: include/msceqf/symmetry/symmetry.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        symmetry.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef SYMMETRY_HPP
        +
        13#define SYMMETRY_HPP
        +
        14
        +
        15#include "msceqf/state/state.hpp"
        +
        16#include "sensors/sensor_data.hpp"
        +
        17#include "msceqf/state/state.hpp"
        +
        18#include "utils/tools.hpp"
        +
        19
        +
        20namespace msceqf
        +
        21{
        +
        + +
        23{
        +
        24 public:
        +
        32 [[nodiscard]] static const SystemState phi(const MSCEqFState& X, const SystemState& xi);
        +
        33
        +
        41 [[nodiscard]] static const SystemState::SystemStateAlgebraMap lift(const SystemState& xi, const Imu& u);
        +
        42
        +
        50 [[nodiscard]] static const MatrixX curvatureCorrection(const MSCEqFState& X, const VectorX& inn);
        +
        51
        +
        52 static const Matrix5 D;
        +
        53
        +
        54 private:
        +
        55 Symmetry() = default;
        +
        56};
        +
        +
        57
        +
        58} // namespace msceqf
        +
        59
        +
        60#endif // SYMMETRY_HPP
        +
        this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
        Definition state.hpp:30
        +
        Definition symmetry.hpp:23
        +
        static const Matrix5 D
        The D matrix.
        Definition symmetry.hpp:52
        +
        static const SystemState phi(const MSCEqFState &X, const SystemState &xi)
        Implement the right group action phi of the symmetry group, acting on the homogenous space (phi(X,...
        +
        static const SystemState::SystemStateAlgebraMap lift(const SystemState &xi, const Imu &u)
        Implement the lift function. Lift the actual dynamics onto the symmetry group.
        +
        static const MatrixX curvatureCorrection(const MSCEqFState &X, const VectorX &inn)
        Return the Gamma matrix for the reset / curvature correction.
        +
        The SystemState class represent the state of the system posed on the Homogenous space.
        Definition system.hpp:29
        +
        std::unordered_map< SystemStateKey, VectorX > SystemStateAlgebraMap
        System state algebra map.
        Definition system.hpp:33
        +
        Struct for one IMU reading. It includes timestamp, angular velocity and linear acceleration....
        Definition sensor_data.hpp:29
        +
        +
        + + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/system_8hpp_source.html b/system_8hpp_source.html new file mode 100644 index 0000000..e856766 --- /dev/null +++ b/system_8hpp_source.html @@ -0,0 +1,240 @@ + + + + + + + +MSCEqF: include/msceqf/system/system.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        system.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef SYSTEM_HPP
        +
        13#define SYSTEM_HPP
        +
        14
        +
        15#include <variant>
        +
        16
        +
        17#include "msceqf/system/system_elements.hpp"
        +
        18#include "msceqf/options/msceqf_options.hpp"
        +
        19
        +
        20namespace msceqf
        +
        21{
        +
        + +
        29{
        +
        30 public:
        +
        31 using SystemStateKey = std::variant<SystemStateElementName, uint>;
        +
        32 using SystemStateMap = std::unordered_map<SystemStateKey, SystemStateElementSharedPtr>;
        +
        33 using SystemStateAlgebraMap = std::unordered_map<SystemStateKey, VectorX>;
        +
        34
        +
        38 SystemState() = delete;
        +
        39
        +
        48 SystemState(const StateOptions& opts, const SE23& T0 = SE23(), const Vector6& b0 = Vector6::Zero());
        +
        49
        +
        67 template <typename... Args>
        +
        +
        68 SystemState(const StateOptions& opts, Args&&... pairs_of_key_ptr) : opts_(opts), state_()
        +
        69 {
        +
        70 preallocate();
        +
        71
        +
        72 insertSystemStateElement(std::make_pair(
        +
        73 SystemStateElementName::S,
        +
        74 createSystemStateElement<CameraExtrinsicState>(std::make_tuple(opts.initial_camera_extrinsics_))));
        +
        75
        + +
        77 {
        +
        78 insertSystemStateElement(std::make_pair(
        +
        79 SystemStateElementName::K,
        +
        80 createSystemStateElement<CameraIntrinsicState>(std::make_tuple(opts.initial_camera_intrinsics_))));
        +
        81 }
        +
        82
        +
        83 (insertSystemStateElement(std::forward<decltype(pairs_of_key_ptr)>(pairs_of_key_ptr)), ...);
        +
        84 }
        +
        +
        85
        +
        87 SystemState(const SystemState& other);
        +
        88 SystemState(SystemState&& other) noexcept;
        +
        89 SystemState& operator=(const SystemState& other);
        +
        90 SystemState& operator=(SystemState&& other) noexcept;
        + +
        92
        +
        98 [[nodiscard]] const SE23& T() const;
        +
        99
        +
        105 [[nodiscard]] const SE3 P() const;
        +
        106
        +
        112 [[nodiscard]] const SE3 V() const;
        +
        113
        +
        119 [[nodiscard]] const Vector6& b() const;
        +
        120
        +
        128 [[nodiscard]] const SE3& S() const;
        +
        129
        +
        137 [[nodiscard]] const In& K() const;
        +
        138
        +
        146 [[nodiscard]] const Vector4 k() const;
        +
        147
        +
        155 [[nodiscard]] const Vector3& f(const uint& feat_id) const;
        +
        156
        +
        162 [[nodiscard]] const Vector3 ge3() const;
        +
        163
        +
        169 [[nodiscard]] inline const StateOptions& opts() const { return opts_; }
        +
        170
        +
        177 static std::string toString(const SystemStateKey& key);
        +
        178
        +
        179 private:
        +
        184 void preallocate();
        +
        185
        +
        192 void insertSystemStateElement(std::pair<SystemStateKey, SystemStateElementUniquePtr>&& key_ptr);
        +
        193
        +
        200 void insertSystemStateElement(std::vector<std::pair<SystemStateKey, SystemStateElementUniquePtr>>& keys_ptrs);
        +
        201
        +
        202 friend class Symmetry;
        +
        203
        +
        204 StateOptions opts_;
        +
        205
        +
        206 SystemStateMap state_;
        +
        207};
        +
        +
        208
        +
        209} // namespace msceqf
        +
        210
        +
        211#endif // SYSTEM_HPP
        +
        212
        +
        213// [COMMENT] I can use unorderd map as soon as i check for out of order images when getting a image...
        +
        Definition symmetry.hpp:23
        +
        The SystemState class represent the state of the system posed on the Homogenous space.
        Definition system.hpp:29
        +
        std::variant< SystemStateElementName, uint > SystemStateKey
        Key to access the system state map.
        Definition system.hpp:31
        +
        const SE23 & T() const
        return a constant reference to the extended pose element (R,v,p) of the system state as a SE23-torsor
        +
        std::unordered_map< SystemStateKey, VectorX > SystemStateAlgebraMap
        System state algebra map.
        Definition system.hpp:33
        +
        const StateOptions & opts() const
        Get the state options.
        Definition system.hpp:169
        +
        std::unordered_map< SystemStateKey, SystemStateElementSharedPtr > SystemStateMap
        System state map.
        Definition system.hpp:32
        +
        static std::string toString(const SystemStateKey &key)
        Get a string describing the given SystemStateKey.
        +
        SystemState(const StateOptions &opts, const SE23 &T0=SE23(), const Vector6 &b0=Vector6::Zero())
        Initialize a system state with given extended pose and bias (Identity and zero by default)....
        +
        SystemState(const SystemState &other)
        Rule of Five.
        +
        const SE3 V() const
        return a copy of the pose element (R,v) of the system state as a SE3-torsor
        +
        const Vector6 & b() const
        return a constant reference to the bias element of the system state as a vector
        +
        const Vector3 & f(const uint &feat_id) const
        return a constant reference to a persistent feature element of the system state as a vector,...
        +
        const In & K() const
        return a constant reference to the camera intrinsics element of the system state as a In-torsor If th...
        +
        SystemState()=delete
        Deleted default constructor.
        +
        const Vector4 k() const
        return a copy of the camera intrinsics element of the system state as a 4-vector If the camera intrin...
        +
        SystemState(const StateOptions &opts, Args &&... pairs_of_key_ptr)
        Construct system state given a multiple pairs of key-pointer of states element. This methods prealloc...
        Definition system.hpp:68
        +
        const Vector3 ge3() const
        return a copy of g*e3 as a vector
        +
        const SE3 & S() const
        return a constant reference to the camera extrinsics element of the system state as a SE3-torsor....
        +
        const SE3 P() const
        return a copy of the pose element (R,p) of the system state as a SE3-torsor
        +
        Definition msceqf_options.hpp:98
        +
        bool enable_camera_intrinsics_calibration_
        Boolean to enable intinsic camera calibration.
        Definition msceqf_options.hpp:105
        +
        In initial_camera_intrinsics_
        Initial camera intrinsics.
        Definition msceqf_options.hpp:104
        +
        SE3 initial_camera_extrinsics_
        Initial camera extrinsics.
        Definition msceqf_options.hpp:103
        +
        +
        + + + + diff --git a/system__elements_8hpp_source.html b/system__elements_8hpp_source.html new file mode 100644 index 0000000..fdbfc06 --- /dev/null +++ b/system__elements_8hpp_source.html @@ -0,0 +1,278 @@ + + + + + + + +MSCEqF: include/msceqf/system/system_elements.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        system_elements.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef SYSTEM_ELEMENTS_HPP
        +
        13#define SYSTEM_ELEMENTS_HPP
        +
        14
        +
        15#include <memory>
        +
        16
        +
        17#include "types/fptypes.hpp"
        +
        18
        +
        19namespace msceqf
        +
        20{
        +
        28enum class SystemStateElementName
        +
        29{
        +
        30 T,
        +
        31 b,
        +
        32 S,
        +
        33 K,
        +
        34};
        +
        35
        +
        + +
        41{
        +
        42 public:
        +
        43 virtual ~SystemStateElement() = default;
        +
        44
        +
        50 virtual std::unique_ptr<SystemStateElement> clone() const = 0;
        +
        51
        +
        52 protected:
        +
        54 SystemStateElement() = default;
        +
        55 SystemStateElement(const SystemStateElement&) = default;
        + +
        57 SystemStateElement& operator=(const SystemStateElement&) = default;
        +
        58 SystemStateElement& operator=(SystemStateElement&&) = default;
        +
        59};
        +
        +
        60
        +
        + +
        66{
        +
        67 ExtendedPoseState() : T_(){};
        +
        68 ExtendedPoseState(const SE23& T) : T_(T){};
        +
        69
        +
        75 std::unique_ptr<SystemStateElement> clone() const override { return std::make_unique<ExtendedPoseState>(*this); }
        +
        76
        +
        77 SE23 T_;
        +
        78};
        +
        +
        79
        +
        +
        84struct BiasState final : public SystemStateElement
        +
        85{
        +
        86 BiasState() : b_(Vector6::Zero()){};
        +
        87 BiasState(const Vector6& b) : b_(b){};
        +
        88
        +
        94 std::unique_ptr<SystemStateElement> clone() const override { return std::make_unique<BiasState>(*this); }
        +
        95
        +
        96 Vector6 b_;
        +
        97};
        +
        +
        98
        +
        + +
        104{
        +
        105 CameraExtrinsicState() : S_(){};
        +
        106 CameraExtrinsicState(const Quaternion& q, const Vector3& t) : S_(q, {t}){};
        +
        107 CameraExtrinsicState(const Matrix3& R, const Vector3& t) : S_(R, {t}){};
        +
        108 CameraExtrinsicState(const Matrix4& S) : S_(S){};
        +
        109 CameraExtrinsicState(const SE3& S) : S_(S){};
        +
        110
        +
        116 std::unique_ptr<SystemStateElement> clone() const override { return std::make_unique<CameraExtrinsicState>(*this); }
        +
        117
        +
        118 SE3 S_;
        +
        119};
        +
        +
        120
        +
        + +
        126{
        +
        127 CameraIntrinsicState() : K_(){};
        +
        128 CameraIntrinsicState(const fp& fx, const fp& fy, const fp& cx, const fp& cy) : K_(fx, fy, cx, cy){};
        +
        129 CameraIntrinsicState(const Vector4& intr) : K_(intr){};
        +
        130 CameraIntrinsicState(const Matrix3& K) : K_(K){};
        +
        131 CameraIntrinsicState(const In& K) : K_(K){};
        +
        132
        +
        138 std::unique_ptr<SystemStateElement> clone() const override { return std::make_unique<CameraIntrinsicState>(*this); }
        +
        139
        +
        140 In K_;
        +
        141};
        +
        +
        142
        +
        +
        147struct FeatureState final : public SystemStateElement
        +
        148{
        +
        149 public:
        +
        150 FeatureState() : f_(Vector3::Zero()){};
        +
        151 FeatureState(const Vector3& f) : f_(f){};
        +
        152 FeatureState(const fp& x, const fp& y, const fp& z) : f_({x, y, z}){};
        +
        153
        +
        159 std::unique_ptr<SystemStateElement> clone() const override { return std::make_unique<FeatureState>(*this); }
        +
        160
        +
        161 Vector3 f_;
        +
        162};
        +
        +
        163
        +
        164using SystemStateElementSharedPtr = std::shared_ptr<SystemStateElement>;
        +
        165using SystemStateElementUniquePtr = std::unique_ptr<SystemStateElement>;
        +
        166using ExtendedPoseStateSharedPtr = std::shared_ptr<ExtendedPoseState>;
        +
        167using ExtendedPoseUniquePtr = std::unique_ptr<ExtendedPoseState>;
        +
        168using BiasStateStateSharedPtr = std::shared_ptr<BiasState>;
        +
        169using BiasStateStateUniquePtr = std::unique_ptr<BiasState>;
        +
        170using CameraExtrinsicStateStateSharedPtr = std::shared_ptr<CameraExtrinsicState>;
        +
        171using CameraExtrinsicStateStateUniquePtr = std::unique_ptr<CameraExtrinsicState>;
        +
        172using CameraIntrinsicStateStateSharedPtr = std::shared_ptr<CameraIntrinsicState>;
        +
        173using CameraIntrinsicStateStateUniquePtr = std::unique_ptr<CameraIntrinsicState>;
        +
        174using FeatureStateStateStateSharedPtr = std::shared_ptr<FeatureState>;
        +
        175using FeatureStateStateStateUniquePtr = std::unique_ptr<FeatureState>;
        +
        176
        +
        189template <typename T, typename... Args>
        +
        190[[nodiscard]] static SystemStateElementUniquePtr createSystemStateElement(const std::tuple<Args...>& args)
        +
        191{
        +
        192 return std::apply(
        +
        193 [](const auto&... args) {
        +
        194 if constexpr (std::is_base_of_v<SystemStateElement, T> && std::is_constructible_v<T, decltype(args)...>)
        +
        195 {
        +
        196 return std::make_unique<T>(args...);
        +
        197 }
        +
        198 else
        +
        199 {
        +
        200 return nullptr;
        +
        201 }
        +
        202 },
        +
        203 args);
        +
        204}
        +
        205
        +
        206} // namespace msceqf
        +
        207
        +
        208#endif // SYSTEM_ELEMENTS_HPP
        +
        This struct represent the base struct for a general element of the system state.
        Definition system_elements.hpp:41
        +
        SystemStateElement()=default
        Rule of Five.
        +
        virtual std::unique_ptr< SystemStateElement > clone() const =0
        Clone.
        +
        This struct represent the IMU bias state of the system.
        Definition system_elements.hpp:85
        +
        Vector6 b_
        The Inertial Measurement Unit (IMU) biases (bw, ba)
        Definition system_elements.hpp:96
        +
        std::unique_ptr< SystemStateElement > clone() const override
        Clone the bias state element of the system.
        Definition system_elements.hpp:94
        +
        This struct represent the camera extrinsics state of the system.
        Definition system_elements.hpp:104
        +
        SE3 S_
        The camera extrinsics calibration (SR, St)
        Definition system_elements.hpp:118
        +
        std::unique_ptr< SystemStateElement > clone() const override
        Clone the camera extrinsics state element of the system.
        Definition system_elements.hpp:116
        +
        This struct represent the camera intrinsics state of the system.
        Definition system_elements.hpp:126
        +
        std::unique_ptr< SystemStateElement > clone() const override
        Clone the camera instirnsic state element of the system.
        Definition system_elements.hpp:138
        +
        In K_
        The camera intrinsics calibration (K)
        Definition system_elements.hpp:140
        +
        This struct represent the extended pose state of the system.
        Definition system_elements.hpp:66
        +
        SE23 T_
        The extended pose of the system (R, v, p)
        Definition system_elements.hpp:77
        +
        std::unique_ptr< SystemStateElement > clone() const override
        Clone the extended pose state element of the system.
        Definition system_elements.hpp:75
        +
        This struct represent a single persistent feature state of the system.
        Definition system_elements.hpp:148
        +
        Vector3 f_
        The persistent feature (f)
        Definition system_elements.hpp:161
        +
        std::unique_ptr< SystemStateElement > clone() const override
        Clone the persistent feature state element of the system.
        Definition system_elements.hpp:159
        +
        +
        + + + + diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..7fa4268 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/tools_8hpp_source.html b/tools_8hpp_source.html new file mode 100644 index 0000000..4c40d55 --- /dev/null +++ b/tools_8hpp_source.html @@ -0,0 +1,351 @@ + + + + + + + +MSCEqF: include/utils/tools.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        tools.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef TOOLS_HPP
        +
        13#define TOOLS_HPP
        +
        14
        +
        15#include <algorithm>
        +
        16#include <array>
        +
        17#include <cmath>
        +
        18#include <iterator>
        +
        19#include <queue>
        +
        20#include <random>
        +
        21#include <type_traits>
        +
        22#include <Eigen/Dense>
        +
        23
        +
        24namespace utils
        +
        25{
        +
        32template <typename Key, typename Value>
        +
        + +
        34{
        +
        35 public:
        +
        +
        42 void insert(const Key& key, const Value& value)
        +
        43 {
        +
        44 if (map_.find(key) == map_.end())
        +
        45 {
        +
        46 map_[key] = vector_.size();
        +
        47 vector_.emplace_back(std::make_pair(key, value));
        +
        48 }
        +
        49 }
        +
        +
        50
        +
        +
        57 const Value& at(const Key& key) const
        +
        58 {
        +
        59 auto index = map_.at(key);
        +
        60 return vector_.at(index).second;
        +
        61 }
        +
        +
        62
        +
        +
        69 Value& at(const Key& key)
        +
        70 {
        +
        71 auto index = map_.at(key);
        +
        72 return vector_.at(index).second;
        +
        73 }
        +
        +
        74
        +
        +
        80 const std::vector<Key> keys() const
        +
        81 {
        +
        82 std::vector<Key> result;
        +
        83 for (const auto& pair : vector_)
        +
        84 {
        +
        85 result.push_back(pair.first);
        +
        86 }
        +
        87 return result;
        +
        88 }
        +
        +
        89
        +
        +
        95 const std::vector<Value> values() const
        +
        96 {
        +
        97 std::vector<Value> result;
        +
        98 for (const auto& pair : vector_)
        +
        99 {
        +
        100 result.push_back(pair.second);
        +
        101 }
        +
        102 return result;
        +
        103 }
        +
        +
        104
        +
        +
        109 void clear()
        +
        110 {
        +
        111 map_.clear();
        +
        112 vector_.clear();
        +
        113 }
        +
        +
        114
        +
        115 private:
        +
        116 std::unordered_map<Key, size_t> map_;
        +
        117 std::vector<std::pair<Key, Value>> vector_;
        +
        118};
        +
        +
        119
        +
        129template <typename FPType>
        +
        130static Eigen::Matrix<FPType, Eigen::Dynamic, 1> diff(
        +
        131 const Eigen::Matrix<FPType, Eigen::Dynamic, 1>& x,
        +
        132 const std::function<double(const Eigen::Matrix<FPType, Eigen::Dynamic, 1>&)>& f,
        +
        133 double h = 1e-6)
        +
        134{
        +
        135 int n = x.size();
        +
        136 Eigen::Matrix<FPType, Eigen::Dynamic, 1> grad(n);
        +
        137 for (int i = 0; i < n; i++)
        +
        138 {
        +
        139 Eigen::Matrix<FPType, Eigen::Dynamic, 1> x_plus = x, x_minus = x;
        +
        140 x_plus(i) += h;
        +
        141 x_minus(i) -= h;
        +
        142 grad(i) = (f(x_plus) - f(x_minus)) / (2 * h);
        +
        143 }
        +
        144 return grad;
        +
        145}
        +
        146
        +
        159template <typename Numeric, typename Generator = std::mt19937>
        +
        160static Numeric random(Numeric from, Numeric to)
        +
        161{
        +
        162 thread_local static Generator gen(std::random_device{}());
        +
        163 using dist_type = typename std::conditional<std::is_integral<Numeric>::value, std::uniform_int_distribution<Numeric>,
        +
        164 std::uniform_real_distribution<Numeric>>::type;
        +
        165 thread_local static dist_type dist;
        +
        166 return dist(gen, typename dist_type::param_type{from, to});
        +
        167}
        +
        168
        +
        174static inline void trimString(std::string& s)
        +
        175{
        +
        176 s.erase(s.begin(), std::find_if_not(s.begin(), s.end(), [](unsigned char ch) { return std::isspace(ch); }));
        +
        177 s.erase(std::find_if_not(s.rbegin(), s.rend(), [](unsigned char ch) { return std::isspace(ch); }).base(), s.end());
        +
        178}
        +
        179
        +
        187template <typename T>
        +
        188static std::vector<T> flatten(const std::vector<std::vector<T>>& vector_of_vectors)
        +
        189{
        +
        190 std::vector<T> flat;
        +
        191 size_t total_size = std::accumulate(vector_of_vectors.begin(), vector_of_vectors.end(), 0,
        +
        192 [](size_t size, const std::vector<T>& vec) { return size + vec.size(); });
        +
        193 flat.reserve(total_size);
        +
        194 for (const auto& vec : vector_of_vectors)
        +
        195 {
        +
        196 flat.insert(flat.end(), vec.begin(), vec.end());
        +
        197 }
        +
        198 return flat;
        +
        199}
        +
        200
        +
        201// /**
        +
        202// * @brief Flatten a vector of vectors and insert in given vector (append if the given vector in non empty)
        +
        203// *
        +
        204// * @tparam Type of data in vector
        +
        205// * @param vector_of_vectors Vector of vectors
        +
        206// * @return Flatten vector
        +
        207// *
        +
        208// * @note The vector of vectors is moved into flat so it becames unusable
        +
        209// */
        +
        210// template <typename T>
        +
        211// static void flattenInto(const std::vector<std::vector<T>>& vector_of_vectors, std::vector<T>& flat)
        +
        212// {
        +
        213// size_t total_size =
        +
        214// flat.size() + std::accumulate(vector_of_vectors.begin(), vector_of_vectors.end(), 0,
        +
        215// [](size_t size, const std::vector<T>& vec) { return size + vec.size(); });
        +
        216// flat.reserve(total_size);
        +
        217// for (const auto& vec : vector_of_vectors)
        +
        218// {
        +
        219// flat.insert(flat.end(), std::make_move_iterator(vec.begin()), std::make_move_iterator(vec.end()));
        +
        220// }
        +
        221// }
        +
        222
        +
        229static inline int pow2(const int& n) { return static_cast<int>(std::ldexp(1.0f, n)); }
        +
        230
        +
        231} // namespace utils
        +
        232
        +
        240template <typename T>
        +
        241std::ostream& operator<<(std::ostream& stream, const std::vector<T>& v)
        +
        242{
        +
        243 // Check container is not empty
        +
        244 if (!v.empty())
        +
        245 {
        +
        246 // Beginning bracket
        +
        247 stream << "[";
        +
        248
        +
        249 // Copy element of container into output stream
        +
        250 std::copy(v.begin(), v.end() - 1, std::ostream_iterator<T>(stream, ", "));
        +
        251
        +
        252 // Last element and end bracket
        +
        253 stream << v.back() << "]";
        +
        254 }
        +
        255 return stream;
        +
        256}
        +
        257
        +
        265template <typename T, std::size_t N>
        +
        266std::ostream& operator<<(std::ostream& stream, const std::array<T, N>& v)
        +
        267{
        +
        268 // Check container is not empty
        +
        269 if (!v.empty())
        +
        270 {
        +
        271 // Beginning bracket
        +
        272 stream << "[";
        +
        273
        +
        274 // Copy element of container into output stream
        +
        275 std::copy(v.begin(), v.end() - 1, std::ostream_iterator<T>(stream, ", "));
        +
        276
        +
        277 // Last element and end bracket
        +
        278 stream << v.back() << "]";
        +
        279 }
        +
        280 return stream;
        +
        281}
        +
        282
        +
        290template <typename T>
        +
        291std::ostream& operator<<(std::ostream& stream, const std::deque<T>& v)
        +
        292{
        +
        293 // Check container is not empty
        +
        294 if (!v.empty())
        +
        295 {
        +
        296 // Beginning bracket
        +
        297 stream << "[";
        +
        298
        +
        299 // Copy element of container into output stream
        +
        300 std::copy(v.begin(), v.end() - 1, std::ostream_iterator<T>(stream, ", "));
        +
        301
        +
        302 // Last element and end bracket
        +
        303 stream << v.back() << "]";
        +
        304 }
        +
        305 return stream;
        +
        306}
        +
        307
        +
        315template <typename T, typename std::enable_if<std::is_enum<T>::value, T>::type* = nullptr>
        +
        316std::ostream& operator<<(std::ostream& stream, const T& e)
        +
        317{
        +
        318 return stream << static_cast<typename std::underlying_type<T>::type>(e);
        +
        319}
        +
        320
        +
        321#endif // TOOLS_HPP
        +
        This calss define a map that keeps the insertion order.
        Definition tools.hpp:34
        +
        const std::vector< Key > keys() const
        Return a vector containing the keys.
        Definition tools.hpp:80
        +
        const Value & at(const Key &key) const
        Return the value associated with the key.
        Definition tools.hpp:57
        +
        void clear()
        Clear the map and the vector.
        Definition tools.hpp:109
        +
        void insert(const Key &key, const Value &value)
        Insert a key-value pair into the map if the key does not exists.
        Definition tools.hpp:42
        +
        Value & at(const Key &key)
        Return the value associated with the key.
        Definition tools.hpp:69
        +
        const std::vector< Value > values() const
        Return a vector containing the values.
        Definition tools.hpp:95
        +
        +
        + + + + diff --git a/track_8hpp_source.html b/track_8hpp_source.html new file mode 100644 index 0000000..6b9560b --- /dev/null +++ b/track_8hpp_source.html @@ -0,0 +1,236 @@ + + + + + + + +MSCEqF: include/vision/track.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        track.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef TRACK_HPP
        +
        13#define TRACK_HPP
        +
        14
        +
        15#include <opencv2/opencv.hpp>
        +
        16
        +
        17#include "types/fptypes.hpp"
        +
        18#include "vision/features.hpp"
        +
        19
        +
        20namespace msceqf
        +
        21{
        +
        +
        29struct Track
        +
        30{
        +
        31 using Times = std::vector<fp>;
        +
        32
        +
        38 inline bool empty() const noexcept { return uvs_.empty(); }
        +
        39
        +
        +
        45 inline size_t size() const noexcept
        +
        46 {
        +
        47 assert(uvs_.size() == normalized_uvs_.size());
        +
        48 assert(uvs_.size() == timestamps_.size());
        +
        49 return uvs_.size();
        +
        50 }
        +
        +
        51
        +
        +
        58 void removeInvalid(std::vector<bool>& invalid)
        +
        59 {
        +
        60 assert(invalid.size() == uvs_.size());
        +
        61 assert(uvs_.size() == normalized_uvs_.size());
        +
        62 assert(uvs_.size() == timestamps_.size());
        +
        63
        +
        64 size_t i = 0;
        +
        65 size_t j = 0;
        +
        66
        +
        67 while (i < uvs_.size())
        +
        68 {
        +
        69 if (!invalid[i])
        +
        70 {
        +
        71 uvs_[j] = uvs_[i];
        + + +
        74 ++j;
        +
        75 }
        +
        76 ++i;
        +
        77 }
        +
        78
        +
        79 uvs_.resize(j);
        +
        80 normalized_uvs_.resize(j);
        +
        81 timestamps_.resize(j);
        +
        82 }
        +
        +
        83
        +
        +
        92 void removeTail(const fp& timestamp, const bool& remove_equal = true)
        +
        93 {
        +
        94 assert(uvs_.size() == normalized_uvs_.size());
        +
        95 assert(uvs_.size() == timestamps_.size());
        +
        96
        +
        97 size_t j = 0;
        +
        98 size_t i = 0;
        +
        99
        +
        100 while (i < uvs_.size())
        +
        101 {
        +
        102 if (remove_equal && timestamps_[i] > timestamp)
        +
        103 {
        +
        104 uvs_[j] = uvs_[i];
        + +
        106 timestamps_[j] = timestamps_[i];
        +
        107 ++j;
        +
        108 }
        +
        109 if (!remove_equal && timestamps_[i] >= timestamp)
        +
        110 {
        +
        111 uvs_[j] = uvs_[i];
        + +
        113 timestamps_[j] = timestamps_[i];
        +
        114 ++j;
        +
        115 }
        +
        116 ++i;
        +
        117 }
        +
        118
        +
        119 uvs_.resize(j);
        +
        120 normalized_uvs_.resize(j);
        +
        121 timestamps_.resize(j);
        +
        122 }
        +
        +
        123
        +
        128 friend bool operator<(const Track& lhs, const Track& rhs) { return lhs.size() < rhs.size(); }
        +
        129
        +
        130 FeaturesCoordinates uvs_;
        +
        131 FeaturesCoordinates normalized_uvs_;
        + +
        133};
        +
        +
        134
        +
        135using Tracks = std::unordered_map<uint, Track>;
        +
        136
        +
        137} // namespace msceqf
        +
        138
        +
        139#endif // TRACK_HPP
        +
        (Cache friendly) Track struct. Define a feature (labeled via a feature id) detected/tracked at differ...
        Definition track.hpp:30
        +
        void removeInvalid(std::vector< bool > &invalid)
        Remove invalid features coordinates, normalized feature coordinates and ids given a vector of boolean...
        Definition track.hpp:58
        +
        bool empty() const noexcept
        Check if there valid coordinates in uvs_.
        Definition track.hpp:38
        +
        void removeTail(const fp &timestamp, const bool &remove_equal=true)
        Remove the tail of the track. this method removes coordinates and timestamps that are older or equal ...
        Definition track.hpp:92
        +
        FeaturesCoordinates uvs_
        (u, v) coordinates of the same feature at different time steps
        Definition track.hpp:130
        +
        size_t size() const noexcept
        Return the amount of features (size of uvs_)
        Definition track.hpp:45
        +
        friend bool operator<(const Track &lhs, const Track &rhs)
        Comparison operator with other tracks for sorting based on track length.
        Definition track.hpp:128
        +
        FeaturesCoordinates normalized_uvs_
        Normalized (u, v) coordinates of the same feature at different time steps.
        Definition track.hpp:131
        +
        Times timestamps_
        Timestamps of the camera measurement containing the feature.
        Definition track.hpp:132
        +
        std::vector< fp > Times
        vector of timestamps
        Definition track.hpp:31
        +
        +
        + + + + diff --git a/track__manager_8hpp_source.html b/track__manager_8hpp_source.html new file mode 100644 index 0000000..9607785 --- /dev/null +++ b/track__manager_8hpp_source.html @@ -0,0 +1,191 @@ + + + + + + + +MSCEqF: include/vision/track_manager.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        track_manager.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef TRACK_MANAGER_HPP
        +
        13#define TRACK_MANAGER_HPP
        +
        14
        +
        15#include <opencv2/opencv.hpp>
        +
        16#include <unordered_set>
        +
        17
        +
        18#include "types/fptypes.hpp"
        +
        19#include "vision/tracker.hpp"
        +
        20
        +
        21namespace msceqf
        +
        22{
        +
        + +
        28{
        +
        29 public:
        +
        36 TrackManager(const TrackManagerOptions& opts, const Vector4& intrinsics);
        +
        37
        + +
        44
        + +
        51
        +
        57 const Tracks& tracks() const;
        +
        58
        +
        68 void tracksIds(const fp& timestamp, std::unordered_set<uint>& active_ids, std::unordered_set<uint>& lost_ids) const;
        +
        69
        +
        77 void activeTracksIds(const fp& timestamp, std::unordered_set<uint>& active_ids) const;
        +
        78
        +
        86 void lostTracksIds(const fp& timestamp, std::unordered_set<uint>& lost_ids) const;
        +
        87
        +
        95 void removeTracksId(const std::unordered_set<uint>& ids);
        +
        96
        +
        105 void removeTracksTail(const fp& timestamp, const bool& remove_equal = true);
        +
        106
        +
        111 inline void clear() { tracks_.clear(); }
        +
        112
        +
        118 const PinholeCameraUniquePtr& cam() const;
        +
        119
        +
        120 private:
        +
        125 void updateTracks();
        +
        126
        +
        127 Tracker tracker_;
        +
        128 Tracks tracks_;
        +
        129
        +
        130 size_t max_track_length_;
        +
        131};
        +
        +
        132
        +
        133} // namespace msceqf
        +
        134
        +
        135#endif // TRACK_MANAGER_HPP
        +
        This class manages the multiple tracks of feature traked in time.
        Definition track_manager.hpp:28
        +
        void activeTracksIds(const fp &timestamp, std::unordered_set< uint > &active_ids) const
        Get all the ids corresponding to active tracks at a given timestamp. Active tracks are defined as tra...
        +
        void lostTracksIds(const fp &timestamp, std::unordered_set< uint > &lost_ids) const
        Get all the ids corresponding to lost tracks at a given timestamp. Lost tracks are defined as tracks ...
        +
        void processCamera(Camera &cam)
        Process a single camera measurement. Forward camera measurement to tracker, and update tracks.
        +
        void clear()
        Clear all the tracks.
        Definition track_manager.hpp:111
        +
        void removeTracksTail(const fp &timestamp, const bool &remove_equal=true)
        Remove the tail of tracks. This method remove from each track all the coordinates as well as the time...
        +
        void processFeatures(const TriangulatedFeatures &features)
        Process a single features measurement. update tracks.
        +
        void tracksIds(const fp &timestamp, std::unordered_set< uint > &active_ids, std::unordered_set< uint > &lost_ids) const
        Get all the ids corresponding to active and lost tracks at a given timestamp. Active tracks are defin...
        +
        TrackManager(const TrackManagerOptions &opts, const Vector4 &intrinsics)
        TrackManager constructor.
        +
        const Tracks & tracks() const
        Get all the tracks.
        +
        void removeTracksId(const std::unordered_set< uint > &ids)
        Remove all the tracks corresponding to given ids.
        +
        const PinholeCameraUniquePtr & cam() const
        Get the camera pointer.
        +
        This class implement the feature tracker module based on Lucas-Kanade optical flow....
        Definition tracker.hpp:31
        +
        Definition sensor_data.hpp:78
        +
        Definition msceqf_options.hpp:200
        +
        Definition sensor_data.hpp:98
        +
        +
        + + + + diff --git a/tracker_8hpp_source.html b/tracker_8hpp_source.html new file mode 100644 index 0000000..4b8ecc5 --- /dev/null +++ b/tracker_8hpp_source.html @@ -0,0 +1,201 @@ + + + + + + + +MSCEqF: include/vision/tracker.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        tracker.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef TRACKER_HPP
        +
        13#define TRACKER_HPP
        +
        14
        +
        15#include <atomic>
        +
        16
        +
        17#include "sensors/sensor_data.hpp"
        +
        18#include "types/fptypes.hpp"
        +
        19#include "vision/camera.hpp"
        +
        20#include "vision/features.hpp"
        +
        21#include "vision/track.hpp"
        +
        22
        +
        23namespace msceqf
        +
        24{
        +
        + +
        31{
        +
        32 public:
        +
        33 using Keypoints = std::vector<cv::KeyPoint>;
        +
        34 using TimedFeatures = std::pair<fp, Features>;
        +
        35
        +
        42 Tracker(const TrackerOptions& opts, const Vector4& intrinsics);
        +
        43
        + +
        51
        + +
        58
        +
        64 const PinholeCameraUniquePtr& cam() const;
        +
        65
        +
        66 private:
        +
        76 void track(Camera& cam);
        +
        77
        +
        92 void detect(std::vector<cv::Mat>& pyramids, cv::Mat& mask, Features& features);
        +
        93
        +
        100 void matchKLT(std::vector<uchar>& mask);
        +
        101
        +
        108 void ransac(std::vector<uchar>& mask);
        +
        109
        +
        119 void extractCellKeypoints(const uint& idx, const cv::Mat& cell, const cv::Mat& mask, Keypoints& cell_kpts);
        +
        120
        +
        129 void maskGivenFeatures(cv::Mat& mask, const FeaturesCoordinates& points);
        +
        130
        +
        131 TrackerOptions opts_;
        +
        132
        +
        133 PinholeCameraUniquePtr cam_;
        +
        134 cv::Ptr<cv::Feature2D> detector_;
        +
        135
        +
        136 std::map<uint, std::atomic<uint>> max_kpts_per_cell_;
        +
        137 uint id_;
        +
        138
        +
        139 cv::Mat feature_mask_;
        +
        140
        +
        141 std::vector<cv::Mat> previous_pyramids_;
        +
        142 TimedFeatures previous_features_;
        +
        143
        +
        144 std::vector<cv::Mat> current_pyramids_;
        +
        145 TimedFeatures current_features_;
        +
        146
        +
        147 cv::Size win_;
        +
        148
        +
        149 static constexpr std::array<uint, 4> ratio_ = {10, 6, 3, 1};
        +
        150};
        +
        +
        151
        +
        152} // namespace msceqf
        +
        153
        +
        154#endif // TRACKER_HPP
        +
        This class implement the feature tracker module based on Lucas-Kanade optical flow....
        Definition tracker.hpp:31
        +
        std::vector< cv::KeyPoint > Keypoints
        A vector of features keypoints.
        Definition tracker.hpp:33
        +
        std::pair< fp, Features > TimedFeatures
        Set of features associated with a time.
        Definition tracker.hpp:34
        +
        const TimedFeatures & currentFeatures() const
        Get the current detected/tracked features.
        +
        const PinholeCameraUniquePtr & cam() const
        Get the camera pointer.
        +
        void processCamera(Camera &cam)
        This method process the input camera measurement. If first pre-process the camera image,...
        +
        Tracker(const TrackerOptions &opts, const Vector4 &intrinsics)
        Tracker constructor.
        +
        Definition sensor_data.hpp:78
        +
        (Cache friendly) Features struct. Define a set of features detected/tracked.
        Definition features.hpp:30
        +
        Definition msceqf_options.hpp:180
        +
        +
        + + + + diff --git a/updater_8hpp_source.html b/updater_8hpp_source.html new file mode 100644 index 0000000..8a24b73 --- /dev/null +++ b/updater_8hpp_source.html @@ -0,0 +1,182 @@ + + + + + + + +MSCEqF: include/msceqf/filter/updater/updater.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        updater.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef UPDATER_HPP
        +
        13#define UPDATER_HPP
        +
        14
        +
        15#include <unordered_set>
        +
        16
        +
        17#include "types/fptypes.hpp"
        +
        18#include "msceqf/options/msceqf_options.hpp"
        +
        19#include "msceqf/filter/updater/updater_helper.hpp"
        +
        20#include "msceqf/system/system.hpp"
        +
        21#include "vision/track.hpp"
        +
        22
        +
        23namespace msceqf
        +
        24{
        +
        + +
        30{
        +
        31 public:
        +
        32 Updater(const UpdaterOptions& opts, const SystemState& xi0);
        +
        33
        +
        45 void mscUpdate(MSCEqFState& X, const Tracks& tracks, std::unordered_set<uint>& ids);
        +
        46
        +
        47 private:
        +
        58 [[nodiscard]] bool linearTriangulation(const MSCEqFState& X, const Track& track, const SE3& A_E, Vector3& A_f) const;
        +
        59
        +
        73 void nonlinearTriangulation(const MSCEqFState& X, const Track& track, const SE3& A_E, Vector3& A_f) const;
        +
        74
        +
        85 void nonlinearTriangulationResidualJacobian(
        +
        86 const MSCEqFState& X, const Track& track, const SE3& A_E, const Vector3& A_f, VectorX& res, MatrixX& J) const;
        +
        87
        +
        96 void UpdateMSCEqF(MSCEqFState& X, const MatrixX& C, const VectorX& delta, const MatrixX& R) const;
        +
        97
        +
        98 private:
        +
        99 UpdaterOptions opts_;
        +
        100
        +
        101 const SystemState& xi0_;
        +
        102
        +
        103 ProjectionHelperUniquePtr ph_;
        +
        104
        +
        105 std::map<uint, fp> chi2_table_;
        +
        106
        +
        107 ColsMap cols_map_;
        +
        108
        +
        109 std::vector<uint> update_ids_;
        +
        110 size_t total_size_;
        +
        111};
        +
        +
        112
        +
        113} // namespace msceqf
        +
        114
        +
        115#endif // UPDATER_HPP
        +
        this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
        Definition state.hpp:30
        +
        The SystemState class represent the state of the system posed on the Homogenous space.
        Definition system.hpp:29
        +
        Updater class. This class implements the Multi State Constraint update step of the MSCEqF filter.
        Definition updater.hpp:30
        +
        void mscUpdate(MSCEqFState &X, const Tracks &tracks, std::unordered_set< uint > &ids)
        Perform a Multi State Constraint update.
        + +
        (Cache friendly) Track struct. Define a feature (labeled via a feature id) detected/tracked at differ...
        Definition track.hpp:30
        +
        Definition msceqf_options.hpp:122
        +
        +
        + + + + diff --git a/updater__helper_8hpp_source.html b/updater__helper_8hpp_source.html new file mode 100644 index 0000000..6ccfe7d --- /dev/null +++ b/updater__helper_8hpp_source.html @@ -0,0 +1,312 @@ + + + + + + + +MSCEqF: include/msceqf/filter/updater/updater_helper.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        updater_helper.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef UPDATER_HELPER_HPP
        +
        13#define UPDATER_HELPER_HPP
        +
        14
        +
        15#include <opencv2/opencv.hpp>
        +
        16#include <functional>
        +
        17#include <boost/math/distributions/chi_squared.hpp>
        +
        18
        +
        19#include "types/fptypes.hpp"
        +
        20#include "msceqf/state/state.hpp"
        +
        21#include "utils/tools.hpp"
        +
        22
        +
        23namespace msceqf
        +
        24{
        +
        25using MatrixXBlockRowRef = Ref<MatrixX::RowsBlockXpr>;
        +
        26using VectorXBlockRowRef = Ref<VectorX::RowsBlockXpr>;
        +
        27
        + +
        29
        +
        + +
        36{
        + +
        38 const Vector3& A_f, const Vector2& uv, const Vector2& uvn, const fp& anchor_timestamp, const fp& clone_timestamp)
        +
        39 : A_f_(A_f), uv_(uv), uvn_(uvn), anchor_timestamp_(anchor_timestamp), clone_timestamp_(clone_timestamp){};
        +
        40
        +
        41 const Vector3& A_f_;
        +
        42 const Vector2& uv_;
        +
        43 const Vector2& uvn_;
        + +
        45 const fp& clone_timestamp_;
        +
        46};
        +
        +
        47
        +
        + +
        54{
        +
        55 public:
        +
        56 virtual ~ProjectionHelper() = default;
        +
        57
        +
        64 [[nodiscard]] virtual Vector3 pi(const Vector3& f) = 0;
        +
        65
        +
        72 [[nodiscard]] virtual MatrixX dpi(const Vector3& f) = 0;
        +
        73
        +
        85 virtual void residualJacobianBlock(const MSCEqFState& X,
        +
        86 const SystemState& xi0,
        +
        87 const FeatHelper& feat,
        +
        88 MatrixXBlockRowRef C_block_row,
        +
        89 VectorXBlockRowRef delta_block_row,
        +
        90 MatrixXBlockRowRef Cf_block_row,
        +
        91 const ColsMap& cols_map) = 0;
        +
        92
        +
        98 [[nodiscard]] const size_t& block_rows() const { return block_rows_; }
        +
        99
        +
        105 [[nodiscard]] const size_t& dim_loss() const { return dim_loss_; }
        +
        106
        +
        107 protected:
        +
        109 ProjectionHelper(const FeatureRepresentation& feature_representation);
        +
        110 ProjectionHelper(const ProjectionHelper&) = default;
        + +
        112 ProjectionHelper& operator=(const ProjectionHelper&) = default;
        +
        113 ProjectionHelper& operator=(ProjectionHelper&&) = default;
        +
        114
        +
        115 FeatureRepresentation feature_representation_;
        +
        116
        +
        117 size_t block_rows_;
        +
        118 size_t dim_loss_;
        +
        119};
        +
        +
        120
        +
        + +
        127{
        +
        128 public:
        +
        129 ProjectionHelperS2(const FeatureRepresentation& feature_representation) : ProjectionHelper(feature_representation)
        +
        130 {
        +
        131 block_rows_ = 3;
        +
        132 }
        +
        133
        +
        140 [[nodiscard]] Vector3 pi(const Vector3& f) override;
        +
        141
        +
        148 [[nodiscard]] MatrixX dpi(const Vector3& f) override;
        +
        149
        + +
        162 const SystemState& xi0,
        +
        163 const FeatHelper& feat,
        +
        164 MatrixXBlockRowRef C_block_row,
        +
        165 VectorXBlockRowRef delta_block_row,
        +
        166 MatrixXBlockRowRef Cf_block_row,
        +
        167 const ColsMap& cols_map) override;
        +
        168};
        +
        +
        169
        +
        + +
        176{
        +
        177 public:
        +
        178 ProjectionHelperZ1(const FeatureRepresentation& feature_representation) : ProjectionHelper(feature_representation)
        +
        179 {
        +
        180 block_rows_ = 2;
        +
        181 }
        +
        182
        +
        189 [[nodiscard]] Vector3 pi(const Vector3& f) override;
        +
        190
        +
        197 [[nodiscard]] MatrixX dpi(const Vector3& f) override;
        +
        198
        + +
        211 const SystemState& xi0,
        +
        212 const FeatHelper& feat,
        +
        213 MatrixXBlockRowRef C_block_row,
        +
        214 VectorXBlockRowRef delta_block_row,
        +
        215 MatrixXBlockRowRef Cf_block_row,
        +
        216 const ColsMap& cols_map) override;
        +
        217};
        +
        +
        218
        +
        219using ProjectionHelperSharedPtr = std::shared_ptr<ProjectionHelper>;
        +
        220using ProjectionHelperUniquePtr = std::unique_ptr<ProjectionHelper>;
        +
        221using ProjectionHelperZ1SharedPtr = std::shared_ptr<ProjectionHelperZ1>;
        +
        222using ProjectionHelperZ1UniquePtr = std::unique_ptr<ProjectionHelperZ1>;
        +
        223using ProjectionHelperS2SharedPtr = std::shared_ptr<ProjectionHelperS2>;
        +
        224using ProjectionHelperS2UniquePtr = std::unique_ptr<ProjectionHelperS2>;
        +
        225
        +
        232template <typename T>
        +
        233[[nodiscard]] static ProjectionHelperUniquePtr createProjectionHelper(
        +
        234 const FeatureRepresentation& feature_representation)
        +
        235{
        +
        236 if constexpr (std::is_base_of_v<ProjectionHelper, T>)
        +
        237 {
        +
        238 return std::make_unique<T>(feature_representation);
        +
        239 }
        +
        240 else
        +
        241 {
        +
        242 return nullptr;
        +
        243 }
        +
        244}
        +
        245
        +
        + +
        252{
        +
        259 [[nodiscard]] static Matrix<2, 4> Xi(const Vector3& f);
        +
        260
        +
        267 [[nodiscard]] static Matrix3 inverseDepthJacobian(const Vector3& A_f);
        +
        268
        +
        277 static void nullspaceProjection(Ref<MatrixX> Cf, MatrixXBlockRowRef Ct, VectorXBlockRowRef delta);
        +
        278
        +
        285 static void updateQRCompression(MatrixX& C, VectorX& delta);
        +
        286
        +
        295 [[nodiscard]] static bool chi2Test(const fp& chi2, const size_t& dof, const std::map<uint, fp>& chi2_table);
        +
        296};
        +
        +
        297
        +
        298} // namespace msceqf
        +
        299
        +
        300#endif // UPDATER_HELPER_HPP
        +
        this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
        Definition state.hpp:30
        +
        ProjectionHelper interface. This class provides an interface to the implementation of the projection ...
        Definition updater_helper.hpp:54
        +
        size_t block_rows_
        Number of rows of a C matrix block and a residual block.
        Definition updater_helper.hpp:117
        +
        size_t dim_loss_
        Dimension lost due to nullspace projection.
        Definition updater_helper.hpp:118
        +
        const size_t & dim_loss() const
        Get the dimension lost due to nullspace projection.
        Definition updater_helper.hpp:105
        +
        ProjectionHelper(const FeatureRepresentation &feature_representation)
        Rule of 5.
        +
        virtual MatrixX dpi(const Vector3 &f)=0
        Projection differential function. This function computes the differential of the projection function.
        +
        virtual void residualJacobianBlock(const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map)=0
        Computes a block row of the C matrix and a block of the residual, corresponding to the given feature ...
        +
        const size_t & block_rows() const
        Get the number of rows of a C matrix block and a residual block.
        Definition updater_helper.hpp:98
        +
        FeatureRepresentation feature_representation_
        Feature representation.
        Definition updater_helper.hpp:115
        +
        virtual Vector3 pi(const Vector3 &f)=0
        Projection function. This function projects a 3D point.
        +
        ProjectionHelperS2 class. This class provides an implementation of the projection on the unit sphere ...
        Definition updater_helper.hpp:127
        +
        MatrixX dpi(const Vector3 &f) override
        Projection differential function. This function computes the differential of the projection function.
        +
        Vector3 pi(const Vector3 &f) override
        Projection function. This function projects a 3D point on the unit sphere.
        +
        void residualJacobianBlock(const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map) override
        Computes a block row of the C matrix and a block of the residual, corresponding to the given feature ...
        +
        ProjectionHelperZ1 class. This class provides an implementation of the projection on the unit plane a...
        Definition updater_helper.hpp:176
        +
        MatrixX dpi(const Vector3 &f) override
        Projection differential function. This function computes the differential of the projection function.
        +
        void residualJacobianBlock(const MSCEqFState &X, const SystemState &xi0, const FeatHelper &feat, MatrixXBlockRowRef C_block_row, VectorXBlockRowRef delta_block_row, MatrixXBlockRowRef Cf_block_row, const ColsMap &cols_map) override
        Computes a block row of the C matrix and a block of the residual, corresponding to the given feature ...
        +
        Vector3 pi(const Vector3 &f) override
        Projection function. This function projects a 3D point on the unit plane.
        +
        The SystemState class represent the state of the system posed on the Homogenous space.
        Definition system.hpp:29
        +
        This calss define a map that keeps the insertion order.
        Definition tools.hpp:34
        +
        FeatHelper struct. This struct implements a helper structure holding all the information related to a...
        Definition updater_helper.hpp:36
        +
        const Vector3 & A_f_
        Triangulated feature in anchor frame.
        Definition updater_helper.hpp:41
        +
        const Vector2 & uv_
        (measured) feature coordinates
        Definition updater_helper.hpp:42
        +
        const fp & anchor_timestamp_
        Timestamp of the anchor.
        Definition updater_helper.hpp:44
        +
        const fp & clone_timestamp_
        Timestamp of the feature measurement.
        Definition updater_helper.hpp:45
        +
        const Vector2 & uvn_
        Normalized (measured) feature coordinates.
        Definition updater_helper.hpp:43
        +
        Updater helper struct. This structs implements common helper methods for MSCEqF update.
        Definition updater_helper.hpp:252
        +
        static Matrix< 2, 4 > Xi(const Vector3 &f)
        Xi operator R^3 -> R^2x4.
        +
        static Matrix3 inverseDepthJacobian(const Vector3 &A_f)
        Compute the Jacobian for inverse depth parametrization, used in the Cf matrix.
        +
        static bool chi2Test(const fp &chi2, const size_t &dof, const std::map< uint, fp > &chi2_table)
        Perform chi2 test (based on precomputed table) on the given block of the residual.
        +
        static void nullspaceProjection(Ref< MatrixX > Cf, MatrixXBlockRowRef Ct, VectorXBlockRowRef delta)
        Perform in-place nullspace projection of the Cf matrix on the Ct matrix and the residual using QR dec...
        +
        static void updateQRCompression(MatrixX &C, VectorX &delta)
        Perform in-place compression of the C matrix and the residual using QR decomposition.
        +
        +
        + + + + diff --git a/visualizer_8hpp_source.html b/visualizer_8hpp_source.html new file mode 100644 index 0000000..802fe21 --- /dev/null +++ b/visualizer_8hpp_source.html @@ -0,0 +1,234 @@ + + + + + + + +MSCEqF: include/utils/visualizer.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        visualizer.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef VISUALIZER_HPP
        +
        13#define VISUALIZER_HPP
        +
        14
        +
        15#include <opencv2/opencv.hpp>
        +
        16
        +
        17#include "sensors/sensor_data.hpp"
        +
        18#include "vision/track_manager.hpp"
        +
        19
        +
        20namespace msceqf
        +
        21{
        +
        + +
        23{
        +
        24 public:
        +
        +
        30 Visualizer(const TrackManager& track_manager) : track_manager_(track_manager), colors_(), delay_(1)
        +
        31 {
        +
        32 colors_.emplace(0, cv::Scalar(38, 0, 165)); // red
        +
        33 colors_.emplace(1, cv::Scalar(39, 48, 215)); // dark red
        +
        34 colors_.emplace(2, cv::Scalar(67, 109, 244)); // orange
        +
        35 colors_.emplace(3, cv::Scalar(97, 174, 253)); // light orange
        +
        36 colors_.emplace(4, cv::Scalar(139, 224, 254)); // yellow
        +
        37 colors_.emplace(5, cv::Scalar(191, 255, 255)); // light yellow
        +
        38 colors_.emplace(6, cv::Scalar(139, 239, 217)); // light green
        +
        39 colors_.emplace(7, cv::Scalar(106, 217, 166)); // green
        +
        40 colors_.emplace(8, cv::Scalar(99, 189, 102)); // slightly darker green
        +
        41 colors_.emplace(9, cv::Scalar(80, 152, 26)); // dark green
        +
        42 colors_.emplace(10, cv::Scalar(55, 104, 0)); // very dark green
        +
        43 }
        +
        +
        44
        +
        +
        50 cv::Mat3b imageWithTracks(const Camera& cam, const std::string& text = "") const
        +
        51 {
        +
        52 cv::Mat undistorted_image;
        +
        53 track_manager_.cam()->undistortImage(cam.image_, undistorted_image);
        +
        54
        +
        55 cv::Mat3b color_image = undistorted_image;
        +
        56 if (undistorted_image.channels() == 1)
        +
        57 {
        +
        58 cv::cvtColor(undistorted_image, color_image, cv::COLOR_GRAY2BGR, 3);
        +
        59 }
        +
        60
        +
        61 cv::Mat mask;
        +
        62 track_manager_.cam()->undistortImage(cam.mask_, mask);
        +
        63 mask = cv::Scalar(255) - mask;
        +
        64
        +
        65 std::vector<cv::Mat> channels;
        +
        66 cv::split(color_image, channels);
        +
        67 channels[2] = channels[2] + mask;
        +
        68 cv::merge(channels, color_image);
        +
        69
        +
        70 if (text.compare("") != 0)
        +
        71 {
        +
        72 cv::putText(color_image, text, cv::Point(50, 50), cv::FONT_HERSHEY_TRIPLEX, 1, cv::Scalar(255, 0, 0), 2);
        +
        73 }
        +
        74
        +
        75 Tracker::Keypoints active_kpts;
        +
        76 std::unordered_set<uint> active_ids;
        +
        77
        +
        78 track_manager_.activeTracksIds(cam.timestamp_, active_ids);
        +
        79 if (!active_ids.empty())
        +
        80 {
        +
        81 const auto& tracks = track_manager_.tracks();
        +
        82 for (auto& id : active_ids)
        +
        83 {
        +
        84 const auto& color = colors_.at(id % colors_.size());
        +
        85 for (size_t i = 0; i < tracks.at(id).size() - 1; ++i)
        +
        86 {
        +
        87 cv::line(color_image, tracks.at(id).uvs_.at(i), tracks.at(id).uvs_.at(i + 1), color, 1);
        +
        88 }
        +
        89 cv::circle(color_image, tracks.at(id).uvs_.back(), 3, color, -1);
        +
        90 }
        +
        91 }
        +
        92
        +
        93 return color_image;
        +
        94 }
        +
        +
        95
        +
        +
        101 void visualizeImageWithTracks(const Camera& cam, const std::string& text = "") const
        +
        102 {
        +
        103 cv::imshow("Undistorted image with tracks", imageWithTracks(cam, text));
        +
        104 cv::waitKey(delay_);
        +
        105 }
        +
        +
        106
        +
        107 private:
        +
        108 const TrackManager& track_manager_;
        +
        109 std::unordered_map<uint, cv::Scalar> colors_;
        +
        110 int delay_;
        +
        111};
        +
        +
        112} // namespace msceqf
        +
        113
        +
        114#endif // VISUALIZER_HPP
        +
        This class manages the multiple tracks of feature traked in time.
        Definition track_manager.hpp:28
        +
        void activeTracksIds(const fp &timestamp, std::unordered_set< uint > &active_ids) const
        Get all the ids corresponding to active tracks at a given timestamp. Active tracks are defined as tra...
        +
        const Tracks & tracks() const
        Get all the tracks.
        +
        const PinholeCameraUniquePtr & cam() const
        Get the camera pointer.
        +
        std::vector< cv::KeyPoint > Keypoints
        A vector of features keypoints.
        Definition tracker.hpp:33
        +
        Definition visualizer.hpp:23
        +
        Visualizer(const TrackManager &track_manager)
        Construct a new Visualizer object.
        Definition visualizer.hpp:30
        +
        void visualizeImageWithTracks(const Camera &cam, const std::string &text="") const
        Visualize imge with history of tracks.
        Definition visualizer.hpp:101
        +
        cv::Mat3b imageWithTracks(const Camera &cam, const std::string &text="") const
        Camera image with overlayed tracks.
        Definition visualizer.hpp:50
        +
        Definition sensor_data.hpp:78
        +
        cv::Mat mask_
        The mask for the given image, 255 in valid reagions, 0 in regions to be masked out.
        Definition sensor_data.hpp:93
        +
        fp timestamp_
        Timestamp of the Camera reading.
        Definition sensor_data.hpp:94
        +
        cv::Mat image_
        The image taken from the camera.
        Definition sensor_data.hpp:92
        +
        +
        + + + + diff --git a/zero__velocity__updater_8hpp_source.html b/zero__velocity__updater_8hpp_source.html new file mode 100644 index 0000000..2d3e49d --- /dev/null +++ b/zero__velocity__updater_8hpp_source.html @@ -0,0 +1,171 @@ + + + + + + + +MSCEqF: include/msceqf/filter/updater/zero_velocity_updater.hpp Source File + + + + + + + + + + + + + + + +
        +
        + + + + + + + +
        +
        MSCEqF 1.0 +
        +
        Multi State Constraint Equivariant Filter for visual inertial navigation
        +
        +
        + + + + + + + + +
        +
        + +
        +
        +
        + +
        + +
        +
        + + +
        +
        +
        +
        +
        +
        Loading...
        +
        Searching...
        +
        No Matches
        +
        +
        +
        +
        + +
        +
        zero_velocity_updater.hpp
        +
        +
        +
        1// Copyright (C) 2023 Alessandro Fornasier.
        +
        2// Control of Networked Systems, University of Klagenfurt, Austria.
        +
        3//
        +
        4// All rights reserved.
        +
        5//
        +
        6// This software is licensed under the terms of the BSD-2-Clause-License with
        +
        7// no commercial use allowed, the full terms of which are made available
        +
        8// in the LICENSE file. No license in patents is granted.
        +
        9//
        +
        10// You can contact the authors at <alessandro.fornasier@ieee.org>
        +
        11
        +
        12#ifndef ZERO_VELOCITY_UPDATER_HPP
        +
        13#define ZERO_VELOCITY_UPDATER_HPP
        +
        14
        +
        15#include "msceqf/filter/checker/checker.hpp"
        +
        16#include "msceqf/state/state.hpp"
        +
        17
        +
        18namespace msceqf
        +
        19{
        +
        + +
        26{
        +
        27 public:
        + +
        35
        +
        40 void setMotion();
        +
        41
        +
        47 void setMeasurement(const SE23& y);
        +
        48
        +
        57 [[nodiscard]] bool isActive(const Tracks& tracks);
        +
        58
        +
        67 [[nodiscard]] bool zvUpdate(MSCEqFState& X, const SystemState& xi0) const;
        +
        68
        +
        69 private:
        + +
        71
        +
        72 const Checker& checker_; // The MSCEqF checker
        +
        73
        +
        74 SE23 y_;
        +
        75
        +
        76 bool motion_;
        +
        77};
        +
        +
        78
        +
        79} // namespace msceqf
        +
        80
        +
        81#endif // ZERO_VELOCITY_UPDATER_HPP
        +
        Simple class to perform various checks.
        Definition checker.hpp:27
        +
        this class represent the state of the MSCEqF. This includes the state of the lifted system (element o...
        Definition state.hpp:30
        +
        The SystemState class represent the state of the system posed on the Homogenous space.
        Definition system.hpp:29
        +
        Zero velocity updater class. This class implements the Equivariant Zero Velocity Update (ZVU) of the ...
        Definition zero_velocity_updater.hpp:26
        +
        void setMeasurement(const SE23 &y)
        Set the static extended pose measurement.
        +
        bool zvUpdate(MSCEqFState &X, const SystemState &xi0) const
        Perform a zero velocity update.
        +
        ZeroVelocityUpdater(const ZeroVelocityUpdaterOptions &opts, const Checker &checker)
        Zero velocity updater constructor.
        +
        void setMotion()
        Set motion flag indicating that we are not in the static phase at the beginning but we have moved.
        +
        bool isActive(const Tracks &tracks)
        Check whether the zero velocity updater is active.
        +
        Definition msceqf_options.hpp:137
        +
        +
        + + + +