From 3fc5c82f06fd9965ccc0b818ef74fc847e8ee5d7 Mon Sep 17 00:00:00 2001 From: redwan Date: Thu, 19 Jan 2023 12:40:55 -0600 Subject: [PATCH 01/15] doxygen folder modified --- Doxyfile | 2 +- {doxygen => doc}/html/_apriltag_landmarks_8cpp.html | 0 .../html/_apriltag_landmarks_8cpp_source.html | 0 {doxygen => doc}/html/_apriltag_landmarks_8h.html | 0 .../html/_apriltag_landmarks_8h_source.html | 0 {doxygen => doc}/html/_complementary_filter_8h.html | 0 .../html/_complementary_filter_8h_source.html | 0 {doxygen => doc}/html/_control_viz_8cpp.html | 0 {doxygen => doc}/html/_control_viz_8cpp_source.html | 0 {doxygen => doc}/html/_control_viz_8h.html | 0 {doxygen => doc}/html/_control_viz_8h_source.html | 0 {doxygen => doc}/html/_controller_base_8cpp.html | 0 .../html/_controller_base_8cpp_source.html | 0 {doxygen => doc}/html/_controller_base_8h.html | 0 .../html/_controller_base_8h_source.html | 0 {doxygen => doc}/html/_dummy_state_8cpp.html | 0 {doxygen => doc}/html/_dummy_state_8cpp_source.html | 0 {doxygen => doc}/html/_dummy_state_8h.html | 0 {doxygen => doc}/html/_dummy_state_8h_source.html | 0 .../html/_extended_kalman_filter_8cpp.html | 0 .../html/_extended_kalman_filter_8cpp_source.html | 0 .../html/_extended_kalman_filter_8h.html | 0 .../html/_extended_kalman_filter_8h_source.html | 0 {doxygen => doc}/html/_filter_base_8h.html | 0 {doxygen => doc}/html/_filter_base_8h_source.html | 0 {doxygen => doc}/html/_l_q_r_8cpp.html | 0 {doxygen => doc}/html/_l_q_r_8cpp_source.html | 0 {doxygen => doc}/html/_l_q_r_8h.html | 0 {doxygen => doc}/html/_l_q_r_8h_source.html | 0 {doxygen => doc}/html/_logger_c_s_v_8h.html | 0 {doxygen => doc}/html/_logger_c_s_v_8h_source.html | 0 {doxygen => doc}/html/_p_i_d_8cpp.html | 0 {doxygen => doc}/html/_p_i_d_8cpp_source.html | 0 {doxygen => doc}/html/_p_i_d_8h.html | 0 {doxygen => doc}/html/_p_i_d_8h_source.html | 0 .../html/_quad_controller_p_i_d_8cpp.html | 0 .../html/_quad_controller_p_i_d_8cpp_source.html | 0 .../html/_quad_controller_p_i_d_8h.html | 0 .../html/_quad_controller_p_i_d_8h_source.html | 0 {doxygen => doc}/html/_r_e_a_d_m_e_8md.html | 0 {doxygen => doc}/html/_sensor_base_8h.html | 0 {doxygen => doc}/html/_sensor_base_8h_source.html | 0 {doxygen => doc}/html/_state_observer_8cpp.html | 0 .../html/_state_observer_8cpp_source.html | 0 {doxygen => doc}/html/_state_observer_8h.html | 0 .../html/_state_observer_8h_source.html | 0 {doxygen => doc}/html/annotated.html | 0 .../html/apriltag__complementary__pid_8cpp.html | 0 .../apriltag__complementary__pid_8cpp_source.html | 0 {doxygen => doc}/html/apriltag__ekf__pid_8cpp.html | 0 .../html/apriltag__ekf__pid_8cpp_source.html | 0 {doxygen => doc}/html/bc_s.png | Bin {doxygen => doc}/html/bc_sd.png | Bin {doxygen => doc}/html/bdwn.png | Bin .../html/class_apriltag_landmarks-members.html | 0 {doxygen => doc}/html/class_apriltag_landmarks.html | 0 {doxygen => doc}/html/class_apriltag_landmarks.png | Bin .../html/class_complementary_filter-members.html | 0 .../html/class_complementary_filter.html | 0 .../html/class_complementary_filter.png | Bin .../html/class_filter_base-members.html | 0 {doxygen => doc}/html/class_filter_base.html | 0 {doxygen => doc}/html/class_filter_base.png | Bin .../html/class_logger_c_s_v-members.html | 0 {doxygen => doc}/html/class_logger_c_s_v.html | 0 {doxygen => doc}/html/class_mvn-members.html | 0 {doxygen => doc}/html/class_mvn.html | 0 .../html/class_particle_filter-members.html | 0 {doxygen => doc}/html/class_particle_filter.html | 0 .../html/class_sensor_base-members.html | 0 {doxygen => doc}/html/class_sensor_base.html | 0 {doxygen => doc}/html/class_sensor_base.png | Bin .../html/class_state_space-members.html | 0 {doxygen => doc}/html/class_state_space.html | 0 {doxygen => doc}/html/class_tag_map-members.html | 0 {doxygen => doc}/html/class_tag_map.html | 0 .../html/classbebop2_1_1_control_viz-members.html | 0 .../html/classbebop2_1_1_control_viz.html | 0 .../classbebop2_1_1_controller_base-members.html | 0 .../html/classbebop2_1_1_controller_base.html | 0 .../html/classbebop2_1_1_controller_base.png | Bin .../html/classbebop2_1_1_dummy_state-members.html | 0 .../html/classbebop2_1_1_dummy_state.html | 0 .../html/classbebop2_1_1_dummy_state.png | Bin ...ssbebop2_1_1_extended_kalman_filter-members.html | 0 .../classbebop2_1_1_extended_kalman_filter.html | 0 .../html/classbebop2_1_1_extended_kalman_filter.png | Bin .../html/classbebop2_1_1_l_q_r-members.html | 0 {doxygen => doc}/html/classbebop2_1_1_l_q_r.html | 0 .../html/classbebop2_1_1_p_i_d-members.html | 0 {doxygen => doc}/html/classbebop2_1_1_p_i_d.html | 0 ...assbebop2_1_1_quad_controller_p_i_d-members.html | 0 .../html/classbebop2_1_1_quad_controller_p_i_d.html | 0 .../html/classbebop2_1_1_quad_controller_p_i_d.png | Bin .../classbebop2_1_1_state_observer-members.html | 0 .../html/classbebop2_1_1_state_observer.html | 0 {doxygen => doc}/html/classes.html | 0 .../html/classmatplotlibcpp_1_1_plot-members.html | 0 .../html/classmatplotlibcpp_1_1_plot.html | 0 {doxygen => doc}/html/closed.png | Bin .../html/control_2_l_q_r_2main_8cpp.html | 0 .../html/control_2_l_q_r_2main_8cpp_source.html | 0 .../html/dir_0b09c446dd7a9edef411ea7168ce1167.html | 0 .../html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html | 0 .../html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html | 0 .../html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html | 0 .../html/dir_594170da0cc2132ee3c8d450a92c2c42.html | 0 .../html/dir_68267d1309a1af8e8297ef4c3efbcdba.html | 0 .../html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html | 0 .../html/dir_7ca564011fad3714200192b544070e96.html | 0 .../html/dir_8b1a236cb4f9d64090168ce40b07b07e.html | 0 .../html/dir_8ecd737fac62fc67297553abfd7cdb81.html | 0 .../html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html | 0 .../html/dir_b664689b4d3943ff523c1250795bca04.html | 0 .../html/dir_c6e5477bcb651b159cfa63982954b7ae.html | 0 .../html/dir_cde68057bc18755c5a523db9c7548a97.html | 0 .../html/dir_d44c64559bbebec7f509842c48db8b23.html | 0 .../html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html | 0 .../html/dir_ddae31c66714fb086f3b96543d9a56f1.html | 0 {doxygen => doc}/html/doc.png | Bin {doxygen => doc}/html/docd.png | Bin {doxygen => doc}/html/doxygen.css | 0 {doxygen => doc}/html/doxygen.svg | 0 {doxygen => doc}/html/dummy__ekf__pid_8cpp.html | 0 .../html/dummy__ekf__pid_8cpp_source.html | 0 {doxygen => doc}/html/dynsections.js | 0 {doxygen => doc}/html/files.html | 0 {doxygen => doc}/html/filters_8h.html | 0 {doxygen => doc}/html/filters_8h_source.html | 0 {doxygen => doc}/html/folderclosed.png | Bin {doxygen => doc}/html/folderopen.png | Bin {doxygen => doc}/html/functions.html | 0 {doxygen => doc}/html/functions_b.html | 0 {doxygen => doc}/html/functions_c.html | 0 {doxygen => doc}/html/functions_d.html | 0 {doxygen => doc}/html/functions_e.html | 0 {doxygen => doc}/html/functions_enum.html | 0 {doxygen => doc}/html/functions_eval.html | 0 {doxygen => doc}/html/functions_f.html | 0 {doxygen => doc}/html/functions_func.html | 0 {doxygen => doc}/html/functions_g.html | 0 {doxygen => doc}/html/functions_i.html | 0 {doxygen => doc}/html/functions_j.html | 0 {doxygen => doc}/html/functions_k.html | 0 {doxygen => doc}/html/functions_l.html | 0 {doxygen => doc}/html/functions_m.html | 0 {doxygen => doc}/html/functions_o.html | 0 {doxygen => doc}/html/functions_p.html | 0 {doxygen => doc}/html/functions_q.html | 0 {doxygen => doc}/html/functions_r.html | 0 {doxygen => doc}/html/functions_rela.html | 0 {doxygen => doc}/html/functions_s.html | 0 {doxygen => doc}/html/functions_t.html | 0 {doxygen => doc}/html/functions_type.html | 0 {doxygen => doc}/html/functions_u.html | 0 {doxygen => doc}/html/functions_v.html | 0 {doxygen => doc}/html/functions_vars.html | 0 {doxygen => doc}/html/functions_w.html | 0 {doxygen => doc}/html/functions_x.html | 0 {doxygen => doc}/html/functions_y.html | 0 {doxygen => doc}/html/functions_z.html | 0 {doxygen => doc}/html/functions_~.html | 0 {doxygen => doc}/html/globals.html | 0 {doxygen => doc}/html/globals_defs.html | 0 {doxygen => doc}/html/globals_func.html | 0 {doxygen => doc}/html/globals_type.html | 0 {doxygen => doc}/html/helper_8h.html | 0 {doxygen => doc}/html/helper_8h_source.html | 0 {doxygen => doc}/html/hierarchy.html | 0 {doxygen => doc}/html/index.html | 0 {doxygen => doc}/html/jquery.js | 0 .../localization_2_filters_2ekf_2main_8cpp.html | 0 ...calization_2_filters_2ekf_2main_8cpp_source.html | 0 .../html/localization_2_filters_2pf_2main_8cpp.html | 0 ...ocalization_2_filters_2pf_2main_8cpp_source.html | 0 {doxygen => doc}/html/matplotlibcpp_8h.html | 0 {doxygen => doc}/html/matplotlibcpp_8h_source.html | 0 {doxygen => doc}/html/md__r_e_a_d_m_e.html | 0 {doxygen => doc}/html/menu.js | 0 {doxygen => doc}/html/menudata.js | 0 {doxygen => doc}/html/namespacebebop2.html | 0 {doxygen => doc}/html/namespacematplotlibcpp.html | 0 .../html/namespacematplotlibcpp_1_1detail.html | 0 {doxygen => doc}/html/namespacemembers.html | 0 {doxygen => doc}/html/namespacemembers_enum.html | 0 {doxygen => doc}/html/namespacemembers_eval.html | 0 {doxygen => doc}/html/namespacemembers_func.html | 0 {doxygen => doc}/html/namespacemembers_type.html | 0 {doxygen => doc}/html/namespacemembers_vars.html | 0 {doxygen => doc}/html/namespaces.html | 0 {doxygen => doc}/html/nav_f.png | Bin {doxygen => doc}/html/nav_fd.png | Bin {doxygen => doc}/html/nav_g.png | Bin {doxygen => doc}/html/nav_h.png | Bin {doxygen => doc}/html/nav_hd.png | Bin {doxygen => doc}/html/open.png | Bin {doxygen => doc}/html/pages.html | 0 {doxygen => doc}/html/particle__filter_8cpp.html | 0 .../html/particle__filter_8cpp_source.html | 0 {doxygen => doc}/html/particle__filter_8h.html | 0 .../html/particle__filter_8h_source.html | 0 {doxygen => doc}/html/robot__defs_8h.html | 0 {doxygen => doc}/html/robot__defs_8h_source.html | 0 {doxygen => doc}/html/search/all_0.js | 0 {doxygen => doc}/html/search/all_1.js | 0 {doxygen => doc}/html/search/all_10.js | 0 {doxygen => doc}/html/search/all_11.js | 0 {doxygen => doc}/html/search/all_12.js | 0 {doxygen => doc}/html/search/all_13.js | 0 {doxygen => doc}/html/search/all_14.js | 0 {doxygen => doc}/html/search/all_15.js | 0 {doxygen => doc}/html/search/all_16.js | 0 {doxygen => doc}/html/search/all_17.js | 0 {doxygen => doc}/html/search/all_18.js | 0 {doxygen => doc}/html/search/all_19.js | 0 {doxygen => doc}/html/search/all_1a.js | 0 {doxygen => doc}/html/search/all_1b.js | 0 {doxygen => doc}/html/search/all_2.js | 0 {doxygen => doc}/html/search/all_3.js | 0 {doxygen => doc}/html/search/all_4.js | 0 {doxygen => doc}/html/search/all_5.js | 0 {doxygen => doc}/html/search/all_6.js | 0 {doxygen => doc}/html/search/all_7.js | 0 {doxygen => doc}/html/search/all_8.js | 0 {doxygen => doc}/html/search/all_9.js | 0 {doxygen => doc}/html/search/all_a.js | 0 {doxygen => doc}/html/search/all_b.js | 0 {doxygen => doc}/html/search/all_c.js | 0 {doxygen => doc}/html/search/all_d.js | 0 {doxygen => doc}/html/search/all_e.js | 0 {doxygen => doc}/html/search/all_f.js | 0 {doxygen => doc}/html/search/classes_0.js | 0 {doxygen => doc}/html/search/classes_1.js | 0 {doxygen => doc}/html/search/classes_2.js | 0 {doxygen => doc}/html/search/classes_3.js | 0 {doxygen => doc}/html/search/classes_4.js | 0 {doxygen => doc}/html/search/classes_5.js | 0 {doxygen => doc}/html/search/classes_6.js | 0 {doxygen => doc}/html/search/classes_7.js | 0 {doxygen => doc}/html/search/classes_8.js | 0 {doxygen => doc}/html/search/classes_9.js | 0 {doxygen => doc}/html/search/classes_a.js | 0 {doxygen => doc}/html/search/classes_b.js | 0 {doxygen => doc}/html/search/classes_c.js | 0 {doxygen => doc}/html/search/classes_d.js | 0 {doxygen => doc}/html/search/close.svg | 0 {doxygen => doc}/html/search/defines_0.js | 0 {doxygen => doc}/html/search/defines_1.js | 0 {doxygen => doc}/html/search/defines_2.js | 0 {doxygen => doc}/html/search/defines_3.js | 0 {doxygen => doc}/html/search/defines_4.js | 0 {doxygen => doc}/html/search/enums_0.js | 0 {doxygen => doc}/html/search/enums_1.js | 0 {doxygen => doc}/html/search/enumvalues_0.js | 0 {doxygen => doc}/html/search/enumvalues_1.js | 0 {doxygen => doc}/html/search/enumvalues_2.js | 0 {doxygen => doc}/html/search/enumvalues_3.js | 0 {doxygen => doc}/html/search/enumvalues_4.js | 0 {doxygen => doc}/html/search/enumvalues_5.js | 0 {doxygen => doc}/html/search/enumvalues_6.js | 0 {doxygen => doc}/html/search/enumvalues_7.js | 0 {doxygen => doc}/html/search/enumvalues_8.js | 0 {doxygen => doc}/html/search/files_0.js | 0 {doxygen => doc}/html/search/files_1.js | 0 {doxygen => doc}/html/search/files_2.js | 0 {doxygen => doc}/html/search/files_3.js | 0 {doxygen => doc}/html/search/files_4.js | 0 {doxygen => doc}/html/search/files_5.js | 0 {doxygen => doc}/html/search/files_6.js | 0 {doxygen => doc}/html/search/files_7.js | 0 {doxygen => doc}/html/search/files_8.js | 0 {doxygen => doc}/html/search/files_9.js | 0 {doxygen => doc}/html/search/files_a.js | 0 {doxygen => doc}/html/search/files_b.js | 0 {doxygen => doc}/html/search/functions_0.js | 0 {doxygen => doc}/html/search/functions_1.js | 0 {doxygen => doc}/html/search/functions_10.js | 0 {doxygen => doc}/html/search/functions_11.js | 0 {doxygen => doc}/html/search/functions_12.js | 0 {doxygen => doc}/html/search/functions_13.js | 0 {doxygen => doc}/html/search/functions_14.js | 0 {doxygen => doc}/html/search/functions_15.js | 0 {doxygen => doc}/html/search/functions_16.js | 0 {doxygen => doc}/html/search/functions_17.js | 0 {doxygen => doc}/html/search/functions_18.js | 0 {doxygen => doc}/html/search/functions_2.js | 0 {doxygen => doc}/html/search/functions_3.js | 0 {doxygen => doc}/html/search/functions_4.js | 0 {doxygen => doc}/html/search/functions_5.js | 0 {doxygen => doc}/html/search/functions_6.js | 0 {doxygen => doc}/html/search/functions_7.js | 0 {doxygen => doc}/html/search/functions_8.js | 0 {doxygen => doc}/html/search/functions_9.js | 0 {doxygen => doc}/html/search/functions_a.js | 0 {doxygen => doc}/html/search/functions_b.js | 0 {doxygen => doc}/html/search/functions_c.js | 0 {doxygen => doc}/html/search/functions_d.js | 0 {doxygen => doc}/html/search/functions_e.js | 0 {doxygen => doc}/html/search/functions_f.js | 0 {doxygen => doc}/html/search/mag.svg | 0 {doxygen => doc}/html/search/mag_d.svg | 0 {doxygen => doc}/html/search/mag_sel.svg | 0 {doxygen => doc}/html/search/mag_seld.svg | 0 {doxygen => doc}/html/search/namespaces_0.js | 0 {doxygen => doc}/html/search/namespaces_1.js | 0 {doxygen => doc}/html/search/pages_0.js | 0 {doxygen => doc}/html/search/related_0.js | 0 {doxygen => doc}/html/search/search.css | 0 {doxygen => doc}/html/search/search.js | 0 {doxygen => doc}/html/search/searchdata.js | 0 {doxygen => doc}/html/search/typedefs_0.js | 0 {doxygen => doc}/html/search/typedefs_1.js | 0 {doxygen => doc}/html/search/typedefs_2.js | 0 {doxygen => doc}/html/search/typedefs_3.js | 0 {doxygen => doc}/html/search/typedefs_4.js | 0 {doxygen => doc}/html/search/variables_0.js | 0 {doxygen => doc}/html/search/variables_1.js | 0 {doxygen => doc}/html/search/variables_2.js | 0 {doxygen => doc}/html/search/variables_3.js | 0 {doxygen => doc}/html/search/variables_4.js | 0 {doxygen => doc}/html/search/variables_5.js | 0 {doxygen => doc}/html/search/variables_6.js | 0 {doxygen => doc}/html/search/variables_7.js | 0 {doxygen => doc}/html/search/variables_8.js | 0 {doxygen => doc}/html/search/variables_9.js | 0 {doxygen => doc}/html/search/variables_a.js | 0 {doxygen => doc}/html/search/variables_b.js | 0 {doxygen => doc}/html/search/variables_c.js | 0 {doxygen => doc}/html/search/variables_d.js | 0 {doxygen => doc}/html/search/variables_e.js | 0 {doxygen => doc}/html/search/variables_f.js | 0 {doxygen => doc}/html/sensors_8h.html | 0 {doxygen => doc}/html/sensors_8h_source.html | 0 {doxygen => doc}/html/splitbar.png | Bin {doxygen => doc}/html/splitbard.png | Bin .../html/struct_field_location-members.html | 0 {doxygen => doc}/html/struct_field_location.html | 0 .../html/struct_landmark_obs-members.html | 0 {doxygen => doc}/html/struct_landmark_obs.html | 0 .../html/struct_marker_observation-members.html | 0 .../html/struct_marker_observation.html | 0 {doxygen => doc}/html/struct_particle-members.html | 0 {doxygen => doc}/html/struct_particle.html | 0 .../html/struct_robot_state-members.html | 0 {doxygen => doc}/html/struct_robot_state.html | 0 ...ruct_tag_map_1_1single__landmark__s-members.html | 0 .../html/struct_tag_map_1_1single__landmark__s.html | 0 {doxygen => doc}/html/struct_twist-members.html | 0 {doxygen => doc}/html/struct_twist.html | 0 .../html/struct_twist_1_1_angular_vel-members.html | 0 .../html/struct_twist_1_1_angular_vel.html | 0 .../html/struct_twist_1_1_linear_vel-members.html | 0 .../html/struct_twist_1_1_linear_vel.html | 0 ...otlibcpp_1_1detail_1_1__interpreter-members.html | 0 ...uctmatplotlibcpp_1_1detail_1_1__interpreter.html | 0 ...lotlibcpp_1_1detail_1_1is__callable-members.html | 0 ...ructmatplotlibcpp_1_1detail_1_1is__callable.html | 0 ...tplotlibcpp_1_1detail_1_1is__callable__impl.html | 0 ...llable__impl_3_01false_00_01_t_01_4-members.html | 0 ..._1is__callable__impl_3_01false_00_01_t_01_4.html | 0 ...allable__impl_3_01true_00_01_t_01_4-members.html | 0 ...1_1is__callable__impl_3_01true_00_01_t_01_4.html | 0 ...lable__impl_3_01true_00_01_t_01_4_1_1_check.html | 0 ...l_3_01true_00_01_t_01_4_1_1_derived-members.html | 0 ...ble__impl_3_01true_00_01_t_01_4_1_1_derived.html | 0 ...able__impl_3_01true_00_01_t_01_4_1_1_derived.png | Bin ..._3_01true_00_01_t_01_4_1_1_fallback-members.html | 0 ...le__impl_3_01true_00_01_t_01_4_1_1_fallback.html | 0 ...ble__impl_3_01true_00_01_t_01_4_1_1_fallback.png | Bin ...structmatplotlibcpp_1_1detail_1_1plot__impl.html | 0 ...t__impl_3_01std_1_1false__type_01_4-members.html | 0 ...l_1_1plot__impl_3_01std_1_1false__type_01_4.html | 0 ...ot__impl_3_01std_1_1true__type_01_4-members.html | 0 ...il_1_1plot__impl_3_01std_1_1true__type_01_4.html | 0 ...bcpp_1_1detail_1_1select__npy__type-members.html | 0 ...atplotlibcpp_1_1detail_1_1select__npy__type.html | 0 ..._1_1select__npy__type_3_01bool_01_4-members.html | 0 ..._1detail_1_1select__npy__type_3_01bool_01_4.html | 0 ..._1select__npy__type_3_01double_01_4-members.html | 0 ...detail_1_1select__npy__type_3_01double_01_4.html | 0 ...1_1select__npy__type_3_01float_01_4-members.html | 0 ...1detail_1_1select__npy__type_3_01float_01_4.html | 0 ...select__npy__type_3_01int16__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01int16__t_01_4.html | 0 ...select__npy__type_3_01int32__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01int32__t_01_4.html | 0 ...select__npy__type_3_01int64__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01int64__t_01_4.html | 0 ...1select__npy__type_3_01int8__t_01_4-members.html | 0 ...etail_1_1select__npy__type_3_01int8__t_01_4.html | 0 ...elect__npy__type_3_01uint16__t_01_4-members.html | 0 ...ail_1_1select__npy__type_3_01uint16__t_01_4.html | 0 ...elect__npy__type_3_01uint32__t_01_4-members.html | 0 ...ail_1_1select__npy__type_3_01uint32__t_01_4.html | 0 ...elect__npy__type_3_01uint64__t_01_4-members.html | 0 ...ail_1_1select__npy__type_3_01uint64__t_01_4.html | 0 ...select__npy__type_3_01uint8__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01uint8__t_01_4.html | 0 {doxygen => doc}/html/sync_off.png | Bin {doxygen => doc}/html/sync_on.png | Bin {doxygen => doc}/html/tab_a.png | Bin {doxygen => doc}/html/tab_ad.png | Bin {doxygen => doc}/html/tab_b.png | Bin {doxygen => doc}/html/tab_bd.png | Bin {doxygen => doc}/html/tab_h.png | Bin {doxygen => doc}/html/tab_hd.png | Bin {doxygen => doc}/html/tab_s.png | Bin {doxygen => doc}/html/tab_sd.png | Bin {doxygen => doc}/html/tabs.css | 0 409 files changed, 1 insertion(+), 1 deletion(-) rename {doxygen => doc}/html/_apriltag_landmarks_8cpp.html (100%) rename {doxygen => doc}/html/_apriltag_landmarks_8cpp_source.html (100%) rename {doxygen => doc}/html/_apriltag_landmarks_8h.html (100%) rename {doxygen => doc}/html/_apriltag_landmarks_8h_source.html (100%) rename {doxygen => doc}/html/_complementary_filter_8h.html (100%) rename {doxygen => doc}/html/_complementary_filter_8h_source.html (100%) rename {doxygen => doc}/html/_control_viz_8cpp.html (100%) rename {doxygen => doc}/html/_control_viz_8cpp_source.html (100%) rename {doxygen => doc}/html/_control_viz_8h.html (100%) rename {doxygen => doc}/html/_control_viz_8h_source.html (100%) rename {doxygen => doc}/html/_controller_base_8cpp.html (100%) rename {doxygen => doc}/html/_controller_base_8cpp_source.html (100%) rename {doxygen => doc}/html/_controller_base_8h.html (100%) rename {doxygen => doc}/html/_controller_base_8h_source.html (100%) rename {doxygen => doc}/html/_dummy_state_8cpp.html (100%) rename {doxygen => doc}/html/_dummy_state_8cpp_source.html (100%) rename {doxygen => doc}/html/_dummy_state_8h.html (100%) rename {doxygen => doc}/html/_dummy_state_8h_source.html (100%) rename {doxygen => doc}/html/_extended_kalman_filter_8cpp.html (100%) rename {doxygen => doc}/html/_extended_kalman_filter_8cpp_source.html (100%) rename {doxygen => doc}/html/_extended_kalman_filter_8h.html (100%) rename {doxygen => doc}/html/_extended_kalman_filter_8h_source.html (100%) rename {doxygen => doc}/html/_filter_base_8h.html (100%) rename {doxygen => doc}/html/_filter_base_8h_source.html (100%) rename {doxygen => doc}/html/_l_q_r_8cpp.html (100%) rename {doxygen => doc}/html/_l_q_r_8cpp_source.html (100%) rename {doxygen => doc}/html/_l_q_r_8h.html (100%) rename {doxygen => doc}/html/_l_q_r_8h_source.html (100%) rename {doxygen => doc}/html/_logger_c_s_v_8h.html (100%) rename {doxygen => doc}/html/_logger_c_s_v_8h_source.html (100%) rename {doxygen => doc}/html/_p_i_d_8cpp.html (100%) rename {doxygen => doc}/html/_p_i_d_8cpp_source.html (100%) rename {doxygen => doc}/html/_p_i_d_8h.html (100%) rename {doxygen => doc}/html/_p_i_d_8h_source.html (100%) rename {doxygen => doc}/html/_quad_controller_p_i_d_8cpp.html (100%) rename {doxygen => doc}/html/_quad_controller_p_i_d_8cpp_source.html (100%) rename {doxygen => doc}/html/_quad_controller_p_i_d_8h.html (100%) rename {doxygen => doc}/html/_quad_controller_p_i_d_8h_source.html (100%) rename {doxygen => doc}/html/_r_e_a_d_m_e_8md.html (100%) rename {doxygen => doc}/html/_sensor_base_8h.html (100%) rename {doxygen => doc}/html/_sensor_base_8h_source.html (100%) rename {doxygen => doc}/html/_state_observer_8cpp.html (100%) rename {doxygen => doc}/html/_state_observer_8cpp_source.html (100%) rename {doxygen => doc}/html/_state_observer_8h.html (100%) rename {doxygen => doc}/html/_state_observer_8h_source.html (100%) rename {doxygen => doc}/html/annotated.html (100%) rename {doxygen => doc}/html/apriltag__complementary__pid_8cpp.html (100%) rename {doxygen => doc}/html/apriltag__complementary__pid_8cpp_source.html (100%) rename {doxygen => doc}/html/apriltag__ekf__pid_8cpp.html (100%) rename {doxygen => doc}/html/apriltag__ekf__pid_8cpp_source.html (100%) rename {doxygen => doc}/html/bc_s.png (100%) rename {doxygen => doc}/html/bc_sd.png (100%) rename {doxygen => doc}/html/bdwn.png (100%) rename {doxygen => doc}/html/class_apriltag_landmarks-members.html (100%) rename {doxygen => doc}/html/class_apriltag_landmarks.html (100%) rename {doxygen => doc}/html/class_apriltag_landmarks.png (100%) rename {doxygen => doc}/html/class_complementary_filter-members.html (100%) rename {doxygen => doc}/html/class_complementary_filter.html (100%) rename {doxygen => doc}/html/class_complementary_filter.png (100%) rename {doxygen => doc}/html/class_filter_base-members.html (100%) rename {doxygen => doc}/html/class_filter_base.html (100%) rename {doxygen => doc}/html/class_filter_base.png (100%) rename {doxygen => doc}/html/class_logger_c_s_v-members.html (100%) rename {doxygen => doc}/html/class_logger_c_s_v.html (100%) rename {doxygen => doc}/html/class_mvn-members.html (100%) rename {doxygen => doc}/html/class_mvn.html (100%) rename {doxygen => doc}/html/class_particle_filter-members.html (100%) rename {doxygen => doc}/html/class_particle_filter.html (100%) rename {doxygen => doc}/html/class_sensor_base-members.html (100%) rename {doxygen => doc}/html/class_sensor_base.html (100%) rename {doxygen => doc}/html/class_sensor_base.png (100%) rename {doxygen => doc}/html/class_state_space-members.html (100%) rename {doxygen => doc}/html/class_state_space.html (100%) rename {doxygen => doc}/html/class_tag_map-members.html (100%) rename {doxygen => doc}/html/class_tag_map.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_control_viz-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_control_viz.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_controller_base-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_controller_base.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_controller_base.png (100%) rename {doxygen => doc}/html/classbebop2_1_1_dummy_state-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_dummy_state.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_dummy_state.png (100%) rename {doxygen => doc}/html/classbebop2_1_1_extended_kalman_filter-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_extended_kalman_filter.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_extended_kalman_filter.png (100%) rename {doxygen => doc}/html/classbebop2_1_1_l_q_r-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_l_q_r.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_p_i_d-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_p_i_d.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_quad_controller_p_i_d-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_quad_controller_p_i_d.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_quad_controller_p_i_d.png (100%) rename {doxygen => doc}/html/classbebop2_1_1_state_observer-members.html (100%) rename {doxygen => doc}/html/classbebop2_1_1_state_observer.html (100%) rename {doxygen => doc}/html/classes.html (100%) rename {doxygen => doc}/html/classmatplotlibcpp_1_1_plot-members.html (100%) rename {doxygen => doc}/html/classmatplotlibcpp_1_1_plot.html (100%) rename {doxygen => doc}/html/closed.png (100%) rename {doxygen => doc}/html/control_2_l_q_r_2main_8cpp.html (100%) rename {doxygen => doc}/html/control_2_l_q_r_2main_8cpp_source.html (100%) rename {doxygen => doc}/html/dir_0b09c446dd7a9edef411ea7168ce1167.html (100%) rename {doxygen => doc}/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html (100%) rename {doxygen => doc}/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html (100%) rename {doxygen => doc}/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html (100%) rename {doxygen => doc}/html/dir_594170da0cc2132ee3c8d450a92c2c42.html (100%) rename {doxygen => doc}/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html (100%) rename {doxygen => doc}/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html (100%) rename {doxygen => doc}/html/dir_7ca564011fad3714200192b544070e96.html (100%) rename {doxygen => doc}/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html (100%) rename {doxygen => doc}/html/dir_8ecd737fac62fc67297553abfd7cdb81.html (100%) rename {doxygen => doc}/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html (100%) rename {doxygen => doc}/html/dir_b664689b4d3943ff523c1250795bca04.html (100%) rename {doxygen => doc}/html/dir_c6e5477bcb651b159cfa63982954b7ae.html (100%) rename {doxygen => doc}/html/dir_cde68057bc18755c5a523db9c7548a97.html (100%) rename {doxygen => doc}/html/dir_d44c64559bbebec7f509842c48db8b23.html (100%) rename {doxygen => doc}/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html (100%) rename {doxygen => doc}/html/dir_ddae31c66714fb086f3b96543d9a56f1.html (100%) rename {doxygen => doc}/html/doc.png (100%) rename {doxygen => doc}/html/docd.png (100%) rename {doxygen => doc}/html/doxygen.css (100%) rename {doxygen => doc}/html/doxygen.svg (100%) rename {doxygen => doc}/html/dummy__ekf__pid_8cpp.html (100%) rename {doxygen => doc}/html/dummy__ekf__pid_8cpp_source.html (100%) rename {doxygen => doc}/html/dynsections.js (100%) rename {doxygen => doc}/html/files.html (100%) rename {doxygen => doc}/html/filters_8h.html (100%) rename {doxygen => doc}/html/filters_8h_source.html (100%) rename {doxygen => doc}/html/folderclosed.png (100%) rename {doxygen => doc}/html/folderopen.png (100%) rename {doxygen => doc}/html/functions.html (100%) rename {doxygen => doc}/html/functions_b.html (100%) rename {doxygen => doc}/html/functions_c.html (100%) rename {doxygen => doc}/html/functions_d.html (100%) rename {doxygen => doc}/html/functions_e.html (100%) rename {doxygen => doc}/html/functions_enum.html (100%) rename {doxygen => doc}/html/functions_eval.html (100%) rename {doxygen => doc}/html/functions_f.html (100%) rename {doxygen => doc}/html/functions_func.html (100%) rename {doxygen => doc}/html/functions_g.html (100%) rename {doxygen => doc}/html/functions_i.html (100%) rename {doxygen => doc}/html/functions_j.html (100%) rename {doxygen => doc}/html/functions_k.html (100%) rename {doxygen => doc}/html/functions_l.html (100%) rename {doxygen => doc}/html/functions_m.html (100%) rename {doxygen => doc}/html/functions_o.html (100%) rename {doxygen => doc}/html/functions_p.html (100%) rename {doxygen => doc}/html/functions_q.html (100%) rename {doxygen => doc}/html/functions_r.html (100%) rename {doxygen => doc}/html/functions_rela.html (100%) rename {doxygen => doc}/html/functions_s.html (100%) rename {doxygen => doc}/html/functions_t.html (100%) rename {doxygen => doc}/html/functions_type.html (100%) rename {doxygen => doc}/html/functions_u.html (100%) rename {doxygen => doc}/html/functions_v.html (100%) rename {doxygen => doc}/html/functions_vars.html (100%) rename {doxygen => doc}/html/functions_w.html (100%) rename {doxygen => doc}/html/functions_x.html (100%) rename {doxygen => doc}/html/functions_y.html (100%) rename {doxygen => doc}/html/functions_z.html (100%) rename {doxygen => doc}/html/functions_~.html (100%) rename {doxygen => doc}/html/globals.html (100%) rename {doxygen => doc}/html/globals_defs.html (100%) rename {doxygen => doc}/html/globals_func.html (100%) rename {doxygen => doc}/html/globals_type.html (100%) rename {doxygen => doc}/html/helper_8h.html (100%) rename {doxygen => doc}/html/helper_8h_source.html (100%) rename {doxygen => doc}/html/hierarchy.html (100%) rename {doxygen => doc}/html/index.html (100%) rename {doxygen => doc}/html/jquery.js (100%) rename {doxygen => doc}/html/localization_2_filters_2ekf_2main_8cpp.html (100%) rename {doxygen => doc}/html/localization_2_filters_2ekf_2main_8cpp_source.html (100%) rename {doxygen => doc}/html/localization_2_filters_2pf_2main_8cpp.html (100%) rename {doxygen => doc}/html/localization_2_filters_2pf_2main_8cpp_source.html (100%) rename {doxygen => doc}/html/matplotlibcpp_8h.html (100%) rename {doxygen => doc}/html/matplotlibcpp_8h_source.html (100%) rename {doxygen => doc}/html/md__r_e_a_d_m_e.html (100%) rename {doxygen => doc}/html/menu.js (100%) rename {doxygen => doc}/html/menudata.js (100%) rename {doxygen => doc}/html/namespacebebop2.html (100%) rename {doxygen => doc}/html/namespacematplotlibcpp.html (100%) rename {doxygen => doc}/html/namespacematplotlibcpp_1_1detail.html (100%) rename {doxygen => doc}/html/namespacemembers.html (100%) rename {doxygen => doc}/html/namespacemembers_enum.html (100%) rename {doxygen => doc}/html/namespacemembers_eval.html (100%) rename {doxygen => doc}/html/namespacemembers_func.html (100%) rename {doxygen => doc}/html/namespacemembers_type.html (100%) rename {doxygen => doc}/html/namespacemembers_vars.html (100%) rename {doxygen => doc}/html/namespaces.html (100%) rename {doxygen => doc}/html/nav_f.png (100%) rename {doxygen => doc}/html/nav_fd.png (100%) rename {doxygen => doc}/html/nav_g.png (100%) rename {doxygen => doc}/html/nav_h.png (100%) rename {doxygen => doc}/html/nav_hd.png (100%) rename {doxygen => doc}/html/open.png (100%) rename {doxygen => doc}/html/pages.html (100%) rename {doxygen => doc}/html/particle__filter_8cpp.html (100%) rename {doxygen => doc}/html/particle__filter_8cpp_source.html (100%) rename {doxygen => doc}/html/particle__filter_8h.html (100%) rename {doxygen => doc}/html/particle__filter_8h_source.html (100%) rename {doxygen => doc}/html/robot__defs_8h.html (100%) rename {doxygen => doc}/html/robot__defs_8h_source.html (100%) rename {doxygen => doc}/html/search/all_0.js (100%) rename {doxygen => doc}/html/search/all_1.js (100%) rename {doxygen => doc}/html/search/all_10.js (100%) rename {doxygen => doc}/html/search/all_11.js (100%) rename {doxygen => doc}/html/search/all_12.js (100%) rename {doxygen => doc}/html/search/all_13.js (100%) rename {doxygen => doc}/html/search/all_14.js (100%) rename {doxygen => doc}/html/search/all_15.js (100%) rename {doxygen => doc}/html/search/all_16.js (100%) rename {doxygen => doc}/html/search/all_17.js (100%) rename {doxygen => doc}/html/search/all_18.js (100%) rename {doxygen => doc}/html/search/all_19.js (100%) rename {doxygen => doc}/html/search/all_1a.js (100%) rename {doxygen => doc}/html/search/all_1b.js (100%) rename {doxygen => doc}/html/search/all_2.js (100%) rename {doxygen => doc}/html/search/all_3.js (100%) rename {doxygen => doc}/html/search/all_4.js (100%) rename {doxygen => doc}/html/search/all_5.js (100%) rename {doxygen => doc}/html/search/all_6.js (100%) rename {doxygen => doc}/html/search/all_7.js (100%) rename {doxygen => doc}/html/search/all_8.js (100%) rename {doxygen => doc}/html/search/all_9.js (100%) rename {doxygen => doc}/html/search/all_a.js (100%) rename {doxygen => doc}/html/search/all_b.js (100%) rename {doxygen => doc}/html/search/all_c.js (100%) rename {doxygen => doc}/html/search/all_d.js (100%) rename {doxygen => doc}/html/search/all_e.js (100%) rename {doxygen => doc}/html/search/all_f.js (100%) rename {doxygen => doc}/html/search/classes_0.js (100%) rename {doxygen => doc}/html/search/classes_1.js (100%) rename {doxygen => doc}/html/search/classes_2.js (100%) rename {doxygen => doc}/html/search/classes_3.js (100%) rename {doxygen => doc}/html/search/classes_4.js (100%) rename {doxygen => doc}/html/search/classes_5.js (100%) rename {doxygen => doc}/html/search/classes_6.js (100%) rename {doxygen => doc}/html/search/classes_7.js (100%) rename {doxygen => doc}/html/search/classes_8.js (100%) rename {doxygen => doc}/html/search/classes_9.js (100%) rename {doxygen => doc}/html/search/classes_a.js (100%) rename {doxygen => doc}/html/search/classes_b.js (100%) rename {doxygen => doc}/html/search/classes_c.js (100%) rename {doxygen => doc}/html/search/classes_d.js (100%) rename {doxygen => doc}/html/search/close.svg (100%) rename {doxygen => doc}/html/search/defines_0.js (100%) rename {doxygen => doc}/html/search/defines_1.js (100%) rename {doxygen => doc}/html/search/defines_2.js (100%) rename {doxygen => doc}/html/search/defines_3.js (100%) rename {doxygen => doc}/html/search/defines_4.js (100%) rename {doxygen => doc}/html/search/enums_0.js (100%) rename {doxygen => doc}/html/search/enums_1.js (100%) rename {doxygen => doc}/html/search/enumvalues_0.js (100%) rename {doxygen => doc}/html/search/enumvalues_1.js (100%) rename {doxygen => doc}/html/search/enumvalues_2.js (100%) rename {doxygen => doc}/html/search/enumvalues_3.js (100%) rename {doxygen => doc}/html/search/enumvalues_4.js (100%) rename {doxygen => doc}/html/search/enumvalues_5.js (100%) rename {doxygen => doc}/html/search/enumvalues_6.js (100%) rename {doxygen => doc}/html/search/enumvalues_7.js (100%) rename {doxygen => doc}/html/search/enumvalues_8.js (100%) rename {doxygen => doc}/html/search/files_0.js (100%) rename {doxygen => doc}/html/search/files_1.js (100%) rename {doxygen => doc}/html/search/files_2.js (100%) rename {doxygen => doc}/html/search/files_3.js (100%) rename {doxygen => doc}/html/search/files_4.js (100%) rename {doxygen => doc}/html/search/files_5.js (100%) rename {doxygen => doc}/html/search/files_6.js (100%) rename {doxygen => doc}/html/search/files_7.js (100%) rename {doxygen => doc}/html/search/files_8.js (100%) rename {doxygen => doc}/html/search/files_9.js (100%) rename {doxygen => doc}/html/search/files_a.js (100%) rename {doxygen => doc}/html/search/files_b.js (100%) rename {doxygen => doc}/html/search/functions_0.js (100%) rename {doxygen => doc}/html/search/functions_1.js (100%) rename {doxygen => doc}/html/search/functions_10.js (100%) rename {doxygen => doc}/html/search/functions_11.js (100%) rename {doxygen => doc}/html/search/functions_12.js (100%) rename {doxygen => doc}/html/search/functions_13.js (100%) rename {doxygen => doc}/html/search/functions_14.js (100%) rename {doxygen => doc}/html/search/functions_15.js (100%) rename {doxygen => doc}/html/search/functions_16.js (100%) rename {doxygen => doc}/html/search/functions_17.js (100%) rename {doxygen => doc}/html/search/functions_18.js (100%) rename {doxygen => doc}/html/search/functions_2.js (100%) rename {doxygen => doc}/html/search/functions_3.js (100%) rename {doxygen => doc}/html/search/functions_4.js (100%) rename {doxygen => doc}/html/search/functions_5.js (100%) rename {doxygen => doc}/html/search/functions_6.js (100%) rename {doxygen => doc}/html/search/functions_7.js (100%) rename {doxygen => doc}/html/search/functions_8.js (100%) rename {doxygen => doc}/html/search/functions_9.js (100%) rename {doxygen => doc}/html/search/functions_a.js (100%) rename {doxygen => doc}/html/search/functions_b.js (100%) rename {doxygen => doc}/html/search/functions_c.js (100%) rename {doxygen => doc}/html/search/functions_d.js (100%) rename {doxygen => doc}/html/search/functions_e.js (100%) rename {doxygen => doc}/html/search/functions_f.js (100%) rename {doxygen => doc}/html/search/mag.svg (100%) rename {doxygen => doc}/html/search/mag_d.svg (100%) rename {doxygen => doc}/html/search/mag_sel.svg (100%) rename {doxygen => doc}/html/search/mag_seld.svg (100%) rename {doxygen => doc}/html/search/namespaces_0.js (100%) rename {doxygen => doc}/html/search/namespaces_1.js (100%) rename {doxygen => doc}/html/search/pages_0.js (100%) rename {doxygen => doc}/html/search/related_0.js (100%) rename {doxygen => doc}/html/search/search.css (100%) rename {doxygen => doc}/html/search/search.js (100%) rename {doxygen => doc}/html/search/searchdata.js (100%) rename {doxygen => doc}/html/search/typedefs_0.js (100%) rename {doxygen => doc}/html/search/typedefs_1.js (100%) rename {doxygen => doc}/html/search/typedefs_2.js (100%) rename {doxygen => doc}/html/search/typedefs_3.js (100%) rename {doxygen => doc}/html/search/typedefs_4.js (100%) rename {doxygen => doc}/html/search/variables_0.js (100%) rename {doxygen => doc}/html/search/variables_1.js (100%) rename {doxygen => doc}/html/search/variables_2.js (100%) rename {doxygen => doc}/html/search/variables_3.js (100%) rename {doxygen => doc}/html/search/variables_4.js (100%) rename {doxygen => doc}/html/search/variables_5.js (100%) rename {doxygen => doc}/html/search/variables_6.js (100%) rename {doxygen => doc}/html/search/variables_7.js (100%) rename {doxygen => doc}/html/search/variables_8.js (100%) rename {doxygen => doc}/html/search/variables_9.js (100%) rename {doxygen => doc}/html/search/variables_a.js (100%) rename {doxygen => doc}/html/search/variables_b.js (100%) rename {doxygen => doc}/html/search/variables_c.js (100%) rename {doxygen => doc}/html/search/variables_d.js (100%) rename {doxygen => doc}/html/search/variables_e.js (100%) rename {doxygen => doc}/html/search/variables_f.js (100%) rename {doxygen => doc}/html/sensors_8h.html (100%) rename {doxygen => doc}/html/sensors_8h_source.html (100%) rename {doxygen => doc}/html/splitbar.png (100%) rename {doxygen => doc}/html/splitbard.png (100%) rename {doxygen => doc}/html/struct_field_location-members.html (100%) rename {doxygen => doc}/html/struct_field_location.html (100%) rename {doxygen => doc}/html/struct_landmark_obs-members.html (100%) rename {doxygen => doc}/html/struct_landmark_obs.html (100%) rename {doxygen => doc}/html/struct_marker_observation-members.html (100%) rename {doxygen => doc}/html/struct_marker_observation.html (100%) rename {doxygen => doc}/html/struct_particle-members.html (100%) rename {doxygen => doc}/html/struct_particle.html (100%) rename {doxygen => doc}/html/struct_robot_state-members.html (100%) rename {doxygen => doc}/html/struct_robot_state.html (100%) rename {doxygen => doc}/html/struct_tag_map_1_1single__landmark__s-members.html (100%) rename {doxygen => doc}/html/struct_tag_map_1_1single__landmark__s.html (100%) rename {doxygen => doc}/html/struct_twist-members.html (100%) rename {doxygen => doc}/html/struct_twist.html (100%) rename {doxygen => doc}/html/struct_twist_1_1_angular_vel-members.html (100%) rename {doxygen => doc}/html/struct_twist_1_1_angular_vel.html (100%) rename {doxygen => doc}/html/struct_twist_1_1_linear_vel-members.html (100%) rename {doxygen => doc}/html/struct_twist_1_1_linear_vel.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html (100%) rename {doxygen => doc}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html (100%) rename {doxygen => doc}/html/sync_off.png (100%) rename {doxygen => doc}/html/sync_on.png (100%) rename {doxygen => doc}/html/tab_a.png (100%) rename {doxygen => doc}/html/tab_ad.png (100%) rename {doxygen => doc}/html/tab_b.png (100%) rename {doxygen => doc}/html/tab_bd.png (100%) rename {doxygen => doc}/html/tab_h.png (100%) rename {doxygen => doc}/html/tab_hd.png (100%) rename {doxygen => doc}/html/tab_s.png (100%) rename {doxygen => doc}/html/tab_sd.png (100%) rename {doxygen => doc}/html/tabs.css (100%) diff --git a/Doxyfile b/Doxyfile index c7054de..09a1e29 100644 --- a/Doxyfile +++ b/Doxyfile @@ -68,7 +68,7 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = doxygen +OUTPUT_DIRECTORY = doc # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format diff --git a/doxygen/html/_apriltag_landmarks_8cpp.html b/doc/html/_apriltag_landmarks_8cpp.html similarity index 100% rename from doxygen/html/_apriltag_landmarks_8cpp.html rename to doc/html/_apriltag_landmarks_8cpp.html diff --git a/doxygen/html/_apriltag_landmarks_8cpp_source.html b/doc/html/_apriltag_landmarks_8cpp_source.html similarity index 100% rename from doxygen/html/_apriltag_landmarks_8cpp_source.html rename to doc/html/_apriltag_landmarks_8cpp_source.html diff --git a/doxygen/html/_apriltag_landmarks_8h.html b/doc/html/_apriltag_landmarks_8h.html similarity index 100% rename from doxygen/html/_apriltag_landmarks_8h.html rename to doc/html/_apriltag_landmarks_8h.html diff --git a/doxygen/html/_apriltag_landmarks_8h_source.html b/doc/html/_apriltag_landmarks_8h_source.html similarity index 100% rename from doxygen/html/_apriltag_landmarks_8h_source.html rename to doc/html/_apriltag_landmarks_8h_source.html diff --git a/doxygen/html/_complementary_filter_8h.html b/doc/html/_complementary_filter_8h.html similarity index 100% rename from doxygen/html/_complementary_filter_8h.html rename to doc/html/_complementary_filter_8h.html diff --git a/doxygen/html/_complementary_filter_8h_source.html b/doc/html/_complementary_filter_8h_source.html similarity index 100% rename from doxygen/html/_complementary_filter_8h_source.html rename to doc/html/_complementary_filter_8h_source.html diff --git a/doxygen/html/_control_viz_8cpp.html b/doc/html/_control_viz_8cpp.html similarity index 100% rename from doxygen/html/_control_viz_8cpp.html rename to doc/html/_control_viz_8cpp.html diff --git a/doxygen/html/_control_viz_8cpp_source.html b/doc/html/_control_viz_8cpp_source.html similarity index 100% rename from doxygen/html/_control_viz_8cpp_source.html rename to doc/html/_control_viz_8cpp_source.html diff --git a/doxygen/html/_control_viz_8h.html b/doc/html/_control_viz_8h.html similarity index 100% rename from doxygen/html/_control_viz_8h.html rename to doc/html/_control_viz_8h.html diff --git a/doxygen/html/_control_viz_8h_source.html b/doc/html/_control_viz_8h_source.html similarity index 100% rename from doxygen/html/_control_viz_8h_source.html rename to doc/html/_control_viz_8h_source.html diff --git a/doxygen/html/_controller_base_8cpp.html b/doc/html/_controller_base_8cpp.html similarity index 100% rename from doxygen/html/_controller_base_8cpp.html rename to doc/html/_controller_base_8cpp.html diff --git a/doxygen/html/_controller_base_8cpp_source.html b/doc/html/_controller_base_8cpp_source.html similarity index 100% rename from doxygen/html/_controller_base_8cpp_source.html rename to doc/html/_controller_base_8cpp_source.html diff --git a/doxygen/html/_controller_base_8h.html b/doc/html/_controller_base_8h.html similarity index 100% rename from doxygen/html/_controller_base_8h.html rename to doc/html/_controller_base_8h.html diff --git a/doxygen/html/_controller_base_8h_source.html b/doc/html/_controller_base_8h_source.html similarity index 100% rename from doxygen/html/_controller_base_8h_source.html rename to doc/html/_controller_base_8h_source.html diff --git a/doxygen/html/_dummy_state_8cpp.html b/doc/html/_dummy_state_8cpp.html similarity index 100% rename from doxygen/html/_dummy_state_8cpp.html rename to doc/html/_dummy_state_8cpp.html diff --git a/doxygen/html/_dummy_state_8cpp_source.html b/doc/html/_dummy_state_8cpp_source.html similarity index 100% rename from doxygen/html/_dummy_state_8cpp_source.html rename to doc/html/_dummy_state_8cpp_source.html diff --git a/doxygen/html/_dummy_state_8h.html b/doc/html/_dummy_state_8h.html similarity index 100% rename from doxygen/html/_dummy_state_8h.html rename to doc/html/_dummy_state_8h.html diff --git a/doxygen/html/_dummy_state_8h_source.html b/doc/html/_dummy_state_8h_source.html similarity index 100% rename from doxygen/html/_dummy_state_8h_source.html rename to doc/html/_dummy_state_8h_source.html diff --git a/doxygen/html/_extended_kalman_filter_8cpp.html b/doc/html/_extended_kalman_filter_8cpp.html similarity index 100% rename from doxygen/html/_extended_kalman_filter_8cpp.html rename to doc/html/_extended_kalman_filter_8cpp.html diff --git a/doxygen/html/_extended_kalman_filter_8cpp_source.html b/doc/html/_extended_kalman_filter_8cpp_source.html similarity index 100% rename from doxygen/html/_extended_kalman_filter_8cpp_source.html rename to doc/html/_extended_kalman_filter_8cpp_source.html diff --git a/doxygen/html/_extended_kalman_filter_8h.html b/doc/html/_extended_kalman_filter_8h.html similarity index 100% rename from doxygen/html/_extended_kalman_filter_8h.html rename to doc/html/_extended_kalman_filter_8h.html diff --git a/doxygen/html/_extended_kalman_filter_8h_source.html b/doc/html/_extended_kalman_filter_8h_source.html similarity index 100% rename from doxygen/html/_extended_kalman_filter_8h_source.html rename to doc/html/_extended_kalman_filter_8h_source.html diff --git a/doxygen/html/_filter_base_8h.html b/doc/html/_filter_base_8h.html similarity index 100% rename from doxygen/html/_filter_base_8h.html rename to doc/html/_filter_base_8h.html diff --git a/doxygen/html/_filter_base_8h_source.html b/doc/html/_filter_base_8h_source.html similarity index 100% rename from doxygen/html/_filter_base_8h_source.html rename to doc/html/_filter_base_8h_source.html diff --git a/doxygen/html/_l_q_r_8cpp.html b/doc/html/_l_q_r_8cpp.html similarity index 100% rename from doxygen/html/_l_q_r_8cpp.html rename to doc/html/_l_q_r_8cpp.html diff --git a/doxygen/html/_l_q_r_8cpp_source.html b/doc/html/_l_q_r_8cpp_source.html similarity index 100% rename from doxygen/html/_l_q_r_8cpp_source.html rename to doc/html/_l_q_r_8cpp_source.html diff --git a/doxygen/html/_l_q_r_8h.html b/doc/html/_l_q_r_8h.html similarity index 100% rename from doxygen/html/_l_q_r_8h.html rename to doc/html/_l_q_r_8h.html diff --git a/doxygen/html/_l_q_r_8h_source.html b/doc/html/_l_q_r_8h_source.html similarity index 100% rename from doxygen/html/_l_q_r_8h_source.html rename to doc/html/_l_q_r_8h_source.html diff --git a/doxygen/html/_logger_c_s_v_8h.html b/doc/html/_logger_c_s_v_8h.html similarity index 100% rename from doxygen/html/_logger_c_s_v_8h.html rename to doc/html/_logger_c_s_v_8h.html diff --git a/doxygen/html/_logger_c_s_v_8h_source.html b/doc/html/_logger_c_s_v_8h_source.html similarity index 100% rename from doxygen/html/_logger_c_s_v_8h_source.html rename to doc/html/_logger_c_s_v_8h_source.html diff --git a/doxygen/html/_p_i_d_8cpp.html b/doc/html/_p_i_d_8cpp.html similarity index 100% rename from doxygen/html/_p_i_d_8cpp.html rename to doc/html/_p_i_d_8cpp.html diff --git a/doxygen/html/_p_i_d_8cpp_source.html b/doc/html/_p_i_d_8cpp_source.html similarity index 100% rename from doxygen/html/_p_i_d_8cpp_source.html rename to doc/html/_p_i_d_8cpp_source.html diff --git a/doxygen/html/_p_i_d_8h.html b/doc/html/_p_i_d_8h.html similarity index 100% rename from doxygen/html/_p_i_d_8h.html rename to doc/html/_p_i_d_8h.html diff --git a/doxygen/html/_p_i_d_8h_source.html b/doc/html/_p_i_d_8h_source.html similarity index 100% rename from doxygen/html/_p_i_d_8h_source.html rename to doc/html/_p_i_d_8h_source.html diff --git a/doxygen/html/_quad_controller_p_i_d_8cpp.html b/doc/html/_quad_controller_p_i_d_8cpp.html similarity index 100% rename from doxygen/html/_quad_controller_p_i_d_8cpp.html rename to doc/html/_quad_controller_p_i_d_8cpp.html diff --git a/doxygen/html/_quad_controller_p_i_d_8cpp_source.html b/doc/html/_quad_controller_p_i_d_8cpp_source.html similarity index 100% rename from doxygen/html/_quad_controller_p_i_d_8cpp_source.html rename to doc/html/_quad_controller_p_i_d_8cpp_source.html diff --git a/doxygen/html/_quad_controller_p_i_d_8h.html b/doc/html/_quad_controller_p_i_d_8h.html similarity index 100% rename from doxygen/html/_quad_controller_p_i_d_8h.html rename to doc/html/_quad_controller_p_i_d_8h.html diff --git a/doxygen/html/_quad_controller_p_i_d_8h_source.html b/doc/html/_quad_controller_p_i_d_8h_source.html similarity index 100% rename from doxygen/html/_quad_controller_p_i_d_8h_source.html rename to doc/html/_quad_controller_p_i_d_8h_source.html diff --git a/doxygen/html/_r_e_a_d_m_e_8md.html b/doc/html/_r_e_a_d_m_e_8md.html similarity index 100% rename from doxygen/html/_r_e_a_d_m_e_8md.html rename to doc/html/_r_e_a_d_m_e_8md.html diff --git a/doxygen/html/_sensor_base_8h.html b/doc/html/_sensor_base_8h.html similarity index 100% rename from doxygen/html/_sensor_base_8h.html rename to doc/html/_sensor_base_8h.html diff --git a/doxygen/html/_sensor_base_8h_source.html b/doc/html/_sensor_base_8h_source.html similarity index 100% rename from doxygen/html/_sensor_base_8h_source.html rename to doc/html/_sensor_base_8h_source.html diff --git a/doxygen/html/_state_observer_8cpp.html b/doc/html/_state_observer_8cpp.html similarity index 100% rename from doxygen/html/_state_observer_8cpp.html rename to doc/html/_state_observer_8cpp.html diff --git a/doxygen/html/_state_observer_8cpp_source.html b/doc/html/_state_observer_8cpp_source.html similarity index 100% rename from doxygen/html/_state_observer_8cpp_source.html rename to doc/html/_state_observer_8cpp_source.html diff --git a/doxygen/html/_state_observer_8h.html b/doc/html/_state_observer_8h.html similarity index 100% rename from doxygen/html/_state_observer_8h.html rename to doc/html/_state_observer_8h.html diff --git a/doxygen/html/_state_observer_8h_source.html b/doc/html/_state_observer_8h_source.html similarity index 100% rename from doxygen/html/_state_observer_8h_source.html rename to doc/html/_state_observer_8h_source.html diff --git a/doxygen/html/annotated.html b/doc/html/annotated.html similarity index 100% rename from doxygen/html/annotated.html rename to doc/html/annotated.html diff --git a/doxygen/html/apriltag__complementary__pid_8cpp.html b/doc/html/apriltag__complementary__pid_8cpp.html similarity index 100% rename from doxygen/html/apriltag__complementary__pid_8cpp.html rename to doc/html/apriltag__complementary__pid_8cpp.html diff --git a/doxygen/html/apriltag__complementary__pid_8cpp_source.html b/doc/html/apriltag__complementary__pid_8cpp_source.html similarity index 100% rename from doxygen/html/apriltag__complementary__pid_8cpp_source.html rename to doc/html/apriltag__complementary__pid_8cpp_source.html diff --git a/doxygen/html/apriltag__ekf__pid_8cpp.html b/doc/html/apriltag__ekf__pid_8cpp.html similarity index 100% rename from doxygen/html/apriltag__ekf__pid_8cpp.html rename to doc/html/apriltag__ekf__pid_8cpp.html diff --git a/doxygen/html/apriltag__ekf__pid_8cpp_source.html b/doc/html/apriltag__ekf__pid_8cpp_source.html similarity index 100% rename from doxygen/html/apriltag__ekf__pid_8cpp_source.html rename to doc/html/apriltag__ekf__pid_8cpp_source.html diff --git a/doxygen/html/bc_s.png b/doc/html/bc_s.png similarity index 100% rename from doxygen/html/bc_s.png rename to doc/html/bc_s.png diff --git a/doxygen/html/bc_sd.png b/doc/html/bc_sd.png similarity index 100% rename from doxygen/html/bc_sd.png rename to doc/html/bc_sd.png diff --git a/doxygen/html/bdwn.png b/doc/html/bdwn.png similarity index 100% rename from doxygen/html/bdwn.png rename to doc/html/bdwn.png diff --git a/doxygen/html/class_apriltag_landmarks-members.html b/doc/html/class_apriltag_landmarks-members.html similarity index 100% rename from doxygen/html/class_apriltag_landmarks-members.html rename to doc/html/class_apriltag_landmarks-members.html diff --git a/doxygen/html/class_apriltag_landmarks.html b/doc/html/class_apriltag_landmarks.html similarity index 100% rename from doxygen/html/class_apriltag_landmarks.html rename to doc/html/class_apriltag_landmarks.html diff --git a/doxygen/html/class_apriltag_landmarks.png b/doc/html/class_apriltag_landmarks.png similarity index 100% rename from doxygen/html/class_apriltag_landmarks.png rename to doc/html/class_apriltag_landmarks.png diff --git a/doxygen/html/class_complementary_filter-members.html b/doc/html/class_complementary_filter-members.html similarity index 100% rename from doxygen/html/class_complementary_filter-members.html rename to doc/html/class_complementary_filter-members.html diff --git a/doxygen/html/class_complementary_filter.html b/doc/html/class_complementary_filter.html similarity index 100% rename from doxygen/html/class_complementary_filter.html rename to doc/html/class_complementary_filter.html diff --git a/doxygen/html/class_complementary_filter.png b/doc/html/class_complementary_filter.png similarity index 100% rename from doxygen/html/class_complementary_filter.png rename to doc/html/class_complementary_filter.png diff --git a/doxygen/html/class_filter_base-members.html b/doc/html/class_filter_base-members.html similarity index 100% rename from doxygen/html/class_filter_base-members.html rename to doc/html/class_filter_base-members.html diff --git a/doxygen/html/class_filter_base.html b/doc/html/class_filter_base.html similarity index 100% rename from doxygen/html/class_filter_base.html rename to doc/html/class_filter_base.html diff --git a/doxygen/html/class_filter_base.png b/doc/html/class_filter_base.png similarity index 100% rename from doxygen/html/class_filter_base.png rename to doc/html/class_filter_base.png diff --git a/doxygen/html/class_logger_c_s_v-members.html b/doc/html/class_logger_c_s_v-members.html similarity index 100% rename from doxygen/html/class_logger_c_s_v-members.html rename to doc/html/class_logger_c_s_v-members.html diff --git a/doxygen/html/class_logger_c_s_v.html b/doc/html/class_logger_c_s_v.html similarity index 100% rename from doxygen/html/class_logger_c_s_v.html rename to doc/html/class_logger_c_s_v.html diff --git a/doxygen/html/class_mvn-members.html b/doc/html/class_mvn-members.html similarity index 100% rename from doxygen/html/class_mvn-members.html rename to doc/html/class_mvn-members.html diff --git a/doxygen/html/class_mvn.html b/doc/html/class_mvn.html similarity index 100% rename from doxygen/html/class_mvn.html rename to doc/html/class_mvn.html diff --git a/doxygen/html/class_particle_filter-members.html b/doc/html/class_particle_filter-members.html similarity index 100% rename from doxygen/html/class_particle_filter-members.html rename to doc/html/class_particle_filter-members.html diff --git a/doxygen/html/class_particle_filter.html b/doc/html/class_particle_filter.html similarity index 100% rename from doxygen/html/class_particle_filter.html rename to doc/html/class_particle_filter.html diff --git a/doxygen/html/class_sensor_base-members.html b/doc/html/class_sensor_base-members.html similarity index 100% rename from doxygen/html/class_sensor_base-members.html rename to doc/html/class_sensor_base-members.html diff --git a/doxygen/html/class_sensor_base.html b/doc/html/class_sensor_base.html similarity index 100% rename from doxygen/html/class_sensor_base.html rename to doc/html/class_sensor_base.html diff --git a/doxygen/html/class_sensor_base.png b/doc/html/class_sensor_base.png similarity index 100% rename from doxygen/html/class_sensor_base.png rename to doc/html/class_sensor_base.png diff --git a/doxygen/html/class_state_space-members.html b/doc/html/class_state_space-members.html similarity index 100% rename from doxygen/html/class_state_space-members.html rename to doc/html/class_state_space-members.html diff --git a/doxygen/html/class_state_space.html b/doc/html/class_state_space.html similarity index 100% rename from doxygen/html/class_state_space.html rename to doc/html/class_state_space.html diff --git a/doxygen/html/class_tag_map-members.html b/doc/html/class_tag_map-members.html similarity index 100% rename from doxygen/html/class_tag_map-members.html rename to doc/html/class_tag_map-members.html diff --git a/doxygen/html/class_tag_map.html b/doc/html/class_tag_map.html similarity index 100% rename from doxygen/html/class_tag_map.html rename to doc/html/class_tag_map.html diff --git a/doxygen/html/classbebop2_1_1_control_viz-members.html b/doc/html/classbebop2_1_1_control_viz-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_control_viz-members.html rename to doc/html/classbebop2_1_1_control_viz-members.html diff --git a/doxygen/html/classbebop2_1_1_control_viz.html b/doc/html/classbebop2_1_1_control_viz.html similarity index 100% rename from doxygen/html/classbebop2_1_1_control_viz.html rename to doc/html/classbebop2_1_1_control_viz.html diff --git a/doxygen/html/classbebop2_1_1_controller_base-members.html b/doc/html/classbebop2_1_1_controller_base-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_controller_base-members.html rename to doc/html/classbebop2_1_1_controller_base-members.html diff --git a/doxygen/html/classbebop2_1_1_controller_base.html b/doc/html/classbebop2_1_1_controller_base.html similarity index 100% rename from doxygen/html/classbebop2_1_1_controller_base.html rename to doc/html/classbebop2_1_1_controller_base.html diff --git a/doxygen/html/classbebop2_1_1_controller_base.png b/doc/html/classbebop2_1_1_controller_base.png similarity index 100% rename from doxygen/html/classbebop2_1_1_controller_base.png rename to doc/html/classbebop2_1_1_controller_base.png diff --git a/doxygen/html/classbebop2_1_1_dummy_state-members.html b/doc/html/classbebop2_1_1_dummy_state-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_dummy_state-members.html rename to doc/html/classbebop2_1_1_dummy_state-members.html diff --git a/doxygen/html/classbebop2_1_1_dummy_state.html b/doc/html/classbebop2_1_1_dummy_state.html similarity index 100% rename from doxygen/html/classbebop2_1_1_dummy_state.html rename to doc/html/classbebop2_1_1_dummy_state.html diff --git a/doxygen/html/classbebop2_1_1_dummy_state.png b/doc/html/classbebop2_1_1_dummy_state.png similarity index 100% rename from doxygen/html/classbebop2_1_1_dummy_state.png rename to doc/html/classbebop2_1_1_dummy_state.png diff --git a/doxygen/html/classbebop2_1_1_extended_kalman_filter-members.html b/doc/html/classbebop2_1_1_extended_kalman_filter-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_extended_kalman_filter-members.html rename to doc/html/classbebop2_1_1_extended_kalman_filter-members.html diff --git a/doxygen/html/classbebop2_1_1_extended_kalman_filter.html b/doc/html/classbebop2_1_1_extended_kalman_filter.html similarity index 100% rename from doxygen/html/classbebop2_1_1_extended_kalman_filter.html rename to doc/html/classbebop2_1_1_extended_kalman_filter.html diff --git a/doxygen/html/classbebop2_1_1_extended_kalman_filter.png b/doc/html/classbebop2_1_1_extended_kalman_filter.png similarity index 100% rename from doxygen/html/classbebop2_1_1_extended_kalman_filter.png rename to doc/html/classbebop2_1_1_extended_kalman_filter.png diff --git a/doxygen/html/classbebop2_1_1_l_q_r-members.html b/doc/html/classbebop2_1_1_l_q_r-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_l_q_r-members.html rename to doc/html/classbebop2_1_1_l_q_r-members.html diff --git a/doxygen/html/classbebop2_1_1_l_q_r.html b/doc/html/classbebop2_1_1_l_q_r.html similarity index 100% rename from doxygen/html/classbebop2_1_1_l_q_r.html rename to doc/html/classbebop2_1_1_l_q_r.html diff --git a/doxygen/html/classbebop2_1_1_p_i_d-members.html b/doc/html/classbebop2_1_1_p_i_d-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_p_i_d-members.html rename to doc/html/classbebop2_1_1_p_i_d-members.html diff --git a/doxygen/html/classbebop2_1_1_p_i_d.html b/doc/html/classbebop2_1_1_p_i_d.html similarity index 100% rename from doxygen/html/classbebop2_1_1_p_i_d.html rename to doc/html/classbebop2_1_1_p_i_d.html diff --git a/doxygen/html/classbebop2_1_1_quad_controller_p_i_d-members.html b/doc/html/classbebop2_1_1_quad_controller_p_i_d-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_quad_controller_p_i_d-members.html rename to doc/html/classbebop2_1_1_quad_controller_p_i_d-members.html diff --git a/doxygen/html/classbebop2_1_1_quad_controller_p_i_d.html b/doc/html/classbebop2_1_1_quad_controller_p_i_d.html similarity index 100% rename from doxygen/html/classbebop2_1_1_quad_controller_p_i_d.html rename to doc/html/classbebop2_1_1_quad_controller_p_i_d.html diff --git a/doxygen/html/classbebop2_1_1_quad_controller_p_i_d.png b/doc/html/classbebop2_1_1_quad_controller_p_i_d.png similarity index 100% rename from doxygen/html/classbebop2_1_1_quad_controller_p_i_d.png rename to doc/html/classbebop2_1_1_quad_controller_p_i_d.png diff --git a/doxygen/html/classbebop2_1_1_state_observer-members.html b/doc/html/classbebop2_1_1_state_observer-members.html similarity index 100% rename from doxygen/html/classbebop2_1_1_state_observer-members.html rename to doc/html/classbebop2_1_1_state_observer-members.html diff --git a/doxygen/html/classbebop2_1_1_state_observer.html b/doc/html/classbebop2_1_1_state_observer.html similarity index 100% rename from doxygen/html/classbebop2_1_1_state_observer.html rename to doc/html/classbebop2_1_1_state_observer.html diff --git a/doxygen/html/classes.html b/doc/html/classes.html similarity index 100% rename from doxygen/html/classes.html rename to doc/html/classes.html diff --git a/doxygen/html/classmatplotlibcpp_1_1_plot-members.html b/doc/html/classmatplotlibcpp_1_1_plot-members.html similarity index 100% rename from doxygen/html/classmatplotlibcpp_1_1_plot-members.html rename to doc/html/classmatplotlibcpp_1_1_plot-members.html diff --git a/doxygen/html/classmatplotlibcpp_1_1_plot.html b/doc/html/classmatplotlibcpp_1_1_plot.html similarity index 100% rename from doxygen/html/classmatplotlibcpp_1_1_plot.html rename to doc/html/classmatplotlibcpp_1_1_plot.html diff --git a/doxygen/html/closed.png b/doc/html/closed.png similarity index 100% rename from doxygen/html/closed.png rename to doc/html/closed.png diff --git a/doxygen/html/control_2_l_q_r_2main_8cpp.html b/doc/html/control_2_l_q_r_2main_8cpp.html similarity index 100% rename from doxygen/html/control_2_l_q_r_2main_8cpp.html rename to doc/html/control_2_l_q_r_2main_8cpp.html diff --git a/doxygen/html/control_2_l_q_r_2main_8cpp_source.html b/doc/html/control_2_l_q_r_2main_8cpp_source.html similarity index 100% rename from doxygen/html/control_2_l_q_r_2main_8cpp_source.html rename to doc/html/control_2_l_q_r_2main_8cpp_source.html diff --git a/doxygen/html/dir_0b09c446dd7a9edef411ea7168ce1167.html b/doc/html/dir_0b09c446dd7a9edef411ea7168ce1167.html similarity index 100% rename from doxygen/html/dir_0b09c446dd7a9edef411ea7168ce1167.html rename to doc/html/dir_0b09c446dd7a9edef411ea7168ce1167.html diff --git a/doxygen/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html b/doc/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html similarity index 100% rename from doxygen/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html rename to doc/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html diff --git a/doxygen/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html b/doc/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html similarity index 100% rename from doxygen/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html rename to doc/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html diff --git a/doxygen/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html b/doc/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html similarity index 100% rename from doxygen/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html rename to doc/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html diff --git a/doxygen/html/dir_594170da0cc2132ee3c8d450a92c2c42.html b/doc/html/dir_594170da0cc2132ee3c8d450a92c2c42.html similarity index 100% rename from doxygen/html/dir_594170da0cc2132ee3c8d450a92c2c42.html rename to doc/html/dir_594170da0cc2132ee3c8d450a92c2c42.html diff --git a/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html similarity index 100% rename from doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html rename to doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html diff --git a/doxygen/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html b/doc/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html similarity index 100% rename from doxygen/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html rename to doc/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html diff --git a/doxygen/html/dir_7ca564011fad3714200192b544070e96.html b/doc/html/dir_7ca564011fad3714200192b544070e96.html similarity index 100% rename from doxygen/html/dir_7ca564011fad3714200192b544070e96.html rename to doc/html/dir_7ca564011fad3714200192b544070e96.html diff --git a/doxygen/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html b/doc/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html similarity index 100% rename from doxygen/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html rename to doc/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html diff --git a/doxygen/html/dir_8ecd737fac62fc67297553abfd7cdb81.html b/doc/html/dir_8ecd737fac62fc67297553abfd7cdb81.html similarity index 100% rename from doxygen/html/dir_8ecd737fac62fc67297553abfd7cdb81.html rename to doc/html/dir_8ecd737fac62fc67297553abfd7cdb81.html diff --git a/doxygen/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html b/doc/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html similarity index 100% rename from doxygen/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html rename to doc/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html diff --git a/doxygen/html/dir_b664689b4d3943ff523c1250795bca04.html b/doc/html/dir_b664689b4d3943ff523c1250795bca04.html similarity index 100% rename from doxygen/html/dir_b664689b4d3943ff523c1250795bca04.html rename to doc/html/dir_b664689b4d3943ff523c1250795bca04.html diff --git a/doxygen/html/dir_c6e5477bcb651b159cfa63982954b7ae.html b/doc/html/dir_c6e5477bcb651b159cfa63982954b7ae.html similarity index 100% rename from doxygen/html/dir_c6e5477bcb651b159cfa63982954b7ae.html rename to doc/html/dir_c6e5477bcb651b159cfa63982954b7ae.html diff --git a/doxygen/html/dir_cde68057bc18755c5a523db9c7548a97.html b/doc/html/dir_cde68057bc18755c5a523db9c7548a97.html similarity index 100% rename from doxygen/html/dir_cde68057bc18755c5a523db9c7548a97.html rename to doc/html/dir_cde68057bc18755c5a523db9c7548a97.html diff --git a/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html similarity index 100% rename from doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html rename to doc/html/dir_d44c64559bbebec7f509842c48db8b23.html diff --git a/doxygen/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html b/doc/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html similarity index 100% rename from doxygen/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html rename to doc/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html diff --git a/doxygen/html/dir_ddae31c66714fb086f3b96543d9a56f1.html b/doc/html/dir_ddae31c66714fb086f3b96543d9a56f1.html similarity index 100% rename from doxygen/html/dir_ddae31c66714fb086f3b96543d9a56f1.html rename to doc/html/dir_ddae31c66714fb086f3b96543d9a56f1.html diff --git a/doxygen/html/doc.png b/doc/html/doc.png similarity index 100% rename from doxygen/html/doc.png rename to doc/html/doc.png diff --git a/doxygen/html/docd.png b/doc/html/docd.png similarity index 100% rename from doxygen/html/docd.png rename to doc/html/docd.png diff --git a/doxygen/html/doxygen.css b/doc/html/doxygen.css similarity index 100% rename from doxygen/html/doxygen.css rename to doc/html/doxygen.css diff --git a/doxygen/html/doxygen.svg b/doc/html/doxygen.svg similarity index 100% rename from doxygen/html/doxygen.svg rename to doc/html/doxygen.svg diff --git a/doxygen/html/dummy__ekf__pid_8cpp.html b/doc/html/dummy__ekf__pid_8cpp.html similarity index 100% rename from doxygen/html/dummy__ekf__pid_8cpp.html rename to doc/html/dummy__ekf__pid_8cpp.html diff --git a/doxygen/html/dummy__ekf__pid_8cpp_source.html b/doc/html/dummy__ekf__pid_8cpp_source.html similarity index 100% rename from doxygen/html/dummy__ekf__pid_8cpp_source.html rename to doc/html/dummy__ekf__pid_8cpp_source.html diff --git a/doxygen/html/dynsections.js b/doc/html/dynsections.js similarity index 100% rename from doxygen/html/dynsections.js rename to doc/html/dynsections.js diff --git a/doxygen/html/files.html b/doc/html/files.html similarity index 100% rename from doxygen/html/files.html rename to doc/html/files.html diff --git a/doxygen/html/filters_8h.html b/doc/html/filters_8h.html similarity index 100% rename from doxygen/html/filters_8h.html rename to doc/html/filters_8h.html diff --git a/doxygen/html/filters_8h_source.html b/doc/html/filters_8h_source.html similarity index 100% rename from doxygen/html/filters_8h_source.html rename to doc/html/filters_8h_source.html diff --git a/doxygen/html/folderclosed.png b/doc/html/folderclosed.png similarity index 100% rename from doxygen/html/folderclosed.png rename to doc/html/folderclosed.png diff --git a/doxygen/html/folderopen.png b/doc/html/folderopen.png similarity index 100% rename from doxygen/html/folderopen.png rename to doc/html/folderopen.png diff --git a/doxygen/html/functions.html b/doc/html/functions.html similarity index 100% rename from doxygen/html/functions.html rename to doc/html/functions.html diff --git a/doxygen/html/functions_b.html b/doc/html/functions_b.html similarity index 100% rename from doxygen/html/functions_b.html rename to doc/html/functions_b.html diff --git a/doxygen/html/functions_c.html b/doc/html/functions_c.html similarity index 100% rename from doxygen/html/functions_c.html rename to doc/html/functions_c.html diff --git a/doxygen/html/functions_d.html b/doc/html/functions_d.html similarity index 100% rename from doxygen/html/functions_d.html rename to doc/html/functions_d.html diff --git a/doxygen/html/functions_e.html b/doc/html/functions_e.html similarity index 100% rename from doxygen/html/functions_e.html rename to doc/html/functions_e.html diff --git a/doxygen/html/functions_enum.html b/doc/html/functions_enum.html similarity index 100% rename from doxygen/html/functions_enum.html rename to doc/html/functions_enum.html diff --git a/doxygen/html/functions_eval.html b/doc/html/functions_eval.html similarity index 100% rename from doxygen/html/functions_eval.html rename to doc/html/functions_eval.html diff --git a/doxygen/html/functions_f.html b/doc/html/functions_f.html similarity index 100% rename from doxygen/html/functions_f.html rename to doc/html/functions_f.html diff --git a/doxygen/html/functions_func.html b/doc/html/functions_func.html similarity index 100% rename from doxygen/html/functions_func.html rename to doc/html/functions_func.html diff --git a/doxygen/html/functions_g.html b/doc/html/functions_g.html similarity index 100% rename from doxygen/html/functions_g.html rename to doc/html/functions_g.html diff --git a/doxygen/html/functions_i.html b/doc/html/functions_i.html similarity index 100% rename from doxygen/html/functions_i.html rename to doc/html/functions_i.html diff --git a/doxygen/html/functions_j.html b/doc/html/functions_j.html similarity index 100% rename from doxygen/html/functions_j.html rename to doc/html/functions_j.html diff --git a/doxygen/html/functions_k.html b/doc/html/functions_k.html similarity index 100% rename from doxygen/html/functions_k.html rename to doc/html/functions_k.html diff --git a/doxygen/html/functions_l.html b/doc/html/functions_l.html similarity index 100% rename from doxygen/html/functions_l.html rename to doc/html/functions_l.html diff --git a/doxygen/html/functions_m.html b/doc/html/functions_m.html similarity index 100% rename from doxygen/html/functions_m.html rename to doc/html/functions_m.html diff --git a/doxygen/html/functions_o.html b/doc/html/functions_o.html similarity index 100% rename from doxygen/html/functions_o.html rename to doc/html/functions_o.html diff --git a/doxygen/html/functions_p.html b/doc/html/functions_p.html similarity index 100% rename from doxygen/html/functions_p.html rename to doc/html/functions_p.html diff --git a/doxygen/html/functions_q.html b/doc/html/functions_q.html similarity index 100% rename from doxygen/html/functions_q.html rename to doc/html/functions_q.html diff --git a/doxygen/html/functions_r.html b/doc/html/functions_r.html similarity index 100% rename from doxygen/html/functions_r.html rename to doc/html/functions_r.html diff --git a/doxygen/html/functions_rela.html b/doc/html/functions_rela.html similarity index 100% rename from doxygen/html/functions_rela.html rename to doc/html/functions_rela.html diff --git a/doxygen/html/functions_s.html b/doc/html/functions_s.html similarity index 100% rename from doxygen/html/functions_s.html rename to doc/html/functions_s.html diff --git a/doxygen/html/functions_t.html b/doc/html/functions_t.html similarity index 100% rename from doxygen/html/functions_t.html rename to doc/html/functions_t.html diff --git a/doxygen/html/functions_type.html b/doc/html/functions_type.html similarity index 100% rename from doxygen/html/functions_type.html rename to doc/html/functions_type.html diff --git a/doxygen/html/functions_u.html b/doc/html/functions_u.html similarity index 100% rename from doxygen/html/functions_u.html rename to doc/html/functions_u.html diff --git a/doxygen/html/functions_v.html b/doc/html/functions_v.html similarity index 100% rename from doxygen/html/functions_v.html rename to doc/html/functions_v.html diff --git a/doxygen/html/functions_vars.html b/doc/html/functions_vars.html similarity index 100% rename from doxygen/html/functions_vars.html rename to doc/html/functions_vars.html diff --git a/doxygen/html/functions_w.html b/doc/html/functions_w.html similarity index 100% rename from doxygen/html/functions_w.html rename to doc/html/functions_w.html diff --git a/doxygen/html/functions_x.html b/doc/html/functions_x.html similarity index 100% rename from doxygen/html/functions_x.html rename to doc/html/functions_x.html diff --git a/doxygen/html/functions_y.html b/doc/html/functions_y.html similarity index 100% rename from doxygen/html/functions_y.html rename to doc/html/functions_y.html diff --git a/doxygen/html/functions_z.html b/doc/html/functions_z.html similarity index 100% rename from doxygen/html/functions_z.html rename to doc/html/functions_z.html diff --git a/doxygen/html/functions_~.html b/doc/html/functions_~.html similarity index 100% rename from doxygen/html/functions_~.html rename to doc/html/functions_~.html diff --git a/doxygen/html/globals.html b/doc/html/globals.html similarity index 100% rename from doxygen/html/globals.html rename to doc/html/globals.html diff --git a/doxygen/html/globals_defs.html b/doc/html/globals_defs.html similarity index 100% rename from doxygen/html/globals_defs.html rename to doc/html/globals_defs.html diff --git a/doxygen/html/globals_func.html b/doc/html/globals_func.html similarity index 100% rename from doxygen/html/globals_func.html rename to doc/html/globals_func.html diff --git a/doxygen/html/globals_type.html b/doc/html/globals_type.html similarity index 100% rename from doxygen/html/globals_type.html rename to doc/html/globals_type.html diff --git a/doxygen/html/helper_8h.html b/doc/html/helper_8h.html similarity index 100% rename from doxygen/html/helper_8h.html rename to doc/html/helper_8h.html diff --git a/doxygen/html/helper_8h_source.html b/doc/html/helper_8h_source.html similarity index 100% rename from doxygen/html/helper_8h_source.html rename to doc/html/helper_8h_source.html diff --git a/doxygen/html/hierarchy.html b/doc/html/hierarchy.html similarity index 100% rename from doxygen/html/hierarchy.html rename to doc/html/hierarchy.html diff --git a/doxygen/html/index.html b/doc/html/index.html similarity index 100% rename from doxygen/html/index.html rename to doc/html/index.html diff --git a/doxygen/html/jquery.js b/doc/html/jquery.js similarity index 100% rename from doxygen/html/jquery.js rename to doc/html/jquery.js diff --git a/doxygen/html/localization_2_filters_2ekf_2main_8cpp.html b/doc/html/localization_2_filters_2ekf_2main_8cpp.html similarity index 100% rename from doxygen/html/localization_2_filters_2ekf_2main_8cpp.html rename to doc/html/localization_2_filters_2ekf_2main_8cpp.html diff --git a/doxygen/html/localization_2_filters_2ekf_2main_8cpp_source.html b/doc/html/localization_2_filters_2ekf_2main_8cpp_source.html similarity index 100% rename from doxygen/html/localization_2_filters_2ekf_2main_8cpp_source.html rename to doc/html/localization_2_filters_2ekf_2main_8cpp_source.html diff --git a/doxygen/html/localization_2_filters_2pf_2main_8cpp.html b/doc/html/localization_2_filters_2pf_2main_8cpp.html similarity index 100% rename from doxygen/html/localization_2_filters_2pf_2main_8cpp.html rename to doc/html/localization_2_filters_2pf_2main_8cpp.html diff --git a/doxygen/html/localization_2_filters_2pf_2main_8cpp_source.html b/doc/html/localization_2_filters_2pf_2main_8cpp_source.html similarity index 100% rename from doxygen/html/localization_2_filters_2pf_2main_8cpp_source.html rename to doc/html/localization_2_filters_2pf_2main_8cpp_source.html diff --git a/doxygen/html/matplotlibcpp_8h.html b/doc/html/matplotlibcpp_8h.html similarity index 100% rename from doxygen/html/matplotlibcpp_8h.html rename to doc/html/matplotlibcpp_8h.html diff --git a/doxygen/html/matplotlibcpp_8h_source.html b/doc/html/matplotlibcpp_8h_source.html similarity index 100% rename from doxygen/html/matplotlibcpp_8h_source.html rename to doc/html/matplotlibcpp_8h_source.html diff --git a/doxygen/html/md__r_e_a_d_m_e.html b/doc/html/md__r_e_a_d_m_e.html similarity index 100% rename from doxygen/html/md__r_e_a_d_m_e.html rename to doc/html/md__r_e_a_d_m_e.html diff --git a/doxygen/html/menu.js b/doc/html/menu.js similarity index 100% rename from doxygen/html/menu.js rename to doc/html/menu.js diff --git a/doxygen/html/menudata.js b/doc/html/menudata.js similarity index 100% rename from doxygen/html/menudata.js rename to doc/html/menudata.js diff --git a/doxygen/html/namespacebebop2.html b/doc/html/namespacebebop2.html similarity index 100% rename from doxygen/html/namespacebebop2.html rename to doc/html/namespacebebop2.html diff --git a/doxygen/html/namespacematplotlibcpp.html b/doc/html/namespacematplotlibcpp.html similarity index 100% rename from doxygen/html/namespacematplotlibcpp.html rename to doc/html/namespacematplotlibcpp.html diff --git a/doxygen/html/namespacematplotlibcpp_1_1detail.html b/doc/html/namespacematplotlibcpp_1_1detail.html similarity index 100% rename from doxygen/html/namespacematplotlibcpp_1_1detail.html rename to doc/html/namespacematplotlibcpp_1_1detail.html diff --git a/doxygen/html/namespacemembers.html b/doc/html/namespacemembers.html similarity index 100% rename from doxygen/html/namespacemembers.html rename to doc/html/namespacemembers.html diff --git a/doxygen/html/namespacemembers_enum.html b/doc/html/namespacemembers_enum.html similarity index 100% rename from doxygen/html/namespacemembers_enum.html rename to doc/html/namespacemembers_enum.html diff --git a/doxygen/html/namespacemembers_eval.html b/doc/html/namespacemembers_eval.html similarity index 100% rename from doxygen/html/namespacemembers_eval.html rename to doc/html/namespacemembers_eval.html diff --git a/doxygen/html/namespacemembers_func.html b/doc/html/namespacemembers_func.html similarity index 100% rename from doxygen/html/namespacemembers_func.html rename to doc/html/namespacemembers_func.html diff --git a/doxygen/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html similarity index 100% rename from doxygen/html/namespacemembers_type.html rename to doc/html/namespacemembers_type.html diff --git a/doxygen/html/namespacemembers_vars.html b/doc/html/namespacemembers_vars.html similarity index 100% rename from doxygen/html/namespacemembers_vars.html rename to doc/html/namespacemembers_vars.html diff --git a/doxygen/html/namespaces.html b/doc/html/namespaces.html similarity index 100% rename from doxygen/html/namespaces.html rename to doc/html/namespaces.html diff --git a/doxygen/html/nav_f.png b/doc/html/nav_f.png similarity index 100% rename from doxygen/html/nav_f.png rename to doc/html/nav_f.png diff --git a/doxygen/html/nav_fd.png b/doc/html/nav_fd.png similarity index 100% rename from doxygen/html/nav_fd.png rename to doc/html/nav_fd.png diff --git a/doxygen/html/nav_g.png b/doc/html/nav_g.png similarity index 100% rename from doxygen/html/nav_g.png rename to doc/html/nav_g.png diff --git a/doxygen/html/nav_h.png b/doc/html/nav_h.png similarity index 100% rename from doxygen/html/nav_h.png rename to doc/html/nav_h.png diff --git a/doxygen/html/nav_hd.png b/doc/html/nav_hd.png similarity index 100% rename from doxygen/html/nav_hd.png rename to doc/html/nav_hd.png diff --git a/doxygen/html/open.png b/doc/html/open.png similarity index 100% rename from doxygen/html/open.png rename to doc/html/open.png diff --git a/doxygen/html/pages.html b/doc/html/pages.html similarity index 100% rename from doxygen/html/pages.html rename to doc/html/pages.html diff --git a/doxygen/html/particle__filter_8cpp.html b/doc/html/particle__filter_8cpp.html similarity index 100% rename from doxygen/html/particle__filter_8cpp.html rename to doc/html/particle__filter_8cpp.html diff --git a/doxygen/html/particle__filter_8cpp_source.html b/doc/html/particle__filter_8cpp_source.html similarity index 100% rename from doxygen/html/particle__filter_8cpp_source.html rename to doc/html/particle__filter_8cpp_source.html diff --git a/doxygen/html/particle__filter_8h.html b/doc/html/particle__filter_8h.html similarity index 100% rename from doxygen/html/particle__filter_8h.html rename to doc/html/particle__filter_8h.html diff --git a/doxygen/html/particle__filter_8h_source.html b/doc/html/particle__filter_8h_source.html similarity index 100% rename from doxygen/html/particle__filter_8h_source.html rename to doc/html/particle__filter_8h_source.html diff --git a/doxygen/html/robot__defs_8h.html b/doc/html/robot__defs_8h.html similarity index 100% rename from doxygen/html/robot__defs_8h.html rename to doc/html/robot__defs_8h.html diff --git a/doxygen/html/robot__defs_8h_source.html b/doc/html/robot__defs_8h_source.html similarity index 100% rename from doxygen/html/robot__defs_8h_source.html rename to doc/html/robot__defs_8h_source.html diff --git a/doxygen/html/search/all_0.js b/doc/html/search/all_0.js similarity index 100% rename from doxygen/html/search/all_0.js rename to doc/html/search/all_0.js diff --git a/doxygen/html/search/all_1.js b/doc/html/search/all_1.js similarity index 100% rename from doxygen/html/search/all_1.js rename to doc/html/search/all_1.js diff --git a/doxygen/html/search/all_10.js b/doc/html/search/all_10.js similarity index 100% rename from doxygen/html/search/all_10.js rename to doc/html/search/all_10.js diff --git a/doxygen/html/search/all_11.js b/doc/html/search/all_11.js similarity index 100% rename from doxygen/html/search/all_11.js rename to doc/html/search/all_11.js diff --git a/doxygen/html/search/all_12.js b/doc/html/search/all_12.js similarity index 100% rename from doxygen/html/search/all_12.js rename to doc/html/search/all_12.js diff --git a/doxygen/html/search/all_13.js b/doc/html/search/all_13.js similarity index 100% rename from doxygen/html/search/all_13.js rename to doc/html/search/all_13.js diff --git a/doxygen/html/search/all_14.js b/doc/html/search/all_14.js similarity index 100% rename from doxygen/html/search/all_14.js rename to doc/html/search/all_14.js diff --git a/doxygen/html/search/all_15.js b/doc/html/search/all_15.js similarity index 100% rename from doxygen/html/search/all_15.js rename to doc/html/search/all_15.js diff --git a/doxygen/html/search/all_16.js b/doc/html/search/all_16.js similarity index 100% rename from doxygen/html/search/all_16.js rename to doc/html/search/all_16.js diff --git a/doxygen/html/search/all_17.js b/doc/html/search/all_17.js similarity index 100% rename from doxygen/html/search/all_17.js rename to doc/html/search/all_17.js diff --git a/doxygen/html/search/all_18.js b/doc/html/search/all_18.js similarity index 100% rename from doxygen/html/search/all_18.js rename to doc/html/search/all_18.js diff --git a/doxygen/html/search/all_19.js b/doc/html/search/all_19.js similarity index 100% rename from doxygen/html/search/all_19.js rename to doc/html/search/all_19.js diff --git a/doxygen/html/search/all_1a.js b/doc/html/search/all_1a.js similarity index 100% rename from doxygen/html/search/all_1a.js rename to doc/html/search/all_1a.js diff --git a/doxygen/html/search/all_1b.js b/doc/html/search/all_1b.js similarity index 100% rename from doxygen/html/search/all_1b.js rename to doc/html/search/all_1b.js diff --git a/doxygen/html/search/all_2.js b/doc/html/search/all_2.js similarity index 100% rename from doxygen/html/search/all_2.js rename to doc/html/search/all_2.js diff --git a/doxygen/html/search/all_3.js b/doc/html/search/all_3.js similarity index 100% rename from doxygen/html/search/all_3.js rename to doc/html/search/all_3.js diff --git a/doxygen/html/search/all_4.js b/doc/html/search/all_4.js similarity index 100% rename from doxygen/html/search/all_4.js rename to doc/html/search/all_4.js diff --git a/doxygen/html/search/all_5.js b/doc/html/search/all_5.js similarity index 100% rename from doxygen/html/search/all_5.js rename to doc/html/search/all_5.js diff --git a/doxygen/html/search/all_6.js b/doc/html/search/all_6.js similarity index 100% rename from doxygen/html/search/all_6.js rename to doc/html/search/all_6.js diff --git a/doxygen/html/search/all_7.js b/doc/html/search/all_7.js similarity index 100% rename from doxygen/html/search/all_7.js rename to doc/html/search/all_7.js diff --git a/doxygen/html/search/all_8.js b/doc/html/search/all_8.js similarity index 100% rename from doxygen/html/search/all_8.js rename to doc/html/search/all_8.js diff --git a/doxygen/html/search/all_9.js b/doc/html/search/all_9.js similarity index 100% rename from doxygen/html/search/all_9.js rename to doc/html/search/all_9.js diff --git a/doxygen/html/search/all_a.js b/doc/html/search/all_a.js similarity index 100% rename from doxygen/html/search/all_a.js rename to doc/html/search/all_a.js diff --git a/doxygen/html/search/all_b.js b/doc/html/search/all_b.js similarity index 100% rename from doxygen/html/search/all_b.js rename to doc/html/search/all_b.js diff --git a/doxygen/html/search/all_c.js b/doc/html/search/all_c.js similarity index 100% rename from doxygen/html/search/all_c.js rename to doc/html/search/all_c.js diff --git a/doxygen/html/search/all_d.js b/doc/html/search/all_d.js similarity index 100% rename from doxygen/html/search/all_d.js rename to doc/html/search/all_d.js diff --git a/doxygen/html/search/all_e.js b/doc/html/search/all_e.js similarity index 100% rename from doxygen/html/search/all_e.js rename to doc/html/search/all_e.js diff --git a/doxygen/html/search/all_f.js b/doc/html/search/all_f.js similarity index 100% rename from doxygen/html/search/all_f.js rename to doc/html/search/all_f.js diff --git a/doxygen/html/search/classes_0.js b/doc/html/search/classes_0.js similarity index 100% rename from doxygen/html/search/classes_0.js rename to doc/html/search/classes_0.js diff --git a/doxygen/html/search/classes_1.js b/doc/html/search/classes_1.js similarity index 100% rename from doxygen/html/search/classes_1.js rename to doc/html/search/classes_1.js diff --git a/doxygen/html/search/classes_2.js b/doc/html/search/classes_2.js similarity index 100% rename from doxygen/html/search/classes_2.js rename to doc/html/search/classes_2.js diff --git a/doxygen/html/search/classes_3.js b/doc/html/search/classes_3.js similarity index 100% rename from doxygen/html/search/classes_3.js rename to doc/html/search/classes_3.js diff --git a/doxygen/html/search/classes_4.js b/doc/html/search/classes_4.js similarity index 100% rename from doxygen/html/search/classes_4.js rename to doc/html/search/classes_4.js diff --git a/doxygen/html/search/classes_5.js b/doc/html/search/classes_5.js similarity index 100% rename from doxygen/html/search/classes_5.js rename to doc/html/search/classes_5.js diff --git a/doxygen/html/search/classes_6.js b/doc/html/search/classes_6.js similarity index 100% rename from doxygen/html/search/classes_6.js rename to doc/html/search/classes_6.js diff --git a/doxygen/html/search/classes_7.js b/doc/html/search/classes_7.js similarity index 100% rename from doxygen/html/search/classes_7.js rename to doc/html/search/classes_7.js diff --git a/doxygen/html/search/classes_8.js b/doc/html/search/classes_8.js similarity index 100% rename from doxygen/html/search/classes_8.js rename to doc/html/search/classes_8.js diff --git a/doxygen/html/search/classes_9.js b/doc/html/search/classes_9.js similarity index 100% rename from doxygen/html/search/classes_9.js rename to doc/html/search/classes_9.js diff --git a/doxygen/html/search/classes_a.js b/doc/html/search/classes_a.js similarity index 100% rename from doxygen/html/search/classes_a.js rename to doc/html/search/classes_a.js diff --git a/doxygen/html/search/classes_b.js b/doc/html/search/classes_b.js similarity index 100% rename from doxygen/html/search/classes_b.js rename to doc/html/search/classes_b.js diff --git a/doxygen/html/search/classes_c.js b/doc/html/search/classes_c.js similarity index 100% rename from doxygen/html/search/classes_c.js rename to doc/html/search/classes_c.js diff --git a/doxygen/html/search/classes_d.js b/doc/html/search/classes_d.js similarity index 100% rename from doxygen/html/search/classes_d.js rename to doc/html/search/classes_d.js diff --git a/doxygen/html/search/close.svg b/doc/html/search/close.svg similarity index 100% rename from doxygen/html/search/close.svg rename to doc/html/search/close.svg diff --git a/doxygen/html/search/defines_0.js b/doc/html/search/defines_0.js similarity index 100% rename from doxygen/html/search/defines_0.js rename to doc/html/search/defines_0.js diff --git a/doxygen/html/search/defines_1.js b/doc/html/search/defines_1.js similarity index 100% rename from doxygen/html/search/defines_1.js rename to doc/html/search/defines_1.js diff --git a/doxygen/html/search/defines_2.js b/doc/html/search/defines_2.js similarity index 100% rename from doxygen/html/search/defines_2.js rename to doc/html/search/defines_2.js diff --git a/doxygen/html/search/defines_3.js b/doc/html/search/defines_3.js similarity index 100% rename from doxygen/html/search/defines_3.js rename to doc/html/search/defines_3.js diff --git a/doxygen/html/search/defines_4.js b/doc/html/search/defines_4.js similarity index 100% rename from doxygen/html/search/defines_4.js rename to doc/html/search/defines_4.js diff --git a/doxygen/html/search/enums_0.js b/doc/html/search/enums_0.js similarity index 100% rename from doxygen/html/search/enums_0.js rename to doc/html/search/enums_0.js diff --git a/doxygen/html/search/enums_1.js b/doc/html/search/enums_1.js similarity index 100% rename from doxygen/html/search/enums_1.js rename to doc/html/search/enums_1.js diff --git a/doxygen/html/search/enumvalues_0.js b/doc/html/search/enumvalues_0.js similarity index 100% rename from doxygen/html/search/enumvalues_0.js rename to doc/html/search/enumvalues_0.js diff --git a/doxygen/html/search/enumvalues_1.js b/doc/html/search/enumvalues_1.js similarity index 100% rename from doxygen/html/search/enumvalues_1.js rename to doc/html/search/enumvalues_1.js diff --git a/doxygen/html/search/enumvalues_2.js b/doc/html/search/enumvalues_2.js similarity index 100% rename from doxygen/html/search/enumvalues_2.js rename to doc/html/search/enumvalues_2.js diff --git a/doxygen/html/search/enumvalues_3.js b/doc/html/search/enumvalues_3.js similarity index 100% rename from doxygen/html/search/enumvalues_3.js rename to doc/html/search/enumvalues_3.js diff --git a/doxygen/html/search/enumvalues_4.js b/doc/html/search/enumvalues_4.js similarity index 100% rename from doxygen/html/search/enumvalues_4.js rename to doc/html/search/enumvalues_4.js diff --git a/doxygen/html/search/enumvalues_5.js b/doc/html/search/enumvalues_5.js similarity index 100% rename from doxygen/html/search/enumvalues_5.js rename to doc/html/search/enumvalues_5.js diff --git a/doxygen/html/search/enumvalues_6.js b/doc/html/search/enumvalues_6.js similarity index 100% rename from doxygen/html/search/enumvalues_6.js rename to doc/html/search/enumvalues_6.js diff --git a/doxygen/html/search/enumvalues_7.js b/doc/html/search/enumvalues_7.js similarity index 100% rename from doxygen/html/search/enumvalues_7.js rename to doc/html/search/enumvalues_7.js diff --git a/doxygen/html/search/enumvalues_8.js b/doc/html/search/enumvalues_8.js similarity index 100% rename from doxygen/html/search/enumvalues_8.js rename to doc/html/search/enumvalues_8.js diff --git a/doxygen/html/search/files_0.js b/doc/html/search/files_0.js similarity index 100% rename from doxygen/html/search/files_0.js rename to doc/html/search/files_0.js diff --git a/doxygen/html/search/files_1.js b/doc/html/search/files_1.js similarity index 100% rename from doxygen/html/search/files_1.js rename to doc/html/search/files_1.js diff --git a/doxygen/html/search/files_2.js b/doc/html/search/files_2.js similarity index 100% rename from doxygen/html/search/files_2.js rename to doc/html/search/files_2.js diff --git a/doxygen/html/search/files_3.js b/doc/html/search/files_3.js similarity index 100% rename from doxygen/html/search/files_3.js rename to doc/html/search/files_3.js diff --git a/doxygen/html/search/files_4.js b/doc/html/search/files_4.js similarity index 100% rename from doxygen/html/search/files_4.js rename to doc/html/search/files_4.js diff --git a/doxygen/html/search/files_5.js b/doc/html/search/files_5.js similarity index 100% rename from doxygen/html/search/files_5.js rename to doc/html/search/files_5.js diff --git a/doxygen/html/search/files_6.js b/doc/html/search/files_6.js similarity index 100% rename from doxygen/html/search/files_6.js rename to doc/html/search/files_6.js diff --git a/doxygen/html/search/files_7.js b/doc/html/search/files_7.js similarity index 100% rename from doxygen/html/search/files_7.js rename to doc/html/search/files_7.js diff --git a/doxygen/html/search/files_8.js b/doc/html/search/files_8.js similarity index 100% rename from doxygen/html/search/files_8.js rename to doc/html/search/files_8.js diff --git a/doxygen/html/search/files_9.js b/doc/html/search/files_9.js similarity index 100% rename from doxygen/html/search/files_9.js rename to doc/html/search/files_9.js diff --git a/doxygen/html/search/files_a.js b/doc/html/search/files_a.js similarity index 100% rename from doxygen/html/search/files_a.js rename to doc/html/search/files_a.js diff --git a/doxygen/html/search/files_b.js b/doc/html/search/files_b.js similarity index 100% rename from doxygen/html/search/files_b.js rename to doc/html/search/files_b.js diff --git a/doxygen/html/search/functions_0.js b/doc/html/search/functions_0.js similarity index 100% rename from doxygen/html/search/functions_0.js rename to doc/html/search/functions_0.js diff --git a/doxygen/html/search/functions_1.js b/doc/html/search/functions_1.js similarity index 100% rename from doxygen/html/search/functions_1.js rename to doc/html/search/functions_1.js diff --git a/doxygen/html/search/functions_10.js b/doc/html/search/functions_10.js similarity index 100% rename from doxygen/html/search/functions_10.js rename to doc/html/search/functions_10.js diff --git a/doxygen/html/search/functions_11.js b/doc/html/search/functions_11.js similarity index 100% rename from doxygen/html/search/functions_11.js rename to doc/html/search/functions_11.js diff --git a/doxygen/html/search/functions_12.js b/doc/html/search/functions_12.js similarity index 100% rename from doxygen/html/search/functions_12.js rename to doc/html/search/functions_12.js diff --git a/doxygen/html/search/functions_13.js b/doc/html/search/functions_13.js similarity index 100% rename from doxygen/html/search/functions_13.js rename to doc/html/search/functions_13.js diff --git a/doxygen/html/search/functions_14.js b/doc/html/search/functions_14.js similarity index 100% rename from doxygen/html/search/functions_14.js rename to doc/html/search/functions_14.js diff --git a/doxygen/html/search/functions_15.js b/doc/html/search/functions_15.js similarity index 100% rename from doxygen/html/search/functions_15.js rename to doc/html/search/functions_15.js diff --git a/doxygen/html/search/functions_16.js b/doc/html/search/functions_16.js similarity index 100% rename from doxygen/html/search/functions_16.js rename to doc/html/search/functions_16.js diff --git a/doxygen/html/search/functions_17.js b/doc/html/search/functions_17.js similarity index 100% rename from doxygen/html/search/functions_17.js rename to doc/html/search/functions_17.js diff --git a/doxygen/html/search/functions_18.js b/doc/html/search/functions_18.js similarity index 100% rename from doxygen/html/search/functions_18.js rename to doc/html/search/functions_18.js diff --git a/doxygen/html/search/functions_2.js b/doc/html/search/functions_2.js similarity index 100% rename from doxygen/html/search/functions_2.js rename to doc/html/search/functions_2.js diff --git a/doxygen/html/search/functions_3.js b/doc/html/search/functions_3.js similarity index 100% rename from doxygen/html/search/functions_3.js rename to doc/html/search/functions_3.js diff --git a/doxygen/html/search/functions_4.js b/doc/html/search/functions_4.js similarity index 100% rename from doxygen/html/search/functions_4.js rename to doc/html/search/functions_4.js diff --git a/doxygen/html/search/functions_5.js b/doc/html/search/functions_5.js similarity index 100% rename from doxygen/html/search/functions_5.js rename to doc/html/search/functions_5.js diff --git a/doxygen/html/search/functions_6.js b/doc/html/search/functions_6.js similarity index 100% rename from doxygen/html/search/functions_6.js rename to doc/html/search/functions_6.js diff --git a/doxygen/html/search/functions_7.js b/doc/html/search/functions_7.js similarity index 100% rename from doxygen/html/search/functions_7.js rename to doc/html/search/functions_7.js diff --git a/doxygen/html/search/functions_8.js b/doc/html/search/functions_8.js similarity index 100% rename from doxygen/html/search/functions_8.js rename to doc/html/search/functions_8.js diff --git a/doxygen/html/search/functions_9.js b/doc/html/search/functions_9.js similarity index 100% rename from doxygen/html/search/functions_9.js rename to doc/html/search/functions_9.js diff --git a/doxygen/html/search/functions_a.js b/doc/html/search/functions_a.js similarity index 100% rename from doxygen/html/search/functions_a.js rename to doc/html/search/functions_a.js diff --git a/doxygen/html/search/functions_b.js b/doc/html/search/functions_b.js similarity index 100% rename from doxygen/html/search/functions_b.js rename to doc/html/search/functions_b.js diff --git a/doxygen/html/search/functions_c.js b/doc/html/search/functions_c.js similarity index 100% rename from doxygen/html/search/functions_c.js rename to doc/html/search/functions_c.js diff --git a/doxygen/html/search/functions_d.js b/doc/html/search/functions_d.js similarity index 100% rename from doxygen/html/search/functions_d.js rename to doc/html/search/functions_d.js diff --git a/doxygen/html/search/functions_e.js b/doc/html/search/functions_e.js similarity index 100% rename from doxygen/html/search/functions_e.js rename to doc/html/search/functions_e.js diff --git a/doxygen/html/search/functions_f.js b/doc/html/search/functions_f.js similarity index 100% rename from doxygen/html/search/functions_f.js rename to doc/html/search/functions_f.js diff --git a/doxygen/html/search/mag.svg b/doc/html/search/mag.svg similarity index 100% rename from doxygen/html/search/mag.svg rename to doc/html/search/mag.svg diff --git a/doxygen/html/search/mag_d.svg b/doc/html/search/mag_d.svg similarity index 100% rename from doxygen/html/search/mag_d.svg rename to doc/html/search/mag_d.svg diff --git a/doxygen/html/search/mag_sel.svg b/doc/html/search/mag_sel.svg similarity index 100% rename from doxygen/html/search/mag_sel.svg rename to doc/html/search/mag_sel.svg diff --git a/doxygen/html/search/mag_seld.svg b/doc/html/search/mag_seld.svg similarity index 100% rename from doxygen/html/search/mag_seld.svg rename to doc/html/search/mag_seld.svg diff --git a/doxygen/html/search/namespaces_0.js b/doc/html/search/namespaces_0.js similarity index 100% rename from doxygen/html/search/namespaces_0.js rename to doc/html/search/namespaces_0.js diff --git a/doxygen/html/search/namespaces_1.js b/doc/html/search/namespaces_1.js similarity index 100% rename from doxygen/html/search/namespaces_1.js rename to doc/html/search/namespaces_1.js diff --git a/doxygen/html/search/pages_0.js b/doc/html/search/pages_0.js similarity index 100% rename from doxygen/html/search/pages_0.js rename to doc/html/search/pages_0.js diff --git a/doxygen/html/search/related_0.js b/doc/html/search/related_0.js similarity index 100% rename from doxygen/html/search/related_0.js rename to doc/html/search/related_0.js diff --git a/doxygen/html/search/search.css b/doc/html/search/search.css similarity index 100% rename from doxygen/html/search/search.css rename to doc/html/search/search.css diff --git a/doxygen/html/search/search.js b/doc/html/search/search.js similarity index 100% rename from doxygen/html/search/search.js rename to doc/html/search/search.js diff --git a/doxygen/html/search/searchdata.js b/doc/html/search/searchdata.js similarity index 100% rename from doxygen/html/search/searchdata.js rename to doc/html/search/searchdata.js diff --git a/doxygen/html/search/typedefs_0.js b/doc/html/search/typedefs_0.js similarity index 100% rename from doxygen/html/search/typedefs_0.js rename to doc/html/search/typedefs_0.js diff --git a/doxygen/html/search/typedefs_1.js b/doc/html/search/typedefs_1.js similarity index 100% rename from doxygen/html/search/typedefs_1.js rename to doc/html/search/typedefs_1.js diff --git a/doxygen/html/search/typedefs_2.js b/doc/html/search/typedefs_2.js similarity index 100% rename from doxygen/html/search/typedefs_2.js rename to doc/html/search/typedefs_2.js diff --git a/doxygen/html/search/typedefs_3.js b/doc/html/search/typedefs_3.js similarity index 100% rename from doxygen/html/search/typedefs_3.js rename to doc/html/search/typedefs_3.js diff --git a/doxygen/html/search/typedefs_4.js b/doc/html/search/typedefs_4.js similarity index 100% rename from doxygen/html/search/typedefs_4.js rename to doc/html/search/typedefs_4.js diff --git a/doxygen/html/search/variables_0.js b/doc/html/search/variables_0.js similarity index 100% rename from doxygen/html/search/variables_0.js rename to doc/html/search/variables_0.js diff --git a/doxygen/html/search/variables_1.js b/doc/html/search/variables_1.js similarity index 100% rename from doxygen/html/search/variables_1.js rename to doc/html/search/variables_1.js diff --git a/doxygen/html/search/variables_2.js b/doc/html/search/variables_2.js similarity index 100% rename from doxygen/html/search/variables_2.js rename to doc/html/search/variables_2.js diff --git a/doxygen/html/search/variables_3.js b/doc/html/search/variables_3.js similarity index 100% rename from doxygen/html/search/variables_3.js rename to doc/html/search/variables_3.js diff --git a/doxygen/html/search/variables_4.js b/doc/html/search/variables_4.js similarity index 100% rename from doxygen/html/search/variables_4.js rename to doc/html/search/variables_4.js diff --git a/doxygen/html/search/variables_5.js b/doc/html/search/variables_5.js similarity index 100% rename from doxygen/html/search/variables_5.js rename to doc/html/search/variables_5.js diff --git a/doxygen/html/search/variables_6.js b/doc/html/search/variables_6.js similarity index 100% rename from doxygen/html/search/variables_6.js rename to doc/html/search/variables_6.js diff --git a/doxygen/html/search/variables_7.js b/doc/html/search/variables_7.js similarity index 100% rename from doxygen/html/search/variables_7.js rename to doc/html/search/variables_7.js diff --git a/doxygen/html/search/variables_8.js b/doc/html/search/variables_8.js similarity index 100% rename from doxygen/html/search/variables_8.js rename to doc/html/search/variables_8.js diff --git a/doxygen/html/search/variables_9.js b/doc/html/search/variables_9.js similarity index 100% rename from doxygen/html/search/variables_9.js rename to doc/html/search/variables_9.js diff --git a/doxygen/html/search/variables_a.js b/doc/html/search/variables_a.js similarity index 100% rename from doxygen/html/search/variables_a.js rename to doc/html/search/variables_a.js diff --git a/doxygen/html/search/variables_b.js b/doc/html/search/variables_b.js similarity index 100% rename from doxygen/html/search/variables_b.js rename to doc/html/search/variables_b.js diff --git a/doxygen/html/search/variables_c.js b/doc/html/search/variables_c.js similarity index 100% rename from doxygen/html/search/variables_c.js rename to doc/html/search/variables_c.js diff --git a/doxygen/html/search/variables_d.js b/doc/html/search/variables_d.js similarity index 100% rename from doxygen/html/search/variables_d.js rename to doc/html/search/variables_d.js diff --git a/doxygen/html/search/variables_e.js b/doc/html/search/variables_e.js similarity index 100% rename from doxygen/html/search/variables_e.js rename to doc/html/search/variables_e.js diff --git a/doxygen/html/search/variables_f.js b/doc/html/search/variables_f.js similarity index 100% rename from doxygen/html/search/variables_f.js rename to doc/html/search/variables_f.js diff --git a/doxygen/html/sensors_8h.html b/doc/html/sensors_8h.html similarity index 100% rename from doxygen/html/sensors_8h.html rename to doc/html/sensors_8h.html diff --git a/doxygen/html/sensors_8h_source.html b/doc/html/sensors_8h_source.html similarity index 100% rename from doxygen/html/sensors_8h_source.html rename to doc/html/sensors_8h_source.html diff --git a/doxygen/html/splitbar.png b/doc/html/splitbar.png similarity index 100% rename from doxygen/html/splitbar.png rename to doc/html/splitbar.png diff --git a/doxygen/html/splitbard.png b/doc/html/splitbard.png similarity index 100% rename from doxygen/html/splitbard.png rename to doc/html/splitbard.png diff --git a/doxygen/html/struct_field_location-members.html b/doc/html/struct_field_location-members.html similarity index 100% rename from doxygen/html/struct_field_location-members.html rename to doc/html/struct_field_location-members.html diff --git a/doxygen/html/struct_field_location.html b/doc/html/struct_field_location.html similarity index 100% rename from doxygen/html/struct_field_location.html rename to doc/html/struct_field_location.html diff --git a/doxygen/html/struct_landmark_obs-members.html b/doc/html/struct_landmark_obs-members.html similarity index 100% rename from doxygen/html/struct_landmark_obs-members.html rename to doc/html/struct_landmark_obs-members.html diff --git a/doxygen/html/struct_landmark_obs.html b/doc/html/struct_landmark_obs.html similarity index 100% rename from doxygen/html/struct_landmark_obs.html rename to doc/html/struct_landmark_obs.html diff --git a/doxygen/html/struct_marker_observation-members.html b/doc/html/struct_marker_observation-members.html similarity index 100% rename from doxygen/html/struct_marker_observation-members.html rename to doc/html/struct_marker_observation-members.html diff --git a/doxygen/html/struct_marker_observation.html b/doc/html/struct_marker_observation.html similarity index 100% rename from doxygen/html/struct_marker_observation.html rename to doc/html/struct_marker_observation.html diff --git a/doxygen/html/struct_particle-members.html b/doc/html/struct_particle-members.html similarity index 100% rename from doxygen/html/struct_particle-members.html rename to doc/html/struct_particle-members.html diff --git a/doxygen/html/struct_particle.html b/doc/html/struct_particle.html similarity index 100% rename from doxygen/html/struct_particle.html rename to doc/html/struct_particle.html diff --git a/doxygen/html/struct_robot_state-members.html b/doc/html/struct_robot_state-members.html similarity index 100% rename from doxygen/html/struct_robot_state-members.html rename to doc/html/struct_robot_state-members.html diff --git a/doxygen/html/struct_robot_state.html b/doc/html/struct_robot_state.html similarity index 100% rename from doxygen/html/struct_robot_state.html rename to doc/html/struct_robot_state.html diff --git a/doxygen/html/struct_tag_map_1_1single__landmark__s-members.html b/doc/html/struct_tag_map_1_1single__landmark__s-members.html similarity index 100% rename from doxygen/html/struct_tag_map_1_1single__landmark__s-members.html rename to doc/html/struct_tag_map_1_1single__landmark__s-members.html diff --git a/doxygen/html/struct_tag_map_1_1single__landmark__s.html b/doc/html/struct_tag_map_1_1single__landmark__s.html similarity index 100% rename from doxygen/html/struct_tag_map_1_1single__landmark__s.html rename to doc/html/struct_tag_map_1_1single__landmark__s.html diff --git a/doxygen/html/struct_twist-members.html b/doc/html/struct_twist-members.html similarity index 100% rename from doxygen/html/struct_twist-members.html rename to doc/html/struct_twist-members.html diff --git a/doxygen/html/struct_twist.html b/doc/html/struct_twist.html similarity index 100% rename from doxygen/html/struct_twist.html rename to doc/html/struct_twist.html diff --git a/doxygen/html/struct_twist_1_1_angular_vel-members.html b/doc/html/struct_twist_1_1_angular_vel-members.html similarity index 100% rename from doxygen/html/struct_twist_1_1_angular_vel-members.html rename to doc/html/struct_twist_1_1_angular_vel-members.html diff --git a/doxygen/html/struct_twist_1_1_angular_vel.html b/doc/html/struct_twist_1_1_angular_vel.html similarity index 100% rename from doxygen/html/struct_twist_1_1_angular_vel.html rename to doc/html/struct_twist_1_1_angular_vel.html diff --git a/doxygen/html/struct_twist_1_1_linear_vel-members.html b/doc/html/struct_twist_1_1_linear_vel-members.html similarity index 100% rename from doxygen/html/struct_twist_1_1_linear_vel-members.html rename to doc/html/struct_twist_1_1_linear_vel-members.html diff --git a/doxygen/html/struct_twist_1_1_linear_vel.html b/doc/html/struct_twist_1_1_linear_vel.html similarity index 100% rename from doxygen/html/struct_twist_1_1_linear_vel.html rename to doc/html/struct_twist_1_1_linear_vel.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html b/doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png b/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png rename to doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html b/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html diff --git a/doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html b/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html similarity index 100% rename from doxygen/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html rename to doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html diff --git a/doxygen/html/sync_off.png b/doc/html/sync_off.png similarity index 100% rename from doxygen/html/sync_off.png rename to doc/html/sync_off.png diff --git a/doxygen/html/sync_on.png b/doc/html/sync_on.png similarity index 100% rename from doxygen/html/sync_on.png rename to doc/html/sync_on.png diff --git a/doxygen/html/tab_a.png b/doc/html/tab_a.png similarity index 100% rename from doxygen/html/tab_a.png rename to doc/html/tab_a.png diff --git a/doxygen/html/tab_ad.png b/doc/html/tab_ad.png similarity index 100% rename from doxygen/html/tab_ad.png rename to doc/html/tab_ad.png diff --git a/doxygen/html/tab_b.png b/doc/html/tab_b.png similarity index 100% rename from doxygen/html/tab_b.png rename to doc/html/tab_b.png diff --git a/doxygen/html/tab_bd.png b/doc/html/tab_bd.png similarity index 100% rename from doxygen/html/tab_bd.png rename to doc/html/tab_bd.png diff --git a/doxygen/html/tab_h.png b/doc/html/tab_h.png similarity index 100% rename from doxygen/html/tab_h.png rename to doc/html/tab_h.png diff --git a/doxygen/html/tab_hd.png b/doc/html/tab_hd.png similarity index 100% rename from doxygen/html/tab_hd.png rename to doc/html/tab_hd.png diff --git a/doxygen/html/tab_s.png b/doc/html/tab_s.png similarity index 100% rename from doxygen/html/tab_s.png rename to doc/html/tab_s.png diff --git a/doxygen/html/tab_sd.png b/doc/html/tab_sd.png similarity index 100% rename from doxygen/html/tab_sd.png rename to doc/html/tab_sd.png diff --git a/doxygen/html/tabs.css b/doc/html/tabs.css similarity index 100% rename from doxygen/html/tabs.css rename to doc/html/tabs.css From 8e5b04d1722e0ce006ff1bef24f3ca8c189fc108 Mon Sep 17 00:00:00 2001 From: redwan Date: Thu, 19 Jan 2023 12:42:41 -0600 Subject: [PATCH 02/15] doxygen folder modified --- Doxyfile | 2 +- {doc => docs}/html/_apriltag_landmarks_8cpp.html | 0 .../html/_apriltag_landmarks_8cpp_source.html | 0 {doc => docs}/html/_apriltag_landmarks_8h.html | 0 .../html/_apriltag_landmarks_8h_source.html | 0 {doc => docs}/html/_complementary_filter_8h.html | 0 .../html/_complementary_filter_8h_source.html | 0 {doc => docs}/html/_control_viz_8cpp.html | 0 {doc => docs}/html/_control_viz_8cpp_source.html | 0 {doc => docs}/html/_control_viz_8h.html | 0 {doc => docs}/html/_control_viz_8h_source.html | 0 {doc => docs}/html/_controller_base_8cpp.html | 0 .../html/_controller_base_8cpp_source.html | 0 {doc => docs}/html/_controller_base_8h.html | 0 {doc => docs}/html/_controller_base_8h_source.html | 0 {doc => docs}/html/_dummy_state_8cpp.html | 0 {doc => docs}/html/_dummy_state_8cpp_source.html | 0 {doc => docs}/html/_dummy_state_8h.html | 0 {doc => docs}/html/_dummy_state_8h_source.html | 0 .../html/_extended_kalman_filter_8cpp.html | 0 .../html/_extended_kalman_filter_8cpp_source.html | 0 {doc => docs}/html/_extended_kalman_filter_8h.html | 0 .../html/_extended_kalman_filter_8h_source.html | 0 {doc => docs}/html/_filter_base_8h.html | 0 {doc => docs}/html/_filter_base_8h_source.html | 0 {doc => docs}/html/_l_q_r_8cpp.html | 0 {doc => docs}/html/_l_q_r_8cpp_source.html | 0 {doc => docs}/html/_l_q_r_8h.html | 0 {doc => docs}/html/_l_q_r_8h_source.html | 0 {doc => docs}/html/_logger_c_s_v_8h.html | 0 {doc => docs}/html/_logger_c_s_v_8h_source.html | 0 {doc => docs}/html/_p_i_d_8cpp.html | 0 {doc => docs}/html/_p_i_d_8cpp_source.html | 0 {doc => docs}/html/_p_i_d_8h.html | 0 {doc => docs}/html/_p_i_d_8h_source.html | 0 {doc => docs}/html/_quad_controller_p_i_d_8cpp.html | 0 .../html/_quad_controller_p_i_d_8cpp_source.html | 0 {doc => docs}/html/_quad_controller_p_i_d_8h.html | 0 .../html/_quad_controller_p_i_d_8h_source.html | 0 {doc => docs}/html/_r_e_a_d_m_e_8md.html | 0 {doc => docs}/html/_sensor_base_8h.html | 0 {doc => docs}/html/_sensor_base_8h_source.html | 0 {doc => docs}/html/_state_observer_8cpp.html | 0 {doc => docs}/html/_state_observer_8cpp_source.html | 0 {doc => docs}/html/_state_observer_8h.html | 0 {doc => docs}/html/_state_observer_8h_source.html | 0 {doc => docs}/html/annotated.html | 0 .../html/apriltag__complementary__pid_8cpp.html | 0 .../apriltag__complementary__pid_8cpp_source.html | 0 {doc => docs}/html/apriltag__ekf__pid_8cpp.html | 0 .../html/apriltag__ekf__pid_8cpp_source.html | 0 {doc => docs}/html/bc_s.png | Bin {doc => docs}/html/bc_sd.png | Bin {doc => docs}/html/bdwn.png | Bin .../html/class_apriltag_landmarks-members.html | 0 {doc => docs}/html/class_apriltag_landmarks.html | 0 {doc => docs}/html/class_apriltag_landmarks.png | Bin .../html/class_complementary_filter-members.html | 0 {doc => docs}/html/class_complementary_filter.html | 0 {doc => docs}/html/class_complementary_filter.png | Bin {doc => docs}/html/class_filter_base-members.html | 0 {doc => docs}/html/class_filter_base.html | 0 {doc => docs}/html/class_filter_base.png | Bin {doc => docs}/html/class_logger_c_s_v-members.html | 0 {doc => docs}/html/class_logger_c_s_v.html | 0 {doc => docs}/html/class_mvn-members.html | 0 {doc => docs}/html/class_mvn.html | 0 .../html/class_particle_filter-members.html | 0 {doc => docs}/html/class_particle_filter.html | 0 {doc => docs}/html/class_sensor_base-members.html | 0 {doc => docs}/html/class_sensor_base.html | 0 {doc => docs}/html/class_sensor_base.png | Bin {doc => docs}/html/class_state_space-members.html | 0 {doc => docs}/html/class_state_space.html | 0 {doc => docs}/html/class_tag_map-members.html | 0 {doc => docs}/html/class_tag_map.html | 0 .../html/classbebop2_1_1_control_viz-members.html | 0 {doc => docs}/html/classbebop2_1_1_control_viz.html | 0 .../classbebop2_1_1_controller_base-members.html | 0 .../html/classbebop2_1_1_controller_base.html | 0 .../html/classbebop2_1_1_controller_base.png | Bin .../html/classbebop2_1_1_dummy_state-members.html | 0 {doc => docs}/html/classbebop2_1_1_dummy_state.html | 0 {doc => docs}/html/classbebop2_1_1_dummy_state.png | Bin ...ssbebop2_1_1_extended_kalman_filter-members.html | 0 .../classbebop2_1_1_extended_kalman_filter.html | 0 .../html/classbebop2_1_1_extended_kalman_filter.png | Bin .../html/classbebop2_1_1_l_q_r-members.html | 0 {doc => docs}/html/classbebop2_1_1_l_q_r.html | 0 .../html/classbebop2_1_1_p_i_d-members.html | 0 {doc => docs}/html/classbebop2_1_1_p_i_d.html | 0 ...assbebop2_1_1_quad_controller_p_i_d-members.html | 0 .../html/classbebop2_1_1_quad_controller_p_i_d.html | 0 .../html/classbebop2_1_1_quad_controller_p_i_d.png | Bin .../classbebop2_1_1_state_observer-members.html | 0 .../html/classbebop2_1_1_state_observer.html | 0 {doc => docs}/html/classes.html | 0 .../html/classmatplotlibcpp_1_1_plot-members.html | 0 {doc => docs}/html/classmatplotlibcpp_1_1_plot.html | 0 {doc => docs}/html/closed.png | Bin {doc => docs}/html/control_2_l_q_r_2main_8cpp.html | 0 .../html/control_2_l_q_r_2main_8cpp_source.html | 0 .../html/dir_0b09c446dd7a9edef411ea7168ce1167.html | 0 .../html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html | 0 .../html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html | 0 .../html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html | 0 .../html/dir_594170da0cc2132ee3c8d450a92c2c42.html | 0 .../html/dir_68267d1309a1af8e8297ef4c3efbcdba.html | 0 .../html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html | 0 .../html/dir_7ca564011fad3714200192b544070e96.html | 0 .../html/dir_8b1a236cb4f9d64090168ce40b07b07e.html | 0 .../html/dir_8ecd737fac62fc67297553abfd7cdb81.html | 0 .../html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html | 0 .../html/dir_b664689b4d3943ff523c1250795bca04.html | 0 .../html/dir_c6e5477bcb651b159cfa63982954b7ae.html | 0 .../html/dir_cde68057bc18755c5a523db9c7548a97.html | 0 .../html/dir_d44c64559bbebec7f509842c48db8b23.html | 0 .../html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html | 0 .../html/dir_ddae31c66714fb086f3b96543d9a56f1.html | 0 {doc => docs}/html/doc.png | Bin {doc => docs}/html/docd.png | Bin {doc => docs}/html/doxygen.css | 0 {doc => docs}/html/doxygen.svg | 0 {doc => docs}/html/dummy__ekf__pid_8cpp.html | 0 {doc => docs}/html/dummy__ekf__pid_8cpp_source.html | 0 {doc => docs}/html/dynsections.js | 0 {doc => docs}/html/files.html | 0 {doc => docs}/html/filters_8h.html | 0 {doc => docs}/html/filters_8h_source.html | 0 {doc => docs}/html/folderclosed.png | Bin {doc => docs}/html/folderopen.png | Bin {doc => docs}/html/functions.html | 0 {doc => docs}/html/functions_b.html | 0 {doc => docs}/html/functions_c.html | 0 {doc => docs}/html/functions_d.html | 0 {doc => docs}/html/functions_e.html | 0 {doc => docs}/html/functions_enum.html | 0 {doc => docs}/html/functions_eval.html | 0 {doc => docs}/html/functions_f.html | 0 {doc => docs}/html/functions_func.html | 0 {doc => docs}/html/functions_g.html | 0 {doc => docs}/html/functions_i.html | 0 {doc => docs}/html/functions_j.html | 0 {doc => docs}/html/functions_k.html | 0 {doc => docs}/html/functions_l.html | 0 {doc => docs}/html/functions_m.html | 0 {doc => docs}/html/functions_o.html | 0 {doc => docs}/html/functions_p.html | 0 {doc => docs}/html/functions_q.html | 0 {doc => docs}/html/functions_r.html | 0 {doc => docs}/html/functions_rela.html | 0 {doc => docs}/html/functions_s.html | 0 {doc => docs}/html/functions_t.html | 0 {doc => docs}/html/functions_type.html | 0 {doc => docs}/html/functions_u.html | 0 {doc => docs}/html/functions_v.html | 0 {doc => docs}/html/functions_vars.html | 0 {doc => docs}/html/functions_w.html | 0 {doc => docs}/html/functions_x.html | 0 {doc => docs}/html/functions_y.html | 0 {doc => docs}/html/functions_z.html | 0 {doc => docs}/html/functions_~.html | 0 {doc => docs}/html/globals.html | 0 {doc => docs}/html/globals_defs.html | 0 {doc => docs}/html/globals_func.html | 0 {doc => docs}/html/globals_type.html | 0 {doc => docs}/html/helper_8h.html | 0 {doc => docs}/html/helper_8h_source.html | 0 {doc => docs}/html/hierarchy.html | 0 {doc => docs}/html/index.html | 0 {doc => docs}/html/jquery.js | 0 .../localization_2_filters_2ekf_2main_8cpp.html | 0 ...calization_2_filters_2ekf_2main_8cpp_source.html | 0 .../html/localization_2_filters_2pf_2main_8cpp.html | 0 ...ocalization_2_filters_2pf_2main_8cpp_source.html | 0 {doc => docs}/html/matplotlibcpp_8h.html | 0 {doc => docs}/html/matplotlibcpp_8h_source.html | 0 {doc => docs}/html/md__r_e_a_d_m_e.html | 0 {doc => docs}/html/menu.js | 0 {doc => docs}/html/menudata.js | 0 {doc => docs}/html/namespacebebop2.html | 0 {doc => docs}/html/namespacematplotlibcpp.html | 0 .../html/namespacematplotlibcpp_1_1detail.html | 0 {doc => docs}/html/namespacemembers.html | 0 {doc => docs}/html/namespacemembers_enum.html | 0 {doc => docs}/html/namespacemembers_eval.html | 0 {doc => docs}/html/namespacemembers_func.html | 0 {doc => docs}/html/namespacemembers_type.html | 0 {doc => docs}/html/namespacemembers_vars.html | 0 {doc => docs}/html/namespaces.html | 0 {doc => docs}/html/nav_f.png | Bin {doc => docs}/html/nav_fd.png | Bin {doc => docs}/html/nav_g.png | Bin {doc => docs}/html/nav_h.png | Bin {doc => docs}/html/nav_hd.png | Bin {doc => docs}/html/open.png | Bin {doc => docs}/html/pages.html | 0 {doc => docs}/html/particle__filter_8cpp.html | 0 .../html/particle__filter_8cpp_source.html | 0 {doc => docs}/html/particle__filter_8h.html | 0 {doc => docs}/html/particle__filter_8h_source.html | 0 {doc => docs}/html/robot__defs_8h.html | 0 {doc => docs}/html/robot__defs_8h_source.html | 0 {doc => docs}/html/search/all_0.js | 0 {doc => docs}/html/search/all_1.js | 0 {doc => docs}/html/search/all_10.js | 0 {doc => docs}/html/search/all_11.js | 0 {doc => docs}/html/search/all_12.js | 0 {doc => docs}/html/search/all_13.js | 0 {doc => docs}/html/search/all_14.js | 0 {doc => docs}/html/search/all_15.js | 0 {doc => docs}/html/search/all_16.js | 0 {doc => docs}/html/search/all_17.js | 0 {doc => docs}/html/search/all_18.js | 0 {doc => docs}/html/search/all_19.js | 0 {doc => docs}/html/search/all_1a.js | 0 {doc => docs}/html/search/all_1b.js | 0 {doc => docs}/html/search/all_2.js | 0 {doc => docs}/html/search/all_3.js | 0 {doc => docs}/html/search/all_4.js | 0 {doc => docs}/html/search/all_5.js | 0 {doc => docs}/html/search/all_6.js | 0 {doc => docs}/html/search/all_7.js | 0 {doc => docs}/html/search/all_8.js | 0 {doc => docs}/html/search/all_9.js | 0 {doc => docs}/html/search/all_a.js | 0 {doc => docs}/html/search/all_b.js | 0 {doc => docs}/html/search/all_c.js | 0 {doc => docs}/html/search/all_d.js | 0 {doc => docs}/html/search/all_e.js | 0 {doc => docs}/html/search/all_f.js | 0 {doc => docs}/html/search/classes_0.js | 0 {doc => docs}/html/search/classes_1.js | 0 {doc => docs}/html/search/classes_2.js | 0 {doc => docs}/html/search/classes_3.js | 0 {doc => docs}/html/search/classes_4.js | 0 {doc => docs}/html/search/classes_5.js | 0 {doc => docs}/html/search/classes_6.js | 0 {doc => docs}/html/search/classes_7.js | 0 {doc => docs}/html/search/classes_8.js | 0 {doc => docs}/html/search/classes_9.js | 0 {doc => docs}/html/search/classes_a.js | 0 {doc => docs}/html/search/classes_b.js | 0 {doc => docs}/html/search/classes_c.js | 0 {doc => docs}/html/search/classes_d.js | 0 {doc => docs}/html/search/close.svg | 0 {doc => docs}/html/search/defines_0.js | 0 {doc => docs}/html/search/defines_1.js | 0 {doc => docs}/html/search/defines_2.js | 0 {doc => docs}/html/search/defines_3.js | 0 {doc => docs}/html/search/defines_4.js | 0 {doc => docs}/html/search/enums_0.js | 0 {doc => docs}/html/search/enums_1.js | 0 {doc => docs}/html/search/enumvalues_0.js | 0 {doc => docs}/html/search/enumvalues_1.js | 0 {doc => docs}/html/search/enumvalues_2.js | 0 {doc => docs}/html/search/enumvalues_3.js | 0 {doc => docs}/html/search/enumvalues_4.js | 0 {doc => docs}/html/search/enumvalues_5.js | 0 {doc => docs}/html/search/enumvalues_6.js | 0 {doc => docs}/html/search/enumvalues_7.js | 0 {doc => docs}/html/search/enumvalues_8.js | 0 {doc => docs}/html/search/files_0.js | 0 {doc => docs}/html/search/files_1.js | 0 {doc => docs}/html/search/files_2.js | 0 {doc => docs}/html/search/files_3.js | 0 {doc => docs}/html/search/files_4.js | 0 {doc => docs}/html/search/files_5.js | 0 {doc => docs}/html/search/files_6.js | 0 {doc => docs}/html/search/files_7.js | 0 {doc => docs}/html/search/files_8.js | 0 {doc => docs}/html/search/files_9.js | 0 {doc => docs}/html/search/files_a.js | 0 {doc => docs}/html/search/files_b.js | 0 {doc => docs}/html/search/functions_0.js | 0 {doc => docs}/html/search/functions_1.js | 0 {doc => docs}/html/search/functions_10.js | 0 {doc => docs}/html/search/functions_11.js | 0 {doc => docs}/html/search/functions_12.js | 0 {doc => docs}/html/search/functions_13.js | 0 {doc => docs}/html/search/functions_14.js | 0 {doc => docs}/html/search/functions_15.js | 0 {doc => docs}/html/search/functions_16.js | 0 {doc => docs}/html/search/functions_17.js | 0 {doc => docs}/html/search/functions_18.js | 0 {doc => docs}/html/search/functions_2.js | 0 {doc => docs}/html/search/functions_3.js | 0 {doc => docs}/html/search/functions_4.js | 0 {doc => docs}/html/search/functions_5.js | 0 {doc => docs}/html/search/functions_6.js | 0 {doc => docs}/html/search/functions_7.js | 0 {doc => docs}/html/search/functions_8.js | 0 {doc => docs}/html/search/functions_9.js | 0 {doc => docs}/html/search/functions_a.js | 0 {doc => docs}/html/search/functions_b.js | 0 {doc => docs}/html/search/functions_c.js | 0 {doc => docs}/html/search/functions_d.js | 0 {doc => docs}/html/search/functions_e.js | 0 {doc => docs}/html/search/functions_f.js | 0 {doc => docs}/html/search/mag.svg | 0 {doc => docs}/html/search/mag_d.svg | 0 {doc => docs}/html/search/mag_sel.svg | 0 {doc => docs}/html/search/mag_seld.svg | 0 {doc => docs}/html/search/namespaces_0.js | 0 {doc => docs}/html/search/namespaces_1.js | 0 {doc => docs}/html/search/pages_0.js | 0 {doc => docs}/html/search/related_0.js | 0 {doc => docs}/html/search/search.css | 0 {doc => docs}/html/search/search.js | 0 {doc => docs}/html/search/searchdata.js | 0 {doc => docs}/html/search/typedefs_0.js | 0 {doc => docs}/html/search/typedefs_1.js | 0 {doc => docs}/html/search/typedefs_2.js | 0 {doc => docs}/html/search/typedefs_3.js | 0 {doc => docs}/html/search/typedefs_4.js | 0 {doc => docs}/html/search/variables_0.js | 0 {doc => docs}/html/search/variables_1.js | 0 {doc => docs}/html/search/variables_2.js | 0 {doc => docs}/html/search/variables_3.js | 0 {doc => docs}/html/search/variables_4.js | 0 {doc => docs}/html/search/variables_5.js | 0 {doc => docs}/html/search/variables_6.js | 0 {doc => docs}/html/search/variables_7.js | 0 {doc => docs}/html/search/variables_8.js | 0 {doc => docs}/html/search/variables_9.js | 0 {doc => docs}/html/search/variables_a.js | 0 {doc => docs}/html/search/variables_b.js | 0 {doc => docs}/html/search/variables_c.js | 0 {doc => docs}/html/search/variables_d.js | 0 {doc => docs}/html/search/variables_e.js | 0 {doc => docs}/html/search/variables_f.js | 0 {doc => docs}/html/sensors_8h.html | 0 {doc => docs}/html/sensors_8h_source.html | 0 {doc => docs}/html/splitbar.png | Bin {doc => docs}/html/splitbard.png | Bin .../html/struct_field_location-members.html | 0 {doc => docs}/html/struct_field_location.html | 0 {doc => docs}/html/struct_landmark_obs-members.html | 0 {doc => docs}/html/struct_landmark_obs.html | 0 .../html/struct_marker_observation-members.html | 0 {doc => docs}/html/struct_marker_observation.html | 0 {doc => docs}/html/struct_particle-members.html | 0 {doc => docs}/html/struct_particle.html | 0 {doc => docs}/html/struct_robot_state-members.html | 0 {doc => docs}/html/struct_robot_state.html | 0 ...ruct_tag_map_1_1single__landmark__s-members.html | 0 .../html/struct_tag_map_1_1single__landmark__s.html | 0 {doc => docs}/html/struct_twist-members.html | 0 {doc => docs}/html/struct_twist.html | 0 .../html/struct_twist_1_1_angular_vel-members.html | 0 .../html/struct_twist_1_1_angular_vel.html | 0 .../html/struct_twist_1_1_linear_vel-members.html | 0 {doc => docs}/html/struct_twist_1_1_linear_vel.html | 0 ...otlibcpp_1_1detail_1_1__interpreter-members.html | 0 ...uctmatplotlibcpp_1_1detail_1_1__interpreter.html | 0 ...lotlibcpp_1_1detail_1_1is__callable-members.html | 0 ...ructmatplotlibcpp_1_1detail_1_1is__callable.html | 0 ...tplotlibcpp_1_1detail_1_1is__callable__impl.html | 0 ...llable__impl_3_01false_00_01_t_01_4-members.html | 0 ..._1is__callable__impl_3_01false_00_01_t_01_4.html | 0 ...allable__impl_3_01true_00_01_t_01_4-members.html | 0 ...1_1is__callable__impl_3_01true_00_01_t_01_4.html | 0 ...lable__impl_3_01true_00_01_t_01_4_1_1_check.html | 0 ...l_3_01true_00_01_t_01_4_1_1_derived-members.html | 0 ...ble__impl_3_01true_00_01_t_01_4_1_1_derived.html | 0 ...able__impl_3_01true_00_01_t_01_4_1_1_derived.png | Bin ..._3_01true_00_01_t_01_4_1_1_fallback-members.html | 0 ...le__impl_3_01true_00_01_t_01_4_1_1_fallback.html | 0 ...ble__impl_3_01true_00_01_t_01_4_1_1_fallback.png | Bin ...structmatplotlibcpp_1_1detail_1_1plot__impl.html | 0 ...t__impl_3_01std_1_1false__type_01_4-members.html | 0 ...l_1_1plot__impl_3_01std_1_1false__type_01_4.html | 0 ...ot__impl_3_01std_1_1true__type_01_4-members.html | 0 ...il_1_1plot__impl_3_01std_1_1true__type_01_4.html | 0 ...bcpp_1_1detail_1_1select__npy__type-members.html | 0 ...atplotlibcpp_1_1detail_1_1select__npy__type.html | 0 ..._1_1select__npy__type_3_01bool_01_4-members.html | 0 ..._1detail_1_1select__npy__type_3_01bool_01_4.html | 0 ..._1select__npy__type_3_01double_01_4-members.html | 0 ...detail_1_1select__npy__type_3_01double_01_4.html | 0 ...1_1select__npy__type_3_01float_01_4-members.html | 0 ...1detail_1_1select__npy__type_3_01float_01_4.html | 0 ...select__npy__type_3_01int16__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01int16__t_01_4.html | 0 ...select__npy__type_3_01int32__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01int32__t_01_4.html | 0 ...select__npy__type_3_01int64__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01int64__t_01_4.html | 0 ...1select__npy__type_3_01int8__t_01_4-members.html | 0 ...etail_1_1select__npy__type_3_01int8__t_01_4.html | 0 ...elect__npy__type_3_01uint16__t_01_4-members.html | 0 ...ail_1_1select__npy__type_3_01uint16__t_01_4.html | 0 ...elect__npy__type_3_01uint32__t_01_4-members.html | 0 ...ail_1_1select__npy__type_3_01uint32__t_01_4.html | 0 ...elect__npy__type_3_01uint64__t_01_4-members.html | 0 ...ail_1_1select__npy__type_3_01uint64__t_01_4.html | 0 ...select__npy__type_3_01uint8__t_01_4-members.html | 0 ...tail_1_1select__npy__type_3_01uint8__t_01_4.html | 0 {doc => docs}/html/sync_off.png | Bin {doc => docs}/html/sync_on.png | Bin {doc => docs}/html/tab_a.png | Bin {doc => docs}/html/tab_ad.png | Bin {doc => docs}/html/tab_b.png | Bin {doc => docs}/html/tab_bd.png | Bin {doc => docs}/html/tab_h.png | Bin {doc => docs}/html/tab_hd.png | Bin {doc => docs}/html/tab_s.png | Bin {doc => docs}/html/tab_sd.png | Bin {doc => docs}/html/tabs.css | 0 409 files changed, 1 insertion(+), 1 deletion(-) rename {doc => docs}/html/_apriltag_landmarks_8cpp.html (100%) rename {doc => docs}/html/_apriltag_landmarks_8cpp_source.html (100%) rename {doc => docs}/html/_apriltag_landmarks_8h.html (100%) rename {doc => docs}/html/_apriltag_landmarks_8h_source.html (100%) rename {doc => docs}/html/_complementary_filter_8h.html (100%) rename {doc => docs}/html/_complementary_filter_8h_source.html (100%) rename {doc => docs}/html/_control_viz_8cpp.html (100%) rename {doc => docs}/html/_control_viz_8cpp_source.html (100%) rename {doc => docs}/html/_control_viz_8h.html (100%) rename {doc => docs}/html/_control_viz_8h_source.html (100%) rename {doc => docs}/html/_controller_base_8cpp.html (100%) rename {doc => docs}/html/_controller_base_8cpp_source.html (100%) rename {doc => docs}/html/_controller_base_8h.html (100%) rename {doc => docs}/html/_controller_base_8h_source.html (100%) rename {doc => docs}/html/_dummy_state_8cpp.html (100%) rename {doc => docs}/html/_dummy_state_8cpp_source.html (100%) rename {doc => docs}/html/_dummy_state_8h.html (100%) rename {doc => docs}/html/_dummy_state_8h_source.html (100%) rename {doc => docs}/html/_extended_kalman_filter_8cpp.html (100%) rename {doc => docs}/html/_extended_kalman_filter_8cpp_source.html (100%) rename {doc => docs}/html/_extended_kalman_filter_8h.html (100%) rename {doc => docs}/html/_extended_kalman_filter_8h_source.html (100%) rename {doc => docs}/html/_filter_base_8h.html (100%) rename {doc => docs}/html/_filter_base_8h_source.html (100%) rename {doc => docs}/html/_l_q_r_8cpp.html (100%) rename {doc => docs}/html/_l_q_r_8cpp_source.html (100%) rename {doc => docs}/html/_l_q_r_8h.html (100%) rename {doc => docs}/html/_l_q_r_8h_source.html (100%) rename {doc => docs}/html/_logger_c_s_v_8h.html (100%) rename {doc => docs}/html/_logger_c_s_v_8h_source.html (100%) rename {doc => docs}/html/_p_i_d_8cpp.html (100%) rename {doc => docs}/html/_p_i_d_8cpp_source.html (100%) rename {doc => docs}/html/_p_i_d_8h.html (100%) rename {doc => docs}/html/_p_i_d_8h_source.html (100%) rename {doc => docs}/html/_quad_controller_p_i_d_8cpp.html (100%) rename {doc => docs}/html/_quad_controller_p_i_d_8cpp_source.html (100%) rename {doc => docs}/html/_quad_controller_p_i_d_8h.html (100%) rename {doc => docs}/html/_quad_controller_p_i_d_8h_source.html (100%) rename {doc => docs}/html/_r_e_a_d_m_e_8md.html (100%) rename {doc => docs}/html/_sensor_base_8h.html (100%) rename {doc => docs}/html/_sensor_base_8h_source.html (100%) rename {doc => docs}/html/_state_observer_8cpp.html (100%) rename {doc => docs}/html/_state_observer_8cpp_source.html (100%) rename {doc => docs}/html/_state_observer_8h.html (100%) rename {doc => docs}/html/_state_observer_8h_source.html (100%) rename {doc => docs}/html/annotated.html (100%) rename {doc => docs}/html/apriltag__complementary__pid_8cpp.html (100%) rename {doc => docs}/html/apriltag__complementary__pid_8cpp_source.html (100%) rename {doc => docs}/html/apriltag__ekf__pid_8cpp.html (100%) rename {doc => docs}/html/apriltag__ekf__pid_8cpp_source.html (100%) rename {doc => docs}/html/bc_s.png (100%) rename {doc => docs}/html/bc_sd.png (100%) rename {doc => docs}/html/bdwn.png (100%) rename {doc => docs}/html/class_apriltag_landmarks-members.html (100%) rename {doc => docs}/html/class_apriltag_landmarks.html (100%) rename {doc => docs}/html/class_apriltag_landmarks.png (100%) rename {doc => docs}/html/class_complementary_filter-members.html (100%) rename {doc => docs}/html/class_complementary_filter.html (100%) rename {doc => docs}/html/class_complementary_filter.png (100%) rename {doc => docs}/html/class_filter_base-members.html (100%) rename {doc => docs}/html/class_filter_base.html (100%) rename {doc => docs}/html/class_filter_base.png (100%) rename {doc => docs}/html/class_logger_c_s_v-members.html (100%) rename {doc => docs}/html/class_logger_c_s_v.html (100%) rename {doc => docs}/html/class_mvn-members.html (100%) rename {doc => docs}/html/class_mvn.html (100%) rename {doc => docs}/html/class_particle_filter-members.html (100%) rename {doc => docs}/html/class_particle_filter.html (100%) rename {doc => docs}/html/class_sensor_base-members.html (100%) rename {doc => docs}/html/class_sensor_base.html (100%) rename {doc => docs}/html/class_sensor_base.png (100%) rename {doc => docs}/html/class_state_space-members.html (100%) rename {doc => docs}/html/class_state_space.html (100%) rename {doc => docs}/html/class_tag_map-members.html (100%) rename {doc => docs}/html/class_tag_map.html (100%) rename {doc => docs}/html/classbebop2_1_1_control_viz-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_control_viz.html (100%) rename {doc => docs}/html/classbebop2_1_1_controller_base-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_controller_base.html (100%) rename {doc => docs}/html/classbebop2_1_1_controller_base.png (100%) rename {doc => docs}/html/classbebop2_1_1_dummy_state-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_dummy_state.html (100%) rename {doc => docs}/html/classbebop2_1_1_dummy_state.png (100%) rename {doc => docs}/html/classbebop2_1_1_extended_kalman_filter-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_extended_kalman_filter.html (100%) rename {doc => docs}/html/classbebop2_1_1_extended_kalman_filter.png (100%) rename {doc => docs}/html/classbebop2_1_1_l_q_r-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_l_q_r.html (100%) rename {doc => docs}/html/classbebop2_1_1_p_i_d-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_p_i_d.html (100%) rename {doc => docs}/html/classbebop2_1_1_quad_controller_p_i_d-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_quad_controller_p_i_d.html (100%) rename {doc => docs}/html/classbebop2_1_1_quad_controller_p_i_d.png (100%) rename {doc => docs}/html/classbebop2_1_1_state_observer-members.html (100%) rename {doc => docs}/html/classbebop2_1_1_state_observer.html (100%) rename {doc => docs}/html/classes.html (100%) rename {doc => docs}/html/classmatplotlibcpp_1_1_plot-members.html (100%) rename {doc => docs}/html/classmatplotlibcpp_1_1_plot.html (100%) rename {doc => docs}/html/closed.png (100%) rename {doc => docs}/html/control_2_l_q_r_2main_8cpp.html (100%) rename {doc => docs}/html/control_2_l_q_r_2main_8cpp_source.html (100%) rename {doc => docs}/html/dir_0b09c446dd7a9edef411ea7168ce1167.html (100%) rename {doc => docs}/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html (100%) rename {doc => docs}/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html (100%) rename {doc => docs}/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html (100%) rename {doc => docs}/html/dir_594170da0cc2132ee3c8d450a92c2c42.html (100%) rename {doc => docs}/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html (100%) rename {doc => docs}/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html (100%) rename {doc => docs}/html/dir_7ca564011fad3714200192b544070e96.html (100%) rename {doc => docs}/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html (100%) rename {doc => docs}/html/dir_8ecd737fac62fc67297553abfd7cdb81.html (100%) rename {doc => docs}/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html (100%) rename {doc => docs}/html/dir_b664689b4d3943ff523c1250795bca04.html (100%) rename {doc => docs}/html/dir_c6e5477bcb651b159cfa63982954b7ae.html (100%) rename {doc => docs}/html/dir_cde68057bc18755c5a523db9c7548a97.html (100%) rename {doc => docs}/html/dir_d44c64559bbebec7f509842c48db8b23.html (100%) rename {doc => docs}/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html (100%) rename {doc => docs}/html/dir_ddae31c66714fb086f3b96543d9a56f1.html (100%) rename {doc => docs}/html/doc.png (100%) rename {doc => docs}/html/docd.png (100%) rename {doc => docs}/html/doxygen.css (100%) rename {doc => docs}/html/doxygen.svg (100%) rename {doc => docs}/html/dummy__ekf__pid_8cpp.html (100%) rename {doc => docs}/html/dummy__ekf__pid_8cpp_source.html (100%) rename {doc => docs}/html/dynsections.js (100%) rename {doc => docs}/html/files.html (100%) rename {doc => docs}/html/filters_8h.html (100%) rename {doc => docs}/html/filters_8h_source.html (100%) rename {doc => docs}/html/folderclosed.png (100%) rename {doc => docs}/html/folderopen.png (100%) rename {doc => docs}/html/functions.html (100%) rename {doc => docs}/html/functions_b.html (100%) rename {doc => docs}/html/functions_c.html (100%) rename {doc => docs}/html/functions_d.html (100%) rename {doc => docs}/html/functions_e.html (100%) rename {doc => docs}/html/functions_enum.html (100%) rename {doc => docs}/html/functions_eval.html (100%) rename {doc => docs}/html/functions_f.html (100%) rename {doc => docs}/html/functions_func.html (100%) rename {doc => docs}/html/functions_g.html (100%) rename {doc => docs}/html/functions_i.html (100%) rename {doc => docs}/html/functions_j.html (100%) rename {doc => docs}/html/functions_k.html (100%) rename {doc => docs}/html/functions_l.html (100%) rename {doc => docs}/html/functions_m.html (100%) rename {doc => docs}/html/functions_o.html (100%) rename {doc => docs}/html/functions_p.html (100%) rename {doc => docs}/html/functions_q.html (100%) rename {doc => docs}/html/functions_r.html (100%) rename {doc => docs}/html/functions_rela.html (100%) rename {doc => docs}/html/functions_s.html (100%) rename {doc => docs}/html/functions_t.html (100%) rename {doc => docs}/html/functions_type.html (100%) rename {doc => docs}/html/functions_u.html (100%) rename {doc => docs}/html/functions_v.html (100%) rename {doc => docs}/html/functions_vars.html (100%) rename {doc => docs}/html/functions_w.html (100%) rename {doc => docs}/html/functions_x.html (100%) rename {doc => docs}/html/functions_y.html (100%) rename {doc => docs}/html/functions_z.html (100%) rename {doc => docs}/html/functions_~.html (100%) rename {doc => docs}/html/globals.html (100%) rename {doc => docs}/html/globals_defs.html (100%) rename {doc => docs}/html/globals_func.html (100%) rename {doc => docs}/html/globals_type.html (100%) rename {doc => docs}/html/helper_8h.html (100%) rename {doc => docs}/html/helper_8h_source.html (100%) rename {doc => docs}/html/hierarchy.html (100%) rename {doc => docs}/html/index.html (100%) rename {doc => docs}/html/jquery.js (100%) rename {doc => docs}/html/localization_2_filters_2ekf_2main_8cpp.html (100%) rename {doc => docs}/html/localization_2_filters_2ekf_2main_8cpp_source.html (100%) rename {doc => docs}/html/localization_2_filters_2pf_2main_8cpp.html (100%) rename {doc => docs}/html/localization_2_filters_2pf_2main_8cpp_source.html (100%) rename {doc => docs}/html/matplotlibcpp_8h.html (100%) rename {doc => docs}/html/matplotlibcpp_8h_source.html (100%) rename {doc => docs}/html/md__r_e_a_d_m_e.html (100%) rename {doc => docs}/html/menu.js (100%) rename {doc => docs}/html/menudata.js (100%) rename {doc => docs}/html/namespacebebop2.html (100%) rename {doc => docs}/html/namespacematplotlibcpp.html (100%) rename {doc => docs}/html/namespacematplotlibcpp_1_1detail.html (100%) rename {doc => docs}/html/namespacemembers.html (100%) rename {doc => docs}/html/namespacemembers_enum.html (100%) rename {doc => docs}/html/namespacemembers_eval.html (100%) rename {doc => docs}/html/namespacemembers_func.html (100%) rename {doc => docs}/html/namespacemembers_type.html (100%) rename {doc => docs}/html/namespacemembers_vars.html (100%) rename {doc => docs}/html/namespaces.html (100%) rename {doc => docs}/html/nav_f.png (100%) rename {doc => docs}/html/nav_fd.png (100%) rename {doc => docs}/html/nav_g.png (100%) rename {doc => docs}/html/nav_h.png (100%) rename {doc => docs}/html/nav_hd.png (100%) rename {doc => docs}/html/open.png (100%) rename {doc => docs}/html/pages.html (100%) rename {doc => docs}/html/particle__filter_8cpp.html (100%) rename {doc => docs}/html/particle__filter_8cpp_source.html (100%) rename {doc => docs}/html/particle__filter_8h.html (100%) rename {doc => docs}/html/particle__filter_8h_source.html (100%) rename {doc => docs}/html/robot__defs_8h.html (100%) rename {doc => docs}/html/robot__defs_8h_source.html (100%) rename {doc => docs}/html/search/all_0.js (100%) rename {doc => docs}/html/search/all_1.js (100%) rename {doc => docs}/html/search/all_10.js (100%) rename {doc => docs}/html/search/all_11.js (100%) rename {doc => docs}/html/search/all_12.js (100%) rename {doc => docs}/html/search/all_13.js (100%) rename {doc => docs}/html/search/all_14.js (100%) rename {doc => docs}/html/search/all_15.js (100%) rename {doc => docs}/html/search/all_16.js (100%) rename {doc => docs}/html/search/all_17.js (100%) rename {doc => docs}/html/search/all_18.js (100%) rename {doc => docs}/html/search/all_19.js (100%) rename {doc => docs}/html/search/all_1a.js (100%) rename {doc => docs}/html/search/all_1b.js (100%) rename {doc => docs}/html/search/all_2.js (100%) rename {doc => docs}/html/search/all_3.js (100%) rename {doc => docs}/html/search/all_4.js (100%) rename {doc => docs}/html/search/all_5.js (100%) rename {doc => docs}/html/search/all_6.js (100%) rename {doc => docs}/html/search/all_7.js (100%) rename {doc => docs}/html/search/all_8.js (100%) rename {doc => docs}/html/search/all_9.js (100%) rename {doc => docs}/html/search/all_a.js (100%) rename {doc => docs}/html/search/all_b.js (100%) rename {doc => docs}/html/search/all_c.js (100%) rename {doc => docs}/html/search/all_d.js (100%) rename {doc => docs}/html/search/all_e.js (100%) rename {doc => docs}/html/search/all_f.js (100%) rename {doc => docs}/html/search/classes_0.js (100%) rename {doc => docs}/html/search/classes_1.js (100%) rename {doc => docs}/html/search/classes_2.js (100%) rename {doc => docs}/html/search/classes_3.js (100%) rename {doc => docs}/html/search/classes_4.js (100%) rename {doc => docs}/html/search/classes_5.js (100%) rename {doc => docs}/html/search/classes_6.js (100%) rename {doc => docs}/html/search/classes_7.js (100%) rename {doc => docs}/html/search/classes_8.js (100%) rename {doc => docs}/html/search/classes_9.js (100%) rename {doc => docs}/html/search/classes_a.js (100%) rename {doc => docs}/html/search/classes_b.js (100%) rename {doc => docs}/html/search/classes_c.js (100%) rename {doc => docs}/html/search/classes_d.js (100%) rename {doc => docs}/html/search/close.svg (100%) rename {doc => docs}/html/search/defines_0.js (100%) rename {doc => docs}/html/search/defines_1.js (100%) rename {doc => docs}/html/search/defines_2.js (100%) rename {doc => docs}/html/search/defines_3.js (100%) rename {doc => docs}/html/search/defines_4.js (100%) rename {doc => docs}/html/search/enums_0.js (100%) rename {doc => docs}/html/search/enums_1.js (100%) rename {doc => docs}/html/search/enumvalues_0.js (100%) rename {doc => docs}/html/search/enumvalues_1.js (100%) rename {doc => docs}/html/search/enumvalues_2.js (100%) rename {doc => docs}/html/search/enumvalues_3.js (100%) rename {doc => docs}/html/search/enumvalues_4.js (100%) rename {doc => docs}/html/search/enumvalues_5.js (100%) rename {doc => docs}/html/search/enumvalues_6.js (100%) rename {doc => docs}/html/search/enumvalues_7.js (100%) rename {doc => docs}/html/search/enumvalues_8.js (100%) rename {doc => docs}/html/search/files_0.js (100%) rename {doc => docs}/html/search/files_1.js (100%) rename {doc => docs}/html/search/files_2.js (100%) rename {doc => docs}/html/search/files_3.js (100%) rename {doc => docs}/html/search/files_4.js (100%) rename {doc => docs}/html/search/files_5.js (100%) rename {doc => docs}/html/search/files_6.js (100%) rename {doc => docs}/html/search/files_7.js (100%) rename {doc => docs}/html/search/files_8.js (100%) rename {doc => docs}/html/search/files_9.js (100%) rename {doc => docs}/html/search/files_a.js (100%) rename {doc => docs}/html/search/files_b.js (100%) rename {doc => docs}/html/search/functions_0.js (100%) rename {doc => docs}/html/search/functions_1.js (100%) rename {doc => docs}/html/search/functions_10.js (100%) rename {doc => docs}/html/search/functions_11.js (100%) rename {doc => docs}/html/search/functions_12.js (100%) rename {doc => docs}/html/search/functions_13.js (100%) rename {doc => docs}/html/search/functions_14.js (100%) rename {doc => docs}/html/search/functions_15.js (100%) rename {doc => docs}/html/search/functions_16.js (100%) rename {doc => docs}/html/search/functions_17.js (100%) rename {doc => docs}/html/search/functions_18.js (100%) rename {doc => docs}/html/search/functions_2.js (100%) rename {doc => docs}/html/search/functions_3.js (100%) rename {doc => docs}/html/search/functions_4.js (100%) rename {doc => docs}/html/search/functions_5.js (100%) rename {doc => docs}/html/search/functions_6.js (100%) rename {doc => docs}/html/search/functions_7.js (100%) rename {doc => docs}/html/search/functions_8.js (100%) rename {doc => docs}/html/search/functions_9.js (100%) rename {doc => docs}/html/search/functions_a.js (100%) rename {doc => docs}/html/search/functions_b.js (100%) rename {doc => docs}/html/search/functions_c.js (100%) rename {doc => docs}/html/search/functions_d.js (100%) rename {doc => docs}/html/search/functions_e.js (100%) rename {doc => docs}/html/search/functions_f.js (100%) rename {doc => docs}/html/search/mag.svg (100%) rename {doc => docs}/html/search/mag_d.svg (100%) rename {doc => docs}/html/search/mag_sel.svg (100%) rename {doc => docs}/html/search/mag_seld.svg (100%) rename {doc => docs}/html/search/namespaces_0.js (100%) rename {doc => docs}/html/search/namespaces_1.js (100%) rename {doc => docs}/html/search/pages_0.js (100%) rename {doc => docs}/html/search/related_0.js (100%) rename {doc => docs}/html/search/search.css (100%) rename {doc => docs}/html/search/search.js (100%) rename {doc => docs}/html/search/searchdata.js (100%) rename {doc => docs}/html/search/typedefs_0.js (100%) rename {doc => docs}/html/search/typedefs_1.js (100%) rename {doc => docs}/html/search/typedefs_2.js (100%) rename {doc => docs}/html/search/typedefs_3.js (100%) rename {doc => docs}/html/search/typedefs_4.js (100%) rename {doc => docs}/html/search/variables_0.js (100%) rename {doc => docs}/html/search/variables_1.js (100%) rename {doc => docs}/html/search/variables_2.js (100%) rename {doc => docs}/html/search/variables_3.js (100%) rename {doc => docs}/html/search/variables_4.js (100%) rename {doc => docs}/html/search/variables_5.js (100%) rename {doc => docs}/html/search/variables_6.js (100%) rename {doc => docs}/html/search/variables_7.js (100%) rename {doc => docs}/html/search/variables_8.js (100%) rename {doc => docs}/html/search/variables_9.js (100%) rename {doc => docs}/html/search/variables_a.js (100%) rename {doc => docs}/html/search/variables_b.js (100%) rename {doc => docs}/html/search/variables_c.js (100%) rename {doc => docs}/html/search/variables_d.js (100%) rename {doc => docs}/html/search/variables_e.js (100%) rename {doc => docs}/html/search/variables_f.js (100%) rename {doc => docs}/html/sensors_8h.html (100%) rename {doc => docs}/html/sensors_8h_source.html (100%) rename {doc => docs}/html/splitbar.png (100%) rename {doc => docs}/html/splitbard.png (100%) rename {doc => docs}/html/struct_field_location-members.html (100%) rename {doc => docs}/html/struct_field_location.html (100%) rename {doc => docs}/html/struct_landmark_obs-members.html (100%) rename {doc => docs}/html/struct_landmark_obs.html (100%) rename {doc => docs}/html/struct_marker_observation-members.html (100%) rename {doc => docs}/html/struct_marker_observation.html (100%) rename {doc => docs}/html/struct_particle-members.html (100%) rename {doc => docs}/html/struct_particle.html (100%) rename {doc => docs}/html/struct_robot_state-members.html (100%) rename {doc => docs}/html/struct_robot_state.html (100%) rename {doc => docs}/html/struct_tag_map_1_1single__landmark__s-members.html (100%) rename {doc => docs}/html/struct_tag_map_1_1single__landmark__s.html (100%) rename {doc => docs}/html/struct_twist-members.html (100%) rename {doc => docs}/html/struct_twist.html (100%) rename {doc => docs}/html/struct_twist_1_1_angular_vel-members.html (100%) rename {doc => docs}/html/struct_twist_1_1_angular_vel.html (100%) rename {doc => docs}/html/struct_twist_1_1_linear_vel-members.html (100%) rename {doc => docs}/html/struct_twist_1_1_linear_vel.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html (100%) rename {doc => docs}/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html (100%) rename {doc => docs}/html/sync_off.png (100%) rename {doc => docs}/html/sync_on.png (100%) rename {doc => docs}/html/tab_a.png (100%) rename {doc => docs}/html/tab_ad.png (100%) rename {doc => docs}/html/tab_b.png (100%) rename {doc => docs}/html/tab_bd.png (100%) rename {doc => docs}/html/tab_h.png (100%) rename {doc => docs}/html/tab_hd.png (100%) rename {doc => docs}/html/tab_s.png (100%) rename {doc => docs}/html/tab_sd.png (100%) rename {doc => docs}/html/tabs.css (100%) diff --git a/Doxyfile b/Doxyfile index 09a1e29..23dde2a 100644 --- a/Doxyfile +++ b/Doxyfile @@ -68,7 +68,7 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = doc +OUTPUT_DIRECTORY = docs # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # sub-directories (in 2 levels) under the output directory of each output format diff --git a/doc/html/_apriltag_landmarks_8cpp.html b/docs/html/_apriltag_landmarks_8cpp.html similarity index 100% rename from doc/html/_apriltag_landmarks_8cpp.html rename to docs/html/_apriltag_landmarks_8cpp.html diff --git a/doc/html/_apriltag_landmarks_8cpp_source.html b/docs/html/_apriltag_landmarks_8cpp_source.html similarity index 100% rename from doc/html/_apriltag_landmarks_8cpp_source.html rename to docs/html/_apriltag_landmarks_8cpp_source.html diff --git a/doc/html/_apriltag_landmarks_8h.html b/docs/html/_apriltag_landmarks_8h.html similarity index 100% rename from doc/html/_apriltag_landmarks_8h.html rename to docs/html/_apriltag_landmarks_8h.html diff --git a/doc/html/_apriltag_landmarks_8h_source.html b/docs/html/_apriltag_landmarks_8h_source.html similarity index 100% rename from doc/html/_apriltag_landmarks_8h_source.html rename to docs/html/_apriltag_landmarks_8h_source.html diff --git a/doc/html/_complementary_filter_8h.html b/docs/html/_complementary_filter_8h.html similarity index 100% rename from doc/html/_complementary_filter_8h.html rename to docs/html/_complementary_filter_8h.html diff --git a/doc/html/_complementary_filter_8h_source.html b/docs/html/_complementary_filter_8h_source.html similarity index 100% rename from doc/html/_complementary_filter_8h_source.html rename to docs/html/_complementary_filter_8h_source.html diff --git a/doc/html/_control_viz_8cpp.html b/docs/html/_control_viz_8cpp.html similarity index 100% rename from doc/html/_control_viz_8cpp.html rename to docs/html/_control_viz_8cpp.html diff --git a/doc/html/_control_viz_8cpp_source.html b/docs/html/_control_viz_8cpp_source.html similarity index 100% rename from doc/html/_control_viz_8cpp_source.html rename to docs/html/_control_viz_8cpp_source.html diff --git a/doc/html/_control_viz_8h.html b/docs/html/_control_viz_8h.html similarity index 100% rename from doc/html/_control_viz_8h.html rename to docs/html/_control_viz_8h.html diff --git a/doc/html/_control_viz_8h_source.html b/docs/html/_control_viz_8h_source.html similarity index 100% rename from doc/html/_control_viz_8h_source.html rename to docs/html/_control_viz_8h_source.html diff --git a/doc/html/_controller_base_8cpp.html b/docs/html/_controller_base_8cpp.html similarity index 100% rename from doc/html/_controller_base_8cpp.html rename to docs/html/_controller_base_8cpp.html diff --git a/doc/html/_controller_base_8cpp_source.html b/docs/html/_controller_base_8cpp_source.html similarity index 100% rename from doc/html/_controller_base_8cpp_source.html rename to docs/html/_controller_base_8cpp_source.html diff --git a/doc/html/_controller_base_8h.html b/docs/html/_controller_base_8h.html similarity index 100% rename from doc/html/_controller_base_8h.html rename to docs/html/_controller_base_8h.html diff --git a/doc/html/_controller_base_8h_source.html b/docs/html/_controller_base_8h_source.html similarity index 100% rename from doc/html/_controller_base_8h_source.html rename to docs/html/_controller_base_8h_source.html diff --git a/doc/html/_dummy_state_8cpp.html b/docs/html/_dummy_state_8cpp.html similarity index 100% rename from doc/html/_dummy_state_8cpp.html rename to docs/html/_dummy_state_8cpp.html diff --git a/doc/html/_dummy_state_8cpp_source.html b/docs/html/_dummy_state_8cpp_source.html similarity index 100% rename from doc/html/_dummy_state_8cpp_source.html rename to docs/html/_dummy_state_8cpp_source.html diff --git a/doc/html/_dummy_state_8h.html b/docs/html/_dummy_state_8h.html similarity index 100% rename from doc/html/_dummy_state_8h.html rename to docs/html/_dummy_state_8h.html diff --git a/doc/html/_dummy_state_8h_source.html b/docs/html/_dummy_state_8h_source.html similarity index 100% rename from doc/html/_dummy_state_8h_source.html rename to docs/html/_dummy_state_8h_source.html diff --git a/doc/html/_extended_kalman_filter_8cpp.html b/docs/html/_extended_kalman_filter_8cpp.html similarity index 100% rename from doc/html/_extended_kalman_filter_8cpp.html rename to docs/html/_extended_kalman_filter_8cpp.html diff --git a/doc/html/_extended_kalman_filter_8cpp_source.html b/docs/html/_extended_kalman_filter_8cpp_source.html similarity index 100% rename from doc/html/_extended_kalman_filter_8cpp_source.html rename to docs/html/_extended_kalman_filter_8cpp_source.html diff --git a/doc/html/_extended_kalman_filter_8h.html b/docs/html/_extended_kalman_filter_8h.html similarity index 100% rename from doc/html/_extended_kalman_filter_8h.html rename to docs/html/_extended_kalman_filter_8h.html diff --git a/doc/html/_extended_kalman_filter_8h_source.html b/docs/html/_extended_kalman_filter_8h_source.html similarity index 100% rename from doc/html/_extended_kalman_filter_8h_source.html rename to docs/html/_extended_kalman_filter_8h_source.html diff --git a/doc/html/_filter_base_8h.html b/docs/html/_filter_base_8h.html similarity index 100% rename from doc/html/_filter_base_8h.html rename to docs/html/_filter_base_8h.html diff --git a/doc/html/_filter_base_8h_source.html b/docs/html/_filter_base_8h_source.html similarity index 100% rename from doc/html/_filter_base_8h_source.html rename to docs/html/_filter_base_8h_source.html diff --git a/doc/html/_l_q_r_8cpp.html b/docs/html/_l_q_r_8cpp.html similarity index 100% rename from doc/html/_l_q_r_8cpp.html rename to docs/html/_l_q_r_8cpp.html diff --git a/doc/html/_l_q_r_8cpp_source.html b/docs/html/_l_q_r_8cpp_source.html similarity index 100% rename from doc/html/_l_q_r_8cpp_source.html rename to docs/html/_l_q_r_8cpp_source.html diff --git a/doc/html/_l_q_r_8h.html b/docs/html/_l_q_r_8h.html similarity index 100% rename from doc/html/_l_q_r_8h.html rename to docs/html/_l_q_r_8h.html diff --git a/doc/html/_l_q_r_8h_source.html b/docs/html/_l_q_r_8h_source.html similarity index 100% rename from doc/html/_l_q_r_8h_source.html rename to docs/html/_l_q_r_8h_source.html diff --git a/doc/html/_logger_c_s_v_8h.html b/docs/html/_logger_c_s_v_8h.html similarity index 100% rename from doc/html/_logger_c_s_v_8h.html rename to docs/html/_logger_c_s_v_8h.html diff --git a/doc/html/_logger_c_s_v_8h_source.html b/docs/html/_logger_c_s_v_8h_source.html similarity index 100% rename from doc/html/_logger_c_s_v_8h_source.html rename to docs/html/_logger_c_s_v_8h_source.html diff --git a/doc/html/_p_i_d_8cpp.html b/docs/html/_p_i_d_8cpp.html similarity index 100% rename from doc/html/_p_i_d_8cpp.html rename to docs/html/_p_i_d_8cpp.html diff --git a/doc/html/_p_i_d_8cpp_source.html b/docs/html/_p_i_d_8cpp_source.html similarity index 100% rename from doc/html/_p_i_d_8cpp_source.html rename to docs/html/_p_i_d_8cpp_source.html diff --git a/doc/html/_p_i_d_8h.html b/docs/html/_p_i_d_8h.html similarity index 100% rename from doc/html/_p_i_d_8h.html rename to docs/html/_p_i_d_8h.html diff --git a/doc/html/_p_i_d_8h_source.html b/docs/html/_p_i_d_8h_source.html similarity index 100% rename from doc/html/_p_i_d_8h_source.html rename to docs/html/_p_i_d_8h_source.html diff --git a/doc/html/_quad_controller_p_i_d_8cpp.html b/docs/html/_quad_controller_p_i_d_8cpp.html similarity index 100% rename from doc/html/_quad_controller_p_i_d_8cpp.html rename to docs/html/_quad_controller_p_i_d_8cpp.html diff --git a/doc/html/_quad_controller_p_i_d_8cpp_source.html b/docs/html/_quad_controller_p_i_d_8cpp_source.html similarity index 100% rename from doc/html/_quad_controller_p_i_d_8cpp_source.html rename to docs/html/_quad_controller_p_i_d_8cpp_source.html diff --git a/doc/html/_quad_controller_p_i_d_8h.html b/docs/html/_quad_controller_p_i_d_8h.html similarity index 100% rename from doc/html/_quad_controller_p_i_d_8h.html rename to docs/html/_quad_controller_p_i_d_8h.html diff --git a/doc/html/_quad_controller_p_i_d_8h_source.html b/docs/html/_quad_controller_p_i_d_8h_source.html similarity index 100% rename from doc/html/_quad_controller_p_i_d_8h_source.html rename to docs/html/_quad_controller_p_i_d_8h_source.html diff --git a/doc/html/_r_e_a_d_m_e_8md.html b/docs/html/_r_e_a_d_m_e_8md.html similarity index 100% rename from doc/html/_r_e_a_d_m_e_8md.html rename to docs/html/_r_e_a_d_m_e_8md.html diff --git a/doc/html/_sensor_base_8h.html b/docs/html/_sensor_base_8h.html similarity index 100% rename from doc/html/_sensor_base_8h.html rename to docs/html/_sensor_base_8h.html diff --git a/doc/html/_sensor_base_8h_source.html b/docs/html/_sensor_base_8h_source.html similarity index 100% rename from doc/html/_sensor_base_8h_source.html rename to docs/html/_sensor_base_8h_source.html diff --git a/doc/html/_state_observer_8cpp.html b/docs/html/_state_observer_8cpp.html similarity index 100% rename from doc/html/_state_observer_8cpp.html rename to docs/html/_state_observer_8cpp.html diff --git a/doc/html/_state_observer_8cpp_source.html b/docs/html/_state_observer_8cpp_source.html similarity index 100% rename from doc/html/_state_observer_8cpp_source.html rename to docs/html/_state_observer_8cpp_source.html diff --git a/doc/html/_state_observer_8h.html b/docs/html/_state_observer_8h.html similarity index 100% rename from doc/html/_state_observer_8h.html rename to docs/html/_state_observer_8h.html diff --git a/doc/html/_state_observer_8h_source.html b/docs/html/_state_observer_8h_source.html similarity index 100% rename from doc/html/_state_observer_8h_source.html rename to docs/html/_state_observer_8h_source.html diff --git a/doc/html/annotated.html b/docs/html/annotated.html similarity index 100% rename from doc/html/annotated.html rename to docs/html/annotated.html diff --git a/doc/html/apriltag__complementary__pid_8cpp.html b/docs/html/apriltag__complementary__pid_8cpp.html similarity index 100% rename from doc/html/apriltag__complementary__pid_8cpp.html rename to docs/html/apriltag__complementary__pid_8cpp.html diff --git a/doc/html/apriltag__complementary__pid_8cpp_source.html b/docs/html/apriltag__complementary__pid_8cpp_source.html similarity index 100% rename from doc/html/apriltag__complementary__pid_8cpp_source.html rename to docs/html/apriltag__complementary__pid_8cpp_source.html diff --git a/doc/html/apriltag__ekf__pid_8cpp.html b/docs/html/apriltag__ekf__pid_8cpp.html similarity index 100% rename from doc/html/apriltag__ekf__pid_8cpp.html rename to docs/html/apriltag__ekf__pid_8cpp.html diff --git a/doc/html/apriltag__ekf__pid_8cpp_source.html b/docs/html/apriltag__ekf__pid_8cpp_source.html similarity index 100% rename from doc/html/apriltag__ekf__pid_8cpp_source.html rename to docs/html/apriltag__ekf__pid_8cpp_source.html diff --git a/doc/html/bc_s.png b/docs/html/bc_s.png similarity index 100% rename from doc/html/bc_s.png rename to docs/html/bc_s.png diff --git a/doc/html/bc_sd.png b/docs/html/bc_sd.png similarity index 100% rename from doc/html/bc_sd.png rename to docs/html/bc_sd.png diff --git a/doc/html/bdwn.png b/docs/html/bdwn.png similarity index 100% rename from doc/html/bdwn.png rename to docs/html/bdwn.png diff --git a/doc/html/class_apriltag_landmarks-members.html b/docs/html/class_apriltag_landmarks-members.html similarity index 100% rename from doc/html/class_apriltag_landmarks-members.html rename to docs/html/class_apriltag_landmarks-members.html diff --git a/doc/html/class_apriltag_landmarks.html b/docs/html/class_apriltag_landmarks.html similarity index 100% rename from doc/html/class_apriltag_landmarks.html rename to docs/html/class_apriltag_landmarks.html diff --git a/doc/html/class_apriltag_landmarks.png b/docs/html/class_apriltag_landmarks.png similarity index 100% rename from doc/html/class_apriltag_landmarks.png rename to docs/html/class_apriltag_landmarks.png diff --git a/doc/html/class_complementary_filter-members.html b/docs/html/class_complementary_filter-members.html similarity index 100% rename from doc/html/class_complementary_filter-members.html rename to docs/html/class_complementary_filter-members.html diff --git a/doc/html/class_complementary_filter.html b/docs/html/class_complementary_filter.html similarity index 100% rename from doc/html/class_complementary_filter.html rename to docs/html/class_complementary_filter.html diff --git a/doc/html/class_complementary_filter.png b/docs/html/class_complementary_filter.png similarity index 100% rename from doc/html/class_complementary_filter.png rename to docs/html/class_complementary_filter.png diff --git a/doc/html/class_filter_base-members.html b/docs/html/class_filter_base-members.html similarity index 100% rename from doc/html/class_filter_base-members.html rename to docs/html/class_filter_base-members.html diff --git a/doc/html/class_filter_base.html b/docs/html/class_filter_base.html similarity index 100% rename from doc/html/class_filter_base.html rename to docs/html/class_filter_base.html diff --git a/doc/html/class_filter_base.png b/docs/html/class_filter_base.png similarity index 100% rename from doc/html/class_filter_base.png rename to docs/html/class_filter_base.png diff --git a/doc/html/class_logger_c_s_v-members.html b/docs/html/class_logger_c_s_v-members.html similarity index 100% rename from doc/html/class_logger_c_s_v-members.html rename to docs/html/class_logger_c_s_v-members.html diff --git a/doc/html/class_logger_c_s_v.html b/docs/html/class_logger_c_s_v.html similarity index 100% rename from doc/html/class_logger_c_s_v.html rename to docs/html/class_logger_c_s_v.html diff --git a/doc/html/class_mvn-members.html b/docs/html/class_mvn-members.html similarity index 100% rename from doc/html/class_mvn-members.html rename to docs/html/class_mvn-members.html diff --git a/doc/html/class_mvn.html b/docs/html/class_mvn.html similarity index 100% rename from doc/html/class_mvn.html rename to docs/html/class_mvn.html diff --git a/doc/html/class_particle_filter-members.html b/docs/html/class_particle_filter-members.html similarity index 100% rename from doc/html/class_particle_filter-members.html rename to docs/html/class_particle_filter-members.html diff --git a/doc/html/class_particle_filter.html b/docs/html/class_particle_filter.html similarity index 100% rename from doc/html/class_particle_filter.html rename to docs/html/class_particle_filter.html diff --git a/doc/html/class_sensor_base-members.html b/docs/html/class_sensor_base-members.html similarity index 100% rename from doc/html/class_sensor_base-members.html rename to docs/html/class_sensor_base-members.html diff --git a/doc/html/class_sensor_base.html b/docs/html/class_sensor_base.html similarity index 100% rename from doc/html/class_sensor_base.html rename to docs/html/class_sensor_base.html diff --git a/doc/html/class_sensor_base.png b/docs/html/class_sensor_base.png similarity index 100% rename from doc/html/class_sensor_base.png rename to docs/html/class_sensor_base.png diff --git a/doc/html/class_state_space-members.html b/docs/html/class_state_space-members.html similarity index 100% rename from doc/html/class_state_space-members.html rename to docs/html/class_state_space-members.html diff --git a/doc/html/class_state_space.html b/docs/html/class_state_space.html similarity index 100% rename from doc/html/class_state_space.html rename to docs/html/class_state_space.html diff --git a/doc/html/class_tag_map-members.html b/docs/html/class_tag_map-members.html similarity index 100% rename from doc/html/class_tag_map-members.html rename to docs/html/class_tag_map-members.html diff --git a/doc/html/class_tag_map.html b/docs/html/class_tag_map.html similarity index 100% rename from doc/html/class_tag_map.html rename to docs/html/class_tag_map.html diff --git a/doc/html/classbebop2_1_1_control_viz-members.html b/docs/html/classbebop2_1_1_control_viz-members.html similarity index 100% rename from doc/html/classbebop2_1_1_control_viz-members.html rename to docs/html/classbebop2_1_1_control_viz-members.html diff --git a/doc/html/classbebop2_1_1_control_viz.html b/docs/html/classbebop2_1_1_control_viz.html similarity index 100% rename from doc/html/classbebop2_1_1_control_viz.html rename to docs/html/classbebop2_1_1_control_viz.html diff --git a/doc/html/classbebop2_1_1_controller_base-members.html b/docs/html/classbebop2_1_1_controller_base-members.html similarity index 100% rename from doc/html/classbebop2_1_1_controller_base-members.html rename to docs/html/classbebop2_1_1_controller_base-members.html diff --git a/doc/html/classbebop2_1_1_controller_base.html b/docs/html/classbebop2_1_1_controller_base.html similarity index 100% rename from doc/html/classbebop2_1_1_controller_base.html rename to docs/html/classbebop2_1_1_controller_base.html diff --git a/doc/html/classbebop2_1_1_controller_base.png b/docs/html/classbebop2_1_1_controller_base.png similarity index 100% rename from doc/html/classbebop2_1_1_controller_base.png rename to docs/html/classbebop2_1_1_controller_base.png diff --git a/doc/html/classbebop2_1_1_dummy_state-members.html b/docs/html/classbebop2_1_1_dummy_state-members.html similarity index 100% rename from doc/html/classbebop2_1_1_dummy_state-members.html rename to docs/html/classbebop2_1_1_dummy_state-members.html diff --git a/doc/html/classbebop2_1_1_dummy_state.html b/docs/html/classbebop2_1_1_dummy_state.html similarity index 100% rename from doc/html/classbebop2_1_1_dummy_state.html rename to docs/html/classbebop2_1_1_dummy_state.html diff --git a/doc/html/classbebop2_1_1_dummy_state.png b/docs/html/classbebop2_1_1_dummy_state.png similarity index 100% rename from doc/html/classbebop2_1_1_dummy_state.png rename to docs/html/classbebop2_1_1_dummy_state.png diff --git a/doc/html/classbebop2_1_1_extended_kalman_filter-members.html b/docs/html/classbebop2_1_1_extended_kalman_filter-members.html similarity index 100% rename from doc/html/classbebop2_1_1_extended_kalman_filter-members.html rename to docs/html/classbebop2_1_1_extended_kalman_filter-members.html diff --git a/doc/html/classbebop2_1_1_extended_kalman_filter.html b/docs/html/classbebop2_1_1_extended_kalman_filter.html similarity index 100% rename from doc/html/classbebop2_1_1_extended_kalman_filter.html rename to docs/html/classbebop2_1_1_extended_kalman_filter.html diff --git a/doc/html/classbebop2_1_1_extended_kalman_filter.png b/docs/html/classbebop2_1_1_extended_kalman_filter.png similarity index 100% rename from doc/html/classbebop2_1_1_extended_kalman_filter.png rename to docs/html/classbebop2_1_1_extended_kalman_filter.png diff --git a/doc/html/classbebop2_1_1_l_q_r-members.html b/docs/html/classbebop2_1_1_l_q_r-members.html similarity index 100% rename from doc/html/classbebop2_1_1_l_q_r-members.html rename to docs/html/classbebop2_1_1_l_q_r-members.html diff --git a/doc/html/classbebop2_1_1_l_q_r.html b/docs/html/classbebop2_1_1_l_q_r.html similarity index 100% rename from doc/html/classbebop2_1_1_l_q_r.html rename to docs/html/classbebop2_1_1_l_q_r.html diff --git a/doc/html/classbebop2_1_1_p_i_d-members.html b/docs/html/classbebop2_1_1_p_i_d-members.html similarity index 100% rename from doc/html/classbebop2_1_1_p_i_d-members.html rename to docs/html/classbebop2_1_1_p_i_d-members.html diff --git a/doc/html/classbebop2_1_1_p_i_d.html b/docs/html/classbebop2_1_1_p_i_d.html similarity index 100% rename from doc/html/classbebop2_1_1_p_i_d.html rename to docs/html/classbebop2_1_1_p_i_d.html diff --git a/doc/html/classbebop2_1_1_quad_controller_p_i_d-members.html b/docs/html/classbebop2_1_1_quad_controller_p_i_d-members.html similarity index 100% rename from doc/html/classbebop2_1_1_quad_controller_p_i_d-members.html rename to docs/html/classbebop2_1_1_quad_controller_p_i_d-members.html diff --git a/doc/html/classbebop2_1_1_quad_controller_p_i_d.html b/docs/html/classbebop2_1_1_quad_controller_p_i_d.html similarity index 100% rename from doc/html/classbebop2_1_1_quad_controller_p_i_d.html rename to docs/html/classbebop2_1_1_quad_controller_p_i_d.html diff --git a/doc/html/classbebop2_1_1_quad_controller_p_i_d.png b/docs/html/classbebop2_1_1_quad_controller_p_i_d.png similarity index 100% rename from doc/html/classbebop2_1_1_quad_controller_p_i_d.png rename to docs/html/classbebop2_1_1_quad_controller_p_i_d.png diff --git a/doc/html/classbebop2_1_1_state_observer-members.html b/docs/html/classbebop2_1_1_state_observer-members.html similarity index 100% rename from doc/html/classbebop2_1_1_state_observer-members.html rename to docs/html/classbebop2_1_1_state_observer-members.html diff --git a/doc/html/classbebop2_1_1_state_observer.html b/docs/html/classbebop2_1_1_state_observer.html similarity index 100% rename from doc/html/classbebop2_1_1_state_observer.html rename to docs/html/classbebop2_1_1_state_observer.html diff --git a/doc/html/classes.html b/docs/html/classes.html similarity index 100% rename from doc/html/classes.html rename to docs/html/classes.html diff --git a/doc/html/classmatplotlibcpp_1_1_plot-members.html b/docs/html/classmatplotlibcpp_1_1_plot-members.html similarity index 100% rename from doc/html/classmatplotlibcpp_1_1_plot-members.html rename to docs/html/classmatplotlibcpp_1_1_plot-members.html diff --git a/doc/html/classmatplotlibcpp_1_1_plot.html b/docs/html/classmatplotlibcpp_1_1_plot.html similarity index 100% rename from doc/html/classmatplotlibcpp_1_1_plot.html rename to docs/html/classmatplotlibcpp_1_1_plot.html diff --git a/doc/html/closed.png b/docs/html/closed.png similarity index 100% rename from doc/html/closed.png rename to docs/html/closed.png diff --git a/doc/html/control_2_l_q_r_2main_8cpp.html b/docs/html/control_2_l_q_r_2main_8cpp.html similarity index 100% rename from doc/html/control_2_l_q_r_2main_8cpp.html rename to docs/html/control_2_l_q_r_2main_8cpp.html diff --git a/doc/html/control_2_l_q_r_2main_8cpp_source.html b/docs/html/control_2_l_q_r_2main_8cpp_source.html similarity index 100% rename from doc/html/control_2_l_q_r_2main_8cpp_source.html rename to docs/html/control_2_l_q_r_2main_8cpp_source.html diff --git a/doc/html/dir_0b09c446dd7a9edef411ea7168ce1167.html b/docs/html/dir_0b09c446dd7a9edef411ea7168ce1167.html similarity index 100% rename from doc/html/dir_0b09c446dd7a9edef411ea7168ce1167.html rename to docs/html/dir_0b09c446dd7a9edef411ea7168ce1167.html diff --git a/doc/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html b/docs/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html similarity index 100% rename from doc/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html rename to docs/html/dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html diff --git a/doc/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html b/docs/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html similarity index 100% rename from doc/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html rename to docs/html/dir_2ea520229c6ada27f137f02e0c0cfbe6.html diff --git a/doc/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html b/docs/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html similarity index 100% rename from doc/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html rename to docs/html/dir_4c7c5b2da03ab83c5a6e02623cc1a970.html diff --git a/doc/html/dir_594170da0cc2132ee3c8d450a92c2c42.html b/docs/html/dir_594170da0cc2132ee3c8d450a92c2c42.html similarity index 100% rename from doc/html/dir_594170da0cc2132ee3c8d450a92c2c42.html rename to docs/html/dir_594170da0cc2132ee3c8d450a92c2c42.html diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html similarity index 100% rename from doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html rename to docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html diff --git a/doc/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html b/docs/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html similarity index 100% rename from doc/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html rename to docs/html/dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html diff --git a/doc/html/dir_7ca564011fad3714200192b544070e96.html b/docs/html/dir_7ca564011fad3714200192b544070e96.html similarity index 100% rename from doc/html/dir_7ca564011fad3714200192b544070e96.html rename to docs/html/dir_7ca564011fad3714200192b544070e96.html diff --git a/doc/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html b/docs/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html similarity index 100% rename from doc/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html rename to docs/html/dir_8b1a236cb4f9d64090168ce40b07b07e.html diff --git a/doc/html/dir_8ecd737fac62fc67297553abfd7cdb81.html b/docs/html/dir_8ecd737fac62fc67297553abfd7cdb81.html similarity index 100% rename from doc/html/dir_8ecd737fac62fc67297553abfd7cdb81.html rename to docs/html/dir_8ecd737fac62fc67297553abfd7cdb81.html diff --git a/doc/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html b/docs/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html similarity index 100% rename from doc/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html rename to docs/html/dir_a9b8731acea94fd0b96c5d26e1ae02ac.html diff --git a/doc/html/dir_b664689b4d3943ff523c1250795bca04.html b/docs/html/dir_b664689b4d3943ff523c1250795bca04.html similarity index 100% rename from doc/html/dir_b664689b4d3943ff523c1250795bca04.html rename to docs/html/dir_b664689b4d3943ff523c1250795bca04.html diff --git a/doc/html/dir_c6e5477bcb651b159cfa63982954b7ae.html b/docs/html/dir_c6e5477bcb651b159cfa63982954b7ae.html similarity index 100% rename from doc/html/dir_c6e5477bcb651b159cfa63982954b7ae.html rename to docs/html/dir_c6e5477bcb651b159cfa63982954b7ae.html diff --git a/doc/html/dir_cde68057bc18755c5a523db9c7548a97.html b/docs/html/dir_cde68057bc18755c5a523db9c7548a97.html similarity index 100% rename from doc/html/dir_cde68057bc18755c5a523db9c7548a97.html rename to docs/html/dir_cde68057bc18755c5a523db9c7548a97.html diff --git a/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/html/dir_d44c64559bbebec7f509842c48db8b23.html similarity index 100% rename from doc/html/dir_d44c64559bbebec7f509842c48db8b23.html rename to docs/html/dir_d44c64559bbebec7f509842c48db8b23.html diff --git a/doc/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html b/docs/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html similarity index 100% rename from doc/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html rename to docs/html/dir_d73b71eb2e8da9a2def0cfe53ed10aef.html diff --git a/doc/html/dir_ddae31c66714fb086f3b96543d9a56f1.html b/docs/html/dir_ddae31c66714fb086f3b96543d9a56f1.html similarity index 100% rename from doc/html/dir_ddae31c66714fb086f3b96543d9a56f1.html rename to docs/html/dir_ddae31c66714fb086f3b96543d9a56f1.html diff --git a/doc/html/doc.png b/docs/html/doc.png similarity index 100% rename from doc/html/doc.png rename to docs/html/doc.png diff --git a/doc/html/docd.png b/docs/html/docd.png similarity index 100% rename from doc/html/docd.png rename to docs/html/docd.png diff --git a/doc/html/doxygen.css b/docs/html/doxygen.css similarity index 100% rename from doc/html/doxygen.css rename to docs/html/doxygen.css diff --git a/doc/html/doxygen.svg b/docs/html/doxygen.svg similarity index 100% rename from doc/html/doxygen.svg rename to docs/html/doxygen.svg diff --git a/doc/html/dummy__ekf__pid_8cpp.html b/docs/html/dummy__ekf__pid_8cpp.html similarity index 100% rename from doc/html/dummy__ekf__pid_8cpp.html rename to docs/html/dummy__ekf__pid_8cpp.html diff --git a/doc/html/dummy__ekf__pid_8cpp_source.html b/docs/html/dummy__ekf__pid_8cpp_source.html similarity index 100% rename from doc/html/dummy__ekf__pid_8cpp_source.html rename to docs/html/dummy__ekf__pid_8cpp_source.html diff --git a/doc/html/dynsections.js b/docs/html/dynsections.js similarity index 100% rename from doc/html/dynsections.js rename to docs/html/dynsections.js diff --git a/doc/html/files.html b/docs/html/files.html similarity index 100% rename from doc/html/files.html rename to docs/html/files.html diff --git a/doc/html/filters_8h.html b/docs/html/filters_8h.html similarity index 100% rename from doc/html/filters_8h.html rename to docs/html/filters_8h.html diff --git a/doc/html/filters_8h_source.html b/docs/html/filters_8h_source.html similarity index 100% rename from doc/html/filters_8h_source.html rename to docs/html/filters_8h_source.html diff --git a/doc/html/folderclosed.png b/docs/html/folderclosed.png similarity index 100% rename from doc/html/folderclosed.png rename to docs/html/folderclosed.png diff --git a/doc/html/folderopen.png b/docs/html/folderopen.png similarity index 100% rename from doc/html/folderopen.png rename to docs/html/folderopen.png diff --git a/doc/html/functions.html b/docs/html/functions.html similarity index 100% rename from doc/html/functions.html rename to docs/html/functions.html diff --git a/doc/html/functions_b.html b/docs/html/functions_b.html similarity index 100% rename from doc/html/functions_b.html rename to docs/html/functions_b.html diff --git a/doc/html/functions_c.html b/docs/html/functions_c.html similarity index 100% rename from doc/html/functions_c.html rename to docs/html/functions_c.html diff --git a/doc/html/functions_d.html b/docs/html/functions_d.html similarity index 100% rename from doc/html/functions_d.html rename to docs/html/functions_d.html diff --git a/doc/html/functions_e.html b/docs/html/functions_e.html similarity index 100% rename from doc/html/functions_e.html rename to docs/html/functions_e.html diff --git a/doc/html/functions_enum.html b/docs/html/functions_enum.html similarity index 100% rename from doc/html/functions_enum.html rename to docs/html/functions_enum.html diff --git a/doc/html/functions_eval.html b/docs/html/functions_eval.html similarity index 100% rename from doc/html/functions_eval.html rename to docs/html/functions_eval.html diff --git a/doc/html/functions_f.html b/docs/html/functions_f.html similarity index 100% rename from doc/html/functions_f.html rename to docs/html/functions_f.html diff --git a/doc/html/functions_func.html b/docs/html/functions_func.html similarity index 100% rename from doc/html/functions_func.html rename to docs/html/functions_func.html diff --git a/doc/html/functions_g.html b/docs/html/functions_g.html similarity index 100% rename from doc/html/functions_g.html rename to docs/html/functions_g.html diff --git a/doc/html/functions_i.html b/docs/html/functions_i.html similarity index 100% rename from doc/html/functions_i.html rename to docs/html/functions_i.html diff --git a/doc/html/functions_j.html b/docs/html/functions_j.html similarity index 100% rename from doc/html/functions_j.html rename to docs/html/functions_j.html diff --git a/doc/html/functions_k.html b/docs/html/functions_k.html similarity index 100% rename from doc/html/functions_k.html rename to docs/html/functions_k.html diff --git a/doc/html/functions_l.html b/docs/html/functions_l.html similarity index 100% rename from doc/html/functions_l.html rename to docs/html/functions_l.html diff --git a/doc/html/functions_m.html b/docs/html/functions_m.html similarity index 100% rename from doc/html/functions_m.html rename to docs/html/functions_m.html diff --git a/doc/html/functions_o.html b/docs/html/functions_o.html similarity index 100% rename from doc/html/functions_o.html rename to docs/html/functions_o.html diff --git a/doc/html/functions_p.html b/docs/html/functions_p.html similarity index 100% rename from doc/html/functions_p.html rename to docs/html/functions_p.html diff --git a/doc/html/functions_q.html b/docs/html/functions_q.html similarity index 100% rename from doc/html/functions_q.html rename to docs/html/functions_q.html diff --git a/doc/html/functions_r.html b/docs/html/functions_r.html similarity index 100% rename from doc/html/functions_r.html rename to docs/html/functions_r.html diff --git a/doc/html/functions_rela.html b/docs/html/functions_rela.html similarity index 100% rename from doc/html/functions_rela.html rename to docs/html/functions_rela.html diff --git a/doc/html/functions_s.html b/docs/html/functions_s.html similarity index 100% rename from doc/html/functions_s.html rename to docs/html/functions_s.html diff --git a/doc/html/functions_t.html b/docs/html/functions_t.html similarity index 100% rename from doc/html/functions_t.html rename to docs/html/functions_t.html diff --git a/doc/html/functions_type.html b/docs/html/functions_type.html similarity index 100% rename from doc/html/functions_type.html rename to docs/html/functions_type.html diff --git a/doc/html/functions_u.html b/docs/html/functions_u.html similarity index 100% rename from doc/html/functions_u.html rename to docs/html/functions_u.html diff --git a/doc/html/functions_v.html b/docs/html/functions_v.html similarity index 100% rename from doc/html/functions_v.html rename to docs/html/functions_v.html diff --git a/doc/html/functions_vars.html b/docs/html/functions_vars.html similarity index 100% rename from doc/html/functions_vars.html rename to docs/html/functions_vars.html diff --git a/doc/html/functions_w.html b/docs/html/functions_w.html similarity index 100% rename from doc/html/functions_w.html rename to docs/html/functions_w.html diff --git a/doc/html/functions_x.html b/docs/html/functions_x.html similarity index 100% rename from doc/html/functions_x.html rename to docs/html/functions_x.html diff --git a/doc/html/functions_y.html b/docs/html/functions_y.html similarity index 100% rename from doc/html/functions_y.html rename to docs/html/functions_y.html diff --git a/doc/html/functions_z.html b/docs/html/functions_z.html similarity index 100% rename from doc/html/functions_z.html rename to docs/html/functions_z.html diff --git a/doc/html/functions_~.html b/docs/html/functions_~.html similarity index 100% rename from doc/html/functions_~.html rename to docs/html/functions_~.html diff --git a/doc/html/globals.html b/docs/html/globals.html similarity index 100% rename from doc/html/globals.html rename to docs/html/globals.html diff --git a/doc/html/globals_defs.html b/docs/html/globals_defs.html similarity index 100% rename from doc/html/globals_defs.html rename to docs/html/globals_defs.html diff --git a/doc/html/globals_func.html b/docs/html/globals_func.html similarity index 100% rename from doc/html/globals_func.html rename to docs/html/globals_func.html diff --git a/doc/html/globals_type.html b/docs/html/globals_type.html similarity index 100% rename from doc/html/globals_type.html rename to docs/html/globals_type.html diff --git a/doc/html/helper_8h.html b/docs/html/helper_8h.html similarity index 100% rename from doc/html/helper_8h.html rename to docs/html/helper_8h.html diff --git a/doc/html/helper_8h_source.html b/docs/html/helper_8h_source.html similarity index 100% rename from doc/html/helper_8h_source.html rename to docs/html/helper_8h_source.html diff --git a/doc/html/hierarchy.html b/docs/html/hierarchy.html similarity index 100% rename from doc/html/hierarchy.html rename to docs/html/hierarchy.html diff --git a/doc/html/index.html b/docs/html/index.html similarity index 100% rename from doc/html/index.html rename to docs/html/index.html diff --git a/doc/html/jquery.js b/docs/html/jquery.js similarity index 100% rename from doc/html/jquery.js rename to docs/html/jquery.js diff --git a/doc/html/localization_2_filters_2ekf_2main_8cpp.html b/docs/html/localization_2_filters_2ekf_2main_8cpp.html similarity index 100% rename from doc/html/localization_2_filters_2ekf_2main_8cpp.html rename to docs/html/localization_2_filters_2ekf_2main_8cpp.html diff --git a/doc/html/localization_2_filters_2ekf_2main_8cpp_source.html b/docs/html/localization_2_filters_2ekf_2main_8cpp_source.html similarity index 100% rename from doc/html/localization_2_filters_2ekf_2main_8cpp_source.html rename to docs/html/localization_2_filters_2ekf_2main_8cpp_source.html diff --git a/doc/html/localization_2_filters_2pf_2main_8cpp.html b/docs/html/localization_2_filters_2pf_2main_8cpp.html similarity index 100% rename from doc/html/localization_2_filters_2pf_2main_8cpp.html rename to docs/html/localization_2_filters_2pf_2main_8cpp.html diff --git a/doc/html/localization_2_filters_2pf_2main_8cpp_source.html b/docs/html/localization_2_filters_2pf_2main_8cpp_source.html similarity index 100% rename from doc/html/localization_2_filters_2pf_2main_8cpp_source.html rename to docs/html/localization_2_filters_2pf_2main_8cpp_source.html diff --git a/doc/html/matplotlibcpp_8h.html b/docs/html/matplotlibcpp_8h.html similarity index 100% rename from doc/html/matplotlibcpp_8h.html rename to docs/html/matplotlibcpp_8h.html diff --git a/doc/html/matplotlibcpp_8h_source.html b/docs/html/matplotlibcpp_8h_source.html similarity index 100% rename from doc/html/matplotlibcpp_8h_source.html rename to docs/html/matplotlibcpp_8h_source.html diff --git a/doc/html/md__r_e_a_d_m_e.html b/docs/html/md__r_e_a_d_m_e.html similarity index 100% rename from doc/html/md__r_e_a_d_m_e.html rename to docs/html/md__r_e_a_d_m_e.html diff --git a/doc/html/menu.js b/docs/html/menu.js similarity index 100% rename from doc/html/menu.js rename to docs/html/menu.js diff --git a/doc/html/menudata.js b/docs/html/menudata.js similarity index 100% rename from doc/html/menudata.js rename to docs/html/menudata.js diff --git a/doc/html/namespacebebop2.html b/docs/html/namespacebebop2.html similarity index 100% rename from doc/html/namespacebebop2.html rename to docs/html/namespacebebop2.html diff --git a/doc/html/namespacematplotlibcpp.html b/docs/html/namespacematplotlibcpp.html similarity index 100% rename from doc/html/namespacematplotlibcpp.html rename to docs/html/namespacematplotlibcpp.html diff --git a/doc/html/namespacematplotlibcpp_1_1detail.html b/docs/html/namespacematplotlibcpp_1_1detail.html similarity index 100% rename from doc/html/namespacematplotlibcpp_1_1detail.html rename to docs/html/namespacematplotlibcpp_1_1detail.html diff --git a/doc/html/namespacemembers.html b/docs/html/namespacemembers.html similarity index 100% rename from doc/html/namespacemembers.html rename to docs/html/namespacemembers.html diff --git a/doc/html/namespacemembers_enum.html b/docs/html/namespacemembers_enum.html similarity index 100% rename from doc/html/namespacemembers_enum.html rename to docs/html/namespacemembers_enum.html diff --git a/doc/html/namespacemembers_eval.html b/docs/html/namespacemembers_eval.html similarity index 100% rename from doc/html/namespacemembers_eval.html rename to docs/html/namespacemembers_eval.html diff --git a/doc/html/namespacemembers_func.html b/docs/html/namespacemembers_func.html similarity index 100% rename from doc/html/namespacemembers_func.html rename to docs/html/namespacemembers_func.html diff --git a/doc/html/namespacemembers_type.html b/docs/html/namespacemembers_type.html similarity index 100% rename from doc/html/namespacemembers_type.html rename to docs/html/namespacemembers_type.html diff --git a/doc/html/namespacemembers_vars.html b/docs/html/namespacemembers_vars.html similarity index 100% rename from doc/html/namespacemembers_vars.html rename to docs/html/namespacemembers_vars.html diff --git a/doc/html/namespaces.html b/docs/html/namespaces.html similarity index 100% rename from doc/html/namespaces.html rename to docs/html/namespaces.html diff --git a/doc/html/nav_f.png b/docs/html/nav_f.png similarity index 100% rename from doc/html/nav_f.png rename to docs/html/nav_f.png diff --git a/doc/html/nav_fd.png b/docs/html/nav_fd.png similarity index 100% rename from doc/html/nav_fd.png rename to docs/html/nav_fd.png diff --git a/doc/html/nav_g.png b/docs/html/nav_g.png similarity index 100% rename from doc/html/nav_g.png rename to docs/html/nav_g.png diff --git a/doc/html/nav_h.png b/docs/html/nav_h.png similarity index 100% rename from doc/html/nav_h.png rename to docs/html/nav_h.png diff --git a/doc/html/nav_hd.png b/docs/html/nav_hd.png similarity index 100% rename from doc/html/nav_hd.png rename to docs/html/nav_hd.png diff --git a/doc/html/open.png b/docs/html/open.png similarity index 100% rename from doc/html/open.png rename to docs/html/open.png diff --git a/doc/html/pages.html b/docs/html/pages.html similarity index 100% rename from doc/html/pages.html rename to docs/html/pages.html diff --git a/doc/html/particle__filter_8cpp.html b/docs/html/particle__filter_8cpp.html similarity index 100% rename from doc/html/particle__filter_8cpp.html rename to docs/html/particle__filter_8cpp.html diff --git a/doc/html/particle__filter_8cpp_source.html b/docs/html/particle__filter_8cpp_source.html similarity index 100% rename from doc/html/particle__filter_8cpp_source.html rename to docs/html/particle__filter_8cpp_source.html diff --git a/doc/html/particle__filter_8h.html b/docs/html/particle__filter_8h.html similarity index 100% rename from doc/html/particle__filter_8h.html rename to docs/html/particle__filter_8h.html diff --git a/doc/html/particle__filter_8h_source.html b/docs/html/particle__filter_8h_source.html similarity index 100% rename from doc/html/particle__filter_8h_source.html rename to docs/html/particle__filter_8h_source.html diff --git a/doc/html/robot__defs_8h.html b/docs/html/robot__defs_8h.html similarity index 100% rename from doc/html/robot__defs_8h.html rename to docs/html/robot__defs_8h.html diff --git a/doc/html/robot__defs_8h_source.html b/docs/html/robot__defs_8h_source.html similarity index 100% rename from doc/html/robot__defs_8h_source.html rename to docs/html/robot__defs_8h_source.html diff --git a/doc/html/search/all_0.js b/docs/html/search/all_0.js similarity index 100% rename from doc/html/search/all_0.js rename to docs/html/search/all_0.js diff --git a/doc/html/search/all_1.js b/docs/html/search/all_1.js similarity index 100% rename from doc/html/search/all_1.js rename to docs/html/search/all_1.js diff --git a/doc/html/search/all_10.js b/docs/html/search/all_10.js similarity index 100% rename from doc/html/search/all_10.js rename to docs/html/search/all_10.js diff --git a/doc/html/search/all_11.js b/docs/html/search/all_11.js similarity index 100% rename from doc/html/search/all_11.js rename to docs/html/search/all_11.js diff --git a/doc/html/search/all_12.js b/docs/html/search/all_12.js similarity index 100% rename from doc/html/search/all_12.js rename to docs/html/search/all_12.js diff --git a/doc/html/search/all_13.js b/docs/html/search/all_13.js similarity index 100% rename from doc/html/search/all_13.js rename to docs/html/search/all_13.js diff --git a/doc/html/search/all_14.js b/docs/html/search/all_14.js similarity index 100% rename from doc/html/search/all_14.js rename to docs/html/search/all_14.js diff --git a/doc/html/search/all_15.js b/docs/html/search/all_15.js similarity index 100% rename from doc/html/search/all_15.js rename to docs/html/search/all_15.js diff --git a/doc/html/search/all_16.js b/docs/html/search/all_16.js similarity index 100% rename from doc/html/search/all_16.js rename to docs/html/search/all_16.js diff --git a/doc/html/search/all_17.js b/docs/html/search/all_17.js similarity index 100% rename from doc/html/search/all_17.js rename to docs/html/search/all_17.js diff --git a/doc/html/search/all_18.js b/docs/html/search/all_18.js similarity index 100% rename from doc/html/search/all_18.js rename to docs/html/search/all_18.js diff --git a/doc/html/search/all_19.js b/docs/html/search/all_19.js similarity index 100% rename from doc/html/search/all_19.js rename to docs/html/search/all_19.js diff --git a/doc/html/search/all_1a.js b/docs/html/search/all_1a.js similarity index 100% rename from doc/html/search/all_1a.js rename to docs/html/search/all_1a.js diff --git a/doc/html/search/all_1b.js b/docs/html/search/all_1b.js similarity index 100% rename from doc/html/search/all_1b.js rename to docs/html/search/all_1b.js diff --git a/doc/html/search/all_2.js b/docs/html/search/all_2.js similarity index 100% rename from doc/html/search/all_2.js rename to docs/html/search/all_2.js diff --git a/doc/html/search/all_3.js b/docs/html/search/all_3.js similarity index 100% rename from doc/html/search/all_3.js rename to docs/html/search/all_3.js diff --git a/doc/html/search/all_4.js b/docs/html/search/all_4.js similarity index 100% rename from doc/html/search/all_4.js rename to docs/html/search/all_4.js diff --git a/doc/html/search/all_5.js b/docs/html/search/all_5.js similarity index 100% rename from doc/html/search/all_5.js rename to docs/html/search/all_5.js diff --git a/doc/html/search/all_6.js b/docs/html/search/all_6.js similarity index 100% rename from doc/html/search/all_6.js rename to docs/html/search/all_6.js diff --git a/doc/html/search/all_7.js b/docs/html/search/all_7.js similarity index 100% rename from doc/html/search/all_7.js rename to docs/html/search/all_7.js diff --git a/doc/html/search/all_8.js b/docs/html/search/all_8.js similarity index 100% rename from doc/html/search/all_8.js rename to docs/html/search/all_8.js diff --git a/doc/html/search/all_9.js b/docs/html/search/all_9.js similarity index 100% rename from doc/html/search/all_9.js rename to docs/html/search/all_9.js diff --git a/doc/html/search/all_a.js b/docs/html/search/all_a.js similarity index 100% rename from doc/html/search/all_a.js rename to docs/html/search/all_a.js diff --git a/doc/html/search/all_b.js b/docs/html/search/all_b.js similarity index 100% rename from doc/html/search/all_b.js rename to docs/html/search/all_b.js diff --git a/doc/html/search/all_c.js b/docs/html/search/all_c.js similarity index 100% rename from doc/html/search/all_c.js rename to docs/html/search/all_c.js diff --git a/doc/html/search/all_d.js b/docs/html/search/all_d.js similarity index 100% rename from doc/html/search/all_d.js rename to docs/html/search/all_d.js diff --git a/doc/html/search/all_e.js b/docs/html/search/all_e.js similarity index 100% rename from doc/html/search/all_e.js rename to docs/html/search/all_e.js diff --git a/doc/html/search/all_f.js b/docs/html/search/all_f.js similarity index 100% rename from doc/html/search/all_f.js rename to docs/html/search/all_f.js diff --git a/doc/html/search/classes_0.js b/docs/html/search/classes_0.js similarity index 100% rename from doc/html/search/classes_0.js rename to docs/html/search/classes_0.js diff --git a/doc/html/search/classes_1.js b/docs/html/search/classes_1.js similarity index 100% rename from doc/html/search/classes_1.js rename to docs/html/search/classes_1.js diff --git a/doc/html/search/classes_2.js b/docs/html/search/classes_2.js similarity index 100% rename from doc/html/search/classes_2.js rename to docs/html/search/classes_2.js diff --git a/doc/html/search/classes_3.js b/docs/html/search/classes_3.js similarity index 100% rename from doc/html/search/classes_3.js rename to docs/html/search/classes_3.js diff --git a/doc/html/search/classes_4.js b/docs/html/search/classes_4.js similarity index 100% rename from doc/html/search/classes_4.js rename to docs/html/search/classes_4.js diff --git a/doc/html/search/classes_5.js b/docs/html/search/classes_5.js similarity index 100% rename from doc/html/search/classes_5.js rename to docs/html/search/classes_5.js diff --git a/doc/html/search/classes_6.js b/docs/html/search/classes_6.js similarity index 100% rename from doc/html/search/classes_6.js rename to docs/html/search/classes_6.js diff --git a/doc/html/search/classes_7.js b/docs/html/search/classes_7.js similarity index 100% rename from doc/html/search/classes_7.js rename to docs/html/search/classes_7.js diff --git a/doc/html/search/classes_8.js b/docs/html/search/classes_8.js similarity index 100% rename from doc/html/search/classes_8.js rename to docs/html/search/classes_8.js diff --git a/doc/html/search/classes_9.js b/docs/html/search/classes_9.js similarity index 100% rename from doc/html/search/classes_9.js rename to docs/html/search/classes_9.js diff --git a/doc/html/search/classes_a.js b/docs/html/search/classes_a.js similarity index 100% rename from doc/html/search/classes_a.js rename to docs/html/search/classes_a.js diff --git a/doc/html/search/classes_b.js b/docs/html/search/classes_b.js similarity index 100% rename from doc/html/search/classes_b.js rename to docs/html/search/classes_b.js diff --git a/doc/html/search/classes_c.js b/docs/html/search/classes_c.js similarity index 100% rename from doc/html/search/classes_c.js rename to docs/html/search/classes_c.js diff --git a/doc/html/search/classes_d.js b/docs/html/search/classes_d.js similarity index 100% rename from doc/html/search/classes_d.js rename to docs/html/search/classes_d.js diff --git a/doc/html/search/close.svg b/docs/html/search/close.svg similarity index 100% rename from doc/html/search/close.svg rename to docs/html/search/close.svg diff --git a/doc/html/search/defines_0.js b/docs/html/search/defines_0.js similarity index 100% rename from doc/html/search/defines_0.js rename to docs/html/search/defines_0.js diff --git a/doc/html/search/defines_1.js b/docs/html/search/defines_1.js similarity index 100% rename from doc/html/search/defines_1.js rename to docs/html/search/defines_1.js diff --git a/doc/html/search/defines_2.js b/docs/html/search/defines_2.js similarity index 100% rename from doc/html/search/defines_2.js rename to docs/html/search/defines_2.js diff --git a/doc/html/search/defines_3.js b/docs/html/search/defines_3.js similarity index 100% rename from doc/html/search/defines_3.js rename to docs/html/search/defines_3.js diff --git a/doc/html/search/defines_4.js b/docs/html/search/defines_4.js similarity index 100% rename from doc/html/search/defines_4.js rename to docs/html/search/defines_4.js diff --git a/doc/html/search/enums_0.js b/docs/html/search/enums_0.js similarity index 100% rename from doc/html/search/enums_0.js rename to docs/html/search/enums_0.js diff --git a/doc/html/search/enums_1.js b/docs/html/search/enums_1.js similarity index 100% rename from doc/html/search/enums_1.js rename to docs/html/search/enums_1.js diff --git a/doc/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js similarity index 100% rename from doc/html/search/enumvalues_0.js rename to docs/html/search/enumvalues_0.js diff --git a/doc/html/search/enumvalues_1.js b/docs/html/search/enumvalues_1.js similarity index 100% rename from doc/html/search/enumvalues_1.js rename to docs/html/search/enumvalues_1.js diff --git a/doc/html/search/enumvalues_2.js b/docs/html/search/enumvalues_2.js similarity index 100% rename from doc/html/search/enumvalues_2.js rename to docs/html/search/enumvalues_2.js diff --git a/doc/html/search/enumvalues_3.js b/docs/html/search/enumvalues_3.js similarity index 100% rename from doc/html/search/enumvalues_3.js rename to docs/html/search/enumvalues_3.js diff --git a/doc/html/search/enumvalues_4.js b/docs/html/search/enumvalues_4.js similarity index 100% rename from doc/html/search/enumvalues_4.js rename to docs/html/search/enumvalues_4.js diff --git a/doc/html/search/enumvalues_5.js b/docs/html/search/enumvalues_5.js similarity index 100% rename from doc/html/search/enumvalues_5.js rename to docs/html/search/enumvalues_5.js diff --git a/doc/html/search/enumvalues_6.js b/docs/html/search/enumvalues_6.js similarity index 100% rename from doc/html/search/enumvalues_6.js rename to docs/html/search/enumvalues_6.js diff --git a/doc/html/search/enumvalues_7.js b/docs/html/search/enumvalues_7.js similarity index 100% rename from doc/html/search/enumvalues_7.js rename to docs/html/search/enumvalues_7.js diff --git a/doc/html/search/enumvalues_8.js b/docs/html/search/enumvalues_8.js similarity index 100% rename from doc/html/search/enumvalues_8.js rename to docs/html/search/enumvalues_8.js diff --git a/doc/html/search/files_0.js b/docs/html/search/files_0.js similarity index 100% rename from doc/html/search/files_0.js rename to docs/html/search/files_0.js diff --git a/doc/html/search/files_1.js b/docs/html/search/files_1.js similarity index 100% rename from doc/html/search/files_1.js rename to docs/html/search/files_1.js diff --git a/doc/html/search/files_2.js b/docs/html/search/files_2.js similarity index 100% rename from doc/html/search/files_2.js rename to docs/html/search/files_2.js diff --git a/doc/html/search/files_3.js b/docs/html/search/files_3.js similarity index 100% rename from doc/html/search/files_3.js rename to docs/html/search/files_3.js diff --git a/doc/html/search/files_4.js b/docs/html/search/files_4.js similarity index 100% rename from doc/html/search/files_4.js rename to docs/html/search/files_4.js diff --git a/doc/html/search/files_5.js b/docs/html/search/files_5.js similarity index 100% rename from doc/html/search/files_5.js rename to docs/html/search/files_5.js diff --git a/doc/html/search/files_6.js b/docs/html/search/files_6.js similarity index 100% rename from doc/html/search/files_6.js rename to docs/html/search/files_6.js diff --git a/doc/html/search/files_7.js b/docs/html/search/files_7.js similarity index 100% rename from doc/html/search/files_7.js rename to docs/html/search/files_7.js diff --git a/doc/html/search/files_8.js b/docs/html/search/files_8.js similarity index 100% rename from doc/html/search/files_8.js rename to docs/html/search/files_8.js diff --git a/doc/html/search/files_9.js b/docs/html/search/files_9.js similarity index 100% rename from doc/html/search/files_9.js rename to docs/html/search/files_9.js diff --git a/doc/html/search/files_a.js b/docs/html/search/files_a.js similarity index 100% rename from doc/html/search/files_a.js rename to docs/html/search/files_a.js diff --git a/doc/html/search/files_b.js b/docs/html/search/files_b.js similarity index 100% rename from doc/html/search/files_b.js rename to docs/html/search/files_b.js diff --git a/doc/html/search/functions_0.js b/docs/html/search/functions_0.js similarity index 100% rename from doc/html/search/functions_0.js rename to docs/html/search/functions_0.js diff --git a/doc/html/search/functions_1.js b/docs/html/search/functions_1.js similarity index 100% rename from doc/html/search/functions_1.js rename to docs/html/search/functions_1.js diff --git a/doc/html/search/functions_10.js b/docs/html/search/functions_10.js similarity index 100% rename from doc/html/search/functions_10.js rename to docs/html/search/functions_10.js diff --git a/doc/html/search/functions_11.js b/docs/html/search/functions_11.js similarity index 100% rename from doc/html/search/functions_11.js rename to docs/html/search/functions_11.js diff --git a/doc/html/search/functions_12.js b/docs/html/search/functions_12.js similarity index 100% rename from doc/html/search/functions_12.js rename to docs/html/search/functions_12.js diff --git a/doc/html/search/functions_13.js b/docs/html/search/functions_13.js similarity index 100% rename from doc/html/search/functions_13.js rename to docs/html/search/functions_13.js diff --git a/doc/html/search/functions_14.js b/docs/html/search/functions_14.js similarity index 100% rename from doc/html/search/functions_14.js rename to docs/html/search/functions_14.js diff --git a/doc/html/search/functions_15.js b/docs/html/search/functions_15.js similarity index 100% rename from doc/html/search/functions_15.js rename to docs/html/search/functions_15.js diff --git a/doc/html/search/functions_16.js b/docs/html/search/functions_16.js similarity index 100% rename from doc/html/search/functions_16.js rename to docs/html/search/functions_16.js diff --git a/doc/html/search/functions_17.js b/docs/html/search/functions_17.js similarity index 100% rename from doc/html/search/functions_17.js rename to docs/html/search/functions_17.js diff --git a/doc/html/search/functions_18.js b/docs/html/search/functions_18.js similarity index 100% rename from doc/html/search/functions_18.js rename to docs/html/search/functions_18.js diff --git a/doc/html/search/functions_2.js b/docs/html/search/functions_2.js similarity index 100% rename from doc/html/search/functions_2.js rename to docs/html/search/functions_2.js diff --git a/doc/html/search/functions_3.js b/docs/html/search/functions_3.js similarity index 100% rename from doc/html/search/functions_3.js rename to docs/html/search/functions_3.js diff --git a/doc/html/search/functions_4.js b/docs/html/search/functions_4.js similarity index 100% rename from doc/html/search/functions_4.js rename to docs/html/search/functions_4.js diff --git a/doc/html/search/functions_5.js b/docs/html/search/functions_5.js similarity index 100% rename from doc/html/search/functions_5.js rename to docs/html/search/functions_5.js diff --git a/doc/html/search/functions_6.js b/docs/html/search/functions_6.js similarity index 100% rename from doc/html/search/functions_6.js rename to docs/html/search/functions_6.js diff --git a/doc/html/search/functions_7.js b/docs/html/search/functions_7.js similarity index 100% rename from doc/html/search/functions_7.js rename to docs/html/search/functions_7.js diff --git a/doc/html/search/functions_8.js b/docs/html/search/functions_8.js similarity index 100% rename from doc/html/search/functions_8.js rename to docs/html/search/functions_8.js diff --git a/doc/html/search/functions_9.js b/docs/html/search/functions_9.js similarity index 100% rename from doc/html/search/functions_9.js rename to docs/html/search/functions_9.js diff --git a/doc/html/search/functions_a.js b/docs/html/search/functions_a.js similarity index 100% rename from doc/html/search/functions_a.js rename to docs/html/search/functions_a.js diff --git a/doc/html/search/functions_b.js b/docs/html/search/functions_b.js similarity index 100% rename from doc/html/search/functions_b.js rename to docs/html/search/functions_b.js diff --git a/doc/html/search/functions_c.js b/docs/html/search/functions_c.js similarity index 100% rename from doc/html/search/functions_c.js rename to docs/html/search/functions_c.js diff --git a/doc/html/search/functions_d.js b/docs/html/search/functions_d.js similarity index 100% rename from doc/html/search/functions_d.js rename to docs/html/search/functions_d.js diff --git a/doc/html/search/functions_e.js b/docs/html/search/functions_e.js similarity index 100% rename from doc/html/search/functions_e.js rename to docs/html/search/functions_e.js diff --git a/doc/html/search/functions_f.js b/docs/html/search/functions_f.js similarity index 100% rename from doc/html/search/functions_f.js rename to docs/html/search/functions_f.js diff --git a/doc/html/search/mag.svg b/docs/html/search/mag.svg similarity index 100% rename from doc/html/search/mag.svg rename to docs/html/search/mag.svg diff --git a/doc/html/search/mag_d.svg b/docs/html/search/mag_d.svg similarity index 100% rename from doc/html/search/mag_d.svg rename to docs/html/search/mag_d.svg diff --git a/doc/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg similarity index 100% rename from doc/html/search/mag_sel.svg rename to docs/html/search/mag_sel.svg diff --git a/doc/html/search/mag_seld.svg b/docs/html/search/mag_seld.svg similarity index 100% rename from doc/html/search/mag_seld.svg rename to docs/html/search/mag_seld.svg diff --git a/doc/html/search/namespaces_0.js b/docs/html/search/namespaces_0.js similarity index 100% rename from doc/html/search/namespaces_0.js rename to docs/html/search/namespaces_0.js diff --git a/doc/html/search/namespaces_1.js b/docs/html/search/namespaces_1.js similarity index 100% rename from doc/html/search/namespaces_1.js rename to docs/html/search/namespaces_1.js diff --git a/doc/html/search/pages_0.js b/docs/html/search/pages_0.js similarity index 100% rename from doc/html/search/pages_0.js rename to docs/html/search/pages_0.js diff --git a/doc/html/search/related_0.js b/docs/html/search/related_0.js similarity index 100% rename from doc/html/search/related_0.js rename to docs/html/search/related_0.js diff --git a/doc/html/search/search.css b/docs/html/search/search.css similarity index 100% rename from doc/html/search/search.css rename to docs/html/search/search.css diff --git a/doc/html/search/search.js b/docs/html/search/search.js similarity index 100% rename from doc/html/search/search.js rename to docs/html/search/search.js diff --git a/doc/html/search/searchdata.js b/docs/html/search/searchdata.js similarity index 100% rename from doc/html/search/searchdata.js rename to docs/html/search/searchdata.js diff --git a/doc/html/search/typedefs_0.js b/docs/html/search/typedefs_0.js similarity index 100% rename from doc/html/search/typedefs_0.js rename to docs/html/search/typedefs_0.js diff --git a/doc/html/search/typedefs_1.js b/docs/html/search/typedefs_1.js similarity index 100% rename from doc/html/search/typedefs_1.js rename to docs/html/search/typedefs_1.js diff --git a/doc/html/search/typedefs_2.js b/docs/html/search/typedefs_2.js similarity index 100% rename from doc/html/search/typedefs_2.js rename to docs/html/search/typedefs_2.js diff --git a/doc/html/search/typedefs_3.js b/docs/html/search/typedefs_3.js similarity index 100% rename from doc/html/search/typedefs_3.js rename to docs/html/search/typedefs_3.js diff --git a/doc/html/search/typedefs_4.js b/docs/html/search/typedefs_4.js similarity index 100% rename from doc/html/search/typedefs_4.js rename to docs/html/search/typedefs_4.js diff --git a/doc/html/search/variables_0.js b/docs/html/search/variables_0.js similarity index 100% rename from doc/html/search/variables_0.js rename to docs/html/search/variables_0.js diff --git a/doc/html/search/variables_1.js b/docs/html/search/variables_1.js similarity index 100% rename from doc/html/search/variables_1.js rename to docs/html/search/variables_1.js diff --git a/doc/html/search/variables_2.js b/docs/html/search/variables_2.js similarity index 100% rename from doc/html/search/variables_2.js rename to docs/html/search/variables_2.js diff --git a/doc/html/search/variables_3.js b/docs/html/search/variables_3.js similarity index 100% rename from doc/html/search/variables_3.js rename to docs/html/search/variables_3.js diff --git a/doc/html/search/variables_4.js b/docs/html/search/variables_4.js similarity index 100% rename from doc/html/search/variables_4.js rename to docs/html/search/variables_4.js diff --git a/doc/html/search/variables_5.js b/docs/html/search/variables_5.js similarity index 100% rename from doc/html/search/variables_5.js rename to docs/html/search/variables_5.js diff --git a/doc/html/search/variables_6.js b/docs/html/search/variables_6.js similarity index 100% rename from doc/html/search/variables_6.js rename to docs/html/search/variables_6.js diff --git a/doc/html/search/variables_7.js b/docs/html/search/variables_7.js similarity index 100% rename from doc/html/search/variables_7.js rename to docs/html/search/variables_7.js diff --git a/doc/html/search/variables_8.js b/docs/html/search/variables_8.js similarity index 100% rename from doc/html/search/variables_8.js rename to docs/html/search/variables_8.js diff --git a/doc/html/search/variables_9.js b/docs/html/search/variables_9.js similarity index 100% rename from doc/html/search/variables_9.js rename to docs/html/search/variables_9.js diff --git a/doc/html/search/variables_a.js b/docs/html/search/variables_a.js similarity index 100% rename from doc/html/search/variables_a.js rename to docs/html/search/variables_a.js diff --git a/doc/html/search/variables_b.js b/docs/html/search/variables_b.js similarity index 100% rename from doc/html/search/variables_b.js rename to docs/html/search/variables_b.js diff --git a/doc/html/search/variables_c.js b/docs/html/search/variables_c.js similarity index 100% rename from doc/html/search/variables_c.js rename to docs/html/search/variables_c.js diff --git a/doc/html/search/variables_d.js b/docs/html/search/variables_d.js similarity index 100% rename from doc/html/search/variables_d.js rename to docs/html/search/variables_d.js diff --git a/doc/html/search/variables_e.js b/docs/html/search/variables_e.js similarity index 100% rename from doc/html/search/variables_e.js rename to docs/html/search/variables_e.js diff --git a/doc/html/search/variables_f.js b/docs/html/search/variables_f.js similarity index 100% rename from doc/html/search/variables_f.js rename to docs/html/search/variables_f.js diff --git a/doc/html/sensors_8h.html b/docs/html/sensors_8h.html similarity index 100% rename from doc/html/sensors_8h.html rename to docs/html/sensors_8h.html diff --git a/doc/html/sensors_8h_source.html b/docs/html/sensors_8h_source.html similarity index 100% rename from doc/html/sensors_8h_source.html rename to docs/html/sensors_8h_source.html diff --git a/doc/html/splitbar.png b/docs/html/splitbar.png similarity index 100% rename from doc/html/splitbar.png rename to docs/html/splitbar.png diff --git a/doc/html/splitbard.png b/docs/html/splitbard.png similarity index 100% rename from doc/html/splitbard.png rename to docs/html/splitbard.png diff --git a/doc/html/struct_field_location-members.html b/docs/html/struct_field_location-members.html similarity index 100% rename from doc/html/struct_field_location-members.html rename to docs/html/struct_field_location-members.html diff --git a/doc/html/struct_field_location.html b/docs/html/struct_field_location.html similarity index 100% rename from doc/html/struct_field_location.html rename to docs/html/struct_field_location.html diff --git a/doc/html/struct_landmark_obs-members.html b/docs/html/struct_landmark_obs-members.html similarity index 100% rename from doc/html/struct_landmark_obs-members.html rename to docs/html/struct_landmark_obs-members.html diff --git a/doc/html/struct_landmark_obs.html b/docs/html/struct_landmark_obs.html similarity index 100% rename from doc/html/struct_landmark_obs.html rename to docs/html/struct_landmark_obs.html diff --git a/doc/html/struct_marker_observation-members.html b/docs/html/struct_marker_observation-members.html similarity index 100% rename from doc/html/struct_marker_observation-members.html rename to docs/html/struct_marker_observation-members.html diff --git a/doc/html/struct_marker_observation.html b/docs/html/struct_marker_observation.html similarity index 100% rename from doc/html/struct_marker_observation.html rename to docs/html/struct_marker_observation.html diff --git a/doc/html/struct_particle-members.html b/docs/html/struct_particle-members.html similarity index 100% rename from doc/html/struct_particle-members.html rename to docs/html/struct_particle-members.html diff --git a/doc/html/struct_particle.html b/docs/html/struct_particle.html similarity index 100% rename from doc/html/struct_particle.html rename to docs/html/struct_particle.html diff --git a/doc/html/struct_robot_state-members.html b/docs/html/struct_robot_state-members.html similarity index 100% rename from doc/html/struct_robot_state-members.html rename to docs/html/struct_robot_state-members.html diff --git a/doc/html/struct_robot_state.html b/docs/html/struct_robot_state.html similarity index 100% rename from doc/html/struct_robot_state.html rename to docs/html/struct_robot_state.html diff --git a/doc/html/struct_tag_map_1_1single__landmark__s-members.html b/docs/html/struct_tag_map_1_1single__landmark__s-members.html similarity index 100% rename from doc/html/struct_tag_map_1_1single__landmark__s-members.html rename to docs/html/struct_tag_map_1_1single__landmark__s-members.html diff --git a/doc/html/struct_tag_map_1_1single__landmark__s.html b/docs/html/struct_tag_map_1_1single__landmark__s.html similarity index 100% rename from doc/html/struct_tag_map_1_1single__landmark__s.html rename to docs/html/struct_tag_map_1_1single__landmark__s.html diff --git a/doc/html/struct_twist-members.html b/docs/html/struct_twist-members.html similarity index 100% rename from doc/html/struct_twist-members.html rename to docs/html/struct_twist-members.html diff --git a/doc/html/struct_twist.html b/docs/html/struct_twist.html similarity index 100% rename from doc/html/struct_twist.html rename to docs/html/struct_twist.html diff --git a/doc/html/struct_twist_1_1_angular_vel-members.html b/docs/html/struct_twist_1_1_angular_vel-members.html similarity index 100% rename from doc/html/struct_twist_1_1_angular_vel-members.html rename to docs/html/struct_twist_1_1_angular_vel-members.html diff --git a/doc/html/struct_twist_1_1_angular_vel.html b/docs/html/struct_twist_1_1_angular_vel.html similarity index 100% rename from doc/html/struct_twist_1_1_angular_vel.html rename to docs/html/struct_twist_1_1_angular_vel.html diff --git a/doc/html/struct_twist_1_1_linear_vel-members.html b/docs/html/struct_twist_1_1_linear_vel-members.html similarity index 100% rename from doc/html/struct_twist_1_1_linear_vel-members.html rename to docs/html/struct_twist_1_1_linear_vel-members.html diff --git a/doc/html/struct_twist_1_1_linear_vel.html b/docs/html/struct_twist_1_1_linear_vel.html similarity index 100% rename from doc/html/struct_twist_1_1_linear_vel.html rename to docs/html/struct_twist_1_1_linear_vel.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1__interpreter-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html b/docs/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1__interpreter.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01false_00_01_t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_check.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_derived.png diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png b/docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png rename to docs/html/structmatplotlibcpp_1_1detail_1_1is__callable__impl_3_01true_00_01_t_01_4_1_1_fallback.png diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html b/docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1false__type_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1plot__impl_3_01std_1_1true__type_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01bool_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01double_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01float_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int16__t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int32__t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int64__t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01int8__t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint16__t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint32__t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint64__t_01_4.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4-members.html diff --git a/doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html b/docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html similarity index 100% rename from doc/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html rename to docs/html/structmatplotlibcpp_1_1detail_1_1select__npy__type_3_01uint8__t_01_4.html diff --git a/doc/html/sync_off.png b/docs/html/sync_off.png similarity index 100% rename from doc/html/sync_off.png rename to docs/html/sync_off.png diff --git a/doc/html/sync_on.png b/docs/html/sync_on.png similarity index 100% rename from doc/html/sync_on.png rename to docs/html/sync_on.png diff --git a/doc/html/tab_a.png b/docs/html/tab_a.png similarity index 100% rename from doc/html/tab_a.png rename to docs/html/tab_a.png diff --git a/doc/html/tab_ad.png b/docs/html/tab_ad.png similarity index 100% rename from doc/html/tab_ad.png rename to docs/html/tab_ad.png diff --git a/doc/html/tab_b.png b/docs/html/tab_b.png similarity index 100% rename from doc/html/tab_b.png rename to docs/html/tab_b.png diff --git a/doc/html/tab_bd.png b/docs/html/tab_bd.png similarity index 100% rename from doc/html/tab_bd.png rename to docs/html/tab_bd.png diff --git a/doc/html/tab_h.png b/docs/html/tab_h.png similarity index 100% rename from doc/html/tab_h.png rename to docs/html/tab_h.png diff --git a/doc/html/tab_hd.png b/docs/html/tab_hd.png similarity index 100% rename from doc/html/tab_hd.png rename to docs/html/tab_hd.png diff --git a/doc/html/tab_s.png b/docs/html/tab_s.png similarity index 100% rename from doc/html/tab_s.png rename to docs/html/tab_s.png diff --git a/doc/html/tab_sd.png b/docs/html/tab_sd.png similarity index 100% rename from doc/html/tab_sd.png rename to docs/html/tab_sd.png diff --git a/doc/html/tabs.css b/docs/html/tabs.css similarity index 100% rename from doc/html/tabs.css rename to docs/html/tabs.css From 4d94704a3ebe0983b674ee25a521c28b98300d96 Mon Sep 17 00:00:00 2001 From: sbsingh3_2121 Date: Thu, 2 Feb 2023 20:18:54 -0600 Subject: [PATCH 03/15] Controller Header Files documented --- docs/html/ApriltagLandmarks_8cpp.html | 88 + docs/html/ApriltagLandmarks_8cpp_source.html | 164 ++ docs/html/ApriltagLandmarks_8h.html | 105 + docs/html/ApriltagLandmarks_8h_source.html | 132 + docs/html/ComplementaryFilter_8h.html | 97 + docs/html/ComplementaryFilter_8h_source.html | 128 + docs/html/ControlViz_8cpp.html | 96 + docs/html/ControlViz_8cpp_source.html | 217 ++ docs/html/ControlViz_8h.html | 122 + docs/html/ControlViz_8h_source.html | 143 + docs/html/ControllerBase_8cpp.html | 98 + docs/html/ControllerBase_8cpp_source.html | 295 ++ docs/html/ControllerBase_8h.html | 129 + docs/html/ControllerBase_8h_source.html | 189 ++ docs/html/DummyState_8cpp.html | 96 + docs/html/DummyState_8cpp_source.html | 153 + docs/html/DummyState_8h.html | 109 + docs/html/DummyState_8h_source.html | 132 + docs/html/ExtendedKalmanFilter_8cpp.html | 88 + .../ExtendedKalmanFilter_8cpp_source.html | 220 ++ docs/html/ExtendedKalmanFilter_8h.html | 106 + docs/html/ExtendedKalmanFilter_8h_source.html | 149 + docs/html/FilterBase_8h.html | 121 + docs/html/FilterBase_8h_source.html | 130 + docs/html/LQR_8cpp.html | 96 + docs/html/LQR_8cpp_source.html | 142 + docs/html/LQR_8h.html | 188 ++ docs/html/LQR_8h_source.html | 117 + docs/html/LoggerCSV_8h.html | 102 + docs/html/LoggerCSV_8h_source.html | 219 ++ docs/html/PID_8cpp.html | 96 + docs/html/PID_8cpp_source.html | 141 + docs/html/PID_8h.html | 143 + docs/html/PID_8h_source.html | 124 + docs/html/QuadControllerPID_8cpp.html | 96 + docs/html/QuadControllerPID_8cpp_source.html | 135 + docs/html/QuadControllerPID_8h.html | 106 + docs/html/QuadControllerPID_8h_source.html | 123 + docs/html/README_8md.html | 81 + docs/html/SensorBase_8h.html | 122 + docs/html/SensorBase_8h_source.html | 133 + docs/html/StateObserver_8cpp.html | 96 + docs/html/StateObserver_8cpp_source.html | 141 + docs/html/StateObserver_8h.html | 112 + docs/html/StateObserver_8h_source.html | 137 + docs/html/annotated.html | 50 +- .../apriltag__complementary__pid_8cpp.html | 8 +- ...iltag__complementary__pid_8cpp_source.html | 18 +- docs/html/apriltag__ekf__pid_8cpp.html | 8 +- docs/html/apriltag__ekf__pid_8cpp_source.html | 22 +- docs/html/classApriltagLandmarks-members.html | 91 + docs/html/classApriltagLandmarks.html | 322 +++ docs/html/classApriltagLandmarks.png | Bin 0 -> 1206 bytes .../classComplementaryFilter-members.html | 91 + docs/html/classComplementaryFilter.html | 228 ++ docs/html/classComplementaryFilter.png | Bin 0 -> 1050 bytes docs/html/classFilterBase-members.html | 90 + docs/html/classFilterBase.html | 296 ++ docs/html/classFilterBase.png | Bin 0 -> 1636 bytes docs/html/classLoggerCSV-members.html | 91 + docs/html/classLoggerCSV.html | 327 +++ docs/html/classMvn-members.html | 87 + docs/html/classMvn.html | 200 ++ docs/html/classParticleFilter-members.html | 99 + docs/html/classParticleFilter.html | 679 +++++ docs/html/classSensorBase-members.html | 88 + docs/html/classSensorBase.html | 261 ++ docs/html/classSensorBase.png | Bin 0 -> 1806 bytes docs/html/classTagMap-members.html | 85 + docs/html/classTagMap.html | 121 + .../classbebop2_1_1ControlViz-members.html | 93 + docs/html/classbebop2_1_1ControlViz.html | 326 +++ ...classbebop2_1_1ControllerBase-members.html | 104 + docs/html/classbebop2_1_1ControllerBase.html | 534 ++++ docs/html/classbebop2_1_1ControllerBase.png | Bin 0 -> 708 bytes .../classbebop2_1_1DummyState-members.html | 96 + docs/html/classbebop2_1_1DummyState.html | 372 +++ docs/html/classbebop2_1_1DummyState.png | Bin 0 -> 1192 bytes ...ebop2_1_1ExtendedKalmanFilter-members.html | 105 + .../classbebop2_1_1ExtendedKalmanFilter.html | 548 ++++ .../classbebop2_1_1ExtendedKalmanFilter.png | Bin 0 -> 1115 bytes docs/html/classbebop2_1_1LQR-members.html | 89 + docs/html/classbebop2_1_1LQR.html | 123 + docs/html/classbebop2_1_1PID-members.html | 91 + docs/html/classbebop2_1_1PID.html | 239 ++ ...ssbebop2_1_1QuadControllerPID-members.html | 105 + .../classbebop2_1_1QuadControllerPID.html | 267 ++ .../html/classbebop2_1_1QuadControllerPID.png | Bin 0 -> 706 bytes .../classbebop2_1_1StateObserver-members.html | 94 + docs/html/classbebop2_1_1StateObserver.html | 274 ++ docs/html/classes.html | 30 +- docs/html/control_2LQR_2main_8cpp.html | 127 + docs/html/control_2LQR_2main_8cpp_source.html | 97 + .../dir_0b09c446dd7a9edef411ea7168ce1167.html | 10 +- .../dir_26bf0296f6dbe0e6ecc0a36a5bb208c2.html | 8 +- .../dir_2ea520229c6ada27f137f02e0c0cfbe6.html | 6 +- .../dir_4c7c5b2da03ab83c5a6e02623cc1a970.html | 10 +- .../dir_594170da0cc2132ee3c8d450a92c2c42.html | 6 +- .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 6 +- .../dir_6a6894ecb9fdcb13aa4f17f8f07c8338.html | 12 +- .../dir_7ca564011fad3714200192b544070e96.html | 12 +- .../dir_8b1a236cb4f9d64090168ce40b07b07e.html | 6 +- .../dir_8ecd737fac62fc67297553abfd7cdb81.html | 14 +- .../dir_a9b8731acea94fd0b96c5d26e1ae02ac.html | 8 +- .../dir_b664689b4d3943ff523c1250795bca04.html | 8 +- .../dir_c6e5477bcb651b159cfa63982954b7ae.html | 14 +- .../dir_cde68057bc18755c5a523db9c7548a97.html | 12 +- .../dir_d44c64559bbebec7f509842c48db8b23.html | 6 +- .../dir_ddae31c66714fb086f3b96543d9a56f1.html | 8 +- docs/html/doxygen.css | 2 +- docs/html/dummy__ekf__pid_8cpp.html | 8 +- docs/html/dummy__ekf__pid_8cpp_source.html | 22 +- docs/html/files.html | 56 +- docs/html/filters_8h.html | 12 +- docs/html/filters_8h_source.html | 18 +- docs/html/functions.html | 196 +- docs/html/functions_enum.html | 10 +- docs/html/functions_eval.html | 18 +- docs/html/functions_func.html | 124 +- docs/html/functions_rela.html | 12 +- docs/html/functions_vars.html | 68 +- docs/html/globals.html | 24 +- docs/html/globals_defs.html | 20 +- docs/html/globals_func.html | 10 +- docs/html/globals_type.html | 12 +- docs/html/graph_legend.html | 141 + docs/html/graph_legend.md5 | 1 + docs/html/graph_legend.png | Bin 0 -> 20823 bytes docs/html/hierarchy.html | 50 +- docs/html/index.html | 6 +- ...localization_2Filters_2ekf_2main_8cpp.html | 129 + ...ation_2Filters_2ekf_2main_8cpp_source.html | 120 + .../localization_2Filters_2pf_2main_8cpp.html | 119 + ...zation_2Filters_2pf_2main_8cpp_source.html | 126 + docs/html/md_README.html | 93 + ...r_docs_bebop2_controller__r_e_a_d_m_e.html | 93 + docs/html/md__r_e_a_d_m_e.html | 10 +- docs/html/menudata.js | 2 +- docs/html/namespacebebop2.html | 48 +- docs/html/namespacemembers.html | 6 +- docs/html/namespacemembers_enum.html | 8 +- docs/html/namespacemembers_eval.html | 8 +- docs/html/namespacemembers_type.html | 8 +- docs/html/namespacemembers_vars.html | 8 +- docs/html/namespaces.html | 22 +- docs/html/pages.html | 8 +- docs/html/particle__filter_8cpp.html | 6 +- docs/html/particle__filter_8cpp_source.html | 166 +- docs/html/particle__filter_8h.html | 18 +- docs/html/particle__filter_8h_source.html | 180 +- docs/html/robot__defs_8h.html | 12 +- docs/html/robot__defs_8h_source.html | 128 +- docs/html/search/all_0.js | 14 +- docs/html/search/all_1.js | 4 +- docs/html/search/all_10.js | 22 +- docs/html/search/all_11.js | 14 +- docs/html/search/all_12.js | 6 +- docs/html/search/all_13.js | 6 +- docs/html/search/all_14.js | 6 +- docs/html/search/all_15.js | 4 +- docs/html/search/all_16.js | 4 +- docs/html/search/all_17.js | 8 +- docs/html/search/all_2.js | 26 +- docs/html/search/all_3.js | 16 +- docs/html/search/all_4.js | 12 +- docs/html/search/all_5.js | 8 +- docs/html/search/all_6.js | 8 +- docs/html/search/all_7.js | 12 +- docs/html/search/all_8.js | 4 +- docs/html/search/all_9.js | 18 +- docs/html/search/all_a.js | 30 +- docs/html/search/all_b.js | 4 +- docs/html/search/all_c.js | 12 +- docs/html/search/all_d.js | 22 +- docs/html/search/all_e.js | 6 +- docs/html/search/all_f.js | 8 +- docs/html/search/classes_0.js | 2 +- docs/html/search/classes_1.js | 6 +- docs/html/search/classes_2.js | 2 +- docs/html/search/classes_3.js | 2 +- docs/html/search/classes_4.js | 4 +- docs/html/search/classes_5.js | 6 +- docs/html/search/classes_6.js | 4 +- docs/html/search/classes_7.js | 6 +- docs/html/search/classes_8.js | 2 +- docs/html/search/classes_9.js | 2 +- docs/html/search/classes_a.js | 6 +- docs/html/search/classes_b.js | 2 +- docs/html/search/defines_0.js | 2 +- docs/html/search/defines_1.js | 2 +- docs/html/search/defines_2.js | 2 +- docs/html/search/defines_3.js | 4 +- docs/html/search/defines_4.js | 2 +- docs/html/search/enums_0.js | 2 +- docs/html/search/enumvalues_1.js | 2 +- docs/html/search/enumvalues_2.js | 2 +- docs/html/search/enumvalues_4.js | 2 +- docs/html/search/enumvalues_5.js | 2 +- docs/html/search/enumvalues_7.js | 2 +- docs/html/search/files_0.js | 4 +- docs/html/search/files_1.js | 10 +- docs/html/search/files_2.js | 4 +- docs/html/search/files_3.js | 4 +- docs/html/search/files_4.js | 2 +- docs/html/search/files_5.js | 6 +- docs/html/search/files_6.js | 2 +- docs/html/search/files_7.js | 4 +- docs/html/search/files_8.js | 4 +- docs/html/search/files_9.js | 2 +- docs/html/search/files_a.js | 6 +- docs/html/search/functions_0.js | 8 +- docs/html/search/functions_1.js | 12 +- docs/html/search/functions_10.js | 6 +- docs/html/search/functions_11.js | 2 +- docs/html/search/functions_12.js | 8 +- docs/html/search/functions_2.js | 6 +- docs/html/search/functions_3.js | 4 +- docs/html/search/functions_4.js | 2 +- docs/html/search/functions_5.js | 8 +- docs/html/search/functions_6.js | 6 +- docs/html/search/functions_7.js | 4 +- docs/html/search/functions_8.js | 6 +- docs/html/search/functions_9.js | 6 +- docs/html/search/functions_a.js | 10 +- docs/html/search/functions_b.js | 12 +- docs/html/search/functions_c.js | 2 +- docs/html/search/functions_d.js | 2 +- docs/html/search/functions_e.js | 8 +- docs/html/search/functions_f.js | 6 +- docs/html/search/pages_0.js | 2 +- docs/html/search/related_0.js | 2 +- docs/html/search/typedefs_0.js | 2 +- docs/html/search/typedefs_1.js | 2 +- docs/html/search/variables_0.js | 2 +- docs/html/search/variables_1.js | 2 +- docs/html/search/variables_2.js | 4 +- docs/html/search/variables_3.js | 4 +- docs/html/search/variables_4.js | 2 +- docs/html/search/variables_5.js | 18 +- docs/html/search/variables_7.js | 4 +- docs/html/search/variables_8.js | 2 +- docs/html/search/variables_9.js | 2 +- docs/html/search/variables_a.js | 4 +- docs/html/search/variables_b.js | 2 +- docs/html/search/variables_c.js | 6 +- docs/html/search/variables_d.js | 4 +- docs/html/search/variables_e.js | 4 +- docs/html/sensors_8h.html | 12 +- docs/html/sensors_8h_source.html | 18 +- docs/html/structFieldLocation-members.html | 93 + docs/html/structFieldLocation.html | 338 +++ docs/html/structLandmarkObs-members.html | 88 + docs/html/structLandmarkObs.html | 169 ++ .../html/structMarkerObservation-members.html | 89 + docs/html/structMarkerObservation.html | 214 ++ docs/html/structParticle-members.html | 91 + docs/html/structParticle.html | 250 ++ docs/html/structRobotState-members.html | 88 + docs/html/structRobotState.html | 169 ++ ...TagMap_1_1single__landmark__s-members.html | 92 + .../structTagMap_1_1single__landmark__s.html | 173 ++ docs/latex/Makefile | 27 + docs/latex/doxygen.sty | 621 ++++ docs/latex/longtable_doxygen.sty | 448 +++ ...er_docs_bebop2_controller__r_e_a_d_m_e.tex | 14 + docs/latex/md__r_e_a_d_m_e.tex | 14 + docs/latex/refman.tex | 192 ++ docs/latex/tabu_doxygen.sty | 2557 +++++++++++++++++ 268 files changed, 20445 insertions(+), 1095 deletions(-) create mode 100644 docs/html/ApriltagLandmarks_8cpp.html create mode 100644 docs/html/ApriltagLandmarks_8cpp_source.html create mode 100644 docs/html/ApriltagLandmarks_8h.html create mode 100644 docs/html/ApriltagLandmarks_8h_source.html create mode 100644 docs/html/ComplementaryFilter_8h.html create mode 100644 docs/html/ComplementaryFilter_8h_source.html create mode 100644 docs/html/ControlViz_8cpp.html create mode 100644 docs/html/ControlViz_8cpp_source.html create mode 100644 docs/html/ControlViz_8h.html create mode 100644 docs/html/ControlViz_8h_source.html create mode 100644 docs/html/ControllerBase_8cpp.html create mode 100644 docs/html/ControllerBase_8cpp_source.html create mode 100644 docs/html/ControllerBase_8h.html create mode 100644 docs/html/ControllerBase_8h_source.html create mode 100644 docs/html/DummyState_8cpp.html create mode 100644 docs/html/DummyState_8cpp_source.html create mode 100644 docs/html/DummyState_8h.html create mode 100644 docs/html/DummyState_8h_source.html create mode 100644 docs/html/ExtendedKalmanFilter_8cpp.html create mode 100644 docs/html/ExtendedKalmanFilter_8cpp_source.html create mode 100644 docs/html/ExtendedKalmanFilter_8h.html create mode 100644 docs/html/ExtendedKalmanFilter_8h_source.html create mode 100644 docs/html/FilterBase_8h.html create mode 100644 docs/html/FilterBase_8h_source.html create mode 100644 docs/html/LQR_8cpp.html create mode 100644 docs/html/LQR_8cpp_source.html create mode 100644 docs/html/LQR_8h.html create mode 100644 docs/html/LQR_8h_source.html create mode 100644 docs/html/LoggerCSV_8h.html create mode 100644 docs/html/LoggerCSV_8h_source.html create mode 100644 docs/html/PID_8cpp.html create mode 100644 docs/html/PID_8cpp_source.html create mode 100644 docs/html/PID_8h.html create mode 100644 docs/html/PID_8h_source.html create mode 100644 docs/html/QuadControllerPID_8cpp.html create mode 100644 docs/html/QuadControllerPID_8cpp_source.html create mode 100644 docs/html/QuadControllerPID_8h.html create mode 100644 docs/html/QuadControllerPID_8h_source.html create mode 100644 docs/html/README_8md.html create mode 100644 docs/html/SensorBase_8h.html create mode 100644 docs/html/SensorBase_8h_source.html create mode 100644 docs/html/StateObserver_8cpp.html create mode 100644 docs/html/StateObserver_8cpp_source.html create mode 100644 docs/html/StateObserver_8h.html create mode 100644 docs/html/StateObserver_8h_source.html create mode 100644 docs/html/classApriltagLandmarks-members.html create mode 100644 docs/html/classApriltagLandmarks.html create mode 100644 docs/html/classApriltagLandmarks.png create mode 100644 docs/html/classComplementaryFilter-members.html create mode 100644 docs/html/classComplementaryFilter.html create mode 100644 docs/html/classComplementaryFilter.png create mode 100644 docs/html/classFilterBase-members.html create mode 100644 docs/html/classFilterBase.html create mode 100644 docs/html/classFilterBase.png create mode 100644 docs/html/classLoggerCSV-members.html create mode 100644 docs/html/classLoggerCSV.html create mode 100644 docs/html/classMvn-members.html create mode 100644 docs/html/classMvn.html create mode 100644 docs/html/classParticleFilter-members.html create mode 100644 docs/html/classParticleFilter.html create mode 100644 docs/html/classSensorBase-members.html create mode 100644 docs/html/classSensorBase.html create mode 100644 docs/html/classSensorBase.png create mode 100644 docs/html/classTagMap-members.html create mode 100644 docs/html/classTagMap.html create mode 100644 docs/html/classbebop2_1_1ControlViz-members.html create mode 100644 docs/html/classbebop2_1_1ControlViz.html create mode 100644 docs/html/classbebop2_1_1ControllerBase-members.html create mode 100644 docs/html/classbebop2_1_1ControllerBase.html create mode 100644 docs/html/classbebop2_1_1ControllerBase.png create mode 100644 docs/html/classbebop2_1_1DummyState-members.html create mode 100644 docs/html/classbebop2_1_1DummyState.html create mode 100644 docs/html/classbebop2_1_1DummyState.png create mode 100644 docs/html/classbebop2_1_1ExtendedKalmanFilter-members.html create mode 100644 docs/html/classbebop2_1_1ExtendedKalmanFilter.html create mode 100644 docs/html/classbebop2_1_1ExtendedKalmanFilter.png create mode 100644 docs/html/classbebop2_1_1LQR-members.html create mode 100644 docs/html/classbebop2_1_1LQR.html create mode 100644 docs/html/classbebop2_1_1PID-members.html create mode 100644 docs/html/classbebop2_1_1PID.html create mode 100644 docs/html/classbebop2_1_1QuadControllerPID-members.html create mode 100644 docs/html/classbebop2_1_1QuadControllerPID.html create mode 100644 docs/html/classbebop2_1_1QuadControllerPID.png create mode 100644 docs/html/classbebop2_1_1StateObserver-members.html create mode 100644 docs/html/classbebop2_1_1StateObserver.html create mode 100644 docs/html/control_2LQR_2main_8cpp.html create mode 100644 docs/html/control_2LQR_2main_8cpp_source.html create mode 100644 docs/html/graph_legend.html create mode 100644 docs/html/graph_legend.md5 create mode 100644 docs/html/graph_legend.png create mode 100644 docs/html/localization_2Filters_2ekf_2main_8cpp.html create mode 100644 docs/html/localization_2Filters_2ekf_2main_8cpp_source.html create mode 100644 docs/html/localization_2Filters_2pf_2main_8cpp.html create mode 100644 docs/html/localization_2Filters_2pf_2main_8cpp_source.html create mode 100644 docs/html/md_README.html create mode 100644 docs/html/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.html create mode 100644 docs/html/structFieldLocation-members.html create mode 100644 docs/html/structFieldLocation.html create mode 100644 docs/html/structLandmarkObs-members.html create mode 100644 docs/html/structLandmarkObs.html create mode 100644 docs/html/structMarkerObservation-members.html create mode 100644 docs/html/structMarkerObservation.html create mode 100644 docs/html/structParticle-members.html create mode 100644 docs/html/structParticle.html create mode 100644 docs/html/structRobotState-members.html create mode 100644 docs/html/structRobotState.html create mode 100644 docs/html/structTagMap_1_1single__landmark__s-members.html create mode 100644 docs/html/structTagMap_1_1single__landmark__s.html create mode 100644 docs/latex/Makefile create mode 100644 docs/latex/doxygen.sty create mode 100644 docs/latex/longtable_doxygen.sty create mode 100644 docs/latex/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.tex create mode 100644 docs/latex/md__r_e_a_d_m_e.tex create mode 100644 docs/latex/refman.tex create mode 100644 docs/latex/tabu_doxygen.sty diff --git a/docs/html/ApriltagLandmarks_8cpp.html b/docs/html/ApriltagLandmarks_8cpp.html new file mode 100644 index 0000000..bca7908 --- /dev/null +++ b/docs/html/ApriltagLandmarks_8cpp.html @@ -0,0 +1,88 @@ + + + + + + + +airlib: airlib/localization/Sensors/ApriltagLandmarks.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ApriltagLandmarks.cpp File Reference
+
+ + + + + diff --git a/docs/html/ApriltagLandmarks_8cpp_source.html b/docs/html/ApriltagLandmarks_8cpp_source.html new file mode 100644 index 0000000..465aaff --- /dev/null +++ b/docs/html/ApriltagLandmarks_8cpp_source.html @@ -0,0 +1,164 @@ + + + + + + + +airlib: airlib/localization/Sensors/ApriltagLandmarks.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ApriltagLandmarks.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+ +
6
+
7ApriltagLandmarks::ApriltagLandmarks(ros::NodeHandle& nh): nh_(nh) {
+
8
+
9
+
10 std::vector<int>tagIds;
+
11 ros::param::get("~apriltags", tagIds);
+
12 for(auto tagId : tagIds)
+
13 {
+
14 std::string tag_name = "tag" + std::to_string(tagId);
+
15 std::vector<double> value;
+
16 ros::param::get("~" + tag_name, value);
+
17 tf::Transform tagTransform;
+
18 tagTransform.setOrigin(tf::Vector3(value[0], value[1], value[2]));
+
19 landmarks_[tag_name] = tagTransform;
+
20 }
+
21
+
22 apriltagSub_ = nh_.subscribe("/tag_detections", 1, &ApriltagLandmarks::apriltag_callback, this);
+
23 ROS_INFO_STREAM("[ApriltagLandmarks] initialized");
+
24}
+
25
+
26
+
27
+
28void
+
29ApriltagLandmarks::apriltag_callback(const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg) {
+
30
+
31// ROS_INFO_STREAM(*msg);
+
32 for(auto detection: msg->detections)
+
33 {
+
34 std::string tagName = "tag" + std::to_string(detection.id[0]);
+
35 auto pose = detection.pose.pose.pose;
+
36 tf::Transform tagTransform;
+
37 tagTransform.setOrigin(tf::Vector3(pose.position.x, pose.position.y, pose.position.z));
+
38 tagTransform.setRotation(tf::Quaternion(pose.orientation.x, pose.orientation.y, pose.orientation.z, pose.orientation.w));
+
39 auto position = transformToGlobalFrame(tagTransform, tagName);
+
40 measurements_.push({position.x, position.y, position.z, 0});
+
41// ROS_INFO_STREAM("[ApriltagLandmarks] mes size" << measurements_.size());
+
42 }
+
43
+
44}
+
45
+
46FieldLocation ApriltagLandmarks::transformToGlobalFrame(const tf::Transform &tagTransform, const std::string &tagName) {
+
47 // https://visp-doc.inria.fr/doxygen/visp-daily/tutorial-bebop2-vs.html
+
48 // https://www.andre-gaschler.com/rotationconverter/
+
49
+
50 tf::Transform endEffector;
+
51 // convert camera to base_link which is a fixed coordinate and given as follows
+
52 endEffector.setOrigin(tf::Vector3(-0.09, 0, 0));
+
53 endEffector.setRotation(tf::Quaternion(0.5, -0.5, 0.5, -0.5));
+
54 tf::Transform baseLink = endEffector * tagTransform;
+
55 // convert base_link to map coordinate
+
56 auto loc = landmarks_[tagName].getOrigin() - baseLink.getOrigin();
+
57 FieldLocation tagStateObs = FieldLocation{tagName, loc.x(), loc.y(), loc.z()};
+
58
+
59 return tagStateObs;
+
60}
+
61
+
62
+
63void ApriltagLandmarks::operator()(std::vector<double>& result){
+
64 result = measurements_.front();
+
65 measurements_.pop();
+
66}
+
67
+ +
69 return measurements_.empty();
+
70}
+
71
+ +
void operator()(std::vector< double > &result)
This is an interface to access to the internal state vector so that other modules can do their comput...
+
ApriltagLandmarks(ros::NodeHandle &nh)
This class compute the robot coordinate from stationary tags. There are three stationary apriltags lo...
+
void apriltag_callback(const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg)
Given a array of detected tags, here we calculate robot global coordinate with respect to each tag....
+
bool empty()
This is an interface to check whether internal state vector is empty or not so that we can safely rea...
+
FieldLocation transformToGlobalFrame(const tf::Transform &tagTransform, const std::string &tagName)
tag is detected with respect to camera frame which needs to be transformed to global frame through ca...
+ + +
+ + + + diff --git a/docs/html/ApriltagLandmarks_8h.html b/docs/html/ApriltagLandmarks_8h.html new file mode 100644 index 0000000..e623f39 --- /dev/null +++ b/docs/html/ApriltagLandmarks_8h.html @@ -0,0 +1,105 @@ + + + + + + + +airlib: include/airlib/localization/Sensors/ApriltagLandmarks.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ApriltagLandmarks.h File Reference
+
+
+
#include <memory>
+#include <unordered_map>
+#include <ros/ros.h>
+#include <tf/transform_listener.h>
+#include "airlib/robot_defs.h"
+#include <apriltag_ros/AprilTagDetectionArray.h>
+#include <geometry_msgs/PoseWithCovarianceStamped.h>
+#include <nav_msgs/Odometry.h>
+#include <queue>
+#include "SensorBase.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ApriltagLandmarks
 
+
+ + + + diff --git a/docs/html/ApriltagLandmarks_8h_source.html b/docs/html/ApriltagLandmarks_8h_source.html new file mode 100644 index 0000000..f0d0ed3 --- /dev/null +++ b/docs/html/ApriltagLandmarks_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + +airlib: include/airlib/localization/Sensors/ApriltagLandmarks.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ApriltagLandmarks.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+
5#ifndef airlib_APRILTAGLANDMARKS_H
+
6#define airlib_APRILTAGLANDMARKS_H
+
7#include <memory>
+
8#include <unordered_map>
+
9#include <ros/ros.h>
+
10#include <tf/transform_listener.h>
+
11#include "airlib/robot_defs.h"
+
12#include <apriltag_ros/AprilTagDetectionArray.h>
+
13#include <geometry_msgs/PoseWithCovarianceStamped.h>
+
14#include <nav_msgs/Odometry.h>
+
15
+
16#include <queue>
+
17#include "SensorBase.h"
+ +
31public:
+
32 ApriltagLandmarks(ros::NodeHandle& nh);
+
33 void operator()(std::vector<double>& result);
+
34 bool empty();
+
35
+
36private:
+
38 std::unordered_map<std::string, tf::Transform> landmarks_;
+
40 ros::Subscriber apriltagSub_;
+
42 ros::NodeHandle nh_;
+
44 std::queue<std::vector<double>> measurements_;
+
45
+
46protected:
+
54 void apriltag_callback(const apriltag_ros::AprilTagDetectionArray::ConstPtr& msg);
+
60 FieldLocation transformToGlobalFrame(const tf::Transform& tagTransform, const std::string& tagName);
+
61
+
62
+
63};
+
64
+
65
+
66#endif //airlib_APRILTAGLANDMARKS_H
+ + +
void operator()(std::vector< double > &result)
This is an interface to access to the internal state vector so that other modules can do their comput...
+
void apriltag_callback(const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg)
Given a array of detected tags, here we calculate robot global coordinate with respect to each tag....
+
bool empty()
This is an interface to check whether internal state vector is empty or not so that we can safely rea...
+
FieldLocation transformToGlobalFrame(const tf::Transform &tagTransform, const std::string &tagName)
tag is detected with respect to camera frame which needs to be transformed to global frame through ca...
+ + + +
+ + + + diff --git a/docs/html/ComplementaryFilter_8h.html b/docs/html/ComplementaryFilter_8h.html new file mode 100644 index 0000000..8334a13 --- /dev/null +++ b/docs/html/ComplementaryFilter_8h.html @@ -0,0 +1,97 @@ + + + + + + + +airlib: include/airlib/localization/Filters/ComplementaryFilter.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ComplementaryFilter.h File Reference
+
+
+
#include <vector>
+#include "FilterBase.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ComplementaryFilter
 
+
+ + + + diff --git a/docs/html/ComplementaryFilter_8h_source.html b/docs/html/ComplementaryFilter_8h_source.html new file mode 100644 index 0000000..98e644d --- /dev/null +++ b/docs/html/ComplementaryFilter_8h_source.html @@ -0,0 +1,128 @@ + + + + + + + +airlib: include/airlib/localization/Filters/ComplementaryFilter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ComplementaryFilter.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+
5#ifndef BEBOP2_CONTROLLER_COMPLEMENTARYFILTER_H
+
6#define BEBOP2_CONTROLLER_COMPLEMENTARYFILTER_H
+
7#include <vector>
+
8#include "FilterBase.h"
+
9
+ +
11public:
+
12 ComplementaryFilter(double alpha): m_alpha(alpha)
+
13 {
+
14
+
15 }
+
16
+
17 void init(const std::vector<double>& X0)
+
18 {
+
19 X_.clear();
+
20 std::copy(X0.begin(), X0.end(), std::back_inserter(X_));
+
21 }
+
22 void update(const std::vector<double>& obs, std::vector<double>& result)
+
23 {
+
24
+
25 for (int i = 0; i < obs.size(); ++i) {
+
26 X_[i] = m_alpha * X_[i] + (1 - m_alpha) * obs[i];
+
27 }
+
28 result.clear();
+
29 std::copy(X_.begin(), X_.end(),std::back_inserter(result));
+
30 }
+
31private:
+
32 double m_alpha;
+
33};
+
34
+
35
+
36#endif //BEBOP2_CONTROLLER_COMPLEMENTARYFILTER_H
+ + +
ComplementaryFilter(double alpha)
+
void update(const std::vector< double > &obs, std::vector< double > &result)
+
void init(const std::vector< double > &X0)
+ +
std::vector< double > X_
Definition: FilterBase.h:33
+
+ + + + diff --git a/docs/html/ControlViz_8cpp.html b/docs/html/ControlViz_8cpp.html new file mode 100644 index 0000000..fba22ea --- /dev/null +++ b/docs/html/ControlViz_8cpp.html @@ -0,0 +1,96 @@ + + + + + + + +airlib: airlib/control/ControlViz.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ControlViz.cpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/ControlViz_8cpp_source.html b/docs/html/ControlViz_8cpp_source.html new file mode 100644 index 0000000..12b8aae --- /dev/null +++ b/docs/html/ControlViz_8cpp_source.html @@ -0,0 +1,217 @@ + + + + + + + +airlib: airlib/control/ControlViz.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ControlViz.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/14/22.
+
3//
+
4
+ +
6
+
7namespace bebop2 {
+
8 ControlViz::ControlViz( ros::NodeHandle &nh) : nh_(nh) {
+
9 pub_marker_ = nh_.advertise<visualization_msgs::Marker>("/bebop2/goal", 10);
+
10 std::vector<std::string>header{"x", "y", "z", "yaw"};
+
11 logger_ = std::make_unique<LoggerCSV>(header, _FQ);
+
12 }
+
13
+
14
+
15
+
16 void ControlViz::set_marker_from_pose(const tf::Transform &pose, visualization_msgs::Marker &msg) {
+
17 msg.header.frame_id = "map";
+
18 msg.ns = "target";
+
19 msg.header.stamp = ros::Time::now();
+
20 msg.action = visualization_msgs::Marker::ADD;
+
21
+
22
+
23 msg.scale.x = 0.35;
+
24 msg.scale.y = 0.35;
+
25 msg.scale.z = 0.35;
+
26
+
27 // update position
+
28 double x, y, z, yaw;
+
29 msg.pose.position.x = x = pose.getOrigin().x();
+
30 msg.pose.position.y = y = pose.getOrigin().y();
+
31 msg.pose.position.z = z = pose.getOrigin().z();
+
32
+
33 // update orientation
+
34 msg.pose.orientation.x = pose.getRotation().x();
+
35 msg.pose.orientation.y = pose.getRotation().y();
+
36 msg.pose.orientation.z = pose.getRotation().z();
+
37 msg.pose.orientation.w = pose.getRotation().w();
+
38
+
39 yaw = tf::getYaw(pose.getRotation());
+
40 //TODO add logger enable flag
+
41 logger_->addRow(std::vector<double>{x, y, z, yaw});
+
42
+
43 }
+
44
+
45 void ControlViz::set_marker_color(const MARKER_COLOR &color, visualization_msgs::Marker &msg) {
+
46 switch (color) {
+
47 case RED:
+
48 {
+
49 msg.color.a = 0.5;
+
50 msg.color.r = 1;
+
51 break;
+
52 }
+
53 case GREEN:
+
54 {
+
55 msg.color.a = 0.5;
+
56 msg.color.g = 1;
+
57 break;
+
58 }
+
59 case BLUE:
+
60 {
+
61 msg.color.a = 0.5;
+
62 msg.color.b = 1;
+
63 break;
+
64 }
+
65 case YELLOW:
+
66 {
+
67 msg.color.a = 0.5;
+
68 msg.color.r = 1;
+
69 msg.color.g = 1;
+
70 break;
+
71 }
+
72 case CYAN:
+
73 {
+
74 msg.color.a = 0.5;
+
75 msg.color.b = 1;
+
76 msg.color.g = 1;
+
77 break;
+
78 }
+
79 case GRAY:
+
80 {
+
81 msg.color.a = 0.5;
+
82 msg.color.r = 0.67;
+
83 msg.color.b = 0.67;
+
84 msg.color.g = 0.67;
+
85 break;
+
86 }
+
87 }
+
88
+
89 }
+
90
+
91 void ControlViz::update(const tf::Transform &pose, const MARKER_COLOR& color) {
+
92 visualization_msgs::Marker msg;
+
93 set_marker_from_pose(pose, msg);
+
94 set_marker_color(color, msg);
+
95 msg.type = visualization_msgs::Marker::SPHERE;
+
96
+
97 pub_marker_.publish(msg);
+
98
+
99 }
+
100
+
101 void ControlViz::setDrone(const tf::Transform &pose) {
+
102
+
103 visualization_msgs::Marker msg;
+
104 set_marker_from_pose(pose, msg);
+
105 msg.ns = "drone";
+
106 msg.type = visualization_msgs::Marker::MESH_RESOURCE;
+
107 msg.mesh_resource = "package://airlib/config/bebop.dae";
+
108// msg.mesh_use_embedded_materials = true;
+
109 msg.scale.x = msg.scale.y = msg.scale.z = 0.001;
+
110
+ +
112 msg.color.a = 1.0;
+
113 msg.id = 101;
+
114
+
115 pub_marker_.publish(msg);
+
116
+
117 }
+
118} // bebop2
+ +
void set_marker_color(const MARKER_COLOR &color, visualization_msgs::Marker &msg)
sets different colors for different flights and paths of the drone for better understanding.
Definition: ControlViz.cpp:45
+
ControlViz(ros::NodeHandle &nh)
Publishes messages through /bebop2/goal topic.
Definition: ControlViz.cpp:8
+
void setDrone(const tf::Transform &pose)
This function starts and slightly lifts the drone. As a result sets the Marker from the pose paramete...
Definition: ControlViz.cpp:101
+
void set_marker_from_pose(const tf::Transform &pose, visualization_msgs::Marker &msg)
Receives the current position of the drone and uses that position to populate the point position and ...
Definition: ControlViz.cpp:16
+
void update(const tf::Transform &pose, const MARKER_COLOR &color)
This functions updates the path and the color of the path of the robot. It also publishes the message...
Definition: ControlViz.cpp:91
+ +
MARKER_COLOR
Definition: ControlViz.h:15
+
@ BLUE
Definition: ControlViz.h:18
+
@ GRAY
Definition: ControlViz.h:21
+
@ CYAN
Definition: ControlViz.h:19
+
@ YELLOW
Definition: ControlViz.h:20
+
@ GREEN
Definition: ControlViz.h:17
+ +
+ + + + diff --git a/docs/html/ControlViz_8h.html b/docs/html/ControlViz_8h.html new file mode 100644 index 0000000..0ba5350 --- /dev/null +++ b/docs/html/ControlViz_8h.html @@ -0,0 +1,122 @@ + + + + + + + +airlib: include/airlib/control/ControlViz.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ControlViz.h File Reference
+
+
+
#include <ros/ros.h>
+#include <memory>
+#include <visualization_msgs/Marker.h>
+#include <tf/transform_broadcaster.h>
+#include "airlib/utility/LoggerCSV.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  bebop2::ControlViz
 This class helps in the 3D visualization of data being rendered. It receives the updated position and orientation of the drone and sends points and lines to a graphical interface. Hence, visualizes the movement, position, orientation and behaviors of the drone. More...
 
+ + + +

+Namespaces

namespace  bebop2
 
+ + + +

+Enumerations

enum  bebop2::MARKER_COLOR {
+  bebop2::RED +, bebop2::GREEN +, bebop2::BLUE +, bebop2::CYAN +,
+  bebop2::YELLOW +, bebop2::GRAY +
+ }
 
+
+ + + + diff --git a/docs/html/ControlViz_8h_source.html b/docs/html/ControlViz_8h_source.html new file mode 100644 index 0000000..ec0ffd4 --- /dev/null +++ b/docs/html/ControlViz_8h_source.html @@ -0,0 +1,143 @@ + + + + + + + +airlib: include/airlib/control/ControlViz.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ControlViz.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/14/22.
+
3//
+
4
+
5#ifndef BEBOP2_CONTROLLER_CONTROLVIZ_H
+
6#define BEBOP2_CONTROLLER_CONTROLVIZ_H
+
7#include <ros/ros.h>
+
8#include <memory>
+
9#include <visualization_msgs/Marker.h>
+
10#include <tf/transform_broadcaster.h>
+ +
12
+
13namespace bebop2 {
+ +
15 {
+ + + + + +
21 GRAY
+
22 };
+
25 class ControlViz {
+
26 public:
+
32 explicit ControlViz( ros::NodeHandle &nh);
+
40 void setDrone(const tf::Transform& pose);
+
50 void update(const tf::Transform& pose, const MARKER_COLOR& color);
+
51
+
52 private:
+
54 ros::NodeHandle nh_;
+
56 ros::Publisher pub_marker_;
+
57 std::unique_ptr<LoggerCSV> logger_;
+
58 const int LOGGER_FQ = 10; // Hz
+
59
+
60 protected:
+
67 void set_marker_from_pose(const tf::Transform& pose, visualization_msgs::Marker& msg);
+
73 void set_marker_color(const MARKER_COLOR& color, visualization_msgs::Marker& msg);
+
74
+
75
+
76 };
+
77
+
78} // bebop2
+
79
+
80#endif //BEBOP2_CONTROLLER_CONTROLVIZ_H
+ +
This class helps in the 3D visualization of data being rendered. It receives the updated position and...
Definition: ControlViz.h:25
+
void set_marker_color(const MARKER_COLOR &color, visualization_msgs::Marker &msg)
sets different colors for different flights and paths of the drone for better understanding.
Definition: ControlViz.cpp:45
+
void setDrone(const tf::Transform &pose)
This function starts and slightly lifts the drone. As a result sets the Marker from the pose paramete...
Definition: ControlViz.cpp:101
+
void set_marker_from_pose(const tf::Transform &pose, visualization_msgs::Marker &msg)
Receives the current position of the drone and uses that position to populate the point position and ...
Definition: ControlViz.cpp:16
+
void update(const tf::Transform &pose, const MARKER_COLOR &color)
This functions updates the path and the color of the path of the robot. It also publishes the message...
Definition: ControlViz.cpp:91
+ +
MARKER_COLOR
Definition: ControlViz.h:15
+
@ BLUE
Definition: ControlViz.h:18
+
@ GRAY
Definition: ControlViz.h:21
+
@ CYAN
Definition: ControlViz.h:19
+
@ YELLOW
Definition: ControlViz.h:20
+
@ GREEN
Definition: ControlViz.h:17
+ +
+ + + + diff --git a/docs/html/ControllerBase_8cpp.html b/docs/html/ControllerBase_8cpp.html new file mode 100644 index 0000000..a8903be --- /dev/null +++ b/docs/html/ControllerBase_8cpp.html @@ -0,0 +1,98 @@ + + + + + + + +airlib: airlib/control/ControllerBase.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ControllerBase.cpp File Reference
+
+
+
#include <numeric>
+#include <utility>
+#include "airlib/control/ControllerBase.h"
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/ControllerBase_8cpp_source.html b/docs/html/ControllerBase_8cpp_source.html new file mode 100644 index 0000000..4ece7c0 --- /dev/null +++ b/docs/html/ControllerBase_8cpp_source.html @@ -0,0 +1,295 @@ + + + + + + + +airlib: airlib/control/ControllerBase.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ControllerBase.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+
5#include <numeric>
+
6#include <utility>
+ +
8
+
9namespace bebop2
+
10{
+
11
+
12 ControllerBase::ControllerBase(StateObserverPtr mGetState, ros::NodeHandle& nh) :
+
13 m_get_state(mGetState), m_nh(nh) {
+
14
+
15 ros::param::get("~dt", dt_);
+
16 ros::param::get("~goal_thres", m_goal_thres);
+
17
+
18 joystick_sub_ = m_nh.subscribe("/joy", 10, &bebop2::ControllerBase::joystick_callback, this)
+
19 drone_takeoff_pub_ = m_nh.advertise<std_msgs::Empty>("takeoff", 1);
+
20 drone_land_pub_ = m_nh.advertise<std_msgs::Empty>("land", 1);
+
21 cmd_vel_pub_ = m_nh.advertise<geometry_msgs::Twist>("cmd_vel", 1);
+
22 joystick_timer_ = m_nh.createTimer(ros::Duration(0.05), &bebop2::ControllerBase::joystick_timer_callback, this);
+
23 controller_timer_ = m_nh.createTimer(ros::Duration(dt_), &bebop2::ControllerBase::control_loop, this);
+
24 viz_ = std::make_unique<ControlViz>(m_nh);
+ +
26
+
27 }
+
28
+
29
+
30 void ControllerBase::joystick_callback(const sensor_msgs::Joy_<std::allocator<void>>::ConstPtr &msg) {
+
31
+
32 std::lock_guard<std::mutex> lk(m_mu);
+
33 auto it = std::find(msg->buttons.begin(), msg->buttons.end(), 1);
+
34 if(it != msg->buttons.end())
+
35 {
+
36 int index = std::distance(msg->buttons.begin(), it);
+
37 m_buttonState = static_cast<ButtonState>(index);
+
38
+
39 std_msgs::Empty empty;
+
40
+ +
42 {
+
43 drone_takeoff_pub_.publish(empty);
+
44 ROS_INFO("[Button] pressed = %d -> TAKE OFF", m_buttonState);
+ +
46 }
+
47
+
48 if(m_buttonState == LAND)
+
49 {
+
50 drone_land_pub_.publish(empty);
+
51 ROS_INFO("[Button] pressed = %d -> LAND", m_buttonState);
+
52 }
+
53
+
54
+
55 if(!setPoints_.empty())
+
56 {
+
57 auto pose = getStateVecToTransform(setPoints_);
+
58 switch (m_buttonState) {
+
59 case TAKEOFF: viz_->update(pose, GREEN); break;
+
60 case IDLE: viz_->update(pose, BLUE); break;
+
61 case ENGAGE: viz_->update(pose, YELLOW); break;
+
62 case CONTROL: viz_->update(pose, CYAN); break;
+
63 case LAND: viz_->update(pose, RED); break;
+
64 }
+
65 }
+
66
+
67 }
+
68 axes_values_.clear();
+
69 std::copy(msg->axes.begin(), msg->axes.end(), std::back_inserter(axes_values_));
+
70
+
71 }
+
72
+
73
+
74 void ControllerBase::joystick_timer_callback(const ros::TimerEvent &event) {
+
75 if(axes_values_.empty() || std::accumulate(axes_values_.begin(), axes_values_.end(), 0.0) == 0.0)
+
76 return;
+
77
+
78 auto filter = [&](float val){
+
79 float sign = val >= 0 ? 1 : -1;
+
80 return abs(val) > DEAD_ZONE ? sign * STEP_INCR : 0;
+
81 };
+
82
+
83 float dz = filter(axes_values_[Z_AXIS_INDEX]);
+
84 float dx = filter(axes_values_[X_AXIS_INDEX]);
+
85 float dy = filter(axes_values_[Y_AXIS_INDEX]);
+
86
+
87 // update_setpoint with (dx, dy, dz);
+
88 if(!setPoints_.empty())
+
89 { setPoints_[0] += dx;
+
90 setPoints_[1] += dy;
+
91 setPoints_[2] += dz;
+
92
+
93 auto pose = getStateVecToTransform(setPoints_);
+
94 switch (m_buttonState) {
+
95 case TAKEOFF: viz_->update(pose, GREEN); break;
+
96 case IDLE: viz_->update(pose, BLUE); break;
+
97 case ENGAGE: viz_->update(pose, YELLOW); break;
+
98 case CONTROL: viz_->update(pose, CYAN); break;
+
99 case LAND: viz_->update(pose, RED); break;
+
100 }
+
101 }
+
102
+
103 }
+
104
+
105
+
106
+
107
+
108
+
109 void ControllerBase::control_loop(const ros::TimerEvent &event) {
+
110 std::vector<double> state;
+
111 m_get_state->operator()(state);
+
112// ROS_INFO_STREAM("[ControllerBase] state size" << state.size());
+
113 if(state.empty())
+
114 return;
+
115
+
116 if(m_buttonState == ENGAGE)
+
117 {
+
118 // set setpoint at current position
+
119 setPoints_.clear();
+
120 std::copy(state.begin(), state.end(), std::back_inserter(setPoints_));
+
121
+
122 }
+
123 else if(m_buttonState == CONTROL)
+
124 {
+
125 if(goal_distance(state, setPoints_) > m_goal_thres)
+
126 {
+
127 // actively control position
+
128 std::vector<double>U(NUM_CONTROLS);
+
129 compute_control(state, setPoints_, U);
+
130 ROS_INFO("[PositionController] vx = %lf, vy = %lf, vz = %lf", U[0], U[1], U[2]);
+ +
132 }
+
133
+
134 }
+
135
+
136 // show drone
+
137 auto transform = getStateVecToTransform(state);
+
138 viz_->setDrone(transform);
+
139
+
140 }
+
141
+
142
+
143
+
144 void ControllerBase::publish_cmd_vel(const std::vector<double> &U) {
+
145
+
146 std::lock_guard<std::mutex> lk(m_mu);
+
147 assert(U.size() == 4 && "4 commands must be sent");
+
148 geometry_msgs::Twist msg;
+
149
+
150 msg.linear.x = U[0];
+
151 msg.linear.y = U[1];
+
152 msg.linear.z = U[2];
+
153 msg.angular.z = U[3];
+
154 cmd_vel_pub_.publish(msg);
+
155
+
156 }
+
157
+
158
+
159 double ControllerBase::goal_distance(const std::vector<double> &X, const std::vector<double> &setPoints) {
+
160 double error = 0;
+
161 for (int i = 0; i < X.size(); ++i) {
+
162 double e = X[i] - setPoints[i];
+
163 error += e * e;
+
164 }
+
165 return sqrt(error);
+
166 }
+
167
+
168
+
169
+
170 tf::Transform ControllerBase::getStateVecToTransform(const std::vector<double> &state) {
+
171 tf::Transform pose;
+
172 tf::Quaternion q;
+
173 q.setRPY(0, 0, state[3]);
+
174 pose.setOrigin(tf::Vector3(state[0], state[1], state[2]));
+
175 pose.setRotation(q);
+
176 return pose;
+
177 }
+
178
+
179
+
180}
+ +
virtual void compute_control(const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control)=0
+
double dt_
Sample Time.
+
double m_goal_thres
Goal region threshold.
+
std::mutex m_mu
Locks some functions for safe operations.
+
enum bebop2::ControllerBase::ButtonState m_buttonState
+
void publish_cmd_vel(const std::vector< double > &U)
This function sets the linear positon of the drone to all 3 linear axes and to angula z-axis and publ...
+
ButtonState
Applications applied to control the state of the robot using Joystick controller.
+
@ TAKEOFF
Drone will takeoff from the ground.
+
@ IDLE
Setpoint can be freely moved with joystick. Sphere color blue.
+
@ LAND
Drone will land.
+
@ CONTROL
Start PID controller for the current setpoint. Sphere color cyan.
+
@ ENGAGE
Set current location as a set point (for hover). Sphere color yellow.
+
double goal_distance(const std::vector< double > &X, const std::vector< double > &setPoints)
This function calculates the distance between the setpoint of the drone and the current state positio...
+
ros::NodeHandle m_nh
This ROS Handle attribute is used to create various publishers and subscribers which also deals with ...
+
ControllerBase(StateObserverPtr mGetState, ros::NodeHandle &nh)
Subscribes to sensor_msgs/joy which reports the state of a joystick's axes and buttons....
+
StateObserverPtr m_get_state
This attribute gives the state of the robot.
+ +
const int X_AXIS_INDEX
+
const float STEP_INCR
+
@ BLUE
Definition: ControlViz.h:18
+
@ CYAN
Definition: ControlViz.h:19
+
@ YELLOW
Definition: ControlViz.h:20
+
@ GREEN
Definition: ControlViz.h:17
+ +
const float DEAD_ZONE
+
const int Z_AXIS_INDEX
+
std::shared_ptr< StateObserver > StateObserverPtr
Definition: StateObserver.h:16
+
const int Y_AXIS_INDEX
+
const int NUM_CONTROLS
+
+ + + + diff --git a/docs/html/ControllerBase_8h.html b/docs/html/ControllerBase_8h.html new file mode 100644 index 0000000..6118c82 --- /dev/null +++ b/docs/html/ControllerBase_8h.html @@ -0,0 +1,129 @@ + + + + + + + +airlib: include/airlib/control/ControllerBase.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ControllerBase.h File Reference
+
+
+
#include <ros/ros.h>
+#include "sensor_msgs/Joy.h"
+#include "std_msgs/Empty.h"
+#include <mutex>
+#include <memory>
+#include <geometry_msgs/Twist.h>
+#include <cassert>
+#include <functional>
+#include <algorithm>
+#include "airlib/control/ControlViz.h"
+#include "airlib/localization/StateObserver.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  bebop2::ControllerBase
 Responsible to control the position, state and rotation of the drone and also provides the code to make the robot hover. It publishes the takeoff, landing commands along with the current position of the drone and the state of the axes and buttons of the joystick controller. It also updates the state of the robot in RVIZ which is used for visaulation. More...
 
+ + + +

+Namespaces

namespace  bebop2
 
+ + + + + + + + + + + + + +

+Variables

const float bebop2::STEP_INCR = 0.02
 
const float bebop2::DEAD_ZONE = 0.3
 
const int bebop2::X_AXIS_INDEX = 3
 
const int bebop2::Y_AXIS_INDEX = 2
 
const int bebop2::Z_AXIS_INDEX = 5
 
const int bebop2::NUM_CONTROLS = 4
 
+
+ + + + diff --git a/docs/html/ControllerBase_8h_source.html b/docs/html/ControllerBase_8h_source.html new file mode 100644 index 0000000..6d3a354 --- /dev/null +++ b/docs/html/ControllerBase_8h_source.html @@ -0,0 +1,189 @@ + + + + + + + +airlib: include/airlib/control/ControllerBase.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ControllerBase.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
16#ifndef airlib_CONTROLLERBASE_H
+
17#define airlib_CONTROLLERBASE_H
+
18#include <ros/ros.h>
+
19#include "sensor_msgs/Joy.h"
+
20#include "std_msgs/Empty.h"
+
21#include <mutex>
+
22#include <memory>
+
23#include <geometry_msgs/Twist.h>
+
24#include <cassert>
+
25#include <functional>
+
26#include <algorithm>
+ +
28
+ +
30
+
31
+
32namespace bebop2
+
33{
+
34 const float STEP_INCR = 0.02;
+
35 const float DEAD_ZONE = 0.3;
+
36 const int X_AXIS_INDEX = 3;
+
37 const int Y_AXIS_INDEX = 2;
+
38 const int Z_AXIS_INDEX = 5;
+
39 const int NUM_CONTROLS = 4;
+
40
+
41
+
42
+ +
48 public:
+
56 explicit ControllerBase(StateObserverPtr mGetState, ros::NodeHandle& nh);
+
57
+
58
+
59 private:
+
61 std::vector<float>axes_values_;
+
64 ros::Timer joystick_timer_;
+
66 ros::Timer controller_timer_;
+
68 std::unique_ptr<ControlViz> viz_;
+
70 ros::Subscriber joystick_sub_;
+
72 ros::Publisher drone_takeoff_pub_, drone_land_pub_,cmd_vel_pub_;
+
73 std::vector<double> setPoints_;
+
74 protected:
+
76 ros::NodeHandle m_nh;
+
78 std::mutex m_mu;
+ +
82 IDLE = 0,
+ + + +
90 CONTROL
+ +
92
+ +
95
+
96 // controller parameters.
+
98 double dt_;
+ +
101
+
102
+
103
+
104 private:
+
109 void joystick_callback(const sensor_msgs::Joy::ConstPtr& msg);
+
114 void joystick_timer_callback(const ros::TimerEvent& event);
+
116 void control_loop(const ros::TimerEvent& event);
+
120 tf::Transform getStateVecToTransform(const std::vector<double>& state);
+
121
+
122 protected:
+
125 void publish_cmd_vel(const std::vector<double>&U);
+
130 double goal_distance(const std::vector<double>& X, const std::vector<double>& setPoints);
+
131 virtual void compute_control(const std::vector<double>& X, const std::vector<double>& setPoints, std::vector<double>& control) = 0;
+
132
+
133 };
+
134}
+
135
+
136
+
137#endif //airlib_CONTROLLERBASE_H
+ + +
Responsible to control the position, state and rotation of the drone and also provides the code to ma...
+
virtual void compute_control(const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control)=0
+
double dt_
Sample Time.
+
double m_goal_thres
Goal region threshold.
+
std::mutex m_mu
Locks some functions for safe operations.
+
enum bebop2::ControllerBase::ButtonState m_buttonState
+
void publish_cmd_vel(const std::vector< double > &U)
This function sets the linear positon of the drone to all 3 linear axes and to angula z-axis and publ...
+
ButtonState
Applications applied to control the state of the robot using Joystick controller.
+
@ TAKEOFF
Drone will takeoff from the ground.
+
@ IDLE
Setpoint can be freely moved with joystick. Sphere color blue.
+
@ LAND
Drone will land.
+
@ CONTROL
Start PID controller for the current setpoint. Sphere color cyan.
+
@ ENGAGE
Set current location as a set point (for hover). Sphere color yellow.
+
double goal_distance(const std::vector< double > &X, const std::vector< double > &setPoints)
This function calculates the distance between the setpoint of the drone and the current state positio...
+
ros::NodeHandle m_nh
This ROS Handle attribute is used to create various publishers and subscribers which also deals with ...
+
StateObserverPtr m_get_state
This attribute gives the state of the robot.
+ +
const int X_AXIS_INDEX
+
const float STEP_INCR
+
const float DEAD_ZONE
+
const int Z_AXIS_INDEX
+
std::shared_ptr< StateObserver > StateObserverPtr
Definition: StateObserver.h:16
+
const int Y_AXIS_INDEX
+
const int NUM_CONTROLS
+
+ + + + diff --git a/docs/html/DummyState_8cpp.html b/docs/html/DummyState_8cpp.html new file mode 100644 index 0000000..4757600 --- /dev/null +++ b/docs/html/DummyState_8cpp.html @@ -0,0 +1,96 @@ + + + + + + + +airlib: airlib/localization/Sensors/DummyState.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
DummyState.cpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/DummyState_8cpp_source.html b/docs/html/DummyState_8cpp_source.html new file mode 100644 index 0000000..428a575 --- /dev/null +++ b/docs/html/DummyState_8cpp_source.html @@ -0,0 +1,153 @@ + + + + + + + +airlib: airlib/localization/Sensors/DummyState.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
DummyState.cpp
+
+
+Go to the documentation of this file.
+
2
+
3
+
4namespace bebop2
+
5{
+
6 DummyState::DummyState(ros::NodeHandle& nh, bool noisy_reading):nh_(nh), noisy_reading_(noisy_reading)
+
7 {
+
8 states_.resize(STATE_DIM);
+
9 std::fill(states_.begin(), states_.end(), 0.0);
+
10
+
11 sub_takeoff_ = nh_.subscribe("takeoff", 10, &DummyState::takeoff_callback, this);
+
12 sub_land_ = nh_.subscribe("land", 10, &DummyState::land_callback, this);
+
13 sub_cmd_vel_ = nh_.subscribe("cmd_vel", 1, &DummyState::cmd_vel_callback, this);
+
14 }
+
15
+
16 void DummyState::operator()(std::vector<double>& state)
+
17 {
+
18 state.clear();
+
19 std::copy(states_.begin(), states_.end(), std::back_inserter(state));
+
20
+
21 // don't add noise if noisy_reading is not enabled
+
22 if(!noisy_reading_)
+
23 return;
+
24
+
25 // add gaussian white noise for simulating a realistic measurement
+
26 std::normal_distribution<double> disturbance(0.0, sqrt(NOISE));
+
27 //focus on x, y coordinates only. Later tune it for all 4 axes
+
28 for(std::size_t i=0; i<state.size() - 2; ++i)
+
29 state[i] += disturbance(rd_);
+
30
+
31 }
+
32
+ +
34 {
+
35 return states_.empty();
+
36 }
+
37
+
38 void DummyState::takeoff_callback(const std_msgs::Empty::ConstPtr& msg)
+
39 {
+
40 states_[2] = 1.0;
+
41 ROS_INFO("[DummyState] takeoff message received");
+
42 }
+
43 void DummyState::land_callback(const std_msgs::Empty::ConstPtr& msg)
+
44 {
+
45 states_[2] = 0.0;
+
46 ROS_INFO("[DummyState] land message received");
+
47 }
+
48 void DummyState::cmd_vel_callback(const geometry_msgs::Twist::ConstPtr& msg)
+
49 {
+
50 states_[0] += DT * msg->linear.x;
+
51 // parrot bebop2 moves left for (+) linear.y and vice versa
+
52 states_[1] -= DT * msg->linear.y;
+
53 states_[2] += DT * msg->linear.z;
+
54 states_[3] += DT * msg->angular.z;
+
55
+
56 ROS_INFO("[DummyState] state = (%lf, %lf, %lf, %lf)", states_[0], states_[1], states_[2], states_[3]);
+
57 }
+
58
+
59} // namespace bebop2
+
60
+ +
void cmd_vel_callback(const geometry_msgs::Twist::ConstPtr &msg)
Joystic command to move the bebop2.
Definition: DummyState.cpp:48
+
void land_callback(const std_msgs::Empty::ConstPtr &msg)
Joystic command to land the bebop2.
Definition: DummyState.cpp:43
+
void operator()(std::vector< double > &state)
This is an interface to access to the internal state vector so that other modules can do their comput...
Definition: DummyState.cpp:16
+
DummyState(ros::NodeHandle &nh, bool noisy_reading)
Construct a new Dummy State object To simulate desired behavior from a sensor so that we can develop ...
Definition: DummyState.cpp:6
+
void takeoff_callback(const std_msgs::Empty::ConstPtr &msg)
Joystic command to takeoff the bebop2.
Definition: DummyState.cpp:38
+
bool empty()
This is an interface to check whether internal state vector is empty or not so that we can safely rea...
Definition: DummyState.cpp:33
+ +
+ + + + diff --git a/docs/html/DummyState_8h.html b/docs/html/DummyState_8h.html new file mode 100644 index 0000000..49636ba --- /dev/null +++ b/docs/html/DummyState_8h.html @@ -0,0 +1,109 @@ + + + + + + + +airlib: include/airlib/localization/Sensors/DummyState.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
DummyState.h File Reference
+
+
+
#include <iostream>
+#include <vector>
+#include <random>
+#include <math.h>
+#include <ros/ros.h>
+#include <std_msgs/Empty.h>
+#include <geometry_msgs/Twist.h>
+#include "SensorBase.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  bebop2::DummyState
 
+ + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/DummyState_8h_source.html b/docs/html/DummyState_8h_source.html new file mode 100644 index 0000000..edc2b01 --- /dev/null +++ b/docs/html/DummyState_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + +airlib: include/airlib/localization/Sensors/DummyState.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
DummyState.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <iostream>
+
4#include <vector>
+
5#include <random>
+
6#include <math.h>
+
7#include <ros/ros.h>
+
8#include <std_msgs/Empty.h>
+
9#include <geometry_msgs/Twist.h>
+
10#include "SensorBase.h"
+
11
+
12
+
13namespace bebop2{
+
25 class DummyState: public SensorBase{
+
26
+
27 public:
+
34 DummyState(ros::NodeHandle& nh, bool noisy_reading);
+
35 void operator()(std::vector<double>& state);
+
36 bool empty();
+
37
+
38 private:
+
39 ros::NodeHandle nh_;
+
41 std::vector<double> states_;
+
43 ros::Subscriber sub_takeoff_, sub_land_, sub_cmd_vel_;
+
45 std::random_device rd_;
+
46 bool noisy_reading_;
+
47
+
48 const size_t STATE_DIM = 4;
+
50 const double DT = 0.03; // 30 Hz
+
52 const double NOISE = 0.2;
+
53 protected:
+
58 void takeoff_callback(const std_msgs::Empty::ConstPtr& msg);
+
64 void land_callback(const std_msgs::Empty::ConstPtr& msg);
+
70 void cmd_vel_callback(const geometry_msgs::Twist::ConstPtr& msg);
+
71
+
72 };
+
73}
+
74
+ + + +
void cmd_vel_callback(const geometry_msgs::Twist::ConstPtr &msg)
Joystic command to move the bebop2.
Definition: DummyState.cpp:48
+
void land_callback(const std_msgs::Empty::ConstPtr &msg)
Joystic command to land the bebop2.
Definition: DummyState.cpp:43
+
void operator()(std::vector< double > &state)
This is an interface to access to the internal state vector so that other modules can do their comput...
Definition: DummyState.cpp:16
+
void takeoff_callback(const std_msgs::Empty::ConstPtr &msg)
Joystic command to takeoff the bebop2.
Definition: DummyState.cpp:38
+
bool empty()
This is an interface to check whether internal state vector is empty or not so that we can safely rea...
Definition: DummyState.cpp:33
+ +
+ + + + diff --git a/docs/html/ExtendedKalmanFilter_8cpp.html b/docs/html/ExtendedKalmanFilter_8cpp.html new file mode 100644 index 0000000..e130420 --- /dev/null +++ b/docs/html/ExtendedKalmanFilter_8cpp.html @@ -0,0 +1,88 @@ + + + + + + + +airlib: airlib/localization/Filters/ekf/ExtendedKalmanFilter.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ExtendedKalmanFilter.cpp File Reference
+
+ + + + + diff --git a/docs/html/ExtendedKalmanFilter_8cpp_source.html b/docs/html/ExtendedKalmanFilter_8cpp_source.html new file mode 100644 index 0000000..2ec1b1d --- /dev/null +++ b/docs/html/ExtendedKalmanFilter_8cpp_source.html @@ -0,0 +1,220 @@ + + + + + + + +airlib: airlib/localization/Filters/ekf/ExtendedKalmanFilter.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ExtendedKalmanFilter.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by Redwan Newaz on 12/29/22.
+
3//
+
4
+ +
6
+
7using namespace bebop2;
+
8
+
9ExtendedKalmanFilter::ExtendedKalmanFilter(const std::vector<double>& sigma_pos, double dt, int state_dim)
+
10:DT(dt), STATE_DIM(state_dim), CONTROL_DIM(STATE_DIM)
+
11{
+
12
+
13 Q_.resize(STATE_DIM, STATE_DIM);
+
14 R_.resize(STATE_DIM, STATE_DIM);
+
15
+
16 for (int i = 0; i < STATE_DIM; ++i) {
+
17 Q_(i, i) = sigma_pos[i];
+
18 R_(i, i) = 1;
+
19 }
+
20
+
21 X_.resize(STATE_DIM);
+
22 xEst_.resize(STATE_DIM);
+
23 PEst_.resize(STATE_DIM, STATE_DIM);
+
24 PEst_.setIdentity();
+
25
+
26
+
27}
+
28
+
29void ExtendedKalmanFilter::operator()(std::vector<double> &state) {
+
30
+
31 if(!state.empty())
+
32 state.clear();
+
33
+
34 std::copy(X_.begin(), X_.end(), std::back_inserter(state));
+
35
+
36}
+
37
+
38
+
39Eigen::VectorXd ExtendedKalmanFilter::motion_model(const Eigen::VectorXd &x, const Eigen::VectorXd &u) {
+
40 Eigen::MatrixXd F_;
+
41 F_.resize(STATE_DIM, STATE_DIM);
+
42 F_<<1.0, 0, 0, 0,
+
43 0, 1.0, 0, 0,
+
44 0, 0, 1.0, 0,
+
45 0, 0, 0, 1.0;
+
46
+
47 Eigen::MatrixXd B_;
+
48 B_.resize(STATE_DIM, STATE_DIM);
+
49 B_<< DT, 0, 0, 0,
+
50 DT, 0, 0, 0,
+
51 DT, 0, 0, 0,
+
52 DT, 0, 0, 0;
+
53
+
54 return F_ * x + B_ * u;
+
55}
+
56
+
57Eigen::MatrixXd ExtendedKalmanFilter::jacobF(const Eigen::VectorXd &x, const Eigen::VectorXd &u) {
+
58 Eigen::MatrixXd jF_ = Eigen::Matrix4d::Identity();
+
59// float yaw = x(2);
+
60// float v = u(0);
+
61// jF_(0,2) = -DT * v * std::sin(yaw);
+
62// jF_(0,3) = DT * std::cos(yaw);
+
63// jF_(1,2) = DT * v * std::cos(yaw);
+
64// jF_(1,3) = DT * std::sin(yaw);
+
65 return jF_;
+
66}
+
67
+
68Eigen::MatrixXd ExtendedKalmanFilter::jacobH() const {
+
69 //# Jacobian of Observation Model
+
70 Eigen::Matrix4d jH;
+
71 jH.setIdentity();
+
72 return jH;
+
73}
+
74
+
75Eigen::VectorXd ExtendedKalmanFilter::observation_model(const Eigen::VectorXd &x) {
+
76 Eigen::Matrix4d H_;
+
77 H_.setIdentity();
+
78 return H_ * x;
+
79}
+
80
+
81void ExtendedKalmanFilter::internal_update(const Eigen::VectorXd &z, const Eigen::VectorXd &u) {
+
82 Eigen::VectorXd xPred = motion_model(xEst_, u_);
+
83 Eigen::MatrixXd jF = jacobF(xPred, u_);
+
84 Eigen::MatrixXd PPred = jF * PEst_ * jF.transpose() + Q_;
+
85
+
86 Eigen::MatrixXd jH = jacobH();
+
87 Eigen::VectorXd zPred = observation_model(xPred);
+
88 Eigen::VectorXd y = z - zPred;
+
89 Eigen::MatrixXd S = jH * PPred * jH.transpose() + R_;
+
90 Eigen::MatrixXd K = PPred * jH.transpose() * S.inverse();
+
91 xEst_ = xPred + K * y;
+
92 PEst_ = (Eigen::Matrix4d::Identity() - K * jH) * PPred;
+
93}
+
94
+
95void ExtendedKalmanFilter::update_cmd(const geometry_msgs::Twist::ConstPtr& cmd) {
+
96 u_.resize(CONTROL_DIM);
+
97 u_ << cmd->linear.x,
+
98 cmd->linear.y,
+
99 cmd->linear.z,
+
100 cmd->angular.z;
+
101}
+
102
+
103void ExtendedKalmanFilter::update(const std::vector<double>& obs, std::vector<double>& result)
+
104{
+
105 Eigen::VectorXd z(obs.size());
+
106 for (int i = 0; i < obs.size(); ++i) {
+
107 z(i) = obs[i];
+
108 }
+
109 internal_update(z, u_);
+
110 for (int j = 0; j < STATE_DIM; ++j) {
+
111 result[j] = xEst_(j);
+
112 }
+
113}
+
114
+
115void ExtendedKalmanFilter::init(const std::vector<double> &X0) {
+
116 for (int j = 0; j < STATE_DIM; ++j) {
+
117 xEst_(j) = X_[j] = X0[j];
+
118 }
+
119}
+ +
std::vector< double > X_
Definition: FilterBase.h:33
+
Eigen::MatrixXd jacobF(const Eigen::VectorXd &x, const Eigen::VectorXd &u)
+
void update(const std::vector< double > &obs, std::vector< double > &result) override
+
Eigen::VectorXd observation_model(const Eigen::VectorXd &x)
+
void operator()(std::vector< double > &state)
+ +
void init(const std::vector< double > &X0) override
+
void internal_update(const Eigen::VectorXd &z, const Eigen::VectorXd &u)
+
Eigen::MatrixXd jacobH() const
+
void update_cmd(const geometry_msgs::Twist::ConstPtr &cmd)
+
ExtendedKalmanFilter(const std::vector< double > &sigma_pos, double dt, int state_dim)
+ + +
Eigen::VectorXd motion_model(const Eigen::VectorXd &x, const Eigen::VectorXd &u)
+ +
+ + + + diff --git a/docs/html/ExtendedKalmanFilter_8h.html b/docs/html/ExtendedKalmanFilter_8h.html new file mode 100644 index 0000000..6210834 --- /dev/null +++ b/docs/html/ExtendedKalmanFilter_8h.html @@ -0,0 +1,106 @@ + + + + + + + +airlib: include/airlib/localization/Filters/ExtendedKalmanFilter.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
ExtendedKalmanFilter.h File Reference
+
+
+
#include <iostream>
+#include <Eigen/Dense>
+#include <vector>
+#include "geometry_msgs/Twist.h"
+#include <airlib/localization/Filters/FilterBase.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  bebop2::ExtendedKalmanFilter
 
+ + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/ExtendedKalmanFilter_8h_source.html b/docs/html/ExtendedKalmanFilter_8h_source.html new file mode 100644 index 0000000..31d08d5 --- /dev/null +++ b/docs/html/ExtendedKalmanFilter_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +airlib: include/airlib/localization/Filters/ExtendedKalmanFilter.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ExtendedKalmanFilter.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by Redwan Newaz on 12/29/22.
+
3//
+
4
+
5#ifndef PARTICLEFILTER_EXTENDED_KALMAN_FILTER_H
+
6#define PARTICLEFILTER_EXTENDED_KALMAN_FILTER_H
+
7
+
8#include <iostream>
+
9#include <Eigen/Dense>
+
10#include <vector>
+
11#include "geometry_msgs/Twist.h"
+ +
13
+
14namespace bebop2{
+
15
+ +
17 public:
+
18 ExtendedKalmanFilter(const std::vector<double>& sigma_pos, double dt, int state_dim);
+
19 void init(const std::vector<double>& X0) override;
+
20 void operator()(std::vector<double>& state);
+
21 void update_cmd(const geometry_msgs::Twist::ConstPtr& cmd);
+
22 void update(const std::vector<double>& obs, std::vector<double>& result) override;
+
23
+
24;
+
25
+
26
+
27 private:
+
28 Eigen::VectorXd xEst_;
+
29 Eigen::MatrixXd PEst_;
+
30 Eigen::MatrixXd Q_;
+
31 Eigen::MatrixXd R_;
+
32 Eigen::VectorXd u_;
+
33
+
34 protected:
+
35 // x_{t+1} = F@x_{t}+B@u_t
+
36 Eigen::VectorXd motion_model(const Eigen::VectorXd& x, const Eigen::VectorXd& u);
+
37 Eigen::MatrixXd jacobF(const Eigen::VectorXd& x, const Eigen::VectorXd& u);
+
38 Eigen::VectorXd observation_model(const Eigen::VectorXd& x);
+
39 Eigen::MatrixXd jacobH() const;
+
40 void internal_update(const Eigen::VectorXd& z, const Eigen::VectorXd& u);
+ +
42
+
43
+
44 };
+
45}
+
46
+
47
+
48#endif //PARTICLEFILTER_EXTENDED_KALMAN_FILTER_H
+ + + +
Eigen::MatrixXd jacobF(const Eigen::VectorXd &x, const Eigen::VectorXd &u)
+
void update(const std::vector< double > &obs, std::vector< double > &result) override
+
Eigen::VectorXd observation_model(const Eigen::VectorXd &x)
+
void operator()(std::vector< double > &state)
+ +
void init(const std::vector< double > &X0) override
+
void internal_update(const Eigen::VectorXd &z, const Eigen::VectorXd &u)
+
Eigen::MatrixXd jacobH() const
+
void update_cmd(const geometry_msgs::Twist::ConstPtr &cmd)
+ + +
Eigen::VectorXd motion_model(const Eigen::VectorXd &x, const Eigen::VectorXd &u)
+ +
+ + + + diff --git a/docs/html/FilterBase_8h.html b/docs/html/FilterBase_8h.html new file mode 100644 index 0000000..1cbc77f --- /dev/null +++ b/docs/html/FilterBase_8h.html @@ -0,0 +1,121 @@ + + + + + + + +airlib: include/airlib/localization/Filters/FilterBase.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
FilterBase.h File Reference
+
+
+
#include <iostream>
+#include <memory>
+#include <vector>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  FilterBase
 
+ + + +

+Typedefs

typedef std::shared_ptr< FilterBaseFilterPtr
 
+

Typedef Documentation

+ +

◆ FilterPtr

+ +
+
+ + + + +
typedef std::shared_ptr<FilterBase> FilterPtr
+
+ +

Definition at line 13 of file FilterBase.h.

+ +
+
+
+ + + + diff --git a/docs/html/FilterBase_8h_source.html b/docs/html/FilterBase_8h_source.html new file mode 100644 index 0000000..ef306a6 --- /dev/null +++ b/docs/html/FilterBase_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +airlib: include/airlib/localization/Filters/FilterBase.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
FilterBase.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 1/14/23.
+
3//
+
4
+
5#ifndef BEBOP2_CONTROLLER_FILTERBASE_H
+
6#define BEBOP2_CONTROLLER_FILTERBASE_H
+
7#include <iostream>
+
8#include <memory>
+
9#include <vector>
+
10
+
11class FilterBase;
+
12
+
13typedef std::shared_ptr<FilterBase> FilterPtr;
+
14
+
15class FilterBase: std::enable_shared_from_this<FilterBase>
+
16{
+
17public:
+ +
19 {
+
20
+
21 }
+
22 virtual ~FilterBase()
+
23 {
+
24
+
25 }
+ +
27 {
+
28 return shared_from_this();
+
29 }
+
30 virtual void init(const std::vector<double>& X0) = 0;
+
31 virtual void update(const std::vector<double>& obs, std::vector<double>& result) = 0;
+
32protected:
+
33 std::vector<double> X_;
+
34
+
35};
+
36
+
37#endif //BEBOP2_CONTROLLER_FILTERBASE_H
+
std::shared_ptr< FilterBase > FilterPtr
Definition: FilterBase.h:13
+ +
virtual void update(const std::vector< double > &obs, std::vector< double > &result)=0
+
virtual void init(const std::vector< double > &X0)=0
+
virtual ~FilterBase()
Definition: FilterBase.h:22
+
FilterPtr getPtr()
Definition: FilterBase.h:26
+ +
std::vector< double > X_
Definition: FilterBase.h:33
+
+ + + + diff --git a/docs/html/LQR_8cpp.html b/docs/html/LQR_8cpp.html new file mode 100644 index 0000000..0daeb95 --- /dev/null +++ b/docs/html/LQR_8cpp.html @@ -0,0 +1,96 @@ + + + + + + + +airlib: airlib/control/LQR/LQR.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
LQR.cpp File Reference
+
+
+
#include "LQR.h"
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/LQR_8cpp_source.html b/docs/html/LQR_8cpp_source.html new file mode 100644 index 0000000..b737eb4 --- /dev/null +++ b/docs/html/LQR_8cpp_source.html @@ -0,0 +1,142 @@ + + + + + + + +airlib: airlib/control/LQR/LQR.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LQR.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+
5#include "LQR.h"
+
6
+
7
+
8namespace bebop2 {
+
9 bool LQR::solveDARE(const Eigen::MatrixXd &A, const Eigen::MatrixXd &B, const Eigen::MatrixXd &Q,
+
10 const Eigen::MatrixXd &R, Eigen::MatrixXd *X) const {
+
11 // borrowed from https://github.com/wcaarls/grl/blob/master/addons/lqr/src/lqr.cpp
+
12
+
13 Eigen::MatrixXd At = A.transpose(), Bt = B.transpose();
+
14 *X = Q;
+
15
+
16 double d = EPS;
+
17 for (size_t ii=0; ii < MAX_ITERATION && d >= EPS; ++ii)
+
18 {
+
19 Eigen::MatrixXd Xp = *X;
+
20
+
21 *X = Q + At*(*X)*A - At*(*X)*B*(Bt*(*X)*B+R).inverse()*Bt*(*X)*A;
+
22 d = (*X - Xp).array().abs().sum();
+
23 }
+
24
+
25 return d >= EPS;
+
26 }
+
27
+
28 bool LQR::solve() {
+
29 Eigen::MatrixXd X;
+
30
+
31 if (!solveDARE(A, B, Q, R, &X))
+
32 {
+
33 WARNING("Could not solve DARE: error ");
+
34 return false;
+
35 }
+
36 DEBUG(X);
+
37 // Compute feedback gain matrix
+
38 Eigen::MatrixXd K = (B.transpose()* X * B + R).inverse()*(B.transpose() * X * A);
+
39
+
40// Eigen::MatrixXd U = -K * ERROR;
+
41 return true;
+
42 }
+
43
+ +
45 dt_ = 0.03;
+
46 A = Eigen::Matrix4d::Identity();
+
47 B = dt_ * Eigen::Vector4d::Identity();
+
48 Q = Eigen::Matrix4d::Identity();
+
49 R = Eigen::Matrix4d::Identity();
+
50 }
+
51} // bebop2
+ +
#define DEBUG(x)
Definition: LQR.h:12
+
#define EPS
Definition: LQR.h:9
+
#define WARNING(x)
Definition: LQR.h:11
+ + +
+ + + + diff --git a/docs/html/LQR_8h.html b/docs/html/LQR_8h.html new file mode 100644 index 0000000..76842cd --- /dev/null +++ b/docs/html/LQR_8h.html @@ -0,0 +1,188 @@ + + + + + + + +airlib: airlib/control/LQR/LQR.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
LQR.h File Reference
+
+
+
#include <iostream>
+#include <Eigen/Dense>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  bebop2::LQR
 
+ + + +

+Namespaces

namespace  bebop2
 
+ + + + + + + + + +

+Macros

#define EPS   0.001
 
#define MAX_ITERATION   1000
 
#define WARNING(x)   std::cerr << x << std::endl
 
#define DEBUG(x)   std::cout << x << std::endl
 
+

Macro Definition Documentation

+ +

◆ DEBUG

+ +
+
+ + + + + + + + +
#define DEBUG( x)   std::cout << x << std::endl
+
+ +

Definition at line 12 of file LQR.h.

+ +
+
+ +

◆ EPS

+ +
+
+ + + + +
#define EPS   0.001
+
+ +

Definition at line 9 of file LQR.h.

+ +
+
+ +

◆ MAX_ITERATION

+ +
+
+ + + + +
#define MAX_ITERATION   1000
+
+ +

Definition at line 10 of file LQR.h.

+ +
+
+ +

◆ WARNING

+ +
+
+ + + + + + + + +
#define WARNING( x)   std::cerr << x << std::endl
+
+ +

Definition at line 11 of file LQR.h.

+ +
+
+
+ + + + diff --git a/docs/html/LQR_8h_source.html b/docs/html/LQR_8h_source.html new file mode 100644 index 0000000..60d152f --- /dev/null +++ b/docs/html/LQR_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +airlib: airlib/control/LQR/LQR.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LQR.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+
5#ifndef BEBOP2_CONTROLLER_LQR_H
+
6#define BEBOP2_CONTROLLER_LQR_H
+
7#include <iostream>
+
8#include <Eigen/Dense>
+
9#define EPS 0.001
+
10#define MAX_ITERATION 1000
+
11#define WARNING(x) std::cerr << x << std::endl
+
12#define DEBUG(x) std::cout << x << std::endl
+
13
+
14namespace bebop2 {
+
15
+
16 class LQR {
+
17 public:
+
18 LQR();
+
19
+
20 private:
+
21 bool solve();
+
22 bool solveDARE(const Eigen::MatrixXd &A, const Eigen::MatrixXd &B, const Eigen::MatrixXd &Q, const Eigen::MatrixXd &R, Eigen::MatrixXd *X) const;
+
23 Eigen::MatrixXd A, B, Q, R;
+
24 double dt_;
+
25 };
+
26
+
27} // bebop2
+
28
+
29#endif //BEBOP2_CONTROLLER_LQR_H
+ + + +
+ + + + diff --git a/docs/html/LoggerCSV_8h.html b/docs/html/LoggerCSV_8h.html new file mode 100644 index 0000000..b661dfc --- /dev/null +++ b/docs/html/LoggerCSV_8h.html @@ -0,0 +1,102 @@ + + + + + + + +airlib: include/airlib/utility/LoggerCSV.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
LoggerCSV.h File Reference
+
+
+
#include <iostream>
+#include <vector>
+#include <chrono>
+#include <sstream>
+#include <string>
+#include <fstream>
+#include <iomanip>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  LoggerCSV
 
+
+ + + + diff --git a/docs/html/LoggerCSV_8h_source.html b/docs/html/LoggerCSV_8h_source.html new file mode 100644 index 0000000..4f31587 --- /dev/null +++ b/docs/html/LoggerCSV_8h_source.html @@ -0,0 +1,219 @@ + + + + + + + +airlib: include/airlib/utility/LoggerCSV.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LoggerCSV.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include <iostream>
+
4#include <vector>
+
5#include <chrono>
+
6#include <sstream>
+
7#include <string>
+
8#include <fstream>
+
9#include <iomanip>
+
10
+
11using namespace std::literals;
+
12
+ +
14
+
15 using TIME_POINT = std::chrono::time_point<std::chrono::system_clock>;
+
16
+
17public:
+
18 // This is a default contructor without st.pop_back();header.
+
19 // One can manually add header file using addHeader function
+ +
21 {
+
22 m_header_enabled = false;
+
23 m_timer_enabled = false;
+
24 }
+
25
+
27 LoggerCSV(const std::vector<std::string>&header)
+
28 {
+
29 m_header_enabled = false;
+
30 m_timer_enabled = false;
+
31 addHeader(header);
+
32 }
+
33
+
35 explicit LoggerCSV(const std::vector<std::string>&header, const int frequency)
+
36 {
+
37 m_header_enabled = false;
+
38 m_timer_enabled = false;
+
39 addHeader(header);
+
40 // initiate last update time 1 min later to write data row
+
41 // write time only depends on actual data not header
+
42 m_last_update_time = std::chrono::system_clock::now() - 1min;
+
43 m_timer_enabled = true;
+
44 // calculate pause time in millisecond between two data rows
+
45 m_pause_time_ms = 1000 / frequency;
+
46
+
47 }
+
48
+ +
50 {
+
51 // when this class will be distructed, we will write the logger values from ROM to a csv file on the hard drive.
+
52 std::string value = m_data.str();
+
53
+
54 // don't write file if there is no data added to the logger
+
55 if(!value.length())
+
56 return;
+
57
+
58 // remove last new line from the string
+
59 value.pop_back();
+
60
+
61 // make sure you have unique name for each logger file. Use system timestamp to serve this purpose
+
62 std::string filename = "logger_" + getTimestamp() + ".csv";
+
63 std::ofstream myfile(filename);
+
64 myfile << value;
+
65 myfile.close();
+
66 }
+
67
+
69 std::string getTimestamp()
+
70 {
+
71 const TIME_POINT now = std::chrono::system_clock::now();
+
72 const std::time_t t_c = std::chrono::system_clock::to_time_t(now);
+
73
+
74 std::stringstream ss;
+
75 ss << std::put_time(std::localtime(&t_c), "%F_%T");
+
76 return ss.str();
+
77 }
+
78
+
79 void addHeader(const std::vector<std::string>&data)
+
80 {
+
81 addRow(data);
+
82 m_header_len = data.size();
+
83 m_header_enabled = true;
+
84 }
+
85
+
86 template<typename T>
+
87 void addRow(const std::vector<T>&data)
+
88 {
+
89 if(m_timer_enabled)
+
90 {
+
91 // if timer is enabled then discard the data point based on the pause limit
+
92 const auto end = std::chrono::system_clock::now();
+
93 int elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(end - m_last_update_time).count();
+
94
+
95 if(elapsed_time <= m_pause_time_ms)
+
96 return;
+
97 // std::cout << elapsed_time << " Paused time " << m_pause_time_ms << std::endl;
+
98 m_last_update_time = std::chrono::system_clock::now();
+
99 }
+
100
+
101 // if header is present then check the number of columns match with header column
+
102 if(m_header_enabled)
+
103 if(m_header_len != data.size())
+
104 {
+
105 std::cerr << "header len does not match with data len" << std::endl;
+
106 return;
+
107 }
+
108
+
109 // we are now ready to store the data into RAM using stringstream
+
110 int index = 0;
+
111 for(const auto& item: data)
+
112 if(++index < data.size())
+
113 m_data << item << ", ";
+
114 else
+
115 m_data << item;
+
116 m_data << "\n";
+
117
+
118
+
119 }
+
120
+
121private:
+
122 std::stringstream m_data;
+
123 size_t m_header_len;
+
124 bool m_header_enabled;
+
125 bool m_timer_enabled;
+
126 TIME_POINT m_last_update_time;
+
127 int m_pause_time_ms;
+
128
+
129};
+ +
LoggerCSV(const std::vector< std::string > &header)
use this constructor to create a csv file with header
Definition: LoggerCSV.h:27
+
void addHeader(const std::vector< std::string > &data)
Definition: LoggerCSV.h:79
+
~LoggerCSV()
Definition: LoggerCSV.h:49
+
std::string getTimestamp()
this function is used to generate unique name for a file with timestamp
Definition: LoggerCSV.h:69
+
LoggerCSV(const std::vector< std::string > &header, const int frequency)
use this contructor when you want to record data row at different frequency than sensor frequency
Definition: LoggerCSV.h:35
+
LoggerCSV()
Definition: LoggerCSV.h:20
+
void addRow(const std::vector< T > &data)
Definition: LoggerCSV.h:87
+
+ + + + diff --git a/docs/html/PID_8cpp.html b/docs/html/PID_8cpp.html new file mode 100644 index 0000000..4eaebfc --- /dev/null +++ b/docs/html/PID_8cpp.html @@ -0,0 +1,96 @@ + + + + + + + +airlib: airlib/control/PID.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
PID.cpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/PID_8cpp_source.html b/docs/html/PID_8cpp_source.html new file mode 100644 index 0000000..16fb2fa --- /dev/null +++ b/docs/html/PID_8cpp_source.html @@ -0,0 +1,141 @@ + + + + + + + +airlib: airlib/control/PID.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PID.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+ +
6
+
7namespace bebop2 {
+ +
9 _pre_error = 0;
+
10 _integral = 0;
+
11 }
+
12
+
13 void PID::init(double dt, double max, double min, double Kp, double Kd, double Ki) {
+
14 _dt = dt;
+
15 _max = max;
+
16 _min = min;
+
17 _Kp = Kp;
+
18 _Kd = Kd;
+
19 _Ki = Ki;
+
20 }
+
21
+
22 double PID::calculate(double setpoint, double pv) {
+
23 // Calculate error
+
24 double error = setpoint - pv;
+
25
+
26 // Proportional term
+
27 double Pout = _Kp * error;
+
28
+
29 // Integral term
+
30 _integral += error * _dt;
+
31 double Iout = _Ki * _integral;
+
32
+
33 // Derivative term
+
34 double derivative = (error - _pre_error) / _dt;
+
35 double Dout = _Kd * derivative;
+
36
+
37 // Calculate total output
+
38 double output = Pout + Iout + Dout;
+
39
+
40 // Restrict to max/min
+
41 if( output > _max )
+
42 output = _max;
+
43 else if( output < _min )
+
44 output = _min;
+
45
+
46 // Save error to previous error
+
47 _pre_error = error;
+
48
+
49 return output;
+
50 }
+
51} // bebop2
+ +
void init(double dt, double max, double min, double Kp, double Kd, double Ki)
Init method initiliazes all the controller parameters like proportional constant, Integral constant,...
Definition: PID.cpp:13
+
PID()
A default Constuctor.
Definition: PID.cpp:8
+
double calculate(double setpoint, double pv)
At first it calculates the error by subtracting the setpoint and current position of the drone,...
Definition: PID.cpp:22
+ +
+ + + + diff --git a/docs/html/PID_8h.html b/docs/html/PID_8h.html new file mode 100644 index 0000000..90d5708 --- /dev/null +++ b/docs/html/PID_8h.html @@ -0,0 +1,143 @@ + + + + + + + +airlib: include/airlib/control/PID.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
PID.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + +

+Classes

class  bebop2::PID
 Calculates an error value as the difference between desired output and the current output and applies a correction based on proportional, integral and derivative terms(denoted by P, I, D respectively). More...
 
+ + + +

+Namespaces

namespace  bebop2
 
+ + + + + +

+Macros

#define NUM_CONTROLLER   4
 
#define NUM_GAINS   3
 
+

Macro Definition Documentation

+ +

◆ NUM_CONTROLLER

+ +
+
+ + + + +
#define NUM_CONTROLLER   4
+
+ +

Definition at line 7 of file PID.h.

+ +
+
+ +

◆ NUM_GAINS

+ +
+
+ + + + +
#define NUM_GAINS   3
+
+ +

Definition at line 8 of file PID.h.

+ +
+
+
+ + + + diff --git a/docs/html/PID_8h_source.html b/docs/html/PID_8h_source.html new file mode 100644 index 0000000..a736dd1 --- /dev/null +++ b/docs/html/PID_8h_source.html @@ -0,0 +1,124 @@ + + + + + + + +airlib: include/airlib/control/PID.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PID.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+
5#ifndef BEBOP2_CONTROLLER_PID_H
+
6#define BEBOP2_CONTROLLER_PID_H
+
7#define NUM_CONTROLLER 4
+
8#define NUM_GAINS 3
+
9
+
10namespace bebop2 {
+
12 class PID {
+
13
+
14 public:
+
16 PID();
+
20 void init(double dt, double max, double min, double Kp, double Kd, double Ki);
+
33 double calculate( double setpoint, double pv );
+
34
+
35
+
36
+
37 private:
+
38 double _dt;
+
39 double _max;
+
40 double _min;
+
41 double _Kp;
+
42 double _Kd;
+
43 double _Ki;
+
44 double _pre_error;
+
45 double _integral;
+
46
+
47 };
+
48
+
49} // bebop2
+
50
+
51#endif //BEBOP2_CONTROLLER_PID_H
+
Calculates an error value as the difference between desired output and the current output and applies...
Definition: PID.h:12
+
void init(double dt, double max, double min, double Kp, double Kd, double Ki)
Init method initiliazes all the controller parameters like proportional constant, Integral constant,...
Definition: PID.cpp:13
+
PID()
A default Constuctor.
Definition: PID.cpp:8
+
double calculate(double setpoint, double pv)
At first it calculates the error by subtracting the setpoint and current position of the drone,...
Definition: PID.cpp:22
+ +
+ + + + diff --git a/docs/html/QuadControllerPID_8cpp.html b/docs/html/QuadControllerPID_8cpp.html new file mode 100644 index 0000000..f3a1c85 --- /dev/null +++ b/docs/html/QuadControllerPID_8cpp.html @@ -0,0 +1,96 @@ + + + + + + + +airlib: airlib/control/QuadControllerPID.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
QuadControllerPID.cpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/QuadControllerPID_8cpp_source.html b/docs/html/QuadControllerPID_8cpp_source.html new file mode 100644 index 0000000..e0c6791 --- /dev/null +++ b/docs/html/QuadControllerPID_8cpp_source.html @@ -0,0 +1,135 @@ + + + + + + + +airlib: airlib/control/QuadControllerPID.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
QuadControllerPID.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 1/14/23.
+
3//
+
4
+ +
6
+
7namespace bebop2
+
8{
+
9 QuadControllerPID::QuadControllerPID(bebop2::StateObserverPtr mGetState, ros::NodeHandle &nh): ControllerBase(mGetState, nh) {
+
10 std::vector<double> gains;
+
11 ros::param::get("~pid_gains", gains);
+
12 assert(gains.size() == NUM_GAINS * NUM_CONTROLLER && "inaccurate PID gains");
+
13 set_gains(gains, _quadController);
+
14 }
+
15
+
16 void QuadControllerPID::set_gains(const std::vector<double> &gains, bebop2::PID *controller) {
+
17 const double MAX_OUT = 1;
+
18 const double MIN_OUT = -1;
+
19
+
20 for (int i = 0; i < NUM_CONTROLLER; ++i) {
+
21 int j = i * NUM_GAINS;
+
22 controller[i].init(ControllerBase::dt_, MAX_OUT, MIN_OUT, gains[j], gains[j + 1], gains[j + 2]);
+
23 }
+
24 }
+
25
+
26 void QuadControllerPID::compute_control(const std::vector<double> &X, const std::vector<double> &setPoints,
+
27 std::vector<double> &control) {
+
28 std::lock_guard<std::mutex> lk(ControllerBase::m_mu);
+
29 for (int i = 0; i < NUM_CONTROLLER; ++i) {
+
30 // ROS_INFO("[PositionController]: control axis = %d setpoint = %lf X = %lf", i, setPoints[i], X[i] );
+
31 control[i] = _quadController[i].calculate(setPoints[i], X[i]);
+
32 }
+
33
+
34 }
+
35
+
36
+
37}
+
#define NUM_CONTROLLER
Definition: PID.h:7
+
#define NUM_GAINS
Definition: PID.h:8
+ +
Responsible to control the position, state and rotation of the drone and also provides the code to ma...
+
double dt_
Sample Time.
+
std::mutex m_mu
Locks some functions for safe operations.
+
Calculates an error value as the difference between desired output and the current output and applies...
Definition: PID.h:12
+
void init(double dt, double max, double min, double Kp, double Kd, double Ki)
Init method initiliazes all the controller parameters like proportional constant, Integral constant,...
Definition: PID.cpp:13
+
double calculate(double setpoint, double pv)
At first it calculates the error by subtracting the setpoint and current position of the drone,...
Definition: PID.cpp:22
+
QuadControllerPID(StateObserverPtr mGetState, ros::NodeHandle &nh)
The QuadControllerPID constructor initializes a vector of type double that is responsible for populat...
+
void compute_control(const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control) override
Similar to the calculate() method in PID.h class, the compute_control method also calculates the erro...
+ +
std::shared_ptr< StateObserver > StateObserverPtr
Definition: StateObserver.h:16
+
+ + + + diff --git a/docs/html/QuadControllerPID_8h.html b/docs/html/QuadControllerPID_8h.html new file mode 100644 index 0000000..5b6075b --- /dev/null +++ b/docs/html/QuadControllerPID_8h.html @@ -0,0 +1,106 @@ + + + + + + + +airlib: include/airlib/control/QuadControllerPID.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
QuadControllerPID.h File Reference
+
+
+
#include "airlib/control/PID.h"
+#include "airlib/localization/StateObserver.h"
+#include "airlib/control/ControllerBase.h"
+#include <vector>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  bebop2::QuadControllerPID
 Responsible to find the error values every second whenever the position of the quadrators of the drone is updated. More...
 
+ + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/QuadControllerPID_8h_source.html b/docs/html/QuadControllerPID_8h_source.html new file mode 100644 index 0000000..a25c518 --- /dev/null +++ b/docs/html/QuadControllerPID_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +airlib: include/airlib/control/QuadControllerPID.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
QuadControllerPID.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 1/14/23.
+
3//
+
4
+
5#ifndef airlib_QUADCONTROLLERPID_H
+
6#define airlib_QUADCONTROLLERPID_H
+
7
+ + + +
11#include <vector>
+
12
+
13namespace bebop2{
+ +
16 public:
+
21 QuadControllerPID(StateObserverPtr mGetState, ros::NodeHandle& nh);
+
22 private:
+
23 bebop2::PID _quadController[NUM_CONTROLLER];
+
26
+
31 void set_gains(const std::vector<double> &gains, bebop2::PID *controller);
+
32 protected:
+
37 void compute_control(const std::vector<double> &X, const std::vector<double> &setPoints,
+
38 std::vector<double> &control) override;
+
39 };
+
40}
+
41
+
42
+
43#endif //airlib_QUADCONTROLLERPID_H
+ + +
#define NUM_CONTROLLER
Definition: PID.h:7
+ +
Responsible to control the position, state and rotation of the drone and also provides the code to ma...
+
Calculates an error value as the difference between desired output and the current output and applies...
Definition: PID.h:12
+
Responsible to find the error values every second whenever the position of the quadrators of the dron...
+
void compute_control(const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control) override
Similar to the calculate() method in PID.h class, the compute_control method also calculates the erro...
+ +
std::shared_ptr< StateObserver > StateObserverPtr
Definition: StateObserver.h:16
+
+ + + + diff --git a/docs/html/README_8md.html b/docs/html/README_8md.html new file mode 100644 index 0000000..705e855 --- /dev/null +++ b/docs/html/README_8md.html @@ -0,0 +1,81 @@ + + + + + + + +airlib: README.md File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
README.md File Reference
+
+
+
+ + + + diff --git a/docs/html/SensorBase_8h.html b/docs/html/SensorBase_8h.html new file mode 100644 index 0000000..a5d14b1 --- /dev/null +++ b/docs/html/SensorBase_8h.html @@ -0,0 +1,122 @@ + + + + + + + +airlib: include/airlib/localization/Sensors/SensorBase.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
SensorBase.h File Reference
+
+
+
#include <iostream>
+#include <memory>
+#include <vector>
+#include <tf/transform_broadcaster.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  SensorBase
 
+ + + +

+Typedefs

typedef std::shared_ptr< SensorBaseSensorPtr
 
+

Typedef Documentation

+ +

◆ SensorPtr

+ +
+
+ + + + +
typedef std::shared_ptr<SensorBase> SensorPtr
+
+ +

Definition at line 14 of file SensorBase.h.

+ +
+
+
+ + + + diff --git a/docs/html/SensorBase_8h_source.html b/docs/html/SensorBase_8h_source.html new file mode 100644 index 0000000..3ff1535 --- /dev/null +++ b/docs/html/SensorBase_8h_source.html @@ -0,0 +1,133 @@ + + + + + + + +airlib: include/airlib/localization/Sensors/SensorBase.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SensorBase.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 1/14/23.
+
3//
+
4
+
5#ifndef BEBOP2_CONTROLLER_SENSORBASE_H
+
6#define BEBOP2_CONTROLLER_SENSORBASE_H
+
7#include <iostream>
+
8#include <memory>
+
9#include <vector>
+
10#include <tf/transform_broadcaster.h>
+
11
+
12class SensorBase;
+
13
+
14typedef std::shared_ptr<SensorBase> SensorPtr;
+
15
+
16class SensorBase: std::enable_shared_from_this<SensorBase>
+
17{
+
18public:
+ +
22 {
+
23 return shared_from_this();
+
24 }
+
30 virtual void operator()(std::vector<double>& result) = 0;
+
37 virtual bool empty() = 0;
+
38
+
47 void publish_tf(const std::vector<double> &state) {
+
48 tf::Transform globalCoord;
+
49 tf::Quaternion q;
+
50 q.setRPY(0, 0, state[3]);
+
51 globalCoord.setOrigin(tf::Vector3(state[0], state[1], state[2]));
+
52 globalCoord.setRotation(q);
+
53 m_br.sendTransform(tf::StampedTransform(globalCoord, ros::Time::now(), "map", "robot"));
+
54// ROS_INFO_STREAM(robot_position_);
+
55 }
+
56
+
57private:
+
59 tf::TransformBroadcaster m_br;
+
60
+
61
+
62};
+
63
+
64#endif //BEBOP2_CONTROLLER_SENSORBASE_H
+
std::shared_ptr< SensorBase > SensorPtr
Definition: SensorBase.h:14
+ +
virtual bool empty()=0
This is an interface to check whether internal state vector is empty or not so that we can safely rea...
+
SensorPtr getPtr()
systematic way to share SensorPtr to control class
Definition: SensorBase.h:21
+
void publish_tf(const std::vector< double > &state)
Publish robot transformation so that we can visualize it in RVIZ. tf::TransformBroadcaster m_br; va...
Definition: SensorBase.h:47
+
virtual void operator()(std::vector< double > &result)=0
This is an interface to access to the internal state vector so that other modules can do their comput...
+
+ + + + diff --git a/docs/html/StateObserver_8cpp.html b/docs/html/StateObserver_8cpp.html new file mode 100644 index 0000000..fae6be5 --- /dev/null +++ b/docs/html/StateObserver_8cpp.html @@ -0,0 +1,96 @@ + + + + + + + +airlib: airlib/localization/StateObserver.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
StateObserver.cpp File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  bebop2
 
+
+ + + + diff --git a/docs/html/StateObserver_8cpp_source.html b/docs/html/StateObserver_8cpp_source.html new file mode 100644 index 0000000..edc79cf --- /dev/null +++ b/docs/html/StateObserver_8cpp_source.html @@ -0,0 +1,141 @@ + + + + + + + +airlib: airlib/localization/StateObserver.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
StateObserver.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+ +
6
+
7
+
8namespace bebop2 {
+
9
+
10
+ +
12 m_filter(filter), m_sensor(sensor) {
+
13 m_initialized = false;
+
14 }
+
15
+
16
+
17 void StateObserver::operator()(std::vector<double>& result) {
+
18
+
19 update_state();
+
20 result.clear();
+
21 std::copy(m_state.begin(), m_state.end(),std::back_inserter(result));
+
22 }
+
23
+
24
+
25 void StateObserver::update_state() {
+
26 while (!m_sensor->empty())
+
27 {
+
28 std::vector<double> obs;
+
29 m_sensor->operator()(obs);
+
30 if(!m_initialized)
+
31 {
+
32 m_filter->init(obs);
+
33 m_initialized = true;
+
34 }
+
35 m_filter->update(obs, m_state);
+
36
+
37// std::cout << m_state[0] << ", " << m_state[1] << ", " << m_state[2] << std::endl;
+
38 }
+
39
+
40 if(!m_state.empty())
+
41 m_sensor->publish_tf(m_state);
+
42
+
43 }
+
44
+
45
+
46} // bebop2
+
std::shared_ptr< FilterBase > FilterPtr
Definition: FilterBase.h:13
+
std::shared_ptr< SensorBase > SensorPtr
Definition: SensorBase.h:14
+ +
StateObserver(FilterPtr filter, SensorPtr sensor)
+
void operator()(std::vector< double > &result)
+ +
std::vector< double > m_state
Definition: StateObserver.h:32
+ + + +
+ + + + diff --git a/docs/html/StateObserver_8h.html b/docs/html/StateObserver_8h.html new file mode 100644 index 0000000..8c3c926 --- /dev/null +++ b/docs/html/StateObserver_8h.html @@ -0,0 +1,112 @@ + + + + + + + +airlib: include/airlib/localization/StateObserver.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
StateObserver.h File Reference
+
+
+
#include <iostream>
+#include <vector>
+#include <memory>
+#include "filters.h"
+#include "sensors.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  bebop2::StateObserver
 
+ + + +

+Namespaces

namespace  bebop2
 
+ + + +

+Typedefs

typedef std::shared_ptr< StateObserver > bebop2::StateObserverPtr
 
+
+ + + + diff --git a/docs/html/StateObserver_8h_source.html b/docs/html/StateObserver_8h_source.html new file mode 100644 index 0000000..4887555 --- /dev/null +++ b/docs/html/StateObserver_8h_source.html @@ -0,0 +1,137 @@ + + + + + + + +airlib: include/airlib/localization/StateObserver.h Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
StateObserver.h
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4
+
5#ifndef BEBOP2_CONTROLLER_STATEOBSERVER_H
+
6#define BEBOP2_CONTROLLER_STATEOBSERVER_H
+
7#include <iostream>
+
8#include <vector>
+
9#include <memory>
+
10#include "filters.h"
+
11#include "sensors.h"
+
12
+
13
+
14namespace bebop2 {
+
15 class StateObserver;
+
16 typedef std::shared_ptr<StateObserver> StateObserverPtr;
+
17
+ +
19 public:
+
20 explicit StateObserver(FilterPtr filter, SensorPtr sensor);
+
21 void operator()(std::vector<double>& result);
+
22
+
23
+
24
+
25
+
26 private:
+
27 void update_state();
+
28 protected:
+
29 /* Quadrotor state
+
30 * x, y, z, yaw
+
31 */
+
32 std::vector<double> m_state;
+ + + +
36
+
37 };
+
38
+
39} // bebop2
+
40#endif //BEBOP2_CONTROLLER_STATEOBSERVER_H
+
std::shared_ptr< FilterBase > FilterPtr
Definition: FilterBase.h:13
+
std::shared_ptr< SensorBase > SensorPtr
Definition: SensorBase.h:14
+ +
void operator()(std::vector< double > &result)
+ +
std::vector< double > m_state
Definition: StateObserver.h:32
+ + + + +
std::shared_ptr< StateObserver > StateObserverPtr
Definition: StateObserver.h:16
+ +
+ + + + diff --git a/docs/html/annotated.html b/docs/html/annotated.html index 9fbca22..4bcf282 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -3,7 +3,7 @@ - + airlib: Class List @@ -29,7 +29,7 @@ - + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
ApriltagLandmarks Member List
+
+
+ +

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

+ + + + + + + + +
apriltag_callback(const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg)ApriltagLandmarksprotected
ApriltagLandmarks(ros::NodeHandle &nh)ApriltagLandmarks
empty()ApriltagLandmarksvirtual
getPtr()SensorBaseinline
operator()(std::vector< double > &result)ApriltagLandmarksvirtual
publish_tf(const std::vector< double > &state)SensorBaseinline
transformToGlobalFrame(const tf::Transform &tagTransform, const std::string &tagName)ApriltagLandmarksprotected
+ + + + diff --git a/docs/html/classApriltagLandmarks.html b/docs/html/classApriltagLandmarks.html new file mode 100644 index 0000000..2dd6415 --- /dev/null +++ b/docs/html/classApriltagLandmarks.html @@ -0,0 +1,322 @@ + + + + + + + +airlib: ApriltagLandmarks Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
ApriltagLandmarks Class Reference
+
+
+ +

#include <ApriltagLandmarks.h>

+
+Inheritance diagram for ApriltagLandmarks:
+
+
+ + +SensorBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ApriltagLandmarks (ros::NodeHandle &nh)
 This class compute the robot coordinate from stationary tags. There are three stationary apriltags located on the wall. These tags are treated as known landmarks for the map. Bebop2 can view these tags with the front facing camera. It is not necessary to see all the tags even one landmark can help to localize the robot. This information is feedback to the computer to detect apriltags from the camera image. Bebop2 can transmit this images upto 28 Hz speed Apprantly, the tags are located only front direction, therefore robot yaw angle is ignored.
 
void operator() (std::vector< double > &result)
 This is an interface to access to the internal state vector so that other modules can do their computation.
 
bool empty ()
 This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.
 
- Public Member Functions inherited from SensorBase
SensorPtr getPtr ()
 systematic way to share SensorPtr to control class
 
virtual void operator() (std::vector< double > &result)=0
 This is an interface to access to the internal state vector so that other modules can do their computation.
 
virtual bool empty ()=0
 This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.
 
void publish_tf (const std::vector< double > &state)
 Publish robot transformation so that we can visualize it in RVIZ.
+ tf::TransformBroadcaster m_br; variable does not depends of NodeHandle. Therefore we can implement publish_tf in this abstract class.
 
+ + + + + + + +

+Protected Member Functions

void apriltag_callback (const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg)
 Given a array of detected tags, here we calculate robot global coordinate with respect to each tag. Each tag propose a noisy state of the robot when transformed it to the global frame. Therefore, an appropriate state filter is used to denoise those readings and compute the robot state accurately.
 
FieldLocation transformToGlobalFrame (const tf::Transform &tagTransform, const std::string &tagName)
 tag is detected with respect to camera frame which needs to be transformed to global frame through camera baselink -> global_frame
 
+

Detailed Description

+
+

Definition at line 18 of file ApriltagLandmarks.h.

+

Constructor & Destructor Documentation

+ +

◆ ApriltagLandmarks()

+ +
+
+ + + + + + + + +
ApriltagLandmarks::ApriltagLandmarks (ros::NodeHandle & nh)
+
+ +

This class compute the robot coordinate from stationary tags. There are three stationary apriltags located on the wall. These tags are treated as known landmarks for the map. Bebop2 can view these tags with the front facing camera. It is not necessary to see all the tags even one landmark can help to localize the robot. This information is feedback to the computer to detect apriltags from the camera image. Bebop2 can transmit this images upto 28 Hz speed Apprantly, the tags are located only front direction, therefore robot yaw angle is ignored.

+ +

Definition at line 7 of file ApriltagLandmarks.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ apriltag_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
void ApriltagLandmarks::apriltag_callback (const apriltag_ros::AprilTagDetectionArray::ConstPtr & msg)
+
+protected
+
+ +

Given a array of detected tags, here we calculate robot global coordinate with respect to each tag. Each tag propose a noisy state of the robot when transformed it to the global frame. Therefore, an appropriate state filter is used to denoise those readings and compute the robot state accurately.

+
Parameters
+ + +
msgan array of detected tags
+
+
+ +

Definition at line 29 of file ApriltagLandmarks.cpp.

+ +
+
+ +

◆ empty()

+ +
+
+ + + + + +
+ + + + + + + +
bool ApriltagLandmarks::empty ()
+
+virtual
+
+ +

This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.

+
Returns
true if internal state vector has not been populated yet
+
+false if internal state vector has been initialized
+
Note
previous void operator()(std::vector<double>& result) depends on it
+ +

Implements SensorBase.

+ +

Definition at line 68 of file ApriltagLandmarks.cpp.

+ +
+
+ +

◆ operator()()

+ +
+
+ + + + + +
+ + + + + + + + +
void ApriltagLandmarks::operator() (std::vector< double > & result)
+
+virtual
+
+ +

This is an interface to access to the internal state vector so that other modules can do their computation.

+
Note
this interface depends on bool empty()
+
+
Parameters
+ + +
resultcopy internal state vector to result vector
+
+
+ +

Implements SensorBase.

+ +

Definition at line 63 of file ApriltagLandmarks.cpp.

+ +
+
+ +

◆ transformToGlobalFrame()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
FieldLocation ApriltagLandmarks::transformToGlobalFrame (const tf::Transform & tagTransform,
const std::string & tagName 
)
+
+protected
+
+ +

tag is detected with respect to camera frame which needs to be transformed to global frame through camera baselink -> global_frame

+
Parameters
+ + + +
tagTransformtag pose with resect to camera frame
tagNamename of the tag
+
+
+
Returns
global coordinate [x, y, z]
+ +

Definition at line 46 of file ApriltagLandmarks.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classApriltagLandmarks.png b/docs/html/classApriltagLandmarks.png new file mode 100644 index 0000000000000000000000000000000000000000..14065fc6dbd7dfda0a65f49aab01498d4e60d8dc GIT binary patch literal 1206 zcmZuxX;4#F6utpP)BtWBeArPy32sD9SSkuc5@Mj3vgx!2i;m%StSpL<2ZABBV@PY- z06`!kO&w5FP&ScBWDzrwEG`HQ(il(?*M9K_O@vBSmdEauXPdOF(Fo~6-|f7^=X3kif?vqIkmP(J>1sT zhT_rrT{qCTrKwT$Xn@wAj-O3QHvo(Fg;Ms#q+=#Z$5>_lSZd>?J7H5+SsKh_CkMpgYFVY-dt=e}6aqb}#Ha*fcyF>YJCVzyOReo{HP5#4Iks)zEmEHS1 zO^+Z}Zbs25B%31^{&&O)fhH#}7<+BYvb^ysiK)bco_gf32D-<$*XDKMb?g7QD%AL?2A}m4P#Z%BH-7h z%#4Uf1ApG*P&p%osb~71?df_~>oXuBBO3nW3Plav-OyGtH532|ZbJ-9!byu)Ku&jD z;qVSb7|3FHs*+wzWHkD6Czw}olYOO(>wdnP+eo!UMt-uFXAl0N;Aza@ZpPqOAH%-UMbAoUcil{Xb7Eh8>cIPg;w4(o zUw!IjPn2G-4_1y|bbg)|Zf=}>f<3*ZO+B8ly!Wdf)3?nQ)2)Yu(k zVP?Yw4u+EjOd418!-8AtDs(fC!H4qr+Xqta$I7z61B@616F8}Cwvx*P*l;|POaRNG z+#v9k0yXe=Ce4n7GHw4xiI|8ytODFX#e*1BJJ_24rM4;0vIdPT<+;1NOrMKY@OTRZ z3MGb~AGxhGtdQv5G@UeNSbxPh@iec~(fl!4RgBlB?b?+%*cI;;tJ3(rZ`Uqod~~U4 zu5y#wr@&ak)>ho z-Y?hlc!l=|6<)_*cpHPMas40U8;A!qlhnI3epfl$u!oQmpxd@EHWtcob*h2}>Ni3L z)(DT+Kk!cd@~8AxJihX+DZ3Oio#^K*KS7`w&#;6E9`0|8SC{ + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
ComplementaryFilter Member List
+
+
+ +

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

+ + + + + + + + +
ComplementaryFilter(double alpha)ComplementaryFilterinline
FilterBase()FilterBaseinline
getPtr()FilterBaseinline
init(const std::vector< double > &X0)ComplementaryFilterinlinevirtual
update(const std::vector< double > &obs, std::vector< double > &result)ComplementaryFilterinlinevirtual
X_FilterBaseprotected
~FilterBase()FilterBaseinlinevirtual
+ + + + diff --git a/docs/html/classComplementaryFilter.html b/docs/html/classComplementaryFilter.html new file mode 100644 index 0000000..0f0cb3a --- /dev/null +++ b/docs/html/classComplementaryFilter.html @@ -0,0 +1,228 @@ + + + + + + + +airlib: ComplementaryFilter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
ComplementaryFilter Class Reference
+
+
+ +

#include <ComplementaryFilter.h>

+
+Inheritance diagram for ComplementaryFilter:
+
+
+ + +FilterBase + +
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ComplementaryFilter (double alpha)
 
void init (const std::vector< double > &X0)
 
void update (const std::vector< double > &obs, std::vector< double > &result)
 
- Public Member Functions inherited from FilterBase
 FilterBase ()
 
virtual ~FilterBase ()
 
FilterPtr getPtr ()
 
virtual void init (const std::vector< double > &X0)=0
 
virtual void update (const std::vector< double > &obs, std::vector< double > &result)=0
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from FilterBase
std::vector< double > X_
 
+

Detailed Description

+
+

Definition at line 10 of file ComplementaryFilter.h.

+

Constructor & Destructor Documentation

+ +

◆ ComplementaryFilter()

+ +
+
+ + + + + +
+ + + + + + + + +
ComplementaryFilter::ComplementaryFilter (double alpha)
+
+inline
+
+ +

Definition at line 12 of file ComplementaryFilter.h.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + +
void ComplementaryFilter::init (const std::vector< double > & X0)
+
+inlinevirtual
+
+ +

Implements FilterBase.

+ +

Definition at line 17 of file ComplementaryFilter.h.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ComplementaryFilter::update (const std::vector< double > & obs,
std::vector< double > & result 
)
+
+inlinevirtual
+
+ +

Implements FilterBase.

+ +

Definition at line 22 of file ComplementaryFilter.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/classComplementaryFilter.png b/docs/html/classComplementaryFilter.png new file mode 100644 index 0000000000000000000000000000000000000000..3e3ba379a2572fc5e7a54cac2510a9d75df4ef87 GIT binary patch literal 1050 zcmeAS@N?(olHy`uVBq!ia0y~yU}OZcJ2;quGQxUHvwoO#zFoQPu$kG37(20#;)*Q~qBxY4`dpb*9GFxt2=3T#v+R>a z#`W#DA74J<&b-uS-r-#ns%Lkc2%hWy;3m)U(oPRu-BS|}%wuF@lD_a|{oLoriq?A0 z-IhO_=auK1w_EMZZKtn$vsm&5kBU;R=4C%+v*so9&ipyksEt6TbMth^a-E~;Gv?PJ!3|o%6jnB5Z?#>5lLbG#Y@4tVLEqyynC^vd7=dZ?H zo%j2Hc`P{1EILni-)GC`vM+8$mUFo*nbzk}EpF0we)5fC@s5ri zSFAa5jx4Wnb*ZxL{4Oe~MQA+3gQ$0$HMN!Q59S@Nm)qUpEn{?K-sveV&?Pl?4VDWgMz?Aqq zy1rOaD!J#Qh^*@Yn{O<;IwX>9{MdzWOq+ja!nWGl)htDK|Nb`&IHxcncY;`~ZNd7@ zjE2X41j^22U&gY_Cg9wO`N{?r3zQ6(EBt=6<4eUeO@rv%9{aS@63Ksh{LV8gH`>o) z*J=Ewm%&s2d#CyTox2r|N$6_{DKJ7&1gFmFO%-Acb5`Xu6zG0u*|&eMa)EyW>jN1^ zP6Odd44e}Pp_oPo4#gc}O{-QVPXw#oGx31#`cELxeI$LYis{E_JIdcB~ zxpOn0bH;IR;T3mPv|DT*e^va;qxgTe~DWM4fBFxQw literal 0 HcmV?d00001 diff --git a/docs/html/classFilterBase-members.html b/docs/html/classFilterBase-members.html new file mode 100644 index 0000000..079534d --- /dev/null +++ b/docs/html/classFilterBase-members.html @@ -0,0 +1,90 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
FilterBase Member List
+
+
+ +

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

+ + + + + + + +
FilterBase()FilterBaseinline
getPtr()FilterBaseinline
init(const std::vector< double > &X0)=0FilterBasepure virtual
update(const std::vector< double > &obs, std::vector< double > &result)=0FilterBasepure virtual
X_FilterBaseprotected
~FilterBase()FilterBaseinlinevirtual
+ + + + diff --git a/docs/html/classFilterBase.html b/docs/html/classFilterBase.html new file mode 100644 index 0000000..a4ea5c0 --- /dev/null +++ b/docs/html/classFilterBase.html @@ -0,0 +1,296 @@ + + + + + + + +airlib: FilterBase Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
FilterBase Class Referenceabstract
+
+
+ +

#include <FilterBase.h>

+
+Inheritance diagram for FilterBase:
+
+
+ + +ComplementaryFilter +bebop2::ExtendedKalmanFilter + +
+ + + + + + + + + + + + +

+Public Member Functions

 FilterBase ()
 
virtual ~FilterBase ()
 
FilterPtr getPtr ()
 
virtual void init (const std::vector< double > &X0)=0
 
virtual void update (const std::vector< double > &obs, std::vector< double > &result)=0
 
+ + + +

+Protected Attributes

std::vector< double > X_
 
+

Detailed Description

+
+

Definition at line 15 of file FilterBase.h.

+

Constructor & Destructor Documentation

+ +

◆ FilterBase()

+ +
+
+ + + + + +
+ + + + + + + +
FilterBase::FilterBase ()
+
+inline
+
+ +

Definition at line 18 of file FilterBase.h.

+ +
+
+ +

◆ ~FilterBase()

+ +
+
+ + + + + +
+ + + + + + + +
virtual FilterBase::~FilterBase ()
+
+inlinevirtual
+
+ +

Definition at line 22 of file FilterBase.h.

+ +
+
+

Member Function Documentation

+ +

◆ getPtr()

+ +
+
+ + + + + +
+ + + + + + + +
FilterPtr FilterBase::getPtr ()
+
+inline
+
+ +

Definition at line 26 of file FilterBase.h.

+ +
+
+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void FilterBase::init (const std::vector< double > & X0)
+
+pure virtual
+
+
+ +

◆ update()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void FilterBase::update (const std::vector< double > & obs,
std::vector< double > & result 
)
+
+pure virtual
+
+
+

Member Data Documentation

+ +

◆ X_

+ +
+
+ + + + + +
+ + + + +
std::vector<double> FilterBase::X_
+
+protected
+
+ +

Definition at line 33 of file FilterBase.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/classFilterBase.png b/docs/html/classFilterBase.png new file mode 100644 index 0000000000000000000000000000000000000000..11e2ca3d169d89ff2f3c193edc18c9aa588777e9 GIT binary patch literal 1636 zcmZ`&YdDl?7=DM=sgHCe3}VPGuH77FoT_CeMvVzMYpFDvnTw)UL`;p@XmTjyJdJFk zoYFdM8D}O`)SwHi9FjvqCPXPkvoCF3`(yX{@qO=eKlk%o-}l`28|Un_M_x`%4ger; zPa?VkAc4Shtc)al*1fdthc9(!2X{NMSPYMoqIah_O$C<52EVFug_8n-0OD>b-G#6w z8|v!h24KDx77|x_0Qhd!p18~XH0t&5(_ss@6r>)^*UG(*y0`NUN>>oj*s@)eu1D)) zmCO4nMxll}O&zBr;MJ7J{zK`SFz&;8$!>pl! zuV_AeZMMQYs#cG?=U(>6y%9Tu?|mPZJ+Y|a-r6TOwtg$wU`YoZiOx?uDm!IiiWptk zqV{RVBiuwZG}lu|S;&1yjvypa-rC@YkC!nuKyJGBx-$NKzIn^RQO;Sb=%F`99pqmp zWSZ46+1RRt5ygN*z9o{epD$0+_FsP$tzi*Ksy8d*HZX%UlPEh|5))wptn|LsIlbzXLri5%b!fB)9r(*mHCpvOP)0Z-`9Wj@vzGQ1 zUrt<*%SvWA_70D7I`PhgJWF-Urs;FllNCkcdGY*&dLk$8Pqt5GMP7PN!`6poVPOx5 z~~pn1-22P!Nv-nSYUclBF&Zj{2bNNgH6*?2tP4MHm@<5swcwM47;&|i18M$|FR~V^#^+De9{7h*nxQ?Bg;#3BK#vm= zpvPBDU-EC$uK^C-rf1E7#PG^8+|QRCa{?h5MQ~T4O0tp=koyYmF=llDiU8YDA9T=P zQ_!$BZ#Dg(%Y@PL5%uAy66(CoMi8s76wk8BkpV;{IXgm*^E#j-cV6e3v%Un_2MP%eV5g_$4^yRzy0{sRVZ{CcS4UkD@Z?ge6d?Rle{;Y5yR_CO3e+u zinO=3|CGj{O1228{)FXoH4XZWD(*MDVomn<+(Aae2cRekrj>mdtJst z7CQLl8k3riQ1#b4V^;KM$Jy7a-OJ?J=UjXo@ld!*&V(5 zmnkZ>$(#yR$H`Lc86w@%a!FdR+BaiI1#_{vf7kG5OtU)9w(ZS;{lt9_x2QVTY1$&U zG*ew#{if!P*-j*wAMO3K@{@i;TOR4srS)x|KL+og4dlet_&UXR#X+Uys~CSd`5edH zJ~ESbS15{Axilygxm$a&z3kkvXBrTr^@Y^aIS8GeE!;#k#(jz+uIh?G3xzu0B(82X jh6ZT2M8Ax<+Q<{5wj9b2h+GmZ0~q#pPQ((M!{`16Dg@4_ literal 0 HcmV?d00001 diff --git a/docs/html/classLoggerCSV-members.html b/docs/html/classLoggerCSV-members.html new file mode 100644 index 0000000..1bff9e2 --- /dev/null +++ b/docs/html/classLoggerCSV-members.html @@ -0,0 +1,91 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
LoggerCSV Member List
+
+
+ +

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

+ + + + + + + + +
addHeader(const std::vector< std::string > &data)LoggerCSVinline
addRow(const std::vector< T > &data)LoggerCSVinline
getTimestamp()LoggerCSVinline
LoggerCSV()LoggerCSVinline
LoggerCSV(const std::vector< std::string > &header)LoggerCSVinline
LoggerCSV(const std::vector< std::string > &header, const int frequency)LoggerCSVinlineexplicit
~LoggerCSV()LoggerCSVinline
+ + + + diff --git a/docs/html/classLoggerCSV.html b/docs/html/classLoggerCSV.html new file mode 100644 index 0000000..89c9c26 --- /dev/null +++ b/docs/html/classLoggerCSV.html @@ -0,0 +1,327 @@ + + + + + + + +airlib: LoggerCSV Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
LoggerCSV Class Reference
+
+
+ +

#include <LoggerCSV.h>

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

+Public Member Functions

 LoggerCSV ()
 
 LoggerCSV (const std::vector< std::string > &header)
 use this constructor to create a csv file with header
 
 LoggerCSV (const std::vector< std::string > &header, const int frequency)
 use this contructor when you want to record data row at different frequency than sensor frequency
 
 ~LoggerCSV ()
 
std::string getTimestamp ()
 this function is used to generate unique name for a file with timestamp
 
void addHeader (const std::vector< std::string > &data)
 
template<typename T >
void addRow (const std::vector< T > &data)
 
+

Detailed Description

+
+

Definition at line 13 of file LoggerCSV.h.

+

Constructor & Destructor Documentation

+ +

◆ LoggerCSV() [1/3]

+ +
+
+ + + + + +
+ + + + + + + +
LoggerCSV::LoggerCSV ()
+
+inline
+
+ +

Definition at line 20 of file LoggerCSV.h.

+ +
+
+ +

◆ LoggerCSV() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
LoggerCSV::LoggerCSV (const std::vector< std::string > & header)
+
+inline
+
+ +

use this constructor to create a csv file with header

+ +

Definition at line 27 of file LoggerCSV.h.

+ +
+
+ +

◆ LoggerCSV() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
LoggerCSV::LoggerCSV (const std::vector< std::string > & header,
const int frequency 
)
+
+inlineexplicit
+
+ +

use this contructor when you want to record data row at different frequency than sensor frequency

+ +

Definition at line 35 of file LoggerCSV.h.

+ +
+
+ +

◆ ~LoggerCSV()

+ +
+
+ + + + + +
+ + + + + + + +
LoggerCSV::~LoggerCSV ()
+
+inline
+
+ +

Definition at line 49 of file LoggerCSV.h.

+ +
+
+

Member Function Documentation

+ +

◆ addHeader()

+ +
+
+ + + + + +
+ + + + + + + + +
void LoggerCSV::addHeader (const std::vector< std::string > & data)
+
+inline
+
+ +

Definition at line 79 of file LoggerCSV.h.

+ +
+
+ +

◆ addRow()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
void LoggerCSV::addRow (const std::vector< T > & data)
+
+inline
+
+ +

Definition at line 87 of file LoggerCSV.h.

+ +
+
+ +

◆ getTimestamp()

+ +
+
+ + + + + +
+ + + + + + + +
std::string LoggerCSV::getTimestamp ()
+
+inline
+
+ +

this function is used to generate unique name for a file with timestamp

+ +

Definition at line 69 of file LoggerCSV.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/classMvn-members.html b/docs/html/classMvn-members.html new file mode 100644 index 0000000..8fa1e67 --- /dev/null +++ b/docs/html/classMvn-members.html @@ -0,0 +1,87 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Mvn Member List
+
+
+ +

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

+ + + + +
Mvn(const TagMap::single_landmark_s &landmark, const std::vector< double > &std)Mvninline
pdf(const T &obs_m) constMvninline
~Mvn()Mvninline
+ + + + diff --git a/docs/html/classMvn.html b/docs/html/classMvn.html new file mode 100644 index 0000000..4df49a7 --- /dev/null +++ b/docs/html/classMvn.html @@ -0,0 +1,200 @@ + + + + + + + +airlib: Mvn Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
Mvn Class Reference
+
+
+ +

#include <particle_filter.h>

+ + + + + + + + + +

+Public Member Functions

 Mvn (const TagMap::single_landmark_s &landmark, const std::vector< double > &std)
 
 ~Mvn ()
 
template<typename T >
double pdf (const T &obs_m) const
 
+

Detailed Description

+
+

Definition at line 35 of file particle_filter.h.

+

Constructor & Destructor Documentation

+ +

◆ Mvn()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Mvn::Mvn (const TagMap::single_landmark_slandmark,
const std::vector< double > & std 
)
+
+inline
+
+ +

Definition at line 38 of file particle_filter.h.

+ +
+
+ +

◆ ~Mvn()

+ +
+
+ + + + + +
+ + + + + + + +
Mvn::~Mvn ()
+
+inline
+
+ +

Definition at line 58 of file particle_filter.h.

+ +
+
+

Member Function Documentation

+ +

◆ pdf()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
double Mvn::pdf (const T & obs_m) const
+
+inline
+
+ +

Definition at line 63 of file particle_filter.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/classParticleFilter-members.html b/docs/html/classParticleFilter-members.html new file mode 100644 index 0000000..97ad33c --- /dev/null +++ b/docs/html/classParticleFilter-members.html @@ -0,0 +1,99 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
ParticleFilter Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
dataAssociation(std::vector< LandmarkObs > predicted, std::vector< LandmarkObs > &observations)ParticleFilter
dist(double x1, double y1, double z1, double x2, double y2, double z2)ParticleFilterinlineprotected
getError(double gt_x, double gt_y, double gt_z, double gt_theta, double pf_x, double pf_y, double pf_z, double pf_theta)ParticleFilterinlineprotected
init(const std::vector< double > &x0, const std::vector< double > &std)ParticleFilter
initialized() constParticleFilterinline
operator()(std::vector< double > &state)ParticleFilter
ParticleFilter(int num_particles, const TagMap &tagMap, double delta_t)ParticleFilterinline
particlesParticleFilter
prediction(double delta_t, const std::vector< double > &std_pos, const Twist *cmd)ParticleFilter
resample()ParticleFilter
update(const std::vector< double > &obs, std::vector< double > &result)ParticleFilter
update_cmd(Twist *cmd)ParticleFilterinline
updateWeights(double sensor_range, const std::vector< double > &std_landmark, std::vector< LandmarkObs > observations, TagMap map_landmarks)ParticleFilter
write(std::string filename)ParticleFilter
~ParticleFilter()ParticleFilterinline
+ + + + diff --git a/docs/html/classParticleFilter.html b/docs/html/classParticleFilter.html new file mode 100644 index 0000000..7707764 --- /dev/null +++ b/docs/html/classParticleFilter.html @@ -0,0 +1,679 @@ + + + + + + + +airlib: ParticleFilter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+ +

#include <particle_filter.h>

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

+Public Member Functions

 ParticleFilter (int num_particles, const TagMap &tagMap, double delta_t)
 
void operator() (std::vector< double > &state)
 
 ~ParticleFilter ()
 
void update_cmd (Twist *cmd)
 
void update (const std::vector< double > &obs, std::vector< double > &result)
 
void init (const std::vector< double > &x0, const std::vector< double > &std)
 
void prediction (double delta_t, const std::vector< double > &std_pos, const Twist *cmd)
 
void dataAssociation (std::vector< LandmarkObs > predicted, std::vector< LandmarkObs > &observations)
 
void updateWeights (double sensor_range, const std::vector< double > &std_landmark, std::vector< LandmarkObs > observations, TagMap map_landmarks)
 
void resample ()
 
void write (std::string filename)
 
const bool initialized () const
 
+ + + +

+Public Attributes

std::vector< Particleparticles
 
+ + + + + +

+Protected Member Functions

double dist (double x1, double y1, double z1, double x2, double y2, double z2)
 
double * getError (double gt_x, double gt_y, double gt_z, double gt_theta, double pf_x, double pf_y, double pf_z, double pf_theta)
 
+

Detailed Description

+
+

Definition at line 116 of file particle_filter.h.

+

Constructor & Destructor Documentation

+ +

◆ ParticleFilter()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ParticleFilter::ParticleFilter (int num_particles,
const TagMaptagMap,
double delta_t 
)
+
+inline
+
+ +

Definition at line 147 of file particle_filter.h.

+ +
+
+ +

◆ ~ParticleFilter()

+ +
+
+ + + + + +
+ + + + + + + +
ParticleFilter::~ParticleFilter ()
+
+inline
+
+ +

Definition at line 151 of file particle_filter.h.

+ +
+
+

Member Function Documentation

+ +

◆ dataAssociation()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ParticleFilter::dataAssociation (std::vector< LandmarkObspredicted,
std::vector< LandmarkObs > & observations 
)
+
+

dataAssociation Finds which observations correspond to which landmarks (likely by using a nearest-neighbors data association).

Parameters
+ + + +
predictedVector of predicted landmark observations
observationsVector of landmark observations
+
+
+ +

Definition at line 102 of file particle_filter.cpp.

+ +
+
+ +

◆ dist()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double ParticleFilter::dist (double x1,
double y1,
double z1,
double x2,
double y2,
double z2 
)
+
+inlineprotected
+
+ +

Definition at line 235 of file particle_filter.h.

+ +
+
+ +

◆ getError()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double * ParticleFilter::getError (double gt_x,
double gt_y,
double gt_z,
double gt_theta,
double pf_x,
double pf_y,
double pf_z,
double pf_theta 
)
+
+inlineprotected
+
+ +

Definition at line 239 of file particle_filter.h.

+ +
+
+ +

◆ init()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ParticleFilter::init (const std::vector< double > & x0,
const std::vector< double > & std 
)
+
+

init Initializes particle filter by initializing particles to Gaussian distribution around first position and all the weights to 1.

Parameters
+ + + + + +
xInitial x position [m] (simulated estimate from GPS)
yInitial y position [m]
thetaInitial orientation [rad]
std[]Array of dimension 3 [standard deviation of x [m], standard deviation of y [m] standard deviation of yaw [rad]]
+
+
+ +

Definition at line 16 of file particle_filter.cpp.

+ +
+
+ +

◆ initialized()

+ +
+
+ + + + + +
+ + + + + + + +
const bool ParticleFilter::initialized () const
+
+inline
+
+

initialized Returns whether particle filter is initialized yet or not.

+ +

Definition at line 222 of file particle_filter.h.

+ +
+
+ +

◆ operator()()

+ +
+
+ + + + + + + + +
void ParticleFilter::operator() (std::vector< double > & state)
+
+ +

Definition at line 292 of file particle_filter.cpp.

+ +
+
+ +

◆ prediction()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ParticleFilter::prediction (double delta_t,
const std::vector< double > & std_pos,
const Twist * cmd 
)
+
+

prediction Predicts the state for the next time step using the process model.

Parameters
+ + + + + +
delta_tTime between time step t and t+1 in measurements [s]
std_pos[]Array of dimension 3 [standard deviation of x [m], standard deviation of y [m] standard deviation of yaw [rad]]
velocityVelocity of car from t to t+1 [m/s]
yaw_rateYaw rate of car from t to t+1 [rad/s]
+
+
+ +

Definition at line 64 of file particle_filter.cpp.

+ +
+
+ +

◆ resample()

+ +
+
+ + + + + + + +
void ParticleFilter::resample ()
+
+

resample Resamples from the updated set of particles to form the new set of particles.

+ +

Definition at line 194 of file particle_filter.cpp.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ParticleFilter::update (const std::vector< double > & obs,
std::vector< double > & result 
)
+
+ +

Definition at line 224 of file particle_filter.cpp.

+ +
+
+ +

◆ update_cmd()

+ +
+
+ + + + + +
+ + + + + + + + +
void ParticleFilter::update_cmd (Twist * cmd)
+
+inline
+
+ +

Definition at line 156 of file particle_filter.h.

+ +
+
+ +

◆ updateWeights()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ParticleFilter::updateWeights (double sensor_range,
const std::vector< double > & std_landmark,
std::vector< LandmarkObsobservations,
TagMap map_landmarks 
)
+
+

updateWeights Updates the weights for each particle based on the likelihood of the observed measurements.

Parameters
+ + + + + +
sensor_rangeRange [m] of sensor
std_landmark[]Array of dimension 2 [standard deviation of range [m], standard deviation of bearing [rad]]
observationsVector of landmark observations
mapMap class containing map landmarks
+
+
+ +

Definition at line 124 of file particle_filter.cpp.

+ +
+
+ +

◆ write()

+ +
+
+ + + + + + + + +
void ParticleFilter::write (std::string filename)
+
+ +

Definition at line 214 of file particle_filter.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ particles

+ +
+
+ + + + +
std::vector<Particle> ParticleFilter::particles
+
+ +

Definition at line 143 of file particle_filter.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classSensorBase-members.html b/docs/html/classSensorBase-members.html new file mode 100644 index 0000000..1bd166d --- /dev/null +++ b/docs/html/classSensorBase-members.html @@ -0,0 +1,88 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
SensorBase Member List
+
+
+ +

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

+ + + + + +
empty()=0SensorBasepure virtual
getPtr()SensorBaseinline
operator()(std::vector< double > &result)=0SensorBasepure virtual
publish_tf(const std::vector< double > &state)SensorBaseinline
+ + + + diff --git a/docs/html/classSensorBase.html b/docs/html/classSensorBase.html new file mode 100644 index 0000000..d7e223a --- /dev/null +++ b/docs/html/classSensorBase.html @@ -0,0 +1,261 @@ + + + + + + + +airlib: SensorBase Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
SensorBase Class Referenceabstract
+
+
+ +

#include <SensorBase.h>

+
+Inheritance diagram for SensorBase:
+
+
+ + +ApriltagLandmarks +bebop2::DummyState + +
+ + + + + + + + + + + + + + +

+Public Member Functions

SensorPtr getPtr ()
 systematic way to share SensorPtr to control class
 
virtual void operator() (std::vector< double > &result)=0
 This is an interface to access to the internal state vector so that other modules can do their computation.
 
virtual bool empty ()=0
 This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.
 
void publish_tf (const std::vector< double > &state)
 Publish robot transformation so that we can visualize it in RVIZ.
+ tf::TransformBroadcaster m_br; variable does not depends of NodeHandle. Therefore we can implement publish_tf in this abstract class.
 
+

Detailed Description

+
+

Definition at line 16 of file SensorBase.h.

+

Member Function Documentation

+ +

◆ empty()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool SensorBase::empty ()
+
+pure virtual
+
+ +

This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.

+
Returns
true if internal state vector has not been populated yet
+
+false if internal state vector has been initialized
+
Note
previous void operator()(std::vector<double>& result) depends on it
+ +

Implemented in ApriltagLandmarks, and bebop2::DummyState.

+ +
+
+ +

◆ getPtr()

+ +
+
+ + + + + +
+ + + + + + + +
SensorPtr SensorBase::getPtr ()
+
+inline
+
+ +

systematic way to share SensorPtr to control class

+
Returns
SensorPtr
+
+ +

Definition at line 21 of file SensorBase.h.

+ +
+
+ +

◆ operator()()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void SensorBase::operator() (std::vector< double > & result)
+
+pure virtual
+
+ +

This is an interface to access to the internal state vector so that other modules can do their computation.

+
Note
this interface depends on bool empty()
+
+
Parameters
+ + +
resultcopy internal state vector to result vector
+
+
+ +

Implemented in ApriltagLandmarks, and bebop2::DummyState.

+ +
+
+ +

◆ publish_tf()

+ +
+
+ + + + + +
+ + + + + + + + +
void SensorBase::publish_tf (const std::vector< double > & state)
+
+inline
+
+ +

Publish robot transformation so that we can visualize it in RVIZ.
+ tf::TransformBroadcaster m_br; variable does not depends of NodeHandle. Therefore we can implement publish_tf in this abstract class.

+
Parameters
+ + +
statevector must have at least 4 parameters [x, y, z, yaw]
+
+
+
Returns
broadcast map to robot tf
+
Note
This function depends on private vairable tf::TransformBroadcaster m_br;
+ +

Definition at line 47 of file SensorBase.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/classSensorBase.png b/docs/html/classSensorBase.png new file mode 100644 index 0000000000000000000000000000000000000000..c8ac5e88981e729c208b9662969a1b6a33f6b821 GIT binary patch literal 1806 zcmah~YgCg*8qRGoQmBD~BGN)52=M|+L6B0Qm;V}cq3 zEwo96LPYH+5D$VO1~E#jxX}%uDQJLzCR~I-GK05g4t|_!ttqvuekTF`0vE! zI8;3vm&s(%dQAC~tI*!s{OHIS7&L#|{1AetFqp;n5%^C@MR48VM1io~cHamqPb4#u zU*`sX##FxU%RT*7(!KK=QQ`HC;2nL;cbC&F$E*?g2j&75BlI%tbvF*)#sNd9LtCA} z5>Xa-o(BRMK=5?`GV}hqp!ul@y=Vu^nSWjtsF))cWiR#s7(%kV5H~BPO1F6{=GsT{ zXOI+gPXQ6NC^@X8#mc>DUDn`Irs&G!$63_EY@IfNK7L|s<)pkPspeO8 zma$`^Q00d1?)moILW>%y`libBxuCa4ocSzmP_28?W!Ni7$cx%FsCXrvQQazNJf0_A z2M@TVY$0l#hIbFqqsP4qK2EK=sq-;?jji(bS5U-iX}A3)-$cf*LoFNEBJwjVe+ej? z@>DLInpR8}N5Apn_#o!F*+aLNbXkW4#qMP?W)m}^qO-X6*)^jeg8pNd;c?UkzI=H% z;brYjB;lqhONxRA7(yx4_qSY_e385S$x7>n4>s^skCONoMGf{6hVbv2fi|4aT%ez^ zHMW7)Uo2|G^{up6k5aRiJP`4V|L|4JEi=OHN_Lo=y3%T=J>}HuF<(ZyX+Skftqwj1 zVaoqguQ~_}C%STEOb=T^vdrgTjDI#}c+Kn@1ghVb;35lRto&?)zP{hC1ZH%yW^cwM zb3G7n1gfY~gF$0lWE9u35GD*>y*UnrK%win-ic>MU~;mVY?Gx5-Q{-hXU$Hwk-S#_S?mvi7jW?ZG#tKH8S zlqy7LyeZ$fhps`A4gZv;#8oQXIkHMojHY}`P-RAA`{cP-Y?X_Nm8@<7*jV#^5jlbXTbEqouLVpV+ir z-rW8TBtXZ}b4lsH)EBpuj^^oN$yt4or9Y+p$*9?<1FCidqVV5t*Z)$>0*=UFV=>7! zVzEC0Uhp;)ewd3wOxZvh?!}@}MIn%a>&{>?!*C)B5$M7RVXnd3p!G~h%?~gT2wC?B zsOEu6rHU`2(P)#*3-#|9UAL~aunH&HS~*;}>gur5g&46jIi#*US;oY>-DSerpPhsw zZNEh!E&c)+?7EfJIifeUzyB_)Q(SS?2^t((AgJ$X<&c0<3d#1YM>Mc-0kR~JT$2O@!Flxk&GqA7cQL2>8dRC&yH0LrHnIZiy)YtJvi>Wutu57S7G>&@VxmcVZm{Em4!X0 zfz|erR*)C)2y3G8!$2^I*O$s8Mp8q0G|3=N4FEL{)9oj&6n^yGrvuaWv`dEprTgqw zf}tchVDhC{Vm^z#gDd+XX6V=`*ZgnR!NY;%4DjKt?grAE#L`jQ)B9To_DDC>Hjx@$ zbdTrXW>5|5WpW~*Onq%hh;1SPx;ai-6KD{%heNW2E%#wgd@AR#aR1Uf?BM>wEl3bBwm kFp=@Xu8|!7Q%@Fyga0P6@3F$upq~pCL5RdRg(jc;9obb~>Hq)$ literal 0 HcmV?d00001 diff --git a/docs/html/classTagMap-members.html b/docs/html/classTagMap-members.html new file mode 100644 index 0000000..988c2eb --- /dev/null +++ b/docs/html/classTagMap-members.html @@ -0,0 +1,85 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
TagMap Member List
+
+
+ +

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

+ + +
landmark_listTagMap
+ + + + diff --git a/docs/html/classTagMap.html b/docs/html/classTagMap.html new file mode 100644 index 0000000..ef54e94 --- /dev/null +++ b/docs/html/classTagMap.html @@ -0,0 +1,121 @@ + + + + + + + +airlib: TagMap Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
TagMap Class Reference
+
+
+ +

#include <particle_filter.h>

+ + + + +

+Classes

struct  single_landmark_s
 
+ + + +

+Public Attributes

std::vector< single_landmark_slandmark_list
 
+

Detailed Description

+
+

Definition at line 19 of file particle_filter.h.

+

Member Data Documentation

+ +

◆ landmark_list

+ +
+
+ + + + +
std::vector<single_landmark_s> TagMap::landmark_list
+
+ +

Definition at line 30 of file particle_filter.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/html/classbebop2_1_1ControlViz-members.html b/docs/html/classbebop2_1_1ControlViz-members.html new file mode 100644 index 0000000..fb31ad9 --- /dev/null +++ b/docs/html/classbebop2_1_1ControlViz-members.html @@ -0,0 +1,93 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::ControlViz Member List
+
+
+ +

This is the complete list of members for bebop2::ControlViz, including all inherited members.

+ + + + + + +
ControlViz(ros::NodeHandle &nh)bebop2::ControlVizexplicit
set_marker_color(const MARKER_COLOR &color, visualization_msgs::Marker &msg)bebop2::ControlVizprotected
set_marker_from_pose(const tf::Transform &pose, visualization_msgs::Marker &msg)bebop2::ControlVizprotected
setDrone(const tf::Transform &pose)bebop2::ControlViz
update(const tf::Transform &pose, const MARKER_COLOR &color)bebop2::ControlViz
+ + + + diff --git a/docs/html/classbebop2_1_1ControlViz.html b/docs/html/classbebop2_1_1ControlViz.html new file mode 100644 index 0000000..19e8647 --- /dev/null +++ b/docs/html/classbebop2_1_1ControlViz.html @@ -0,0 +1,326 @@ + + + + + + + +airlib: bebop2::ControlViz Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::ControlViz Class Reference
+
+
+ +

This class helps in the 3D visualization of data being rendered. It receives the updated position and orientation of the drone and sends points and lines to a graphical interface. Hence, visualizes the movement, position, orientation and behaviors of the drone. + More...

+ +

#include <ControlViz.h>

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

+Public Member Functions

 ControlViz (ros::NodeHandle &nh)
 Publishes messages through /bebop2/goal topic.
 
void setDrone (const tf::Transform &pose)
 This function starts and slightly lifts the drone. As a result sets the Marker from the pose parameter and also sets the color by invoking the set_marker_from_pose() and set_marker_color() functions.
 
void update (const tf::Transform &pose, const MARKER_COLOR &color)
 This functions updates the path and the color of the path of the robot. It also publishes the messages from the visualization_msgs::Marker. Lastly, it sets the Marker object type to be a sphere.
 
+ + + + + + + +

+Protected Member Functions

void set_marker_from_pose (const tf::Transform &pose, visualization_msgs::Marker &msg)
 Receives the current position of the drone and uses that position to populate the point position and orientation of the marker messages. The marker messages will be used by a graphical interface to visualize the movement of the robot.
 
void set_marker_color (const MARKER_COLOR &color, visualization_msgs::Marker &msg)
 sets different colors for different flights and paths of the drone for better understanding.
 
+

Detailed Description

+

This class helps in the 3D visualization of data being rendered. It receives the updated position and orientation of the drone and sends points and lines to a graphical interface. Hence, visualizes the movement, position, orientation and behaviors of the drone.

+ +

Definition at line 25 of file ControlViz.h.

+

Constructor & Destructor Documentation

+ +

◆ ControlViz()

+ +
+
+ + + + + +
+ + + + + + + + +
bebop2::ControlViz::ControlViz (ros::NodeHandle & nh)
+
+explicit
+
+ +

Publishes messages through /bebop2/goal topic.

+
Parameters
+ + +
nhROS Node Handle which deals with messages.
+
+
+ +

Definition at line 8 of file ControlViz.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ set_marker_color()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void bebop2::ControlViz::set_marker_color (const MARKER_COLORcolor,
visualization_msgs::Marker & msg 
)
+
+protected
+
+ +

sets different colors for different flights and paths of the drone for better understanding.

+
Parameters
+ + + +
colorcolor of the path
msgis Marker object same as the parameter msg in set_marker_from_pose() and has attributes to set color as well.
+
+
+ +

Definition at line 45 of file ControlViz.cpp.

+ +
+
+ +

◆ set_marker_from_pose()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void bebop2::ControlViz::set_marker_from_pose (const tf::Transform & pose,
visualization_msgs::Marker & msg 
)
+
+protected
+
+ +

Receives the current position of the drone and uses that position to populate the point position and orientation of the marker messages. The marker messages will be used by a graphical interface to visualize the movement of the robot.

+
Parameters
+ + + +
poseRobot's pose having a /map frame.
msgis a Marker object from visualization msgs that has attributes like position, orientation etc.
+
+
+ +

Definition at line 16 of file ControlViz.cpp.

+ +
+
+ +

◆ setDrone()

+ +
+
+ + + + + + + + +
void bebop2::ControlViz::setDrone (const tf::Transform & pose)
+
+ +

This function starts and slightly lifts the drone. As a result sets the Marker from the pose parameter and also sets the color by invoking the set_marker_from_pose() and set_marker_color() functions.

+
Parameters
+ + +
poseDrone's positon.
+
+
+
Note
Sets the path of the color to gray.
+ +

Definition at line 101 of file ControlViz.cpp.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void bebop2::ControlViz::update (const tf::Transform & pose,
const MARKER_COLORcolor 
)
+
+ +

This functions updates the path and the color of the path of the robot. It also publishes the messages from the visualization_msgs::Marker. Lastly, it sets the Marker object type to be a sphere.

+
Parameters
+ + + +
posecurrent position of the robot.
+
colorcolor of the path in which the robot is in.
+
+
+
Note
Calls the set_marker_from_pose() and set_marker_color() functions to update the path and color.
+ +

Definition at line 91 of file ControlViz.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classbebop2_1_1ControllerBase-members.html b/docs/html/classbebop2_1_1ControllerBase-members.html new file mode 100644 index 0000000..e0c45be --- /dev/null +++ b/docs/html/classbebop2_1_1ControllerBase-members.html @@ -0,0 +1,104 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::ControllerBase Member List
+
+
+ +

This is the complete list of members for bebop2::ControllerBase, including all inherited members.

+ + + + + + + + + + + + + + + + + +
ButtonState enum namebebop2::ControllerBaseprotected
compute_control(const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control)=0bebop2::ControllerBaseprotectedpure virtual
CONTROL enum valuebebop2::ControllerBaseprotected
ControllerBase(StateObserverPtr mGetState, ros::NodeHandle &nh)bebop2::ControllerBaseexplicit
dt_bebop2::ControllerBaseprotected
ENGAGE enum valuebebop2::ControllerBaseprotected
goal_distance(const std::vector< double > &X, const std::vector< double > &setPoints)bebop2::ControllerBaseprotected
IDLE enum valuebebop2::ControllerBaseprotected
LAND enum valuebebop2::ControllerBaseprotected
m_buttonStatebebop2::ControllerBaseprotected
m_get_statebebop2::ControllerBaseprotected
m_goal_thresbebop2::ControllerBaseprotected
m_mubebop2::ControllerBaseprotected
m_nhbebop2::ControllerBaseprotected
publish_cmd_vel(const std::vector< double > &U)bebop2::ControllerBaseprotected
TAKEOFF enum valuebebop2::ControllerBaseprotected
+ + + + diff --git a/docs/html/classbebop2_1_1ControllerBase.html b/docs/html/classbebop2_1_1ControllerBase.html new file mode 100644 index 0000000..27cfd95 --- /dev/null +++ b/docs/html/classbebop2_1_1ControllerBase.html @@ -0,0 +1,534 @@ + + + + + + + +airlib: bebop2::ControllerBase Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::ControllerBase Class Referenceabstract
+
+
+ +

Responsible to control the position, state and rotation of the drone and also provides the code to make the robot hover. It publishes the takeoff, landing commands along with the current position of the drone and the state of the axes and buttons of the joystick controller. It also updates the state of the robot in RVIZ which is used for visaulation. + More...

+ +

#include <ControllerBase.h>

+
+Inheritance diagram for bebop2::ControllerBase:
+
+
+ + +bebop2::QuadControllerPID + +
+ + + + + +

+Public Member Functions

 ControllerBase (StateObserverPtr mGetState, ros::NodeHandle &nh)
 Subscribes to sensor_msgs/joy which reports the state of a joystick's axes and buttons. It also publishes the message of drone takeoff and landing along with the linear and angular position of the drone. The constructor is also responsible to call the appropriate functions at specifc rates that plays a role in setting the set-point at a current location. Lastly it contructs an object to send the updated pose to the RVIZ for visualization and also sets the state of the controller's button.
 
+ + + + +

+Protected Types

enum  ButtonState {
+  IDLE = 0 +, TAKEOFF +, LAND +, ENGAGE +,
+  CONTROL +
+ }
 Applications applied to control the state of the robot using Joystick controller. More...
 
+ + + + + + + + + +

+Protected Member Functions

void publish_cmd_vel (const std::vector< double > &U)
 This function sets the linear positon of the drone to all 3 linear axes and to angula z-axis and publishes the message of the current position of the drone.
 
double goal_distance (const std::vector< double > &X, const std::vector< double > &setPoints)
 This function calculates the distance between the setpoint of the drone and the current state position.
 
virtual void compute_control (const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control)=0
 
+ + + + + + + + + + + + + + + + + + +

+Protected Attributes

ros::NodeHandle m_nh
 This ROS Handle attribute is used to create various publishers and subscribers which also deals with messages.
 
std::mutex m_mu
 Locks some functions for safe operations.
 
enum bebop2::ControllerBase::ButtonState m_buttonState
 
StateObserverPtr m_get_state
 This attribute gives the state of the robot.
 
double dt_
 Sample Time.
 
double m_goal_thres
 Goal region threshold.
 
+

Detailed Description

+

Responsible to control the position, state and rotation of the drone and also provides the code to make the robot hover. It publishes the takeoff, landing commands along with the current position of the drone and the state of the axes and buttons of the joystick controller. It also updates the state of the robot in RVIZ which is used for visaulation.

+ +

Definition at line 47 of file ControllerBase.h.

+

Member Enumeration Documentation

+ +

◆ ButtonState

+ +
+
+ + + + + +
+ + + + +
enum bebop2::ControllerBase::ButtonState
+
+protected
+
+ +

Applications applied to control the state of the robot using Joystick controller.

+ + + + + + +
Enumerator
IDLE 

Setpoint can be freely moved with joystick. Sphere color blue.

+
TAKEOFF 

Drone will takeoff from the ground.

+
LAND 

Drone will land.

+
ENGAGE 

Set current location as a set point (for hover). Sphere color yellow.

+
CONTROL 

Start PID controller for the current setpoint. Sphere color cyan.

+
+ +

Definition at line 80 of file ControllerBase.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ ControllerBase()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bebop2::ControllerBase::ControllerBase (StateObserverPtr mGetState,
ros::NodeHandle & nh 
)
+
+explicit
+
+ +

Subscribes to sensor_msgs/joy which reports the state of a joystick's axes and buttons. It also publishes the message of drone takeoff and landing along with the linear and angular position of the drone. The constructor is also responsible to call the appropriate functions at specifc rates that plays a role in setting the set-point at a current location. Lastly it contructs an object to send the updated pose to the RVIZ for visualization and also sets the state of the controller's button.

+
Parameters
+ + + +
mGetStateObtains the current state of the robot
nhUsed to create publishers and subscribes. For eg: The ControllerBase constructor publishes messages during takeoff and landing with the help of the ros::NodeHandle aka nh parameter.
+
+
+ +

Definition at line 12 of file ControllerBase.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ compute_control()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void bebop2::ControllerBase::compute_control (const std::vector< double > & X,
const std::vector< double > & setPoints,
std::vector< double > & control 
)
+
+protectedpure virtual
+
+ +

Implemented in bebop2::QuadControllerPID.

+ +
+
+ +

◆ goal_distance()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double bebop2::ControllerBase::goal_distance (const std::vector< double > & X,
const std::vector< double > & setPoints 
)
+
+protected
+
+ +

This function calculates the distance between the setpoint of the drone and the current state position.

+
Parameters
+ + + +
Xis an array of vectors of data type double representing the present position of the drone.
setPointsis an array of vectors representing the commanded position.
+
+
+
Returns
Errors between the current and commanded position of the robot.
+ +

Definition at line 159 of file ControllerBase.cpp.

+ +
+
+ +

◆ publish_cmd_vel()

+ +
+
+ + + + + +
+ + + + + + + + +
void bebop2::ControllerBase::publish_cmd_vel (const std::vector< double > & U)
+
+protected
+
+ +

This function sets the linear positon of the drone to all 3 linear axes and to angula z-axis and publishes the message of the current position of the drone.

+
Parameters
+ + +
Uis array of commands of size 4 which sets the above mentioned position of the drone.
+
+
+ +

Definition at line 144 of file ControllerBase.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ dt_

+ +
+
+ + + + + +
+ + + + +
double bebop2::ControllerBase::dt_
+
+protected
+
+ +

Sample Time.

+ +

Definition at line 98 of file ControllerBase.h.

+ +
+
+ +

◆ m_buttonState

+ +
+
+ + + + + +
+ + + + +
enum bebop2::ControllerBase::ButtonState bebop2::ControllerBase::m_buttonState
+
+protected
+
+ +
+
+ +

◆ m_get_state

+ +
+
+ + + + + +
+ + + + +
StateObserverPtr bebop2::ControllerBase::m_get_state
+
+protected
+
+ +

This attribute gives the state of the robot.

+ +

Definition at line 94 of file ControllerBase.h.

+ +
+
+ +

◆ m_goal_thres

+ +
+
+ + + + + +
+ + + + +
double bebop2::ControllerBase::m_goal_thres
+
+protected
+
+ +

Goal region threshold.

+ +

Definition at line 100 of file ControllerBase.h.

+ +
+
+ +

◆ m_mu

+ +
+
+ + + + + +
+ + + + +
std::mutex bebop2::ControllerBase::m_mu
+
+protected
+
+ +

Locks some functions for safe operations.

+ +

Definition at line 78 of file ControllerBase.h.

+ +
+
+ +

◆ m_nh

+ +
+
+ + + + + +
+ + + + +
ros::NodeHandle bebop2::ControllerBase::m_nh
+
+protected
+
+ +

This ROS Handle attribute is used to create various publishers and subscribers which also deals with messages.

+ +

Definition at line 76 of file ControllerBase.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classbebop2_1_1ControllerBase.png b/docs/html/classbebop2_1_1ControllerBase.png new file mode 100644 index 0000000000000000000000000000000000000000..aa00dbb778b5c312415beefbd07893613c99d158 GIT binary patch literal 708 zcmV;#0z3VQP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0006{ zNklgnvw3hKXmJYO|XJPKc)-rS>$zE@A-i>wQ@z$+-&N)v5Ng9ng%Q4Go$0NOi z0#<7t@5^homeZ}#%9ORKeMp*T$XP;e!AGN-Qk|xOhw{{6YMj{ulKPq5yK(P-OstO6 zE**0=_1PYuqq@Nbflv4VA z0f4t|0B`|ag!6X02IxgN7tBk5UWGII9RNHPoB-gb-~<3a1t$RbDL4VZPr(TQehN+i z@KbOCfS-aB0Q?l30N|(K1OPt;Cjj{Azvj$2XJ_4V&e>VWA|gMp;1m(@Q*eri_-W@% zB2pha+O0|3m(h4x@g7b$mSxylR=4|%j&O!^^*1mgBAxby-Sl(LYBmuRXMx|2GaBiQ z)|WNjLz|1;UWa(Rm-#(w%Ck%v&Mi>otdoy0gHg>?1yPIYl;#`+w2SpY`+WAClTCFX zeMx;jJC}Lf31?HEhn!{IJbJ&s-r_yZ%C`HxlFy^;wgrE51!wZv_UR|}Irt z7uud)>awzyX72yKSe}lntaYhME**_DI(&hmpDa4 qzO3LB5%E)Siir4W;mkSb-`77D + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::DummyState Member List
+
+
+ +

This is the complete list of members for bebop2::DummyState, including all inherited members.

+ + + + + + + + + +
cmd_vel_callback(const geometry_msgs::Twist::ConstPtr &msg)bebop2::DummyStateprotected
DummyState(ros::NodeHandle &nh, bool noisy_reading)bebop2::DummyState
empty()bebop2::DummyStatevirtual
getPtr()SensorBaseinline
land_callback(const std_msgs::Empty::ConstPtr &msg)bebop2::DummyStateprotected
operator()(std::vector< double > &state)bebop2::DummyStatevirtual
publish_tf(const std::vector< double > &state)SensorBaseinline
takeoff_callback(const std_msgs::Empty::ConstPtr &msg)bebop2::DummyStateprotected
+ + + + diff --git a/docs/html/classbebop2_1_1DummyState.html b/docs/html/classbebop2_1_1DummyState.html new file mode 100644 index 0000000..9dd7756 --- /dev/null +++ b/docs/html/classbebop2_1_1DummyState.html @@ -0,0 +1,372 @@ + + + + + + + +airlib: bebop2::DummyState Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::DummyState Class Reference
+
+
+ +

#include <DummyState.h>

+
+Inheritance diagram for bebop2::DummyState:
+
+
+ + +SensorBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DummyState (ros::NodeHandle &nh, bool noisy_reading)
 Construct a new Dummy State object To simulate desired behavior from a sensor so that we can develop accurate control module.
 
void operator() (std::vector< double > &state)
 This is an interface to access to the internal state vector so that other modules can do their computation.
 
bool empty ()
 This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.
 
- Public Member Functions inherited from SensorBase
SensorPtr getPtr ()
 systematic way to share SensorPtr to control class
 
virtual void operator() (std::vector< double > &result)=0
 This is an interface to access to the internal state vector so that other modules can do their computation.
 
virtual bool empty ()=0
 This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.
 
void publish_tf (const std::vector< double > &state)
 Publish robot transformation so that we can visualize it in RVIZ.
+ tf::TransformBroadcaster m_br; variable does not depends of NodeHandle. Therefore we can implement publish_tf in this abstract class.
 
+ + + + + + + + + + +

+Protected Member Functions

void takeoff_callback (const std_msgs::Empty::ConstPtr &msg)
 Joystic command to takeoff the bebop2.
 
void land_callback (const std_msgs::Empty::ConstPtr &msg)
 Joystic command to land the bebop2.
 
void cmd_vel_callback (const geometry_msgs::Twist::ConstPtr &msg)
 Joystic command to move the bebop2.
 
+

Detailed Description

+

Dummy state will create a state space repersentation for quadrotor. The key idea is to initialize a state at (0, 0, 0, 0) and take joystick command to update state. To capture realistic behavior add some gaussian white noise to the state. When bebop2 takeoff from the ground it reaches 1m above from the ground origin and when it lands then z axis value is 0. This behavior can be achieved by simply subscribing takeoff and land messages. To change bebop coordinates in x and y direction subscribe cmd_vel topic and update the state based on the cmd_vel value. cmd_vel is a geometry_msg/Twist msg which provides 4 control inputs, i.e., linear.x, linear.y, linear.z, angular.z Here, we need to make a assumption that sampling time DT is a constant value.
+ Finally to integrate with our main framework, we need a public method void operator()(std::vector<double>& state) that can populate a requested state vector;

+ +

Definition at line 25 of file DummyState.h.

+

Constructor & Destructor Documentation

+ +

◆ DummyState()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bebop2::DummyState::DummyState (ros::NodeHandle & nh,
bool noisy_reading 
)
+
+ +

Construct a new Dummy State object To simulate desired behavior from a sensor so that we can develop accurate control module.

+
Parameters
+ + + +
nhros NodeHandle to deal with various messages
noisy_readingan option to make a realistic sensor reading: if true white noise will be added to the output
+
+
+ +

Definition at line 6 of file DummyState.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ cmd_vel_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
void bebop2::DummyState::cmd_vel_callback (const geometry_msgs::Twist::ConstPtr & msg)
+
+protected
+
+ +

Joystic command to move the bebop2.

+
Parameters
+ + +
msgpublish Twist message to the topic cmd_vel
+
+
+ +

Definition at line 48 of file DummyState.cpp.

+ +
+
+ +

◆ empty()

+ +
+
+ + + + + +
+ + + + + + + +
bool bebop2::DummyState::empty ()
+
+virtual
+
+ +

This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector.

+
Returns
true if internal state vector has not been populated yet
+
+false if internal state vector has been initialized
+
Note
previous void operator()(std::vector<double>& result) depends on it
+ +

Implements SensorBase.

+ +

Definition at line 33 of file DummyState.cpp.

+ +
+
+ +

◆ land_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
void bebop2::DummyState::land_callback (const std_msgs::Empty::ConstPtr & msg)
+
+protected
+
+ +

Joystic command to land the bebop2.

+
Parameters
+ + +
msgpublish empty message to the topic land
+
+
+ +

Definition at line 43 of file DummyState.cpp.

+ +
+
+ +

◆ operator()()

+ +
+
+ + + + + +
+ + + + + + + + +
void bebop2::DummyState::operator() (std::vector< double > & result)
+
+virtual
+
+ +

This is an interface to access to the internal state vector so that other modules can do their computation.

+
Note
this interface depends on bool empty()
+
+
Parameters
+ + +
resultcopy internal state vector to result vector
+
+
+ +

Implements SensorBase.

+ +

Definition at line 16 of file DummyState.cpp.

+ +
+
+ +

◆ takeoff_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
void bebop2::DummyState::takeoff_callback (const std_msgs::Empty::ConstPtr & msg)
+
+protected
+
+ +

Joystic command to takeoff the bebop2.

+
Parameters
+ + +
msgpublish empty message to the topic takeoff
+
+
+ +

Definition at line 38 of file DummyState.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classbebop2_1_1DummyState.png b/docs/html/classbebop2_1_1DummyState.png new file mode 100644 index 0000000000000000000000000000000000000000..652c6ec1a3134d10cebd69822b31bf149fe280f7 GIT binary patch literal 1192 zcmeAS@N?(olHy`uVBq!ia0y~yVB`U^J2;quq$-Q*Z6GBb;1lBd|Nnm=^TnI5rTvGN zTNr2-NK8NT;=q9eK=I&7msbGgI7@>3f*F8(FfeDDeT9L6#n{uuF{Fa=?cCR8kF0py zw!4Ne{a*iwd8fc>F4egUCDYDLPn)j75nq<_Q-AGNwP(%G-s$DFr+BpOu68w2Ied4o z(TRw>ePUlqFD$(8H{D-(|C<+KfA8L%Z}3*=-8=Rl#YXdb3no8&7dK;{wZZAdg^|b3 z-dFkPW&XtT_1BYkGV0AIu6cjtUf%ZC>z-Bz|1>I{V^#G1-x}Vvu}}8BH`-=6rBGb* zY_0Y0*?$tgzy6|E{HE%5?aa8yEYtmM3m5;Ky|(dbR=!X2{l7O(@A$1)YIJG+w&g!> z-pKR(BXfJR@Z9}pR~nXud`kA7{l)Oh?W;XP23uxL_nc~Ies%kt_>xoG>q@d4U$cFY zHk#)8=H1IXZ4;(l_K-TCvEuxubq(+Ky#3R4`uMvSn=a3F`6(*7wCKyr`M2)9w)S1! zvpdbL`2IQe(@!GK-jKi0Jgcx~CXeajYfSn3=Juz^td`9Fx5o7Uym`*A&a3`9eRoNJ z?CX@9zPoJS-#flxZqMl>cXt<`{ZiPHY5p?oh}Ash-JQFC|DPLvV#bsAtIEpdE5-iq zy>{nre4CN8(Ve^6lN2T2y%Rk-fv5cYsZh7P6$lHqI9PD z$)3|siv&L(JbK3G4j<4?bn4TH=R7dh{)r^_855>w<&YgMlb&g8%tOt#ea=pgJ z)wb!UBI5p*SnvP;_5Y&>-?p=?KmUutc(eS|J*h?0i=LKUpMUz#_A?QWgBoVu>@SLA zj15Yf@%meiZ%4J*6tKE8cT>DNGdI;5MHqYES$l{1+^SXT;uli=Zts3~mZwnjz?nD4 ze=-}%O>L2t{GV|)!npRX@2=EMZ`JO0?Won6`tAO0-!o_K$sxHGlrGP#QId>2_Oxhc z2ROVK!Qu613L?BTJX%v2LR6fM7_@*v%m51E2B2rz9Dur+7brqw<=UP**XmARUvxLVyj)PQKZ0rZd^eXpGcKnt z(exE}XWPK`FV^Up_}+cT_U=|np8MoW;r@GaWkSoQwbcs>>OVSa^sI2b@r~Wy!a7E3 z$uE<7*WW9eKecD)owui7{I*tE93N6VX^m$2 zjz4ZLG7pX$Jzj0|v#n=m)fd*1m=ut)UuFfSPImdKI;Vst0OZU{`v3p{ literal 0 HcmV?d00001 diff --git a/docs/html/classbebop2_1_1ExtendedKalmanFilter-members.html b/docs/html/classbebop2_1_1ExtendedKalmanFilter-members.html new file mode 100644 index 0000000..716e817 --- /dev/null +++ b/docs/html/classbebop2_1_1ExtendedKalmanFilter-members.html @@ -0,0 +1,105 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::ExtendedKalmanFilter Member List
+
+
+ +

This is the complete list of members for bebop2::ExtendedKalmanFilter, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
CONTROL_DIMbebop2::ExtendedKalmanFilterprotected
DTbebop2::ExtendedKalmanFilterprotected
ExtendedKalmanFilter(const std::vector< double > &sigma_pos, double dt, int state_dim)bebop2::ExtendedKalmanFilter
FilterBase()FilterBaseinline
getPtr()FilterBaseinline
init(const std::vector< double > &X0) overridebebop2::ExtendedKalmanFiltervirtual
internal_update(const Eigen::VectorXd &z, const Eigen::VectorXd &u)bebop2::ExtendedKalmanFilterprotected
jacobF(const Eigen::VectorXd &x, const Eigen::VectorXd &u)bebop2::ExtendedKalmanFilterprotected
jacobH() constbebop2::ExtendedKalmanFilterprotected
motion_model(const Eigen::VectorXd &x, const Eigen::VectorXd &u)bebop2::ExtendedKalmanFilterprotected
observation_model(const Eigen::VectorXd &x)bebop2::ExtendedKalmanFilterprotected
operator()(std::vector< double > &state)bebop2::ExtendedKalmanFilter
STATE_DIMbebop2::ExtendedKalmanFilterprotected
update(const std::vector< double > &obs, std::vector< double > &result) overridebebop2::ExtendedKalmanFiltervirtual
update_cmd(const geometry_msgs::Twist::ConstPtr &cmd)bebop2::ExtendedKalmanFilter
X_FilterBaseprotected
~FilterBase()FilterBaseinlinevirtual
+ + + + diff --git a/docs/html/classbebop2_1_1ExtendedKalmanFilter.html b/docs/html/classbebop2_1_1ExtendedKalmanFilter.html new file mode 100644 index 0000000..1cf87a0 --- /dev/null +++ b/docs/html/classbebop2_1_1ExtendedKalmanFilter.html @@ -0,0 +1,548 @@ + + + + + + + +airlib: bebop2::ExtendedKalmanFilter Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::ExtendedKalmanFilter Class Reference
+
+
+ +

#include <ExtendedKalmanFilter.h>

+
+Inheritance diagram for bebop2::ExtendedKalmanFilter:
+
+
+ + +FilterBase + +
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ExtendedKalmanFilter (const std::vector< double > &sigma_pos, double dt, int state_dim)
 
void init (const std::vector< double > &X0) override
 
void operator() (std::vector< double > &state)
 
void update_cmd (const geometry_msgs::Twist::ConstPtr &cmd)
 
void update (const std::vector< double > &obs, std::vector< double > &result) override
 
- Public Member Functions inherited from FilterBase
 FilterBase ()
 
virtual ~FilterBase ()
 
FilterPtr getPtr ()
 
virtual void init (const std::vector< double > &X0)=0
 
virtual void update (const std::vector< double > &obs, std::vector< double > &result)=0
 
+ + + + + + + + + + + +

+Protected Member Functions

Eigen::VectorXd motion_model (const Eigen::VectorXd &x, const Eigen::VectorXd &u)
 
Eigen::MatrixXd jacobF (const Eigen::VectorXd &x, const Eigen::VectorXd &u)
 
Eigen::VectorXd observation_model (const Eigen::VectorXd &x)
 
Eigen::MatrixXd jacobH () const
 
void internal_update (const Eigen::VectorXd &z, const Eigen::VectorXd &u)
 
+ + + + + + + + + + +

+Protected Attributes

double DT
 
double STATE_DIM
 
double CONTROL_DIM
 
- Protected Attributes inherited from FilterBase
std::vector< double > X_
 
+

Detailed Description

+
+

Definition at line 16 of file ExtendedKalmanFilter.h.

+

Constructor & Destructor Documentation

+ +

◆ ExtendedKalmanFilter()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
ExtendedKalmanFilter::ExtendedKalmanFilter (const std::vector< double > & sigma_pos,
double dt,
int state_dim 
)
+
+ +

Definition at line 9 of file ExtendedKalmanFilter.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + + +
void ExtendedKalmanFilter::init (const std::vector< double > & X0)
+
+overridevirtual
+
+ +

Implements FilterBase.

+ +

Definition at line 115 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ internal_update()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ExtendedKalmanFilter::internal_update (const Eigen::VectorXd & z,
const Eigen::VectorXd & u 
)
+
+protected
+
+ +

Definition at line 81 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ jacobF()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::MatrixXd ExtendedKalmanFilter::jacobF (const Eigen::VectorXd & x,
const Eigen::VectorXd & u 
)
+
+protected
+
+ +

Definition at line 57 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ jacobH()

+ +
+
+ + + + + +
+ + + + + + + +
Eigen::MatrixXd ExtendedKalmanFilter::jacobH () const
+
+protected
+
+ +

Definition at line 68 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ motion_model()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd ExtendedKalmanFilter::motion_model (const Eigen::VectorXd & x,
const Eigen::VectorXd & u 
)
+
+protected
+
+ +

Definition at line 39 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ observation_model()

+ +
+
+ + + + + +
+ + + + + + + + +
Eigen::VectorXd ExtendedKalmanFilter::observation_model (const Eigen::VectorXd & x)
+
+protected
+
+ +

Definition at line 75 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ operator()()

+ +
+
+ + + + + + + + +
void ExtendedKalmanFilter::operator() (std::vector< double > & state)
+
+ +

Definition at line 29 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ExtendedKalmanFilter::update (const std::vector< double > & obs,
std::vector< double > & result 
)
+
+overridevirtual
+
+ +

Implements FilterBase.

+ +

Definition at line 103 of file ExtendedKalmanFilter.cpp.

+ +
+
+ +

◆ update_cmd()

+ +
+
+ + + + + + + + +
void ExtendedKalmanFilter::update_cmd (const geometry_msgs::Twist::ConstPtr & cmd)
+
+ +

Definition at line 95 of file ExtendedKalmanFilter.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ CONTROL_DIM

+ +
+
+ + + + + +
+ + + + +
double bebop2::ExtendedKalmanFilter::CONTROL_DIM
+
+protected
+
+ +

Definition at line 41 of file ExtendedKalmanFilter.h.

+ +
+
+ +

◆ DT

+ +
+
+ + + + + +
+ + + + +
double bebop2::ExtendedKalmanFilter::DT
+
+protected
+
+ +

Definition at line 41 of file ExtendedKalmanFilter.h.

+ +
+
+ +

◆ STATE_DIM

+ +
+
+ + + + + +
+ + + + +
double bebop2::ExtendedKalmanFilter::STATE_DIM
+
+protected
+
+ +

Definition at line 41 of file ExtendedKalmanFilter.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classbebop2_1_1ExtendedKalmanFilter.png b/docs/html/classbebop2_1_1ExtendedKalmanFilter.png new file mode 100644 index 0000000000000000000000000000000000000000..52de18df350a92c52dd002210035dd348fa8bd4a GIT binary patch literal 1115 zcmeAS@N?(olHy`uVBq!ia0y~yU}OZcJ2;que&& z!hR?8<=^=g)@2Nw9!cLH{MkKAZ<%3)%pb#!=p|EvG88*ISj0FdFmO(AaDNb2>G!nq z!oq#GAD=#vF8sD~PfMxd_i`mA{jYXR>%%PSrgv;f3hZO)^Dz*((eUp78!Pi^*{AJR ztj#T2p}ui@R<)V(^@V>H&%WWSqO|Qw>U-l^p5G?k`E{qu<;XNIh0ZOH?mU%Rw*GG1 zj~hXz`giSi2HO74TlCjg_JH6F-wbgZoonk33l!{)TAly;xNObaJj79EA zWll36)l^Lm|6Y3TUh&(@yAK?j)?$8#_1Upkd?nIrtXY*VdAT3B$9n8Ts-XKjCc%jl zesMBMf7FZ@oEW!$(fM9ArBAjOnN=K^Kxl)Ihvw1~Oby##F*7)6+cfs~zu-6|9Kp!q z?!d$#5L?2)a74_OfnlR7KZ8TgMP>$p=r2SGz5jk-la6;r;z`Tr2b36v6c~kebU57l zckO;q+jPt4f5c*457>TV+0`+pc%PrR@D02A^27VyX0H|0$o>BRx6@NG+y1|I;{Wg54b=WWa3V0xK+plNgve>Cn;0If{l(I7fy@8FXJf0T4=iB} z2L&fE7%Re*!PR3j4(xYOSUSat+cVU3gGU1k5Swy^!n zTJ9~nEwOg{%(vHq*zZ3M4ds8S(zxwV?jg^$HxK0Wd|vfBvg+n7gHzv5Uam}U-aa=V zw07m^t|9pI>Q@J4b`D^*v?je&k|IN9wk)3JPs`js@Os1^995+7RDy+D*Ie*P^ zg_XB1&3Xn5ypT}-SEuDFo^>=HNKrnnCp^h>tM=rXZLc4MbM86EY|Nx<&wJnCG_&&= zPNx0u8>g2y?qBjfN-^PG)2z*D<&NGQ&&o6!zw0qGR*SD#C3n>lXj%W4;KwUg#c2vD rG|pFEu9u|KmGrx-_WPU$76S~Pu6{1-oD!M<7Ek?s literal 0 HcmV?d00001 diff --git a/docs/html/classbebop2_1_1LQR-members.html b/docs/html/classbebop2_1_1LQR-members.html new file mode 100644 index 0000000..ca09cbb --- /dev/null +++ b/docs/html/classbebop2_1_1LQR-members.html @@ -0,0 +1,89 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::LQR Member List
+
+
+ +

This is the complete list of members for bebop2::LQR, including all inherited members.

+ + +
LQR()bebop2::LQR
+ + + + diff --git a/docs/html/classbebop2_1_1LQR.html b/docs/html/classbebop2_1_1LQR.html new file mode 100644 index 0000000..6cae761 --- /dev/null +++ b/docs/html/classbebop2_1_1LQR.html @@ -0,0 +1,123 @@ + + + + + + + +airlib: bebop2::LQR Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::LQR Class Reference
+
+
+ +

#include <LQR.h>

+ + + + +

+Public Member Functions

 LQR ()
 
+

Detailed Description

+
+

Definition at line 16 of file LQR.h.

+

Constructor & Destructor Documentation

+ +

◆ LQR()

+ +
+
+ + + + + + + +
bebop2::LQR::LQR ()
+
+ +

Definition at line 44 of file LQR.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classbebop2_1_1PID-members.html b/docs/html/classbebop2_1_1PID-members.html new file mode 100644 index 0000000..c3f7e5a --- /dev/null +++ b/docs/html/classbebop2_1_1PID-members.html @@ -0,0 +1,91 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::PID Member List
+
+
+ +

This is the complete list of members for bebop2::PID, including all inherited members.

+ + + + +
calculate(double setpoint, double pv)bebop2::PID
init(double dt, double max, double min, double Kp, double Kd, double Ki)bebop2::PID
PID()bebop2::PID
+ + + + diff --git a/docs/html/classbebop2_1_1PID.html b/docs/html/classbebop2_1_1PID.html new file mode 100644 index 0000000..50b87a7 --- /dev/null +++ b/docs/html/classbebop2_1_1PID.html @@ -0,0 +1,239 @@ + + + + + + + +airlib: bebop2::PID Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::PID Class Reference
+
+
+ +

Calculates an error value as the difference between desired output and the current output and applies a correction based on proportional, integral and derivative terms(denoted by P, I, D respectively). + More...

+ +

#include <PID.h>

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

+Public Member Functions

 PID ()
 A default Constuctor.
 
void init (double dt, double max, double min, double Kp, double Kd, double Ki)
 Init method initiliazes all the controller parameters like proportional constant, Integral constant, Derivative constant, rate of change, maximum and minimum output values.
 
double calculate (double setpoint, double pv)
 At first it calculates the error by subtracting the setpoint and current position of the drone, Then the Proportional, Integral, Derivate terms are calculated using that error and their repective constans. Following that, we find out the total ouptput by the sum of three terms and tehn restrict the output withtin the boundaries of minimum, maximum valeus.
 
+

Detailed Description

+

Calculates an error value as the difference between desired output and the current output and applies a correction based on proportional, integral and derivative terms(denoted by P, I, D respectively).

+ +

Definition at line 12 of file PID.h.

+

Constructor & Destructor Documentation

+ +

◆ PID()

+ +
+
+ + + + + + + +
bebop2::PID::PID ()
+
+ +

A default Constuctor.

+ +

Definition at line 8 of file PID.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ calculate()

+ +
+
+ + + + + + + + + + + + + + + + + + +
double bebop2::PID::calculate (double setpoint,
double pv 
)
+
+ +

At first it calculates the error by subtracting the setpoint and current position of the drone, Then the Proportional, Integral, Derivate terms are calculated using that error and their repective constans. Following that, we find out the total ouptput by the sum of three terms and tehn restrict the output withtin the boundaries of minimum, maximum valeus.

+
Parameters
+ + + +
setpointIt is the desired position of the drone.
pvIt is the current position of the drone.
+
+
+
Returns
Returns the error between the setpoint and the current postion of the drone.
+
Note
PID Gains identifiers.
    +
  • Kp = Proportionality Constant
  • +
  • Kd = Derivative Constant
  • +
  • Ki = Intergration Constant
  • +
+
+ +

Definition at line 22 of file PID.cpp.

+ +
+
+ +

◆ init()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void bebop2::PID::init (double dt,
double max,
double min,
double Kp,
double Kd,
double Ki 
)
+
+ +

Init method initiliazes all the controller parameters like proportional constant, Integral constant, Derivative constant, rate of change, maximum and minimum output values.

+ +

Definition at line 13 of file PID.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classbebop2_1_1QuadControllerPID-members.html b/docs/html/classbebop2_1_1QuadControllerPID-members.html new file mode 100644 index 0000000..3a07799 --- /dev/null +++ b/docs/html/classbebop2_1_1QuadControllerPID-members.html @@ -0,0 +1,105 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::QuadControllerPID Member List
+
+
+ +

This is the complete list of members for bebop2::QuadControllerPID, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
ButtonState enum namebebop2::ControllerBaseprotected
compute_control(const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control) overridebebop2::QuadControllerPIDprotectedvirtual
CONTROL enum valuebebop2::ControllerBaseprotected
ControllerBase(StateObserverPtr mGetState, ros::NodeHandle &nh)bebop2::ControllerBaseexplicit
dt_bebop2::ControllerBaseprotected
ENGAGE enum valuebebop2::ControllerBaseprotected
goal_distance(const std::vector< double > &X, const std::vector< double > &setPoints)bebop2::ControllerBaseprotected
IDLE enum valuebebop2::ControllerBaseprotected
LAND enum valuebebop2::ControllerBaseprotected
m_buttonStatebebop2::ControllerBaseprotected
m_get_statebebop2::ControllerBaseprotected
m_goal_thresbebop2::ControllerBaseprotected
m_mubebop2::ControllerBaseprotected
m_nhbebop2::ControllerBaseprotected
publish_cmd_vel(const std::vector< double > &U)bebop2::ControllerBaseprotected
QuadControllerPID(StateObserverPtr mGetState, ros::NodeHandle &nh)bebop2::QuadControllerPID
TAKEOFF enum valuebebop2::ControllerBaseprotected
+ + + + diff --git a/docs/html/classbebop2_1_1QuadControllerPID.html b/docs/html/classbebop2_1_1QuadControllerPID.html new file mode 100644 index 0000000..7b9cbad --- /dev/null +++ b/docs/html/classbebop2_1_1QuadControllerPID.html @@ -0,0 +1,267 @@ + + + + + + + +airlib: bebop2::QuadControllerPID Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::QuadControllerPID Class Reference
+
+
+ +

Responsible to find the error values every second whenever the position of the quadrators of the drone is updated. + More...

+ +

#include <QuadControllerPID.h>

+
+Inheritance diagram for bebop2::QuadControllerPID:
+
+
+ + +bebop2::ControllerBase + +
+ + + + + + + + + +

+Public Member Functions

 QuadControllerPID (StateObserverPtr mGetState, ros::NodeHandle &nh)
 The QuadControllerPID constructor initializes a vector of type double that is responsible for populating the PID Gains, maximum and minimum threshold values.
 
- Public Member Functions inherited from bebop2::ControllerBase
 ControllerBase (StateObserverPtr mGetState, ros::NodeHandle &nh)
 Subscribes to sensor_msgs/joy which reports the state of a joystick's axes and buttons. It also publishes the message of drone takeoff and landing along with the linear and angular position of the drone. The constructor is also responsible to call the appropriate functions at specifc rates that plays a role in setting the set-point at a current location. Lastly it contructs an object to send the updated pose to the RVIZ for visualization and also sets the state of the controller's button.
 
+ + + + + + + + + + + + + +

+Protected Member Functions

void compute_control (const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control) override
 Similar to the calculate() method in PID.h class, the compute_control method also calculates the error, PID Gain constants and return the error value when the drone is hovering over a position for the four vector values.
 
- Protected Member Functions inherited from bebop2::ControllerBase
void publish_cmd_vel (const std::vector< double > &U)
 This function sets the linear positon of the drone to all 3 linear axes and to angula z-axis and publishes the message of the current position of the drone.
 
double goal_distance (const std::vector< double > &X, const std::vector< double > &setPoints)
 This function calculates the distance between the setpoint of the drone and the current state position.
 
virtual void compute_control (const std::vector< double > &X, const std::vector< double > &setPoints, std::vector< double > &control)=0
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Types inherited from bebop2::ControllerBase
enum  ButtonState {
+  IDLE = 0 +, TAKEOFF +, LAND +, ENGAGE +,
+  CONTROL +
+ }
 Applications applied to control the state of the robot using Joystick controller. More...
 
- Protected Attributes inherited from bebop2::ControllerBase
ros::NodeHandle m_nh
 This ROS Handle attribute is used to create various publishers and subscribers which also deals with messages.
 
std::mutex m_mu
 Locks some functions for safe operations.
 
enum bebop2::ControllerBase::ButtonState m_buttonState
 
StateObserverPtr m_get_state
 This attribute gives the state of the robot.
 
double dt_
 Sample Time.
 
double m_goal_thres
 Goal region threshold.
 
+

Detailed Description

+

Responsible to find the error values every second whenever the position of the quadrators of the drone is updated.

+ +

Definition at line 15 of file QuadControllerPID.h.

+

Constructor & Destructor Documentation

+ +

◆ QuadControllerPID()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bebop2::QuadControllerPID::QuadControllerPID (bebop2::StateObserverPtr mGetState,
ros::NodeHandle & nh 
)
+
+ +

The QuadControllerPID constructor initializes a vector of type double that is responsible for populating the PID Gains, maximum and minimum threshold values.

+
Parameters
+ + + +
mGetStateThis parameter givs the current state of the robot.
nhUsed to setup publishers, subscribers and deals with various messages.
+
+
+ +

Definition at line 9 of file QuadControllerPID.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ compute_control()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void bebop2::QuadControllerPID::compute_control (const std::vector< double > & X,
const std::vector< double > & setPoints,
std::vector< double > & control 
)
+
+overrideprotectedvirtual
+
+ +

Similar to the calculate() method in PID.h class, the compute_control method also calculates the error, PID Gain constants and return the error value when the drone is hovering over a position for the four vector values.

+
Parameters
+ + + + +
Xis the current state of the drone.
setPointsis the desired goal position of the drone.
controlis the actively control position.
+
+
+ +

Implements bebop2::ControllerBase.

+ +

Definition at line 26 of file QuadControllerPID.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classbebop2_1_1QuadControllerPID.png b/docs/html/classbebop2_1_1QuadControllerPID.png new file mode 100644 index 0000000000000000000000000000000000000000..0b57c505dc93781c7b31fd2b4bca8daa276b60b2 GIT binary patch literal 706 zcmV;z0zLhSP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0006_ zNkl48;$}WYYJ4;_HY?%O7WSnyltF;p|9(@}souS4`71JwTX9^7aZ& zlJrw>lBAz{oQY&hNa^3}}y%sCDNNgDMz^D*;j z`#rsb0#^XXP^dC1z-J|s=+a%PvC^IornREMdvLao$pil5O0lDduV-7If^ zjIV~%PVIA6`B@*Iq-jT-+0A(KOPnj4Iqznx;lGdPQFJfI(}c}jbz5sc=4a$ z&S`P`@N?PO-r$UjxjS50=5B3Sm%T@{hcle(dIKXO(rBO941eY4(()p&^Dee=U`Lq zNMBML&t}Qk?|`$)&qK~UZ|uF@UvF`Zv#^zX{34!5(XA8y=nBrnv#!%$^0V_KR0&-2 zQzzP~d#^aJ)O*Q^@<6Wnzg2CfH1DUm(^4wkdbgb2_fte(^b07*qoM6N<$f+YoE;{X5v literal 0 HcmV?d00001 diff --git a/docs/html/classbebop2_1_1StateObserver-members.html b/docs/html/classbebop2_1_1StateObserver-members.html new file mode 100644 index 0000000..1e0bafb --- /dev/null +++ b/docs/html/classbebop2_1_1StateObserver-members.html @@ -0,0 +1,94 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
bebop2::StateObserver Member List
+
+
+ +

This is the complete list of members for bebop2::StateObserver, including all inherited members.

+ + + + + + + +
m_filterbebop2::StateObserverprotected
m_initializedbebop2::StateObserverprotected
m_sensorbebop2::StateObserverprotected
m_statebebop2::StateObserverprotected
operator()(std::vector< double > &result)bebop2::StateObserver
StateObserver(FilterPtr filter, SensorPtr sensor)bebop2::StateObserverexplicit
+ + + + diff --git a/docs/html/classbebop2_1_1StateObserver.html b/docs/html/classbebop2_1_1StateObserver.html new file mode 100644 index 0000000..93d15b6 --- /dev/null +++ b/docs/html/classbebop2_1_1StateObserver.html @@ -0,0 +1,274 @@ + + + + + + + +airlib: bebop2::StateObserver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
bebop2::StateObserver Class Reference
+
+
+ +

#include <StateObserver.h>

+ + + + + + +

+Public Member Functions

 StateObserver (FilterPtr filter, SensorPtr sensor)
 
void operator() (std::vector< double > &result)
 
+ + + + + + + + + +

+Protected Attributes

std::vector< double > m_state
 
FilterPtr m_filter
 
SensorPtr m_sensor
 
bool m_initialized
 
+

Detailed Description

+
+

Definition at line 18 of file StateObserver.h.

+

Constructor & Destructor Documentation

+ +

◆ StateObserver()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bebop2::StateObserver::StateObserver (FilterPtr filter,
SensorPtr sensor 
)
+
+explicit
+
+ +

Definition at line 11 of file StateObserver.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ operator()()

+ +
+
+ + + + + + + + +
void bebop2::StateObserver::operator() (std::vector< double > & result)
+
+ +

Definition at line 17 of file StateObserver.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ m_filter

+ +
+
+ + + + + +
+ + + + +
FilterPtr bebop2::StateObserver::m_filter
+
+protected
+
+ +

Definition at line 33 of file StateObserver.h.

+ +
+
+ +

◆ m_initialized

+ +
+
+ + + + + +
+ + + + +
bool bebop2::StateObserver::m_initialized
+
+protected
+
+ +

Definition at line 35 of file StateObserver.h.

+ +
+
+ +

◆ m_sensor

+ +
+
+ + + + + +
+ + + + +
SensorPtr bebop2::StateObserver::m_sensor
+
+protected
+
+ +

Definition at line 34 of file StateObserver.h.

+ +
+
+ +

◆ m_state

+ +
+
+ + + + + +
+ + + + +
std::vector<double> bebop2::StateObserver::m_state
+
+protected
+
+ +

Definition at line 32 of file StateObserver.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/docs/html/classes.html b/docs/html/classes.html index ce36e56..4361195 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -3,7 +3,7 @@ - + airlib: Class Index @@ -29,7 +29,7 @@ - + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
main.cpp File Reference
+
+
+
#include <iostream>
+
+

Go to the source code of this file.

+ + + + +

+Functions

int main (int argc, char *argv[])
 
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+ +

Definition at line 7 of file main.cpp.

+ +
+
+
+ + + + diff --git a/docs/html/control_2LQR_2main_8cpp_source.html b/docs/html/control_2LQR_2main_8cpp_source.html new file mode 100644 index 0000000..69be4c7 --- /dev/null +++ b/docs/html/control_2LQR_2main_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +airlib: airlib/control/LQR/main.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
main.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by redwan on 12/15/22.
+
3//
+
4#include <iostream>
+
5using namespace std;
+
6
+
7int main(int argc, char* argv[])
+
8{
+
9 cout << "LQR Controller Initialized" << endl;
+
10 return 0;
+
11}
+
int main()
Definition: main.cpp:8
+
+ + + + diff --git a/docs/html/dir_0b09c446dd7a9edef411ea7168ce1167.html b/docs/html/dir_0b09c446dd7a9edef411ea7168ce1167.html index 5d4fed7..cefde27 100644 --- a/docs/html/dir_0b09c446dd7a9edef411ea7168ce1167.html +++ b/docs/html/dir_0b09c446dd7a9edef411ea7168ce1167.html @@ -3,7 +3,7 @@ - + airlib: airlib/localization/Sensors Directory Reference @@ -29,7 +29,7 @@ - + @@ -29,7 +29,7 @@ - + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
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/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 new file mode 100644 index 0000000..0caaa53 --- /dev/null +++ b/docs/html/graph_legend.md5 @@ -0,0 +1 @@ +6baf1c18d0a85204edda4be500f3e271 \ No newline at end of file diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5238b2219617ed3c46ecb3a76f86fe23b2831a GIT binary patch literal 20823 zcmbTe1yq$?*EUK>DUEbWh;(;Kh#;YafOL0vr-U>}x6&QbU7HT+4k_vGI%_}A`~Ke< zXZ+)g^B*0+jr(Tpd(AcHHLrQiiJ>3mrO=)eJ%@pTL6d$jp$G#5HwCUIkrBaXCEJy4 z@C8x-gOmi!6ZCIZOMV;-3ysH1^u8ZIK3lI^JGGQjC*(D( zVw=|{>D0-Ji(1z8j5`-El*`JUeJS+SFlLTlDtRdhTT_KyZ9QH3lIK~StR4PHvyYE2 z?WgGUu2b(@-YBGux#jA#2!>w`pe)pi zz}+^1TS_RTxrQ>(yzUb0->3|Y=dya%H~su)(W!7kjzvj%59Zyx1({oZ<-AtWpLg8pOhb6FNE!qTppu);@ATY2HiH}^${&}3!G?a% zvv3jo*ulX;1c~te?RnEWdS@`Y(}Rdos?;0sPW1T8%gZ4ldlTh4BAs1bT2G@xLyj&X z4OLdDQ^l${L_`DEC+jSKwI^@fPy1=zjysTUwurq{KS(MX4~xLrG<@CG_KIh&TY5L_ z3xnr<&ju6mc%$$K8(Z@sHz!Zud}ix7hN^5$+x38}aoJnIJA&vWirY%9!8oG$>HMb@ zA(u1baCuWCzg#N&X=N|3_n&7lUWn-3lVuSq`RLGBeB_dRLtt3nFox$0rxHG{1^`2u z&9n%>^hT1KOwLwvwrmlZ^O%Wc`oYgNc+^?An|WM~o2-i76LI}1s;C@Ubg7X`$Lm7H@6TM7(F=p#$Xv6DJm687n3(Op zuryb2yA>6z&CSjAcZW?4f4(ueZpN#=mzQU*JSiUklxJ0BGMqX3?eB%4aAF?KyWCdP8UIhh5I#rRG^1nVWi`}_GC7|&KyEc|jud`C>(Ct*F+*SY~UCUX+&A z`?rb*)q97)2V?Xu42G48+_zVKeNl500`;ANAT(kKxzGJuF)_F%=Yts$ zn;mx)^JJ4dms>o{X39u~+|O5mf!6agz4g~25sVtO;ZfBrf77|VZXLCOO%xRs33zQO zT0E|{+Wp`gAQd(%!r;fn_NGgBCJS+bG02TO{1K>WY0u^@%6~Vzonfc06qmQA^vBW0 z#m092GMkufbYk%H^K;yvjY;M(vA;fE!%j`0=QB!C77^5ccCb*}vu69!y#5o0V7uJg zx7WAV$GQ^F?l4FwoQ|}eb90X8PB(|Vue8d{r@qbCm}3zV$z)~-IiMcd^4704?zvL4 z$Brhjj5_es6&5l++&lbudaz01vHGSnoYH(Vz+k!1n$GleN4`*NW3t4va(tL0Jz1=g zm@u4r2C27`RDTHt8hYRF-(My$Ysok|at^2R^p1{3@vL~pSuNC78V%y9`a}uezIprh z?PS5H0KKjtyZu?V*9sX!G>Mv>xT>0O>#Ub%f0-#o+O7CJJvi=+BZ!EI000sf6@~eb z$UMvy$z}jKzFv=Vc(|CUcG#BBQ^=I>jU;7*e4lR?AVC)s6HDT;A?xq&pDa`gj-irb zxBJtrn3_l5$Szlu%4x2gv$m_{oV;g4Zes%@pCQ;Esnul5OY&=Iec!e}KXbfMiPrr3 z&cJ-e7(`G`PTm$@`oUaXEZmnGdm-JO`VH*yC^DnoGA;0u;?hi_yVG7{P`}0eKl^Sy zSg3;sZocZ?KDuTboslsTNh+ZEFeS7-yAMF7yqpE##^}isI8BG}Cdn{7{Cg1^8k!ki zNEG>~hD}S))^MuX{4Y8T!DE=cnR1sUJ{C0j{J3}qRr?jMtKUB)U!arncZ1+06moYg zlvBdhN`5`nkUo5KeQkR>NjLL!wQaXR!!w-1*|FnT#dL?{Qs#Ac#lb6>hTj|h>fman z^656Lzq~DDJsW0lfbUL@mdt$lZr=Lp7^fAF># zgs*z!=s_4@sB7Y6m~*MGLRd$ZmK znEw8OFe>uo8TqWO-uq?~Kg0D83K5riw>XB7L>L~^Y_l5&*rLfsU(95gR#SIgu1w^@ zo-&fQ2UGR-=r%yc{l%74HkKCURXuQO62M7OJpR7&emLNX%*n^$a$(LaSL^6k%CE3W z{o?Jde0FZwb+y8AlkQ@Vx>Dio<$Zf&qWWVg=M&Z8->I-MB=U``QVl-4Q|c9)d5M)* z;=EqBoJ^@a`QlB^g7=e3B)qQC8>9lRTbqd=9NnPcziT6x!nqbHa7e+)`5m}oIu5P; z@x#^1M4gR}e5SBgiJd~GaC&#QL?oHeKzAsPw6t`#%}VPHy2~)v46FCOD}Yf+W#yMm zE=R`TrlIkAiHke6 zvQ(*TY~A+XG%uMiUGp!Q>B(V9R|RV+$5*?Z8M_2$(G#}(_bxWG|IL+3QO=ht5onw$ z(uk!UMvAIn#?u!ryH5s`N?pu-0RJo#AFZ=I+5H9geFyv4T35C3=AsLRNlVcEH#3X| zK5Xb6u;C`EteEmb3O)(#L(|6xC+{hFL7wB&@|os)ueQ@0^FFvLMvJ;8gMxkf zVTP(M{oKUL8*EWV_tEEUgG;1w&^^;L-}tJx+ftA!?54n`*}2FT-4}6M6)_R`zk(MJ zLb$3IAcH=liY7a;4eA3d>m+p?CQoqAK!Z$-axf%}M@*+3=lEB)&IbF5lZz(Q5Jg!< zzljUbeOJ4ULpQNInUAsiaydVK_ z#Z3)xD?(6G8;>WWEzz2`3nT~XMc<_L3qs|{H`4sk{b^0=yCU=o?aMl8r?O8JiU0QV z#mhbu49`}*e%{dS6$3qpBC*py*32c*uiHQJNc^M^d7h~(Ab;l5_x0?RE_HGGKS!;s zhq~FB$SJ^j9^Ih18|kZjqq-Jn-oID!i8UeDVA?)X+=P{u zk#Vo1{_j?v%Mt`_+}I1g5cfz{_{kn2t%8ipU&zfmG_rRo`xyg0@NR(hU*mjak9tio zuge@uj*_f=JW~!>j9%PsA4@I`rs=70>NDbiSFBAsP&*bj^AVup_cK(v>i$mIxlEz{ z`2X1zz0JDcQ-c7q%A?9`VjC0|W#YLx0xJ(A->RUx=l(xdEqY1w`n7dPR8*9$3rUfq z*%`(^n^v4`aM*VKx+B8IX7|%-VZuKkVEen``=XcsA@3^BDD``Kdy$9@g1#hNSZt4^ z_a;vL!okLV4J+J!r`70qlUI^ge46)f6;cVdg`uZy+wqba3dUQ1F0>PP;wQ8f) zLdK>oFQvpr9QYA~_B-@o18=}3;y#$wst9uyeumm_KuS|n(<``(ZI*xo)s&v{gRcj_ z%VF~}0o7O1%n;OS#^Sc}@}tq-C~_Z7iDmp4L`c%x(9qDt?V0eHC{6AgT?Uad(P4BgdQv7n=)3u~V9eg2yJpWTsdz(aJe75ux{rU@L#S*0ZS z5s;9`8MX>m4krsITwnlE^qARke6$!&;d*S(=nOXmoLZg&FC-!=s%?mX?ySe0jcCI|C1s&loZu&8)329Tti1S16VRP(Ff|2kn2Ch!CwL`X;< z2MP*`Rs@@P1RH$6d#;=Gdk%;uJ~{aj770mOvIa)2RWPxEr>{4tNFEyl^NPQ{jWhqp zvnW|1v!a@p`Q5X%4|zuFzadFd*f=2dpzLir{igB}`&GMgQ!dL^Jf#tqQ^ z*Dn-{lK$f%|L0c&0iNvy>Y@ywz#b6!uTd`%ZPS|qK5k~dp8DreWpLyEe_y!~W89A} zy)8H$?OKBUH*Qspkqwqe1BwXFW&T$R{hws||MAN4t#nIBNXR=-_#YzY)o-lUn!`}N z3ny4TRQo0-(Ha>UDNh$+r@C=bbc%+>6=N%%&8Z=F7HVqN91|oJTB|Ud3@4j-!H-g)a4mgD95wMGvkJan%V8ZPj zD00Q?f`1H(6bf4aQjtsiZ9oq&P9t_wt@8LTNCa`{w{P?pJAW?~g}+bTqNAYDU6{SO z3XO0&0Ai7n zY6W2x78xEbw-6Zcx*lgWiGL~@5U^c^0r9&&mMwmWp1U}1qK><~^qG=8E62TX7D#%}#%Htt+C6wmV zC4>`sa!spuh-gI0Npat?n-qo2C*Mc}f~UlM`LdhTWwGP&;qHU^d5=AJtx~>xrEUjY zo_xBDtZaBwR}tpGnLCqQ3H9K1w|MrN~8dE-s~2apQb@>>OPN8Ob`OS1F+tF`E-83>SEV> zqjXr)f`gGr`5jmDQmy}NXZkpMt>i0^hqI|ANS2G#Fbn$42&x4f){!G^X?P@vg$q48`Gj9wlr*zuC=&sM_MU)!_nUfMEit4%X$};6pFVy1WibeERurvPdPYudk0}kBOBv+9cDfw%rZVP-{8YIa_G}t*Sw!JbU(xRabPG z<%OV#6bdTp##empERdtGZ*ESaeC`84p$+GDR5yZ;hZmHXhz|~hM^)1fp}hI@InWaj zzO_}+jXc(}_CEc1!(&yHuaG$cv>6#0ndk6G=s7M&%Ot$ES)yGauD$~u?F1A`6<&AF z{{H@e618Qu4Gqb1Th6v$t@tQ_4QQ?SJl<@FAQKW2dII%uC|w{CL*yRQ7g}om{wc-b z^XU0_f2QzSHfePik=1gR6;#+5*x1;!H5T}#Uuu4UT2p0f`UH@nYoDj1C%fxoJrIuF zzOeAT_8Z8lJT}Haf7)MeNzE1yhO4k$69dnYB;>(O*$Jd9-}^*8?Y+8!bz&e!0g=;k zsWIMYFhT3QHr1MgX7B!BQ&T($b!|q+#|Zd++0oWevUno17W9m5Pd2qD57smrTR-&n zlKTt+2!{6Os@2=Pg=RDzo!18|eG-U-E2nRJYK=P4r-ko%W_3 zcPB%;f-$NAe1S)B11p;@H@jtTnSsyEClKQOrKUunV6i#={U|{_`Y?S{)_Q9Wv@BWR z5&$6$0OCADM1;zs#v^IT>k`%M42S>mpOc^uAX=J_J6`}9jB1plY;o~Fa+fdAw*W3{ zLIpHK!wt#c1#se-UYCSE_a{h+I^KNk2wlw&mkZF3vL_5e_HL)ItD5M+0mRnzeo|y^ zfuq8A;U0$#ND2xHMJmNXnVIC^ghBj`aOnVGWYlW>4sd$)=m?`d)uvS%h~l$Ark&CD zu=3k(YaX;{5e5hN%Vvel7w9`6(ag1aHCedH0?e~0Z%O#|i<5}k(zV0&Od|-$zXL80 zc*dTst*s>*b&;U(|5UCm1eFhnZJOVL;CBd@s!RSu*LP{(%I~ymyPfXB?r~|k?0sh? z5eSNcQy_9`joDZa3h^LlEd!5I1#kqMPAJ+bRuG&aK(pSRiTsVGJnQDuxx@4 zsNR4|$o{NvzRllaoun)O-sJd^QuRs=Xkl9fU!C z_yq&%qd%jB|A44(pP5OVud$fO7Dw`ayfLwEI^Z539}kI$*j%t_bLu%8;uy7Ea+*20 zJ8GK%MhqLV0ocr(Kf0mP%hmDE(vEYRF zANdj)1!ZluBOvhWS2p{N_kcz8v^`#w>-VT(y)^OB7+d$T`#u}L3sh!e1JuXIM^9h_ z&)c2+GE#}Rzf6Ds@qfzC$=MKC1Q`jcYg*2+k9v>PCOYz`TQ1Z_0HDXg!`s?zHSEX! zQfDm}LBz!hVFlTH<`=+>kzjJ~J|zVq$y9DD=Y18<8SOx4T! z)v2E*vHtP$^t2NcmpVEtBrEB{UPRX(BGa{28h}W>t2Q2ns+0hX2P;XpxY`=}ZPIR- zeh%biwIzcD+4y*Qc?kiI0vvk#`f#H^jt`=hBxrDdebRg}tzo&`oDAh$?eG{-1(amC z_4)duL1a`EMmxd@Zs5d@;pRX*G_iw2@fQz9X9F#OcTr?oIrRfLAT-(8*_p2&ff1C8 zKcl@_eyq*vefsmJl40uSy9j-NQw`2%Cnx=tCmWZm<8xo_KHJ-~yDZvCwN6+~mn83r zx^nvsh8d|t*9K|*Y*I-9R=v&@5rb?9ur~?de}If2+O$15N9NB!zgUA0%LQn20Sam$ zic`3)z8R_Sue6EuqL;Hb%(^46Lh2u_7wg$T^z6^q48{vuEj3O}p;b+HG@NP#fv!j6 z-&>~r>sqS?2q0vD!L;oKJ5@TH0VXG}SDU!F=)PC#>fv#Avz=KDx*{MOZSce38aCiN zd+=tK9r;@<)}J8U9RO3<0S@k|kTGIDmIX^IpSB8;fFn~TAUq9?JeIT3AW*clg;?l=Iur1b8n}5_5-Bd%(nrEYdbsr(XYfo4b$h8%JA*1E_Cr85E0N% zJOk82@#j0V!;@-DAv@^J6_X&F5dvz7-7IRfJP~r>aU!XGu?LYwx+~8Aa z9RAKUSVh2XNdQ*cj8hQqx2xf8+eH7mLN=1W*R+a=PSQ7?`$4_N92XoV1rt*Q$nhBr zfHV0c$)AmbPR{%T)0C`c3EP4)A)}ag=0I}}V;{$j;HUQp0ju2~czc{|S z%Gao~7JN9LfYK6>r%%B{Rk>f7!<04d(kC#gi@Ce=dtC0XMer=YnHIdeyPIh7Z~>t; z4Dtn^+bJ~=*QtPLoyO;oC%RssT22NIuGoTj_&?Fj>BAv8%u&{`MFefTfaU`@2z`*O z7{B}~P^(PayMOp>4VVirSP69e*q~{brR7{PSEc|Kbb;NT98QTYgAn ztDvgL1KlmrlgqlVLXY^8$<$MT;BEsD2f#T7cp^!i!|1p0@QsG;jINcHObp>`UzXNu z%H9wc3;6%e0vx1=C5!k7gG9{q>eVY~U<20%3W?Uz=yI$xKys^v1aN%NT8d&%<_hHQ ze((k-XJ_l7v>AO^IzTro)N0}e7W@G!8rclNt+4+_TU)zF-4GWzco-BZ zX0%*L0o{l4W1D3`)hoc9QZ@$@*TElir1%x~=Gj}Ofomw=0*zu*;45CY=X$dhdiX=Z z)*Oc%p4Ya3DF9m3P>e>o(YBavx&RMK%x}Qqj|UjakEb|jTV<Cw@ z5grj$7r1is^`9^xj%5NE{Ij;!0SMWSx#H)=2dlS{Pd#=WEwlgA+ISZ#|6XgcFNO*$ z#t)Q0VIK_c8?_k{BZzshadCS9^s_8y{0MRMpwp4@@EQf~>KnrN9B2>`zl-fDxw-KS zhT1_rqsTWR@$TI~2o{wo;FMhc&K^0BO)(7#`h2f@rKd@~nX1O`D_$SGB&%zOeBm99)@_C$3 zgfDJ)WQzYGxfv^5pay%P!zi4s^Bx|EV_+wR0~YNG#iMGN!B{3_Ed=d2RN9ab{E&P! z`PJj;gi1~_^YtAKCq=myMJ@C+XSgXAaX9OGLC>C{1&IO+M&_^H)Vl)`aQs2UmODN(xx3}p2sF)bo0FHCTn z03&i|$`4u98H@f|+B>yge#~RxyHQuA2y@rt@VKR~qjEb2@|M3OdF~9qHDP(VEu<%Pw!jaX4@fxAc5&gyYCbqoJa+`&p zDeG4s8ds7J4^|Xd$u1^*GIYb|{vOs3r0zRu(M#mCFGM%&5Acu3E3^jm)2QQAB3K$= z!eTOpSHe)ijD&YhV~{t~`y9y770wnH?R$Bl|F&vvgE;eB_q<2W-w8DGAm*irz7trA z;Ki!$soM8jBeuC`Iz6&e{p%(3>2CxZPnaf6OVVxOZSQb-131;K2wKIKKq zlE(_VXts2#>h0N1*nhvt^I3o)E5SDU;QvwW+YV`MI3po7NQ(a9S1lb#dS| z<)@cge(vmO)*AZqt#6G@N=h&$(!hB&^hxG85Q-yKpwSBb@F12e`0!DAFNeYpiOrrt zpNQ~UNjKgvJ|SsVmP&!pHM%4ichsH|qC1CUo_XqK2ZEva{-|{K7a2>w@g=L2zI!s3 z{$HzA-Anm({WO9{WQ_y&)6We`oNf9z&nyExXO`6QSaZ+)6~7t}A;BdRtoywe_lw6N z;=VWi(e`9?h%UFuWFJ5IT!UFjQmuCd#VKf(aWb$`%r(Cqh0E~Uv6V5G^>kq4Mre|I zd;IJ)>R{Ev;oM}S_C{V-2NgHMF#1!rQ;{emAI>hSZaG>C&OvCqw7WxOwT5lWH_YGX#}kmIec|M!DGOLYq-X>AihpEEo1rFrwrQ+ z^n?%Vj@Cj)d#G$%1jn-z9+yK7QkwKOYnAo_m|tyCwjZ{_F-evNsq1N2Ro<*IZ1}*b zri5)%$*(%(;|FX#OI0$$)i63etPz=VJ8qkKP?=m?X}qz>Ov!IS4seRHF=rujaHndY6>@cDL4;;f7N20l;z&*{@)DXO{$FI*SJW@M2}8On`1A7l zHiC|e%d(Yw!*Y?eSnMx)Agn=eUMHAY((B;B!+B%JSn!&(nf6)ZvQ)88B=uDm7B(&7 zW)84}?xU;wDRU>Oezaz6CH&3~rzU&*h6CQJ`Pa;!#@I+lu7r4Gl74 zo{?E2QUl40>0zC_N#4yR*ulfdq(jj#<+gM8b!>l*F#eH(EI9@&>zCAw_DW;p*r;{m zV>yj!1A9d^?T6|@a&ZoK5t^@ClQVwtjFGP4p;}enJ-tQMAxyo<51hqtPd#VPj48?! znJO6e4D{ac&R?TerxmSiSJn^tdPZ)de8}3d;)6>0)S2|+!!Lq3zYw%$M?o&9&iay- z9D4EfKRpIlW@OlFPJ^A|_6@5rX|Q=c=bQ=&PM$@plm@x+O7-OR7{{*|@C%)_ZQyhR zReyLS+Zhq-^>97}$*HQ3;ZVI2rEMp^Mo|k*nw?Lyi6E~q6pc~f{`rO0Nod{n@pSBp zXGiNq&{R=t+fk%mnz}X{zk7$Dok2T)g|Ml zHjh+#m9;EX!p`LIwNLhs5Oz%MUVYNeH>=#b#6hO)NgX8UO|+T_tl8cVTf8I-_1E5? ze2-8ABjx2DbO^tG-i%OV=9v#tZx>nnV`a;v(9^XIr&(uPWqer%XP zu`<;8`4NHZuv*}$3kTT(fhE>q*p3-qJ=^|sBjdfC2*eaWb$IM;Ti(QAFQ2$+5=QY9 zWmTA~UYQnDJw#jl&ebGsV?Di~sF1kZ*tfKPhY(waF;rf?RSQ2}gAj{zG?BlhHQ3z# zY{=yfmoCPA)B%toJsamM1}rkT&i=;Jn^&w~O}(9zx>c6DgV1>NWV1G^ZC>(zWa2oR z@4Y-)QT<%0q9Wez_bW6K^h2s*dkHFd3yGv;@9zpD z+`myYUd<5CqEf6%@UHu|erl2JVM)^tGJa-dsg^H!`uImP;&abWX(t5iR!u~=FD1!j z`j_}7f_ir2o%Z8efg0i2#mKPjpWs(AQDFkm9dBQgH%cM(KBo6Vlw+E zb)n%XBVxN7&OOKxk;&}m5Sr;y%97Cg>I9}910LHvXU@Lt>6MLTm%RN7&o{rQ?j4fH z$yTr4LH=5Lh3>%K(_aMIJpR#x94~5zr>Z?tbrvzxDfi0!qXOPi3c_i^QxkR#QAxS_ z^usv(#@G5<9-WOmYT#g@BD~xTP0d{L9!_v#RU)dew7wE-><)&CsR~O(S&eVxid4`a z@WXz7W`Y|nWVC;=>Q!5X98_KrlIm0}?c`E|EA#BFM4a;KW7jnj9tPYRK^pRl-+8Z$ z{tO49wQ)dxt?fU4>JDW?RJ&9*-_^24lgA=sn5ZQDmQCc-hO5SE8H&O-)5uXY?W&wzouWP;zqxo zD*9Np_ifoz+XySQBv|&(vp<$B(-wY@*xcx0ON$9wpK>&uC!$@Bse@ejwhoW!<4z)o z?=J4s^Lynm$DDv{%Y{4^a zALt5m*BM|22N-jB5R_7B4^Xy!PmmA8G8EE12woGR97@COH1|TMbqTv;aVD8}zmZEY zy25nz0%z>s>ZPi}nxb5+PxzQSS%a!o#Spd#r)h*ri`6Q2J-}UZRUh7+Y!!YeAv3Td zCr-&~NXgi(&(851+lI!_zwPM@o3TDStnkHAJ`4hV>dzF; zhKj^3$DjH^c_TCB7BATdn~1#66C?p|R~t~Tz7(-6!xEV$C*BC(X5gBrBylGECHF_5 z95Qk}TFhv8AN< zs$?FGf5{V>t=fCFSD1srnfPP}`mja+Y zThS_9)HCxHMW)N=S3Yy?1O^MFQb$Y0Hb)FJQ1a55kBk91X9sie3PyOBpP0o@VcuuAY-ZN%D2g&$nu@%E7f`Q zR<2`pM+Jw>ruD*-f08sZ!aKNSf&_I|8v1U}gRQZ}!+rQ5$otO=e@hZ4sNY#X-`zT# zRldoQuA%3lOboTjqdkCP5WG6ds&SQt;UFEh@se3&BiGosjn2GRZF;T>sX;GS_T*9~ z?Re9PBl;rq3JdGdVZ69(QQTOy&C`U35m%GSs-~DZ0 z0U*;JWtey*kTNn)13yGqhxp}FpaXo+onLl4p)NC-tTDg9BC%Qz7ahf_yT*nEoAChP zlY-lauJj04IIXdg$m!v7#8&8^?Sq)&e9g(iE6^|q>WA8i*kmIb;zuvmP8e;L?rRi= zC$yU+hw9WWWxU!y;syb9=|p}IBjRP`H&(?%flYzyMe}s1t$P2{=2~x&*PuyY+TM!S z>4XAx?QK;`kZ0(c)ep4@0D!+x(1@4A*v=$!o+ix9$eRQ*zA<|?2u7_*F68y@FTei1 zbfWCI9pAP0g5=p2KS{F&?w&i#VcYDWNS1h_r{ZDL4uBtxX<^qdI|_Lz zylc*;8$yh;NSavW33P;bh@13fsVI{!OOO-dAI30Tm6HKkKZ$Xo)R?pdP6^jA0_R4) zs^@yUn~5Ij!fy7Ylw1cKCe}m_$62*^EIDJF<3oD0$ex4~6Q~X@g1A$Bo5zO;?2>Ax zjE|%^`rghimPSVA3uxZL`7QodgNJ%m^Y3(ENsy+A)XYNFOUhwYbHOl>3SGKV>yf2V zj0Vh+14EdhYgJy6$ae?7yTahOHN*I+=c2$bXQ_RjAl%fj#hEg4r2F9bWA~A8+F;qo zCw3}8eYSI$L?1imdQvOT(cW&*j)ussmt;pI>?+c&+<+7dcxekYt31UV_E|%F)u}cI zzp!wtAKPm=iCsi6pT*e63P!$&Ef*reKvyL5!L@P+7;Y;Hd<^T!&m$)-*(aKVONT`| z7Kte#nnTCJ3W#%d@ zBLPRFG9GZExISq%4>gYe0Ogd`v>6@Chz*fFQBuB~`01r_SI{Vt0VMQ&9Z0|DXudZg zA@P-z&E|n*zguMeo7U-$KuQnRVR9#4`@L`P+AsRuio?R$MoBNWuk+hZMQff{v%Bg- zl?MS87YI+~qWR4RnkmpuZ|Sc+*!D&DWvQ4VIP=TT-<|}*Z02N6<2`ipYxPmBFi~%U zuc_)iMi!rKXZsAC9i`{yr$n3Ld3a&I`z6i|z4pwu)F9=ZV*PC#R!~gpt^ZG;f zmrJd9&M<4m8j00l1%b~r9~`<4RQKVIkD+u?6q_aZaZwJ*iVVWOTN z)%XQ#&86=S!vl|3F&A>9-;GhK<7g8I+T1zNQ_N@EQo>5!T3chA=|jLt{_wspH9WFfpMOz z6!<>{5w$~0} zzSBn;FPSU)(adF@F@%Lk=>LAC71z;CuK$N0QLCN$#RLwfLWPeD4D}Pd(edi@@lYAto&y5bas7h{$sC?+ zN6yu~OLmEkrm?;;633K5A6NA(-{Ewe7A<;H&lca3l^1H$!PGe~$qw)} zVFb&*M@(|^739BrYin4xgG_Zfa3OsYz$JW2wVEzL$5b^FhTq-Qb@FH|yUSbm3G`bb zUlMSUqLY)=XQ~((2kFPz{uy0e4F;pPJ`1&8NENI4C)y>c^dwOG8j2K(NwhkNMS1%nWyHRYGCpcsc zdXLpe+-1{VJjI@TqfLI6*tE`2b_M5Sx>d1HM$m9^%snwIN*cajx#~hOn$uVyv9Y-I zD&H3ev}?8#a0QJPY8C9jc(23u0hnhE@IwLCNDS>$sI_Wa0yAOc5p2V->>M0d)YQ~4 z(Md_J+^xotB*#@(XE8KiHsgi4HX%Vl^x4`7s|DEhLx0Hk=;$$WSHybk0(4#VY1Nw^ zk4ozvH3^ki07tkJ^}2EWeA1U=YK4b%imd<*C*f3_0fFB|)7tio(5FYiu5q zzQWnf`dp7l$}Qg3*x(Gk`h|CN0qQ*wH%WR%f^$Gum9X1S$*@$&Yg*O0stBygah1Rs zwD8bfBmE`PC;?EW4*G@QV4`1#f;#3r3Ab~1;J5^GJ}oW8L}f#D8Q+f5P5r#tJS{R_ z(sX={nKpv0>=}Ti$?Ai)RDGA7aU;SCS&0&G!XAu+Uz+UJAwgi=ZXR@)%}k7qr}vgy z?huZ|)W9I!hpbyLho*95sSn)kMNG-mGH5jE;Nal6z+5S|GeGR@>@NH;BsZP}g@jaH z{*JAwiHUW-F&N6a{{!Y6heN}h81D6p8$sGD3N&i7e8qexzQNuwwDYz?ZBf5U`yB_w zE@kK#_YeJw3uk%_$PWV-tQwyuqV)n#IWrcK1pNbO2|DuIhl<8I4Gk3)A*oJ#=&TtT z(veE}ThGtARE{P20p5g8^o#k?un7%QyY#N3uR}s>ib=KnKDAqk5@8xx=1E?0(;Y^X z8M>)Ce`7K(^oysRcxZKZ+{4AK6x=b^bp_MX{0p@f0J9tmS`jkzrPcH15Cn{X zME5pGKA&xEkITSoqk@8hTVSf@P@0@P^E>!0N-Z=&k3Zd^ZgZu)1 zC2Sa8xZ}vLBO+jJ5Z>L}E20~&PDBnSv#Lsxz_Lfu3JNx0@LULzL@og4)~^>uNzsEb zbO{Z>?@{GvO3TVxnuNQhm00cn0MVyG$ha;e3EDR@b3+TmZ%5qzvYo#$Tdnw;q@`|H z;m79fO%kQ{YDIZqfYM=hut83|DuY!=@>!}cp-Q${-vko+e)`7I%1Y2R%HyL#Ov-Iu zlL7sQ?2|tSf<3(i|!ka$A2T2kFvmJ!4i6u=@lcgFwC!kf$Ltv0_cYBK%(sxA3 zPQlB2P2d|G+{>Cjar0whN7Eb3Lf%4>G6A&jfuVI_Gyp(+V{5h&bG0oIZN)x|j?VKP z9UTnQWm*e!fVM~)b^*upWE`A-K6G_{uIcPu0$vvQv%a3m4e|WDx2J(LYZ!hLSfUt+ zAK?N9&+yanRcyZ~D$wx=lvll1T~%C#33>)^_wJg$D8KMc-G>)jM|rOTeA}Xnesda% ziMHc}G}DdU?MzO_A4cYv1eQjtBOcn%F7j4ityoDhG=-?4VC%hPMdoGh)E^9>`zN$^}DAx;v|fsv&B>0pytA6EJ}UesTgFv50(L01U!nMguBVSbE*j#saZR8mC=}e z?l#m;&32xQtDgYsl5y^h4<~1KtjMlvffjz$21#b=dXGa344-r3l6frMI|&+;s>+<* zkuAC3eV(ta*&X_wvd3T=hn_1F0U#>gplpCLR!jXEKb$r)xFq=8d(IiWNNQ1e{~(r3 z>+5VNbj}wiyTukP<3zKc-sohJc7DD{VLLQ9Q+M`Lqwe#3H??Q3W4kfhvA(PVhwut4 zeMN}MslvjRH&tNF)GvD!?l=SYRPseqjZedt=`Rhsc`XOE%}iV&LdO#qcW2~9`XHUz z7|R|W;bF!!fJ4kSB8e?}21N+C(Eljo>Z+AC9b*Y4s#lK`AomX6Dv9kQwa7I#88B4= z5drJ`i)Xi-x)2Q&T9W6?8SK|D-X@H2Q3wQY!63Li{Ex;UtU8)ux6)kvP77(TxDp!$0&Z{j^)n}Mj)rH<(I z(;!j*5cCl2wx;2T?FSLHel_e+GReu+ycd{GV*K--XWf1KJ!}zbEyU1s#pCBI9A7G4 zJnT`NA*$C=fjZB#Th@+cR&i*D$6K3xoWjJcQ1Fpo3(ERLfVObgyP6W_+vWqb#*u1w8_tbX(e2yG=uE}-JYNO@8;txM$D`FnZgS@f zIu>${GHXxT*GA>e;-0;T9Nx-FW=~{}Lc?rMH6PBr>;u?UgnL5_Fpv^@z-3gk)>TfND)zJ<`SH2>o9cXSsoUeEYH zPJxc3kaXm;whWJ?Pe00Mk{T98Vk{I*@|=y=C#PpJ&3fA55XV>+vC1!!pv@`r{?Bhb zSMA&8M*(57)B8^sJCt31%;=Y}G#S-3t=lZ4OvEphZf5>D7c9Qg&|ago} z`Q13l`)AzDB-X#3s&(=71no`viLlpbUsm(|9Un0^=G8>?3`(8K{ z=3r>HR3z*)7x|D zeKjSe=Yh*XuiQ2_KlvcATg0atALsD3D)K_SaU6wA;%XpYhfOG*$Qu<=rv;=QPw2g? zEz=~I1n(A$bsF|{>)M`#j&9a!05(vXJdF&`4DB93CW(kZ4A&Kqc`RS!O%Fv(gF(`6UP-VVqK4 z8jtYpQZ_;GkZVU)H^wK$G`)^U&SoB>Q>H8&h>e|~{3{K((!H0}oog}Z864Y(^>sfe zMgF?Wn~XodTC3-+<&#oBVp@C|F}KZUp@qM)T|8pPV@vbV_?@>E5?@<3qQI-3}*&p9fP}d$9EmxgT76ud!`;ARm!@xRVm2MSsV29h7G6+Ve7y)O)#V zZm*}l77-C_wBE&y!OI1QKd(7*w3u6Sf@&7a$PQx*kXiS8ql;VX^}Ay8>K}RI_)^T% z1jV)Ak)u8hF<5=>qI+DYBHtnUCQ+O0;8FI5g&Y?Rsmrj`zK)QQ(?C-%?}7iX`|DCW za*P{U*gQCCg29FVtBo@aOLE)dxMo*RnkJQ5PL-uuW=Tj+shMcni8|)-WQrcsoD)-X zC=4RcQH;{a%n5`X%Q11vi74rY0NU6%BN$d5?f$x9V?s{0V4g8B`i6KN1YVoUzpr7jZj;i4c;%ZXsWtI&@co`X@|UW7^$sJ<@vPk_ z_|MYBo5~3FoGy91I9u!nryJ?j65sCO3iH=lhL7y zFIphyxpNmjbnsk{%VXy-&{zTYDt@N$uVzD69IVJC|jcQYW}f zMnT&vh33-SW_D7jt=5U7HVRkvx176^Iy(Py+Xc~9l*75=m(^%)#FXw~X0HmtAcfr{ z|5P!@hlmYBs1TfM*|IWgyN-@ZASq~SsadLWUw;}QqejX-pNy5(`uanQ zvCMJHt@cIuZSc>x28$!l=y3ra%`|pk+n!`5XFO}jPp`6vTaYU^&$qez-cI4f4_8!M zXvf`W&ohT}9^z^n0=0?>QF@1^NM=MjvMAWoqvKSv%Iqs?_G44>ys>+Du=cp~TqGg3 z?1iK$aXYf=^_%(>m!o5hht4jTY;u}EqWbY^m&rq>-{z~AF41VmfB&Q&ja4{B&oVfa zTJ$4&;>6kC4A?s)NBa_D>c~i@zpRVDK@++Cl--4xP^;BnbOM(+H@@hV;-l;258;1D z2awGlCE^lA)&ZsEiLeM|EkeHH)Axo%&aU1C#`Jah(C%Q4kXooNmG$+e8lrj;?xZxT z^E(yg%Ac&p(33K{FM;Zim>pQG$XAGd!@!?)tVx^S?ir#Qv6DoLz#O&BPB=h zYUg|ORYK@PPbXfSwWBL3h{~deMsN)`l$3ru|Iv}{BF;V9~wdC7J&nkUoV@?*cmA6Y1-RDmcNqmO*=TeYw&OU_0unARcxN@ zPz~^RDqW;jS{ND%O@@R7rk@$#ctGXDM-f{1F{Ns9vS1|6!l0#PW#9{r*kFitTWi(* z#?U>WT}R6xlEU)Nw732ep5cQRWLbP->>+*6AdOn2mu*YFik(4mM2hMr#6SMd9}FKO z_0P1jvA^AzkScjh$fychTltZGR_J6YQa4=6u-F=^#kFa-rrMU_ zVKQB~O*ku8_N$%s&+DV&lJu60XrZdj#NPVX<8>Vps$CN`b++p*w)!uaNc=I}kZ?0# z?PAgt)5h|P=;BFX#=tydIn2_s;k|dzLCwuKpRwc=5pha#u>-Z-r6r3?dJ%SyFy?%< zJuC6a*s+X0T3=tEJN3?ile?bCbd3~t@&Gvjb}Ml8J_h3)2iuk=_iI#^qh#m0PH!I{ zVP-&o$$HmB3T1txT#W=Ue+ZgW9uyWB*{P7?lqQPI&Zv7uE>+U5Ef>@+h;$wg2O{Gl z*3SrpA4&YR%(+B@Dphs0jtKfH21|nt& z-OY$Ntau`fG&|aLO-=h@a7q~kS-3ao%Egozbj`({FvWFqtu1`O1aAUavr?XL{``5d z%>F6Z7@eUTHM}%mKmzc0944vuKL^rNrJo550bpc%%*+@9!BtsVSuwsw-KOUOo-zOy zB=10Z)58X#JyZ%nkJxesTFpC-UUo`<9-*me=>UP-Yz++L2|WJL=PN1q?{B_MrKTE( zYI}#jd#QZTi3?UlAWA2Uf%z10V+X;`-*=`e{k<4S)}I zF+bqw=%{8IK2eyk)9m^Kb<=QtAiS;%#wmQBlFKI|D%%!)TmoW^WDPqdg-8@j}QE z*0%@}K=)qWQ?L~gcgAN;;};C3!!A60femN_Q45VmkDc@Af%gMQdaMK@)*|gnrM&vH zYcUom7>X?ls=hc){IucDBOdM9|C=uG6@x^`GI1h#pM(7bqv!O0cl*8rw<+cK#P(in zHk;L^h@eTpIgap?%;1|%Ew8az;}ow9{-j)uwD<}CZy1wAo9> - + airlib: Class Hierarchy @@ -29,7 +29,7 @@ - + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
main.cpp File Reference
+
+
+
#include <memory>
+#include "filters_common/helper.h"
+#include "bebop2_controller/localization/Filters/ExtendedKalmanFilter.h"
+
+

Go to the source code of this file.

+ + + + +

+Functions

int main (int argc, char *argv[])
 
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char * argv[] 
)
+
+ +

Definition at line 9 of file main.cpp.

+ +
+
+
+ + + + diff --git a/docs/html/localization_2Filters_2ekf_2main_8cpp_source.html b/docs/html/localization_2Filters_2ekf_2main_8cpp_source.html new file mode 100644 index 0000000..e9da366 --- /dev/null +++ b/docs/html/localization_2Filters_2ekf_2main_8cpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +airlib: airlib/localization/Filters/ekf/main.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
main.cpp
+
+
+Go to the documentation of this file.
1//
+
2// Created by Redwan Newaz on 12/29/22.
+
3//
+
4#include <memory>
+
5#include "filters_common/helper.h"
+
6#include "bebop2_controller/localization/Filters/ExtendedKalmanFilter.h"
+
7
+
8
+
9int main(int argc, char* argv[])
+
10{
+
11
+
12
+
13
+
14 const int STATE_DIM = 4;
+
15
+
16 const double DT = 0.03;
+
17
+
18 std::vector<double>x0{0,0,1,0};
+
19
+
20 /*
+
21 * Sigmas - just an estimate, usually comes from uncertainty of sensor, but
+
22 * if you used fused data from multiple sensors, it's difficult to find
+
23 * these uncertainties directly.
+
24 */
+
25 std::vector<double> sigma_pos{0.015, 0.015, 0.015, 0.01}; // GPS measurement uncertainty [x [m], y [m], z [m], theta [rad]]
+
26
+
27 auto ekf = std::make_shared<extended_kalman_filter>(x0, sigma_pos, DT, STATE_DIM);
+
28
+
29 Simulator sim(STATE_DIM, ekf);
+
30 sim.run();
+
31
+
32
+
33 return 0;
+
34}
+
int main()
Definition: main.cpp:8
+
+ + + + diff --git a/docs/html/localization_2Filters_2pf_2main_8cpp.html b/docs/html/localization_2Filters_2pf_2main_8cpp.html new file mode 100644 index 0000000..9b746af --- /dev/null +++ b/docs/html/localization_2Filters_2pf_2main_8cpp.html @@ -0,0 +1,119 @@ + + + + + + + +airlib: airlib/localization/Filters/pf/main.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
main.cpp File Reference
+
+
+
#include "../include/filters_common/helper.h"
+#include "bebop2_controller/localization/Filters/particle_filter.h"
+#include "filters_common/matplotlibcpp.h"
+#include <memory>
+
+

Go to the source code of this file.

+ + + + +

+Functions

int main ()
 
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +

Definition at line 8 of file main.cpp.

+ +
+
+
+ + + + diff --git a/docs/html/localization_2Filters_2pf_2main_8cpp_source.html b/docs/html/localization_2Filters_2pf_2main_8cpp_source.html new file mode 100644 index 0000000..c0e0d9e --- /dev/null +++ b/docs/html/localization_2Filters_2pf_2main_8cpp_source.html @@ -0,0 +1,126 @@ + + + + + + + +airlib: airlib/localization/Filters/pf/main.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
main.cpp
+
+
+Go to the documentation of this file.
1#include "../include/filters_common/helper.h"
+
2#include "bebop2_controller/localization/Filters/particle_filter.h"
+
3#include "filters_common/matplotlibcpp.h"
+
4#include <memory>
+
5
+
6namespace plt = matplotlibcpp;
+
7
+
8int main() {
+
9
+
10 //Set up parameters here
+
11 int num_particles = 500;
+
12 const int STATE_DIM = 4;
+
13 const double DT = 0.03;
+
14
+
15 std::vector<double>x0{0,0,1,0};
+
16
+
17 /*
+
18 * Sigmas - just an estimate, usually comes from uncertainty of sensor, but
+
19 * if you used fused data from multiple sensors, it's difficult to find
+
20 * these uncertainties directly.
+
21 */
+
22 std::vector<double> sigma_pos{0.015, 0.015, 0.015, 0.01}; // GPS measurement uncertainty [x [m], y [m], z [m], theta [rad]]
+
23
+
24 TagMap tagMap;
+
25 tagMap.landmark_list.push_back({0, 5, 0, 0.95});
+
26 tagMap.landmark_list.push_back({1, 5, 2.05, 0.95});
+
27 tagMap.landmark_list.push_back({2, 5, 1.13, 0.95});
+
28
+
29
+
30 auto pf = std::make_shared<ParticleFilter>(num_particles, tagMap, DT);
+
31 pf->init(x0, sigma_pos);
+
32
+
33 Simulator sim(STATE_DIM, pf);
+
34 sim.run();
+
35
+
36
+
37 return 0;
+
38}
+ +
std::vector< single_landmark_s > landmark_list
+
int main()
Definition: main.cpp:8
+
+ + + + diff --git a/docs/html/md_README.html b/docs/html/md_README.html new file mode 100644 index 0000000..7cb0543 --- /dev/null +++ b/docs/html/md_README.html @@ -0,0 +1,93 @@ + + + + + + + +airlib: Bebop2 Controller + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Bebop2 Controller
+
+
+

+Quick Run

+

Connect your joystick to the computer. Joystick buttons perform following operations:

IDLE = 0, // setpoint can be freely moved with joystick. Sphere color blue
+
TAKEOFF = 1, // drone will takeoff from the ground
+
LAND = 2, //drone will land
+
ENGAGE = 3, // set current location as a set point (for hover). Sphere color yellow
+
CONTROL = 4 // start PID controller for the current (ENGAGE) setpoint. Sphere color cyan
+

Once control mode is enabled, setpoint can also be controlled using joystick axes. Note that, only position controller is implemented. Orientation controller needs yaw angle which could be directly obtained from bebop odom.

+

+Parameter Tuning

+

Refer to config/param.yaml file to read about tuning parameters. Apriltags are used for landmarks and then the drone position is estimated from those landmarks. A complementary filter is implemented to compute state by combining multiple landmarks.

+
+
+ + + + diff --git a/docs/html/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.html b/docs/html/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.html new file mode 100644 index 0000000..e7bed66 --- /dev/null +++ b/docs/html/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.html @@ -0,0 +1,93 @@ + + + + + + + +My Project: Bebop2 Controller + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Bebop2 Controller
+
+
+

+Quick Run

+

Connect your joystick to the computer. Joystick buttons perform following operations:

IDLE = 0, // setpoint can be freely moved with joystick. Sphere color blue
+
TAKEOFF = 1, // drone will takeoff from the ground
+
LAND = 2, //drone will land
+
ENGAGE = 3, // set current location as a set point (for hover). Sphere color yellow
+
CONTROL = 4 // start PID controller for the current (ENGAGE) setpoint. Sphere color cyan
+

Once control mode is enabled, setpoint can also be controlled using joystick axes. Note that, only position controller is implemented. Orientation controller needs yaw angle which could be directly obtained from bebop odom.

+

+Parameter Tuning

+

Refer to config/param.yaml file to read about tuning parameters. Apriltags are used for landmarks and then the drone position is estimated from those landmarks. A complementary filter is implemented to compute state by combining multiple landmarks.

+
+
+ + + + diff --git a/docs/html/md__r_e_a_d_m_e.html b/docs/html/md__r_e_a_d_m_e.html index 84ce742..e7bed66 100644 --- a/docs/html/md__r_e_a_d_m_e.html +++ b/docs/html/md__r_e_a_d_m_e.html @@ -3,9 +3,9 @@ - + -airlib: Bebop2 Controller +My Project: Bebop2 Controller @@ -21,7 +21,7 @@ -
airlib +
My Project
@@ -29,7 +29,7 @@
- + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
FieldLocation Member List
+
+
+ +

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

+ + + + + + + + + + +
operator*(double scale) constFieldLocationinline
operator+(const FieldLocation &other) constFieldLocationinline
operator-(const FieldLocation &other) constFieldLocationinline
operator<<FieldLocationfriend
tagNameFieldLocation
toObservation()FieldLocationinline
xFieldLocation
yFieldLocation
zFieldLocation
+ + + + diff --git a/docs/html/structFieldLocation.html b/docs/html/structFieldLocation.html new file mode 100644 index 0000000..2a8b949 --- /dev/null +++ b/docs/html/structFieldLocation.html @@ -0,0 +1,338 @@ + + + + + + + +airlib: FieldLocation Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
FieldLocation Struct Reference
+
+
+ +

#include <robot_defs.h>

+ + + + + + + + + + +

+Public Member Functions

MarkerObservation toObservation ()
 
FieldLocation operator- (const FieldLocation &other) const
 
FieldLocation operator+ (const FieldLocation &other) const
 
FieldLocation operator* (double scale) const
 
+ + + + + + + + + +

+Public Attributes

std::string tagName
 
double x
 
double y
 
double z
 
+ + + +

+Friends

std::ostream & operator<< (std::ostream &os, const FieldLocation &location)
 
+

Detailed Description

+
+

Definition at line 42 of file robot_defs.h.

+

Member Function Documentation

+ +

◆ operator*()

+ +
+
+ + + + + +
+ + + + + + + + +
FieldLocation FieldLocation::operator* (double scale) const
+
+inline
+
+ +

Definition at line 79 of file robot_defs.h.

+ +
+
+ +

◆ operator+()

+ +
+
+ + + + + +
+ + + + + + + + +
FieldLocation FieldLocation::operator+ (const FieldLocationother) const
+
+inline
+
+ +

Definition at line 71 of file robot_defs.h.

+ +
+
+ +

◆ operator-()

+ +
+
+ + + + + +
+ + + + + + + + +
FieldLocation FieldLocation::operator- (const FieldLocationother) const
+
+inline
+
+ +

Definition at line 63 of file robot_defs.h.

+ +
+
+ +

◆ toObservation()

+ +
+
+ + + + + +
+ + + + + + + +
MarkerObservation FieldLocation::toObservation ()
+
+inline
+
+ +

Definition at line 49 of file robot_defs.h.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ operator<<

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const FieldLocationlocation 
)
+
+friend
+
+ +

Definition at line 58 of file robot_defs.h.

+ +
+
+

Member Data Documentation

+ +

◆ tagName

+ +
+
+ + + + +
std::string FieldLocation::tagName
+
+ +

Definition at line 44 of file robot_defs.h.

+ +
+
+ +

◆ x

+ +
+
+ + + + +
double FieldLocation::x
+
+ +

Definition at line 45 of file robot_defs.h.

+ +
+
+ +

◆ y

+ +
+
+ + + + +
double FieldLocation::y
+
+ +

Definition at line 46 of file robot_defs.h.

+ +
+
+ +

◆ z

+ +
+
+ + + + +
double FieldLocation::z
+
+ +

Definition at line 47 of file robot_defs.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structLandmarkObs-members.html b/docs/html/structLandmarkObs-members.html new file mode 100644 index 0000000..55aeda8 --- /dev/null +++ b/docs/html/structLandmarkObs-members.html @@ -0,0 +1,88 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
LandmarkObs Member List
+
+
+ +

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

+ + + + + +
idLandmarkObs
xLandmarkObs
yLandmarkObs
zLandmarkObs
+ + + + diff --git a/docs/html/structLandmarkObs.html b/docs/html/structLandmarkObs.html new file mode 100644 index 0000000..e78841e --- /dev/null +++ b/docs/html/structLandmarkObs.html @@ -0,0 +1,169 @@ + + + + + + + +airlib: LandmarkObs Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
LandmarkObs Struct Reference
+
+
+ +

#include <particle_filter.h>

+ + + + + + + + + + +

+Public Attributes

int id
 
double x
 
double y
 
double z
 
+

Detailed Description

+
+

Definition at line 106 of file particle_filter.h.

+

Member Data Documentation

+ +

◆ id

+ +
+
+ + + + +
int LandmarkObs::id
+
+ +

Definition at line 108 of file particle_filter.h.

+ +
+
+ +

◆ x

+ +
+
+ + + + +
double LandmarkObs::x
+
+ +

Definition at line 109 of file particle_filter.h.

+ +
+
+ +

◆ y

+ +
+
+ + + + +
double LandmarkObs::y
+
+ +

Definition at line 110 of file particle_filter.h.

+ +
+
+ +

◆ z

+ +
+
+ + + + +
double LandmarkObs::z
+
+ +

Definition at line 111 of file particle_filter.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structMarkerObservation-members.html b/docs/html/structMarkerObservation-members.html new file mode 100644 index 0000000..5c09270 --- /dev/null +++ b/docs/html/structMarkerObservation-members.html @@ -0,0 +1,89 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
MarkerObservation Member List
+
+ + + + + diff --git a/docs/html/structMarkerObservation.html b/docs/html/structMarkerObservation.html new file mode 100644 index 0000000..38481e1 --- /dev/null +++ b/docs/html/structMarkerObservation.html @@ -0,0 +1,214 @@ + + + + + + + +airlib: MarkerObservation Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
MarkerObservation Struct Reference
+
+
+ +

#include <robot_defs.h>

+ + + + + + + + + + +

+Public Attributes

std::string tagName
 
double radial_distance
 
double azimuthal_angle
 
double polar_angle
 
+ + + +

+Friends

std::ostream & operator<< (std::ostream &os, const MarkerObservation &observation)
 
+

Detailed Description

+
+

Definition at line 24 of file robot_defs.h.

+

Friends And Related Symbol Documentation

+ +

◆ operator<<

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const MarkerObservationobservation 
)
+
+friend
+
+ +

Definition at line 31 of file robot_defs.h.

+ +
+
+

Member Data Documentation

+ +

◆ azimuthal_angle

+ +
+
+ + + + +
double MarkerObservation::azimuthal_angle
+
+ +

Definition at line 28 of file robot_defs.h.

+ +
+
+ +

◆ polar_angle

+ +
+
+ + + + +
double MarkerObservation::polar_angle
+
+ +

Definition at line 29 of file robot_defs.h.

+ +
+
+ +

◆ radial_distance

+ +
+
+ + + + +
double MarkerObservation::radial_distance
+
+ +

Definition at line 27 of file robot_defs.h.

+ +
+
+ +

◆ tagName

+ +
+
+ + + + +
std::string MarkerObservation::tagName
+
+ +

Definition at line 26 of file robot_defs.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structParticle-members.html b/docs/html/structParticle-members.html new file mode 100644 index 0000000..1999ec9 --- /dev/null +++ b/docs/html/structParticle-members.html @@ -0,0 +1,91 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Particle Member List
+
+
+ +

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

+ + + + + + + + +
idParticle
operator<<Particlefriend
thetaParticle
weightParticle
xParticle
yParticle
zParticle
+ + + + diff --git a/docs/html/structParticle.html b/docs/html/structParticle.html new file mode 100644 index 0000000..f5c682b --- /dev/null +++ b/docs/html/structParticle.html @@ -0,0 +1,250 @@ + + + + + + + +airlib: Particle Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
Particle Struct Reference
+
+
+ +

#include <particle_filter.h>

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

+Public Attributes

int id
 
double x
 
double y
 
double z
 
double theta
 
double weight
 
+ + + +

+Friends

std::ostream & operator<< (std::ostream &os, const Particle &particle)
 
+

Detailed Description

+
+

Definition at line 85 of file particle_filter.h.

+

Friends And Related Symbol Documentation

+ +

◆ operator<<

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const Particleparticle 
)
+
+friend
+
+ +

Definition at line 94 of file particle_filter.h.

+ +
+
+

Member Data Documentation

+ +

◆ id

+ +
+
+ + + + +
int Particle::id
+
+ +

Definition at line 87 of file particle_filter.h.

+ +
+
+ +

◆ theta

+ +
+
+ + + + +
double Particle::theta
+
+ +

Definition at line 91 of file particle_filter.h.

+ +
+
+ +

◆ weight

+ +
+
+ + + + +
double Particle::weight
+
+ +

Definition at line 92 of file particle_filter.h.

+ +
+
+ +

◆ x

+ +
+
+ + + + +
double Particle::x
+
+ +

Definition at line 88 of file particle_filter.h.

+ +
+
+ +

◆ y

+ +
+
+ + + + +
double Particle::y
+
+ +

Definition at line 89 of file particle_filter.h.

+ +
+
+ +

◆ z

+ +
+
+ + + + +
double Particle::z
+
+ +

Definition at line 90 of file particle_filter.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structRobotState-members.html b/docs/html/structRobotState-members.html new file mode 100644 index 0000000..c65ec18 --- /dev/null +++ b/docs/html/structRobotState-members.html @@ -0,0 +1,88 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
RobotState Member List
+
+
+ +

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

+ + + + + +
thetaRobotState
xRobotState
yRobotState
zRobotState
+ + + + diff --git a/docs/html/structRobotState.html b/docs/html/structRobotState.html new file mode 100644 index 0000000..ba18f59 --- /dev/null +++ b/docs/html/structRobotState.html @@ -0,0 +1,169 @@ + + + + + + + +airlib: RobotState Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
RobotState Struct Reference
+
+
+ +

#include <robot_defs.h>

+ + + + + + + + + + +

+Public Attributes

double x
 
double y
 
double z
 
double theta
 
+

Detailed Description

+
+

Definition at line 8 of file robot_defs.h.

+

Member Data Documentation

+ +

◆ theta

+ +
+
+ + + + +
double RobotState::theta
+
+ +

Definition at line 13 of file robot_defs.h.

+ +
+
+ +

◆ x

+ +
+
+ + + + +
double RobotState::x
+
+ +

Definition at line 10 of file robot_defs.h.

+ +
+
+ +

◆ y

+ +
+
+ + + + +
double RobotState::y
+
+ +

Definition at line 11 of file robot_defs.h.

+ +
+
+ +

◆ z

+ +
+
+ + + + +
double RobotState::z
+
+ +

Definition at line 12 of file robot_defs.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/html/structTagMap_1_1single__landmark__s-members.html b/docs/html/structTagMap_1_1single__landmark__s-members.html new file mode 100644 index 0000000..d804b42 --- /dev/null +++ b/docs/html/structTagMap_1_1single__landmark__s-members.html @@ -0,0 +1,92 @@ + + + + + + + +airlib: Member List + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
TagMap::single_landmark_s Member List
+
+ + + + + diff --git a/docs/html/structTagMap_1_1single__landmark__s.html b/docs/html/structTagMap_1_1single__landmark__s.html new file mode 100644 index 0000000..6ab8823 --- /dev/null +++ b/docs/html/structTagMap_1_1single__landmark__s.html @@ -0,0 +1,173 @@ + + + + + + + +airlib: TagMap::single_landmark_s Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
airlib +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
TagMap::single_landmark_s Struct Reference
+
+
+ +

#include <particle_filter.h>

+ + + + + + + + + + +

+Public Attributes

int id_i
 
double x_d
 
double y_d
 
double z_d
 
+

Detailed Description

+
+

Definition at line 22 of file particle_filter.h.

+

Member Data Documentation

+ +

◆ id_i

+ +
+
+ + + + +
int TagMap::single_landmark_s::id_i
+
+ +

Definition at line 24 of file particle_filter.h.

+ +
+
+ +

◆ x_d

+ +
+
+ + + + +
double TagMap::single_landmark_s::x_d
+
+ +

Definition at line 25 of file particle_filter.h.

+ +
+
+ +

◆ y_d

+ +
+
+ + + + +
double TagMap::single_landmark_s::y_d
+
+ +

Definition at line 26 of file particle_filter.h.

+ +
+
+ +

◆ z_d

+ +
+
+ + + + +
double TagMap::single_landmark_s::z_d
+
+ +

Definition at line 27 of file particle_filter.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/docs/latex/Makefile b/docs/latex/Makefile new file mode 100644 index 0000000..07f226d --- /dev/null +++ b/docs/latex/Makefile @@ -0,0 +1,27 @@ +LATEX_CMD?=pdflatex +MKIDX_CMD?=makeindex +BIBTEX_CMD?=bibtex +LATEX_COUNT?=8 +MANUAL_FILE?=refman + +all: $(MANUAL_FILE).pdf + +pdf: $(MANUAL_FILE).pdf + +$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex + $(LATEX_CMD) $(MANUAL_FILE) + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + latex_count=$(LATEX_COUNT) ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) $(MANUAL_FILE) ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf diff --git a/docs/latex/doxygen.sty b/docs/latex/doxygen.sty new file mode 100644 index 0000000..4d0a649 --- /dev/null +++ b/docs/latex/doxygen.sty @@ -0,0 +1,621 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multicol} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage{enumitem} +\RequirePackage{alphalph} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}[1]{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{#1=0}% + {% + \hrule% + }% + {% + \hrulefilll% + }% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{ + \ifthenelse{\equal{\detokenize{#1}}{}} + { + \vspace*{\baselineskip} + } + { + \hangpara{\DoxyCodeWidth}{1}{#1}\par + } +} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \par% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\setlistdepth{12} +\newlist{DoxyEnumerate}{enumerate}{12} +\setlist[DoxyEnumerate,1]{label=\arabic*.} +\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,3]{label=\roman*.} +\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,5]{label=\arabic*.} +\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,7]{label=\roman*.} +\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,9]{label=\arabic*.} +\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,11]{label=\roman*.} +\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\setlistdepth{12} +\newlist{DoxyItemize}{itemize}{12} +\setlist[DoxyItemize]{label=\textperiodcentered} + +\setlist[DoxyItemize,1]{label=\textbullet} +\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} +\setlist[DoxyItemize,3]{label=\textasteriskcentered} +\setlist[DoxyItemize,4]{label=\textperiodcentered} + +% Used by description lists (using
...
) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \centering% +}{% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned on +\newcommand{\doxylink}[2]{% + \mbox{\hyperlink{#1}{#2}}% +} + +% Used when hyperlinks are turned on +% Third argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectlink}[3]{% + \mbox{\hyperlink{#1}{#2}}% +} +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used when hyperlinks are turned off +% Fourth argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectref}[4]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\makeatother +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\H@refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + +% Define alpha enumarative names for counters > 26 +\makeatletter +\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} +\def\@enumalphalphcnt#1{\alphalph{#1}} +\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} +\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} +\makeatother +\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} +\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/docs/latex/longtable_doxygen.sty b/docs/latex/longtable_doxygen.sty new file mode 100644 index 0000000..a0eb314 --- /dev/null +++ b/docs/latex/longtable_doxygen.sty @@ -0,0 +1,448 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \endgroup + \global\@mparbottom\z@ + \pagegoal\vsize + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \global\@colroom\@colht + \global\vsize\@colht + \vbox + {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/docs/latex/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.tex b/docs/latex/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.tex new file mode 100644 index 0000000..3678999 --- /dev/null +++ b/docs/latex/md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e.tex @@ -0,0 +1,14 @@ +\hypertarget{md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e_autotoc_md1}{}\doxysection{Quick Run}\label{md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e_autotoc_md1} +Connect your joystick to the computer. Joystick buttons perform following operations\+: +\begin{DoxyCode}{0} +\DoxyCodeLine{IDLE\ =\ 0,\ //\ setpoint\ can\ be\ freely\ moved\ with\ joystick.\ Sphere\ color\ blue} +\DoxyCodeLine{TAKEOFF\ =\ 1,\ //\ drone\ will\ takeoff\ from\ the\ ground} +\DoxyCodeLine{LAND\ =\ 2,\ //drone\ will\ land} +\DoxyCodeLine{ENGAGE\ =\ 3,\ //\ set\ current\ location\ as\ a\ set\ point\ (for\ hover).\ Sphere\ color\ yellow} +\DoxyCodeLine{CONTROL\ =\ 4\ //\ start\ PID\ controller\ for\ the\ current\ (ENGAGE)\ setpoint.\ Sphere\ color\ cyan} + +\end{DoxyCode} + + +Once control mode is enabled, setpoint can also be controlled using joystick axes. Note that, only position controller is implemented. Orientation controller needs yaw angle which could be directly obtained from bebop odom.\hypertarget{md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e_autotoc_md2}{}\doxysection{Parameter Tuning}\label{md__home_simant_bebop2_controller_docs_bebop2_controller__r_e_a_d_m_e_autotoc_md2} +Refer to {\ttfamily config/param.\+yaml} file to read about tuning parameters. Apriltags are used for landmarks and then the drone position is estimated from those landmarks. A complementary filter is implemented to compute state by combining multiple landmarks. \ No newline at end of file diff --git a/docs/latex/md__r_e_a_d_m_e.tex b/docs/latex/md__r_e_a_d_m_e.tex new file mode 100644 index 0000000..c9307bc --- /dev/null +++ b/docs/latex/md__r_e_a_d_m_e.tex @@ -0,0 +1,14 @@ +\hypertarget{md__r_e_a_d_m_e_autotoc_md1}{}\doxysection{Quick Run}\label{md__r_e_a_d_m_e_autotoc_md1} +Connect your joystick to the computer. Joystick buttons perform following operations\+: +\begin{DoxyCode}{0} +\DoxyCodeLine{IDLE\ =\ 0,\ //\ setpoint\ can\ be\ freely\ moved\ with\ joystick.\ Sphere\ color\ blue} +\DoxyCodeLine{TAKEOFF\ =\ 1,\ //\ drone\ will\ takeoff\ from\ the\ ground} +\DoxyCodeLine{LAND\ =\ 2,\ //drone\ will\ land} +\DoxyCodeLine{ENGAGE\ =\ 3,\ //\ set\ current\ location\ as\ a\ set\ point\ (for\ hover).\ Sphere\ color\ yellow} +\DoxyCodeLine{CONTROL\ =\ 4\ //\ start\ PID\ controller\ for\ the\ current\ (ENGAGE)\ setpoint.\ Sphere\ color\ cyan} + +\end{DoxyCode} + + +Once control mode is enabled, setpoint can also be controlled using joystick axes. Note that, only position controller is implemented. Orientation controller needs yaw angle which could be directly obtained from bebop odom.\hypertarget{md__r_e_a_d_m_e_autotoc_md2}{}\doxysection{Parameter Tuning}\label{md__r_e_a_d_m_e_autotoc_md2} +Refer to {\ttfamily config/param.\+yaml} file to read about tuning parameters. Apriltags are used for landmarks and then the drone position is estimated from those landmarks. A complementary filter is implemented to compute state by combining multiple landmarks. \ No newline at end of file diff --git a/docs/latex/refman.tex b/docs/latex/refman.tex new file mode 100644 index 0000000..5cc94d9 --- /dev/null +++ b/docs/latex/refman.tex @@ -0,0 +1,192 @@ + % Handle batch mode + % to overcome problems with too many open files + \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} + % Set document class depending on configuration + \documentclass[twoside]{book} + %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package + \usepackage{ifthen} + \ifx\requestedLaTeXdate\undefined + \usepackage{array} + \else + \usepackage{array}[=2016-10-06] + \fi + %% + % Packages required by doxygen + \usepackage{fixltx2e} % for \textsubscript + \usepackage{doxygen} + \usepackage{graphicx} + \usepackage[utf8]{inputenc} + \usepackage{makeidx} + \PassOptionsToPackage{warn}{textcomp} + \usepackage{textcomp} + \usepackage[nointegrals]{wasysym} + \usepackage{ifxetex} + % NLS support packages + % Define default fonts + % Font selection + \usepackage[T1]{fontenc} + % set main and monospaced font + \usepackage[scaled=.90]{helvet} +\usepackage{courier} +\renewcommand{\familydefault}{\sfdefault} + \usepackage{sectsty} + \allsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + % Arguments of doxygenemoji: + % 1) '::' form of the emoji, already LaTeX-escaped + % 2) file with the name of the emoji without the .png extension + % in case image exist use this otherwise use the '::' form + \newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% + } + % Page & text layout + \usepackage{geometry} + \geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% + } + \usepackage{changepage} + % Allow a bit of overflow to go unnoticed by other means + \tolerance=750 + \hfuzz=15pt + \hbadness=750 + \setlength{\emergencystretch}{15pt} + \setlength{\parindent}{0cm} + \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} + \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} + \doxynormalparskip + % Redefine paragraph/subparagraph environments, using sectsty fonts + \makeatletter + \renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% + } + \renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% + } + \makeatother + \makeatletter + \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} + \makeatother + % Headers & footers + \usepackage{fancyhdr} + \pagestyle{fancyplain} + \renewcommand{\footrulewidth}{0.4pt} + \fancypagestyle{fancyplain}{ + \fancyhf{} + \fancyhead[LE, RO]{\bfseries\thepage} + \fancyhead[LO]{\bfseries\rightmark} + \fancyhead[RE]{\bfseries\leftmark} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + } + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + \renewcommand{\headrulewidth}{0pt} + } + \pagestyle{fancyplain} + \renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% + } + \renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% + } + % ToC, LoF, LoT, bibliography, and index + % Indices & bibliography + \usepackage{natbib} + \usepackage[titles]{tocloft} + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{5} + % creating indexes + \makeindex + \usepackage{newunicodechar} + \newunicodechar{⁻}{${}^{-}$}% Superscript minus + \newunicodechar{²}{${}^{2}$}% Superscript two + \newunicodechar{³}{${}^{3}$}% Superscript three + % Hyperlinks + % Hyperlinks (required, but should be loaded last) + \ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} + \else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi + \fi + \hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode,% + pdftitle={My Project},% + pdfsubject={}% + } + % Custom commands used by the header + % Custom commands + \newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% + } + % caption style definition + \usepackage{caption} + \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + % in page table of contents + \usepackage{etoc} + \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} + % prevent numbers overlap the titles in toc + \renewcommand{\numberline}[1]{#1~} +% End of preamble, now comes the document contents +%===== C O N T E N T S ===== +\begin{document} + \raggedbottom + % Titlepage & ToC + % To avoid duplicate page anchors due to reuse of same numbers for + % the index (be it as roman numbers) + \hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } + \pagenumbering{alph} + \begin{titlepage} + \vspace*{7cm} + \begin{center}% + {\Large My Project}\\ + \vspace*{1cm} + {\large Generated by Doxygen 1.9.7}\\ + \end{center} + \end{titlepage} + \clearemptydoublepage + \pagenumbering{roman} + \tableofcontents + \clearemptydoublepage + \pagenumbering{arabic} + % re-enable anchors again + \hypersetup{pageanchor=true} +%--- Begin generated contents --- +\chapter{Bebop2 Controller} +\label{md__r_e_a_d_m_e} +\Hypertarget{md__r_e_a_d_m_e} +\input{md__r_e_a_d_m_e} +%--- End generated contents --- +% Index + \backmatter + \newpage + \phantomsection + \clearemptydoublepage + \addcontentsline{toc}{chapter}{\indexname} + \printindex +% Required for some languages (in combination with latexdocumentpre from the header) +\end{document} diff --git a/docs/latex/tabu_doxygen.sty b/docs/latex/tabu_doxygen.sty new file mode 100644 index 0000000..3f17d1d --- /dev/null +++ b/docs/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. From 1c178bf8ea7a18cec791212d61cb7fa62ab0dad4 Mon Sep 17 00:00:00 2001 From: sbsingh3_2121 Date: Thu, 2 Feb 2023 20:42:33 -0600 Subject: [PATCH 04/15] Controllers documented --- include/airlib/control/ControlViz.h | 40 ++++++++++- include/airlib/control/ControllerBase.h | 72 +++++++++++++++---- include/airlib/control/PID.h | 18 ++++- include/airlib/control/QuadControllerPID.h | 16 +++++ .../localization/Sensors/ApriltagLandmarks.h | 4 +- .../airlib/localization/Sensors/DummyState.h | 2 +- include/airlib/localization/StateObserver.h | 1 + include/airlib/utility/LoggerCSV.h | 4 +- 8 files changed, 134 insertions(+), 23 deletions(-) diff --git a/include/airlib/control/ControlViz.h b/include/airlib/control/ControlViz.h index 347d6f2..cbf28f0 100644 --- a/include/airlib/control/ControlViz.h +++ b/include/airlib/control/ControlViz.h @@ -20,20 +20,56 @@ namespace bebop2 { YELLOW, GRAY }; - + /// @brief This class helps in the 3D visualization of data being rendered. It receives the updated position and orientation of the drone and sends points and lines to a graphical interface. + /// Hence, visualizes the movement, position, orientation and behaviors of the drone. class ControlViz { - public: + public: + /** + * @brief Publishes messages through /bebop2/goal topic. + * @param nh ROS Node Handle which deals with messages. + */ + explicit ControlViz( ros::NodeHandle &nh); + /** + * @brief This function starts and slightly lifts the drone. + * As a result sets the Marker from the pose parameter and also sets the color by invoking the set_marker_from_pose() and set_marker_color() functions. + * @param pose Drone's positon. + * @note Sets the path of the color to gray. + */ + void setDrone(const tf::Transform& pose); + /** + * @brief This functions updates the path and the color of the path of the robot. + * It also publishes the messages from the visualization_msgs::Marker. + * Lastly, it sets the Marker object type to be a sphere. + * @param pose current position of the robot. + * @param color color of the path in which the robot is in. + * @note Calls the set_marker_from_pose() and set_marker_color() functions to update the path and color. + */ + void update(const tf::Transform& pose, const MARKER_COLOR& color); private: + /// ROS NodeHandle for dealing with various messages. ros::NodeHandle nh_; + /// ROS Publisher to advertise various visualization messages to /bebop2/goal. ros::Publisher pub_marker_; std::unique_ptr logger_; const int LOGGER_FQ = 10; // Hz + protected: + /** + * @brief Receives the current position of the drone and uses that position to populate the point position and orientation of the marker messages. + * The marker messages will be used by a graphical interface to visualize the movement of the robot. + * @param pose Robot's pose having a /map frame. + * @param msg is a Marker object from visualization msgs that has attributes like position, orientation etc. + */ void set_marker_from_pose(const tf::Transform& pose, visualization_msgs::Marker& msg); + /** + * @brief sets different colors for different flights and paths of the drone for better understanding. + * @param color color of the path + * @param msg is Marker object same as the parameter msg in set_marker_from_pose() and has attributes to set color as well. + */ void set_marker_color(const MARKER_COLOR& color, visualization_msgs::Marker& msg); diff --git a/include/airlib/control/ControllerBase.h b/include/airlib/control/ControllerBase.h index 94f1ae9..62c0cba 100644 --- a/include/airlib/control/ControllerBase.h +++ b/include/airlib/control/ControllerBase.h @@ -40,51 +40,93 @@ namespace bebop2 - + /** + * @brief Responsible to control the position, state and rotation of the drone and also provides the code to make the robot hover. It publishes the takeoff, landing commands along with the current position of the drone and the state of the axes and buttons of the joystick controller. + * It also updates the state of the robot in RVIZ which is used for visaulation. + */ class ControllerBase{ public: - - + /** @brief Subscribes to sensor_msgs/joy which reports the state of a joystick's axes and buttons. + * It also publishes the message of drone takeoff and landing along with the linear and angular position of the drone. + * The constructor is also responsible to call the appropriate functions at specifc rates that plays a role in setting the set-point at a current location. + * Lastly it contructs an object to send the updated pose to the RVIZ for visualization and also sets the state of the controller's button. + * @param mGetState Obtains the current state of the robot + * @param nh Used to create publishers and subscribes. For eg: The ControllerBase constructor publishes messages during takeoff and landing with the help of the **ros::NodeHandle** aka nh parameter. + */ explicit ControllerBase(StateObserverPtr mGetState, ros::NodeHandle& nh); private: + /// Array of four real numbers in which the first three numbers most commonly represented by x,y,z are vectors and the last number is w which represents the rotation of the robot about the vectors. std::vectoraxes_values_; + /// @brief Timer to call the joystick_timer_callback() function at a specific rate. + /// @note The joystick_timer_callback() is invoked every 0.05 second. ros::Timer joystick_timer_; + /// @brief Timer to call the control_loop() function at a specific rate. ros::Timer controller_timer_; + /// @brief Unique Pointer that points to the address of ControlViz class in the ControlViz.h header file. std::unique_ptr viz_; + /// Subscribes from sensors_msgs/joy and calls the joystick_callback() as a callback function. ros::Subscriber joystick_sub_; + /// Publishes the takeoff, landing and velocity information respectively. ros::Publisher drone_takeoff_pub_, drone_land_pub_,cmd_vel_pub_; std::vector setPoints_; protected: - ros::NodeHandle m_nh; // if you need to create some publisher and subscriber - std::mutex m_mu; // if you need to lock some function for safe operations + /// This ROS Handle attribute is used to create various publishers and subscribers which also deals with messages. + ros::NodeHandle m_nh; + /// Locks some functions for safe operations + std::mutex m_mu; + /// @brief Applications applied to control the state of the robot using Joystick controller. enum ButtonState{ - IDLE = 0, // setpoint can be freely moved with joystick. Sphere color blue - TAKEOFF, // drone will takeoff from the ground - LAND, //drone will land - ENGAGE, // set current location as a set point (for hover). Sphere color yellow - CONTROL // start PID controller for the current setpoint. Sphere color cyan + /// Setpoint can be freely moved with joystick. Sphere color blue + IDLE = 0, + /// Drone will takeoff from the ground + TAKEOFF, + /// Drone will land + LAND, + /// Set current location as a set point (for hover). Sphere color yellow + ENGAGE, + /// Start PID controller for the current setpoint. Sphere color cyan + CONTROL }m_buttonState; - // this function will give robot state + /// This attribute gives the state of the robot. StateObserverPtr m_get_state; - // controller param - double dt_; // sample time - double m_goal_thres; // goal region threshold + // controller parameters. + /// Sample Time + double dt_; + /// Goal region threshold + double m_goal_thres; private: + /// @brief This function finds out the engaged button of the joystick i.e, checks the state of the button and + /// and publishes the resulted behavior of the drone (Take Off or Land). + /// It also updates the positon of drone which is also passed to RVIZ to update the position and path for visalization. + /// @param msg reports the state of a joysticks axes and buttons. void joystick_callback(const sensor_msgs::Joy::ConstPtr& msg); + /** + * @brief Updates the setpoint of the drone when the axes of the joystick controller is changed or moved. As a result, it also updates the color and path of the drone for visualization. + * @param event Creates a timer to call a function at a specific rate. + */ void joystick_timer_callback(const ros::TimerEvent& event); - + /// @brief Responsible for making the drone hover at a certain position void control_loop(const ros::TimerEvent& event); + /// @brief Sets the position and rotation of the drone through the setpoints . + /// @param state is used as an parameter to pass the setpoints. + /// @return Returns the tf::Transform pose which is the new position and rotated angle of the robot. tf::Transform getStateVecToTransform(const std::vector& state); protected: + /// @brief This function sets the linear positon of the drone to all 3 linear axes and to angula z-axis and publishes the message of the current position of the drone. + /// @param U is array of commands of size 4 which sets the above mentioned position of the drone. void publish_cmd_vel(const std::vector&U); + /// @brief This function calculates the distance between the setpoint of the drone and the current state position. + /// @param X is an array of vectors of data type double representing the present position of the drone. + /// @param setPoints is an array of vectors representing the commanded position. + /// @return Errors between the current and commanded position of the robot. double goal_distance(const std::vector& X, const std::vector& setPoints); virtual void compute_control(const std::vector& X, const std::vector& setPoints, std::vector& control) = 0; diff --git a/include/airlib/control/PID.h b/include/airlib/control/PID.h index cdda0e0..63f0782 100644 --- a/include/airlib/control/PID.h +++ b/include/airlib/control/PID.h @@ -8,12 +8,28 @@ #define NUM_GAINS 3 namespace bebop2 { - + /// @brief Calculates an error value as the difference between desired output and the current output and applies a correction based on proportional, integral and derivative terms(denoted by P, I, D respectively). class PID { public: + /// @brief A default Constuctor. PID(); + /** @brief Init method initiliazes all the controller parameters like proportional constant, Integral constant, Derivative constant, + * rate of change, maximum and minimum output values. + */ void init(double dt, double max, double min, double Kp, double Kd, double Ki); + /** @brief At first it calculates the error by subtracting the setpoint and current position of the drone, + * Then the Proportional, Integral, Derivate terms are calculated using that error and their repective constans. + * Following that, we find out the total ouptput by the sum of three terms and tehn restrict the output withtin the boundaries of minimum, maximum valeus. + * @param setpoint It is the desired position of the drone. + * @param pv It is the current position of the drone. + * @return Returns the error between the setpoint and the current postion of the drone. + */ + /** @note PID Gains identifiers. + * - Kp = Proportionality Constant + * - Kd = Derivative Constant + * - Ki = Intergration Constant + */ double calculate( double setpoint, double pv ); diff --git a/include/airlib/control/QuadControllerPID.h b/include/airlib/control/QuadControllerPID.h index 8613627..d673294 100644 --- a/include/airlib/control/QuadControllerPID.h +++ b/include/airlib/control/QuadControllerPID.h @@ -11,13 +11,29 @@ #include namespace bebop2{ + /// @brief Responsible to find the error values every second whenever the position of the quadrators of the drone is updated. class QuadControllerPID : public ControllerBase{ public: + /** @brief The QuadControllerPID constructor initializes a vector of type double that is responsible for populating the PID Gains, maximum and minimum threshold values. + * @param mGetState This parameter givs the current state of the robot. + * @param nh Used to setup publishers, subscribers and deals with various messages. + */ QuadControllerPID(StateObserverPtr mGetState, ros::NodeHandle& nh); private: bebop2::PID _quadController[NUM_CONTROLLER]; + /// @brief Sets all the proportional, integral, and derivative constants along with the maximum and minimum output values. + /// @param gains vector of size 4 and of type double that stores the PID controller parameters. + /** @note PID Gains identifiers. + * - Kp = Proportionality Constant + * - Kd = Derivative Constant + * - Ki = Intergration Constant + */ void set_gains(const std::vector &gains, bebop2::PID *controller); protected: + /// @brief Similar to the calculate() method in PID.h class, the compute_control method also calculates the error, PID Gain constants and return the error value when the drone is hovering over a position for the four vector values. + /// @param X is the current state of the drone. + /// @param setPoints is the desired goal position of the drone. + /// @param control is the actively control position. void compute_control(const std::vector &X, const std::vector &setPoints, std::vector &control) override; }; diff --git a/include/airlib/localization/Sensors/ApriltagLandmarks.h b/include/airlib/localization/Sensors/ApriltagLandmarks.h index e6cf003..3929c3f 100644 --- a/include/airlib/localization/Sensors/ApriltagLandmarks.h +++ b/include/airlib/localization/Sensors/ApriltagLandmarks.h @@ -38,14 +38,14 @@ class ApriltagLandmarks : public SensorBase{ std::unordered_map landmarks_; /// @brief apriltag node subscriber ros::Subscriber apriltagSub_; - /// @brief ros NodeHandle for dealing with various messages + /// @brief ROS NodeHandle for dealing with various messages ros::NodeHandle nh_; /// @brief measurements_ queue is reponsible to efficiently communicate with Control Module std::queue> measurements_; protected: /** - * @brief given a array of detected tags, here we calculate robot global coordinate with respect to each tag. + * @brief Given a array of detected tags, here we calculate robot global coordinate with respect to each tag. * Each tag propose a noisy state of the robot when transformed it to the global frame. * Therefore, an appropriate state filter is used to denoise those readings and compute the robot state accurately. * diff --git a/include/airlib/localization/Sensors/DummyState.h b/include/airlib/localization/Sensors/DummyState.h index df9a4a1..0bd83ef 100644 --- a/include/airlib/localization/Sensors/DummyState.h +++ b/include/airlib/localization/Sensors/DummyState.h @@ -46,7 +46,7 @@ namespace bebop2{ bool noisy_reading_; const size_t STATE_DIM = 4; - /// @brief discrete sample time is determined by control frequence + /// @brief discrete sample time is determined by control frequency. const double DT = 0.03; // 30 Hz /// @brief white noise amplitude const double NOISE = 0.2; diff --git a/include/airlib/localization/StateObserver.h b/include/airlib/localization/StateObserver.h index 7693a95..2c66141 100644 --- a/include/airlib/localization/StateObserver.h +++ b/include/airlib/localization/StateObserver.h @@ -14,6 +14,7 @@ namespace bebop2 { class StateObserver; typedef std::shared_ptr StateObserverPtr; + class StateObserver { public: explicit StateObserver(FilterPtr filter, SensorPtr sensor); diff --git a/include/airlib/utility/LoggerCSV.h b/include/airlib/utility/LoggerCSV.h index 8f35fcc..031d2fb 100644 --- a/include/airlib/utility/LoggerCSV.h +++ b/include/airlib/utility/LoggerCSV.h @@ -15,8 +15,8 @@ class LoggerCSV{ using TIME_POINT = std::chrono::time_point; public: - // this is a default contructor without st.pop_back();header. - // one can manually add header file using addHeader function + // This is a default contructor without st.pop_back();header. + // One can manually add header file using addHeader function LoggerCSV() { m_header_enabled = false; From 497337b82057eb569b29ff38f404af7bcc2b279a Mon Sep 17 00:00:00 2001 From: Simant-Singh <103738773+Simant-Singh@users.noreply.github.com> Date: Sun, 5 Feb 2023 15:28:12 -0600 Subject: [PATCH 05/15] Add License File --- LICENSE.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.txt diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..9ea5cf4 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 RedwanNewaz + +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. From f3883c41c540d5f63f78147173e3923de802d512 Mon Sep 17 00:00:00 2001 From: sbsingh3_2121 Date: Sat, 11 Feb 2023 14:35:22 -0600 Subject: [PATCH 06/15] Filter Files Documented --- .../Filters/ComplementaryFilter.h | 4 + .../Filters/ExtendedKalmanFilter.h | 29 ++++++- .../airlib/localization/Filters/FilterBase.h | 14 +++- .../localization/Filters/particle_filter.h | 78 ++++++++++++------- 4 files changed, 97 insertions(+), 28 deletions(-) diff --git a/include/airlib/localization/Filters/ComplementaryFilter.h b/include/airlib/localization/Filters/ComplementaryFilter.h index 5b50681..bfb89b9 100644 --- a/include/airlib/localization/Filters/ComplementaryFilter.h +++ b/include/airlib/localization/Filters/ComplementaryFilter.h @@ -7,7 +7,9 @@ #include #include "FilterBase.h" +/// @brief The ComplementaryFilter.h class implements the complmentary filter where it initializes the state and updates it using the class ComplementaryFilter: public FilterBase{ +/// filter's alpha paramater in update() method. public: ComplementaryFilter(double alpha): m_alpha(alpha) { @@ -19,6 +21,8 @@ class ComplementaryFilter: public FilterBase{ X_.clear(); std::copy(X0.begin(), X0.end(), std::back_inserter(X_)); } + + void update(const std::vector& obs, std::vector& result) { diff --git a/include/airlib/localization/Filters/ExtendedKalmanFilter.h b/include/airlib/localization/Filters/ExtendedKalmanFilter.h index b7da259..b8b1358 100644 --- a/include/airlib/localization/Filters/ExtendedKalmanFilter.h +++ b/include/airlib/localization/Filters/ExtendedKalmanFilter.h @@ -12,13 +12,26 @@ #include namespace bebop2{ - + /** + * @brief The extended Kalman Filter uses an algorithm to estimate the state of the system like velocity and position of the drone + * by using past and possible noisy observations and current and possibly noisy measurements of that system. + * + * It estimates the next state of the drone and corrects the estimated state with actual measurements. + */ class ExtendedKalmanFilter: public FilterBase{ public: ExtendedKalmanFilter(const std::vector& sigma_pos, double dt, int state_dim); void init(const std::vector& X0) override; + /// @brief Populates it with the estimated state of the system. + /// @param state Vector of tyoe double indicating the state. void operator()(std::vector& state); + /// @brief Updates the command velocity of the drone by changing the linear x,y,z and angular z values. + /// @param cmd A pointer that points to the cmd_vel topic. void update_cmd(const geometry_msgs::Twist::ConstPtr& cmd); + /// @brief In this method, the input obs is converted from a std::vector to an Eigen vector z and then passed to the internal_update() method. + /// After the internal_update method is called, the updated state estimate stored in xEst_ is copied into the output result vector. + /// @param obs A vector of measured values + /// @param result A vector to store the update state estimate void update(const std::vector& obs, std::vector& result) override; ; @@ -34,9 +47,23 @@ namespace bebop2{ protected: // x_{t+1} = F@x_{t}+B@u_t Eigen::VectorXd motion_model(const Eigen::VectorXd& x, const Eigen::VectorXd& u); + /// @brief Calculates the Jacobian matrix of the motion model + /// @param x State variable + /// @param u + /// @return Returns the Jacobian matrix Eigen::MatrixXd jacobF(const Eigen::VectorXd& x, const Eigen::VectorXd& u); + /// @brief Calculates the predicted measurement values + /// @param x State variable + /// @return Returns the predicted measurement values Eigen::VectorXd observation_model(const Eigen::VectorXd& x); + /// @brief Checks the linearity between the state and the measured variables. + /// @return Jacobian matrix of the observation model. Eigen::MatrixXd jacobH() const; + /** @brief The internal update step is used to update the linearized measurement model, which is used to calculate the Kalman gain. + * The internal transformation step involves updating the Jacobian matrix that linearizes the measurement model around the current state estimate, and the measurement noise covariance. + * @param z A vector of measured values. This is the measurement data that is used to update the state estimate. + * @param u A vector of control inputs. This is the control data that is used in the motion model to predict the state estimate. + */ void internal_update(const Eigen::VectorXd& z, const Eigen::VectorXd& u); double DT, STATE_DIM, CONTROL_DIM; diff --git a/include/airlib/localization/Filters/FilterBase.h b/include/airlib/localization/Filters/FilterBase.h index 82c29e8..4010192 100644 --- a/include/airlib/localization/Filters/FilterBase.h +++ b/include/airlib/localization/Filters/FilterBase.h @@ -11,25 +11,37 @@ class FilterBase; typedef std::shared_ptr FilterPtr; - +/// @brief The FilterBase class enables various other classes to share the FilterPtr. This class allows other classes like ComplementaryFilter.h, +/// ExtendedKalmanFilter.h,Particle.h to use methods like init(), update() to store the estimated state and update the state. class FilterBase: std::enable_shared_from_this { public: + /// @brief Constructor FilterBase() { } + /// @brief Deconstructor virtual ~FilterBase() { } + /// @brief systematic way to share FilterPtr to control class + /// @return FilterPtr FilterPtr getPtr() { return shared_from_this(); } + + /// @brief Makes the current estimate of the state of the system start out being the same as the true state. + /// @param X0 A vector of initial values for the state estimate. virtual void init(const std::vector& X0) = 0; + /// @brief Updated state is calculated and stored. + /// @param obs A vector of measured values + /// @param result A vector to store the update state estimate virtual void update(const std::vector& obs, std::vector& result) = 0; protected: + /// @brief Estimated state of the system. std::vector X_; }; diff --git a/include/airlib/localization/Filters/particle_filter.h b/include/airlib/localization/Filters/particle_filter.h index df39497..abdfb7e 100644 --- a/include/airlib/localization/Filters/particle_filter.h +++ b/include/airlib/localization/Filters/particle_filter.h @@ -15,26 +15,35 @@ #include - +/// @brief Data structure to store information about landmarks in a map. class TagMap { public: - + /// @brief structure holds information about each individual landmark, including its ID, and its x, y, and z positions in the global coordinate system. struct single_landmark_s{ - int id_i ; // Landmark ID - double x_d; // Landmark x-position in the map (global coordinates) - double y_d; // Landmark y-position in the map (global coordinates) - double z_d; // Landmark z-position in the map (global coordinates) + /// Landmark ID + int id_i ; + /// Landmark x-position in the map (global coordinates) + double x_d; + /// Landmark y-position in the map (global coordinates) + double y_d; + /// Landmark z-position in the map (global coordinates) + double z_d; }; - std::vector landmark_list ; // List of landmarks in the map + /// List of landmarks in the map + std::vector landmark_list ; }; - +/// @brief initializes the mean and covariance matrix for the distribution. The mean and covariance matrix are used in the calculation +/// along with the observation passed to the pdf function. class Mvn { public: + /// @brief Constructo + /// @param landmark Landmark + /// @param std Array of dimension 3 [standard deviation of x [m], standard deviation of y [m] standard deviation of yaw [rad] Mvn(const TagMap::single_landmark_s & landmark, const std::vector& std) { @@ -55,11 +64,13 @@ class Mvn sigma_det = sigma.determinant(); } + /// Deconstructor ~Mvn() { } template + /// Calculates the probability density function value for a given observation. double pdf(const T& obs_m) const { Eigen::Vector3d x; @@ -81,7 +92,7 @@ class Mvn double sigma_det; }; - +/// @brief This structure allows us to create particles and set their values. struct Particle { int id; @@ -91,6 +102,9 @@ struct Particle { double theta; double weight; + /// @param os It is an output stream objects that writes sequences of characters. + /// @param location Particle struct + /// @return Returns the output of the id, x, y, z positions in string format. friend std::ostream &operator<<(std::ostream &os, const Particle &particle) { os << "id: " << particle.id << " x: " << particle.x << " y: " << particle.y << " z: " << particle.z << " theta: " @@ -100,29 +114,40 @@ struct Particle { }; -/* - * Struct representing one landmark observation measurement. - */ +/** +* @brief It is a Struct representing one landmark observation measurement. +*/ struct LandmarkObs { - int id; // Id of matching landmark in the map. - double x; // Local (vehicle coordinates) x position of landmark observation [m] - double y; // Local (vehicle coordinates) y position of landmark observation [m] - double z; // Local (vehicle coordinates) z position of landmark observation [m] + /// Id of matching landmark in the map. + int id; + /// Local (vehicle coordinates) x position of landmark observation [m] + double x; + /// Local (vehicle coordinates) y position of landmark observation [m] + double y; + /// Local (vehicle coordinates) z position of landmark observation [m] + double z; }; - +/** +* @brief initializing particles to Gaussian distribution around first position and then Predicts the state for the next time step +* using the process model. +* +* Updates the weights for each particle based on the likelihood of the observed measurements following the resampling from the updated set of particles to form +* the new set of particles and returns whether particle filter has been initliazed or not. +* +*/ class ParticleFilter { - // Number of particles to draw + /// Number of particles to draw int num_particles; - // Flag, if filter is initialized + /// Flag, if filter is initialized bool is_initialized; - // Vector of weights of all particles + /// Vector of weights of all particles std::vector weights; const TagMap tagMap_; @@ -139,15 +164,16 @@ class ParticleFilter { public: - // Set of current particles + /// Set of current particles std::vector particles; - // Constructor - // @param M Number of particles + /// Constructor of ParticleFilter class. + /// @param M Number of particles ParticleFilter(int num_particles, const TagMap& tagMap, double delta_t) : num_particles(num_particles), tagMap_(tagMap), is_initialized(false), delta_t(0.03) {} + void operator()(std::vector& state); - // Destructor + // Deconstructor ~ParticleFilter() { @@ -163,7 +189,7 @@ class ParticleFilter { /** - * init Initializes particle filter by initializing particles to Gaussian + * @brief Init Initializes particle filter by initializing particles to Gaussian * distribution around first position and all the weights to 1. * @param x Initial x position [m] (simulated estimate from GPS) * @param y Initial y position [m] @@ -174,7 +200,7 @@ class ParticleFilter { void init(const std::vector& x0, const std::vector& std); /** - * prediction Predicts the state for the next time step + * prediction() method Predicts the state for the next time step * using the process model. * @param delta_t Time between time step t and t+1 in measurements [s] * @param std_pos[] Array of dimension 3 [standard deviation of x [m], standard deviation of y [m] From e78a38dabffe424744b940c0c91f566f332ec955 Mon Sep 17 00:00:00 2001 From: sbsingh3_2121 Date: Sat, 11 Feb 2023 14:39:21 -0600 Subject: [PATCH 07/15] Controllers, Sensors and Filters Documented --- include/airlib/control/ControllerBase.h | 2 +- .../localization/Sensors/ApriltagLandmarks.h | 11 ++-- .../airlib/localization/Sensors/DummyState.h | 7 ++- .../airlib/localization/Sensors/SensorBase.h | 8 ++- include/airlib/localization/StateObserver.h | 32 ++++++++-- include/airlib/robot_defs.h | 58 ++++++++++++++----- include/airlib/utility/LoggerCSV.h | 26 ++++----- 7 files changed, 104 insertions(+), 40 deletions(-) diff --git a/include/airlib/control/ControllerBase.h b/include/airlib/control/ControllerBase.h index 62c0cba..1dd562e 100644 --- a/include/airlib/control/ControllerBase.h +++ b/include/airlib/control/ControllerBase.h @@ -120,7 +120,7 @@ namespace bebop2 tf::Transform getStateVecToTransform(const std::vector& state); protected: - /// @brief This function sets the linear positon of the drone to all 3 linear axes and to angula z-axis and publishes the message of the current position of the drone. + /// @brief This function sets the linear positon of the drone to all 3 linear axes and to angular z-axis and publishes the message of the current position of the drone. /// @param U is array of commands of size 4 which sets the above mentioned position of the drone. void publish_cmd_vel(const std::vector&U); /// @brief This function calculates the distance between the setpoint of the drone and the current state position. diff --git a/include/airlib/localization/Sensors/ApriltagLandmarks.h b/include/airlib/localization/Sensors/ApriltagLandmarks.h index 3929c3f..8ae059f 100644 --- a/include/airlib/localization/Sensors/ApriltagLandmarks.h +++ b/include/airlib/localization/Sensors/ApriltagLandmarks.h @@ -15,18 +15,19 @@ #include #include "SensorBase.h" -class ApriltagLandmarks : public SensorBase{ /** - * @brief This class compute the robot coordinate from stationary tags. + * @brief This class computes the robot coordinate from stationary tags. + * * There are three stationary apriltags located on the wall. * These tags are treated as known landmarks for the map. * Bebop2 can view these tags with the front facing camera. - * It is not necessary to see all the tags even one landmark can help to localize the robot. + * It is not necessary to see all the tags since even one landmark can help to localize the robot. * This information is feedback to the computer to detect apriltags from the camera image. * Bebop2 can transmit this images upto 28 Hz speed - * Apprantly, the tags are located only front direction, therefore robot yaw angle is ignored. + * Apparently, the tags are located only front direction, therefore robot yaw angle is ignored. * */ +class ApriltagLandmarks : public SensorBase{ public: ApriltagLandmarks(ros::NodeHandle& nh); @@ -45,7 +46,7 @@ class ApriltagLandmarks : public SensorBase{ protected: /** - * @brief Given a array of detected tags, here we calculate robot global coordinate with respect to each tag. + * @brief Given an array of detected tags, here we calculate robot global coordinate with respect to each tag. * Each tag propose a noisy state of the robot when transformed it to the global frame. * Therefore, an appropriate state filter is used to denoise those readings and compute the robot state accurately. * diff --git a/include/airlib/localization/Sensors/DummyState.h b/include/airlib/localization/Sensors/DummyState.h index 0bd83ef..0452976 100644 --- a/include/airlib/localization/Sensors/DummyState.h +++ b/include/airlib/localization/Sensors/DummyState.h @@ -12,7 +12,8 @@ namespace bebop2{ /** - * Dummy state will create a state space repersentation for quadrotor. + * @brief Dummy state creates a state space repersentation for quadrotor. + * The key idea is to initialize a state at (0, 0, 0, 0) and take joystick command to update state. * To capture realistic behavior add some gaussian white noise to the state. * When bebop2 takeoff from the ground it reaches 1m above from the ground origin and when it lands then z axis value is 0. @@ -32,6 +33,9 @@ namespace bebop2{ * @param noisy_reading an option to make a realistic sensor reading: if true white noise will be added to the output */ DummyState(ros::NodeHandle& nh, bool noisy_reading); + /** @brief Populates the requested state vector. + * @param state Gives the current position of the drone. + */ void operator()(std::vector& state); bool empty(); @@ -43,6 +47,7 @@ namespace bebop2{ ros::Subscriber sub_takeoff_, sub_land_, sub_cmd_vel_; /// @brief to generate Gaussian white noise we need random device std::random_device rd_; + /// @brief Checks if noise reading is enabled or not. bool noisy_reading_; const size_t STATE_DIM = 4; diff --git a/include/airlib/localization/Sensors/SensorBase.h b/include/airlib/localization/Sensors/SensorBase.h index f6552e8..f5124a7 100644 --- a/include/airlib/localization/Sensors/SensorBase.h +++ b/include/airlib/localization/Sensors/SensorBase.h @@ -13,6 +13,12 @@ class SensorBase; typedef std::shared_ptr SensorPtr; +/** +* @brief This class provides a conection to acquire internal state vector + +* so that other components required for the bebop to operate successfully can do estimation and calculation. +* It also publishes the drone's positon and transformation so that we can picture it in a graphical interface such as RVIZ. +*/ class SensorBase: std::enable_shared_from_this { public: @@ -26,7 +32,7 @@ class SensorBase: std::enable_shared_from_this * @brief This is an interface to access to the internal state vector so that other modules can do their computation * @note this interface depends on bool empty() * @param result copy internal state vector to result vector - */ + */ virtual void operator()(std::vector& result) = 0; /** * @brief This is an interface to check whether internal state vector is empty or not so that we can safely read internal state vector. diff --git a/include/airlib/localization/StateObserver.h b/include/airlib/localization/StateObserver.h index 2c66141..d2afd78 100644 --- a/include/airlib/localization/StateObserver.h +++ b/include/airlib/localization/StateObserver.h @@ -14,23 +14,45 @@ namespace bebop2 { class StateObserver; typedef std::shared_ptr StateObserverPtr; + /** + * @brief The StateObserver class Observes and updates the state of the drone + * + * and sends those messages to different modules of the program such as controllers, sensors etc so that they can control the drone and perform tasks. + */ class StateObserver { public: + /// @brief Initializes the filter and sensor parameter and sets m_initliazed to False. + /// @param filter A barrier to refine the noise. + /// @param sensor + /// explicit StateObserver(FilterPtr filter, SensorPtr sensor); - void operator()(std::vector& result); - - - + /// @brief It updates and copies the state of the drone and adds the copied state into the parameter result. + /// @param result + void operator()(std::vector& result); private: + // + // Accesses the internal state vector + // Publishes robot transformation void update_state(); protected: /* Quadrotor state * x, y, z, yaw - */ + */ + /** @brief This attribute is an array of values and the elements in the vector gives the state of the robot. The first three + * attributes are vectors that gives the linear state of the robot and yaw gives the rotation of the robot about these vectors + */ + /** @note The elements in the array are commonly represented by:- + * - x ---> Position of the drone in x-axis. + * - y ---> Position of the drone in x-axis. + * - z ---> Position of the drone in z-axis. + * - w ---> yaw (Rotation about z-axis). + */ std::vector m_state; + /// @brief Shared pointer that provides the address to the FilterBase.h class FilterPtr m_filter; + /// @brief Shared pointer that provides the addreess to the SensorBase.h class SensorPtr m_sensor; bool m_initialized; diff --git a/include/airlib/robot_defs.h b/include/airlib/robot_defs.h index 5e1efa9..024d666 100644 --- a/include/airlib/robot_defs.h +++ b/include/airlib/robot_defs.h @@ -5,12 +5,17 @@ //const int STATE_DIM = 10; +/// @brief Structure defining the state of the drone. struct RobotState { - double x; // x-position (in meters) - double y; // y-position (in meters) - double z; // z-position (in meters) - double theta; // z-orientation (in radians) + /// x-position(in meters) + double x; + /// y-position (in meters) + double y; + /// z-position (in meters) + double z; + /// z-orientation (in radians) + double theta; // double vx; // x-linear velocity (in meters) // double vy; // y-linear velocity (in meters) // double vz; // z-linear velocity (in meters) @@ -20,14 +25,22 @@ struct RobotState }; -/* Field location structure in radial distance (r), azimuthal angle (theta), and polar angle (psi)*/ +/// Field location structure in radial distance (r), azimuthal angle (theta), and polar angle (psi) struct MarkerObservation { - std::string tagName; // Index of observed marker [0-n] - double radial_distance; // Observed distance to landmark from robot position - double azimuthal_angle; // Observed bearing to landmark in the XY coordinate frame - double polar_angle; // Observed bearing to landmark in the positive Z axis, + std::string tagName; // Index of observed marker [0-n] + /// Observed distance to landmark from robot position + double radial_distance; + /// Observed bearing to landmark in the XY coordinate frame + double azimuthal_angle; + /// Observed bearing to landmark in the positive Z axis + double polar_angle; + + /// @brief + /// @param os It is an output stream objects that writes sequences of characters + /// @param observation Reference to MarkerObservation struct. + /// @return Returns the output of tagname, radial distance, azimuthal angle and polar angle. friend std::ostream &operator<<(std::ostream &os, const MarkerObservation &observation) { double degFactor = (180.0/3.141592653589793238463); os << "tagName: " << observation.tagName << " radial_distance: " << observation.radial_distance @@ -38,14 +51,19 @@ struct MarkerObservation }; -/* Field location structure */ +/// Field location structure struct FieldLocation { std::string tagName; - double x; // x-position (in meters) - double y; // y-position (in meters) - double z; // z-position (in meters) + /// x-position (in meters) + double x; + /// y-position (in meters) + double y; + /// z-position (in meters) + double z; + /// @brief Calculates the radial distance, azimuthal angle and polar angle using x,y,z position. + /// @return Returns the the structure of MarkerObservation with the spherical coordinates. MarkerObservation toObservation() { double rho = sqrt(x * x + y * y + z * z); @@ -54,12 +72,18 @@ struct FieldLocation return MarkerObservation{tagName, rho, theta, phi}; } - + /// @param os It is an output stream object that writes sequences of characters. + /// @param location Reference to the FieldLocation Struct. + /// @return Returns the output of tagName, x, y and z positions in string format. friend std::ostream &operator<<(std::ostream &os, const FieldLocation &location) { os << "tagName: " << location.tagName << " x: " << location.x << " y: " << location.y << " z: " << location.z; return os; } + + /// @brief Calculates the difference between two tags. + /// @param other is the other AprilTag. + /// @return the struct with the new tagname, x,y and z position FieldLocation operator - (const FieldLocation& other) const { double dx = x - other.x; @@ -68,6 +92,9 @@ struct FieldLocation return FieldLocation{tagName + "-" + other.tagName, dx, dy, dz}; } + /// @brief Calculates the sum of two tags. + /// @param other is the other AprilTag. + /// @return the struct with the new tagname, x,y and z position FieldLocation operator + (const FieldLocation& other) const { double dx = x + other.x; @@ -76,6 +103,9 @@ struct FieldLocation return FieldLocation{tagName, dx, dy, dz}; } + /// @brief Calculates the product between two tags. + /// @param other is the other AprilTag. + /// @return the struct with the new tagname, x,y and z position FieldLocation operator * (double scale) const { double dx = x * scale; diff --git a/include/airlib/utility/LoggerCSV.h b/include/airlib/utility/LoggerCSV.h index 031d2fb..5ebb9c1 100644 --- a/include/airlib/utility/LoggerCSV.h +++ b/include/airlib/utility/LoggerCSV.h @@ -10,20 +10,21 @@ using namespace std::literals; +/// @brief This class allows us to easily log information to a CSV file format. class LoggerCSV{ using TIME_POINT = std::chrono::time_point; public: - // This is a default contructor without st.pop_back();header. - // One can manually add header file using addHeader function + /// @brief This is a default contructor without st.pop_back();header. + /// One can manually add header file using addHeader function LoggerCSV() { m_header_enabled = false; m_timer_enabled = false; } - /// use this constructor to create a csv file with header + ///@brief This constructor is used to create a csv file with header LoggerCSV(const std::vector&header) { m_header_enabled = false; @@ -31,31 +32,30 @@ class LoggerCSV{ addHeader(header); } - /// use this contructor when you want to record data row at different frequency than sensor frequency + ///@brief This constructor is used to to record data row at different frequency than sensor frequency whenever required. explicit LoggerCSV(const std::vector&header, const int frequency) { m_header_enabled = false; m_timer_enabled = false; addHeader(header); - // initiate last update time 1 min later to write data row - // write time only depends on actual data not header + /// @brief Initiates last update time 1 min later to write data row and write time only depends on actual data not header m_last_update_time = std::chrono::system_clock::now() - 1min; m_timer_enabled = true; - // calculate pause time in millisecond between two data rows + /// calculates the pause time in millisecond between two data rows m_pause_time_ms = 1000 / frequency; } + /// @brief When this class will be distructed, we will write the logger values from ROM to a csv file on the hard drive. ~LoggerCSV() { - // when this class will be distructed, we will write the logger values from ROM to a csv file on the hard drive. std::string value = m_data.str(); // don't write file if there is no data added to the logger if(!value.length()) return; - // remove last new line from the string + /// Removes last new line from the string value.pop_back(); // make sure you have unique name for each logger file. Use system timestamp to serve this purpose @@ -65,7 +65,7 @@ class LoggerCSV{ myfile.close(); } - /// this function is used to generate unique name for a file with timestamp + /// @brief This function is used to generate unique name for a file with timestamp std::string getTimestamp() { const TIME_POINT now = std::chrono::system_clock::now(); @@ -88,7 +88,7 @@ class LoggerCSV{ { if(m_timer_enabled) { - // if timer is enabled then discard the data point based on the pause limit + /// If timer is enabled then it discards the data point based on the pause limit const auto end = std::chrono::system_clock::now(); int elapsed_time = std::chrono::duration_cast(end - m_last_update_time).count(); @@ -98,7 +98,7 @@ class LoggerCSV{ m_last_update_time = std::chrono::system_clock::now(); } - // if header is present then check the number of columns match with header column + /// If header is present then this checks the number of columns match with header column if(m_header_enabled) if(m_header_len != data.size()) { @@ -106,7 +106,7 @@ class LoggerCSV{ return; } - // we are now ready to store the data into RAM using stringstream + /// This will store the data into RAM using stringstream int index = 0; for(const auto& item: data) if(++index < data.size()) From 0a808caa24383c4c4b80158814400db9f1d726d6 Mon Sep 17 00:00:00 2001 From: sbsingh3_2121 Date: Sat, 11 Feb 2023 14:40:07 -0600 Subject: [PATCH 08/15] READ ME File, One change remaining --- README.md | 119 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 110 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 06a853f..38c2013 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,122 @@ -# Bebop2 Controller +@mainpage Parrot Bebop2 Drone with Joystick Controller README File + + +## Introduction + +The Parrot Bebop 2 is a small, lightweight manufactured by Parrot, a French company specializing in consumer electronics. It is compact and lightweight, making it easy to transport and use on the go which makes it a popular choice +It's camera has a most impressive electronic image stabilization and with a top speed of 40 mph, this drone can really move. The Bebop 2 has a battery life of up to 25 minutes.
+ +This README file explains how to control the drone using a joystick and ROS drivers, add visual servoing capabilities, and scan for April Tags to find the drone's relative position. + +----------------------------------------- +Parrot Bebop Drone 2 + ## Quick Run -Connect your joystick to the computer. -Joystick buttons perform following operations: +**Hardware Setup**: +Connect your joystick to the computer.
+ + +Before starting the program, the drone should be turned on and the computer connected to the drone WiFi. + +> **Warning** +> It is strictly recommended to use protective equipments while testing the drone.
+If the drone needs to be shut down completely then we should flip the drone. + + +*Joystick buttons perform following operations*: + ```angular2html - IDLE = 0, // setpoint can be freely moved with joystick. Sphere color blue - TAKEOFF = 1, // drone will takeoff from the ground - LAND = 2, //drone will land - ENGAGE = 3, // set current location as a set point (for hover). Sphere color yellow - CONTROL = 4 // start PID controller for the current (ENGAGE) setpoint. Sphere color cyan + IDLE = 0, // Setpoint can be freely moved with joystick. Sphere color blue + + TAKEOFF = 1, // Drone will takeoff from the ground + + LAND = 2, // Drone will land + + ENGAGE = 3, // Set current location as a set point (for hover). Sphere color yellow + + CONTROL = 4 // Start PID controller for the current (ENGAGE) setpoint. Sphere color cyan ``` Once control mode is enabled, setpoint can also be controlled using joystick axes. -Note that, only position controller is implemented. +Note that, only position controller is implemented from the analog sticks. Orientation controller needs yaw angle which could be directly obtained from bebop odom. +------------------------------------------ + + +## Software Setup: + +-- A computer with Ubuntu 16.04, 18.04 or above and ROS Kinetic, Melodic or above installed. + +-- **Visp_ros** package is needed to do visual servoing with Parrot Bebop 2 drone. Visual servoing, also known as vision-based robot control, is a technique which uses feedback information extracted from a vision sensor (visual feedback) to control the motion of a robot. + +-- **Installation of bebop_autonomy** from fork manually is required to send relative move commands to the drone. Check out [install bebop_autonomy from fork and build visp](http://wiki.ros.org/visp_ros/Tutorials/How%20to%20do%20visual%20servoing%20with%20Parrot%20Bebop%202%20drone%20and%20visp_ros).
+Bebop_autonomy is a ROS driver for Parrot Bebop 2.0 drones (quadrocopters), based on Parrot’s official ARDroneSDK3. You can check out [this source code](https://github.com/AutonomyLab/bebop_autonomy) for the driver is for more understanding. + +--------------------------------------------- + + +Joystick Controller + +## Operating the drone + + +The Parrot Bebop 2 Drone can be controlled from a PID Joystick Controller. The drone can be manuvered with the joytsick analog sticks. + +The functions of the Four Action Buttons of the joystick is as follows: + +// To be written down. + +1. A ---> +2. B ---> +3. X ---> +4. Y ---> + +--------------------------------------------- + +AprilTag 36h11 + +## April Tags + + +AprilTag is a visual fiducial system, useful for a wide variety of tasks including augmented reality, robotics, and camera calibration. +Targets can be created from an ordinary printer, and the AprilTag detection software computes the precise 3D position, orientation, and identity of the tags relative to the camera.

+ +Using the built-in camera of the Parrot Bebop 2 Drone, it scans the tag and determines its relative postion from the tag.
+ + +An April Tag from 36h11 family that will serve as target for the visual servoing (see [this page](https://visp-doc.inria.fr/doxygen/visp-daily/tutorial-franka-pbvs.html#franka_prereq_target) to print one). + + + +--------------------------------------------- + +## Visualisation using Graphical Interface (RVIZ) + +The Parrot Bebop 2 drone can be monitored and visualised using a graphical interface like rviz.
+ +**For RVIZ installtion** :- +``` + sudo apt-get install ros-[ros-version]-rviz +``` + +For example:- +``` + sudo apt-get install ros-noetic-rviz +``` + +To run rviz +``` +rosrun rviz rviz + +``` + +Check out http://wiki.ros.org/rviz/UserGuide for more information. + +----------------------------------------------- + ## Parameter Tuning Refer to ``config/param.yaml`` file to read about tuning parameters. From 0efcad24b949f241b9f741e758c232ca29a65a8d Mon Sep 17 00:00:00 2001 From: sbsingh3_2121 Date: Sat, 11 Feb 2023 14:41:44 -0600 Subject: [PATCH 09/15] Documentation --- docs/html/ApriltagLandmarks_8cpp_source.html | 8 +- docs/html/ApriltagLandmarks_8h.html | 1 + docs/html/ApriltagLandmarks_8h_source.html | 47 +- docs/html/ComplementaryFilter_8h.html | 1 + docs/html/ComplementaryFilter_8h_source.html | 64 +-- docs/html/ControllerBase_8cpp_source.html | 2 +- docs/html/ControllerBase_8h_source.html | 2 +- docs/html/DummyState_8cpp_source.html | 2 +- docs/html/DummyState_8h.html | 1 + docs/html/DummyState_8h_source.html | 56 +-- .../ExtendedKalmanFilter_8cpp_source.html | 130 +++--- docs/html/ExtendedKalmanFilter_8h.html | 1 + docs/html/ExtendedKalmanFilter_8h_source.html | 91 ++-- docs/html/FilterBase_8h.html | 1 + docs/html/FilterBase_8h_source.html | 62 +-- docs/html/LQR_8cpp_source.html | 2 +- docs/html/LQR_8h.html | 1 + docs/html/LQR_8h_source.html | 31 +- docs/html/LoggerCSV_8h.html | 1 + docs/html/LoggerCSV_8h_source.html | 72 ++- docs/html/ReadMe_8md.html | 81 ++++ docs/html/SensorBase_8h.html | 1 + docs/html/SensorBase_8h_source.html | 60 +-- docs/html/StateObserver_8cpp_source.html | 12 +- docs/html/StateObserver_8h.html | 1 + docs/html/StateObserver_8h_source.html | 59 ++- docs/html/annotated.html | 36 +- docs/html/apriltag__ekf__pid_8cpp_source.html | 2 +- docs/html/classApriltagLandmarks.html | 18 +- docs/html/classComplementaryFilter.html | 45 +- docs/html/classFilterBase.html | 54 ++- docs/html/classLoggerCSV.html | 40 +- docs/html/classMvn.html | 30 +- docs/html/classParticleFilter.html | 39 +- docs/html/classSensorBase.html | 18 +- docs/html/classTagMap.html | 12 +- docs/html/classbebop2_1_1ControllerBase.html | 4 +- docs/html/classbebop2_1_1DummyState.html | 24 +- .../classbebop2_1_1ExtendedKalmanFilter.html | 110 ++++- docs/html/classbebop2_1_1LQR.html | 12 +- .../classbebop2_1_1QuadControllerPID.html | 2 +- docs/html/classbebop2_1_1StateObserver.html | 53 ++- ...r_8b1a236cb4f9d64090168ce40b07b07e_dep.map | 4 + ...r_8b1a236cb4f9d64090168ce40b07b07e_dep.md5 | 1 + ...r_8b1a236cb4f9d64090168ce40b07b07e_dep.png | Bin 0 -> 1868 bytes docs/html/dummy__ekf__pid_8cpp_source.html | 2 +- docs/html/graph_legend.html | 4 +- docs/html/hierarchy.html | 36 +- docs/html/index.html | 78 +++- ...zation_2Filters_2pf_2main_8cpp_source.html | 4 +- docs/html/menudata.js | 1 - docs/html/namespacebebop2.html | 6 +- docs/html/namespaces.html | 8 +- docs/html/particle__filter_8cpp_source.html | 38 +- docs/html/particle__filter_8h.html | 6 + docs/html/particle__filter_8h_source.html | 411 +++++++++--------- docs/html/robot__defs_8h.html | 3 + docs/html/robot__defs_8h_source.html | 197 +++++---- docs/html/search/all_1.js | 5 +- docs/html/search/all_d.js | 27 +- docs/html/search/pages_0.js | 2 +- docs/html/search/searchdata.js | 2 +- docs/html/structFieldLocation.html | 81 +++- docs/html/structLandmarkObs.html | 28 +- docs/html/structMarkerObservation.html | 37 +- docs/html/structParticle.html | 30 +- docs/html/structRobotState.html | 34 +- .../structTagMap_1_1single__landmark__s.html | 26 +- docs/html/struct_field_location-members.html | 12 +- docs/html/struct_field_location.html | 145 +++--- .../struct_marker_observation-members.html | 12 +- docs/html/struct_marker_observation.html | 108 ++--- docs/html/struct_robot_state-members.html | 10 +- docs/html/struct_robot_state.html | 99 +---- docs/latex/annotated.tex | 6 + docs/latex/files.tex | 4 + docs/latex/index.tex | 15 + docs/latex/refman.tex | 18 +- docs/latex/robot__defs_8h_source.tex | 93 ++++ docs/latex/struct_field_location.tex | 129 ++++++ docs/latex/struct_marker_observation.tex | 47 ++ docs/latex/struct_robot_state.tex | 25 ++ 82 files changed, 1919 insertions(+), 1164 deletions(-) create mode 100644 docs/html/ReadMe_8md.html create mode 100644 docs/html/dir_8b1a236cb4f9d64090168ce40b07b07e_dep.map create mode 100644 docs/html/dir_8b1a236cb4f9d64090168ce40b07b07e_dep.md5 create mode 100644 docs/html/dir_8b1a236cb4f9d64090168ce40b07b07e_dep.png create mode 100644 docs/latex/annotated.tex create mode 100644 docs/latex/files.tex create mode 100644 docs/latex/index.tex create mode 100644 docs/latex/robot__defs_8h_source.tex create mode 100644 docs/latex/struct_field_location.tex create mode 100644 docs/latex/struct_marker_observation.tex create mode 100644 docs/latex/struct_robot_state.tex diff --git a/docs/html/ApriltagLandmarks_8cpp_source.html b/docs/html/ApriltagLandmarks_8cpp_source.html index 465aaff..5e490e4 100644 --- a/docs/html/ApriltagLandmarks_8cpp_source.html +++ b/docs/html/ApriltagLandmarks_8cpp_source.html @@ -149,12 +149,12 @@
71
void operator()(std::vector< double > &result)
This is an interface to access to the internal state vector so that other modules can do their comput...
-
ApriltagLandmarks(ros::NodeHandle &nh)
This class compute the robot coordinate from stationary tags. There are three stationary apriltags lo...
-
void apriltag_callback(const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg)
Given a array of detected tags, here we calculate robot global coordinate with respect to each tag....
+
ApriltagLandmarks(ros::NodeHandle &nh)
+
void apriltag_callback(const apriltag_ros::AprilTagDetectionArray::ConstPtr &msg)
Given an array of detected tags, here we calculate robot global coordinate with respect to each tag....
bool empty()
This is an interface to check whether internal state vector is empty or not so that we can safely rea...
FieldLocation transformToGlobalFrame(const tf::Transform &tagTransform, const std::string &tagName)
tag is detected with respect to camera frame which needs to be transformed to global frame through ca...
- - +
Field location structure.
Definition: robot_defs.h:56
+
double x
x-position (in meters)
Definition: robot_defs.h:59