From 510a3194142a3b125199e5e635886e3923ad0c1e Mon Sep 17 00:00:00 2001 From: eeberhard Date: Wed, 19 Jun 2024 14:04:20 +0000 Subject: [PATCH] deploy: 22d0fd0de68e0582db76397005aaf3a15f2f5152 --- .../_add_service_exception_8hpp_source.html | 108 + .../_add_signal_exception_8hpp_source.html | 106 + versions/v4.2.2/_component_8cpp_source.html | 175 + versions/v4.2.2/_component_8hpp_source.html | 233 ++ .../_component_exception_8hpp_source.html | 108 + .../_component_interface_8cpp_source.html | 775 ++++ .../_component_interface_8hpp_source.html | 604 ++++ ...onent_parameter_exception_8hpp_source.html | 107 + .../_controller_interface_8cpp_source.html | 949 +++++ .../_controller_interface_8hpp_source.html | 720 ++++ .../v4.2.2/_core_exception_8hpp_source.html | 108 + .../v4.2.2/_encoded_state_8hpp_source.html | 101 + ...id_pointer_cast_exception_8hpp_source.html | 108 + ...invalid_pointer_exception_8hpp_source.html | 107 + .../_lifecycle_component_8cpp_source.html | 458 +++ .../_lifecycle_component_8hpp_source.html | 234 ++ ...ookup_transform_exception_8hpp_source.html | 106 + .../v4.2.2/_message_pair_8cpp_source.html | 136 + .../v4.2.2/_message_pair_8hpp_source.html | 230 ++ .../_message_pair_interface_8cpp_source.html | 106 + .../_message_pair_interface_8hpp_source.html | 173 + ...age_translation_exception_8hpp_source.html | 108 + .../v4.2.2/_message_type_8hpp_source.html | 102 + .../_null_pointer_exception_8hpp_source.html | 107 + ...ter_translation_exception_8hpp_source.html | 109 + .../_predicates_listener_8cpp_source.html | 129 + .../_predicates_listener_8hpp_source.html | 124 + .../_publisher_handler_8hpp_source.html | 212 ++ .../_publisher_interface_8cpp_source.html | 270 ++ .../_publisher_interface_8hpp_source.html | 171 + .../v4.2.2/_publisher_type_8hpp_source.html | 102 + ...obot_controller_interface_8cpp_source.html | 503 +++ ...obot_controller_interface_8hpp_source.html | 179 + .../v4.2.2/_service_client_8hpp_source.html | 121 + .../_subscription_handler_8cpp_source.html | 200 + .../_subscription_handler_8hpp_source.html | 204 ++ .../_subscription_interface_8cpp_source.html | 121 + .../_subscription_interface_8hpp_source.html | 153 + versions/v4.2.2/annotated.html | 121 + versions/v4.2.2/bc_s.png | Bin 0 -> 676 bytes versions/v4.2.2/bc_sd.png | Bin 0 -> 635 bytes ..._component_interface_public_interface.html | 91 + versions/v4.2.2/classes.html | 111 + ...ulo__components_1_1_component-members.html | 133 + ...classmodulo__components_1_1_component.html | 552 +++ .../classmodulo__components_1_1_component.png | Bin 0 -> 1136 bytes ...nents_1_1_component_interface-members.html | 137 + ...o__components_1_1_component_interface.html | 2363 ++++++++++++ ...lo__components_1_1_component_interface.png | Bin 0 -> 1106 bytes ...nents_1_1_lifecycle_component-members.html | 137 + ...o__components_1_1_lifecycle_component.html | 694 ++++ ...lo__components_1_1_lifecycle_component.png | Bin 0 -> 1268 bytes ...ons_1_1_add_service_exception-members.html | 91 + ...1exceptions_1_1_add_service_exception.html | 154 + ..._1exceptions_1_1_add_service_exception.png | Bin 0 -> 1474 bytes ...ions_1_1_add_signal_exception-members.html | 91 + ..._1exceptions_1_1_add_signal_exception.html | 154 + ...1_1exceptions_1_1_add_signal_exception.png | Bin 0 -> 1471 bytes ...tions_1_1_component_exception-members.html | 90 + ...1_1exceptions_1_1_component_exception.html | 192 + ..._1_1exceptions_1_1_component_exception.png | Bin 0 -> 3239 bytes ...component_parameter_exception-members.html | 91 + ...ons_1_1_component_parameter_exception.html | 154 + ...ions_1_1_component_parameter_exception.png | Bin 0 -> 1554 bytes ..._1_lookup_transform_exception-members.html | 91 + ...ptions_1_1_lookup_transform_exception.html | 154 + ...eptions_1_1_lookup_transform_exception.png | Bin 0 -> 1551 bytes ...lers_1_1_controller_interface-members.html | 145 + ..._controllers_1_1_controller_interface.html | 2636 ++++++++++++++ ...__controllers_1_1_controller_interface.png | Bin 0 -> 1164 bytes ..._1_robot_controller_interface-members.html | 154 + ...ollers_1_1_robot_controller_interface.html | 801 ++++ ...rollers_1_1_robot_controller_interface.png | Bin 0 -> 1158 bytes ...ommunication_1_1_message_pair-members.html | 108 + ...ore_1_1communication_1_1_message_pair.html | 608 ++++ ...core_1_1communication_1_1_message_pair.png | Bin 0 -> 1879 bytes ...on_1_1_message_pair_interface-members.html | 95 + ...munication_1_1_message_pair_interface.html | 338 ++ ...mmunication_1_1_message_pair_interface.png | Bin 0 -> 1881 bytes ...ication_1_1_publisher_handler-members.html | 104 + ..._1communication_1_1_publisher_handler.html | 371 ++ ...1_1communication_1_1_publisher_handler.png | Bin 0 -> 1820 bytes ...ation_1_1_publisher_interface-members.html | 98 + ...communication_1_1_publisher_interface.html | 404 +++ ...1communication_1_1_publisher_interface.png | Bin 0 -> 1825 bytes ...tion_1_1_subscription_handler-members.html | 114 + ...ommunication_1_1_subscription_handler.html | 645 ++++ ...communication_1_1_subscription_handler.png | Bin 0 -> 1837 bytes ...on_1_1_subscription_interface-members.html | 94 + ...munication_1_1_subscription_interface.html | 275 ++ ...mmunication_1_1_subscription_interface.png | Bin 0 -> 1837 bytes ...exceptions_1_1_core_exception-members.html | 90 + ...core_1_1exceptions_1_1_core_exception.html | 193 + ..._core_1_1exceptions_1_1_core_exception.png | Bin 0 -> 3455 bytes ...nvalid_pointer_cast_exception-members.html | 91 + ...ns_1_1_invalid_pointer_cast_exception.html | 153 + ...ons_1_1_invalid_pointer_cast_exception.png | Bin 0 -> 1465 bytes ...1_1_invalid_pointer_exception-members.html | 91 + ...eptions_1_1_invalid_pointer_exception.html | 153 + ...ceptions_1_1_invalid_pointer_exception.png | Bin 0 -> 1413 bytes ...message_translation_exception-members.html | 91 + ...ons_1_1_message_translation_exception.html | 153 + ...ions_1_1_message_translation_exception.png | Bin 0 -> 1476 bytes ...ns_1_1_null_pointer_exception-members.html | 91 + ...exceptions_1_1_null_pointer_exception.html | 154 + ...1exceptions_1_1_null_pointer_exception.png | Bin 0 -> 1342 bytes ...rameter_translation_exception-members.html | 91 + ...s_1_1_parameter_translation_exception.html | 154 + ...ns_1_1_parameter_translation_exception.png | Bin 0 -> 1486 bytes ...utils_1_1_predicates_listener-members.html | 92 + ..._1_1testutils_1_1_predicates_listener.html | 208 ++ ...s_1_1testutils_1_1_predicates_listener.png | Bin 0 -> 725 bytes ...1testutils_1_1_service_client-members.html | 91 + ...utils_1_1testutils_1_1_service_client.html | 206 ++ ..._utils_1_1testutils_1_1_service_client.png | Bin 0 -> 742 bytes versions/v4.2.2/closed.png | Bin 0 -> 132 bytes .../dir_005db6f82a7eca80f4e3827434b589b4.html | 91 + .../dir_049f97fddacb7dc6e4c718ac904130b4.html | 101 + .../dir_05a91d83eeac941ff7d1774756f408e0.html | 102 + .../dir_0e754abea120a9c0c4911cca1dd0951c.html | 93 + .../dir_1086284b706fbaee53263fa501af42e8.html | 91 + .../dir_2397dea4246cf971150250488a69dca4.html | 100 + .../dir_27c37b9b3673e5d3fc7170b21f143cd2.html | 98 + .../dir_30c9960b1e12cf048409514a1d0c5545.html | 91 + .../dir_349657725b3f4f657efe86018f81caee.html | 95 + .../dir_3e8f83d5963dbe4a7be4947f2eff491b.html | 85 + .../dir_5442966453c41df6861b650ae85469b6.html | 95 + .../dir_5b0a4e6091157a5e3a1c0d77b65afe7a.html | 99 + .../dir_6df23892ff328103ad3e309d3548417b.html | 85 + .../dir_727f33ea6496bb66c2db4f7101f40bd7.html | 85 + .../dir_880c3100161de164f55db9e5265190dd.html | 91 + .../dir_97c9a08c8a0ff5d05b217f6e73862a8f.html | 93 + .../dir_9d27c852c776d117417a91cf72db7998.html | 93 + .../dir_a02cdc010ded81c7c2ac77993f10de2b.html | 91 + .../dir_a6c74a7b9b9addb9dd4654e424e31fd8.html | 93 + .../dir_ad135c18ceef0560346390faedbedc87.html | 85 + .../dir_b0672ca90b2cc70fcfe3af0eed4bd360.html | 91 + .../dir_b2f33c71d4aa5e7af42a1ca61ff5af1b.html | 85 + .../dir_b6467040e22f64a215d0cd51303d2b49.html | 105 + .../dir_bc830b16dafc1f86e0bebd2067294caf.html | 95 + .../dir_d3939449d8b726061fb0cfc517c3fd5f.html | 91 + .../dir_f43720a52722f25f1201bb3ff6bb7f0f.html | 91 + .../dir_f9a68d619a1bb26c95560bd0519ddde7.html | 85 + .../dir_fc328347369410c3380b696ba11ab788.html | 99 + .../dir_fe0b512c3e8d43ae6faf41ba22286ee8.html | 91 + versions/v4.2.2/doc.svg | 12 + versions/v4.2.2/docd.svg | 12 + versions/v4.2.2/doxygen.css | 2045 +++++++++++ versions/v4.2.2/doxygen.svg | 28 + versions/v4.2.2/dynsections.js | 199 + versions/v4.2.2/files.html | 159 + versions/v4.2.2/folderclosed.svg | 11 + versions/v4.2.2/folderclosedd.svg | 11 + versions/v4.2.2/folderopen.svg | 17 + versions/v4.2.2/folderopend.svg | 12 + versions/v4.2.2/functions.html | 265 ++ versions/v4.2.2/functions_func.html | 249 ++ versions/v4.2.2/functions_vars.html | 88 + versions/v4.2.2/hierarchy.html | 120 + versions/v4.2.2/index.html | 119 + versions/v4.2.2/jquery.js | 34 + ...__component__interfaces_2_r_e_a_d_m_e.html | 93 + ...rce_2modulo__components_2_r_e_a_d_m_e.html | 101 + ...ce_2modulo__controllers_2_r_e_a_d_m_e.html | 123 + ...e_2source_2modulo__core_2_r_e_a_d_m_e.html | 192 + ...rce_2modulo__interfaces_2_r_e_a_d_m_e.html | 82 + ..._2source_2modulo__utils_2_r_e_a_d_m_e.html | 83 + versions/v4.2.2/menu.js | 136 + versions/v4.2.2/menudata.js | 91 + .../v4.2.2/message__readers_8cpp_source.html | 229 ++ .../v4.2.2/message__readers_8hpp_source.html | 488 +++ .../v4.2.2/message__writers_8cpp_source.html | 294 ++ .../v4.2.2/message__writers_8hpp_source.html | 199 + versions/v4.2.2/minus.svg | 8 + versions/v4.2.2/minusd.svg | 8 + ...nts_2utilities_2utilities_8hpp_source.html | 159 + ...rollers_2utils_2utilities_8hpp_source.html | 113 + versions/v4.2.2/namespacemembers.html | 124 + versions/v4.2.2/namespacemembers_enum.html | 82 + versions/v4.2.2/namespacemembers_func.html | 109 + versions/v4.2.2/namespacemembers_type.html | 81 + .../v4.2.2/namespacemodulo__components.html | 114 + ...spacemodulo__components_1_1exceptions.html | 111 + ...espacemodulo__components_1_1utilities.html | 115 + ...spacemodulo__controllers_1_1utilities.html | 115 + versions/v4.2.2/namespacemodulo__core.html | 127 + ...amespacemodulo__core_1_1communication.html | 453 +++ .../namespacemodulo__core_1_1exceptions.html | 114 + .../namespacemodulo__core_1_1translators.html | 3214 +++++++++++++++++ versions/v4.2.2/namespaces.html | 113 + versions/v4.2.2/nav_f.png | Bin 0 -> 153 bytes versions/v4.2.2/nav_fd.png | Bin 0 -> 169 bytes versions/v4.2.2/nav_g.png | Bin 0 -> 95 bytes versions/v4.2.2/nav_h.png | Bin 0 -> 98 bytes versions/v4.2.2/nav_hd.png | Bin 0 -> 114 bytes versions/v4.2.2/open.png | Bin 0 -> 123 bytes versions/v4.2.2/pages.html | 91 + .../parameter__translators_8cpp_source.html | 385 ++ .../parameter__translators_8hpp_source.html | 125 + versions/v4.2.2/plus.svg | 9 + versions/v4.2.2/plusd.svg | 9 + .../predicate__variant_8hpp_source.html | 102 + versions/v4.2.2/search/all_0.js | 18 + versions/v4.2.2/search/all_1.js | 23 + versions/v4.2.2/search/all_10.js | 5 + versions/v4.2.2/search/all_11.js | 8 + versions/v4.2.2/search/all_12.js | 11 + versions/v4.2.2/search/all_2.js | 6 + versions/v4.2.2/search/all_3.js | 7 + versions/v4.2.2/search/all_4.js | 5 + versions/v4.2.2/search/all_5.js | 20 + versions/v4.2.2/search/all_6.js | 4 + versions/v4.2.2/search/all_7.js | 8 + versions/v4.2.2/search/all_8.js | 6 + versions/v4.2.2/search/all_9.js | 22 + versions/v4.2.2/search/all_a.js | 4 + versions/v4.2.2/search/all_b.js | 17 + versions/v4.2.2/search/all_c.js | 14 + versions/v4.2.2/search/all_d.js | 14 + versions/v4.2.2/search/all_e.js | 25 + versions/v4.2.2/search/all_f.js | 5 + versions/v4.2.2/search/classes_0.js | 5 + versions/v4.2.2/search/classes_1.js | 13 + versions/v4.2.2/search/classes_2.js | 5 + versions/v4.2.2/search/classes_3.js | 5 + versions/v4.2.2/search/classes_4.js | 6 + versions/v4.2.2/search/classes_5.js | 4 + versions/v4.2.2/search/classes_6.js | 7 + versions/v4.2.2/search/classes_7.js | 4 + versions/v4.2.2/search/classes_8.js | 6 + versions/v4.2.2/search/close.svg | 18 + versions/v4.2.2/search/enums_0.js | 4 + versions/v4.2.2/search/enums_1.js | 4 + versions/v4.2.2/search/functions_0.js | 16 + versions/v4.2.2/search/functions_1.js | 12 + versions/v4.2.2/search/functions_2.js | 6 + versions/v4.2.2/search/functions_3.js | 6 + versions/v4.2.2/search/functions_4.js | 20 + versions/v4.2.2/search/functions_5.js | 4 + versions/v4.2.2/search/functions_6.js | 5 + versions/v4.2.2/search/functions_7.js | 5 + versions/v4.2.2/search/functions_8.js | 16 + versions/v4.2.2/search/functions_9.js | 10 + versions/v4.2.2/search/functions_a.js | 13 + versions/v4.2.2/search/functions_b.js | 24 + versions/v4.2.2/search/functions_c.js | 4 + versions/v4.2.2/search/functions_d.js | 4 + versions/v4.2.2/search/functions_e.js | 8 + versions/v4.2.2/search/functions_f.js | 11 + versions/v4.2.2/search/mag.svg | 24 + versions/v4.2.2/search/mag_d.svg | 24 + versions/v4.2.2/search/mag_sel.svg | 31 + versions/v4.2.2/search/mag_seld.svg | 31 + versions/v4.2.2/search/namespaces_0.js | 11 + versions/v4.2.2/search/pages_0.js | 7 + versions/v4.2.2/search/pages_1.js | 4 + versions/v4.2.2/search/pages_2.js | 10 + versions/v4.2.2/search/pages_3.js | 4 + versions/v4.2.2/search/search.css | 291 ++ versions/v4.2.2/search/search.js | 840 +++++ versions/v4.2.2/search/searchdata.js | 36 + versions/v4.2.2/search/typedefs_0.js | 4 + versions/v4.2.2/search/variables_0.js | 5 + versions/v4.2.2/search/variables_1.js | 4 + versions/v4.2.2/search/variables_2.js | 4 + versions/v4.2.2/search/variables_3.js | 4 + versions/v4.2.2/search/variables_4.js | 4 + versions/v4.2.2/search/variables_5.js | 4 + versions/v4.2.2/search/variables_6.js | 4 + versions/v4.2.2/splitbar.png | Bin 0 -> 314 bytes versions/v4.2.2/splitbard.png | Bin 0 -> 282 bytes ..._1_component_service_response-members.html | 90 + ...onents_1_1_component_service_response.html | 142 + ...trollers_1_1_controller_input-members.html | 91 + ...ulo__controllers_1_1_controller_input.html | 176 + ...1_controller_service_response-members.html | 90 + ...llers_1_1_controller_service_response.html | 142 + versions/v4.2.2/sync_off.png | Bin 0 -> 853 bytes versions/v4.2.2/sync_on.png | Bin 0 -> 845 bytes versions/v4.2.2/tab_a.png | Bin 0 -> 142 bytes versions/v4.2.2/tab_ad.png | Bin 0 -> 135 bytes versions/v4.2.2/tab_b.png | Bin 0 -> 169 bytes versions/v4.2.2/tab_bd.png | Bin 0 -> 173 bytes versions/v4.2.2/tab_h.png | Bin 0 -> 177 bytes versions/v4.2.2/tab_hd.png | Bin 0 -> 180 bytes versions/v4.2.2/tab_s.png | Bin 0 -> 184 bytes versions/v4.2.2/tab_sd.png | Bin 0 -> 188 bytes versions/v4.2.2/tabs.css | 1 + 288 files changed, 39968 insertions(+) create mode 100644 versions/v4.2.2/_add_service_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_add_signal_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_component_8cpp_source.html create mode 100644 versions/v4.2.2/_component_8hpp_source.html create mode 100644 versions/v4.2.2/_component_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_component_interface_8cpp_source.html create mode 100644 versions/v4.2.2/_component_interface_8hpp_source.html create mode 100644 versions/v4.2.2/_component_parameter_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_controller_interface_8cpp_source.html create mode 100644 versions/v4.2.2/_controller_interface_8hpp_source.html create mode 100644 versions/v4.2.2/_core_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_encoded_state_8hpp_source.html create mode 100644 versions/v4.2.2/_invalid_pointer_cast_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_invalid_pointer_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_lifecycle_component_8cpp_source.html create mode 100644 versions/v4.2.2/_lifecycle_component_8hpp_source.html create mode 100644 versions/v4.2.2/_lookup_transform_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_message_pair_8cpp_source.html create mode 100644 versions/v4.2.2/_message_pair_8hpp_source.html create mode 100644 versions/v4.2.2/_message_pair_interface_8cpp_source.html create mode 100644 versions/v4.2.2/_message_pair_interface_8hpp_source.html create mode 100644 versions/v4.2.2/_message_translation_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_message_type_8hpp_source.html create mode 100644 versions/v4.2.2/_null_pointer_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_parameter_translation_exception_8hpp_source.html create mode 100644 versions/v4.2.2/_predicates_listener_8cpp_source.html create mode 100644 versions/v4.2.2/_predicates_listener_8hpp_source.html create mode 100644 versions/v4.2.2/_publisher_handler_8hpp_source.html create mode 100644 versions/v4.2.2/_publisher_interface_8cpp_source.html create mode 100644 versions/v4.2.2/_publisher_interface_8hpp_source.html create mode 100644 versions/v4.2.2/_publisher_type_8hpp_source.html create mode 100644 versions/v4.2.2/_robot_controller_interface_8cpp_source.html create mode 100644 versions/v4.2.2/_robot_controller_interface_8hpp_source.html create mode 100644 versions/v4.2.2/_service_client_8hpp_source.html create mode 100644 versions/v4.2.2/_subscription_handler_8cpp_source.html create mode 100644 versions/v4.2.2/_subscription_handler_8hpp_source.html create mode 100644 versions/v4.2.2/_subscription_interface_8cpp_source.html create mode 100644 versions/v4.2.2/_subscription_interface_8hpp_source.html create mode 100644 versions/v4.2.2/annotated.html create mode 100644 versions/v4.2.2/bc_s.png create mode 100644 versions/v4.2.2/bc_sd.png create mode 100644 versions/v4.2.2/class_component_interface_public_interface.html create mode 100644 versions/v4.2.2/classes.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1_component-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1_component.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1_component.png create mode 100644 versions/v4.2.2/classmodulo__components_1_1_component_interface-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1_component_interface.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1_component_interface.png create mode 100644 versions/v4.2.2/classmodulo__components_1_1_lifecycle_component-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1_lifecycle_component.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1_lifecycle_component.png create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception.png create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception.png create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception.png create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception.png create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.html create mode 100644 versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.png create mode 100644 versions/v4.2.2/classmodulo__controllers_1_1_controller_interface-members.html create mode 100644 versions/v4.2.2/classmodulo__controllers_1_1_controller_interface.html create mode 100644 versions/v4.2.2/classmodulo__controllers_1_1_controller_interface.png create mode 100644 versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface-members.html create mode 100644 versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface.html create mode 100644 versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception.png create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception-members.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.html create mode 100644 versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.png create mode 100644 versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener-members.html create mode 100644 versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener.html create mode 100644 versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener.png create mode 100644 versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client-members.html create mode 100644 versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client.html create mode 100644 versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client.png create mode 100644 versions/v4.2.2/closed.png create mode 100644 versions/v4.2.2/dir_005db6f82a7eca80f4e3827434b589b4.html create mode 100644 versions/v4.2.2/dir_049f97fddacb7dc6e4c718ac904130b4.html create mode 100644 versions/v4.2.2/dir_05a91d83eeac941ff7d1774756f408e0.html create mode 100644 versions/v4.2.2/dir_0e754abea120a9c0c4911cca1dd0951c.html create mode 100644 versions/v4.2.2/dir_1086284b706fbaee53263fa501af42e8.html create mode 100644 versions/v4.2.2/dir_2397dea4246cf971150250488a69dca4.html create mode 100644 versions/v4.2.2/dir_27c37b9b3673e5d3fc7170b21f143cd2.html create mode 100644 versions/v4.2.2/dir_30c9960b1e12cf048409514a1d0c5545.html create mode 100644 versions/v4.2.2/dir_349657725b3f4f657efe86018f81caee.html create mode 100644 versions/v4.2.2/dir_3e8f83d5963dbe4a7be4947f2eff491b.html create mode 100644 versions/v4.2.2/dir_5442966453c41df6861b650ae85469b6.html create mode 100644 versions/v4.2.2/dir_5b0a4e6091157a5e3a1c0d77b65afe7a.html create mode 100644 versions/v4.2.2/dir_6df23892ff328103ad3e309d3548417b.html create mode 100644 versions/v4.2.2/dir_727f33ea6496bb66c2db4f7101f40bd7.html create mode 100644 versions/v4.2.2/dir_880c3100161de164f55db9e5265190dd.html create mode 100644 versions/v4.2.2/dir_97c9a08c8a0ff5d05b217f6e73862a8f.html create mode 100644 versions/v4.2.2/dir_9d27c852c776d117417a91cf72db7998.html create mode 100644 versions/v4.2.2/dir_a02cdc010ded81c7c2ac77993f10de2b.html create mode 100644 versions/v4.2.2/dir_a6c74a7b9b9addb9dd4654e424e31fd8.html create mode 100644 versions/v4.2.2/dir_ad135c18ceef0560346390faedbedc87.html create mode 100644 versions/v4.2.2/dir_b0672ca90b2cc70fcfe3af0eed4bd360.html create mode 100644 versions/v4.2.2/dir_b2f33c71d4aa5e7af42a1ca61ff5af1b.html create mode 100644 versions/v4.2.2/dir_b6467040e22f64a215d0cd51303d2b49.html create mode 100644 versions/v4.2.2/dir_bc830b16dafc1f86e0bebd2067294caf.html create mode 100644 versions/v4.2.2/dir_d3939449d8b726061fb0cfc517c3fd5f.html create mode 100644 versions/v4.2.2/dir_f43720a52722f25f1201bb3ff6bb7f0f.html create mode 100644 versions/v4.2.2/dir_f9a68d619a1bb26c95560bd0519ddde7.html create mode 100644 versions/v4.2.2/dir_fc328347369410c3380b696ba11ab788.html create mode 100644 versions/v4.2.2/dir_fe0b512c3e8d43ae6faf41ba22286ee8.html create mode 100644 versions/v4.2.2/doc.svg create mode 100644 versions/v4.2.2/docd.svg create mode 100644 versions/v4.2.2/doxygen.css create mode 100644 versions/v4.2.2/doxygen.svg create mode 100644 versions/v4.2.2/dynsections.js create mode 100644 versions/v4.2.2/files.html create mode 100644 versions/v4.2.2/folderclosed.svg create mode 100644 versions/v4.2.2/folderclosedd.svg create mode 100644 versions/v4.2.2/folderopen.svg create mode 100644 versions/v4.2.2/folderopend.svg create mode 100644 versions/v4.2.2/functions.html create mode 100644 versions/v4.2.2/functions_func.html create mode 100644 versions/v4.2.2/functions_vars.html create mode 100644 versions/v4.2.2/hierarchy.html create mode 100644 versions/v4.2.2/index.html create mode 100644 versions/v4.2.2/jquery.js create mode 100644 versions/v4.2.2/md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html create mode 100644 versions/v4.2.2/md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html create mode 100644 versions/v4.2.2/md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html create mode 100644 versions/v4.2.2/md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html create mode 100644 versions/v4.2.2/md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html create mode 100644 versions/v4.2.2/md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html create mode 100644 versions/v4.2.2/menu.js create mode 100644 versions/v4.2.2/menudata.js create mode 100644 versions/v4.2.2/message__readers_8cpp_source.html create mode 100644 versions/v4.2.2/message__readers_8hpp_source.html create mode 100644 versions/v4.2.2/message__writers_8cpp_source.html create mode 100644 versions/v4.2.2/message__writers_8hpp_source.html create mode 100644 versions/v4.2.2/minus.svg create mode 100644 versions/v4.2.2/minusd.svg create mode 100644 versions/v4.2.2/modulo__components_2include_2modulo__components_2utilities_2utilities_8hpp_source.html create mode 100644 versions/v4.2.2/modulo__controllers_2include_2modulo__controllers_2utils_2utilities_8hpp_source.html create mode 100644 versions/v4.2.2/namespacemembers.html create mode 100644 versions/v4.2.2/namespacemembers_enum.html create mode 100644 versions/v4.2.2/namespacemembers_func.html create mode 100644 versions/v4.2.2/namespacemembers_type.html create mode 100644 versions/v4.2.2/namespacemodulo__components.html create mode 100644 versions/v4.2.2/namespacemodulo__components_1_1exceptions.html create mode 100644 versions/v4.2.2/namespacemodulo__components_1_1utilities.html create mode 100644 versions/v4.2.2/namespacemodulo__controllers_1_1utilities.html create mode 100644 versions/v4.2.2/namespacemodulo__core.html create mode 100644 versions/v4.2.2/namespacemodulo__core_1_1communication.html create mode 100644 versions/v4.2.2/namespacemodulo__core_1_1exceptions.html create mode 100644 versions/v4.2.2/namespacemodulo__core_1_1translators.html create mode 100644 versions/v4.2.2/namespaces.html create mode 100644 versions/v4.2.2/nav_f.png create mode 100644 versions/v4.2.2/nav_fd.png create mode 100644 versions/v4.2.2/nav_g.png create mode 100644 versions/v4.2.2/nav_h.png create mode 100644 versions/v4.2.2/nav_hd.png create mode 100644 versions/v4.2.2/open.png create mode 100644 versions/v4.2.2/pages.html create mode 100644 versions/v4.2.2/parameter__translators_8cpp_source.html create mode 100644 versions/v4.2.2/parameter__translators_8hpp_source.html create mode 100644 versions/v4.2.2/plus.svg create mode 100644 versions/v4.2.2/plusd.svg create mode 100644 versions/v4.2.2/predicate__variant_8hpp_source.html create mode 100644 versions/v4.2.2/search/all_0.js create mode 100644 versions/v4.2.2/search/all_1.js create mode 100644 versions/v4.2.2/search/all_10.js create mode 100644 versions/v4.2.2/search/all_11.js create mode 100644 versions/v4.2.2/search/all_12.js create mode 100644 versions/v4.2.2/search/all_2.js create mode 100644 versions/v4.2.2/search/all_3.js create mode 100644 versions/v4.2.2/search/all_4.js create mode 100644 versions/v4.2.2/search/all_5.js create mode 100644 versions/v4.2.2/search/all_6.js create mode 100644 versions/v4.2.2/search/all_7.js create mode 100644 versions/v4.2.2/search/all_8.js create mode 100644 versions/v4.2.2/search/all_9.js create mode 100644 versions/v4.2.2/search/all_a.js create mode 100644 versions/v4.2.2/search/all_b.js create mode 100644 versions/v4.2.2/search/all_c.js create mode 100644 versions/v4.2.2/search/all_d.js create mode 100644 versions/v4.2.2/search/all_e.js create mode 100644 versions/v4.2.2/search/all_f.js create mode 100644 versions/v4.2.2/search/classes_0.js create mode 100644 versions/v4.2.2/search/classes_1.js create mode 100644 versions/v4.2.2/search/classes_2.js create mode 100644 versions/v4.2.2/search/classes_3.js create mode 100644 versions/v4.2.2/search/classes_4.js create mode 100644 versions/v4.2.2/search/classes_5.js create mode 100644 versions/v4.2.2/search/classes_6.js create mode 100644 versions/v4.2.2/search/classes_7.js create mode 100644 versions/v4.2.2/search/classes_8.js create mode 100644 versions/v4.2.2/search/close.svg create mode 100644 versions/v4.2.2/search/enums_0.js create mode 100644 versions/v4.2.2/search/enums_1.js create mode 100644 versions/v4.2.2/search/functions_0.js create mode 100644 versions/v4.2.2/search/functions_1.js create mode 100644 versions/v4.2.2/search/functions_2.js create mode 100644 versions/v4.2.2/search/functions_3.js create mode 100644 versions/v4.2.2/search/functions_4.js create mode 100644 versions/v4.2.2/search/functions_5.js create mode 100644 versions/v4.2.2/search/functions_6.js create mode 100644 versions/v4.2.2/search/functions_7.js create mode 100644 versions/v4.2.2/search/functions_8.js create mode 100644 versions/v4.2.2/search/functions_9.js create mode 100644 versions/v4.2.2/search/functions_a.js create mode 100644 versions/v4.2.2/search/functions_b.js create mode 100644 versions/v4.2.2/search/functions_c.js create mode 100644 versions/v4.2.2/search/functions_d.js create mode 100644 versions/v4.2.2/search/functions_e.js create mode 100644 versions/v4.2.2/search/functions_f.js create mode 100644 versions/v4.2.2/search/mag.svg create mode 100644 versions/v4.2.2/search/mag_d.svg create mode 100644 versions/v4.2.2/search/mag_sel.svg create mode 100644 versions/v4.2.2/search/mag_seld.svg create mode 100644 versions/v4.2.2/search/namespaces_0.js create mode 100644 versions/v4.2.2/search/pages_0.js create mode 100644 versions/v4.2.2/search/pages_1.js create mode 100644 versions/v4.2.2/search/pages_2.js create mode 100644 versions/v4.2.2/search/pages_3.js create mode 100644 versions/v4.2.2/search/search.css create mode 100644 versions/v4.2.2/search/search.js create mode 100644 versions/v4.2.2/search/searchdata.js create mode 100644 versions/v4.2.2/search/typedefs_0.js create mode 100644 versions/v4.2.2/search/variables_0.js create mode 100644 versions/v4.2.2/search/variables_1.js create mode 100644 versions/v4.2.2/search/variables_2.js create mode 100644 versions/v4.2.2/search/variables_3.js create mode 100644 versions/v4.2.2/search/variables_4.js create mode 100644 versions/v4.2.2/search/variables_5.js create mode 100644 versions/v4.2.2/search/variables_6.js create mode 100644 versions/v4.2.2/splitbar.png create mode 100644 versions/v4.2.2/splitbard.png create mode 100644 versions/v4.2.2/structmodulo__components_1_1_component_service_response-members.html create mode 100644 versions/v4.2.2/structmodulo__components_1_1_component_service_response.html create mode 100644 versions/v4.2.2/structmodulo__controllers_1_1_controller_input-members.html create mode 100644 versions/v4.2.2/structmodulo__controllers_1_1_controller_input.html create mode 100644 versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response-members.html create mode 100644 versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response.html create mode 100644 versions/v4.2.2/sync_off.png create mode 100644 versions/v4.2.2/sync_on.png create mode 100644 versions/v4.2.2/tab_a.png create mode 100644 versions/v4.2.2/tab_ad.png create mode 100644 versions/v4.2.2/tab_b.png create mode 100644 versions/v4.2.2/tab_bd.png create mode 100644 versions/v4.2.2/tab_h.png create mode 100644 versions/v4.2.2/tab_hd.png create mode 100644 versions/v4.2.2/tab_s.png create mode 100644 versions/v4.2.2/tab_sd.png create mode 100644 versions/v4.2.2/tabs.css diff --git a/versions/v4.2.2/_add_service_exception_8hpp_source.html b/versions/v4.2.2/_add_service_exception_8hpp_source.html new file mode 100644 index 000000000..9f4b0a421 --- /dev/null +++ b/versions/v4.2.2/_add_service_exception_8hpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/exceptions/AddServiceException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
AddServiceException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_components/exceptions/ComponentException.hpp"
+
4
+
+ +
6
+
+ +
13public:
+
14 explicit AddServiceException(const std::string& msg) : ComponentException("AddServiceException", msg) {}
+
15};
+
+
16}// namespace modulo_components::exceptions
+
+
An exception class to notify errors when adding a service.
+
A base class for all component exceptions.
+
Modulo component exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_add_signal_exception_8hpp_source.html b/versions/v4.2.2/_add_signal_exception_8hpp_source.html new file mode 100644 index 000000000..1bffa4c4a --- /dev/null +++ b/versions/v4.2.2/_add_signal_exception_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/exceptions/AddSignalException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
AddSignalException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_components/exceptions/ComponentException.hpp"
+
4
+ +
6
+
+ +
13public:
+
14 explicit AddSignalException(const std::string& msg) : ComponentException("AddSignalException", msg) {}
+
15};
+
+
16}// namespace modulo_components::exceptions
+
An exception class to notify errors when adding a signal.
+
A base class for all component exceptions.
+
Modulo component exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_component_8cpp_source.html b/versions/v4.2.2/_component_8cpp_source.html new file mode 100644 index 000000000..d1ac54c8b --- /dev/null +++ b/versions/v4.2.2/_component_8cpp_source.html @@ -0,0 +1,175 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/src/Component.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Component.cpp
+
+
+
1#include "modulo_components/Component.hpp"
+
2
+
3using namespace modulo_core::communication;
+
4using namespace rclcpp;
+
5
+
6namespace modulo_components {
+
7
+
+
8Component::Component(const NodeOptions& node_options, const std::string& fallback_name)
+
9 : Node(
+
10 utilities::parse_node_name(node_options, fallback_name), utilities::modify_parameter_overrides(node_options)),
+
11 ComponentInterface(std::make_shared<node_interfaces::NodeInterfaces<ALL_RCLCPP_NODE_INTERFACES>>(
+
12 Node::get_node_base_interface(), Node::get_node_clock_interface(), Node::get_node_graph_interface(),
+
13 Node::get_node_logging_interface(), Node::get_node_parameters_interface(),
+
14 Node::get_node_services_interface(), Node::get_node_time_source_interface(),
+
15 Node::get_node_timers_interface(), Node::get_node_topics_interface(), Node::get_node_waitables_interface())),
+
16 started_(false) {
+
17 this->add_predicate("is_finished", false);
+
18}
+
+
19
+
20void Component::step() {
+
21 try {
+
22 this->evaluate_periodic_callbacks();
+
23 this->on_step_callback();
+
24 this->publish_outputs();
+
25 this->publish_predicates();
+
26 } catch (const std::exception& ex) {
+
27 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to execute step function: " << ex.what());
+
28 this->raise_error();
+
29 }
+
30}
+
31
+
+ +
33 if (this->started_) {
+
34 RCLCPP_ERROR(this->get_logger(), "Failed to start execution thread: Thread has already been started.");
+
35 return;
+
36 }
+
37 this->started_ = true;
+
38 this->execute_thread_ = std::thread([this]() { this->on_execute(); });
+
39}
+
+
40
+
41void Component::on_execute() {
+
42 try {
+
43 if (!this->on_execute_callback()) {
+
44 this->raise_error();
+
45 return;
+
46 }
+
47 } catch (const std::exception& ex) {
+
48 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to run the execute function: " << ex.what());
+
49 this->raise_error();
+
50 return;
+
51 }
+
52 RCLCPP_DEBUG(this->get_logger(), "Execution finished, setting 'is_finished' predicate to true.");
+
53 this->set_predicate("is_finished", true);
+
54}
+
55
+
+ +
57 return true;
+
58}
+
+
59
+
60std::shared_ptr<state_representation::ParameterInterface>
+
+
61Component::get_parameter(const std::string& name) const {
+ +
63}
+
+
64}// namespace modulo_components
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
Definition Component.cpp:61
+
virtual bool on_execute_callback()
Execute the component logic. To be redefined in derived classes.
Definition Component.cpp:56
+
Component(const rclcpp::NodeOptions &node_options, const std::string &fallback_name="Component")
Constructor from node options.
Definition Component.cpp:8
+
void execute()
Start the execution thread.
Definition Component.cpp:32
+
Base interface class for modulo components to wrap a ROS Node with custom behaviour.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
virtual void on_step_callback()
Steps to execute periodically. To be redefined by derived Component classes.
+
void set_predicate(const std::string &predicate_name, bool predicate_value)
Set the value of the predicate given as parameter, if the predicate is not found does not do anything...
+
virtual void raise_error()
Put the component in error state by setting the 'in_error_state' predicate to true.
+
void add_predicate(const std::string &predicate_name, bool predicate_value)
Add a predicate to the map of predicates.
+
Modulo components.
Definition Component.hpp:9
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
+ + + + diff --git a/versions/v4.2.2/_component_8hpp_source.html b/versions/v4.2.2/_component_8hpp_source.html new file mode 100644 index 000000000..b55b1336e --- /dev/null +++ b/versions/v4.2.2/_component_8hpp_source.html @@ -0,0 +1,233 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/Component.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Component.hpp
+
+
+
1#pragma once
+
2
+
3#include <thread>
+
4
+
5#include <rclcpp/node.hpp>
+
6
+
7#include "modulo_components/ComponentInterface.hpp"
+
8
+
+ +
10
+
+
23class Component : public rclcpp::Node, public ComponentInterface {
+
24public:
+
25 friend class ComponentPublicInterface;
+
26
+
32 explicit Component(const rclcpp::NodeOptions& node_options, const std::string& fallback_name = "Component");
+
33
+
37 virtual ~Component() = default;
+
38
+
39protected:
+
43 [[nodiscard]] std::shared_ptr<state_representation::ParameterInterface> get_parameter(const std::string& name) const;
+
44
+
48 void execute();
+
49
+
54 virtual bool on_execute_callback();
+
55
+
65 template<typename DataT>
+
66 void add_output(
+
67 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::string& default_topic = "",
+
68 bool fixed_topic = false, bool publish_on_step = true
+
69 );
+
70
+
71private:
+
75 void step() override;
+
76
+
81 void on_execute();
+
82
+
83 // TODO hide ROS methods
+ + + + + + + + + +
93 using rclcpp::Node::get_parameter;
+
94
+
95 std::thread execute_thread_;
+
96 bool started_;
+
97};
+
+
98
+
99template<typename DataT>
+
+ +
101 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::string& default_topic,
+
102 bool fixed_topic, bool publish_on_step
+
103) {
+
104 using namespace modulo_core::communication;
+
105 try {
+
106 auto parsed_signal_name =
+
107 this->create_output(PublisherType::PUBLISHER, signal_name, data, default_topic, fixed_topic, publish_on_step);
+
108 auto topic_name = this->get_parameter_value<std::string>(parsed_signal_name + "_topic");
+ +
110 "Adding output '" << parsed_signal_name << "' with topic name '" << topic_name << "'.");
+
111 auto message_pair = this->outputs_.at(parsed_signal_name)->get_message_pair();
+
112 switch (message_pair->get_type()) {
+
113 case MessageType::BOOL: {
+ +
115 this->outputs_.at(parsed_signal_name) =
+
116 std::make_shared<PublisherHandler<rclcpp::Publisher<std_msgs::msg::Bool>, std_msgs::msg::Bool>>(
+
117 PublisherType::PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
118 break;
+
119 }
+
120 case MessageType::FLOAT64: {
+ +
122 this->outputs_.at(parsed_signal_name) =
+
123 std::make_shared<PublisherHandler<rclcpp::Publisher<std_msgs::msg::Float64>, std_msgs::msg::Float64>>(
+
124 PublisherType::PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
125 break;
+
126 }
+
127 case MessageType::FLOAT64_MULTI_ARRAY: {
+ +
129 this->outputs_.at(parsed_signal_name) = std::make_shared<
+ +
131 rclcpp::Publisher<std_msgs::msg::Float64MultiArray>, std_msgs::msg::Float64MultiArray>>(
+
132 PublisherType::PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
133 break;
+
134 }
+
135 case MessageType::INT32: {
+ +
137 this->outputs_.at(parsed_signal_name) =
+
138 std::make_shared<PublisherHandler<rclcpp::Publisher<std_msgs::msg::Int32>, std_msgs::msg::Int32>>(
+
139 PublisherType::PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
140 break;
+
141 }
+
142 case MessageType::STRING: {
+ +
144 this->outputs_.at(parsed_signal_name) =
+
145 std::make_shared<PublisherHandler<rclcpp::Publisher<std_msgs::msg::String>, std_msgs::msg::String>>(
+
146 PublisherType::PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
147 break;
+
148 }
+
149 case MessageType::ENCODED_STATE: {
+ +
151 this->outputs_.at(parsed_signal_name) =
+
152 std::make_shared<PublisherHandler<rclcpp::Publisher<modulo_core::EncodedState>, modulo_core::EncodedState>>(
+
153 PublisherType::PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
154 break;
+
155 }
+
156 }
+
157 } catch (const std::exception& ex) {
+
158 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to add output '" << signal_name << "': " << ex.what());
+
159 }
+
160}
+
+
161}// namespace modulo_components
+
+
A wrapper for rclcpp::Node to simplify application composition through unified component interfaces.
Definition Component.hpp:23
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
Definition Component.cpp:61
+
virtual ~Component()=default
Virtual default destructor.
+
virtual bool on_execute_callback()
Execute the component logic. To be redefined in derived classes.
Definition Component.cpp:56
+
void add_output(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false, bool publish_on_step=true)
Add and configure an output signal of the component.
+
void execute()
Start the execution thread.
Definition Component.cpp:32
+
Base interface class for modulo components to wrap a ROS Node with custom behaviour.
+
void publish_outputs()
Helper function to publish all output signals.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::PublisherInterface > > outputs_
Map of outputs.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
void publish_predicates()
Helper function to publish all predicates.
+
std::string create_output(modulo_core::communication::PublisherType publisher_type, const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic, bool fixed_topic, bool publish_on_step)
Helper function to parse the signal name and add an unconfigured PublisherInterface to the map of out...
+
rclcpp::QoS get_qos() const
Getter of the Quality of Service attribute.
+
void publish_predicate(const std::string &name)
Helper function to publish a predicate.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::SubscriptionInterface > > inputs_
Map of inputs.
+
void evaluate_periodic_callbacks()
Helper function to evaluate all periodic function callbacks.
+
std::map< std::string, bool > periodic_outputs_
Map of outputs with periodic publishing flag.
+
The PublisherHandler handles different types of ROS publishers to activate, deactivate and publish da...
+
Modulo components.
Definition Component.hpp:9
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+
+ + + + diff --git a/versions/v4.2.2/_component_exception_8hpp_source.html b/versions/v4.2.2/_component_exception_8hpp_source.html new file mode 100644 index 000000000..402537270 --- /dev/null +++ b/versions/v4.2.2/_component_exception_8hpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/exceptions/ComponentException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ComponentException.hpp
+
+
+
1#pragma once
+
2
+
3#include <stdexcept>
+
4#include <string>
+
5
+ +
11
+
+
17class ComponentException : public std::runtime_error {
+
18public:
+
19 explicit ComponentException(const std::string& msg) : ComponentException("ComponentException", msg) {};
+
20protected:
+
21 ComponentException(const std::string& prefix, const std::string& msg) : std::runtime_error(prefix + ": " + msg) {}
+
22};
+
+
23}// namespace modulo_components::exceptions
+
A base class for all component exceptions.
+
Modulo component exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_component_interface_8cpp_source.html b/versions/v4.2.2/_component_interface_8cpp_source.html new file mode 100644 index 000000000..938dfdf7b --- /dev/null +++ b/versions/v4.2.2/_component_interface_8cpp_source.html @@ -0,0 +1,775 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/src/ComponentInterface.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ComponentInterface.cpp
+
+
+
1#include "modulo_components/ComponentInterface.hpp"
+
2
+
3#include <console_bridge/console.h>
+
4#include <tf2_msgs/msg/tf_message.hpp>
+
5
+
6#include <modulo_core/exceptions/ParameterTranslationException.hpp>
+
7#include <modulo_core/translators/message_readers.hpp>
+
8#include <modulo_core/translators/message_writers.hpp>
+
9
+
10#include "modulo_components/exceptions/AddServiceException.hpp"
+
11#include "modulo_components/exceptions/LookupTransformException.hpp"
+
12
+
13namespace modulo_components {
+
14
+
+ +
16 const std::shared_ptr<rclcpp::node_interfaces::NodeInterfaces<ALL_RCLCPP_NODE_INTERFACES>>& interfaces
+
17) :
+
18 node_base_(interfaces->get_node_base_interface()),
+
19 node_clock_(interfaces->get_node_clock_interface()),
+
20 node_logging_(interfaces->get_node_logging_interface()),
+
21 node_parameters_(interfaces->get_node_parameters_interface()),
+
22 node_services_(interfaces->get_node_services_interface()),
+
23 node_timers_(interfaces->get_node_timers_interface()),
+
24 node_topics_(interfaces->get_node_topics_interface()) {
+
25 // register the parameter change callback handler
+
26 this->parameter_cb_handle_ = this->node_parameters_->add_on_set_parameters_callback(
+
27 [this](const std::vector<rclcpp::Parameter>& parameters) -> rcl_interfaces::msg::SetParametersResult {
+
28 return this->on_set_parameters_callback(parameters);
+
29 });
+
30 this->add_parameter("rate", 10, "The rate in Hertz for all periodic callbacks", true);
+
31 this->add_parameter("period", 0.1, "The time interval in seconds for all periodic callbacks", true);
+
32
+
33 this->predicate_publisher_ = rclcpp::create_publisher<modulo_component_interfaces::msg::Predicate>(
+
34 this->node_parameters_, this->node_topics_, "/predicates", this->qos_);
+
35
+
36 this->add_predicate("in_error_state", false);
+
37
+
38 this->step_timer_ = rclcpp::create_wall_timer(
+
39 std::chrono::nanoseconds(static_cast<int64_t>(this->get_parameter_value<double>("period") * 1e9)),
+
40 [this] { this->step(); }, nullptr, this->node_base_.get(), this->node_timers_.get());
+
41}
+
+
42
+ +
44
+ +
46
+
+ +
48 const std::shared_ptr<state_representation::ParameterInterface>& parameter, const std::string& description,
+
49 bool read_only
+
50) {
+
51 this->set_parameter_callback_called_ = false;
+
52 rclcpp::Parameter ros_param;
+
53 try {
+ + +
56 throw exceptions::ComponentParameterException("Failed to add parameter: " + std::string(ex.what()));
+
57 }
+
58 if (!this->node_parameters_->has_parameter(parameter->get_name())) {
+
59 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(), "Adding parameter '" << parameter->get_name() << "'.");
+
60 this->parameter_map_.set_parameter(parameter);
+
61 try {
+
62 rcl_interfaces::msg::ParameterDescriptor descriptor;
+
63 descriptor.description = description;
+
64 descriptor.read_only = read_only;
+
65 if (parameter->is_empty()) {
+
66 descriptor.dynamic_typing = true;
+ +
68 this->node_parameters_->declare_parameter(parameter->get_name(), rclcpp::ParameterValue{}, descriptor);
+
69 } else {
+
70 this->node_parameters_->declare_parameter(parameter->get_name(), ros_param.get_parameter_value(), descriptor);
+
71 }
+
72 if (!this->set_parameter_callback_called_) {
+
73 auto result =
+
74 this->on_set_parameters_callback({this->node_parameters_->get_parameters({parameter->get_name()})});
+
75 if (!result.successful) {
+
76 this->node_parameters_->undeclare_parameter(parameter->get_name());
+ +
78 }
+
79 }
+
80 } catch (const std::exception& ex) {
+
81 this->parameter_map_.remove_parameter(parameter->get_name());
+
82 throw exceptions::ComponentParameterException("Failed to add parameter: " + std::string(ex.what()));
+
83 }
+
84 } else {
+
85 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(),
+
86 "Parameter '" << parameter->get_name() << "' already exists.");
+
87 }
+
88}
+
+
89
+
90std::shared_ptr<state_representation::ParameterInterface>
+
+
91ComponentInterface::get_parameter(const std::string& name) const {
+
92 try {
+
93 return this->parameter_map_.get_parameter(name);
+
94 } catch (const state_representation::exceptions::InvalidParameterException& ex) {
+
95 throw exceptions::ComponentParameterException("Failed to get parameter '" + name + "': " + ex.what());
+
96 }
+
97}
+
+
98
+
99rcl_interfaces::msg::SetParametersResult
+
100ComponentInterface::on_set_parameters_callback(const std::vector<rclcpp::Parameter>& parameters) {
+
101 rcl_interfaces::msg::SetParametersResult result;
+
102 result.successful = true;
+
103 for (const auto& ros_parameter : parameters) {
+
104 try {
+
105 if (ros_parameter.get_name().substr(0, 27) == "qos_overrides./tf.publisher") {
+
106 continue;
+
107 }
+
108 // get the associated parameter interface by name
+
109 auto parameter = parameter_map_.get_parameter(ros_parameter.get_name());
+
110
+
111 // convert the ROS parameter into a ParameterInterface without modifying the original
+ +
113 if (!this->validate_parameter(new_parameter)) {
+
114 result.successful = false;
+
115 result.reason += "Validation of parameter '" + ros_parameter.get_name() + "' returned false!";
+
116 } else if (!new_parameter->is_empty()) {
+
117 // update the value of the parameter in the map
+ +
119 }
+
120 } catch (const std::exception& ex) {
+
121 result.successful = false;
+
122 result.reason += ex.what();
+
123 }
+
124 }
+
125 this->set_parameter_callback_called_ = true;
+
126 return result;
+
127}
+
128
+
129bool
+
130ComponentInterface::validate_parameter(const std::shared_ptr<state_representation::ParameterInterface>& parameter) {
+
131 if (parameter->get_name() == "rate") {
+
132 auto value = parameter->get_parameter_value<int>();
+
133 if (value <= 0 || !std::isfinite(value)) {
+
134 RCLCPP_ERROR(this->node_logging_->get_logger(), "Value for parameter 'rate' has to be a positive finite number.");
+
135 return false;
+
136 }
+
137 }
+
138 if (parameter->get_name() == "period") {
+
139 auto value = parameter->get_parameter_value<double>();
+
140 if (value <= 0.0 || !std::isfinite(value)) {
+
141 RCLCPP_ERROR(this->node_logging_->get_logger(),
+
142 "Value for parameter 'period' has to be a positive finite number.");
+
143 return false;
+
144 }
+
145 }
+
146 return this->on_validate_parameter_callback(parameter);
+
147}
+
148
+
149bool
+
+
150ComponentInterface::on_validate_parameter_callback(const std::shared_ptr<state_representation::ParameterInterface>&) {
+
151 return true;
+
152}
+
+
153
+
+
154void ComponentInterface::add_predicate(const std::string& name, bool predicate) {
+
155 this->add_variant_predicate(name, utilities::PredicateVariant(predicate));
+
156}
+
+
157
+
+
158void ComponentInterface::add_predicate(const std::string& name, const std::function<bool(void)>& predicate) {
+
159 this->add_variant_predicate(name, utilities::PredicateVariant(predicate));
+
160}
+
+
161
+
162void ComponentInterface::add_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate) {
+
163 if (name.empty()) {
+
164 RCLCPP_ERROR(this->node_logging_->get_logger(), "Failed to add predicate: Provide a non empty string as a name.");
+
165 return;
+
166 }
+
167 if (this->predicates_.find(name) != this->predicates_.end()) {
+
168 RCLCPP_WARN_STREAM(this->node_logging_->get_logger(),
+
169 "Predicate with name '" << name << "' already exists, overwriting.");
+
170 } else {
+
171 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(), "Adding predicate '" << name << "'.");
+
172 }
+
173 this->predicates_.insert_or_assign(name, predicate);
+
174}
+
175
+
+
176bool ComponentInterface::get_predicate(const std::string& predicate_name) {
+
177 auto predicate_iterator = this->predicates_.find(predicate_name);
+
178 // if there is no predicate with that name simply return false with an error message
+
179 if (predicate_iterator == this->predicates_.end()) {
+
180 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
181 "Failed to get predicate '" << predicate_name
+
182 << "': Predicate does not exists, returning false.");
+
183 return false;
+
184 }
+
185 // try to get the value from the variant as a bool
+
186 auto* ptr_value = std::get_if<bool>(&predicate_iterator->second);
+
187 if (ptr_value) {
+
188 return *ptr_value;
+
189 }
+
190 // if previous check failed, it means the variant is actually a callback function
+
191 auto callback_function = std::get<std::function<bool(void)>>(predicate_iterator->second);
+
192 bool value = false;
+
193 try {
+ +
195 } catch (const std::exception& ex) {
+
196 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
197 "Failed to evaluate callback of predicate '" << predicate_name
+
198 << "', returning false: " << ex.what());
+
199 }
+
200 return value;
+
201}
+
+
202
+
+
203void ComponentInterface::set_predicate(const std::string& name, bool predicate) {
+
204 this->set_variant_predicate(name, utilities::PredicateVariant(predicate));
+
205}
+
+
206
+
+ +
208 const std::string& name, const std::function<bool(void)>& predicate
+
209) {
+
210 this->set_variant_predicate(name, utilities::PredicateVariant(predicate));
+
211}
+
+
212
+
213void ComponentInterface::set_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate) {
+
214 auto predicate_iterator = this->predicates_.find(name);
+
215 if (predicate_iterator == this->predicates_.end()) {
+
216 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
217 "Failed to set predicate '" << name << "': Predicate does not exist.");
+
218 return;
+
219 }
+ +
221 this->publish_predicate(name);
+
222}
+
223
+
+
224void ComponentInterface::add_trigger(const std::string& trigger_name) {
+
225 if (trigger_name.empty()) {
+
226 RCLCPP_ERROR(this->node_logging_->get_logger(), "Failed to add trigger: Provide a non empty string as a name.");
+
227 return;
+
228 }
+
229 if (this->triggers_.find(trigger_name) != this->triggers_.end()
+
230 || this->predicates_.find(trigger_name) != this->predicates_.end()) {
+
231 RCLCPP_ERROR_STREAM(this->node_logging_->get_logger(), "Failed to add trigger: there is already a trigger or "
+
232 "predicate with name '" << trigger_name << "'.");
+
233 return;
+
234 }
+
235 this->triggers_.insert_or_assign(trigger_name, false);
+
236 this->add_predicate(
+
237 trigger_name, [this, trigger_name] {
+
238 auto value = this->triggers_.at(trigger_name);
+
239 this->triggers_.at(trigger_name) = false;
+
240 return value;
+
241 });
+
242}
+
+
243
+
+
244void ComponentInterface::trigger(const std::string& trigger_name) {
+
245 if (this->triggers_.find(trigger_name) == this->triggers_.end()) {
+
246 RCLCPP_ERROR_STREAM(this->node_logging_->get_logger(), "Failed to trigger: could not find trigger"
+
247 " with name '" << trigger_name << "'.");
+
248 return;
+
249 }
+
250 this->triggers_.at(trigger_name) = true;
+ +
252}
+
+
253
+
+ +
255 const std::string& signal_name, const std::string& default_topic, bool fixed_topic
+
256) {
+
257 this->declare_signal(signal_name, "input", default_topic, fixed_topic);
+
258}
+
+
259
+
+ +
261 const std::string& signal_name, const std::string& default_topic, bool fixed_topic
+
262) {
+
263 this->declare_signal(signal_name, "output", default_topic, fixed_topic);
+
264}
+
+
265
+
266void ComponentInterface::declare_signal(
+
267 const std::string& signal_name, const std::string& type, const std::string& default_topic, bool fixed_topic
+
268) {
+
269 std::string parsed_signal_name = utilities::parse_topic_name(signal_name);
+
270 if (parsed_signal_name.empty()) {
+ +
272 "The parsed signal name for " + type + " '" + signal_name
+
273 + "' is empty. Provide a string with valid characters for the signal name ([a-zA-Z0-9_]).");
+
274 }
+ + +
277 this->node_logging_->get_logger(),
+
278 "The parsed signal name for " + type + " '" + signal_name + "' is '" + parsed_signal_name
+
279 + "'. Use the parsed signal name to refer to this " + type + " and its topic parameter");
+
280 }
+
281 if (this->inputs_.find(parsed_signal_name) != this->inputs_.cend()) {
+
282 throw exceptions::AddSignalException("Signal with name '" + parsed_signal_name + "' already exists as input.");
+
283 }
+
284 if (this->outputs_.find(parsed_signal_name) != this->outputs_.cend()) {
+
285 throw exceptions::AddSignalException("Signal with name '" + parsed_signal_name + "' already exists as output.");
+
286 }
+
287 std::string topic_name = default_topic.empty() ? "~/" + parsed_signal_name : default_topic;
+
288 auto parameter_name = parsed_signal_name + "_topic";
+
289 if (this->node_parameters_->has_parameter(parameter_name) && this->get_parameter(parameter_name)->is_empty()) {
+ +
291 } else {
+
292 this->add_parameter(
+
293 parameter_name, topic_name, "Signal topic name of " + type + " '" + parsed_signal_name + "'", fixed_topic);
+
294 }
+
295 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(),
+
296 "Declared signal '" << parsed_signal_name << "' and parameter '" << parameter_name
+
297 << "' with value '" << topic_name << "'.");
+
298}
+
299
+
+
300void ComponentInterface::publish_output(const std::string& signal_name) {
+
301 auto parsed_signal_name = utilities::parse_topic_name(signal_name);
+
302 if (this->outputs_.find(parsed_signal_name) == this->outputs_.cend()) {
+
303 throw exceptions::ComponentException("Output with name '" + signal_name + "' doesn't exist.");
+
304 }
+
305 if (this->periodic_outputs_.at(parsed_signal_name)) {
+
306 throw exceptions::ComponentException("An output that is published periodically cannot be triggered manually.");
+
307 }
+
308 try {
+
309 this->outputs_.at(parsed_signal_name)->publish();
+ +
311 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
312 "Failed to publish output '" << parsed_signal_name << "': " << ex.what());
+
313 }
+
314}
+
+
315
+
+
316void ComponentInterface::remove_input(const std::string& signal_name) {
+
317 if (!this->remove_signal(signal_name, this->inputs_)) {
+
318 auto parsed_signal_name = utilities::parse_topic_name(signal_name);
+
319 if (!this->remove_signal(parsed_signal_name, this->inputs_)) {
+
320 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(),
+
321 "Unknown input '" << signal_name << "' (parsed name was '" << parsed_signal_name << "').");
+
322 }
+
323 }
+
324}
+
+
325
+
+
326void ComponentInterface::remove_output(const std::string& signal_name) {
+
327 if (!this->remove_signal(signal_name, this->outputs_)) {
+
328 auto parsed_signal_name = utilities::parse_topic_name(signal_name);
+
329 if (!this->remove_signal(parsed_signal_name, this->outputs_)) {
+
330 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(),
+
331 "Unknown output '" << signal_name << "' (parsed name was '" << parsed_signal_name << "').");
+
332 }
+
333 }
+
334}
+
+
335
+
+ +
337 const std::string& service_name, const std::function<ComponentServiceResponse(void)>& callback
+
338) {
+
339 try {
+
340 std::string parsed_service_name = this->validate_service_name(service_name);
+
341 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(), "Adding empty service '" << parsed_service_name << "'.");
+
342 auto service = rclcpp::create_service<modulo_component_interfaces::srv::EmptyTrigger>(
+
343 this->node_base_, this->node_services_, "~/" + parsed_service_name, [callback](
+
344 const std::shared_ptr<modulo_component_interfaces::srv::EmptyTrigger::Request>,
+
345 std::shared_ptr<modulo_component_interfaces::srv::EmptyTrigger::Response> response
+
346 ) {
+
347 try {
+ +
349 response->success = callback_response.success;
+
350 response->message = callback_response.message;
+
351 } catch (const std::exception& ex) {
+
352 response->success = false;
+
353 response->message = ex.what();
+
354 }
+
355 }, this->qos_, nullptr);
+
356 this->empty_services_.insert_or_assign(parsed_service_name, service);
+
357 } catch (const std::exception& ex) {
+
358 RCLCPP_ERROR_STREAM(this->node_logging_->get_logger(),
+
359 "Failed to add service '" << service_name << "': " << ex.what());
+
360 }
+
361}
+
+
362
+
+ +
364 const std::string& service_name, const std::function<ComponentServiceResponse(const std::string& string)>& callback
+
365) {
+
366 try {
+
367 std::string parsed_service_name = this->validate_service_name(service_name);
+
368 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(), "Adding string service '" << parsed_service_name << "'.");
+
369 auto service = rclcpp::create_service<modulo_component_interfaces::srv::StringTrigger>(
+
370 this->node_base_, this->node_services_, "~/" + parsed_service_name, [callback](
+
371 const std::shared_ptr<modulo_component_interfaces::srv::StringTrigger::Request> request,
+
372 std::shared_ptr<modulo_component_interfaces::srv::StringTrigger::Response> response
+
373 ) {
+
374 try {
+
375 auto callback_response = callback(request->payload);
+
376 response->success = callback_response.success;
+
377 response->message = callback_response.message;
+
378 } catch (const std::exception& ex) {
+
379 response->success = false;
+
380 response->message = ex.what();
+
381 }
+
382 }, this->qos_, nullptr);
+
383 this->string_services_.insert_or_assign(parsed_service_name, service);
+
384 } catch (const std::exception& ex) {
+
385 RCLCPP_ERROR_STREAM(this->node_logging_->get_logger(),
+
386 "Failed to add service '" << service_name << "': " << ex.what());
+
387 }
+
388}
+
+
389
+
390std::string ComponentInterface::validate_service_name(const std::string& service_name) {
+
391 std::string parsed_service_name = utilities::parse_topic_name(service_name);
+
392 if (parsed_service_name.empty()) {
+ +
394 "The parsed service name for service '" + service_name
+
395 + "' is empty. Provide a string with valid characters for the signal name ([a-zA-Z0-9_]).");
+
396 }
+ + +
399 this->node_logging_->get_logger(),
+
400 "The parsed name for service '" + service_name + "' is '" + parsed_service_name
+
401 + "'. Use the parsed name to refer to this service");
+
402 }
+
403 if (this->empty_services_.find(parsed_service_name) != this->empty_services_.cend()
+
404 || this->string_services_.find(parsed_service_name) != this->string_services_.cend()) {
+
405 throw exceptions::AddServiceException("Service with name '" + parsed_service_name + "' already exists.");
+
406 }
+
407 return parsed_service_name;
+
408}
+
409
+
+
410void ComponentInterface::add_periodic_callback(const std::string& name, const std::function<void()>& callback) {
+
411 if (name.empty()) {
+
412 RCLCPP_ERROR(this->node_logging_->get_logger(),
+
413 "Failed to add periodic function: Provide a non empty string as a name.");
+
414 return;
+
415 }
+
416 if (this->periodic_callbacks_.find(name) != this->periodic_callbacks_.end()) {
+
417 RCLCPP_WARN_STREAM(this->node_logging_->get_logger(),
+
418 "Periodic function '" << name << "' already exists, overwriting.");
+
419 } else {
+
420 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(), "Adding periodic function '" << name << "'.");
+
421 }
+
422 this->periodic_callbacks_.insert_or_assign(name, callback);
+
423}
+
+
424
+
+ +
426 if (this->tf_broadcaster_ == nullptr) {
+
427 RCLCPP_DEBUG(this->node_logging_->get_logger(), "Adding TF broadcaster.");
+
428 console_bridge::setLogLevel(console_bridge::CONSOLE_BRIDGE_LOG_NONE);
+
429 this->tf_broadcaster_ = std::make_shared<tf2_ros::TransformBroadcaster>(
+
430 this->node_parameters_, this->node_topics_, tf2_ros::DynamicBroadcasterQoS());
+
431 } else {
+
432 RCLCPP_DEBUG(this->node_logging_->get_logger(), "TF broadcaster already exists.");
+
433 }
+
434}
+
+
435
+
+ +
437 if (this->static_tf_broadcaster_ == nullptr) {
+
438 RCLCPP_DEBUG(this->node_logging_->get_logger(), "Adding static TF broadcaster.");
+
439 console_bridge::setLogLevel(console_bridge::CONSOLE_BRIDGE_LOG_NONE);
+
440 tf2_ros::StaticBroadcasterQoS qos;
+
441 rclcpp::PublisherOptionsWithAllocator<std::allocator<void>> options;
+
442 this->static_tf_broadcaster_ =
+
443 std::make_shared<tf2_ros::StaticTransformBroadcaster>(this->node_parameters_, this->node_topics_, qos, options);
+
444 } else {
+
445 RCLCPP_DEBUG(this->node_logging_->get_logger(), "Static TF broadcaster already exists.");
+
446 }
+
447}
+
+
448
+
+ +
450 if (this->tf_buffer_ == nullptr || this->tf_listener_ == nullptr) {
+
451 RCLCPP_DEBUG(this->node_logging_->get_logger(), "Adding TF buffer and listener.");
+
452 console_bridge::setLogLevel(console_bridge::CONSOLE_BRIDGE_LOG_NONE);
+
453 this->tf_buffer_ = std::make_shared<tf2_ros::Buffer>(this->node_clock_->get_clock());
+
454 this->tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*this->tf_buffer_);
+
455 } else {
+
456 RCLCPP_DEBUG(this->node_logging_->get_logger(), "TF buffer and listener already exist.");
+
457 }
+
458}
+
+
459
+
+
460void ComponentInterface::send_transform(const state_representation::CartesianPose& transform) {
+
461 this->send_transforms(std::vector<state_representation::CartesianPose>{transform});
+
462}
+
+
463
+
+
464void ComponentInterface::send_transforms(const std::vector<state_representation::CartesianPose>& transforms) {
+
465 this->publish_transforms(transforms, this->tf_broadcaster_);
+
466}
+
+
467
+
+
468void ComponentInterface::send_static_transform(const state_representation::CartesianPose& transform) {
+
469 this->send_static_transforms(std::vector<state_representation::CartesianPose>{transform});
+
470}
+
+
471
+
+
472void ComponentInterface::send_static_transforms(const std::vector<state_representation::CartesianPose>& transforms) {
+
473 this->publish_transforms(transforms, this->static_tf_broadcaster_, true);
+
474}
+
+
475
+
+
476state_representation::CartesianPose ComponentInterface::lookup_transform(
+
477 const std::string& frame, const std::string& reference_frame, const tf2::TimePoint& time_point,
+
478 const tf2::Duration& duration
+
479) {
+
480 auto transform = this->lookup_ros_transform(frame, reference_frame, time_point, duration);
+
481 state_representation::CartesianPose result(frame, reference_frame);
+ +
483 return result;
+
484}
+
+
485
+
+
486state_representation::CartesianPose ComponentInterface::lookup_transform(
+
487 const std::string& frame, const std::string& reference_frame, double validity_period, const tf2::Duration& duration
+
488) {
+
489 auto transform =
+
490 this->lookup_ros_transform(frame, reference_frame, tf2::TimePoint(std::chrono::microseconds(0)), duration);
+
491 if (validity_period > 0.0
+
492 && (this->node_clock_->get_clock()->now() - transform.header.stamp).seconds() > validity_period) {
+
493 throw exceptions::LookupTransformException("Failed to lookup transform: Latest transform is too old!");
+
494 }
+
495 state_representation::CartesianPose result(frame, reference_frame);
+ +
497 return result;
+
498}
+
+
499
+
500geometry_msgs::msg::TransformStamped ComponentInterface::lookup_ros_transform(
+
501 const std::string& frame, const std::string& reference_frame, const tf2::TimePoint& time_point,
+
502 const tf2::Duration& duration
+
503) {
+
504 if (this->tf_buffer_ == nullptr || this->tf_listener_ == nullptr) {
+
505 throw exceptions::LookupTransformException("Failed to lookup transform: To TF buffer / listener configured.");
+
506 }
+
507 try {
+
508 return this->tf_buffer_->lookupTransform(reference_frame, frame, time_point, duration);
+
509 } catch (const tf2::TransformException& ex) {
+
510 throw exceptions::LookupTransformException(std::string("Failed to lookup transform: ").append(ex.what()));
+
511 }
+
512}
+
513
+
+
514rclcpp::QoS ComponentInterface::get_qos() const {
+
515 return this->qos_;
+
516}
+
+
517
+
+
518void ComponentInterface::set_qos(const rclcpp::QoS& qos) {
+
519 this->qos_ = qos;
+
520}
+
+
521
+
+ +
523 RCLCPP_DEBUG(this->node_logging_->get_logger(), "raise_error called: Setting predicate 'in_error_state' to true.");
+
524 this->set_predicate("in_error_state", true);
+
525}
+
+
526
+
+
527void ComponentInterface::publish_predicate(const std::string& name) {
+
528 modulo_component_interfaces::msg::Predicate message;
+
529 message.component = this->node_base_->get_fully_qualified_name();
+
530 message.predicate = name;
+
531 message.value = this->get_predicate(name);
+
532 this->predicate_publisher_->publish(message);
+
533}
+
+
534
+
+ +
536 for (const auto& predicate : this->predicates_) {
+
537 this->publish_predicate(predicate.first);
+
538 }
+
539}
+
+
540
+
+ +
542 for (const auto& [signal, publisher] : this->outputs_) {
+
543 try {
+
544 if (this->periodic_outputs_.at(signal)) {
+
545 publisher->publish();
+
546 }
+ +
548 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
549 "Failed to publish output '" << signal << "': " << ex.what());
+
550 }
+
551 }
+
552}
+
+
553
+
+ +
555 for (const auto& [name, callback] : this->periodic_callbacks_) {
+
556 try {
+
557 callback();
+
558 } catch (const std::exception& ex) {
+
559 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
560 "Failed to evaluate periodic function callback '" << name << "': " << ex.what());
+
561 }
+
562 }
+
563}
+
+
564}// namespace modulo_components
+
void send_transforms(const std::vector< state_representation::CartesianPose > &transforms)
Send a vector of transforms to TF.
+
virtual bool on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Parameter validation function to be redefined by derived Component classes.
+
void publish_outputs()
Helper function to publish all output signals.
+
void remove_input(const std::string &signal_name)
Remove an input from the map of inputs.
+
void declare_input(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
Declare an input to create the topic parameter without adding it to the map of inputs yet.
+
void declare_output(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
Declare an output to create the topic parameter without adding it to the map of outputs yet.
+
void send_static_transforms(const std::vector< state_representation::CartesianPose > &transforms)
Send a vector of static transforms to TF.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::PublisherInterface > > outputs_
Map of outputs.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
void add_static_tf_broadcaster()
Configure a static transform broadcaster.
+
void add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
Add a parameter.
+
void trigger(const std::string &trigger_name)
Latch the trigger with the provided name.
+
state_representation::CartesianPose lookup_transform(const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)
Look up a transform from TF.
+
virtual void on_step_callback()
Steps to execute periodically. To be redefined by derived Component classes.
+
void set_predicate(const std::string &predicate_name, bool predicate_value)
Set the value of the predicate given as parameter, if the predicate is not found does not do anything...
+
virtual void raise_error()
Put the component in error state by setting the 'in_error_state' predicate to true.
+
ComponentInterface(const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > &interfaces)
Constructor with all node interfaces.
+
void remove_output(const std::string &signal_name)
Remove an output from the map of outputs.
+
void publish_output(const std::string &signal_name)
Trigger the publishing of an output.
+
virtual void step()
Step function that is called periodically.
+
void publish_predicates()
Helper function to publish all predicates.
+
void set_qos(const rclcpp::QoS &qos)
Set the Quality of Service for ROS publishers and subscribers.
+
rclcpp::QoS get_qos() const
Getter of the Quality of Service attribute.
+
bool get_predicate(const std::string &predicate_name)
Get the logical value of a predicate.
+
void add_predicate(const std::string &predicate_name, bool predicate_value)
Add a predicate to the map of predicates.
+
void send_transform(const state_representation::CartesianPose &transform)
Send a transform to TF.
+
void add_trigger(const std::string &trigger_name)
Add a trigger to the component. Triggers are predicates that are always false except when it's trigge...
+
void publish_predicate(const std::string &name)
Helper function to publish a predicate.
+
void add_periodic_callback(const std::string &name, const std::function< void(void)> &callback)
Add a periodic callback function.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::SubscriptionInterface > > inputs_
Map of inputs.
+
void add_tf_listener()
Configure a transform buffer and listener.
+
void evaluate_periodic_callbacks()
Helper function to evaluate all periodic function callbacks.
+
void add_tf_broadcaster()
Configure a transform broadcaster.
+
void send_static_transform(const state_representation::CartesianPose &transform)
Send a static transform to TF.
+
std::map< std::string, bool > periodic_outputs_
Map of outputs with periodic publishing flag.
+
void add_service(const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)
Add a service to trigger a callback function with no input arguments.
+
An exception class to notify errors when adding a service.
+
An exception class to notify errors when adding a signal.
+
A base class for all component exceptions.
+
An exception class to notify errors with component parameters.
+
An exception class to notify an error while looking up TF transforms.
+
A base class for all core exceptions.
+
An exception class to notify incompatibility when translating parameters from different sources.
+
Modulo components.
Definition Component.hpp:9
+
rclcpp::Parameter write_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Write a ROS Parameter from a ParameterInterface pointer.
+
rclcpp::ParameterType get_ros_parameter_type(const state_representation::ParameterType &parameter_type)
Given a state representation parameter type, get the corresponding ROS parameter type.
+
void copy_parameter_value(const std::shared_ptr< const state_representation::ParameterInterface > &source_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Copy the value of one parameter interface into another.
+
void read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Accel &message)
Convert a ROS geometry_msgs::msg::Accel to a CartesianState.
+
std::shared_ptr< state_representation::ParameterInterface > read_parameter_const(const rclcpp::Parameter &ros_parameter, const std::shared_ptr< const state_representation::ParameterInterface > &parameter)
Update the parameter value of a ParameterInterface from a ROS Parameter object only if the two parame...
+
Response structure to be returned by component services.
+
+ + + + diff --git a/versions/v4.2.2/_component_interface_8hpp_source.html b/versions/v4.2.2/_component_interface_8hpp_source.html new file mode 100644 index 000000000..dddca8f80 --- /dev/null +++ b/versions/v4.2.2/_component_interface_8hpp_source.html @@ -0,0 +1,604 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/ComponentInterface.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ComponentInterface.hpp
+
+
+
1#pragma once
+
2
+
3#include <rclcpp/node_interfaces/node_interfaces.hpp>
+
4
+
5#include <tf2_ros/transform_broadcaster.h>
+
6#include <tf2_ros/static_transform_broadcaster.h>
+
7#include <tf2_ros/buffer.h>
+
8#include <tf2_ros/transform_listener.h>
+
9
+
10#include <state_representation/parameters/ParameterMap.hpp>
+
11
+
12#include <modulo_core/communication/PublisherHandler.hpp>
+
13#include <modulo_core/communication/PublisherType.hpp>
+
14#include <modulo_core/communication/SubscriptionHandler.hpp>
+
15#include <modulo_core/translators/parameter_translators.hpp>
+
16
+
17#include <modulo_component_interfaces/srv/empty_trigger.hpp>
+
18#include <modulo_component_interfaces/srv/string_trigger.hpp>
+
19#include <modulo_component_interfaces/msg/predicate.hpp>
+
20
+
21#include "modulo_components/exceptions/AddSignalException.hpp"
+
22#include "modulo_components/exceptions/ComponentParameterException.hpp"
+
23#include "modulo_components/utilities/utilities.hpp"
+
24#include "modulo_components/utilities/predicate_variant.hpp"
+
25
+
30namespace modulo_components {
+
31
+
+ +
39 bool success;
+
40 std::string message;
+
41};
+
+
42
+ +
48
+
+ +
57public:
+ +
59
+
63 virtual ~ComponentInterface() = default;
+
64
+
65protected:
+
70 explicit ComponentInterface(
+
71 const std::shared_ptr<rclcpp::node_interfaces::NodeInterfaces<ALL_RCLCPP_NODE_INTERFACES>>& interfaces
+
72 );
+
73
+
77 virtual void step();
+
78
+
82 virtual void on_step_callback();
+
83
+
93 void add_parameter(
+
94 const std::shared_ptr<state_representation::ParameterInterface>& parameter, const std::string& description,
+
95 bool read_only = false
+
96 );
+
97
+
109 template<typename T>
+
110 void add_parameter(const std::string& name, const T& value, const std::string& description, bool read_only = false);
+
111
+
118 [[nodiscard]] std::shared_ptr<state_representation::ParameterInterface> get_parameter(const std::string& name) const;
+
119
+
127 template<typename T>
+
128 [[nodiscard]] T get_parameter_value(const std::string& name) const;
+
129
+
138 template<typename T>
+
139 void set_parameter_value(const std::string& name, const T& value);
+
140
+
151 virtual bool
+
152 on_validate_parameter_callback(const std::shared_ptr<state_representation::ParameterInterface>& parameter);
+
153
+
159 void add_predicate(const std::string& predicate_name, bool predicate_value);
+
160
+
166 void add_predicate(const std::string& predicate_name, const std::function<bool(void)>& predicate_function);
+
167
+
174 [[nodiscard]] bool get_predicate(const std::string& predicate_name);
+
175
+
183 void set_predicate(const std::string& predicate_name, bool predicate_value);
+
184
+
192 void set_predicate(const std::string& predicate_name, const std::function<bool(void)>& predicate_function);
+
193
+
199 void add_trigger(const std::string& trigger_name);
+
200
+
205 void trigger(const std::string& trigger_name);
+
206
+
215 void declare_input(const std::string& signal_name, const std::string& default_topic = "", bool fixed_topic = false);
+
216
+
225 void declare_output(const std::string& signal_name, const std::string& default_topic = "", bool fixed_topic = false);
+
226
+
235 template<typename DataT>
+
236 void add_input(
+
237 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::string& default_topic = "",
+
238 bool fixed_topic = false
+
239 );
+
240
+
250 template<typename DataT>
+
251 void add_input(
+
252 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::function<void()>& callback,
+
253 const std::string& default_topic = "", bool fixed_topic = false
+
254 );
+
255
+
264 template<typename MsgT>
+
265 void add_input(
+
266 const std::string& signal_name, const std::function<void(const std::shared_ptr<MsgT>)>& callback,
+
267 const std::string& default_topic = "", bool fixed_topic = false
+
268 );
+
269
+
282 template<typename DataT>
+
283 std::string create_output(
+ +
285 const std::shared_ptr<DataT>& data, const std::string& default_topic, bool fixed_topic, bool publish_on_step
+
286 );
+
287
+
293 void publish_output(const std::string& signal_name);
+
294
+
299 void remove_input(const std::string& signal_name);
+
300
+
305 void remove_output(const std::string& signal_name);
+
306
+
312 void add_service(const std::string& service_name, const std::function<ComponentServiceResponse(void)>& callback);
+
313
+
322 void add_service(
+
323 const std::string& service_name,
+
324 const std::function<ComponentServiceResponse(const std::string& string)>& callback
+
325 );
+
326
+
333 void add_periodic_callback(const std::string& name, const std::function<void(void)>& callback);
+
334
+
338 void add_tf_broadcaster();
+
339
+ +
344
+
348 void add_tf_listener();
+
349
+
354 void send_transform(const state_representation::CartesianPose& transform);
+
355
+
360 void send_transforms(const std::vector<state_representation::CartesianPose>& transforms);
+
361
+
366 void send_static_transform(const state_representation::CartesianPose& transform);
+
367
+
372 void send_static_transforms(const std::vector<state_representation::CartesianPose>& transforms);
+
373
+
384 [[nodiscard]] state_representation::CartesianPose lookup_transform(
+
385 const std::string& frame, const std::string& reference_frame, const tf2::TimePoint& time_point,
+
386 const tf2::Duration& duration
+
387 );
+
388
+
399 [[nodiscard]] state_representation::CartesianPose lookup_transform(
+
400 const std::string& frame, const std::string& reference_frame = "world", double validity_period = -1.0,
+
401 const tf2::Duration& duration = tf2::Duration(std::chrono::microseconds(10)));
+
402
+
407 [[nodiscard]] rclcpp::QoS get_qos() const;
+
408
+
413 void set_qos(const rclcpp::QoS& qos);
+
414
+
418 virtual void raise_error();
+
419
+
424 void publish_predicate(const std::string& name);
+
425
+
429 void publish_predicates();
+
430
+
434 void publish_outputs();
+
435
+ +
440
+
441 std::map<std::string, std::shared_ptr<modulo_core::communication::SubscriptionInterface>> inputs_;
+
442 std::map<std::string, std::shared_ptr<modulo_core::communication::PublisherInterface>> outputs_;
+
443 std::map<std::string, bool> periodic_outputs_;
+
444
+
445private:
+
451 rcl_interfaces::msg::SetParametersResult on_set_parameters_callback(const std::vector<rclcpp::Parameter>& parameters);
+
452
+
460 bool validate_parameter(const std::shared_ptr<state_representation::ParameterInterface>& parameter);
+
461
+
467 void add_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate);
+
468
+
474 void set_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate);
+
475
+
485 void declare_signal(
+
486 const std::string& signal_name, const std::string& type, const std::string& default_topic, bool fixed_topic
+
487 );
+
488
+
497 template<typename T>
+
498 bool remove_signal(
+
499 const std::string& signal_name, std::map<std::string, std::shared_ptr<T>>& signal_map, bool skip_check = false
+
500 );
+
501
+
509 std::string validate_service_name(const std::string& service_name);
+
510
+
518 template<typename T>
+
519 void publish_transforms(
+
520 const std::vector<state_representation::CartesianPose>& transforms, const std::shared_ptr<T>& tf_broadcaster,
+
521 bool is_static = false
+
522 );
+
523
+
534 [[nodiscard]] geometry_msgs::msg::TransformStamped lookup_ros_transform(
+
535 const std::string& frame, const std::string& reference_frame, const tf2::TimePoint& time_point,
+
536 const tf2::Duration& duration
+
537 );
+
538
+
539 std::map<std::string, utilities::PredicateVariant> predicates_;
+
540 std::shared_ptr<rclcpp::Publisher<modulo_component_interfaces::msg::Predicate>>
+
541 predicate_publisher_;
+
542 std::map<std::string, bool> triggers_;
+
543
+
544 std::map<std::string, std::shared_ptr<rclcpp::Service<modulo_component_interfaces::srv::EmptyTrigger>>>
+
545 empty_services_;
+
546 std::map<std::string, std::shared_ptr<rclcpp::Service<modulo_component_interfaces::srv::StringTrigger>>>
+
547 string_services_;
+
548
+
549 std::map<std::string, std::function<void(void)>> periodic_callbacks_;
+
550
+
551 state_representation::ParameterMap parameter_map_;
+
552 std::shared_ptr<rclcpp::node_interfaces::OnSetParametersCallbackHandle>
+
553 parameter_cb_handle_;
+
554
+
555 std::shared_ptr<rclcpp::TimerBase> step_timer_;
+
556 std::shared_ptr<tf2_ros::Buffer> tf_buffer_;
+
557 std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
+
558 std::shared_ptr<tf2_ros::TransformBroadcaster> tf_broadcaster_;
+
559 std::shared_ptr<tf2_ros::StaticTransformBroadcaster> static_tf_broadcaster_;
+
560
+
561 std::shared_ptr<rclcpp::node_interfaces::NodeBaseInterface> node_base_;
+
562 std::shared_ptr<rclcpp::node_interfaces::NodeClockInterface> node_clock_;
+
563 std::shared_ptr<rclcpp::node_interfaces::NodeLoggingInterface> node_logging_;
+
564 std::shared_ptr<rclcpp::node_interfaces::NodeParametersInterface> node_parameters_;
+
565 std::shared_ptr<rclcpp::node_interfaces::NodeServicesInterface> node_services_;
+
566 std::shared_ptr<rclcpp::node_interfaces::NodeTimersInterface> node_timers_;
+
567 std::shared_ptr<rclcpp::node_interfaces::NodeTopicsInterface> node_topics_;
+
568 rclcpp::QoS qos_ = rclcpp::QoS(10);
+
569
+
570 bool set_parameter_callback_called_ = false;
+
571};
+
+
572
+
573template<typename T>
+
+ +
575 const std::string& name, const T& value, const std::string& description, bool read_only
+
576) {
+
577 if (name.empty()) {
+
578 RCLCPP_ERROR(this->node_logging_->get_logger(), "Failed to add parameter: Provide a non empty string as a name.");
+
579 return;
+
580 }
+
581 this->add_parameter(state_representation::make_shared_parameter(name, value), description, read_only);
+
582}
+
+
583
+
584template<typename T>
+
+
585inline T ComponentInterface::get_parameter_value(const std::string& name) const {
+
586 try {
+
587 return this->parameter_map_.template get_parameter_value<T>(name);
+
588 } catch (const state_representation::exceptions::InvalidParameterException& ex) {
+ +
590 "Failed to get parameter value of parameter '" + name + "': " + ex.what());
+
591 }
+
592}
+
+
593
+
594template<typename T>
+
+
595inline void ComponentInterface::set_parameter_value(const std::string& name, const T& value) {
+
596 try {
+
597 rcl_interfaces::msg::SetParametersResult result = this->node_parameters_->set_parameters(
+
598 {
+
599 modulo_core::translators::write_parameter(state_representation::make_shared_parameter(name, value))
+
600 }).at(0);
+
601 if (!result.successful) {
+
602 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
603 "Failed to set parameter value of parameter '" << name << "': " << result.reason);
+
604 }
+
605 } catch (const std::exception& ex) {
+
606 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
607 "Failed to set parameter value of parameter '" << name << "': " << ex.what());
+
608 }
+
609}
+
+
610
+
611template<typename DataT>
+
+ +
613 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::string& default_topic,
+
614 bool fixed_topic
+
615) {
+
616 this->add_input(signal_name, data, [] {}, default_topic, fixed_topic);
+
617}
+
+
618
+
619template<typename DataT>
+
+ +
621 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::function<void()>& user_callback,
+
622 const std::string& default_topic, bool fixed_topic
+
623) {
+
624 using namespace modulo_core::communication;
+
625 try {
+
626 if (data == nullptr) {
+ +
628 "Invalid data pointer for input '" + signal_name + "'.");
+
629 }
+
630 this->declare_input(signal_name, default_topic, fixed_topic);
+
631 std::string parsed_signal_name = utilities::parse_topic_name(signal_name);
+
632 auto topic_name = this->get_parameter_value<std::string>(parsed_signal_name + "_topic");
+
633 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(),
+
634 "Adding input '" << parsed_signal_name << "' with topic name '" << topic_name << "'.");
+
635 auto message_pair = make_shared_message_pair(data, this->node_clock_->get_clock());
+
636 std::shared_ptr<SubscriptionInterface> subscription_interface;
+
637 switch (message_pair->get_type()) {
+
638 case MessageType::BOOL: {
+
639 auto subscription_handler = std::make_shared<SubscriptionHandler<std_msgs::msg::Bool>>(message_pair);
+
640 auto subscription = rclcpp::create_subscription<std_msgs::msg::Bool>(
+
641 this->node_parameters_, this->node_topics_, topic_name, this->qos_,
+
642 subscription_handler->get_callback(user_callback));
+
643 subscription_interface = subscription_handler->create_subscription_interface(subscription);
+
644 break;
+
645 }
+
646 case MessageType::FLOAT64: {
+
647 auto subscription_handler = std::make_shared<SubscriptionHandler<std_msgs::msg::Float64>>(message_pair);
+
648 auto subscription = rclcpp::create_subscription<std_msgs::msg::Float64>(
+
649 this->node_parameters_, this->node_topics_, topic_name, this->qos_,
+
650 subscription_handler->get_callback(user_callback));
+
651 subscription_interface = subscription_handler->create_subscription_interface(subscription);
+
652 break;
+
653 }
+
654 case MessageType::FLOAT64_MULTI_ARRAY: {
+ +
656 std::make_shared<SubscriptionHandler<std_msgs::msg::Float64MultiArray>>(message_pair);
+
657 auto subscription = rclcpp::create_subscription<std_msgs::msg::Float64MultiArray>(
+
658 this->node_parameters_, this->node_topics_, topic_name, this->qos_,
+
659 subscription_handler->get_callback(user_callback));
+
660 subscription_interface = subscription_handler->create_subscription_interface(subscription);
+
661 break;
+
662 }
+
663 case MessageType::INT32: {
+
664 auto subscription_handler = std::make_shared<SubscriptionHandler<std_msgs::msg::Int32>>(message_pair);
+
665 auto subscription = rclcpp::create_subscription<std_msgs::msg::Int32>(
+
666 this->node_parameters_, this->node_topics_, topic_name, this->qos_,
+
667 subscription_handler->get_callback(user_callback));
+
668 subscription_interface = subscription_handler->create_subscription_interface(subscription);
+
669 break;
+
670 }
+
671 case MessageType::STRING: {
+
672 auto subscription_handler = std::make_shared<SubscriptionHandler<std_msgs::msg::String>>(message_pair);
+
673 auto subscription = rclcpp::create_subscription<std_msgs::msg::String>(
+
674 this->node_parameters_, this->node_topics_, topic_name, this->qos_,
+
675 subscription_handler->get_callback(user_callback));
+
676 subscription_interface = subscription_handler->create_subscription_interface(subscription);
+
677 break;
+
678 }
+
679 case MessageType::ENCODED_STATE: {
+
680 auto subscription_handler = std::make_shared<SubscriptionHandler<modulo_core::EncodedState>>(message_pair);
+
681 auto subscription = rclcpp::create_subscription<modulo_core::EncodedState>(
+
682 this->node_parameters_, this->node_topics_, topic_name, this->qos_,
+
683 subscription_handler->get_callback(user_callback));
+
684 subscription_interface = subscription_handler->create_subscription_interface(subscription);
+
685 break;
+
686 }
+
687 }
+
688 this->inputs_.insert_or_assign(parsed_signal_name, subscription_interface);
+
689 } catch (const std::exception& ex) {
+
690 RCLCPP_ERROR_STREAM(this->node_logging_->get_logger(),
+
691 "Failed to add input '" << signal_name << "': " << ex.what());
+
692 }
+
693}
+
+
694
+
695template<typename MsgT>
+
+ +
697 const std::string& signal_name, const std::function<void(const std::shared_ptr<MsgT>)>& callback,
+
698 const std::string& default_topic, bool fixed_topic
+
699) {
+
700 using namespace modulo_core::communication;
+
701 try {
+
702 std::string parsed_signal_name = utilities::parse_topic_name(signal_name);
+
703 this->declare_input(parsed_signal_name, default_topic, fixed_topic);
+
704 auto topic_name = this->get_parameter_value<std::string>(parsed_signal_name + "_topic");
+
705 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(),
+
706 "Adding input '" << parsed_signal_name << "' with topic name '" << topic_name << "'.");
+
707 auto subscription = rclcpp::create_subscription<MsgT>(
+
708 this->node_parameters_, this->node_topics_, topic_name, this->qos_, callback);
+ +
710 std::make_shared<SubscriptionHandler<MsgT>>()->create_subscription_interface(subscription);
+
711 this->inputs_.insert_or_assign(parsed_signal_name, subscription_interface);
+
712 } catch (const std::exception& ex) {
+
713 RCLCPP_ERROR_STREAM(this->node_logging_->get_logger(),
+
714 "Failed to add input '" << signal_name << "': " << ex.what());
+
715 }
+
716}
+
+
717
+
718template<typename DataT>
+
+ +
720 modulo_core::communication::PublisherType publisher_type, const std::string& signal_name,
+
721 const std::shared_ptr<DataT>& data, const std::string& default_topic, bool fixed_topic, bool publish_on_step
+
722) {
+
723 using namespace modulo_core::communication;
+
724 try {
+
725 auto parsed_signal_name = utilities::parse_topic_name(signal_name);
+
726 if (data == nullptr) {
+ +
728 "Invalid data pointer for output '" + parsed_signal_name + "'.");
+
729 }
+
730 this->declare_output(parsed_signal_name, default_topic, fixed_topic);
+
731 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(),
+
732 "Creating output '" << parsed_signal_name << "' (provided signal name was '" << signal_name
+
733 << "').");
+
734 auto message_pair = make_shared_message_pair(data, this->node_clock_->get_clock());
+
735 this->outputs_.insert_or_assign(
+
736 parsed_signal_name, std::make_shared<PublisherInterface>(publisher_type, message_pair));
+
737 this->periodic_outputs_.insert_or_assign(parsed_signal_name, publish_on_step);
+
738 return parsed_signal_name;
+
739 } catch (const exceptions::AddSignalException&) {
+
740 throw;
+
741 } catch (const std::exception& ex) {
+ +
743 }
+
744}
+
+
745
+
746template<typename T>
+
747inline bool ComponentInterface::remove_signal(
+
748 const std::string& signal_name, std::map<std::string, std::shared_ptr<T>>& signal_map, bool skip_check
+
749) {
+
750 if (!skip_check && signal_map.find(signal_name) == signal_map.cend()) {
+
751 return false;
+
752 } else {
+
753 RCLCPP_DEBUG_STREAM(this->node_logging_->get_logger(), "Removing signal '" << signal_name << "'.");
+
754 signal_map.at(signal_name).reset();
+
755 return signal_map.erase(signal_name);
+
756 }
+
757}
+
758
+
759template<typename T>
+
760inline void ComponentInterface::publish_transforms(
+
761 const std::vector<state_representation::CartesianPose>& transforms, const std::shared_ptr<T>& tf_broadcaster,
+
762 bool is_static
+
763) {
+
764 std::string modifier = is_static ? "static " : "";
+
765 if (tf_broadcaster == nullptr) {
+
766 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
767 "Failed to send " << modifier << "transform: No " << modifier
+
768 << "TF broadcaster configured.");
+
769 return;
+
770 }
+
771 try {
+
772 std::vector<geometry_msgs::msg::TransformStamped> transform_messages;
+
773 transform_messages.reserve(transforms.size());
+
774 for (const auto& tf : transforms) {
+
775 geometry_msgs::msg::TransformStamped transform_message;
+ +
777 transform_message, tf, this->node_clock_->get_clock()->now());
+ +
779 }
+
780 tf_broadcaster->sendTransform(transform_messages);
+
781 } catch (const std::exception& ex) {
+
782 RCLCPP_ERROR_STREAM_THROTTLE(this->node_logging_->get_logger(), *this->node_clock_->get_clock(), 1000,
+
783 "Failed to send " << modifier << "transform: " << ex.what());
+
784 }
+
785}
+
786}// namespace modulo_components
+
Friend class to the ComponentInterface to allow test fixtures to access protected and private members...
+
Base interface class for modulo components to wrap a ROS Node with custom behaviour.
+
void send_transforms(const std::vector< state_representation::CartesianPose > &transforms)
Send a vector of transforms to TF.
+
virtual bool on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Parameter validation function to be redefined by derived Component classes.
+
void publish_outputs()
Helper function to publish all output signals.
+
void remove_input(const std::string &signal_name)
Remove an input from the map of inputs.
+
void declare_input(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
Declare an input to create the topic parameter without adding it to the map of inputs yet.
+
void declare_output(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
Declare an output to create the topic parameter without adding it to the map of outputs yet.
+
void set_parameter_value(const std::string &name, const T &value)
Set the value of a parameter.
+
void send_static_transforms(const std::vector< state_representation::CartesianPose > &transforms)
Send a vector of static transforms to TF.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::PublisherInterface > > outputs_
Map of outputs.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
void add_static_tf_broadcaster()
Configure a static transform broadcaster.
+
void add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
Add a parameter.
+
void trigger(const std::string &trigger_name)
Latch the trigger with the provided name.
+
void add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)
Add and configure an input signal of the component.
+
state_representation::CartesianPose lookup_transform(const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)
Look up a transform from TF.
+
virtual void on_step_callback()
Steps to execute periodically. To be redefined by derived Component classes.
+
void set_predicate(const std::string &predicate_name, bool predicate_value)
Set the value of the predicate given as parameter, if the predicate is not found does not do anything...
+
virtual void raise_error()
Put the component in error state by setting the 'in_error_state' predicate to true.
+
virtual ~ComponentInterface()=default
Virtual default destructor.
+
void remove_output(const std::string &signal_name)
Remove an output from the map of outputs.
+
void publish_output(const std::string &signal_name)
Trigger the publishing of an output.
+
virtual void step()
Step function that is called periodically.
+
void publish_predicates()
Helper function to publish all predicates.
+
void set_qos(const rclcpp::QoS &qos)
Set the Quality of Service for ROS publishers and subscribers.
+
std::string create_output(modulo_core::communication::PublisherType publisher_type, const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic, bool fixed_topic, bool publish_on_step)
Helper function to parse the signal name and add an unconfigured PublisherInterface to the map of out...
+
rclcpp::QoS get_qos() const
Getter of the Quality of Service attribute.
+
bool get_predicate(const std::string &predicate_name)
Get the logical value of a predicate.
+
void add_predicate(const std::string &predicate_name, bool predicate_value)
Add a predicate to the map of predicates.
+
void send_transform(const state_representation::CartesianPose &transform)
Send a transform to TF.
+
void add_trigger(const std::string &trigger_name)
Add a trigger to the component. Triggers are predicates that are always false except when it's trigge...
+
void publish_predicate(const std::string &name)
Helper function to publish a predicate.
+
void add_periodic_callback(const std::string &name, const std::function< void(void)> &callback)
Add a periodic callback function.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::SubscriptionInterface > > inputs_
Map of inputs.
+
void add_tf_listener()
Configure a transform buffer and listener.
+
void evaluate_periodic_callbacks()
Helper function to evaluate all periodic function callbacks.
+
void add_tf_broadcaster()
Configure a transform broadcaster.
+
void send_static_transform(const state_representation::CartesianPose &transform)
Send a static transform to TF.
+
std::map< std::string, bool > periodic_outputs_
Map of outputs with periodic publishing flag.
+
void add_service(const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)
Add a service to trigger a callback function with no input arguments.
+
An exception class to notify errors when adding a signal.
+
An exception class to notify errors with component parameters.
+
An exception class to notify that a certain pointer is null.
+
Modulo components.
Definition Component.hpp:9
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
PublisherType
Enum of supported ROS publisher types for the PublisherInterface.
+
void write_message(geometry_msgs::msg::Accel &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
Convert a CartesianState to a ROS geometry_msgs::msg::Accel.
+
rclcpp::Parameter write_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Write a ROS Parameter from a ParameterInterface pointer.
+
Response structure to be returned by component services.
+
+ + + + diff --git a/versions/v4.2.2/_component_parameter_exception_8hpp_source.html b/versions/v4.2.2/_component_parameter_exception_8hpp_source.html new file mode 100644 index 000000000..4ab776db2 --- /dev/null +++ b/versions/v4.2.2/_component_parameter_exception_8hpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/exceptions/ComponentParameterException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ComponentParameterException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_components/exceptions/ComponentException.hpp"
+
4
+ +
6
+
+ +
14public:
+
15 explicit ComponentParameterException(const std::string& msg) :
+
16 ComponentException("ComponentParameterException", msg) {}
+
17};
+
+
18}// namespace modulo_components::exceptions
+
A base class for all component exceptions.
+
An exception class to notify errors with component parameters.
+
Modulo component exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_controller_interface_8cpp_source.html b/versions/v4.2.2/_controller_interface_8cpp_source.html new file mode 100644 index 000000000..ae4b50f4c --- /dev/null +++ b/versions/v4.2.2/_controller_interface_8cpp_source.html @@ -0,0 +1,949 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/src/ControllerInterface.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ControllerInterface.cpp
+
+
+
1#include "modulo_controllers/ControllerInterface.hpp"
+
2
+
3#include <chrono>
+
4
+
5#include <modulo_core/translators/message_readers.hpp>
+
6
+
7#include "modulo_controllers/utils/utilities.hpp"
+
8
+
9template<class... Ts>
+
10struct overloaded : Ts... {
+
11 using Ts::operator()...;
+
12};
+
13template<class... Ts>
+
14overloaded(Ts...) -> overloaded<Ts...>;
+
15
+
16using namespace state_representation;
+
17using namespace std::chrono_literals;
+
18
+
19namespace modulo_controllers {
+
20
+
+
21ControllerInterface::ControllerInterface(bool claim_all_state_interfaces)
+
22 : controller_interface::ControllerInterface(),
+
23 input_validity_period_(1.0),
+
24 claim_all_state_interfaces_(claim_all_state_interfaces),
+
25 on_init_called_(false) {}
+
+
26
+
+
27rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn ControllerInterface::on_init() {
+
28 on_init_called_ = true;
+
29 parameter_cb_handle_ = get_node()->add_on_set_parameters_callback(
+
30 [this](const std::vector<rclcpp::Parameter>& parameters) -> rcl_interfaces::msg::SetParametersResult {
+
31 return on_set_parameters_callback(parameters);
+
32 });
+
33
+
34 try {
+
35 add_parameter(std::make_shared<Parameter<std::string>>("hardware_name"), "The name of the hardware interface");
+ +
37 std::make_shared<Parameter<std::string>>("robot_description"),
+
38 "The string formatted content of the controller's URDF description");
+ +
40 std::make_shared<Parameter<std::vector<std::string>>>("joints"),
+
41 "A vector of joint names that the controller will claim");
+ +
43 "activation_timeout", 1.0, "The seconds to wait for valid data on the state interfaces before activating");
+ +
45 "input_validity_period", input_validity_period_,
+
46 "The maximum age of an input state before discarding it as expired");
+
47 add_parameter<int>("predicate_publishing_rate", 10, "The rate at which to publish controller predicates");
+
48 } catch (const std::exception& e) {
+
49 RCLCPP_ERROR(get_node()->get_logger(), "Exception thrown during on_init stage with message: %s \n", e.what());
+
50 return CallbackReturn::ERROR;
+
51 }
+
52 return CallbackReturn::SUCCESS;
+
53}
+
+
54
+
55rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
+
56ControllerInterface::on_configure(const rclcpp_lifecycle::State&) {
+
57 if (!on_init_called_) {
+ + +
60 "The controller has not been properly initialized! Derived controller classes must call "
+
61 "'ControllerInterface::on_init()' during their own initialization before being configured.");
+
62 return CallbackReturn::ERROR;
+
63 }
+
64 auto hardware_name = get_parameter("hardware_name");
+
65 if (hardware_name->is_empty()) {
+
66 RCLCPP_ERROR(get_node()->get_logger(), "Parameter 'hardware_name' cannot be empty");
+
67 return CallbackReturn::ERROR;
+
68 }
+
69 hardware_name_ = hardware_name->get_parameter_value<std::string>();
+
70
+
71 input_validity_period_ = get_parameter_value<double>("input_validity_period");
+
72 add_inputs();
+
73 add_outputs();
+
74
+
75 if (predicates_.size()) {
+
76 // TODO: topic
+
77 predicate_publisher_ =
+
78 get_node()->create_publisher<modulo_interfaces::msg::PredicateCollection>("/predicates2", qos_);
+
79 predicate_message_.node = get_node()->get_fully_qualified_name();
+
80 predicate_message_.type = modulo_interfaces::msg::PredicateCollection::CONTROLLER;
+
81
+
82 predicate_timer_ = get_node()->create_wall_timer(
+
83 std::chrono::nanoseconds(static_cast<int64_t>(1e9 / get_parameter_value<int>("predicate_publishing_rate"))),
+
84 [this]() { this->publish_predicates(); });
+
85 }
+
86
+
87 RCLCPP_DEBUG(get_node()->get_logger(), "Configuration of ControllerInterface successful");
+
88 return on_configure();
+
89}
+
+
90
+
+
91rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn ControllerInterface::on_configure() {
+
92 return CallbackReturn::SUCCESS;
+
93}
+
+
94
+
+
95void ControllerInterface::add_state_interface(const std::string& name, const std::string& interface) {
+
96 add_interface(name, interface, state_interface_names_, "state");
+
97}
+
+
98
+
+
99void ControllerInterface::add_command_interface(const std::string& name, const std::string& interface) {
+
100 add_interface(name, interface, command_interface_names_, "command");
+
101}
+
+
102
+
103void ControllerInterface::add_interface(
+
104 const std::string& name, const std::string& interface, std::vector<std::string>& list, const std::string& type) {
+
105 if (get_node()->get_current_state().label() != "configuring") {
+
106 throw std::runtime_error("Interfaces can only be added when the controller is in state 'configuring'");
+
107 }
+
108 auto full_name = name + "/" + interface;
+
109 if (std::find(list.cbegin(), list.cend(), full_name) == list.cend()) {
+
110 list.push_back(full_name);
+ +
112 get_node()->get_logger(), "Adding interface '%s' to the list of desired %s interfaces", full_name.c_str(),
+
113 type.c_str());
+
114 } else {
+ +
116 get_node()->get_logger(), "Interface '%s' is already in the list of desired %s interfaces", full_name.c_str(),
+
117 type.c_str());
+
118 }
+
119}
+
120
+
+
121controller_interface::InterfaceConfiguration ControllerInterface::command_interface_configuration() const {
+
122 controller_interface::InterfaceConfiguration command_interfaces_config;
+
123 if (command_interface_names_.empty()) {
+
124 RCLCPP_DEBUG(get_node()->get_logger(), "List of command interfaces is empty, not claiming any interfaces.");
+
125 command_interfaces_config.type = controller_interface::interface_configuration_type::NONE;
+ +
127 }
+
128
+
129 command_interfaces_config.type = controller_interface::interface_configuration_type::INDIVIDUAL;
+
130 for (const auto& interface : command_interface_names_) {
+
131 RCLCPP_DEBUG(get_node()->get_logger(), "Claiming command interface '%s'", interface.c_str());
+
132 command_interfaces_config.names.push_back(interface);
+
133 }
+
134
+ +
136}
+
+
137
+
+
138controller_interface::InterfaceConfiguration ControllerInterface::state_interface_configuration() const {
+
139 controller_interface::InterfaceConfiguration state_interfaces_config;
+
140 if (claim_all_state_interfaces_) {
+
141 RCLCPP_DEBUG(get_node()->get_logger(), "Claiming all state interfaces.");
+
142 state_interfaces_config.type = controller_interface::interface_configuration_type::ALL;
+ +
144 }
+
145
+
146 state_interfaces_config.type = controller_interface::interface_configuration_type::INDIVIDUAL;
+
147 for (const auto& interface : state_interface_names_) {
+
148 RCLCPP_DEBUG(get_node()->get_logger(), "Claiming state interface '%s'", interface.c_str());
+
149 state_interfaces_config.names.push_back(interface);
+
150 }
+
151
+ +
153}
+
+
154
+
155rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
+
156ControllerInterface::on_activate(const rclcpp_lifecycle::State&) {
+
157 // initialize the map of command data from all available interfaces
+
158 command_interface_data_ = std::vector<double>(command_interfaces_.size());
+
159 for (unsigned int i = 0; i < command_interfaces_.size(); ++i) {
+
160 const auto& command_interface = command_interfaces_.at(i);
+
161 if (command_interface_indices_.find(command_interface.get_prefix_name()) == command_interface_indices_.cend()) {
+
162 command_interface_indices_.insert_or_assign(
+
163 command_interface.get_prefix_name(), std::unordered_map<std::string, unsigned int>());
+
164 }
+
165 command_interface_indices_.at(command_interface.get_prefix_name())
+
166 .insert_or_assign(command_interface.get_interface_name(), i);
+
167 command_interface_data_.at(i) = command_interface.get_value();
+
168 }
+
169
+
170 // initialize the map of state data from all available interfaces
+
171 for (const auto& state_interface : state_interfaces_) {
+
172 if (state_interface_data_.find(state_interface.get_prefix_name()) == state_interface_data_.cend()) {
+
173 state_interface_data_.insert_or_assign(
+
174 state_interface.get_prefix_name(), std::unordered_map<std::string, double>());
+
175 }
+
176 state_interface_data_.at(state_interface.get_prefix_name())
+
177 .insert_or_assign(state_interface.get_interface_name(), state_interface.get_value());
+
178 }
+
179
+
180 auto status = on_activate();
+
181 if (status != CallbackReturn::SUCCESS) {
+
182 return status;
+
183 }
+
184
+
185 auto start_time = get_node()->get_clock()->now();
+
186 auto activation_timeout = rclcpp::Duration::from_seconds(get_parameter_value<double>("activation_timeout"));
+
187 while (read_state_interfaces() != controller_interface::return_type::OK) {
+ +
189 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
190 "Activation is not possible yet; the controller did not receive valid states from hardware");
+ + + +
194 get_node()->get_logger(),
+
195 "Activation was not successful; the controller did not receive valid states from hardware");
+
196 return CallbackReturn::FAILURE;
+
197 }
+
198 }
+
199
+
200 RCLCPP_DEBUG(get_node()->get_logger(), "Activation of ControllerInterface successful");
+
201 return CallbackReturn::SUCCESS;
+
202}
+
+
203
+
+
204rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn ControllerInterface::on_activate() {
+
205 return CallbackReturn::SUCCESS;
+
206}
+
+
207
+
208rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
+
209ControllerInterface::on_deactivate(const rclcpp_lifecycle::State&) {
+
210 return on_deactivate();
+
211}
+
+
212
+
+
213rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn ControllerInterface::on_deactivate() {
+
214 return CallbackReturn::SUCCESS;
+
215}
+
+
216
+
217controller_interface::return_type
+
+
218ControllerInterface::update(const rclcpp::Time& time, const rclcpp::Duration& period) {
+ +
220 if (status != controller_interface::return_type::OK) {
+
221 return status;
+
222 }
+
223
+
224 try {
+
225 status = evaluate(time, period.to_chrono<std::chrono::nanoseconds>());
+
226 } catch (const std::exception& e) {
+ +
228 get_node()->get_logger(), *get_node()->get_clock(), 1000, "Exception during evaluate(): %s \n", e.what());
+
229 return controller_interface::return_type::ERROR;
+
230 }
+
231 if (status != controller_interface::return_type::OK) {
+
232 return status;
+
233 }
+
234
+
235 if (command_interface_data_.empty()) {
+
236 return controller_interface::return_type::OK;
+
237 }
+
238
+
239 controller_interface::return_type ret;
+
240 if (command_mutex_.try_lock()) {
+
241 missed_locks_ = 0;
+ +
243 command_mutex_.unlock();
+
244 } else {
+
245 if (missed_locks_ > 2) {
+ +
247 get_node()->get_logger(),
+
248 "Controller is unable to acquire lock for command interfaces, returning an error now");
+
249 ret = controller_interface::return_type::ERROR;
+
250 }
+
251 ++missed_locks_;
+
252 RCLCPP_WARN(get_node()->get_logger(), "Unable to acquire lock for command interfaces (%u/3)", missed_locks_);
+
253 }
+
254
+
255 return ret;
+
256}
+
+
257
+
+
258controller_interface::return_type ControllerInterface::read_state_interfaces() {
+
259 for (const auto& state_interface : state_interfaces_) {
+
260 state_interface_data_.at(state_interface.get_prefix_name()).at(state_interface.get_interface_name()) =
+
261 state_interface.get_value();
+
262 }
+
263
+
264 return controller_interface::return_type::OK;
+
265}
+
+
266
+
+
267controller_interface::return_type ControllerInterface::write_command_interfaces(const rclcpp::Duration&) {
+ +
269 command_interface.set_value(command_interface_data_.at(
+
270 command_interface_indices_.at(command_interface.get_prefix_name()).at(command_interface.get_interface_name())));
+
271 }
+
272 return controller_interface::return_type::OK;
+
273}
+
+
274
+
+
275std::unordered_map<std::string, double> ControllerInterface::get_state_interfaces(const std::string& name) const {
+
276 return state_interface_data_.at(name);
+
277}
+
+
278
+
+
279double ControllerInterface::get_state_interface(const std::string& name, const std::string& interface) const {
+
280 return state_interface_data_.at(name).at(interface);
+
281}
+
+
282
+
+
283double ControllerInterface::get_command_interface(const std::string& name, const std::string& interface) const {
+
284 return command_interfaces_.at(command_interface_indices_.at(name).at(interface)).get_value();
+
285}
+
+
286
+
+
287void ControllerInterface::set_command_interface(const std::string& name, const std::string& interface, double value) {
+
288 try {
+
289 command_interface_data_.at(command_interface_indices_.at(name).at(interface)) = value;
+
290 } catch (const std::out_of_range&) {
+ +
292 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
293 "set_command_interface called with an unknown name/interface: %s/%s", name.c_str(), interface.c_str());
+
294 }
+
295}
+
+
296
+ +
298 const std::shared_ptr<ParameterInterface>& parameter, const std::string& description, bool read_only) {
+
299 set_parameter_callback_called_ = false;
+
300 rclcpp::Parameter ros_param;
+
301 try {
+ +
303 if (!get_node()->has_parameter(parameter->get_name())) {
+
304 RCLCPP_DEBUG(get_node()->get_logger(), "Adding parameter '%s'.", parameter->get_name().c_str());
+
305 parameter_map_.set_parameter(parameter);
+
306 rcl_interfaces::msg::ParameterDescriptor descriptor;
+
307 descriptor.description = description;
+
308 descriptor.read_only = read_only;
+
309 if (parameter->is_empty()) {
+
310 descriptor.dynamic_typing = true;
+ +
312 get_node()->declare_parameter(parameter->get_name(), rclcpp::ParameterValue{}, descriptor);
+
313 } else {
+
314 get_node()->declare_parameter(parameter->get_name(), ros_param.get_parameter_value(), descriptor);
+
315 }
+
316 if (!set_parameter_callback_called_) {
+
317 auto result = on_set_parameters_callback({get_node()->get_parameters({parameter->get_name()})});
+
318 if (!result.successful) {
+
319 get_node()->undeclare_parameter(parameter->get_name());
+
320 throw std::runtime_error(result.reason);
+
321 }
+
322 }
+
323 } else {
+
324 RCLCPP_DEBUG(get_node()->get_logger(), "Parameter '%s' already exists.", parameter->get_name().c_str());
+
325 }
+
326 } catch (const std::exception& ex) {
+ +
328 get_node()->get_logger(), "Failed to add parameter '%s': %s", parameter->get_name().c_str(), ex.what());
+
329 }
+
330}
+
331
+
+
332std::shared_ptr<ParameterInterface> ControllerInterface::get_parameter(const std::string& name) const {
+
333 return parameter_map_.get_parameter(name);
+
334}
+
+
335
+
336rcl_interfaces::msg::SetParametersResult
+
337ControllerInterface::on_set_parameters_callback(const std::vector<rclcpp::Parameter>& parameters) {
+
338 rcl_interfaces::msg::SetParametersResult result;
+
339 result.successful = true;
+
340 for (const auto& ros_parameter : parameters) {
+
341 try {
+
342 if (ros_parameter.get_name().substr(0, 17) == "qos_overrides./tf") {
+
343 continue;
+
344 }
+
345 // get the associated parameter interface by name
+
346 auto parameter = parameter_map_.get_parameter(ros_parameter.get_name());
+
347
+
348 // convert the ROS parameter into a ParameterInterface without modifying the original
+ +
350 if (!validate_parameter(new_parameter)) {
+
351 result.successful = false;
+
352 result.reason += "Validation of parameter '" + ros_parameter.get_name() + "' returned false!";
+
353 } else if (!new_parameter->is_empty()) {
+
354 // update the value of the parameter in the map
+ +
356 }
+
357 } catch (const std::exception& ex) {
+
358 result.successful = false;
+
359 result.reason += ex.what();
+
360 }
+
361 }
+
362 set_parameter_callback_called_ = true;
+
363 return result;
+
364}
+
365
+
366bool ControllerInterface::validate_parameter(const std::shared_ptr<ParameterInterface>& parameter) {
+
367 if (parameter->get_name() == "activation_timeout" || parameter->get_name() == "input_validity_period") {
+
368 auto value = parameter->get_parameter_value<double>();
+
369 if (value < 0.0 || value > std::numeric_limits<double>::max()) {
+ +
371 get_node()->get_logger(), "Parameter value of parameter '%s' should be a positive finite number",
+
372 parameter->get_name().c_str());
+
373 return false;
+
374 }
+
375 }
+ +
377}
+
378
+
+
379bool ControllerInterface::on_validate_parameter_callback(const std::shared_ptr<ParameterInterface>&) {
+
380 return true;
+
381}
+
+
382
+
+
383void ControllerInterface::add_predicate(const std::string& name, bool predicate) {
+
384 add_variant_predicate(name, utilities::PredicateVariant(predicate));
+
385}
+
+
386
+
+
387void ControllerInterface::add_predicate(const std::string& name, const std::function<bool(void)>& predicate) {
+
388 add_variant_predicate(name, utilities::PredicateVariant(predicate));
+
389}
+
+
390
+
391void ControllerInterface::add_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate) {
+
392 if (name.empty()) {
+
393 RCLCPP_ERROR(get_node()->get_logger(), "Failed to add predicate: Provide a non empty string as a name.");
+
394 return;
+
395 }
+
396 if (predicates_.find(name) != predicates_.end()) {
+
397 RCLCPP_WARN(get_node()->get_logger(), "Predicate with name '%s' already exists, overwriting.", name.c_str());
+
398 } else {
+
399 RCLCPP_DEBUG(get_node()->get_logger(), "Adding predicate '%s'.", name.c_str());
+
400 }
+
401 predicates_.insert_or_assign(name, predicate);
+
402}
+
403
+
+
404bool ControllerInterface::get_predicate(const std::string& predicate_name) const {
+
405 auto predicate_iterator = predicates_.find(predicate_name);
+
406 // if there is no predicate with that name simply return false with an error message
+
407 if (predicate_iterator == predicates_.end()) {
+ +
409 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
410 "Failed to get predicate '%s': Predicate does not exists, returning false.", predicate_name.c_str());
+
411 return false;
+
412 }
+
413 // try to get the value from the variant as a bool
+
414 auto* ptr_value = std::get_if<bool>(&predicate_iterator->second);
+
415 if (ptr_value) {
+
416 return *ptr_value;
+
417 }
+
418 // if previous check failed, it means the variant is actually a callback function
+
419 auto callback_function = std::get<std::function<bool(void)>>(predicate_iterator->second);
+
420 bool value = false;
+
421 try {
+ +
423 } catch (const std::exception& ex) {
+ +
425 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
426 "Failed to evaluate callback of predicate '%s', returning false: %s", predicate_name.c_str(), ex.what());
+
427 }
+
428 return value;
+
429}
+
+
430
+
+
431void ControllerInterface::set_predicate(const std::string& name, bool predicate) {
+
432 set_variant_predicate(name, utilities::PredicateVariant(predicate));
+
433}
+
+
434
+
+
435void ControllerInterface::set_predicate(const std::string& name, const std::function<bool(void)>& predicate) {
+
436 set_variant_predicate(name, utilities::PredicateVariant(predicate));
+
437}
+
+
438
+
439void ControllerInterface::set_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate) {
+
440 auto predicate_iterator = predicates_.find(name);
+
441 if (predicate_iterator == predicates_.end()) {
+ +
443 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
444 "Failed to set predicate '%s': Predicate does not exist.", name.c_str());
+
445 return;
+
446 }
+ +
448 publish_predicate(name);// TODO: do we want that
+
449}
+
450
+
+
451void ControllerInterface::add_trigger(const std::string& trigger_name) {
+
452 if (trigger_name.empty()) {
+
453 RCLCPP_ERROR(get_node()->get_logger(), "Failed to add trigger: Provide a non empty string as a name.");
+
454 return;
+
455 }
+
456 if (triggers_.find(trigger_name) != triggers_.end() || predicates_.find(trigger_name) != predicates_.end()) {
+ +
458 get_node()->get_logger(), "Failed to add trigger: there is already a trigger or predicate with name '%s'.",
+
459 trigger_name.c_str());
+
460 return;
+
461 }
+
462 triggers_.insert_or_assign(trigger_name, false);
+ +
464 auto value = this->triggers_.at(trigger_name);
+
465 this->triggers_.at(trigger_name) = false;
+
466 return value;
+
467 });
+
468}
+
+
469
+
+
470void ControllerInterface::trigger(const std::string& trigger_name) {
+
471 if (triggers_.find(trigger_name) == triggers_.end()) {
+ +
473 get_node()->get_logger(), "Failed to trigger: could not find trigger with name '%s'.", trigger_name.c_str());
+
474 return;
+
475 }
+
476 triggers_.at(trigger_name) = true;
+
477 publish_predicate(trigger_name);
+
478}
+
+
479
+
480modulo_interfaces::msg::Predicate ControllerInterface::get_predicate_message(const std::string& name) const {
+
481 modulo_interfaces::msg::Predicate message;
+
482 message.predicate = name;
+
483 message.value = get_predicate(name);
+
484 return message;
+
485}
+
486
+
487void ControllerInterface::publish_predicate(const std::string& name) const {
+
488 auto message(predicate_message_);
+
489 message.predicates.push_back(get_predicate_message(name));
+
490 predicate_publisher_->publish(message);
+
491}
+
492
+
493void ControllerInterface::publish_predicates() const {
+
494 auto message(predicate_message_);
+
495 for (const auto& predicate : predicates_) {
+
496 message.predicates.push_back(get_predicate_message(predicate.first));
+
497 }
+
498 predicate_publisher_->publish(message);
+
499}
+
500
+
501std::string ControllerInterface::validate_and_declare_signal(
+
502 const std::string& signal_name, const std::string& type, const std::string& default_topic, bool fixed_topic) {
+
503 auto parsed_signal_name = utilities::parse_topic_name(signal_name);
+
504 if (parsed_signal_name.empty()) {
+ +
506 get_node()->get_logger(),
+
507 "The parsed signal name for %s '%s' is empty. Provide a string with valid characters for the signal name "
+
508 "([a-zA-Z0-9_]).",
+
509 type.c_str(), signal_name.c_str());
+
510 return "";
+
511 }
+ + +
514 get_node()->get_logger(),
+
515 "The parsed signal name for %s '%s' is '%s'. Use the parsed signal name to refer to this %s and its topic "
+
516 "parameter.",
+
517 type.c_str(), signal_name.c_str(), parsed_signal_name.c_str(), type.c_str());
+
518 }
+
519 if (inputs_.find(parsed_signal_name) != inputs_.end()) {
+
520 RCLCPP_WARN(get_node()->get_logger(), "Signal '%s' already exists as input.", parsed_signal_name.c_str());
+
521 return "";
+
522 }
+
523 if (outputs_.find(parsed_signal_name) != outputs_.end()) {
+
524 RCLCPP_WARN(get_node()->get_logger(), "Signal '%s' already exists as output", parsed_signal_name.c_str());
+
525 return "";
+
526 }
+
527 auto topic = default_topic.empty() ? "~/" + parsed_signal_name : default_topic;
+
528 auto parameter_name = parsed_signal_name + "_topic";
+ + +
531 } else {
+ +
533 parameter_name, topic, "Signal topic name of " + type + " '" + parsed_signal_name + "'", fixed_topic);
+
534 }
+ +
536 get_node()->get_logger(), "Declared %s '%s' and parameter '%s' with value '%s'.", type.c_str(),
+
537 parsed_signal_name.c_str(), parameter_name.c_str(), topic.c_str());
+
538 return parsed_signal_name;
+
539}
+
540
+
541void ControllerInterface::create_input(
+
542 const ControllerInput& input, const std::string& name, const std::string& topic_name) {
+
543 auto parsed_name = validate_and_declare_signal(name, "input", topic_name);
+
544 if (!parsed_name.empty()) {
+
545 inputs_.insert_or_assign(name, input);
+
546 }
+
547}
+
548
+
549void ControllerInterface::add_inputs() {
+
550 for (auto& [name, input] : inputs_) {
+
551 try {
+ +
553 std::visit(
+
554 overloaded{
+
555 [&](const realtime_tools::RealtimeBuffer<std::shared_ptr<modulo_core::EncodedState>>&) {
+ +
557 },
+
558 [&](const realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Bool>>&) {
+
559 subscriptions_.push_back(create_subscription<std_msgs::msg::Bool>(name, topic));
+
560 },
+
561 [&](const realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64>>&) {
+
562 subscriptions_.push_back(create_subscription<std_msgs::msg::Float64>(name, topic));
+
563 },
+
564 [&](const realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64MultiArray>>&) {
+ +
566 },
+
567 [&](const realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Int32>>&) {
+
568 subscriptions_.push_back(create_subscription<std_msgs::msg::Int32>(name, topic));
+
569 },
+
570 [&](const realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::String>>&) {
+
571 subscriptions_.push_back(create_subscription<std_msgs::msg::String>(name, topic));
+
572 }},
+
573 input.buffer);
+
574 } catch (const std::exception& ex) {
+
575 RCLCPP_ERROR(get_node()->get_logger(), "Failed to add input '%s': %s", name.c_str(), ex.what());
+
576 }
+
577 }
+
578}
+
579
+
580void ControllerInterface::create_output(
+
581 const PublisherVariant& publishers, const std::string& name, const std::string& topic_name) {
+
582 auto parsed_name = validate_and_declare_signal(name, "output", topic_name);
+
583 if (!parsed_name.empty()) {
+
584 outputs_.insert_or_assign(name, publishers);
+
585 }
+
586}
+
587
+
588void ControllerInterface::add_outputs() {
+
589 for (auto& [name, publishers] : outputs_) {
+
590 try {
+ +
592 std::visit(
+
593 overloaded{
+
594 [&](EncodedStatePublishers& pub) {
+
595 std::get<1>(pub) = get_node()->create_publisher<modulo_core::EncodedState>(topic, qos_);
+
596 std::get<2>(pub) =
+
597 std::make_shared<realtime_tools::RealtimePublisher<modulo_core::EncodedState>>(std::get<1>(pub));
+
598 },
+
599 [&](BoolPublishers& pub) {
+
600 pub.first = get_node()->create_publisher<std_msgs::msg::Bool>(topic, qos_);
+
601 pub.second = std::make_shared<realtime_tools::RealtimePublisher<std_msgs::msg::Bool>>(pub.first);
+
602 },
+
603 [&](DoublePublishers& pub) {
+
604 pub.first = get_node()->create_publisher<std_msgs::msg::Float64>(topic, qos_);
+
605 pub.second = std::make_shared<realtime_tools::RealtimePublisher<std_msgs::msg::Float64>>(pub.first);
+
606 },
+
607 [&](DoubleVecPublishers& pub) {
+
608 pub.first = get_node()->create_publisher<std_msgs::msg::Float64MultiArray>(topic, qos_);
+
609 pub.second =
+
610 std::make_shared<realtime_tools::RealtimePublisher<std_msgs::msg::Float64MultiArray>>(pub.first);
+
611 },
+
612 [&](IntPublishers& pub) {
+
613 pub.first = get_node()->create_publisher<std_msgs::msg::Int32>(topic, qos_);
+
614 pub.second = std::make_shared<realtime_tools::RealtimePublisher<std_msgs::msg::Int32>>(pub.first);
+
615 },
+
616 [&](StringPublishers& pub) {
+
617 pub.first = get_node()->create_publisher<std_msgs::msg::String>(topic, qos_);
+
618 pub.second = std::make_shared<realtime_tools::RealtimePublisher<std_msgs::msg::String>>(pub.first);
+
619 }},
+
620 publishers);
+
621 } catch (const std::exception& ex) {
+
622 RCLCPP_ERROR(get_node()->get_logger(), "Failed to add input '%s': %s", name.c_str(), ex.what());
+
623 }
+
624 }
+
625}
+
626
+
627bool ControllerInterface::check_input_valid(const std::string& name) const {
+
628 if (inputs_.find(name) == inputs_.end()) {
+ +
630 get_node()->get_logger(), *get_node()->get_clock(), 1000, "Could not find input '%s'", name.c_str());
+
631 return false;
+
632 }
+
633 if (static_cast<double>(std::chrono::duration_cast<std::chrono::nanoseconds>(
+
634 std::chrono::steady_clock::now() - inputs_.at(name).timestamp)
+
635 .count())
+
636 / 1e9
+
637 >= input_validity_period_) {
+
638 return false;
+
639 }
+
640 return true;
+
641}
+
642
+
643std::string ControllerInterface::validate_service_name(const std::string& service_name, const std::string& type) const {
+
644 std::string parsed_service_name = utilities::parse_topic_name(service_name);
+
645 if (parsed_service_name.empty()) {
+ +
647 get_node()->get_logger(),
+
648 "The parsed service name for %s service '%s' is empty. Provide a string with valid characters for the service "
+
649 "name "
+
650 "([a-zA-Z0-9_]).",
+
651 type.c_str(), service_name.c_str());
+
652 return "";
+
653 }
+ + +
656 get_node()->get_logger(),
+
657 "The parsed name for '%s' service '%s' is '%s'. Use the parsed name to refer to this service.", type.c_str(),
+
658 service_name.c_str(), parsed_service_name.c_str());
+
659 }
+
660 if (empty_services_.find(parsed_service_name) != empty_services_.cend()) {
+ +
662 get_node()->get_logger(), "Service with name '%s' already exists as empty service.",
+
663 parsed_service_name.c_str());
+
664 return "";
+
665 }
+
666 if (string_services_.find(parsed_service_name) != string_services_.cend()) {
+ +
668 get_node()->get_logger(), "Service with name '%s' already exists as string service.",
+
669 parsed_service_name.c_str());
+
670 return "";
+
671 }
+
672 RCLCPP_DEBUG(get_node()->get_logger(), "Adding %s service '%s'.", type.c_str(), parsed_service_name.c_str());
+
673 return parsed_service_name;
+
674}
+
675
+
+ +
677 const std::string& service_name, const std::function<ControllerServiceResponse(void)>& callback) {
+
678 auto parsed_service_name = validate_service_name(service_name, "empty");
+
679 if (!parsed_service_name.empty()) {
+
680 try {
+
681 auto service = get_node()->create_service<modulo_component_interfaces::srv::EmptyTrigger>(
+
682 "~/" + parsed_service_name,
+
683 [this, callback](
+
684 const std::shared_ptr<modulo_component_interfaces::srv::EmptyTrigger::Request>,
+
685 std::shared_ptr<modulo_component_interfaces::srv::EmptyTrigger::Response> response) {
+
686 try {
+
687 if (this->command_mutex_.try_lock_for(100ms)) {
+ +
689 this->command_mutex_.unlock();
+
690 response->success = callback_response.success;
+
691 response->message = callback_response.message;
+
692 } else {
+
693 response->success = false;
+
694 response->message = "Unable to acquire lock for command interface within 100ms";
+
695 }
+
696 } catch (const std::exception& ex) {
+
697 response->success = false;
+
698 response->message = ex.what();
+
699 }
+
700 },
+
701 qos_);
+
702 empty_services_.insert_or_assign(parsed_service_name, service);
+
703 } catch (const std::exception& ex) {
+
704 RCLCPP_ERROR(get_node()->get_logger(), "Failed to add service '%s': %s", parsed_service_name.c_str(), ex.what());
+
705 }
+
706 }
+
707}
+
+
708
+
+ +
710 const std::string& service_name,
+
711 const std::function<ControllerServiceResponse(const std::string& string)>& callback) {
+
712 auto parsed_service_name = validate_service_name(service_name, "string");
+
713 if (!parsed_service_name.empty()) {
+
714 try {
+
715 auto service = get_node()->create_service<modulo_component_interfaces::srv::StringTrigger>(
+
716 "~/" + parsed_service_name,
+
717 [this, callback](
+
718 const std::shared_ptr<modulo_component_interfaces::srv::StringTrigger::Request> request,
+
719 std::shared_ptr<modulo_component_interfaces::srv::StringTrigger::Response> response) {
+
720 try {
+
721 if (this->command_mutex_.try_lock_for(100ms)) {
+
722 auto callback_response = callback(request->payload);
+
723 this->command_mutex_.unlock();
+
724 response->success = callback_response.success;
+
725 response->message = callback_response.message;
+
726 } else {
+
727 response->success = false;
+
728 response->message = "Unable to acquire lock for command interface within 100ms";
+
729 }
+
730 } catch (const std::exception& ex) {
+
731 response->success = false;
+
732 response->message = ex.what();
+
733 }
+
734 },
+
735 qos_);
+
736 string_services_.insert_or_assign(parsed_service_name, service);
+
737 } catch (const std::exception& ex) {
+
738 RCLCPP_ERROR(get_node()->get_logger(), "Failed to add service '%s': %s", parsed_service_name.c_str(), ex.what());
+
739 }
+
740 }
+
741}
+
+
742
+
+
743rclcpp::QoS ControllerInterface::get_qos() const {
+
744 return qos_;
+
745}
+
+
746
+
+
747void ControllerInterface::set_qos(const rclcpp::QoS& qos) {
+
748 qos_ = qos;
+
749}
+
+
750
+
+ +
752 return get_node()->get_current_state().label() == "active";
+
753}
+
+
754
+
755}// namespace modulo_controllers
+
Base controller class to combine ros2_control, control libraries and modulo.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
rclcpp::QoS get_qos() const
Getter of the Quality of Service attribute.
+
void add_predicate(const std::string &predicate_name, bool predicate_value)
Add a predicate to the map of predicates.
+
void set_predicate(const std::string &predicate_name, bool predicate_value)
Set the value of the predicate given as parameter, if the predicate is not found does not do anything...
+
controller_interface::InterfaceConfiguration command_interface_configuration() const final
Configure the command interfaces.
+
virtual controller_interface::return_type write_command_interfaces(const rclcpp::Duration &period)
Write the command interfaces.
+
virtual CallbackReturn on_configure()
Configure the controller.
+
virtual controller_interface::return_type evaluate(const rclcpp::Time &time, const std::chrono::nanoseconds &period)=0
The control logic callback.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
virtual controller_interface::return_type read_state_interfaces()
Read the state interfaces.
+
std::unordered_map< std::string, double > get_state_interfaces(const std::string &name) const
Get a map containing the state interfaces by name of the parent tag.
+
bool is_active() const
Check if the controller is currently in state active or not.
+
CallbackReturn on_init() override
Declare parameters and register the on_set_parameters callback.
+
void set_qos(const rclcpp::QoS &qos)
Set the Quality of Service for ROS publishers and subscribers.
+
void trigger(const std::string &trigger_name)
Latch the trigger with the provided name.
+
bool get_predicate(const std::string &predicate_name) const
Get the logical value of a predicate.
+
ControllerInterface(bool claim_all_state_interfaces=false)
Default constructor.
+
void add_state_interface(const std::string &name, const std::string &interface)
Add a state interface to the controller by name.
+
double get_command_interface(const std::string &name, const std::string &interface) const
Get the value of a command interface by name.
+
virtual CallbackReturn on_activate()
Activate the controller.
+
void add_service(const std::string &service_name, const std::function< ControllerServiceResponse(void)> &callback)
Add a service to trigger a callback function with no input arguments.
+
double get_state_interface(const std::string &name, const std::string &interface) const
Get the value of a state interface by name.
+
controller_interface::return_type update(const rclcpp::Time &time, const rclcpp::Duration &period) final
Read the state interfaces, perform control evaluation and write the command interfaces.
+
void set_command_interface(const std::string &name, const std::string &interface, double value)
Set the value of a command interface by name.
+
void add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
Add a parameter.
+
void add_trigger(const std::string &trigger_name)
Add a trigger to the controller.
+
std::string hardware_name_
The hardware name provided by a parameter.
+
virtual CallbackReturn on_deactivate()
Deactivate the controller.
+
void add_command_interface(const std::string &name, const std::string &interface)
Add a command interface to the controller by name.
+
controller_interface::InterfaceConfiguration state_interface_configuration() const final
Configure the state interfaces.
+
virtual bool on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Parameter validation function to be redefined by derived controller classes.
+
rclcpp::Parameter write_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Write a ROS Parameter from a ParameterInterface pointer.
+
rclcpp::ParameterType get_ros_parameter_type(const state_representation::ParameterType &parameter_type)
Given a state representation parameter type, get the corresponding ROS parameter type.
+
void copy_parameter_value(const std::shared_ptr< const state_representation::ParameterInterface > &source_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Copy the value of one parameter interface into another.
+
std::shared_ptr< state_representation::ParameterInterface > read_parameter_const(const rclcpp::Parameter &ros_parameter, const std::shared_ptr< const state_representation::ParameterInterface > &parameter)
Update the parameter value of a ParameterInterface from a ROS Parameter object only if the two parame...
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+
Response structure to be returned by controller services.
+
+ + + + diff --git a/versions/v4.2.2/_controller_interface_8hpp_source.html b/versions/v4.2.2/_controller_interface_8hpp_source.html new file mode 100644 index 000000000..228681cda --- /dev/null +++ b/versions/v4.2.2/_controller_interface_8hpp_source.html @@ -0,0 +1,720 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/include/modulo_controllers/ControllerInterface.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ControllerInterface.hpp
+
+
+
1#pragma once
+
2
+
3#include <mutex>
+
4
+
5#include <controller_interface/controller_interface.hpp>
+
6#include <controller_interface/helpers.hpp>
+
7#include <realtime_tools/realtime_buffer.h>
+
8#include <realtime_tools/realtime_publisher.h>
+
9
+
10#include <state_representation/parameters/ParameterMap.hpp>
+
11
+
12#include <modulo_core/EncodedState.hpp>
+
13#include <modulo_core/communication/MessagePair.hpp>
+
14#include <modulo_core/translators/message_writers.hpp>
+
15#include <modulo_core/translators/parameter_translators.hpp>
+
16#include <modulo_interfaces/msg/predicate_collection.hpp>
+
17
+
18#include "modulo_controllers/utils/utilities.hpp"
+
19
+
20#include <modulo_component_interfaces/srv/empty_trigger.hpp>
+
21#include <modulo_component_interfaces/srv/string_trigger.hpp>
+
22
+
23namespace modulo_controllers {
+
24
+
25typedef std::variant<
+
26 std::shared_ptr<rclcpp::Subscription<modulo_core::EncodedState>>,
+
27 std::shared_ptr<rclcpp::Subscription<std_msgs::msg::Bool>>,
+
28 std::shared_ptr<rclcpp::Subscription<std_msgs::msg::Float64>>,
+
29 std::shared_ptr<rclcpp::Subscription<std_msgs::msg::Float64MultiArray>>,
+
30 std::shared_ptr<rclcpp::Subscription<std_msgs::msg::Int32>>,
+
31 std::shared_ptr<rclcpp::Subscription<std_msgs::msg::String>>>
+
32 SubscriptionVariant;
+
33
+
34typedef std::variant<
+
35 realtime_tools::RealtimeBuffer<std::shared_ptr<modulo_core::EncodedState>>,
+
36 realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Bool>>,
+
37 realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64>>,
+
38 realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64MultiArray>>,
+
39 realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Int32>>,
+
40 realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::String>>>
+
41 BufferVariant;
+
42
+
43typedef std::tuple<
+
44 std::shared_ptr<state_representation::State>,
+
45 std::shared_ptr<rclcpp::Publisher<modulo_core::EncodedState>>,
+
46 realtime_tools::RealtimePublisherSharedPtr<modulo_core::EncodedState>>
+
47 EncodedStatePublishers;
+
48typedef std::pair<
+
49 std::shared_ptr<rclcpp::Publisher<std_msgs::msg::Bool>>,
+
50 realtime_tools::RealtimePublisherSharedPtr<std_msgs::msg::Bool>>
+
51 BoolPublishers;
+
52typedef std::pair<
+
53 std::shared_ptr<rclcpp::Publisher<std_msgs::msg::Float64>>,
+
54 realtime_tools::RealtimePublisherSharedPtr<std_msgs::msg::Float64>>
+
55 DoublePublishers;
+
56typedef std::pair<
+
57 std::shared_ptr<rclcpp::Publisher<std_msgs::msg::Float64MultiArray>>,
+
58 realtime_tools::RealtimePublisherSharedPtr<std_msgs::msg::Float64MultiArray>>
+
59 DoubleVecPublishers;
+
60typedef std::pair<
+
61 std::shared_ptr<rclcpp::Publisher<std_msgs::msg::Int32>>,
+
62 realtime_tools::RealtimePublisherSharedPtr<std_msgs::msg::Int32>>
+
63 IntPublishers;
+
64typedef std::pair<
+
65 std::shared_ptr<rclcpp::Publisher<std_msgs::msg::String>>,
+
66 realtime_tools::RealtimePublisherSharedPtr<std_msgs::msg::String>>
+
67 StringPublishers;
+
68
+
69typedef std::variant<
+
70 EncodedStatePublishers, BoolPublishers, DoublePublishers, DoubleVecPublishers, IntPublishers, StringPublishers>
+
71 PublisherVariant;
+
72
+
+ +
78 ControllerInput(BufferVariant buffer_variant) : buffer(std::move(buffer_variant)) {}
+
79 BufferVariant buffer;
+
80 std::chrono::time_point<std::chrono::steady_clock> timestamp;
+
81};
+
+
82
+
+ +
90 bool success;
+
91 std::string message;
+
92};
+
+
93
+
+
98class ControllerInterface : public controller_interface::ControllerInterface {
+
99public:
+ +
105
+
110 CallbackReturn on_init() override;
+
111
+
118 CallbackReturn on_configure(const rclcpp_lifecycle::State& previous_state) final;
+
119
+
126 CallbackReturn on_activate(const rclcpp_lifecycle::State& previous_state) final;
+
127
+
133 CallbackReturn on_deactivate(const rclcpp_lifecycle::State& previous_state) final;
+
134
+
141 controller_interface::return_type update(const rclcpp::Time& time, const rclcpp::Duration& period) final;
+
142
+
147 controller_interface::InterfaceConfiguration state_interface_configuration() const final;
+
148
+
153 controller_interface::InterfaceConfiguration command_interface_configuration() const final;
+
154
+
155protected:
+ +
162
+
168 virtual CallbackReturn on_activate();
+
169
+ +
176
+
181 virtual controller_interface::return_type read_state_interfaces();
+
182
+
188 virtual controller_interface::return_type write_command_interfaces(const rclcpp::Duration& period);
+
189
+
198 virtual controller_interface::return_type
+
199 evaluate(const rclcpp::Time& time, const std::chrono::nanoseconds& period) = 0;
+
200
+
206 void add_state_interface(const std::string& name, const std::string& interface);
+
207
+
213 void add_command_interface(const std::string& name, const std::string& interface);
+
214
+
221 std::unordered_map<std::string, double> get_state_interfaces(const std::string& name) const;
+
222
+
230 double get_state_interface(const std::string& name, const std::string& interface) const;
+
231
+
239 double get_command_interface(const std::string& name, const std::string& interface) const;
+
240
+
247 void set_command_interface(const std::string& name, const std::string& interface, double value);
+
248
+ +
258 const std::shared_ptr<state_representation::ParameterInterface>& parameter, const std::string& description,
+
259 bool read_only = false);
+
260
+
271 template<typename T>
+
272 void add_parameter(const std::string& name, const T& value, const std::string& description, bool read_only = false);
+
273
+
284 virtual bool
+
285 on_validate_parameter_callback(const std::shared_ptr<state_representation::ParameterInterface>& parameter);
+
286
+
292 [[nodiscard]] std::shared_ptr<state_representation::ParameterInterface> get_parameter(const std::string& name) const;
+
293
+
300 template<typename T>
+
301 T get_parameter_value(const std::string& name) const;
+
302
+
311 template<typename T>
+
312 void set_parameter_value(const std::string& name, const T& value);
+
313
+
319 void add_predicate(const std::string& predicate_name, bool predicate_value);
+
320
+
326 void add_predicate(const std::string& predicate_name, const std::function<bool(void)>& predicate_function);
+
327
+
334 [[nodiscard]] bool get_predicate(const std::string& predicate_name) const;
+
335
+
343 void set_predicate(const std::string& predicate_name, bool predicate_value);
+
344
+
352 void set_predicate(const std::string& predicate_name, const std::function<bool(void)>& predicate_function);
+
353
+
360 void add_trigger(const std::string& trigger_name);
+
361
+
366 void trigger(const std::string& trigger_name);
+
367
+
376 template<typename T>
+
377 void add_input(const std::string& name, const std::string& topic_name = "");
+
378
+
387 template<typename T>
+
388 void add_output(const std::string& name, const std::string& topic_name = "");
+
389
+
397 template<typename T>
+
398 std::optional<T> read_input(const std::string& name);
+
399
+
408 template<typename T>
+
409 void write_output(const std::string& name, const T& data);
+
410
+
416 void add_service(const std::string& service_name, const std::function<ControllerServiceResponse(void)>& callback);
+
417
+
426 void add_service(
+
427 const std::string& service_name,
+
428 const std::function<ControllerServiceResponse(const std::string& string)>& callback);
+
429
+
434 [[nodiscard]] rclcpp::QoS get_qos() const;
+
435
+
440 void set_qos(const rclcpp::QoS& qos);
+
441
+
446 bool is_active() const;
+
447
+
448 std::string hardware_name_;
+
449
+
450private:
+
458 void add_interface(
+
459 const std::string& name, const std::string& interface, std::vector<std::string>& list, const std::string& type);
+
460
+
468 bool validate_parameter(const std::shared_ptr<state_representation::ParameterInterface>& parameter);
+
469
+
475 rcl_interfaces::msg::SetParametersResult on_set_parameters_callback(const std::vector<rclcpp::Parameter>& parameters);
+
476
+
482 void add_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate);
+
483
+
489 void set_variant_predicate(const std::string& name, const utilities::PredicateVariant& predicate);
+
490
+
495 modulo_interfaces::msg::Predicate get_predicate_message(const std::string& name) const;
+
496
+
501 void publish_predicate(const std::string& name) const;
+
502
+
506 void publish_predicates() const;
+
507
+
515 std::string validate_and_declare_signal(
+
516 const std::string& signal_name, const std::string& type, const std::string& default_topic,
+
517 bool fixed_topic = false);
+
518
+
527 void create_input(const ControllerInput& input, const std::string& name, const std::string& topic_name);
+
528
+
537 void create_output(const PublisherVariant& publishers, const std::string& name, const std::string& topic_name);
+
538
+
545 template<typename T>
+
546 std::shared_ptr<rclcpp::Subscription<T>> create_subscription(const std::string& name, const std::string& topic_name);
+
547
+
552 bool check_input_valid(const std::string& name) const;
+
553
+
557 template<typename PublisherT, typename MsgT, typename T>
+
558 void write_std_output(const std::string& name, const T& data);
+
559
+
563 void add_inputs();
+
564
+
568 void add_outputs();
+
569
+
576 std::string validate_service_name(const std::string& service_name, const std::string& type) const;
+
577
+
578 using controller_interface::ControllerInterfaceBase::command_interfaces_;
+
579 using controller_interface::ControllerInterfaceBase::state_interfaces_;
+
580
+
581 state_representation::ParameterMap parameter_map_;
+
582 bool set_parameter_callback_called_ = false;
+
583 std::shared_ptr<rclcpp::node_interfaces::OnSetParametersCallbackHandle>
+
584 parameter_cb_handle_;
+
585
+
586 std::vector<SubscriptionVariant> subscriptions_;
+
587 std::map<std::string, ControllerInput> inputs_;
+
588 std::map<std::string, std::shared_ptr<modulo_core::communication::MessagePairInterface>>
+
589 input_message_pairs_;
+
590 std::map<std::string, PublisherVariant> outputs_;
+
591 double input_validity_period_;
+
592 rclcpp::QoS qos_ = rclcpp::QoS(10);
+
593
+
594 std::map<std::string, std::shared_ptr<rclcpp::Service<modulo_component_interfaces::srv::EmptyTrigger>>>
+
595 empty_services_;
+
596 std::map<std::string, std::shared_ptr<rclcpp::Service<modulo_component_interfaces::srv::StringTrigger>>>
+
597 string_services_;
+
598
+
599 std::map<std::string, utilities::PredicateVariant> predicates_;
+
600 std::shared_ptr<rclcpp::Publisher<modulo_interfaces::msg::PredicateCollection>>
+
601 predicate_publisher_;
+
602 std::map<std::string, bool> triggers_;
+
603 modulo_interfaces::msg::PredicateCollection predicate_message_;
+
604 std::shared_ptr<rclcpp::TimerBase> predicate_timer_;
+
605
+
606 std::unordered_map<std::string, std::unordered_map<std::string, double>>
+
607 state_interface_data_;
+
608 std::vector<double> command_interface_data_;
+
609 std::unordered_map<std::string, std::unordered_map<std::string, unsigned int>>
+
610 command_interface_indices_;
+
611 std::vector<std::string> state_interface_names_;
+
612 std::vector<std::string> command_interface_names_;
+
613 bool claim_all_state_interfaces_;
+
614
+
615 std::timed_mutex command_mutex_;
+
616 // TODO make missed_locks an internal parameter
+
617 unsigned int missed_locks_;
+
618 bool on_init_called_;
+
619};
+
+
620
+
621template<typename T>
+
+ +
623 const std::string& name, const T& value, const std::string& description, bool read_only) {
+
624 if (name.empty()) {
+
625 RCLCPP_ERROR(get_node()->get_logger(), "Failed to add parameter: Provide a non empty string as a name.");
+
626 return;
+
627 }
+
628 add_parameter(state_representation::make_shared_parameter(name, value), description, read_only);
+
629}
+
+
630
+
631template<typename T>
+
+
632inline T ControllerInterface::get_parameter_value(const std::string& name) const {
+
633 return parameter_map_.template get_parameter_value<T>(name);
+
634}
+
+
635
+
636template<typename T>
+
+
637inline void ControllerInterface::set_parameter_value(const std::string& name, const T& value) {
+
638 try {
+
639 rcl_interfaces::msg::SetParametersResult result =
+
640 get_node()
+
641 ->set_parameters(
+
642 {modulo_core::translators::write_parameter(state_representation::make_shared_parameter(name, value))})
+
643 .at(0);
+
644 if (!result.successful) {
+ +
646 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
647 "Failed to set parameter value of parameter '%s': %s", name.c_str(), result.reason.c_str());
+
648 }
+
649 } catch (const std::exception& ex) {
+ +
651 get_node()->get_logger(), *get_node()->get_clock(), 1000, "Failed to set parameter value of parameter '%s': %s",
+
652 name.c_str(), ex.what());
+
653 }
+
654}
+
+
655
+
656template<typename T>
+
+
657inline void ControllerInterface::add_input(const std::string& name, const std::string& topic_name) {
+
658 auto buffer = realtime_tools::RealtimeBuffer<std::shared_ptr<modulo_core::EncodedState>>();
+
659 auto input = ControllerInput(buffer);
+
660 create_input(input, name, topic_name);
+
661 input_message_pairs_.insert_or_assign(
+
662 name, modulo_core::communication::make_shared_message_pair(std::make_shared<T>(), get_node()->get_clock()));
+
663}
+
+
664
+
665template<>
+
666inline void ControllerInterface::add_input<bool>(const std::string& name, const std::string& topic_name) {
+
667 auto buffer = realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Bool>>();
+
668 auto input = ControllerInput(buffer);
+
669 create_input(input, name, topic_name);
+
670}
+
671
+
672template<>
+
673inline void ControllerInterface::add_input<double>(const std::string& name, const std::string& topic_name) {
+
674 auto buffer = realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64>>();
+
675 auto input = ControllerInput(buffer);
+
676 create_input(input, name, topic_name);
+
677}
+
678
+
679template<>
+
680inline void
+
681ControllerInterface::add_input<std::vector<double>>(const std::string& name, const std::string& topic_name) {
+
682 auto buffer = realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64MultiArray>>();
+
683 auto input = ControllerInput(buffer);
+
684 create_input(input, name, topic_name);
+
685}
+
686
+
687template<>
+
688inline void ControllerInterface::add_input<int>(const std::string& name, const std::string& topic_name) {
+
689 auto buffer = realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Int32>>();
+
690 auto input = ControllerInput(buffer);
+
691 create_input(input, name, topic_name);
+
692}
+
693
+
694template<>
+
695inline void ControllerInterface::add_input<std::string>(const std::string& name, const std::string& topic_name) {
+
696 auto buffer = realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::String>>();
+
697 auto input = ControllerInput(buffer);
+
698 create_input(input, name, topic_name);
+
699}
+
700
+
701template<typename T>
+
702inline std::shared_ptr<rclcpp::Subscription<T>>
+
703ControllerInterface::create_subscription(const std::string& name, const std::string& topic_name) {
+
704 return get_node()->create_subscription<T>(topic_name, qos_, [this, name](const std::shared_ptr<T> message) {
+
705 std::get<realtime_tools::RealtimeBuffer<std::shared_ptr<T>>>(inputs_.at(name).buffer).writeFromNonRT(message);
+
706 inputs_.at(name).timestamp = std::chrono::steady_clock::now();
+
707 });
+
708}
+
709
+
710template<typename T>
+
+
711inline void ControllerInterface::add_output(const std::string& name, const std::string& topic_name) {
+
712 std::shared_ptr<state_representation::State> state_ptr = std::make_shared<T>();
+
713 create_output(EncodedStatePublishers(state_ptr, {}, {}), name, topic_name);
+
714}
+
+
715
+
716template<>
+
717inline void ControllerInterface::add_output<bool>(const std::string& name, const std::string& topic_name) {
+
718 create_output(BoolPublishers(), name, topic_name);
+
719}
+
720
+
721template<>
+
722inline void ControllerInterface::add_output<double>(const std::string& name, const std::string& topic_name) {
+
723 create_output(DoublePublishers(), name, topic_name);
+
724}
+
725
+
726template<>
+
727inline void
+
728ControllerInterface::add_output<std::vector<double>>(const std::string& name, const std::string& topic_name) {
+
729 create_output(DoubleVecPublishers(), name, topic_name);
+
730}
+
731
+
732template<>
+
733inline void ControllerInterface::add_output<int>(const std::string& name, const std::string& topic_name) {
+
734 create_output(IntPublishers(), name, topic_name);
+
735}
+
736
+
737template<>
+
738inline void ControllerInterface::add_output<std::string>(const std::string& name, const std::string& topic_name) {
+
739 create_output(StringPublishers(), name, topic_name);
+
740}
+
741
+
742template<typename T>
+
+
743inline std::optional<T> ControllerInterface::read_input(const std::string& name) {
+
744 if (!check_input_valid(name)) {
+
745 return {};
+
746 }
+
747 auto message =
+
748 **std::get<realtime_tools::RealtimeBuffer<std::shared_ptr<modulo_core::EncodedState>>>(inputs_.at(name).buffer)
+
749 .readFromNonRT();
+
750 std::shared_ptr<state_representation::State> state;
+
751 try {
+
752 auto message_pair = input_message_pairs_.at(name);
+
753 message_pair->read<modulo_core::EncodedState, state_representation::State>(message);
+
754 state = message_pair->get_message_pair<modulo_core::EncodedState, state_representation::State>()->get_data();
+
755 } catch (const std::exception& ex) {
+ +
757 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
758 "Could not read EncodedState message on input '%s': %s", name.c_str(), ex.what());
+
759 return {};
+
760 }
+
761 if (state->is_empty()) {
+
762 return {};
+
763 }
+
764 auto cast_ptr = std::dynamic_pointer_cast<T>(state);
+
765 if (cast_ptr != nullptr) {
+
766 return *cast_ptr;
+
767 } else {
+ +
769 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
770 "Dynamic cast of message on input '%s' from type '%s' to type '%s' failed.", name.c_str(),
+
771 get_state_type_name(state->get_type()), get_state_type_name(T().get_type()));
+
772 }
+
773 return {};
+
774}
+
+
775
+
776template<>
+
777inline std::optional<bool> ControllerInterface::read_input<bool>(const std::string& name) {
+
778 if (!check_input_valid(name)) {
+
779 return {};
+
780 }
+
781 // no need to check for emptiness of the pointer: timestamps are default constructed to 0, so an input being valid
+
782 // means that a message was received
+
783 return (*std::get<realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Bool>>>(inputs_.at(name).buffer)
+
784 .readFromNonRT())
+
785 ->data;
+
786}
+
787
+
788template<>
+
789inline std::optional<double> ControllerInterface::read_input<double>(const std::string& name) {
+
790 if (!check_input_valid(name)) {
+
791 return {};
+
792 }
+
793 return (*std::get<realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64>>>(inputs_.at(name).buffer)
+
794 .readFromNonRT())
+
795 ->data;
+
796}
+
797
+
798template<>
+
799inline std::optional<std::vector<double>>
+ +
801 if (!check_input_valid(name)) {
+
802 return {};
+
803 }
+
804 return (*std::get<realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Float64MultiArray>>>(
+
805 inputs_.at(name).buffer)
+
806 .readFromNonRT())
+
807 ->data;
+
808}
+
809
+
810template<>
+
811inline std::optional<int> ControllerInterface::read_input<int>(const std::string& name) {
+
812 if (!check_input_valid(name)) {
+
813 return {};
+
814 }
+
815 return (*std::get<realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::Int32>>>(inputs_.at(name).buffer)
+
816 .readFromNonRT())
+
817 ->data;
+
818}
+
819
+
820template<>
+
821inline std::optional<std::string> ControllerInterface::read_input<std::string>(const std::string& name) {
+
822 if (!check_input_valid(name)) {
+
823 return {};
+
824 }
+
825 return (*std::get<realtime_tools::RealtimeBuffer<std::shared_ptr<std_msgs::msg::String>>>(inputs_.at(name).buffer)
+
826 .readFromNonRT())
+
827 ->data;
+
828}
+
829
+
830template<typename T>
+
+
831inline void ControllerInterface::write_output(const std::string& name, const T& data) {
+
832 if (data.is_empty()) {
+ +
834 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
835 "Skipping publication of output '%s' due to emptiness of state", name.c_str());
+
836 return;
+
837 }
+
838 if (outputs_.find(name) == outputs_.end()) {
+ +
840 get_node()->get_logger(), *get_node()->get_clock(), 1000, "Could not find output '%s'", name.c_str());
+
841 return;
+
842 }
+
843 EncodedStatePublishers publishers;
+
844 try {
+
845 publishers = std::get<EncodedStatePublishers>(outputs_.at(name));
+
846 } catch (const std::bad_variant_access&) {
+ +
848 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
849 "Could not retrieve publisher for output '%s': Invalid output type", name.c_str());
+
850 return;
+
851 }
+
852 if (const auto output_type = std::get<0>(publishers)->get_type(); output_type != data.get_type()) {
+ +
854 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
855 "Skipping publication of output '%s' due to wrong data type (expected '%s', got '%s')",
+
856 state_representation::get_state_type_name(output_type).c_str(),
+
857 state_representation::get_state_type_name(data.get_type()).c_str(), name.c_str());
+
858 return;
+
859 }
+
860 auto rt_pub = std::get<2>(publishers);
+
861 if (rt_pub && rt_pub->trylock()) {
+
862 try {
+
863 modulo_core::translators::write_message<T>(rt_pub->msg_, data, get_node()->get_clock()->now());
+ + +
866 get_node()->get_logger(), *get_node()->get_clock(), 1000, "Failed to publish output '%s': %s", name.c_str(),
+
867 ex.what());
+
868 }
+
869 rt_pub->unlockAndPublish();
+
870 }
+
871}
+
+
872
+
873template<typename PublisherT, typename MsgT, typename T>
+
874void ControllerInterface::write_std_output(const std::string& name, const T& data) {
+
875 if (outputs_.find(name) == outputs_.end()) {
+ +
877 get_node()->get_logger(), *get_node()->get_clock(), 1000, "Could not find output '%s'", name.c_str());
+
878 return;
+
879 }
+ +
881 try {
+
882 publishers = std::get<PublisherT>(outputs_.at(name));
+
883 } catch (const std::bad_variant_access&) {
+ +
885 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
886 "Could not retrieve publisher for output '%s': Invalid output type", name.c_str());
+
887 return;
+
888 }
+
889 auto rt_pub = publishers.second;
+
890 if (rt_pub && rt_pub->trylock()) {
+
891 rt_pub->msg_.data = data;
+
892 rt_pub->unlockAndPublish();
+
893 }
+
894}
+
895
+
896template<>
+
897inline void ControllerInterface::write_output(const std::string& name, const bool& data) {
+ +
899}
+
900
+
901template<>
+
902inline void ControllerInterface::write_output(const std::string& name, const double& data) {
+ +
904}
+
905
+
906template<>
+
907inline void ControllerInterface::write_output(const std::string& name, const std::vector<double>& data) {
+ +
909}
+
910
+
911template<>
+
912inline void ControllerInterface::write_output(const std::string& name, const int& data) {
+ +
914}
+
915
+
916template<>
+
917inline void ControllerInterface::write_output(const std::string& name, const std::string& data) {
+ +
919}
+
920
+
921}// namespace modulo_controllers
+
Base controller class to combine ros2_control, control libraries and modulo.
+
void add_output(const std::string &name, const std::string &topic_name="")
Add an output to the controller.
+
void write_output(const std::string &name, const T &data)
Write an object to an output.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
rclcpp::QoS get_qos() const
Getter of the Quality of Service attribute.
+
void add_predicate(const std::string &predicate_name, bool predicate_value)
Add a predicate to the map of predicates.
+
void set_predicate(const std::string &predicate_name, bool predicate_value)
Set the value of the predicate given as parameter, if the predicate is not found does not do anything...
+
controller_interface::InterfaceConfiguration command_interface_configuration() const final
Configure the command interfaces.
+
virtual controller_interface::return_type write_command_interfaces(const rclcpp::Duration &period)
Write the command interfaces.
+
virtual CallbackReturn on_configure()
Configure the controller.
+
virtual controller_interface::return_type evaluate(const rclcpp::Time &time, const std::chrono::nanoseconds &period)=0
The control logic callback.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
virtual controller_interface::return_type read_state_interfaces()
Read the state interfaces.
+
std::unordered_map< std::string, double > get_state_interfaces(const std::string &name) const
Get a map containing the state interfaces by name of the parent tag.
+
bool is_active() const
Check if the controller is currently in state active or not.
+
CallbackReturn on_init() override
Declare parameters and register the on_set_parameters callback.
+
void set_qos(const rclcpp::QoS &qos)
Set the Quality of Service for ROS publishers and subscribers.
+
void trigger(const std::string &trigger_name)
Latch the trigger with the provided name.
+
bool get_predicate(const std::string &predicate_name) const
Get the logical value of a predicate.
+
std::optional< T > read_input(const std::string &name)
Read the most recent message of an input.
+
void add_state_interface(const std::string &name, const std::string &interface)
Add a state interface to the controller by name.
+
double get_command_interface(const std::string &name, const std::string &interface) const
Get the value of a command interface by name.
+
virtual CallbackReturn on_activate()
Activate the controller.
+
void add_service(const std::string &service_name, const std::function< ControllerServiceResponse(void)> &callback)
Add a service to trigger a callback function with no input arguments.
+
double get_state_interface(const std::string &name, const std::string &interface) const
Get the value of a state interface by name.
+
controller_interface::return_type update(const rclcpp::Time &time, const rclcpp::Duration &period) final
Read the state interfaces, perform control evaluation and write the command interfaces.
+
void set_command_interface(const std::string &name, const std::string &interface, double value)
Set the value of a command interface by name.
+
void add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
Add a parameter.
+
void add_input(const std::string &name, const std::string &topic_name="")
Add an input to the controller.
+
void add_trigger(const std::string &trigger_name)
Add a trigger to the controller.
+
std::string hardware_name_
The hardware name provided by a parameter.
+
virtual CallbackReturn on_deactivate()
Deactivate the controller.
+
void set_parameter_value(const std::string &name, const T &value)
Set the value of a parameter.
+
void add_command_interface(const std::string &name, const std::string &interface)
Add a command interface to the controller by name.
+
controller_interface::InterfaceConfiguration state_interface_configuration() const final
Configure the state interfaces.
+
virtual bool on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Parameter validation function to be redefined by derived controller classes.
+
An exception class to notify that the translation of a ROS message failed.
+
rclcpp::Parameter write_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
Write a ROS Parameter from a ParameterInterface pointer.
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+
Input structure to save topic data in a realtime buffer and timestamps in one object.
+
Response structure to be returned by controller services.
+
+ + + + diff --git a/versions/v4.2.2/_core_exception_8hpp_source.html b/versions/v4.2.2/_core_exception_8hpp_source.html new file mode 100644 index 000000000..3ba6b77c4 --- /dev/null +++ b/versions/v4.2.2/_core_exception_8hpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/exceptions/CoreException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
CoreException.hpp
+
+
+
1#pragma once
+
2
+
3#include <stdexcept>
+
4#include <string>
+
5
+ +
11
+
+
17class CoreException : public std::runtime_error {
+
18public:
+
19 explicit CoreException(const std::string& msg) : CoreException("CoreException", msg) {};
+
20protected:
+
21 CoreException(const std::string& prefix, const std::string& msg) : std::runtime_error(prefix + ": " + msg) {}
+
22};
+
+
23}// namespace modulo_core::exceptions
+
A base class for all core exceptions.
+
Modulo Core exceptions module for defining exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_encoded_state_8hpp_source.html b/versions/v4.2.2/_encoded_state_8hpp_source.html new file mode 100644 index 000000000..f554f8c00 --- /dev/null +++ b/versions/v4.2.2/_encoded_state_8hpp_source.html @@ -0,0 +1,101 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/EncodedState.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
EncodedState.hpp
+
+
+
1#pragma once
+
2
+
3#include <std_msgs/msg/u_int8_multi_array.hpp>
+
4
+
9namespace modulo_core {
+
10
+
15typedef std_msgs::msg::UInt8MultiArray EncodedState;
+
16
+
17}// namespace modulo_core
+
Modulo Core.
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+
+ + + + diff --git a/versions/v4.2.2/_invalid_pointer_cast_exception_8hpp_source.html b/versions/v4.2.2/_invalid_pointer_cast_exception_8hpp_source.html new file mode 100644 index 000000000..cc47c7c8f --- /dev/null +++ b/versions/v4.2.2/_invalid_pointer_cast_exception_8hpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/exceptions/InvalidPointerCastException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
InvalidPointerCastException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_core/exceptions/CoreException.hpp"
+
4
+ +
6
+
+ +
13public:
+
14 explicit InvalidPointerCastException(const std::string& msg) : CoreException("InvalidPointerCastException", msg) {}
+
15};
+
+
16}// namespace modulo_core::exceptions
+
17
+
18
+
A base class for all core exceptions.
+
An exception class to notify if the result of getting an instance of a derived class through dynamic ...
+
Modulo Core exceptions module for defining exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_invalid_pointer_exception_8hpp_source.html b/versions/v4.2.2/_invalid_pointer_exception_8hpp_source.html new file mode 100644 index 000000000..7be5b914e --- /dev/null +++ b/versions/v4.2.2/_invalid_pointer_exception_8hpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/exceptions/InvalidPointerException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
InvalidPointerException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_core/exceptions/CoreException.hpp"
+
4
+ +
6
+
+ +
13public:
+
14 explicit InvalidPointerException(const std::string& msg) : CoreException("InvalidPointerException", msg) {}
+
15};
+
+
16}// namespace modulo_core::exceptions
+
17
+
A base class for all core exceptions.
+
An exception class to notify if an object has no reference count (if the object is not owned by any p...
+
Modulo Core exceptions module for defining exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_lifecycle_component_8cpp_source.html b/versions/v4.2.2/_lifecycle_component_8cpp_source.html new file mode 100644 index 000000000..191fb9dc2 --- /dev/null +++ b/versions/v4.2.2/_lifecycle_component_8cpp_source.html @@ -0,0 +1,458 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/src/LifecycleComponent.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LifecycleComponent.cpp
+
+
+
1#include "modulo_components/LifecycleComponent.hpp"
+
2
+
3#include "modulo_core/exceptions/CoreException.hpp"
+
4
+
5using namespace modulo_core::communication;
+
6using namespace rclcpp_lifecycle;
+
7
+
8namespace modulo_components {
+
9
+
+
10LifecycleComponent::LifecycleComponent(const rclcpp::NodeOptions& node_options, const std::string& fallback_name)
+
11 : LifecycleNode(
+
12 utilities::parse_node_name(node_options, fallback_name), utilities::modify_parameter_overrides(node_options)),
+
13 ComponentInterface(std::make_shared<rclcpp::node_interfaces::NodeInterfaces<ALL_RCLCPP_NODE_INTERFACES>>(
+
14 LifecycleNode::get_node_base_interface(), LifecycleNode::get_node_clock_interface(),
+
15 LifecycleNode::get_node_graph_interface(), LifecycleNode::get_node_logging_interface(),
+
16 LifecycleNode::get_node_parameters_interface(), LifecycleNode::get_node_services_interface(),
+
17 LifecycleNode::get_node_time_source_interface(), LifecycleNode::get_node_timers_interface(),
+
18 LifecycleNode::get_node_topics_interface(), LifecycleNode::get_node_waitables_interface())) {
+
19 this->add_predicate(
+
20 "is_unconfigured", [this] {
+
21 return this->get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED;
+
22 });
+
23 this->add_predicate(
+
24 "is_inactive", [this] {
+
25 return this->get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_INACTIVE;
+
26 });
+
27 this->add_predicate(
+
28 "is_active", [this] {
+
29 return this->get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE;
+
30 });
+
31 this->add_predicate(
+
32 "is_finalized", [this] {
+
33 return this->get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_FINALIZED;
+
34 });
+
35}
+
+
36
+
37std::shared_ptr<state_representation::ParameterInterface>
+
+
38LifecycleComponent::get_parameter(const std::string& name) const {
+ +
40}
+
+
41
+
42void LifecycleComponent::step() {
+
43 try {
+
44 if (this->get_predicate("is_active")) {
+
45 this->evaluate_periodic_callbacks();
+
46 this->on_step_callback();
+
47 this->publish_outputs();
+
48 }
+
49 this->publish_predicates();
+
50 } catch (const std::exception& ex) {
+
51 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to execute step function: " << ex.what());
+
52 // TODO handle error in lifecycle component
+
53// this->raise_error();
+
54 }
+
55}
+
56
+
57node_interfaces::LifecycleNodeInterface::CallbackReturn LifecycleComponent::on_configure(const State& previous_state) {
+
58 RCLCPP_DEBUG(this->get_logger(), "on_configure called from previous state %s", previous_state.label().c_str());
+
59 if (previous_state.id() != lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED) {
+
60 RCLCPP_WARN(get_logger(), "Invalid transition 'configure' from state %s.", previous_state.label().c_str());
+
61 return node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE;
+
62 }
+
63 if (!this->handle_configure()) {
+
64 RCLCPP_WARN(get_logger(), "Configuration failed! Reverting to the unconfigured state.");
+
65 // perform cleanup actions to ensure the component is unconfigured
+
66 if (this->handle_cleanup()) {
+
67 return node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE;
+
68 } else {
+ +
70 "Could not revert to the unconfigured state! Entering into the error processing transition state.");
+
71 return node_interfaces::LifecycleNodeInterface::CallbackReturn::ERROR;
+
72 }
+
73 }
+
74 return node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+
75}
+
76
+
77bool LifecycleComponent::handle_configure() {
+
78 bool result = this->on_configure_callback();
+
79 return result && this->configure_outputs();
+
80}
+
81
+
+ +
83 return true;
+
84}
+
+
85
+
86node_interfaces::LifecycleNodeInterface::CallbackReturn LifecycleComponent::on_cleanup(const State& previous_state) {
+
87 RCLCPP_DEBUG(this->get_logger(), "on_cleanup called from previous state %s", previous_state.label().c_str());
+
88 if (previous_state.id() != lifecycle_msgs::msg::State::PRIMARY_STATE_INACTIVE) {
+
89 RCLCPP_WARN(get_logger(), "Invalid transition 'cleanup' from state %s.", previous_state.label().c_str());
+
90 return node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE;
+
91 }
+
92 if (!this->handle_cleanup()) {
+
93 RCLCPP_ERROR(get_logger(), "Cleanup failed! Entering into the error processing transition state.");
+
94 return node_interfaces::LifecycleNodeInterface::CallbackReturn::ERROR;
+
95 }
+
96 return node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+
97}
+
98
+
99bool LifecycleComponent::handle_cleanup() {
+
100 return this->on_cleanup_callback();
+
101}
+
102
+
+ +
104 return true;
+
105}
+
+
106
+
107node_interfaces::LifecycleNodeInterface::CallbackReturn LifecycleComponent::on_activate(const State& previous_state) {
+
108 RCLCPP_DEBUG(this->get_logger(), "on_activate called from previous state %s", previous_state.label().c_str());
+
109 if (previous_state.id() != lifecycle_msgs::msg::State::PRIMARY_STATE_INACTIVE) {
+
110 RCLCPP_WARN(get_logger(), "Invalid transition 'activate' from state %s.", previous_state.label().c_str());
+
111 return node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE;
+
112 }
+
113 if (!this->handle_activate()) {
+
114 RCLCPP_WARN(get_logger(), "Activation failed! Reverting to the inactive state.");
+
115 // perform deactivation actions to ensure the component is inactive
+
116 if (this->handle_deactivate()) {
+
117 return node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE;
+
118 } else {
+ +
120 "Could not revert to the inactive state! Entering into the error processing transition state.");
+
121 return node_interfaces::LifecycleNodeInterface::CallbackReturn::ERROR;
+
122 }
+
123 }
+
124 return node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+
125}
+
126
+
127bool LifecycleComponent::handle_activate() {
+
128 bool result = this->activate_outputs();
+
129 return result && this->on_activate_callback();
+
130}
+
131
+
+ +
133 return true;
+
134}
+
+
135
+
136node_interfaces::LifecycleNodeInterface::CallbackReturn LifecycleComponent::on_deactivate(const State& previous_state) {
+
137 RCLCPP_DEBUG(this->get_logger(), "on_deactivate called from previous state %s", previous_state.label().c_str());
+
138 if (previous_state.id() != lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE) {
+
139 RCLCPP_WARN(get_logger(), "Invalid transition 'deactivate' from state %s.", previous_state.label().c_str());
+
140 return node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE;
+
141 }
+
142 if (!this->handle_deactivate()) {
+
143 RCLCPP_ERROR(get_logger(), "Deactivation failed! Entering into the error processing transition state.");
+
144 return node_interfaces::LifecycleNodeInterface::CallbackReturn::ERROR;
+
145 }
+
146 return node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+
147}
+
148
+
149bool LifecycleComponent::handle_deactivate() {
+
150 bool result = this->on_deactivate_callback();
+
151 return result && this->deactivate_outputs();
+
152}
+
153
+
+ +
155 return true;
+
156}
+
+
157
+
158node_interfaces::LifecycleNodeInterface::CallbackReturn LifecycleComponent::on_shutdown(const State& previous_state) {
+
159 RCLCPP_DEBUG(this->get_logger(), "on_shutdown called from previous state %s", previous_state.label().c_str());
+
160 switch (previous_state.id()) {
+
161 case lifecycle_msgs::msg::State::PRIMARY_STATE_FINALIZED:
+
162 return node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+
163 case lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE:
+
164 if (!this->handle_deactivate()) {
+
165 RCLCPP_DEBUG(get_logger(), "Shutdown failed during intermediate deactivation!");
+
166 break;
+
167 }
+
168 [[fallthrough]];
+
169 case lifecycle_msgs::msg::State::PRIMARY_STATE_INACTIVE:
+
170 if (!this->handle_cleanup()) {
+
171 RCLCPP_DEBUG(get_logger(), "Shutdown failed during intermediate cleanup!");
+
172 break;
+
173 }
+
174 [[fallthrough]];
+
175 case lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED:
+
176 if (!this->handle_shutdown()) {
+
177 break;
+
178 }
+
179 // TODO: reset and finalize all needed properties
+
180 // this->handlers_.clear();
+
181 // this->daemons_.clear();
+
182 // this->parameters_.clear();
+
183 // this->shutdown_ = true;
+
184 return node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+
185 default:
+
186 RCLCPP_WARN(get_logger(), "Invalid transition 'shutdown' from state %s.", previous_state.label().c_str());
+
187 break;
+
188 }
+
189 RCLCPP_ERROR(get_logger(), "Entering into the error processing transition state.");
+
190 return node_interfaces::LifecycleNodeInterface::CallbackReturn::ERROR;
+
191}
+
192
+
193bool LifecycleComponent::handle_shutdown() {
+
194 bool result = this->on_shutdown_callback();
+
195 return result && this->clear_signals();
+
196}
+
197
+
+ +
199 return true;
+
200}
+
+
201
+
202node_interfaces::LifecycleNodeInterface::CallbackReturn LifecycleComponent::on_error(const State& previous_state) {
+
203 RCLCPP_DEBUG(this->get_logger(), "on_error called from previous state %s", previous_state.label().c_str());
+
204 this->set_predicate("in_error_state", true);
+
205 bool error_handled;
+
206 try {
+
207 error_handled = this->handle_error();
+
208 } catch (const std::exception& ex) {
+
209 RCLCPP_DEBUG(this->get_logger(), "Exception caught during on_error handling: %s", ex.what());
+
210 error_handled = false;
+
211 }
+
212 if (!error_handled) {
+
213 RCLCPP_ERROR(get_logger(), "Error processing failed! Entering into the finalized state.");
+
214 // TODO: reset and finalize all needed properties
+
215 return node_interfaces::LifecycleNodeInterface::CallbackReturn::ERROR;
+
216 }
+
217 this->set_predicate("in_error_state", false);
+
218 return node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+
219}
+
220
+
221bool LifecycleComponent::handle_error() {
+
222 return this->on_error_callback();
+
223}
+
224
+
+ +
226 return true;
+
227}
+
+
228
+
229bool LifecycleComponent::configure_outputs() {
+
230 bool success = true;
+
231 for (auto& [name, interface] : this->outputs_) {
+
232 try {
+
233 auto topic_name = this->get_parameter_value<std::string>(name + "_topic");
+ +
235 "Configuring output '" << name << "' with topic name '" << topic_name << "'.");
+
236 auto message_pair = interface->get_message_pair();
+
237 switch (message_pair->get_type()) {
+
238 case MessageType::BOOL: {
+ +
240 interface = std::make_shared<
+ +
242 LifecyclePublisher<std_msgs::msg::Bool>, std_msgs::msg::Bool>>(
+
243 PublisherType::LIFECYCLE_PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
244 break;
+
245 }
+
246 case MessageType::FLOAT64: {
+
247 auto publisher = this->create_publisher<std_msgs::msg::Float64>(topic_name, this->get_qos());
+
248 interface = std::make_shared<
+ +
250 LifecyclePublisher<std_msgs::msg::Float64>, std_msgs::msg::Float64>>(
+
251 PublisherType::LIFECYCLE_PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
252 break;
+
253 }
+
254 case MessageType::FLOAT64_MULTI_ARRAY: {
+
255 auto publisher = this->create_publisher<std_msgs::msg::Float64MultiArray>(
+
256 topic_name, this->get_qos());
+
257 interface = std::make_shared<
+ +
259 LifecyclePublisher<std_msgs::msg::Float64MultiArray>, std_msgs::msg::Float64MultiArray>>(
+
260 PublisherType::LIFECYCLE_PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
261 break;
+
262 }
+
263 case MessageType::INT32: {
+
264 auto publisher = this->create_publisher<std_msgs::msg::Int32>(topic_name, this->get_qos());
+
265 interface = std::make_shared<
+ +
267 LifecyclePublisher<std_msgs::msg::Int32>, std_msgs::msg::Int32>>(
+
268 PublisherType::LIFECYCLE_PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
269 break;
+
270 }
+
271 case MessageType::STRING: {
+
272 auto publisher = this->create_publisher<std_msgs::msg::String>(topic_name, this->get_qos());
+
273 interface = std::make_shared<
+ +
275 LifecyclePublisher<std_msgs::msg::String>, std_msgs::msg::String>>(
+
276 PublisherType::LIFECYCLE_PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
277 break;
+
278 }
+
279 case MessageType::ENCODED_STATE: {
+
280 auto publisher = this->create_publisher<modulo_core::EncodedState>(topic_name, this->get_qos());
+
281 interface = std::make_shared<
+ +
283 LifecyclePublisher<modulo_core::EncodedState>, modulo_core::EncodedState>>(
+
284 PublisherType::LIFECYCLE_PUBLISHER, publisher)->create_publisher_interface(message_pair);
+
285 break;
+
286 }
+
287 }
+
288 } catch (const modulo_core::exceptions::CoreException& ex) {
+
289 success = false;
+
290 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to configure output '" << name << "': " << ex.what());
+
291 }
+
292 }
+
293 return success;
+
294}
+
295
+
296bool LifecycleComponent::clear_signals() {
+
297 RCLCPP_DEBUG(this->get_logger(), "Clearing all inputs and outputs.");
+
298 this->inputs_.clear();
+
299 this->outputs_.clear();
+
300 return true;
+
301}
+
302
+
303bool LifecycleComponent::activate_outputs() {
+
304 bool success = true;
+
305 for (auto const& [name, interface] : this->outputs_) {
+
306 try {
+
307 interface->activate();
+
308 } catch (const modulo_core::exceptions::CoreException& ex) {
+
309 success = false;
+
310 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to activate output '" << name << "': " << ex.what());
+
311 }
+
312 }
+
313 RCLCPP_DEBUG(this->get_logger(), "All outputs activated.");
+
314 return success;
+
315}
+
316
+
317bool LifecycleComponent::deactivate_outputs() {
+
318 bool success = true;
+
319 for (auto const& [name, interface] : this->outputs_) {
+
320 try {
+
321 interface->deactivate();
+
322 } catch (const modulo_core::exceptions::CoreException& ex) {
+
323 success = false;
+
324 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to deactivate output '" << name << "': " << ex.what());
+
325 }
+
326 }
+
327 RCLCPP_DEBUG(this->get_logger(), "All outputs deactivated.");
+
328 return success;
+
329}
+
330}// namespace modulo_components
+
Base interface class for modulo components to wrap a ROS Node with custom behaviour.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
virtual void on_step_callback()
Steps to execute periodically. To be redefined by derived Component classes.
+
void set_predicate(const std::string &predicate_name, bool predicate_value)
Set the value of the predicate given as parameter, if the predicate is not found does not do anything...
+
rclcpp::QoS get_qos() const
Getter of the Quality of Service attribute.
+
bool get_predicate(const std::string &predicate_name)
Get the logical value of a predicate.
+
void add_predicate(const std::string &predicate_name, bool predicate_value)
Add a predicate to the map of predicates.
+
virtual bool on_shutdown_callback()
Steps to execute when shutting down the component.
+
virtual bool on_deactivate_callback()
Steps to execute when deactivating the component.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
virtual bool on_activate_callback()
Steps to execute when activating the component.
+
virtual bool on_cleanup_callback()
Steps to execute when cleaning up the component.
+
LifecycleComponent(const rclcpp::NodeOptions &node_options, const std::string &fallback_name="LifecycleComponent")
Constructor from node options.
+
virtual bool on_error_callback()
Steps to execute when handling errors.
+
virtual bool on_configure_callback()
Steps to execute when configuring the component.
+
The PublisherHandler handles different types of ROS publishers to activate, deactivate and publish da...
+
A base class for all core exceptions.
+
Modulo components.
Definition Component.hpp:9
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
Modulo Core.
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+
+ + + + diff --git a/versions/v4.2.2/_lifecycle_component_8hpp_source.html b/versions/v4.2.2/_lifecycle_component_8hpp_source.html new file mode 100644 index 000000000..a92ad46b7 --- /dev/null +++ b/versions/v4.2.2/_lifecycle_component_8hpp_source.html @@ -0,0 +1,234 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/LifecycleComponent.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LifecycleComponent.hpp
+
+
+
1#pragma once
+
2
+
3#include <lifecycle_msgs/msg/state.hpp>
+
4#include <rclcpp_lifecycle/lifecycle_node.hpp>
+
5
+
6#include "modulo_components/ComponentInterface.hpp"
+
7
+
8namespace modulo_components {
+
9
+
+
29class LifecycleComponent : public rclcpp_lifecycle::LifecycleNode, public ComponentInterface {
+
30public:
+
31 friend class LifecycleComponentPublicInterface;
+
32
+
38 explicit LifecycleComponent(
+
39 const rclcpp::NodeOptions& node_options, const std::string& fallback_name = "LifecycleComponent"
+
40 );
+
41
+
45 virtual ~LifecycleComponent() = default;
+
46
+
47protected:
+
51 [[nodiscard]] std::shared_ptr<state_representation::ParameterInterface> get_parameter(const std::string& name) const;
+
52
+
59 virtual bool on_configure_callback();
+
60
+
67 virtual bool on_cleanup_callback();
+
68
+
75 virtual bool on_activate_callback();
+
76
+
83 virtual bool on_deactivate_callback();
+
84
+
91 virtual bool on_shutdown_callback();
+
92
+
99 virtual bool on_error_callback();
+
100
+
110 template<typename DataT>
+
111 void add_output(
+
112 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::string& default_topic = "",
+
113 bool fixed_topic = false, bool publish_on_step = true
+
114 );
+
115
+
116private:
+
127 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
128 on_configure(const rclcpp_lifecycle::State& previous_state) override;
+
129
+
135 bool handle_configure();
+
136
+
146 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
147 on_cleanup(const rclcpp_lifecycle::State& previous_state) override;
+
148
+
154 bool handle_cleanup();
+
155
+
166 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
167 on_activate(const rclcpp_lifecycle::State& previous_state) override;
+
168
+
174 bool handle_activate();
+
175
+
185 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
186 on_deactivate(const rclcpp_lifecycle::State& previous_state) override;
+
187
+
193 bool handle_deactivate();
+
194
+
204 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
205 on_shutdown(const rclcpp_lifecycle::State& previous_state) override;
+
206
+
212 bool handle_shutdown();
+
213
+
224 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
+
225 on_error(const rclcpp_lifecycle::State& previous_state) override;
+
226
+
232 bool handle_error();
+
233
+
238 void step() override;
+
239
+
244 bool configure_outputs();
+
245
+
250 bool activate_outputs();
+
251
+
256 bool deactivate_outputs();
+
257
+
261 bool clear_signals();
+
262
+
263 // TODO hide ROS methods
+ + + + + + + + + +
273 using rclcpp_lifecycle::LifecycleNode::get_parameter;
+
274};
+
+
275
+
276template<typename DataT>
+
+ +
278 const std::string& signal_name, const std::shared_ptr<DataT>& data, const std::string& default_topic,
+
279 bool fixed_topic, bool publish_on_step
+
280) {
+
281 if (this->get_current_state().id() != lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED
+
282 && this->get_current_state().id() != lifecycle_msgs::msg::State::PRIMARY_STATE_INACTIVE) {
+
283 RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000,
+
284 "Adding output in state " << this->get_current_state().label() << " is not allowed.");
+
285 return;
+
286 }
+
287 try {
+
288 this->create_output(
+
289 modulo_core::communication::PublisherType::LIFECYCLE_PUBLISHER, signal_name, data, default_topic, fixed_topic,
+ +
291 } catch (const exceptions::AddSignalException& ex) {
+
292 RCLCPP_ERROR_STREAM(this->get_logger(), "Failed to add output '" << signal_name << "': " << ex.what());
+
293 }
+
294}
+
+
295
+
296// TODO, if we raise error we need to manually call the lifecycle change state callback,
+
297// call callback function that this service calls
+
298}// namespace modulo_components
+
Base interface class for modulo components to wrap a ROS Node with custom behaviour.
+
void publish_outputs()
Helper function to publish all output signals.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::PublisherInterface > > outputs_
Map of outputs.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
void publish_predicates()
Helper function to publish all predicates.
+
std::string create_output(modulo_core::communication::PublisherType publisher_type, const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic, bool fixed_topic, bool publish_on_step)
Helper function to parse the signal name and add an unconfigured PublisherInterface to the map of out...
+
void publish_predicate(const std::string &name)
Helper function to publish a predicate.
+
std::map< std::string, std::shared_ptr< modulo_core::communication::SubscriptionInterface > > inputs_
Map of inputs.
+
void evaluate_periodic_callbacks()
Helper function to evaluate all periodic function callbacks.
+
std::map< std::string, bool > periodic_outputs_
Map of outputs with periodic publishing flag.
+
A wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified com...
+
virtual bool on_shutdown_callback()
Steps to execute when shutting down the component.
+
virtual bool on_deactivate_callback()
Steps to execute when deactivating the component.
+
void add_output(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false, bool publish_on_step=true)
Add an output signal of the component.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
virtual bool on_activate_callback()
Steps to execute when activating the component.
+
virtual bool on_cleanup_callback()
Steps to execute when cleaning up the component.
+
virtual ~LifecycleComponent()=default
Virtual default destructor.
+
virtual bool on_error_callback()
Steps to execute when handling errors.
+
virtual bool on_configure_callback()
Steps to execute when configuring the component.
+
An exception class to notify errors when adding a signal.
+
Modulo components.
Definition Component.hpp:9
+
+ + + + diff --git a/versions/v4.2.2/_lookup_transform_exception_8hpp_source.html b/versions/v4.2.2/_lookup_transform_exception_8hpp_source.html new file mode 100644 index 000000000..db9447542 --- /dev/null +++ b/versions/v4.2.2/_lookup_transform_exception_8hpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/exceptions/LookupTransformException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
LookupTransformException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_components/exceptions/ComponentException.hpp"
+
4
+ +
6
+
+ +
14public:
+
15 explicit LookupTransformException(const std::string& msg) : ComponentException("LookupTransformException", msg) {}
+
16};
+
+
17}// namespace modulo_components::exceptions
+
A base class for all component exceptions.
+
An exception class to notify an error while looking up TF transforms.
+
Modulo component exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_message_pair_8cpp_source.html b/versions/v4.2.2/_message_pair_8cpp_source.html new file mode 100644 index 000000000..ea0fb974e --- /dev/null +++ b/versions/v4.2.2/_message_pair_8cpp_source.html @@ -0,0 +1,136 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/communication/MessagePair.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MessagePair.cpp
+
+
+
1#include "modulo_core/communication/MessagePair.hpp"
+
2
+
3#include <utility>
+
4
+ +
6
+
7template<>
+ +
9 std::shared_ptr<bool> data, std::shared_ptr<rclcpp::Clock> clock
+
10) :
+
11 MessagePairInterface(MessageType::BOOL), data_(std::move(data)), clock_(std::move(clock)) {}
+
12
+
13template<>
+
14MessagePair<std_msgs::msg::Float64, double>::MessagePair(
+
15 std::shared_ptr<double> data, std::shared_ptr<rclcpp::Clock> clock
+
16) :
+
17 MessagePairInterface(MessageType::FLOAT64), data_(std::move(data)), clock_(std::move(clock)) {}
+
18
+
19template<>
+
20MessagePair<std_msgs::msg::Float64MultiArray, std::vector<double>>::MessagePair(
+
21 std::shared_ptr<std::vector<double>> data, std::shared_ptr<rclcpp::Clock> clock
+
22) :
+
23 MessagePairInterface(MessageType::FLOAT64_MULTI_ARRAY), data_(std::move(data)), clock_(std::move(clock)) {}
+
24
+
25template<>
+
26MessagePair<std_msgs::msg::Int32, int>::MessagePair(
+
27 std::shared_ptr<int> data, std::shared_ptr<rclcpp::Clock> clock
+
28) :
+
29 MessagePairInterface(MessageType::INT32), data_(std::move(data)), clock_(std::move(clock)) {}
+
30
+
31template<>
+
32MessagePair<std_msgs::msg::String, std::string>::MessagePair(
+
33 std::shared_ptr<std::string> data, std::shared_ptr<rclcpp::Clock> clock
+
34) :
+
35 MessagePairInterface(MessageType::STRING), data_(std::move(data)), clock_(std::move(clock)) {}
+
36
+
37template<>
+
38MessagePair<EncodedState, state_representation::State>::MessagePair(
+
39 std::shared_ptr<state_representation::State> data, std::shared_ptr<rclcpp::Clock> clock
+
40) :
+
41 MessagePairInterface(MessageType::ENCODED_STATE), data_(std::move(data)), clock_(std::move(clock)) {}
+
42
+
43}// namespace modulo_core::communication
+
MessagePair(std::shared_ptr< DataT > data, std::shared_ptr< rclcpp::Clock > clock)
Constructor of the MessagePair.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
MessageType
Enum of all supported ROS message types for the MessagePairInterface.
+
+ + + + diff --git a/versions/v4.2.2/_message_pair_8hpp_source.html b/versions/v4.2.2/_message_pair_8hpp_source.html new file mode 100644 index 000000000..6a0afd482 --- /dev/null +++ b/versions/v4.2.2/_message_pair_8hpp_source.html @@ -0,0 +1,230 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/MessagePair.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MessagePair.hpp
+
+
+
1#pragma once
+
2
+
3#include <rclcpp/clock.hpp>
+
4
+
5#include "modulo_core/communication/MessagePairInterface.hpp"
+
6#include "modulo_core/exceptions/NullPointerException.hpp"
+
7#include "modulo_core/translators/message_readers.hpp"
+
8#include "modulo_core/translators/message_writers.hpp"
+
9
+
+ +
11
+
19template<typename MsgT, typename DataT>
+
+ +
21public:
+
27 MessagePair(std::shared_ptr<DataT> data, std::shared_ptr<rclcpp::Clock> clock);
+
28
+
35 [[nodiscard]] MsgT write_message() const;
+
36
+
43 void read_message(const MsgT& message);
+
44
+
48 [[nodiscard]] std::shared_ptr<DataT> get_data() const;
+
49
+
54 void set_data(const std::shared_ptr<DataT>& data);
+
55
+
56private:
+
57 std::shared_ptr<DataT> data_;
+
58 std::shared_ptr<rclcpp::Clock> clock_;
+
59};
+
+
60
+
61template<typename MsgT, typename DataT>
+
+ +
63 if (this->data_ == nullptr) {
+
64 throw exceptions::NullPointerException("The message pair data is not set, nothing to write");
+
65 }
+
66 auto message = MsgT();
+
67 translators::write_message(message, *this->data_, clock_->now());
+
68 return message;
+
69}
+
+
70
+
71template<>
+ +
73 if (this->data_ == nullptr) {
+
74 throw exceptions::NullPointerException("The message pair data is not set, nothing to write");
+
75 }
+
76 auto message = EncodedState();
+
77 translators::write_message(message, this->data_, clock_->now());
+
78 return message;
+
79}
+
80
+
81template<typename MsgT, typename DataT>
+
+
82inline void MessagePair<MsgT, DataT>::read_message(const MsgT& message) {
+
83 if (this->data_ == nullptr) {
+
84 throw exceptions::NullPointerException("The message pair data is not set, nothing to read");
+
85 }
+
86 translators::read_message(*this->data_, message);
+
87}
+
+
88
+
89template<>
+ +
91 if (this->data_ == nullptr) {
+
92 throw exceptions::NullPointerException("The message pair data is not set, nothing to read");
+
93 }
+
94 translators::read_message(this->data_, message);
+
95}
+
96
+
97template<typename MsgT, typename DataT>
+
+
98inline std::shared_ptr<DataT> MessagePair<MsgT, DataT>::get_data() const {
+
99 return this->data_;
+
100}
+
+
101
+
102template<typename MsgT, typename DataT>
+
+
103inline void MessagePair<MsgT, DataT>::set_data(const std::shared_ptr<DataT>& data) {
+
104 if (data == nullptr) {
+
105 throw exceptions::NullPointerException("Provide a valid pointer");
+
106 }
+
107 this->data_ = data;
+
108}
+
+
109
+
110template<typename DataT>
+
111inline std::shared_ptr<MessagePairInterface>
+
112make_shared_message_pair(const std::shared_ptr<DataT>& data, const std::shared_ptr<rclcpp::Clock>& clock) {
+
113 return std::make_shared<MessagePair<EncodedState, state_representation::State>>(
+
114 std::dynamic_pointer_cast<state_representation::State>(data), clock);
+
115}
+
116
+
117template<>
+
118inline std::shared_ptr<MessagePairInterface>
+
119make_shared_message_pair(const std::shared_ptr<bool>& data, const std::shared_ptr<rclcpp::Clock>& clock) {
+
120 return std::make_shared<MessagePair<std_msgs::msg::Bool, bool>>(data, clock);
+
121}
+
122
+
123template<>
+
124inline std::shared_ptr<MessagePairInterface>
+
125make_shared_message_pair(const std::shared_ptr<double>& data, const std::shared_ptr<rclcpp::Clock>& clock) {
+
126 return std::make_shared<MessagePair<std_msgs::msg::Float64, double>>(data, clock);
+
127}
+
128
+
129template<>
+
130inline std::shared_ptr<MessagePairInterface> make_shared_message_pair(
+
131 const std::shared_ptr<std::vector<double>>& data, const std::shared_ptr<rclcpp::Clock>& clock
+
132) {
+
133 return std::make_shared < MessagePair<std_msgs::msg::Float64MultiArray, std::vector < double>>>(data, clock);
+
134}
+
135
+
136template<>
+
137inline std::shared_ptr<MessagePairInterface>
+
138make_shared_message_pair(const std::shared_ptr<int>& data, const std::shared_ptr<rclcpp::Clock>& clock) {
+
139 return std::make_shared<MessagePair<std_msgs::msg::Int32, int>>(data, clock);
+
140}
+
141
+
142template<>
+
143inline std::shared_ptr<MessagePairInterface>
+
144make_shared_message_pair(const std::shared_ptr<std::string>& data, const std::shared_ptr<rclcpp::Clock>& clock) {
+
145 return std::make_shared<MessagePair<std_msgs::msg::String, std::string>>(data, clock);
+
146}
+
147}// namespace modulo_core::communication
+
+
The MessagePair stores a pointer to a variable and translates the value of this pointer back and fort...
+
std::shared_ptr< DataT > get_data() const
Get the data pointer.
+
MsgT write_message() const
Write the value of the data pointer to a ROS message.
+
void read_message(const MsgT &message)
Read a ROS message and store the value in the data pointer.
+
MessagePair(std::shared_ptr< DataT > data, std::shared_ptr< rclcpp::Clock > clock)
Constructor of the MessagePair.
+
void set_data(const std::shared_ptr< DataT > &data)
Set the data pointer.
+
Interface class to enable non-templated writing and reading ROS messages from derived MessagePair ins...
+
An exception class to notify that a certain pointer is null.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
void write_message(geometry_msgs::msg::Accel &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
Convert a CartesianState to a ROS geometry_msgs::msg::Accel.
+
void read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Accel &message)
Convert a ROS geometry_msgs::msg::Accel to a CartesianState.
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+
+ + + + diff --git a/versions/v4.2.2/_message_pair_interface_8cpp_source.html b/versions/v4.2.2/_message_pair_interface_8cpp_source.html new file mode 100644 index 000000000..b4fa9d9ec --- /dev/null +++ b/versions/v4.2.2/_message_pair_interface_8cpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/communication/MessagePairInterface.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MessagePairInterface.cpp
+
+
+
1#include "modulo_core/communication/MessagePairInterface.hpp"
+
2
+ +
4
+ +
6
+
+ +
8 return this->type_;
+
9}
+
+
10}// namespace modulo_core::communication
+
MessagePairInterface(MessageType type)
Constructor with the message type.
+
MessageType get_type() const
Get the MessageType of the MessagePairInterface.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
MessageType
Enum of all supported ROS message types for the MessagePairInterface.
+
+ + + + diff --git a/versions/v4.2.2/_message_pair_interface_8hpp_source.html b/versions/v4.2.2/_message_pair_interface_8hpp_source.html new file mode 100644 index 000000000..62e33fac1 --- /dev/null +++ b/versions/v4.2.2/_message_pair_interface_8hpp_source.html @@ -0,0 +1,173 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/MessagePairInterface.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MessagePairInterface.hpp
+
+
+
1#pragma once
+
2
+
3#include <memory>
+
4
+
5#include "modulo_core/communication/MessageType.hpp"
+
6#include "modulo_core/exceptions/InvalidPointerCastException.hpp"
+
7#include "modulo_core/exceptions/InvalidPointerException.hpp"
+
8
+ +
10
+
11// forward declaration of derived MessagePair class
+
12template<typename MsgT, typename DataT>
+
13class MessagePair;
+
14
+
+
20class MessagePairInterface : public std::enable_shared_from_this<MessagePairInterface> {
+
21public:
+
26 explicit MessagePairInterface(MessageType type);
+
27
+
31 virtual ~MessagePairInterface() = default;
+
32
+
36 MessagePairInterface(const MessagePairInterface& message_pair) = default;
+
37
+
56 template<typename MsgT, typename DataT>
+
57 [[nodiscard]] std::shared_ptr<MessagePair<MsgT, DataT>> get_message_pair(bool validate_pointer = true);
+
58
+
68 template<typename MsgT, typename DataT>
+
69 [[nodiscard]] MsgT write();
+
70
+
80 template<typename MsgT, typename DataT>
+
81 void read(const MsgT& message);
+
82
+
87 MessageType get_type() const;
+
88
+
89private:
+
90 MessageType type_;
+
91};
+
+
92
+
93template<typename MsgT, typename DataT>
+
+
94inline std::shared_ptr<MessagePair<MsgT, DataT>> MessagePairInterface::get_message_pair(bool validate_pointer) {
+
95 std::shared_ptr<MessagePair<MsgT, DataT>> message_pair_ptr;
+
96 try {
+
97 message_pair_ptr = std::dynamic_pointer_cast<MessagePair<MsgT, DataT>>(this->shared_from_this());
+
98 } catch (const std::exception& ex) {
+
99 if (validate_pointer) {
+
100 throw exceptions::InvalidPointerException("Message pair interface is not managed by a valid pointer");
+
101 }
+
102 }
+
103 if (message_pair_ptr == nullptr && validate_pointer) {
+ +
105 "Unable to cast message pair interface to a message pair pointer of requested type");
+
106 }
+
107 return message_pair_ptr;
+
108}
+
+
109
+
110template<typename MsgT, typename DataT>
+
+ +
112 return this->template get_message_pair<MsgT, DataT>()->write_message();
+
113}
+
+
114
+
115template<typename MsgT, typename DataT>
+
+
116inline void MessagePairInterface::read(const MsgT& message) {
+
117 this->template get_message_pair<MsgT, DataT>()->read_message(message);
+
118}
+
+
119}// namespace modulo_core::communication
+
Interface class to enable non-templated writing and reading ROS messages from derived MessagePair ins...
+
virtual ~MessagePairInterface()=default
Default virtual destructor.
+
std::shared_ptr< MessagePair< MsgT, DataT > > get_message_pair(bool validate_pointer=true)
Get a pointer to a derived MessagePair instance from a MessagePairInterface pointer.
+
MessageType get_type() const
Get the MessageType of the MessagePairInterface.
+
MsgT write()
Get the ROS message of a derived MessagePair instance through the MessagePairInterface pointer.
+
void read(const MsgT &message)
Read a ROS message and set the data of the derived MessagePair instance through the MessagePairInterf...
+
MessagePairInterface(const MessagePairInterface &message_pair)=default
Copy constructor from another MessagePairInterface.
+
An exception class to notify if the result of getting an instance of a derived class through dynamic ...
+
An exception class to notify if an object has no reference count (if the object is not owned by any p...
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
MessageType
Enum of all supported ROS message types for the MessagePairInterface.
+
+ + + + diff --git a/versions/v4.2.2/_message_translation_exception_8hpp_source.html b/versions/v4.2.2/_message_translation_exception_8hpp_source.html new file mode 100644 index 000000000..56a450152 --- /dev/null +++ b/versions/v4.2.2/_message_translation_exception_8hpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/exceptions/MessageTranslationException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MessageTranslationException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_core/exceptions/CoreException.hpp"
+
4
+ +
6
+
+ +
12public:
+
13 explicit MessageTranslationException(const std::string& msg) : CoreException("MessageTranslationException", msg) {}
+
14};
+
+
15}// namespace modulo_core::exceptions
+
16
+
17
+
A base class for all core exceptions.
+
An exception class to notify that the translation of a ROS message failed.
+
Modulo Core exceptions module for defining exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_message_type_8hpp_source.html b/versions/v4.2.2/_message_type_8hpp_source.html new file mode 100644 index 000000000..06af44095 --- /dev/null +++ b/versions/v4.2.2/_message_type_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/MessageType.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
MessageType.hpp
+
+
+
1#pragma once
+
2
+ +
8
+
+
13enum class MessageType {
+
14 BOOL, FLOAT64, FLOAT64_MULTI_ARRAY, INT32, STRING, ENCODED_STATE
+
15};
+
+
16}// namespace modulo_core::communication
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
MessageType
Enum of all supported ROS message types for the MessagePairInterface.
+
+ + + + diff --git a/versions/v4.2.2/_null_pointer_exception_8hpp_source.html b/versions/v4.2.2/_null_pointer_exception_8hpp_source.html new file mode 100644 index 000000000..5990fdc6c --- /dev/null +++ b/versions/v4.2.2/_null_pointer_exception_8hpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/exceptions/NullPointerException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NullPointerException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_core/exceptions/CoreException.hpp"
+
4
+ +
6
+
+ +
13public:
+
14 explicit NullPointerException(const std::string& msg) : CoreException("NullPointerException", msg) {}
+
15};
+
+
16}// namespace modulo_core::exceptions
+
17
+
A base class for all core exceptions.
+
An exception class to notify that a certain pointer is null.
+
Modulo Core exceptions module for defining exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_parameter_translation_exception_8hpp_source.html b/versions/v4.2.2/_parameter_translation_exception_8hpp_source.html new file mode 100644 index 000000000..2da885b0e --- /dev/null +++ b/versions/v4.2.2/_parameter_translation_exception_8hpp_source.html @@ -0,0 +1,109 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/exceptions/ParameterTranslationException.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ParameterTranslationException.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_core/exceptions/CoreException.hpp"
+
4
+ +
6
+
+ +
14public:
+
15 explicit ParameterTranslationException(const std::string& msg) :
+
16 CoreException("ParameterTranslationException", msg) {}
+
17};
+
+
18}// namespace modulo_core::exceptions
+
19
+
20
+
A base class for all core exceptions.
+
An exception class to notify incompatibility when translating parameters from different sources.
+
Modulo Core exceptions module for defining exception classes.
+
+ + + + diff --git a/versions/v4.2.2/_predicates_listener_8cpp_source.html b/versions/v4.2.2/_predicates_listener_8cpp_source.html new file mode 100644 index 000000000..26cccb8e7 --- /dev/null +++ b/versions/v4.2.2/_predicates_listener_8cpp_source.html @@ -0,0 +1,129 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/src/testutils/PredicatesListener.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PredicatesListener.cpp
+
+
+
1#include "modulo_utils/testutils/PredicatesListener.hpp"
+
2
+
3namespace modulo_utils::testutils {
+
4
+
5PredicatesListener::PredicatesListener(
+
6 const std::string& component, const std::vector<std::string>& predicates, const rclcpp::NodeOptions& node_options
+
7) : rclcpp::Node("predicates_listener", node_options) {
+
8 this->received_future_ = this->received_.get_future();
+
9 for (const auto& predicate : predicates) {
+
10 this->predicates_.insert_or_assign(predicate, false);
+
11 }
+
12 this->subscription_ = this->create_subscription<modulo_component_interfaces::msg::Predicate>(
+
13 "/predicates", 10, [this, component](const std::shared_ptr<modulo_component_interfaces::msg::Predicate> message) {
+
14 if (message->component == component) {
+
15 for (auto& predicate : this->predicates_) {
+
16 if (message->predicate == predicate.first) {
+
17 predicate.second = message->value;
+
18 if (message->value) {
+
19 this->received_.set_value();
+
20 }
+
21 }
+
22 }
+
23 }
+
24 });
+
25}
+
26
+
27void PredicatesListener::reset_future() {
+
28 this->received_ = std::promise<void>();
+
29 this->received_future_ = this->received_.get_future();
+
30}
+
31
+
32const std::shared_future<void>& PredicatesListener::get_predicate_future() const {
+
33 return this->received_future_;
+
34}
+
35
+
36const std::map<std::string, bool>& PredicatesListener::get_predicate_values() const {
+
37 return this->predicates_;
+
38}
+
39}// namespace modulo_utils::testutils
+
+ + + + diff --git a/versions/v4.2.2/_predicates_listener_8hpp_source.html b/versions/v4.2.2/_predicates_listener_8hpp_source.html new file mode 100644 index 000000000..85a090a94 --- /dev/null +++ b/versions/v4.2.2/_predicates_listener_8hpp_source.html @@ -0,0 +1,124 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/include/modulo_utils/testutils/PredicatesListener.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PredicatesListener.hpp
+
+
+
1#pragma once
+
2
+
3#include <future>
+
4#include <map>
+
5
+
6#include <rclcpp/rclcpp.hpp>
+
7#include <modulo_component_interfaces/msg/predicate.hpp>
+
8
+
9namespace modulo_utils::testutils {
+
10
+
11using namespace std::chrono_literals;
+
12
+
+
13class PredicatesListener : public rclcpp::Node {
+
14public:
+ +
16 const std::string& component, const std::vector<std::string>& predicates,
+
17 const rclcpp::NodeOptions& node_options = rclcpp::NodeOptions());
+
18
+
19 void reset_future();
+
20
+
21 [[nodiscard]] const std::shared_future<void>& get_predicate_future() const;
+
22
+
23 [[nodiscard]] const std::map<std::string, bool>& get_predicate_values() const;
+
24
+
25private:
+
26 std::shared_ptr<rclcpp::Subscription<modulo_component_interfaces::msg::Predicate>> subscription_;
+
27 std::map<std::string, bool> predicates_;
+
28 std::shared_future<void> received_future_;
+
29 std::promise<void> received_;
+
30};
+
+
31}// namespace modulo_utils::testutils
+ +
+ + + + diff --git a/versions/v4.2.2/_publisher_handler_8hpp_source.html b/versions/v4.2.2/_publisher_handler_8hpp_source.html new file mode 100644 index 000000000..18bd7d012 --- /dev/null +++ b/versions/v4.2.2/_publisher_handler_8hpp_source.html @@ -0,0 +1,212 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/PublisherHandler.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PublisherHandler.hpp
+
+
+
1#pragma once
+
2
+
3#include <rclcpp/logging.hpp>
+
4
+
5#include "modulo_core/communication/PublisherInterface.hpp"
+
6#include "modulo_core/exceptions/NullPointerException.hpp"
+
7
+ +
9
+
17template<typename PubT, typename MsgT>
+
+ +
19public:
+
25 PublisherHandler(PublisherType type, std::shared_ptr<PubT> publisher);
+
26
+
30 ~PublisherHandler() override;
+
31
+
36 void on_activate();
+
37
+
42 void on_deactivate();
+
43
+
49 void publish(const MsgT& message) const;
+
50
+
55 std::shared_ptr<PublisherInterface>
+
56 create_publisher_interface(const std::shared_ptr<MessagePairInterface>& message_pair);
+
57
+
58private:
+
59 std::shared_ptr<PubT> publisher_;
+
60};
+
+
61
+
62template<typename PubT, typename MsgT>
+
+
63PublisherHandler<PubT, MsgT>::PublisherHandler(PublisherType type, std::shared_ptr<PubT> publisher) :
+
64 PublisherInterface(type), publisher_(std::move(publisher)) {}
+
+
65
+
66template<typename PubT, typename MsgT>
+
+ +
68 this->publisher_.reset();
+
69}
+
+
70
+
71template<typename PubT, typename MsgT>
+
+ +
73 if (this->publisher_ == nullptr) {
+
74 throw exceptions::NullPointerException("Publisher not set");
+
75 }
+
76 if (this->get_type() == PublisherType::LIFECYCLE_PUBLISHER) {
+
77 try {
+
78 this->publisher_->on_activate();
+
79 } catch (const std::exception& ex) {
+
80 throw exceptions::CoreException(ex.what());
+
81 }
+
82 } else {
+
83 RCLCPP_DEBUG(rclcpp::get_logger("PublisherHandler"), "Only LifecyclePublishers can be deactivated");
+
84 }
+
85}
+
+
86
+
87template<typename PubT, typename MsgT>
+
+ +
89 if (this->publisher_ == nullptr) {
+
90 throw exceptions::NullPointerException("Publisher not set");
+
91 }
+
92 if (this->get_type() == PublisherType::LIFECYCLE_PUBLISHER) {
+
93 try {
+
94 this->publisher_->on_deactivate();
+
95 } catch (const std::exception& ex) {
+
96 throw exceptions::CoreException(ex.what());
+
97 }
+
98 } else {
+
99 RCLCPP_DEBUG(rclcpp::get_logger("PublisherHandler"), "Only LifecyclePublishers can be deactivated");
+
100 }
+
101}
+
+
102
+
103template<typename PubT, typename MsgT>
+
+
104void PublisherHandler<PubT, MsgT>::publish(const MsgT& message) const {
+
105 if (this->publisher_ == nullptr) {
+
106 throw exceptions::NullPointerException("Publisher not set");
+
107 }
+
108 try {
+
109 this->publisher_->publish(message);
+
110 } catch (const std::exception& ex) {
+
111 throw exceptions::CoreException(ex.what());
+
112 }
+
113}
+
+
114
+
115template<typename PubT, typename MsgT>
+
+ +
117 const std::shared_ptr<MessagePairInterface>& message_pair
+
118) {
+
119 std::shared_ptr<PublisherInterface> publisher_interface;
+
120 try {
+
121 publisher_interface = std::shared_ptr<PublisherInterface>(this->shared_from_this());
+
122 } catch (const std::exception& ex) {
+
123 throw exceptions::CoreException(ex.what());
+
124 }
+
125 publisher_interface->set_message_pair(message_pair);
+
126 return publisher_interface;
+
127}
+
+
128}// namespace modulo_core::communication
+
The PublisherHandler handles different types of ROS publishers to activate, deactivate and publish da...
+
std::shared_ptr< PublisherInterface > create_publisher_interface(const std::shared_ptr< MessagePairInterface > &message_pair)
Create a PublisherInterface instance from the current PublisherHandler.
+
~PublisherHandler() override
Destructor to explicitly reset the publisher pointer.
+
void on_deactivate()
Deactivate the ROS publisher if applicable.
+
void on_activate()
Activate the ROS publisher if applicable.
+
PublisherHandler(PublisherType type, std::shared_ptr< PubT > publisher)
Constructor with the publisher type and the pointer to the ROS publisher.
+
Interface class to enable non-templated activating/deactivating/publishing of ROS publishers from der...
+
void publish()
Publish the data stored in the message pair through the ROS publisher of a derived PublisherHandler i...
+
A base class for all core exceptions.
+
An exception class to notify that a certain pointer is null.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
PublisherType
Enum of supported ROS publisher types for the PublisherInterface.
+
+ + + + diff --git a/versions/v4.2.2/_publisher_interface_8cpp_source.html b/versions/v4.2.2/_publisher_interface_8cpp_source.html new file mode 100644 index 000000000..6d676ba19 --- /dev/null +++ b/versions/v4.2.2/_publisher_interface_8cpp_source.html @@ -0,0 +1,270 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/communication/PublisherInterface.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PublisherInterface.cpp
+
+
+
1#include "modulo_core/communication/PublisherInterface.hpp"
+
2
+
3#include <utility>
+
4
+
5#include <rclcpp/publisher.hpp>
+
6#include <rclcpp_lifecycle/lifecycle_publisher.hpp>
+
7#include <std_msgs/msg/bool.hpp>
+
8#include <std_msgs/msg/float64.hpp>
+
9#include <std_msgs/msg/float64_multi_array.hpp>
+
10#include <std_msgs/msg/int32.hpp>
+
11#include <std_msgs/msg/string.hpp>
+
12
+
13#include "modulo_core/communication/PublisherHandler.hpp"
+
14#include "modulo_core/exceptions/NullPointerException.hpp"
+
15
+ +
17
+
+
18PublisherInterface::PublisherInterface(PublisherType type, std::shared_ptr<MessagePairInterface> message_pair) :
+
19 type_(type), message_pair_(std::move(message_pair)) {}
+
+
20
+
+ +
22 if (this->message_pair_ == nullptr) {
+
23 throw exceptions::NullPointerException("Message pair is not set, cannot deduce message type");
+
24 }
+
25 switch (this->message_pair_->get_type()) {
+
26 case MessageType::BOOL:
+
27 this->template get_handler<
+
28 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Bool>, std_msgs::msg::Bool
+
29 >()->on_activate();
+
30 break;
+
31 case MessageType::FLOAT64:
+
32 this->template get_handler<
+
33 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float64>, std_msgs::msg::Float64
+
34 >()->on_activate();
+
35 break;
+
36 case MessageType::FLOAT64_MULTI_ARRAY:
+
37 this->template get_handler<
+
38 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float64MultiArray>, std_msgs::msg::Float64MultiArray
+
39 >()->on_activate();
+
40 break;
+
41 case MessageType::INT32:
+
42 this->template get_handler<
+
43 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Int32>, std_msgs::msg::Int32
+
44 >()->on_activate();
+
45 break;
+
46 case MessageType::STRING:
+
47 this->template get_handler<
+
48 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::String>, std_msgs::msg::String
+
49 >()->on_activate();
+
50 break;
+
51 case MessageType::ENCODED_STATE:
+
52 this->template get_handler<rclcpp_lifecycle::LifecyclePublisher<EncodedState>, EncodedState>()->on_activate();
+
53 break;
+
54 }
+
55}
+
+
56
+
+ +
58 if (this->message_pair_ == nullptr) {
+
59 throw exceptions::NullPointerException("Message pair is not set, cannot deduce message type");
+
60 }
+
61 switch (this->message_pair_->get_type()) {
+
62 case MessageType::BOOL:
+
63 this->template get_handler<
+
64 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Bool>, std_msgs::msg::Bool
+
65 >()->on_deactivate();
+
66 break;
+
67 case MessageType::FLOAT64:
+
68 this->template get_handler<
+
69 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float64>, std_msgs::msg::Float64
+
70 >()->on_deactivate();
+
71 break;
+
72 case MessageType::FLOAT64_MULTI_ARRAY:
+
73 this->template get_handler<
+
74 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Float64MultiArray>, std_msgs::msg::Float64MultiArray
+
75 >()->on_deactivate();
+
76 break;
+
77 case MessageType::INT32:
+
78 this->template get_handler<
+
79 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::Int32>, std_msgs::msg::Int32
+
80 >()->on_deactivate();
+
81 break;
+
82 case MessageType::STRING:
+
83 this->template get_handler<
+
84 rclcpp_lifecycle::LifecyclePublisher<std_msgs::msg::String>, std_msgs::msg::String
+
85 >()->on_deactivate();
+
86 break;
+
87 case MessageType::ENCODED_STATE:
+
88 this->template get_handler<rclcpp_lifecycle::LifecyclePublisher<EncodedState>, EncodedState>()->on_deactivate();
+
89 break;
+
90 }
+
91}
+
+
92
+
+ +
94 try {
+
95 if (this->message_pair_ == nullptr) {
+
96 throw exceptions::NullPointerException("Message pair is not set, nothing to publish");
+
97 }
+
98 switch (this->message_pair_->get_type()) {
+
99 case MessageType::BOOL:
+
100 this->publish(this->message_pair_->write<std_msgs::msg::Bool, bool>());
+
101 break;
+
102 case MessageType::FLOAT64:
+
103 this->publish(this->message_pair_->write<std_msgs::msg::Float64, double>());
+
104 break;
+
105 case MessageType::FLOAT64_MULTI_ARRAY:
+
106 this->publish(this->message_pair_->write<std_msgs::msg::Float64MultiArray, std::vector<double>>());
+
107 break;
+
108 case MessageType::INT32:
+
109 this->publish(this->message_pair_->write<std_msgs::msg::Int32, int>());
+
110 break;
+
111 case MessageType::STRING:
+
112 this->publish(this->message_pair_->write<std_msgs::msg::String, std::string>());
+
113 break;
+
114 case MessageType::ENCODED_STATE:
+
115 if (!this->message_pair_->get_message_pair<
+
116 EncodedState, state_representation::State
+
117 >()->get_data()->is_empty()) {
+
118 this->publish(this->message_pair_->write<EncodedState, state_representation::State>());
+
119 }
+
120 break;
+
121 }
+
122 } catch (const exceptions::CoreException& ex) {
+
123 throw;
+
124 }
+
125}
+
+
126
+
127template<typename MsgT>
+
128void PublisherInterface::publish(const MsgT& message) {
+
129 switch (this->get_type()) {
+
130 case PublisherType::PUBLISHER:
+
131 this->template get_handler<rclcpp::Publisher<MsgT>, MsgT>()->publish(message);
+
132 break;
+
133 case PublisherType::LIFECYCLE_PUBLISHER:
+
134 this->template get_handler<rclcpp_lifecycle::LifecyclePublisher<MsgT>, MsgT>()->publish(message);
+
135 break;
+
136 }
+
137}
+
138
+
+
139std::shared_ptr<MessagePairInterface> PublisherInterface::get_message_pair() const {
+
140 return this->message_pair_;
+
141}
+
+
142
+
+
143void PublisherInterface::set_message_pair(const std::shared_ptr<MessagePairInterface>& message_pair) {
+
144 if (message_pair == nullptr) {
+
145 throw exceptions::NullPointerException("Provide a valid pointer");
+
146 }
+
147 this->message_pair_ = message_pair;
+
148}
+
+
149
+
+ +
151 return this->type_;
+
152}
+
+
153}// namespace modulo_core::communication
+
void deactivate()
Deactivate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointe...
+
PublisherType get_type() const
Get the type of the publisher interface.
+
void publish()
Publish the data stored in the message pair through the ROS publisher of a derived PublisherHandler i...
+
std::shared_ptr< MessagePairInterface > get_message_pair() const
Get the pointer to the message pair of the PublisherInterface.
+
std::shared_ptr< PublisherHandler< PubT, MsgT > > get_handler(bool validate_pointer=true)
Get a pointer to a derived PublisherHandler instance from a PublisherInterface pointer.
+
PublisherInterface(PublisherType type, std::shared_ptr< MessagePairInterface > message_pair=nullptr)
Constructor with the message type and message pair.
+
void set_message_pair(const std::shared_ptr< MessagePairInterface > &message_pair)
Set the pointer to the message pair of the PublisherInterface.
+
void activate()
Activate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
+
A base class for all core exceptions.
+
An exception class to notify that a certain pointer is null.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
PublisherType
Enum of supported ROS publisher types for the PublisherInterface.
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+
+ + + + diff --git a/versions/v4.2.2/_publisher_interface_8hpp_source.html b/versions/v4.2.2/_publisher_interface_8hpp_source.html new file mode 100644 index 000000000..7b2e4c1e6 --- /dev/null +++ b/versions/v4.2.2/_publisher_interface_8hpp_source.html @@ -0,0 +1,171 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/PublisherInterface.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PublisherInterface.hpp
+
+
+
1#pragma once
+
2
+
3#include <memory>
+
4
+
5#include "modulo_core/communication/MessagePair.hpp"
+
6#include "modulo_core/communication/PublisherType.hpp"
+
7#include "modulo_core/exceptions/InvalidPointerCastException.hpp"
+
8#include "modulo_core/exceptions/InvalidPointerException.hpp"
+
9
+ +
11
+
12// forward declaration of derived Publisher class
+
13template<typename PubT, typename MsgT>
+
14class PublisherHandler;
+
15
+
+
21class PublisherInterface : public std::enable_shared_from_this<PublisherInterface> {
+
22public:
+
28 explicit PublisherInterface(PublisherType type, std::shared_ptr<MessagePairInterface> message_pair = nullptr);
+
29
+
33 PublisherInterface(const PublisherInterface& publisher) = default;
+
34
+
38 virtual ~PublisherInterface() = default;
+
39
+
58 template<typename PubT, typename MsgT>
+
59 std::shared_ptr<PublisherHandler<PubT, MsgT>> get_handler(bool validate_pointer = true);
+
60
+
69 void activate();
+
70
+
79 void deactivate();
+
80
+
91 void publish();
+
92
+
96 [[nodiscard]] std::shared_ptr<MessagePairInterface> get_message_pair() const;
+
97
+
102 void set_message_pair(const std::shared_ptr<MessagePairInterface>& message_pair);
+
103
+
108 PublisherType get_type() const;
+
109
+
110private:
+
121 template<typename MsgT>
+
122 void publish(const MsgT& message);
+
123
+
124 PublisherType type_;
+
125 std::shared_ptr<MessagePairInterface> message_pair_;
+
126};
+
+
127
+
128template<typename PubT, typename MsgT>
+
+
129inline std::shared_ptr<PublisherHandler<PubT, MsgT>> PublisherInterface::get_handler(bool validate_pointer) {
+
130 std::shared_ptr<PublisherHandler<PubT, MsgT>> publisher_ptr;
+
131 try {
+
132 publisher_ptr = std::dynamic_pointer_cast<PublisherHandler<PubT, MsgT>>(this->shared_from_this());
+
133 } catch (const std::exception& ex) {
+
134 if (validate_pointer) {
+
135 throw exceptions::InvalidPointerException("Publisher interface is not managed by a valid pointer");
+
136 }
+
137 }
+
138 if (publisher_ptr == nullptr && validate_pointer) {
+ +
140 "Unable to cast publisher interface to a publisher pointer of requested type");
+
141 }
+
142 return publisher_ptr;
+
143}
+
+
144}// namespace modulo_core::communication
+
Interface class to enable non-templated activating/deactivating/publishing of ROS publishers from der...
+
virtual ~PublisherInterface()=default
Default virtual destructor.
+
void deactivate()
Deactivate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointe...
+
PublisherInterface(const PublisherInterface &publisher)=default
Copy constructor from another PublisherInterface.
+
PublisherType get_type() const
Get the type of the publisher interface.
+
void publish()
Publish the data stored in the message pair through the ROS publisher of a derived PublisherHandler i...
+
std::shared_ptr< MessagePairInterface > get_message_pair() const
Get the pointer to the message pair of the PublisherInterface.
+
std::shared_ptr< PublisherHandler< PubT, MsgT > > get_handler(bool validate_pointer=true)
Get a pointer to a derived PublisherHandler instance from a PublisherInterface pointer.
+
void set_message_pair(const std::shared_ptr< MessagePairInterface > &message_pair)
Set the pointer to the message pair of the PublisherInterface.
+
void activate()
Activate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
+
An exception class to notify if the result of getting an instance of a derived class through dynamic ...
+
An exception class to notify if an object has no reference count (if the object is not owned by any p...
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
PublisherType
Enum of supported ROS publisher types for the PublisherInterface.
+
+ + + + diff --git a/versions/v4.2.2/_publisher_type_8hpp_source.html b/versions/v4.2.2/_publisher_type_8hpp_source.html new file mode 100644 index 000000000..b90bc1527 --- /dev/null +++ b/versions/v4.2.2/_publisher_type_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/PublisherType.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
PublisherType.hpp
+
+
+
1#pragma once
+
2
+ +
4
+
+
9enum class PublisherType {
+
10 PUBLISHER, LIFECYCLE_PUBLISHER
+
11};
+
+
12}// namespace modulo_core::communication
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
PublisherType
Enum of supported ROS publisher types for the PublisherInterface.
+
+ + + + diff --git a/versions/v4.2.2/_robot_controller_interface_8cpp_source.html b/versions/v4.2.2/_robot_controller_interface_8cpp_source.html new file mode 100644 index 000000000..5206310f4 --- /dev/null +++ b/versions/v4.2.2/_robot_controller_interface_8cpp_source.html @@ -0,0 +1,503 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/src/RobotControllerInterface.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RobotControllerInterface.cpp
+
+
+
1#include "modulo_controllers/RobotControllerInterface.hpp"
+
2
+
3#include <hardware_interface/types/hardware_interface_type_values.hpp>
+
4
+
5#include <state_representation/exceptions/JointNotFoundException.hpp>
+
6
+
7using namespace state_representation;
+
8
+
9namespace modulo_controllers {
+
10
+
11static const std::map<std::string, JointStateVariable> interface_map =// NOLINT(cert-err58-cpp)
+
12 {{hardware_interface::HW_IF_POSITION, JointStateVariable::POSITIONS},
+
13 {hardware_interface::HW_IF_VELOCITY, JointStateVariable::VELOCITIES},
+
14 {hardware_interface::HW_IF_ACCELERATION, JointStateVariable::ACCELERATIONS},
+
15 {hardware_interface::HW_IF_EFFORT, JointStateVariable::TORQUES}};
+
16
+ +
18
+
+
19RobotControllerInterface::RobotControllerInterface(bool robot_model_required, const std::string& control_type)
+
20 : ControllerInterface(true),
+
21 control_type_(control_type),
+
22 robot_model_required_(robot_model_required),
+
23 new_joint_command_ready_(false),
+
24 command_decay_factor_(0.0),
+
25 command_rate_limit_(std::numeric_limits<double>::infinity()) {
+
26 if (!control_type.empty() && interface_map.find(control_type) == interface_map.cend()) {
+
27 RCLCPP_ERROR(get_node()->get_logger(), "Invalid control type: %s", control_type.c_str());
+
28 throw std::invalid_argument("Invalid control type");
+
29 }
+
30}
+
+
31
+
+
32rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn RobotControllerInterface::on_init() {
+ +
34 if (status != CallbackReturn::SUCCESS) {
+
35 return status;
+
36 }
+
37
+
38 try {
+ +
40 std::make_shared<Parameter<std::string>>("task_space_frame"),
+
41 "The frame name in the robot model to use for kinematics calculations (defaults to the last frame in the "
+
42 "model)");
+ +
44 "sort_joints", true,
+
45 "If true, re-arrange the 'joints' parameter into a physically correct order according to the robot model");
+ +
47 std::make_shared<Parameter<std::string>>("ft_sensor_name"),
+
48 "Optionally, the name of a force-torque sensor in the hardware interface");
+ +
50 std::make_shared<Parameter<std::string>>("ft_sensor_reference_frame"),
+
51 "The reference frame of the force-torque sensor in the robot model");
+ +
53 "command_half_life", 0.1,
+
54 "A time constant for the exponential decay of the commanded velocity, acceleration or torque if no new command "
+
55 "is set");
+ +
57 "command_rate_limit", command_rate_limit_,
+
58 "The maximum allowable change in command on any interface expressed in command units / second");
+
59 } catch (const std::exception& e) {
+
60 RCLCPP_ERROR(get_node()->get_logger(), "Exception thrown during on_init stage with message: %s \n", e.what());
+
61 return CallbackReturn::ERROR;
+
62 }
+
63 return CallbackReturn::SUCCESS;
+
64}
+
+
65
+
+
66rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn RobotControllerInterface::on_configure() {
+
67 if (*get_parameter("robot_description")) {
+
68 std::stringstream timestamp;
+
69 timestamp << std::time(nullptr);
+
70 auto urdf_path = "/tmp/" + hardware_name_ + "_" + timestamp.str();
+
71 try {
+
72 robot_model::Model::create_urdf_from_string(get_parameter_value<std::string>("robot_description"), urdf_path);
+
73 robot_ = std::make_shared<robot_model::Model>(hardware_name_, urdf_path);
+
74 RCLCPP_DEBUG(get_node()->get_logger(), "Generated robot model");
+
75 } catch (const std::exception& ex) {
+ + +
78 "Could not generate robot model with temporary urdf from string content at path %s: %s", urdf_path.c_str(),
+
79 ex.what());
+
80 }
+
81 }
+
82 if (robot_model_required_ && robot_ == nullptr) {
+
83 RCLCPP_ERROR(get_node()->get_logger(), "Robot model is not available even though it's required by the controller.");
+
84 return CallbackReturn::ERROR;
+
85 }
+
86
+
87 if (robot_) {
+
88 if (get_parameter("task_space_frame")->is_empty()) {
+
89 task_space_frame_ = robot_->get_frames().back();
+
90 } else {
+ +
92 if (!robot_->get_pinocchio_model().existFrame(task_space_frame_)) {
+ +
94 get_node()->get_logger(), "Provided task space frame %s does not exist in the robot model!",
+
95 task_space_frame_.c_str());
+
96 return CallbackReturn::ERROR;
+
97 }
+
98 }
+
99 }
+
100
+
101 auto joints = get_parameter("joints");
+
102 if (joints->is_empty() && !control_type_.empty()) {
+ +
104 get_node()->get_logger(), "The 'joints' parameter is required for a non-zero control type %s!",
+
105 control_type_.c_str());
+
106 return CallbackReturn::ERROR;
+
107 }
+
108 joints_ = joints->get_parameter_value<std::vector<std::string>>();
+
109
+
110 // sort the interface joint names using the robot model if necessary
+
111 if (get_parameter_value<bool>("sort_joints") && robot_) {
+
112 if (joints_.size() != robot_->get_number_of_joints()) {
+ +
114 get_node()->get_logger(),
+
115 "The number of interface joints (%zu) does not match the number of joints in the robot model (%u)",
+
116 joints_.size(), robot_->get_number_of_joints());
+
117 }
+
118 std::vector<std::string> ordered_joints;
+
119 for (const auto& ordered_name : robot_->get_joint_frames()) {
+
120 for (const auto& joint_name : joints_) {
+
121 if (joint_name == ordered_name) {
+
122 ordered_joints.push_back(joint_name);
+
123 break;
+
124 }
+
125 }
+
126 }
+
127 if (ordered_joints.size() < joints_.size()) {
+ +
129 get_node()->get_logger(), "%zu interface joints were not found in the robot model",
+
130 joints_.size() - ordered_joints.size());
+
131 return CallbackReturn::ERROR;
+
132 }
+
133 joints_ = ordered_joints;
+
134 }
+
135 joint_state_ = JointState(hardware_name_, joints_);
+
136
+
137 // set command interfaces from joints
+
138 if (!control_type_.empty()) {
+
139 if (control_type_ == hardware_interface::HW_IF_POSITION) {
+
140 previous_joint_command_values_ = std::vector<double>(joints_.size(), std::numeric_limits<double>::quiet_NaN());
+
141 } else {
+
142 previous_joint_command_values_ = std::vector<double>(joints_.size(), 0.0);
+
143 }
+
144 for (const auto& joint : joints_) {
+
145 add_command_interface(joint, control_type_);
+
146 }
+
147 }
+
148
+
149 auto ft_sensor_name = get_parameter("ft_sensor_name");
+
150 if (!ft_sensor_name->is_empty()) {
+
151 ft_sensor_name_ = ft_sensor_name->get_parameter_value<std::string>();
+
152 auto ft_sensor_reference_frame = get_parameter("ft_sensor_reference_frame");
+
153 if (ft_sensor_reference_frame->is_empty()) {
+ +
155 get_node()->get_logger(),
+
156 "The 'ft_sensor_reference_frame' parameter cannot be empty if a force-torque sensor is specified!");
+
157 return CallbackReturn::ERROR;
+
158 }
+
159 ft_sensor_reference_frame_ = ft_sensor_reference_frame->get_parameter_value<std::string>();
+
160 // TODO check that there is no joint in between
+
161 if (robot_ != nullptr && !robot_->get_pinocchio_model().existFrame(ft_sensor_reference_frame_)) {
+ +
163 get_node()->get_logger(), "The FT sensor reference frame '%s' does not exist on the robot model!",
+ +
165 return CallbackReturn::ERROR;
+
166 }
+
167 }
+
168
+
169 command_decay_factor_ = -log(0.5) / get_parameter_value<double>("command_half_life");
+
170 command_rate_limit_ = get_parameter_value<double>("command_rate_limit");
+
171
+
172 RCLCPP_DEBUG(get_node()->get_logger(), "Configuration of RobotControllerInterface successful");
+
173 return CallbackReturn::SUCCESS;
+
174}
+
+
175
+
+
176rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn RobotControllerInterface::on_activate() {
+
177 // initialize a force torque sensor state if applicable
+
178 if (!ft_sensor_name_.empty()) {
+
179 try {
+ + + + + + +
186 } catch (const std::out_of_range&) {
+ +
188 get_node()->get_logger(), "The force torque sensor '%s' does not have all the expected state interfaces!",
+
189 ft_sensor_name_.c_str());
+
190 return CallbackReturn::FAILURE;
+
191 }
+ +
193 }
+
194
+
195 RCLCPP_DEBUG(get_node()->get_logger(), "Activation of RobotControllerInterface successful");
+
196 return CallbackReturn::SUCCESS;
+
197}
+
+
198
+
199controller_interface::return_type RobotControllerInterface::read_state_interfaces() {
+ +
201 if (status != controller_interface::return_type::OK) {
+
202 return status;
+
203 }
+
204
+
205 if (joint_state_.get_size() > 0 && joint_state_.is_empty()) {
+
206 RCLCPP_DEBUG(get_node()->get_logger(), "Reading first joint state");
+
207 joint_state_.set_zero();
+
208 }
+
209
+
210 for (const auto& joint : joints_) {
+ +
212 unsigned int joint_index;
+
213 try {
+
214 joint_index = joint_state_.get_joint_index(joint);
+
215 } catch (exceptions::JointNotFoundException& ex) {
+ +
217 return controller_interface::return_type::ERROR;
+
218 }
+
219 for (const auto& [interface, value] : data) {
+
220 if (!std::isfinite(value)) {
+ +
222 get_node()->get_logger(), *get_node()->get_clock(), 1000, "Value of state interface '%s/%s' is not finite",
+
223 joint.c_str(), interface.c_str());
+
224 return controller_interface::return_type::ERROR;
+
225 }
+
226 switch (interface_map.at(interface)) {
+
227 case JointStateVariable::POSITIONS:
+
228 joint_state_.set_position(value, joint_index);
+
229 break;
+
230 case JointStateVariable::VELOCITIES:
+
231 joint_state_.set_velocity(value, joint_index);
+
232 break;
+
233 case JointStateVariable::ACCELERATIONS:
+
234 joint_state_.set_acceleration(value, joint_index);
+
235 break;
+
236 case JointStateVariable::TORQUES:
+
237 joint_state_.set_torque(value, joint_index);
+
238 break;
+
239 default:
+
240 break;
+
241 }
+
242 }
+
243 }
+
244
+
245 if (!ft_sensor_name_.empty()) {
+ +
247 std::vector<double> wrench = {ft_sensor.at("force.x"), ft_sensor.at("force.y"), ft_sensor.at("force.z"),
+
248 ft_sensor.at("torque.x"), ft_sensor.at("torque.y"), ft_sensor.at("torque.z")};
+
249 ft_sensor_.set_wrench(wrench);
+
250 }
+
251
+
252 return controller_interface::return_type::OK;
+
253}
+
254
+
255controller_interface::return_type RobotControllerInterface::write_command_interfaces(const rclcpp::Duration& period) {
+
256 if (!control_type_.empty()) {
+
257 double decay = 1.0 - command_decay_factor_ * period.seconds();
+
258 decay = std::max(0.0, decay);
+
259 double rate_limit = command_rate_limit_ * period.seconds();
+
260
+
261 auto joint_command_values = joint_command_values_.readFromRT();
+
262 if (joint_command_values == nullptr) {
+
263 new_joint_command_ready_ = false;
+
264 }
+
265
+
266 for (std::size_t index = 0; index < joints_.size(); ++index) {
+
267 double previous_command = previous_joint_command_values_.at(index);
+
268 if (new_joint_command_ready_) {
+
269 auto new_command = joint_command_values->at(index);
+
270 if (std::isfinite(previous_command) && std::abs(new_command - previous_command) > rate_limit) {
+ + +
273 }
+
274 set_command_interface(joints_.at(index), control_type_, new_command);
+
275 previous_joint_command_values_.at(index) = new_command;
+
276 } else if (control_type_ != hardware_interface::HW_IF_POSITION) {
+ +
278 set_command_interface(joints_.at(index), control_type_, new_command);
+
279 previous_joint_command_values_.at(index) = new_command;
+
280 }
+
281 }
+
282 new_joint_command_ready_ = false;
+
283 }
+
284
+ +
286}
+
287
+
+ +
289 return joint_state_;
+
290}
+
+
291
+
+ +
293 // TODO check if recompute is necessary?
+ +
295 return cartesian_state_;
+
296}
+
+
297
+
+ +
299 return ft_sensor_;
+
300}
+
+
301
+
+ +
303 if (robot_ != nullptr) {
+
304 cartesian_state_ = robot_->forward_kinematics(joint_state_, task_space_frame_);
+
305 cartesian_state_.set_twist(robot_->forward_velocity(joint_state_, task_space_frame_).get_twist());
+
306
+
307 if (!ft_sensor_.is_empty() && (ft_sensor_.get_reference_frame() == cartesian_state_.get_name())) {
+
308 auto ft_sensor_in_robot_frame = cartesian_state_ * ft_sensor_;
+
309 cartesian_state_.set_wrench(ft_sensor_in_robot_frame.get_wrench());
+
310 }
+
311 }
+
312}
+
+
313
+
+
314void RobotControllerInterface::set_joint_command(const JointState& joint_command) {
+
315 if (!joint_command) {
+
316 RCLCPP_DEBUG(get_node()->get_logger(), "set_joint_command called with an empty JointState");
+
317 return;
+
318 }
+
319
+
320 std::vector<double> joint_command_values;
+
321 joint_command_values.reserve(joints_.size());
+
322
+
323 for (const auto& joint : joints_) {
+
324 try {
+
325 switch (interface_map.at(control_type_)) {
+
326 case JointStateVariable::POSITIONS:
+
327 joint_command_values.push_back(joint_command.get_position(joint));
+
328 break;
+
329 case JointStateVariable::VELOCITIES:
+
330 joint_command_values.push_back(joint_command.get_velocity(joint));
+
331 break;
+
332 case JointStateVariable::ACCELERATIONS:
+
333 joint_command_values.push_back(joint_command.get_acceleration(joint));
+
334 break;
+
335 case JointStateVariable::TORQUES:
+
336 joint_command_values.push_back(joint_command.get_torque(joint));
+
337 break;
+
338 default:
+
339 break;
+
340 }
+
341 } catch (const state_representation::exceptions::JointNotFoundException& ex) {
+ +
343 }
+
344 }
+
345
+
346 if (joint_command_values.size() == joints_.size()) {
+
347 joint_command_values_.writeFromNonRT(joint_command_values);
+
348 new_joint_command_ready_ = true;
+
349 } else {
+ +
351 get_node()->get_logger(), *get_node()->get_clock(), 1000,
+
352 "Unable to set command values from provided joint command");
+
353 }
+
354}
+
+
355
+
+
356bool RobotControllerInterface::on_validate_parameter_callback(const std::shared_ptr<ParameterInterface>& parameter) {
+
357 if ((parameter->get_name() == "command_half_life" || parameter->get_name() == "command_rate_limit")
+
358 && parameter->get_parameter_value<double>() < 0.0) {
+ +
360 get_node()->get_logger(), "Parameter value of '%s' should be greater than 0", parameter->get_name().c_str());
+
361 return false;
+
362 }
+
363 return true;
+
364}
+
+
365
+
366}// namespace modulo_controllers
+
Base controller class to combine ros2_control, control libraries and modulo.
+
std::shared_ptr< state_representation::ParameterInterface > get_parameter(const std::string &name) const
Get a parameter by name.
+
virtual controller_interface::return_type write_command_interfaces(const rclcpp::Duration &period)
Write the command interfaces.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
virtual controller_interface::return_type read_state_interfaces()
Read the state interfaces.
+
std::unordered_map< std::string, double > get_state_interfaces(const std::string &name) const
Get a map containing the state interfaces by name of the parent tag.
+
CallbackReturn on_init() override
Declare parameters and register the on_set_parameters callback.
+
double get_state_interface(const std::string &name, const std::string &interface) const
Get the value of a state interface by name.
+
void set_command_interface(const std::string &name, const std::string &interface, double value)
Set the value of a command interface by name.
+
void add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
Add a parameter.
+
std::string hardware_name_
The hardware name provided by a parameter.
+
void add_command_interface(const std::string &name, const std::string &interface)
Add a command interface to the controller by name.
+
Base controller class that automatically associates joints with a JointState object.
+ +
std::string ft_sensor_name_
The name of a force torque sensor in the hardware description.
+
const state_representation::CartesianState & get_cartesian_state()
Access the Cartesian state object.
+
CallbackReturn on_activate() override
Activate the controller.
+
bool on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter) override
Parameter validation function to be redefined by derived controller classes.
+
const state_representation::JointState & get_joint_state()
Access the joint state object.
+
std::string ft_sensor_reference_frame_
The sensing reference frame.
+
const state_representation::CartesianWrench & get_ft_sensor()
Access the Cartesian wrench object.
+
std::shared_ptr< robot_model::Model > robot_
Robot model object generated from URDF.
+
void compute_cartesian_state()
Compute the Cartesian state from forward kinematics of the current joint state.
+
CallbackReturn on_init() override
Declare parameters and register the on_set_parameters callback.
+
void set_joint_command(const state_representation::JointState &joint_command)
Set the joint command object.
+
std::string task_space_frame_
The frame in task space for forward kinematics calculations, if applicable.
+
CallbackReturn on_configure() override
Configure the controller.
+
+ + + + diff --git a/versions/v4.2.2/_robot_controller_interface_8hpp_source.html b/versions/v4.2.2/_robot_controller_interface_8hpp_source.html new file mode 100644 index 000000000..c5ab6214a --- /dev/null +++ b/versions/v4.2.2/_robot_controller_interface_8hpp_source.html @@ -0,0 +1,179 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/include/modulo_controllers/RobotControllerInterface.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
RobotControllerInterface.hpp
+
+
+
1#pragma once
+
2
+
3#include <realtime_tools/realtime_buffer.h>
+
4
+
5#include <robot_model/Model.hpp>
+
6#include <state_representation/space/cartesian/CartesianState.hpp>
+
7#include <state_representation/space/cartesian/CartesianWrench.hpp>
+
8#include <state_representation/space/joint/JointState.hpp>
+
9
+
10#include "modulo_controllers/ControllerInterface.hpp"
+
11
+
12namespace modulo_controllers {
+
13
+
+ +
24public:
+ +
29
+
35 explicit RobotControllerInterface(bool robot_model_required, const std::string& control_type = "");
+
36
+
41 CallbackReturn on_init() override;
+
42
+ +
49
+
54 CallbackReturn on_activate() override;
+
55
+
56protected:
+
61 const state_representation::JointState& get_joint_state();
+
62
+
68 const state_representation::CartesianState& get_cartesian_state();
+
69
+
74 const state_representation::CartesianWrench& get_ft_sensor();
+
75
+ +
82
+
87 void set_joint_command(const state_representation::JointState& joint_command);
+
88
+
92 bool
+
93 on_validate_parameter_callback(const std::shared_ptr<state_representation::ParameterInterface>& parameter) override;
+
94
+
95 std::shared_ptr<robot_model::Model> robot_;
+
96 std::string task_space_frame_;
+
97
+
98 std::string ft_sensor_name_;
+ +
100
+
101private:
+
106 controller_interface::return_type read_state_interfaces() final;
+
107
+
112 controller_interface::return_type write_command_interfaces(const rclcpp::Duration& period) final;
+
113
+
114 std::vector<std::string> joints_;
+
115 std::string control_type_;
+
116
+
117 bool robot_model_required_;
+
118 bool
+
119 new_joint_command_ready_;
+
120 double
+
121 command_decay_factor_;
+
122 double
+
123 command_rate_limit_;
+
124
+
125 realtime_tools::RealtimeBuffer<std::vector<double>> joint_command_values_;
+
126 std::vector<double> previous_joint_command_values_;
+
127
+
128 state_representation::JointState joint_state_;
+
129 state_representation::CartesianState cartesian_state_;
+
130 state_representation::CartesianWrench ft_sensor_;
+
131};
+
+
132
+
133}// namespace modulo_controllers
+
Base controller class to combine ros2_control, control libraries and modulo.
+
T get_parameter_value(const std::string &name) const
Get a parameter value by name.
+
Base controller class that automatically associates joints with a JointState object.
+ +
std::string ft_sensor_name_
The name of a force torque sensor in the hardware description.
+
const state_representation::CartesianState & get_cartesian_state()
Access the Cartesian state object.
+
CallbackReturn on_activate() override
Activate the controller.
+
bool on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter) override
Parameter validation function to be redefined by derived controller classes.
+
const state_representation::JointState & get_joint_state()
Access the joint state object.
+
std::string ft_sensor_reference_frame_
The sensing reference frame.
+
const state_representation::CartesianWrench & get_ft_sensor()
Access the Cartesian wrench object.
+
std::shared_ptr< robot_model::Model > robot_
Robot model object generated from URDF.
+
void compute_cartesian_state()
Compute the Cartesian state from forward kinematics of the current joint state.
+
CallbackReturn on_init() override
Declare parameters and register the on_set_parameters callback.
+
void set_joint_command(const state_representation::JointState &joint_command)
Set the joint command object.
+
std::string task_space_frame_
The frame in task space for forward kinematics calculations, if applicable.
+
CallbackReturn on_configure() override
Configure the controller.
+
+ + + + diff --git a/versions/v4.2.2/_service_client_8hpp_source.html b/versions/v4.2.2/_service_client_8hpp_source.html new file mode 100644 index 000000000..243609fa7 --- /dev/null +++ b/versions/v4.2.2/_service_client_8hpp_source.html @@ -0,0 +1,121 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/include/modulo_utils/testutils/ServiceClient.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ServiceClient.hpp
+
+
+
1#pragma once
+
2
+
3#include <chrono>
+
4#include <exception>
+
5
+
6#include <rclcpp/rclcpp.hpp>
+
7
+
8namespace modulo_utils::testutils {
+
9
+
10using namespace std::chrono_literals;
+
11
+
12template<typename SrvT>
+
+
13class ServiceClient : public rclcpp::Node {
+
14public:
+
15 ServiceClient(const rclcpp::NodeOptions& options, const std::string& service) : rclcpp::Node("client_node", options) {
+
16 this->client_ = this->create_client<SrvT>(service);
+
17 if (!this->client_->wait_for_service(1s)) {
+
18 throw std::runtime_error("Service not available");
+
19 }
+
20 }
+
21
+
22 typename rclcpp::Client<SrvT>::FutureAndRequestId call_async(const std::shared_ptr<typename SrvT::Request>& request) {
+
23 return this->client_->async_send_request(request);
+
24 }
+
25
+
26 std::shared_ptr<rclcpp::Client<SrvT>> client_;
+
27};
+
+
28}// namespace modulo_utils::testutils
+ +
+ + + + diff --git a/versions/v4.2.2/_subscription_handler_8cpp_source.html b/versions/v4.2.2/_subscription_handler_8cpp_source.html new file mode 100644 index 000000000..2239296a4 --- /dev/null +++ b/versions/v4.2.2/_subscription_handler_8cpp_source.html @@ -0,0 +1,200 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/communication/SubscriptionHandler.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SubscriptionHandler.cpp
+
+
+
1#include "modulo_core/communication/SubscriptionHandler.hpp"
+
2
+
3#include <utility>
+
4
+ +
6
+
7template<>
+
8SubscriptionHandler<std_msgs::msg::Bool>::SubscriptionHandler(std::shared_ptr<MessagePairInterface> message_pair) :
+
9 SubscriptionInterface(std::move(message_pair)), clock_(std::make_shared<rclcpp::Clock>()) {}
+
10
+
11template<>
+
12SubscriptionHandler<std_msgs::msg::Float64>::SubscriptionHandler(std::shared_ptr<MessagePairInterface> message_pair) :
+
13 SubscriptionInterface(std::move(message_pair)), clock_(std::make_shared<rclcpp::Clock>()) {}
+
14template<>
+
15SubscriptionHandler<std_msgs::msg::Float64MultiArray>::SubscriptionHandler(
+
16 std::shared_ptr<MessagePairInterface> message_pair
+
17) :
+
18 SubscriptionInterface(std::move(message_pair)), clock_(std::make_shared<rclcpp::Clock>()) {}
+
19
+
20template<>
+
21SubscriptionHandler<std_msgs::msg::Int32>::SubscriptionHandler(std::shared_ptr<MessagePairInterface> message_pair) :
+
22 SubscriptionInterface(std::move(message_pair)), clock_(std::make_shared<rclcpp::Clock>()) {}
+
23
+
24template<>
+
25SubscriptionHandler<std_msgs::msg::String>::SubscriptionHandler(std::shared_ptr<MessagePairInterface> message_pair) :
+
26 SubscriptionInterface(std::move(message_pair)), clock_(std::make_shared<rclcpp::Clock>()) {}
+
27
+
28template<>
+
29SubscriptionHandler<EncodedState>::SubscriptionHandler(std::shared_ptr<MessagePairInterface> message_pair) :
+
30 SubscriptionInterface(std::move(message_pair)), clock_(std::make_shared<rclcpp::Clock>()) {}
+
31
+
32template<>
+
33std::function<void(const std::shared_ptr<std_msgs::msg::Bool>)>
+
34SubscriptionHandler<std_msgs::msg::Bool>::get_callback() {
+
35 return [this](const std::shared_ptr<std_msgs::msg::Bool> message) {
+
36 try {
+
37 this->get_message_pair()->template read<std_msgs::msg::Bool, bool>(*message);
+
38 this->user_callback_();
+
39 } catch (...) {
+
40 this->handle_callback_exceptions();
+
41 }
+
42 };
+
43}
+
44
+
45template<>
+
46std::function<void(const std::shared_ptr<std_msgs::msg::Float64>)>
+
47SubscriptionHandler<std_msgs::msg::Float64>::get_callback() {
+
48 return [this](const std::shared_ptr<std_msgs::msg::Float64> message) {
+
49 try {
+
50 this->get_message_pair()->template read<std_msgs::msg::Float64, double>(*message);
+
51 this->user_callback_();
+
52 } catch (...) {
+
53 this->handle_callback_exceptions();
+
54 }
+
55 };
+
56}
+
57
+
58template<>
+
59std::function<void(const std::shared_ptr<std_msgs::msg::Float64MultiArray>)>
+
60SubscriptionHandler<std_msgs::msg::Float64MultiArray>::get_callback() {
+
61 return [this](const std::shared_ptr<std_msgs::msg::Float64MultiArray> message) {
+
62 try {
+
63 this->get_message_pair()->template read<std_msgs::msg::Float64MultiArray, std::vector<double>>(*message);
+
64 this->user_callback_();
+
65 } catch (...) {
+
66 this->handle_callback_exceptions();
+
67 }
+
68 };
+
69}
+
70
+
71template<>
+
72std::function<void(const std::shared_ptr<std_msgs::msg::Int32>)>
+
73SubscriptionHandler<std_msgs::msg::Int32>::get_callback() {
+
74 return [this](const std::shared_ptr<std_msgs::msg::Int32> message) {
+
75 try {
+
76 this->get_message_pair()->template read<std_msgs::msg::Int32, int>(*message);
+
77 this->user_callback_();
+
78 } catch (...) {
+
79 this->handle_callback_exceptions();
+
80 }
+
81 };
+
82}
+
83
+
84template<>
+
85std::function<void(const std::shared_ptr<std_msgs::msg::String>)>
+
86SubscriptionHandler<std_msgs::msg::String>::get_callback() {
+
87 return [this](const std::shared_ptr<std_msgs::msg::String> message) {
+
88 try {
+
89 this->get_message_pair()->template read<std_msgs::msg::String, std::string>(*message);
+
90 this->user_callback_();
+
91 } catch (...) {
+
92 this->handle_callback_exceptions();
+
93 }
+
94 };
+
95}
+
96
+
97template<>
+
98std::function<void(const std::shared_ptr<EncodedState>)> SubscriptionHandler<EncodedState>::get_callback() {
+
99 return [this](const std::shared_ptr<EncodedState> message) {
+
100 try {
+
101 this->get_message_pair()->template read<EncodedState, state_representation::State>(*message);
+
102 this->user_callback_();
+
103 } catch (...) {
+
104 this->handle_callback_exceptions();
+
105 }
+
106 };
+
107}
+
108}// namespace modulo_core::communication
+
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair=nullptr)
Constructor with the message pair.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
+ + + + diff --git a/versions/v4.2.2/_subscription_handler_8hpp_source.html b/versions/v4.2.2/_subscription_handler_8hpp_source.html new file mode 100644 index 000000000..e897032f9 --- /dev/null +++ b/versions/v4.2.2/_subscription_handler_8hpp_source.html @@ -0,0 +1,204 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/SubscriptionHandler.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SubscriptionHandler.hpp
+
+
+
1#pragma once
+
2
+
3#include "modulo_core/communication/SubscriptionInterface.hpp"
+
4#include "modulo_core/exceptions/NullPointerException.hpp"
+
5
+ +
7
+
13template<typename MsgT>
+
+ +
15public:
+
20 explicit SubscriptionHandler(std::shared_ptr<MessagePairInterface> message_pair = nullptr);
+
21
+
25 ~SubscriptionHandler() override;
+
26
+
30 [[nodiscard]] std::shared_ptr<rclcpp::Subscription<MsgT>> get_subscription() const;
+
31
+
37 void set_subscription(const std::shared_ptr<rclcpp::Subscription<MsgT>>& subscription);
+
38
+
43 void set_user_callback(const std::function<void()>& user_callback);
+
44
+
48 std::function<void(const std::shared_ptr<MsgT>)> get_callback();
+
49
+
55 std::function<void(const std::shared_ptr<MsgT>)> get_callback(const std::function<void()>& user_callback);
+
56
+
65 std::shared_ptr<SubscriptionInterface>
+
66 create_subscription_interface(const std::shared_ptr<rclcpp::Subscription<MsgT>>& subscription);
+
67
+
68private:
+
72 void handle_callback_exceptions();
+
73
+
74 std::shared_ptr<rclcpp::Subscription<MsgT>> subscription_;
+
75 std::shared_ptr<rclcpp::Clock> clock_;
+
76 std::function<void()> user_callback_ = []{};
+
77};
+
+
78
+
79template<typename MsgT>
+
+ +
81 this->subscription_.reset();
+
82}
+
+
83
+
84template<typename MsgT>
+
+
85std::shared_ptr<rclcpp::Subscription<MsgT>> SubscriptionHandler<MsgT>::get_subscription() const {
+
86 return this->subscription_;
+
87}
+
+
88
+
89template<typename MsgT>
+
+
90void SubscriptionHandler<MsgT>::set_subscription(const std::shared_ptr<rclcpp::Subscription<MsgT>>& subscription) {
+
91 if (subscription == nullptr) {
+
92 throw exceptions::NullPointerException("Provide a valid pointer");
+
93 }
+
94 this->subscription_ = subscription;
+
95}
+
+
96
+
97template<typename MsgT>
+
+
98void SubscriptionHandler<MsgT>::set_user_callback(const std::function<void()>& user_callback) {
+
99 this->user_callback_ = user_callback;
+
100}
+
+
101
+
102template<typename MsgT>
+
103std::function<void(const std::shared_ptr<MsgT>)>
+
+
104SubscriptionHandler<MsgT>::get_callback(const std::function<void()>& user_callback) {
+
105 this->set_user_callback(user_callback);
+
106 return this->get_callback();
+
107}
+
+
108
+
109template<typename MsgT>
+
+
110std::shared_ptr<SubscriptionInterface> SubscriptionHandler<MsgT>::create_subscription_interface(
+
111 const std::shared_ptr<rclcpp::Subscription<MsgT>>& subscription
+
112) {
+
113 this->set_subscription(subscription);
+
114 return std::shared_ptr<SubscriptionInterface>(this->shared_from_this());
+
115}
+
+
116
+
117template<typename MsgT>
+ +
119 try {
+
120 // re-throw the original exception
+
121 throw;
+
122 } catch (const exceptions::CoreException& ex) {
+
123 RCLCPP_WARN_STREAM_THROTTLE(rclcpp::get_logger("SubscriptionHandler"), *this->clock_, 1000,
+
124 "Exception in subscription callback: " << ex.what());
+
125 } catch (const std::exception& ex) {
+
126 RCLCPP_WARN_STREAM_THROTTLE(rclcpp::get_logger("SubscriptionHandler"), *this->clock_, 1000,
+
127 "Unhandled exception in subscription user callback: " << ex.what());
+
128 }
+
129}
+
130
+
131}// namespace modulo_core::communication
+
The SubscriptionHandler handles different types of ROS subscriptions to receive data from those subsc...
+
std::function< void(const std::shared_ptr< MsgT >)> get_callback()
Get a callback function that will be associated with the ROS subscription to receive and translate me...
+
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair=nullptr)
Constructor with the message pair.
+
~SubscriptionHandler() override
Destructor to explicitly reset the subscription pointer.
+
std::shared_ptr< SubscriptionInterface > create_subscription_interface(const std::shared_ptr< rclcpp::Subscription< MsgT > > &subscription)
Create a SubscriptionInterface pointer through an instance of a SubscriptionHandler by providing a RO...
+
std::shared_ptr< rclcpp::Subscription< MsgT > > get_subscription() const
Getter of the ROS subscription.
+
void set_subscription(const std::shared_ptr< rclcpp::Subscription< MsgT > > &subscription)
Setter of the ROS subscription.
+
void set_user_callback(const std::function< void()> &user_callback)
Setter of a user callback function to be executed after the subscription callback.
+
Interface class to enable non-templated subscriptions with ROS subscriptions from derived Subscriptio...
+
A base class for all core exceptions.
+
An exception class to notify that a certain pointer is null.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
+ + + + diff --git a/versions/v4.2.2/_subscription_interface_8cpp_source.html b/versions/v4.2.2/_subscription_interface_8cpp_source.html new file mode 100644 index 000000000..af5cae6dc --- /dev/null +++ b/versions/v4.2.2/_subscription_interface_8cpp_source.html @@ -0,0 +1,121 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/communication/SubscriptionInterface.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SubscriptionInterface.cpp
+
+
+
1#include "modulo_core/communication/SubscriptionInterface.hpp"
+
2
+
3#include "modulo_core/exceptions/NullPointerException.hpp"
+
4
+ +
6
+
+
7SubscriptionInterface::SubscriptionInterface(std::shared_ptr<MessagePairInterface> message_pair) :
+
8 message_pair_(std::move(message_pair)) {}
+
+
9
+
+
10std::shared_ptr<MessagePairInterface> SubscriptionInterface::get_message_pair() const {
+
11 return this->message_pair_;
+
12}
+
+
13
+
+
14void SubscriptionInterface::set_message_pair(const std::shared_ptr<MessagePairInterface>& message_pair) {
+
15 if (message_pair == nullptr) {
+
16 throw exceptions::NullPointerException("Provide a valid pointer");
+
17 }
+
18 this->message_pair_ = message_pair;
+
19}
+
+
20}// namespace modulo_core::communication
+
SubscriptionInterface(std::shared_ptr< MessagePairInterface > message_pair=nullptr)
Constructor with the message pair.
+
void set_message_pair(const std::shared_ptr< MessagePairInterface > &message_pair)
Set the pointer to the message pair of the SubscriptionInterface.
+
std::shared_ptr< MessagePairInterface > get_message_pair() const
Get the pointer to the message pair of the SubscriptionInterface.
+
An exception class to notify that a certain pointer is null.
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
+ + + + diff --git a/versions/v4.2.2/_subscription_interface_8hpp_source.html b/versions/v4.2.2/_subscription_interface_8hpp_source.html new file mode 100644 index 000000000..03e84e3c3 --- /dev/null +++ b/versions/v4.2.2/_subscription_interface_8hpp_source.html @@ -0,0 +1,153 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication/SubscriptionInterface.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
SubscriptionInterface.hpp
+
+
+
1#pragma once
+
2
+
3#include <rclcpp/subscription.hpp>
+
4
+
5#include "modulo_core/communication/MessagePair.hpp"
+
6#include "modulo_core/exceptions/InvalidPointerCastException.hpp"
+
7#include "modulo_core/exceptions/InvalidPointerException.hpp"
+
8
+ +
10
+
11// forward declaration of derived SubscriptionHandler class
+
12template<typename MsgT>
+
13class SubscriptionHandler;
+
14
+
+
20class SubscriptionInterface : public std::enable_shared_from_this<SubscriptionInterface> {
+
21public:
+
26 explicit SubscriptionInterface(std::shared_ptr<MessagePairInterface> message_pair = nullptr);
+
27
+
31 SubscriptionInterface(const SubscriptionInterface& subscription) = default;
+
32
+
36 virtual ~SubscriptionInterface() = default;
+
37
+
56 template<typename MsgT>
+
57 std::shared_ptr<SubscriptionHandler<MsgT>> get_handler(bool validate_pointer = true);
+
58
+
62 [[nodiscard]] std::shared_ptr<MessagePairInterface> get_message_pair() const;
+
63
+
68 void set_message_pair(const std::shared_ptr<MessagePairInterface>& message_pair);
+
69
+
70private:
+
71 std::shared_ptr<MessagePairInterface> message_pair_;
+
72};
+
+
73
+
74template<typename MsgT>
+
+
75inline std::shared_ptr<SubscriptionHandler<MsgT>> SubscriptionInterface::get_handler(bool validate_pointer) {
+
76 std::shared_ptr<SubscriptionHandler<MsgT>> subscription_ptr;
+
77 try {
+
78 subscription_ptr = std::dynamic_pointer_cast<SubscriptionHandler<MsgT>>(this->shared_from_this());
+
79 } catch (const std::exception& ex) {
+
80 if (validate_pointer) {
+
81 throw exceptions::InvalidPointerException("Subscription interface is not managed by a valid pointer");
+
82 }
+
83 }
+
84 if (subscription_ptr == nullptr && validate_pointer) {
+ +
86 "Unable to cast subscription interface to a subscription pointer of requested type");
+
87 }
+
88 return subscription_ptr;
+
89}
+
+
90}// namespace modulo_core::communication
+
Interface class to enable non-templated subscriptions with ROS subscriptions from derived Subscriptio...
+
SubscriptionInterface(const SubscriptionInterface &subscription)=default
Copy constructor from another SubscriptionInterface.
+
std::shared_ptr< SubscriptionHandler< MsgT > > get_handler(bool validate_pointer=true)
Get a pointer to a derived SubscriptionHandler instance from a SubscriptionInterface pointer.
+
void set_message_pair(const std::shared_ptr< MessagePairInterface > &message_pair)
Set the pointer to the message pair of the SubscriptionInterface.
+
std::shared_ptr< MessagePairInterface > get_message_pair() const
Get the pointer to the message pair of the SubscriptionInterface.
+
virtual ~SubscriptionInterface()=default
Default virtual destructor.
+
An exception class to notify if the result of getting an instance of a derived class through dynamic ...
+
An exception class to notify if an object has no reference count (if the object is not owned by any p...
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+
+ + + + diff --git a/versions/v4.2.2/annotated.html b/versions/v4.2.2/annotated.html new file mode 100644 index 000000000..a21aa834c --- /dev/null +++ b/versions/v4.2.2/annotated.html @@ -0,0 +1,121 @@ + + + + + + + +Modulo: Class List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Nmodulo_componentsModulo components
 NexceptionsModulo component exception classes
 CAddServiceExceptionAn exception class to notify errors when adding a service
 CAddSignalExceptionAn exception class to notify errors when adding a signal
 CComponentExceptionA base class for all component exceptions
 CComponentParameterExceptionAn exception class to notify errors with component parameters
 CLookupTransformExceptionAn exception class to notify an error while looking up TF transforms
 CComponentA wrapper for rclcpp::Node to simplify application composition through unified component interfaces
 CComponentInterfaceBase interface class for modulo components to wrap a ROS Node with custom behaviour
 CComponentServiceResponseResponse structure to be returned by component services
 CLifecycleComponentA wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified component interfaces while supporting lifecycle states and transitions
 Nmodulo_controllers
 CControllerInputInput structure to save topic data in a realtime buffer and timestamps in one object
 CControllerInterfaceBase controller class to combine ros2_control, control libraries and modulo
 CControllerServiceResponseResponse structure to be returned by controller services
 CRobotControllerInterfaceBase controller class that automatically associates joints with a JointState object
 Nmodulo_coreModulo Core
 NcommunicationModulo Core communication module for handling messages on publication and subscription interfaces
 CMessagePairThe MessagePair stores a pointer to a variable and translates the value of this pointer back and forth between the corresponding ROS messages
 CMessagePairInterfaceInterface class to enable non-templated writing and reading ROS messages from derived MessagePair instances through dynamic down-casting
 CPublisherHandlerThe PublisherHandler handles different types of ROS publishers to activate, deactivate and publish data with those publishers
 CPublisherInterfaceInterface class to enable non-templated activating/deactivating/publishing of ROS publishers from derived PublisherHandler instances through dynamic down-casting
 CSubscriptionHandlerThe SubscriptionHandler handles different types of ROS subscriptions to receive data from those subscriptions
 CSubscriptionInterfaceInterface class to enable non-templated subscriptions with ROS subscriptions from derived SubscriptionHandler instances through dynamic down-casting
 NexceptionsModulo Core exceptions module for defining exception classes
 CCoreExceptionA base class for all core exceptions
 CInvalidPointerCastExceptionAn exception class to notify if the result of getting an instance of a derived class through dynamic down-casting of an object of the base class is not a correctly typed instance of the derived class
 CInvalidPointerExceptionAn exception class to notify if an object has no reference count (if the object is not owned by any pointer) when attempting to get a derived instance through dynamic down-casting
 CMessageTranslationExceptionAn exception class to notify that the translation of a ROS message failed
 CNullPointerExceptionAn exception class to notify that a certain pointer is null
 CParameterTranslationExceptionAn exception class to notify incompatibility when translating parameters from different sources
 Nmodulo_utils
 Ntestutils
 CPredicatesListener
 CServiceClient
 CComponentInterfacePublicInterfaceFriend class to the ComponentInterface to allow test fixtures to access protected and private members
+
+
+ + + + diff --git a/versions/v4.2.2/bc_s.png b/versions/v4.2.2/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/bc_sd.png b/versions/v4.2.2/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/class_component_interface_public_interface.html b/versions/v4.2.2/class_component_interface_public_interface.html new file mode 100644 index 000000000..c121a697f --- /dev/null +++ b/versions/v4.2.2/class_component_interface_public_interface.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: ComponentInterfacePublicInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
ComponentInterfacePublicInterface Class Reference
+
+
+ +

Friend class to the ComponentInterface to allow test fixtures to access protected and private members. + More...

+ +

#include <ComponentInterface.hpp>

+

Detailed Description

+

Friend class to the ComponentInterface to allow test fixtures to access protected and private members.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classes.html b/versions/v4.2.2/classes.html new file mode 100644 index 000000000..66623019f --- /dev/null +++ b/versions/v4.2.2/classes.html @@ -0,0 +1,111 @@ + + + + + + + +Modulo: Class Index + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+ + + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1_component-members.html b/versions/v4.2.2/classmodulo__components_1_1_component-members.html new file mode 100644 index 000000000..e40f29a90 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1_component-members.html @@ -0,0 +1,133 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components::Component Member List
+
+
+ +

This is the complete list of members for modulo_components::Component, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_input(const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_output(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false, bool publish_on_step=true)modulo_components::Componentinlineprotected
add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)modulo_components::ComponentInterfaceprotected
add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)modulo_components::ComponentInterfaceinlineprotected
add_periodic_callback(const std::string &name, const std::function< void(void)> &callback)modulo_components::ComponentInterfaceprotected
add_predicate(const std::string &predicate_name, bool predicate_value)modulo_components::ComponentInterfaceprotected
add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_components::ComponentInterfaceprotected
add_service(const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)modulo_components::ComponentInterfaceprotected
add_service(const std::string &service_name, const std::function< ComponentServiceResponse(const std::string &string)> &callback)modulo_components::ComponentInterfaceprotected
add_static_tf_broadcaster()modulo_components::ComponentInterfaceprotected
add_tf_broadcaster()modulo_components::ComponentInterfaceprotected
add_tf_listener()modulo_components::ComponentInterfaceprotected
add_trigger(const std::string &trigger_name)modulo_components::ComponentInterfaceprotected
Component(const rclcpp::NodeOptions &node_options, const std::string &fallback_name="Component")modulo_components::Componentexplicit
ComponentInterface(const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > &interfaces)modulo_components::ComponentInterfaceexplicitprotected
ComponentPublicInterface (defined in modulo_components::Component)modulo_components::Componentfriend
declare_input(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceprotected
declare_output(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceprotected
execute()modulo_components::Componentprotected
get_parameter(const std::string &name) constmodulo_components::Componentprotected
get_parameter_value(const std::string &name) constmodulo_components::ComponentInterfaceinlineprotected
get_predicate(const std::string &predicate_name)modulo_components::ComponentInterfaceprotected
get_qos() constmodulo_components::ComponentInterfaceprotected
lookup_transform(const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)modulo_components::ComponentInterfaceprotected
lookup_transform(const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))modulo_components::ComponentInterfaceprotected
on_execute_callback()modulo_components::Componentprotectedvirtual
on_step_callback()modulo_components::ComponentInterfaceprotectedvirtual
on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)modulo_components::ComponentInterfaceprotectedvirtual
publish_output(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
raise_error()modulo_components::ComponentInterfaceprotectedvirtual
remove_input(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
remove_output(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
send_static_transform(const state_representation::CartesianPose &transform)modulo_components::ComponentInterfaceprotected
send_static_transforms(const std::vector< state_representation::CartesianPose > &transforms)modulo_components::ComponentInterfaceprotected
send_transform(const state_representation::CartesianPose &transform)modulo_components::ComponentInterfaceprotected
send_transforms(const std::vector< state_representation::CartesianPose > &transforms)modulo_components::ComponentInterfaceprotected
set_parameter_value(const std::string &name, const T &value)modulo_components::ComponentInterfaceinlineprotected
set_predicate(const std::string &predicate_name, bool predicate_value)modulo_components::ComponentInterfaceprotected
set_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_components::ComponentInterfaceprotected
set_qos(const rclcpp::QoS &qos)modulo_components::ComponentInterfaceprotected
trigger(const std::string &trigger_name)modulo_components::ComponentInterfaceprotected
~Component()=defaultmodulo_components::Componentvirtual
~ComponentInterface()=defaultmodulo_components::ComponentInterfacevirtual
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1_component.html b/versions/v4.2.2/classmodulo__components_1_1_component.html new file mode 100644 index 000000000..b9decf3a3 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1_component.html @@ -0,0 +1,552 @@ + + + + + + + +Modulo: modulo_components::Component Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::Component Class Reference
+
+
+ +

A wrapper for rclcpp::Node to simplify application composition through unified component interfaces. + More...

+ +

#include <Component.hpp>

+
+Inheritance diagram for modulo_components::Component:
+
+
+ + +modulo_components::ComponentInterface + +
+ + + + + + + + + + + + +

+Public Member Functions

 Component (const rclcpp::NodeOptions &node_options, const std::string &fallback_name="Component")
 Constructor from node options.
 
+virtual ~Component ()=default
 Virtual default destructor.
 
- Public Member Functions inherited from modulo_components::ComponentInterface
+virtual ~ComponentInterface ()=default
 Virtual default destructor.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

std::shared_ptr< state_representation::ParameterInterface > get_parameter (const std::string &name) const
 Get a parameter by name.
 
void execute ()
 Start the execution thread.
 
virtual bool on_execute_callback ()
 Execute the component logic. To be redefined in derived classes.
 
template<typename DataT >
void add_output (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false, bool publish_on_step=true)
 Add and configure an output signal of the component.
 
- Protected Member Functions inherited from modulo_components::ComponentInterface
 ComponentInterface (const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > &interfaces)
 Constructor with all node interfaces.
 
virtual void on_step_callback ()
 Steps to execute periodically. To be redefined by derived Component classes.
 
void add_parameter (const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
 Add a parameter.
 
template<typename T >
void add_parameter (const std::string &name, const T &value, const std::string &description, bool read_only=false)
 Add a parameter.
 
std::shared_ptr< state_representation::ParameterInterface > get_parameter (const std::string &name) const
 Get a parameter by name.
 
template<typename T >
get_parameter_value (const std::string &name) const
 Get a parameter value by name.
 
template<typename T >
void set_parameter_value (const std::string &name, const T &value)
 Set the value of a parameter.
 
virtual bool on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > &parameter)
 Parameter validation function to be redefined by derived Component classes.
 
void add_predicate (const std::string &predicate_name, bool predicate_value)
 Add a predicate to the map of predicates.
 
void add_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Add a predicate to the map of predicates based on a function to periodically call.
 
bool get_predicate (const std::string &predicate_name)
 Get the logical value of a predicate.
 
void set_predicate (const std::string &predicate_name, bool predicate_value)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void set_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void add_trigger (const std::string &trigger_name)
 Add a trigger to the component. Triggers are predicates that are always false except when it's triggered in which case it is set back to false immediately after it is read.
 
void trigger (const std::string &trigger_name)
 Latch the trigger with the provided name.
 
void declare_input (const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
 Declare an input to create the topic parameter without adding it to the map of inputs yet.
 
void declare_output (const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
 Declare an output to create the topic parameter without adding it to the map of outputs yet.
 
template<typename DataT >
void add_input (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename DataT >
void add_input (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename MsgT >
void add_input (const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename DataT >
std::string create_output (modulo_core::communication::PublisherType publisher_type, const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic, bool fixed_topic, bool publish_on_step)
 Helper function to parse the signal name and add an unconfigured PublisherInterface to the map of outputs.
 
void publish_output (const std::string &signal_name)
 Trigger the publishing of an output.
 
void remove_input (const std::string &signal_name)
 Remove an input from the map of inputs.
 
void remove_output (const std::string &signal_name)
 Remove an output from the map of outputs.
 
void add_service (const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)
 Add a service to trigger a callback function with no input arguments.
 
void add_service (const std::string &service_name, const std::function< ComponentServiceResponse(const std::string &string)> &callback)
 Add a service to trigger a callback function with a string payload.
 
void add_periodic_callback (const std::string &name, const std::function< void(void)> &callback)
 Add a periodic callback function.
 
void add_tf_broadcaster ()
 Configure a transform broadcaster.
 
void add_static_tf_broadcaster ()
 Configure a static transform broadcaster.
 
void add_tf_listener ()
 Configure a transform buffer and listener.
 
void send_transform (const state_representation::CartesianPose &transform)
 Send a transform to TF.
 
void send_transforms (const std::vector< state_representation::CartesianPose > &transforms)
 Send a vector of transforms to TF.
 
void send_static_transform (const state_representation::CartesianPose &transform)
 Send a static transform to TF.
 
void send_static_transforms (const std::vector< state_representation::CartesianPose > &transforms)
 Send a vector of static transforms to TF.
 
state_representation::CartesianPose lookup_transform (const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)
 Look up a transform from TF.
 
state_representation::CartesianPose lookup_transform (const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))
 Look up a transform from TF.
 
rclcpp::QoS get_qos () const
 Getter of the Quality of Service attribute.
 
void set_qos (const rclcpp::QoS &qos)
 Set the Quality of Service for ROS publishers and subscribers.
 
virtual void raise_error ()
 Put the component in error state by setting the 'in_error_state' predicate to true.
 
void publish_predicate (const std::string &name)
 Helper function to publish a predicate.
 
void publish_predicates ()
 Helper function to publish all predicates.
 
void publish_outputs ()
 Helper function to publish all output signals.
 
void evaluate_periodic_callbacks ()
 Helper function to evaluate all periodic function callbacks.
 
+ + + +

+Friends

class ComponentPublicInterface
 
+ + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from modulo_components::ComponentInterface
std::map< std::string, std::shared_ptr< modulo_core::communication::SubscriptionInterface > > inputs_
 Map of inputs.
 
std::map< std::string, std::shared_ptr< modulo_core::communication::PublisherInterface > > outputs_
 Map of outputs.
 
std::map< std::string, boolperiodic_outputs_
 Map of outputs with periodic publishing flag.
 
+

Detailed Description

+

A wrapper for rclcpp::Node to simplify application composition through unified component interfaces.

+

This class is intended for direct inheritance to implement custom components that perform one-shot or externally triggered operations. Examples of triggered behavior include providing a service, processing signals or publishing outputs on a periodic timer. One-shot behaviors may include interacting with the filesystem or publishing a predefined sequence of outputs. Developers should override on_validate_parameter_callback() if any parameters are added and on_execute_callback() to implement any one-shot behavior. In the latter case, execute() should be invoked at the end of the derived constructor.

See also
LifecycleComponent for a state-based composition alternative
+ +

Definition at line 23 of file Component.hpp.

+

Constructor & Destructor Documentation

+ +

◆ Component()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
modulo_components::Component::Component (const rclcpp::NodeOptions & node_options,
const std::string & fallback_name = "Component" 
)
+
+explicit
+
+ +

Constructor from node options.

+
Parameters
+ + + +
node_optionsNode options as used in ROS2 Node
fallback_nameThe name of the component if it was not provided through the node options
+
+
+ +

Definition at line 8 of file Component.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ add_output()

+ +
+
+
+template<typename DataT >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::Component::add_output (const std::string & signal_name,
const std::shared_ptr< DataT > & data,
const std::string & default_topic = "",
bool fixed_topic = false,
bool publish_on_step = true 
)
+
+inlineprotected
+
+ +

Add and configure an output signal of the component.

+
Template Parameters
+ + +
DataTType of the data pointer
+
+
+
Parameters
+ + + + + + +
signal_nameName of the output signal
dataData to transmit on the output signal
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the output signal is fixed
publish_on_stepIf true, the output is published periodically on step
+
+
+ +

Definition at line 100 of file Component.hpp.

+ +
+
+ +

◆ execute()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::Component::execute ()
+
+protected
+
+ +

Start the execution thread.

+ +

Definition at line 32 of file Component.cpp.

+ +
+
+ +

◆ get_parameter()

+ +
+
+ + + + + +
+ + + + + + + + +
std::shared_ptr< state_representation::ParameterInterface > modulo_components::Component::get_parameter (const std::string & name) const
+
+protected
+
+ +

Get a parameter by name.

+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Exceptions
+ + +
modulo_components::exceptions::ComponentParameterExceptionif the parameter could not be found
+
+
+
Returns
The ParameterInterface pointer to a Parameter instance
+ +

Definition at line 61 of file Component.cpp.

+ +
+
+ +

◆ on_execute_callback()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_components::Component::on_execute_callback ()
+
+protectedvirtual
+
+ +

Execute the component logic. To be redefined in derived classes.

+
Returns
True, if the execution was successful, false otherwise
+ +

Definition at line 56 of file Component.cpp.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ ComponentPublicInterface

+ +
+
+ + + + + +
+ + + + +
friend class ComponentPublicInterface
+
+friend
+
+ +

Definition at line 25 of file Component.hpp.

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • /github/workspace/source/modulo_components/include/modulo_components/Component.hpp
  • +
  • /github/workspace/source/modulo_components/src/Component.cpp
  • +
+
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1_component.png b/versions/v4.2.2/classmodulo__components_1_1_component.png new file mode 100644 index 0000000000000000000000000000000000000000..70056ff34b20ca3463e49615f15fcdca1c610f3f GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0y~yVEh7P2XHV0$s3=_K^*A-pAgso|NjG-FW!7D?LV~K z!a%b?V)~gE2M!zniU&`+yaFi4SrX(I%mCzrfjQIcD+~Ac&;LqGr`%~w-F-LDyj)@COiShIev{5|yi|GF zGXa_LqvOlt{Sxn|)#}x)IKE_gukoasPPLF%W|L~><=yzFEXVqn_2uE*^_SYe?fl_> ziC;NR-S+FVUF$1?EapFLUz2=o`Tpr!&z!mEt8J?rY@r(W-8yzAzw0}ly~pIdufHm~ zEOl2&b56>e8+Y6 zu*tf$YF{_sKK)?P`#9~1KjYkL>_P;yOXkkK-oDzncA}YPjJ}xDXZ{7YGiL6cyVgfP zeVyf&OWm2aa(CLYjQ*Ca_$K(-J@)^*=S%#v9X0pfKXXR!!RAZHlcLv%q%Xa`aMdM~ z@c*StPc88;uaDj}^QLQ!&E?Zc(L3uDucWcAG_sQ}`8zAl;$F<<>wQ19{>?S5)h;xf zcKNO8-q?8g6(?tQhdbv^|E|CGWo_@gyZ-4<6MbK9^{>~@o;h>xZ047>k}|6w#&n*3 zy?OP{aMcC7=JdvBeF?dj{Njcq zpr^FM9$)N@_6hq>|UP9OD??my%`&5eIEuAAgH=|2Nd#azKl zo|h!yjJaQ?1buQ-`&+jA?jA;l_(yyUbsvBJQj}$=Dcrw%+q=(Sovj#tEUL~tf30?3 zoyYgc`-}(l?c(j1FgF-GSut2B6JWgi{`;;mg8;*U=N+Ex4CyT;3KvvJjX+J=hzV|IJxY z$K}qL{HS#Q<*7ddRGwVQezUP;t)BVXhc?|)=Fa6(^{fV(X|7za0Ae@qt;$UkSva6(2joR!<6zJ?Ew;TBY@V^VW??^LZie+BL`g-)U*5))LRExpumzr%d1S4j4~$ zZ6|<%dMq7i-+O^eswX9ZPMIT!U<7-elxFzg`;XZgTe~DWM4f D%Ip)3 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__components_1_1_component_interface-members.html b/versions/v4.2.2/classmodulo__components_1_1_component_interface-members.html new file mode 100644 index 000000000..571e5fb5d --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1_component_interface-members.html @@ -0,0 +1,137 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components::ComponentInterface Member List
+
+
+ +

This is the complete list of members for modulo_components::ComponentInterface, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_input(const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)modulo_components::ComponentInterfaceprotected
add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)modulo_components::ComponentInterfaceinlineprotected
add_periodic_callback(const std::string &name, const std::function< void(void)> &callback)modulo_components::ComponentInterfaceprotected
add_predicate(const std::string &predicate_name, bool predicate_value)modulo_components::ComponentInterfaceprotected
add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_components::ComponentInterfaceprotected
add_service(const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)modulo_components::ComponentInterfaceprotected
add_service(const std::string &service_name, const std::function< ComponentServiceResponse(const std::string &string)> &callback)modulo_components::ComponentInterfaceprotected
add_static_tf_broadcaster()modulo_components::ComponentInterfaceprotected
add_tf_broadcaster()modulo_components::ComponentInterfaceprotected
add_tf_listener()modulo_components::ComponentInterfaceprotected
add_trigger(const std::string &trigger_name)modulo_components::ComponentInterfaceprotected
ComponentInterface(const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > &interfaces)modulo_components::ComponentInterfaceexplicitprotected
ComponentInterfacePublicInterface (defined in modulo_components::ComponentInterface)modulo_components::ComponentInterfacefriend
create_output(modulo_core::communication::PublisherType publisher_type, const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic, bool fixed_topic, bool publish_on_step)modulo_components::ComponentInterfaceinlineprotected
declare_input(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceprotected
declare_output(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceprotected
evaluate_periodic_callbacks()modulo_components::ComponentInterfaceprotected
get_parameter(const std::string &name) constmodulo_components::ComponentInterfaceprotected
get_parameter_value(const std::string &name) constmodulo_components::ComponentInterfaceinlineprotected
get_predicate(const std::string &predicate_name)modulo_components::ComponentInterfaceprotected
get_qos() constmodulo_components::ComponentInterfaceprotected
inputs_modulo_components::ComponentInterfaceprotected
lookup_transform(const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)modulo_components::ComponentInterfaceprotected
lookup_transform(const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))modulo_components::ComponentInterfaceprotected
on_step_callback()modulo_components::ComponentInterfaceprotectedvirtual
on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)modulo_components::ComponentInterfaceprotectedvirtual
outputs_modulo_components::ComponentInterfaceprotected
periodic_outputs_modulo_components::ComponentInterfaceprotected
publish_output(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
publish_outputs()modulo_components::ComponentInterfaceprotected
publish_predicate(const std::string &name)modulo_components::ComponentInterfaceprotected
publish_predicates()modulo_components::ComponentInterfaceprotected
raise_error()modulo_components::ComponentInterfaceprotectedvirtual
remove_input(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
remove_output(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
send_static_transform(const state_representation::CartesianPose &transform)modulo_components::ComponentInterfaceprotected
send_static_transforms(const std::vector< state_representation::CartesianPose > &transforms)modulo_components::ComponentInterfaceprotected
send_transform(const state_representation::CartesianPose &transform)modulo_components::ComponentInterfaceprotected
send_transforms(const std::vector< state_representation::CartesianPose > &transforms)modulo_components::ComponentInterfaceprotected
set_parameter_value(const std::string &name, const T &value)modulo_components::ComponentInterfaceinlineprotected
set_predicate(const std::string &predicate_name, bool predicate_value)modulo_components::ComponentInterfaceprotected
set_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_components::ComponentInterfaceprotected
set_qos(const rclcpp::QoS &qos)modulo_components::ComponentInterfaceprotected
step()modulo_components::ComponentInterfaceprotectedvirtual
trigger(const std::string &trigger_name)modulo_components::ComponentInterfaceprotected
~ComponentInterface()=defaultmodulo_components::ComponentInterfacevirtual
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1_component_interface.html b/versions/v4.2.2/classmodulo__components_1_1_component_interface.html new file mode 100644 index 000000000..a8cd50f69 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1_component_interface.html @@ -0,0 +1,2363 @@ + + + + + + + +Modulo: modulo_components::ComponentInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::ComponentInterface Class Reference
+
+
+ +

Base interface class for modulo components to wrap a ROS Node with custom behaviour. + More...

+ +

#include <ComponentInterface.hpp>

+
+Inheritance diagram for modulo_components::ComponentInterface:
+
+
+ + +modulo_components::Component +modulo_components::LifecycleComponent + +
+ + + + + +

+Public Member Functions

+virtual ~ComponentInterface ()=default
 Virtual default destructor.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

 ComponentInterface (const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > &interfaces)
 Constructor with all node interfaces.
 
virtual void step ()
 Step function that is called periodically.
 
virtual void on_step_callback ()
 Steps to execute periodically. To be redefined by derived Component classes.
 
void add_parameter (const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
 Add a parameter.
 
template<typename T >
void add_parameter (const std::string &name, const T &value, const std::string &description, bool read_only=false)
 Add a parameter.
 
std::shared_ptr< state_representation::ParameterInterface > get_parameter (const std::string &name) const
 Get a parameter by name.
 
template<typename T >
get_parameter_value (const std::string &name) const
 Get a parameter value by name.
 
template<typename T >
void set_parameter_value (const std::string &name, const T &value)
 Set the value of a parameter.
 
virtual bool on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > &parameter)
 Parameter validation function to be redefined by derived Component classes.
 
void add_predicate (const std::string &predicate_name, bool predicate_value)
 Add a predicate to the map of predicates.
 
void add_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Add a predicate to the map of predicates based on a function to periodically call.
 
bool get_predicate (const std::string &predicate_name)
 Get the logical value of a predicate.
 
void set_predicate (const std::string &predicate_name, bool predicate_value)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void set_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void add_trigger (const std::string &trigger_name)
 Add a trigger to the component. Triggers are predicates that are always false except when it's triggered in which case it is set back to false immediately after it is read.
 
void trigger (const std::string &trigger_name)
 Latch the trigger with the provided name.
 
void declare_input (const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
 Declare an input to create the topic parameter without adding it to the map of inputs yet.
 
void declare_output (const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
 Declare an output to create the topic parameter without adding it to the map of outputs yet.
 
template<typename DataT >
void add_input (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename DataT >
void add_input (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename MsgT >
void add_input (const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename DataT >
std::string create_output (modulo_core::communication::PublisherType publisher_type, const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic, bool fixed_topic, bool publish_on_step)
 Helper function to parse the signal name and add an unconfigured PublisherInterface to the map of outputs.
 
void publish_output (const std::string &signal_name)
 Trigger the publishing of an output.
 
void remove_input (const std::string &signal_name)
 Remove an input from the map of inputs.
 
void remove_output (const std::string &signal_name)
 Remove an output from the map of outputs.
 
void add_service (const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)
 Add a service to trigger a callback function with no input arguments.
 
void add_service (const std::string &service_name, const std::function< ComponentServiceResponse(const std::string &string)> &callback)
 Add a service to trigger a callback function with a string payload.
 
void add_periodic_callback (const std::string &name, const std::function< void(void)> &callback)
 Add a periodic callback function.
 
void add_tf_broadcaster ()
 Configure a transform broadcaster.
 
void add_static_tf_broadcaster ()
 Configure a static transform broadcaster.
 
void add_tf_listener ()
 Configure a transform buffer and listener.
 
void send_transform (const state_representation::CartesianPose &transform)
 Send a transform to TF.
 
void send_transforms (const std::vector< state_representation::CartesianPose > &transforms)
 Send a vector of transforms to TF.
 
void send_static_transform (const state_representation::CartesianPose &transform)
 Send a static transform to TF.
 
void send_static_transforms (const std::vector< state_representation::CartesianPose > &transforms)
 Send a vector of static transforms to TF.
 
state_representation::CartesianPose lookup_transform (const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)
 Look up a transform from TF.
 
state_representation::CartesianPose lookup_transform (const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))
 Look up a transform from TF.
 
rclcpp::QoS get_qos () const
 Getter of the Quality of Service attribute.
 
void set_qos (const rclcpp::QoS &qos)
 Set the Quality of Service for ROS publishers and subscribers.
 
virtual void raise_error ()
 Put the component in error state by setting the 'in_error_state' predicate to true.
 
void publish_predicate (const std::string &name)
 Helper function to publish a predicate.
 
void publish_predicates ()
 Helper function to publish all predicates.
 
void publish_outputs ()
 Helper function to publish all output signals.
 
void evaluate_periodic_callbacks ()
 Helper function to evaluate all periodic function callbacks.
 
+ + + + + + + + + + +

+Protected Attributes

std::map< std::string, std::shared_ptr< modulo_core::communication::SubscriptionInterface > > inputs_
 Map of inputs.
 
std::map< std::string, std::shared_ptr< modulo_core::communication::PublisherInterface > > outputs_
 Map of outputs.
 
std::map< std::string, boolperiodic_outputs_
 Map of outputs with periodic publishing flag.
 
+ + + +

+Friends

class ComponentInterfacePublicInterface
 
+

Detailed Description

+

Base interface class for modulo components to wrap a ROS Node with custom behaviour.

+

This class is not intended for direct inheritance and usage by end-users. Instead, it defines the common interfaces for the derived classes modulo_components::Component and modulo_components::LifecycleComponent.

See also
Component, LifecycleComponent
+ +

Definition at line 56 of file ComponentInterface.hpp.

+

Constructor & Destructor Documentation

+ +

◆ ComponentInterface()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_components::ComponentInterface::ComponentInterface (const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > & interfaces)
+
+explicitprotected
+
+ +

Constructor with all node interfaces.

+
Parameters
+ + +
interfacesShared pointer to all the node interfaces of parent class
+
+
+ +

Definition at line 15 of file ComponentInterface.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ add_input() [1/3]

+ +
+
+
+template<typename MsgT >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_input (const std::string & signal_name,
const std::function< void(const std::shared_ptr< MsgT >)> & callback,
const std::string & default_topic = "",
bool fixed_topic = false 
)
+
+inlineprotected
+
+ +

Add and configure an input signal of the component.

+
Template Parameters
+ + +
MsgTThe ROS message type of the subscription
+
+
+
Parameters
+ + + + + +
signal_nameName of the input signal
callbackThe callback to use for the subscription
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the input signal is fixed
+
+
+ +

Definition at line 696 of file ComponentInterface.hpp.

+ +
+
+ +

◆ add_input() [2/3]

+ +
+
+
+template<typename DataT >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_input (const std::string & signal_name,
const std::shared_ptr< DataT > & data,
const std::function< void()> & callback,
const std::string & default_topic = "",
bool fixed_topic = false 
)
+
+inlineprotected
+
+ +

Add and configure an input signal of the component.

+
Template Parameters
+ + +
DataTType of the data pointer
+
+
+
Parameters
+ + + + + + +
signal_nameName of the input signal
dataData to receive on the input signal
callbackCallback function to trigger after receiving the input signal
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the input signal is fixed
+
+
+ +

Definition at line 620 of file ComponentInterface.hpp.

+ +
+
+ +

◆ add_input() [3/3]

+ +
+
+
+template<typename DataT >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_input (const std::string & signal_name,
const std::shared_ptr< DataT > & data,
const std::string & default_topic = "",
bool fixed_topic = false 
)
+
+inlineprotected
+
+ +

Add and configure an input signal of the component.

+
Template Parameters
+ + +
DataTType of the data pointer
+
+
+
Parameters
+ + + + + +
signal_nameName of the input signal
dataData to receive on the input signal
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the input signal is fixed
+
+
+ +

Definition at line 612 of file ComponentInterface.hpp.

+ +
+
+ +

◆ add_parameter() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_parameter (const std::shared_ptr< state_representation::ParameterInterface > & parameter,
const std::string & description,
bool read_only = false 
)
+
+protected
+
+ +

Add a parameter.

+

This method stores a pointer reference to an existing Parameter object in the local parameter map and declares the equivalent ROS parameter on the ROS interface.

Parameters
+ + + + +
parameterA ParameterInterface pointer to a Parameter instance
descriptionThe description of the parameter
read_onlyIf true, the value of the parameter cannot be changed after declaration
+
+
+
Exceptions
+ + +
ComponentParameterErrorif the parameter could not be added
+
+
+ +

Definition at line 47 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_parameter() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_parameter (const std::string & name,
const Tvalue,
const std::string & description,
bool read_only = false 
)
+
+inlineprotected
+
+ +

Add a parameter.

+

This method creates a new Parameter object instance to reference in the local parameter map and declares the equivalent ROS parameter on the ROS interface.

Template Parameters
+ + +
TThe type of the parameter
+
+
+
Parameters
+ + + + + +
nameThe name of the parameter
valueThe value of the parameter
descriptionThe description of the parameter
read_onlyIf true, the value of the parameter cannot be changed after declaration
+
+
+
Exceptions
+ + +
ComponentParameterErrorif the parameter could not be added
+
+
+ +

Definition at line 574 of file ComponentInterface.hpp.

+ +
+
+ +

◆ add_periodic_callback()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_periodic_callback (const std::string & name,
const std::function< void(void)> & callback 
)
+
+protected
+
+ +

Add a periodic callback function.

+

The provided function is evaluated periodically at the component step period.

Parameters
+ + + +
nameThe name of the callback
callbackThe callback function that is evaluated periodically
+
+
+ +

Definition at line 410 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_predicate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_predicate (const std::string & predicate_name,
bool predicate_value 
)
+
+protected
+
+ +

Add a predicate to the map of predicates.

+
Parameters
+ + + +
predicate_namethe name of the associated predicate
predicate_valuethe boolean value of the predicate
+
+
+ +

Definition at line 154 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_predicate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_predicate (const std::string & predicate_name,
const std::function< bool(void)> & predicate_function 
)
+
+protected
+
+ +

Add a predicate to the map of predicates based on a function to periodically call.

+
Parameters
+ + + +
predicate_namethe name of the associated predicate
predicate_functionthe function to call that returns the value of the predicate
+
+
+ +

Definition at line 158 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_service() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_service (const std::string & service_name,
const std::function< ComponentServiceResponse(const std::string &string)> & callback 
)
+
+protected
+
+ +

Add a service to trigger a callback function with a string payload.

+

The string payload can have an arbitrary format to parameterize and control the callback behaviour as desired. It is the responsibility of the service callback to parse the string according to some payload format. When adding a service with a string payload, be sure to document the payload format appropriately.

Parameters
+ + + +
service_nameThe name of the service
callbackA service callback function with a string argument that returns a ComponentServiceResponse
+
+
+ +

Definition at line 363 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_service() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::add_service (const std::string & service_name,
const std::function< ComponentServiceResponse(void)> & callback 
)
+
+protected
+
+ +

Add a service to trigger a callback function with no input arguments.

+
Parameters
+ + + +
service_nameThe name of the service
callbackA service callback function with no arguments that returns a ComponentServiceResponse
+
+
+ +

Definition at line 336 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_static_tf_broadcaster()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::add_static_tf_broadcaster ()
+
+protected
+
+ +

Configure a static transform broadcaster.

+ +

Definition at line 436 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_tf_broadcaster()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::add_tf_broadcaster ()
+
+protected
+
+ +

Configure a transform broadcaster.

+ +

Definition at line 425 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_tf_listener()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::add_tf_listener ()
+
+protected
+
+ +

Configure a transform buffer and listener.

+ +

Definition at line 449 of file ComponentInterface.cpp.

+ +
+
+ +

◆ add_trigger()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::add_trigger (const std::string & trigger_name)
+
+protected
+
+ +

Add a trigger to the component. Triggers are predicates that are always false except when it's triggered in which case it is set back to false immediately after it is read.

+
Parameters
+ + +
trigger_nameThe name of the trigger
+
+
+ +

Definition at line 224 of file ComponentInterface.cpp.

+ +
+
+ +

◆ create_output()

+ +
+
+
+template<typename DataT >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::string modulo_components::ComponentInterface::create_output (modulo_core::communication::PublisherType publisher_type,
const std::string & signal_name,
const std::shared_ptr< DataT > & data,
const std::string & default_topic,
bool fixed_topic,
bool publish_on_step 
)
+
+inlineprotected
+
+ +

Helper function to parse the signal name and add an unconfigured PublisherInterface to the map of outputs.

+
Template Parameters
+ + +
DataTType of the data pointer
+
+
+
Parameters
+ + + + + + +
signal_nameName of the output signal
dataData to transmit on the output signal
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the output signal is fixed
publish_on_stepIf true, the output is published periodically on step
+
+
+
Exceptions
+ + +
modulo_components::exceptions::AddSignalExceptionif the output could not be created (empty name, already registered)
+
+
+
Returns
The parsed signal name
+ +

Definition at line 719 of file ComponentInterface.hpp.

+ +
+
+ +

◆ declare_input()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::declare_input (const std::string & signal_name,
const std::string & default_topic = "",
bool fixed_topic = false 
)
+
+protected
+
+ +

Declare an input to create the topic parameter without adding it to the map of inputs yet.

+
Parameters
+ + + + +
signal_nameThe signal name of the input
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the signal is fixed
+
+
+
Exceptions
+ + +
modulo_components::exceptions::AddSignalExceptionif the input could not be declared (empty name or already created)
+
+
+ +

Definition at line 254 of file ComponentInterface.cpp.

+ +
+
+ +

◆ declare_output()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::declare_output (const std::string & signal_name,
const std::string & default_topic = "",
bool fixed_topic = false 
)
+
+protected
+
+ +

Declare an output to create the topic parameter without adding it to the map of outputs yet.

+
Parameters
+ + + + +
signal_nameThe signal name of the output
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the signal is fixed
+
+
+
Exceptions
+ + +
modulo_components::exceptions::AddSignalExceptionif the output could not be declared (empty name or already created)
+
+
+ +

Definition at line 260 of file ComponentInterface.cpp.

+ +
+
+ +

◆ evaluate_periodic_callbacks()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::evaluate_periodic_callbacks ()
+
+protected
+
+ +

Helper function to evaluate all periodic function callbacks.

+ +

Definition at line 554 of file ComponentInterface.cpp.

+ +
+
+ +

◆ get_parameter()

+ +
+
+ + + + + +
+ + + + + + + + +
std::shared_ptr< state_representation::ParameterInterface > modulo_components::ComponentInterface::get_parameter (const std::string & name) const
+
+protected
+
+ +

Get a parameter by name.

+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Exceptions
+ + +
modulo_components::exceptions::ComponentParameterExceptionif the parameter could not be found
+
+
+
Returns
The ParameterInterface pointer to a Parameter instance
+ +

Definition at line 91 of file ComponentInterface.cpp.

+ +
+
+ +

◆ get_parameter_value()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
T modulo_components::ComponentInterface::get_parameter_value (const std::string & name) const
+
+inlineprotected
+
+ +

Get a parameter value by name.

+
Template Parameters
+ + +
TThe type of the parameter
+
+
+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Exceptions
+ + +
modulo_components::exceptions::ComponentParameterExceptionif the parameter value could not be accessed
+
+
+
Returns
The value of the parameter
+ +

Definition at line 585 of file ComponentInterface.hpp.

+ +
+
+ +

◆ get_predicate()

+ +
+
+ + + + + +
+ + + + + + + + +
bool modulo_components::ComponentInterface::get_predicate (const std::string & predicate_name)
+
+protected
+
+ +

Get the logical value of a predicate.

+

If the predicate is not found or the callable function fails, the return value is false.

Parameters
+ + +
predicate_namethe name of the predicate to retrieve from the map of predicates
+
+
+
Returns
the value of the predicate as a boolean
+ +

Definition at line 176 of file ComponentInterface.cpp.

+ +
+
+ +

◆ get_qos()

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp::QoS modulo_components::ComponentInterface::get_qos () const
+
+protected
+
+ +

Getter of the Quality of Service attribute.

+
Returns
The Quality of Service attribute
+ +

Definition at line 514 of file ComponentInterface.cpp.

+ +
+
+ +

◆ lookup_transform() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
state_representation::CartesianPose modulo_components::ComponentInterface::lookup_transform (const std::string & frame,
const std::string & reference_frame,
const tf2::TimePoint & time_point,
const tf2::Duration & duration 
)
+
+protected
+
+ +

Look up a transform from TF.

+
Parameters
+ + + + + +
frameThe desired frame of the transform
reference_frameThe desired reference frame of the transform
time_pointThe time at which the value of the transform is desired
durationHow long to block the lookup call before failing
+
+
+
Exceptions
+ + +
modulo_components::exceptions::LookupTransformExceptionif TF buffer/listener are unconfigured or if the lookupTransform call failed
+
+
+
Returns
If it exists, the requested transform
+ +

Definition at line 476 of file ComponentInterface.cpp.

+ +
+
+ +

◆ lookup_transform() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
state_representation::CartesianPose modulo_components::ComponentInterface::lookup_transform (const std::string & frame,
const std::string & reference_frame = "world",
double validity_period = -1.0,
const tf2::Duration & duration = tf2::Duration(std::chrono::microseconds(10)) 
)
+
+protected
+
+ +

Look up a transform from TF.

+
Parameters
+ + + + + +
frameThe desired frame of the transform
reference_frameThe desired reference frame of the transform
validity_periodThe validity period of the latest transform from the time of lookup in seconds
durationHow long to block the lookup call before failing
+
+
+
Exceptions
+ + +
modulo_components::exceptions::LookupTransformExceptionif TF buffer/listener are unconfigured, if the lookupTransform call failed, or if the transform is too old
+
+
+
Returns
If it exists and is still valid, the requested transform
+ +

Definition at line 486 of file ComponentInterface.cpp.

+ +
+
+ +

◆ on_step_callback()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::on_step_callback ()
+
+protectedvirtual
+
+ +

Steps to execute periodically. To be redefined by derived Component classes.

+ +

Definition at line 45 of file ComponentInterface.cpp.

+ +
+
+ +

◆ on_validate_parameter_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
bool modulo_components::ComponentInterface::on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > & parameter)
+
+protectedvirtual
+
+ +

Parameter validation function to be redefined by derived Component classes.

+

This method is automatically invoked whenever the ROS interface tried to modify a parameter. Validation and sanitization can be performed by reading or writing the value of the parameter through the ParameterInterface pointer, depending on the parameter name and desired component behaviour. If the validation returns true, the updated parameter value (including any modifications) is applied. If the validation returns false, any changes to the parameter are discarded and the parameter value is not changed.

Parameters
+ + +
parameterA ParameterInterface pointer to a Parameter instance
+
+
+
Returns
The validation result
+ +

Definition at line 150 of file ComponentInterface.cpp.

+ +
+
+ +

◆ publish_output()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::publish_output (const std::string & signal_name)
+
+protected
+
+ +

Trigger the publishing of an output.

+
Parameters
+ + +
signal_nameThe name of the output signal
+
+
+
Exceptions
+ + +
ComponentExceptionif the output is being published periodically or if the signal name could not be found
+
+
+ +

Definition at line 300 of file ComponentInterface.cpp.

+ +
+
+ +

◆ publish_outputs()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::publish_outputs ()
+
+protected
+
+ +

Helper function to publish all output signals.

+ +

Definition at line 541 of file ComponentInterface.cpp.

+ +
+
+ +

◆ publish_predicate()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::publish_predicate (const std::string & name)
+
+protected
+
+ +

Helper function to publish a predicate.

+
Parameters
+ + +
nameThe name of the predicate to publish
+
+
+ +

Definition at line 527 of file ComponentInterface.cpp.

+ +
+
+ +

◆ publish_predicates()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::publish_predicates ()
+
+protected
+
+ +

Helper function to publish all predicates.

+ +

Definition at line 535 of file ComponentInterface.cpp.

+ +
+
+ +

◆ raise_error()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::raise_error ()
+
+protectedvirtual
+
+ +

Put the component in error state by setting the 'in_error_state' predicate to true.

+ +

Definition at line 522 of file ComponentInterface.cpp.

+ +
+
+ +

◆ remove_input()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::remove_input (const std::string & signal_name)
+
+protected
+
+ +

Remove an input from the map of inputs.

+
Parameters
+ + +
signal_nameThe name of the input
+
+
+ +

Definition at line 316 of file ComponentInterface.cpp.

+ +
+
+ +

◆ remove_output()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::remove_output (const std::string & signal_name)
+
+protected
+
+ +

Remove an output from the map of outputs.

+
Parameters
+ + +
signal_nameThe name of the output
+
+
+ +

Definition at line 326 of file ComponentInterface.cpp.

+ +
+
+ +

◆ send_static_transform()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::send_static_transform (const state_representation::CartesianPose & transform)
+
+protected
+
+ +

Send a static transform to TF.

+
Parameters
+ + +
transformThe transform to send
+
+
+ +

Definition at line 468 of file ComponentInterface.cpp.

+ +
+
+ +

◆ send_static_transforms()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::send_static_transforms (const std::vector< state_representation::CartesianPose > & transforms)
+
+protected
+
+ +

Send a vector of static transforms to TF.

+
Parameters
+ + +
transformsThe vector of transforms to send
+
+
+ +

Definition at line 472 of file ComponentInterface.cpp.

+ +
+
+ +

◆ send_transform()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::send_transform (const state_representation::CartesianPose & transform)
+
+protected
+
+ +

Send a transform to TF.

+
Parameters
+ + +
transformThe transform to send
+
+
+ +

Definition at line 460 of file ComponentInterface.cpp.

+ +
+
+ +

◆ send_transforms()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::send_transforms (const std::vector< state_representation::CartesianPose > & transforms)
+
+protected
+
+ +

Send a vector of transforms to TF.

+
Parameters
+ + +
transformsThe vector of transforms to send
+
+
+ +

Definition at line 464 of file ComponentInterface.cpp.

+ +
+
+ +

◆ set_parameter_value()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::set_parameter_value (const std::string & name,
const Tvalue 
)
+
+inlineprotected
+
+ +

Set the value of a parameter.

+

The parameter must have been previously declared. This method preserves the reference to the original Parameter instance

Template Parameters
+ + +
TThe type of the parameter
+
+
+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Returns
The value of the parameter
+ +

Definition at line 595 of file ComponentInterface.hpp.

+ +
+
+ +

◆ set_predicate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::set_predicate (const std::string & predicate_name,
bool predicate_value 
)
+
+protected
+
+ +

Set the value of the predicate given as parameter, if the predicate is not found does not do anything.

+

Even though the predicates are published periodically, the new value of this predicate will be published once immediately after setting it.

Parameters
+ + + +
predicate_namethe name of the predicate to retrieve from the map of predicates
predicate_valuethe new value of the predicate
+
+
+ +

Definition at line 203 of file ComponentInterface.cpp.

+ +
+
+ +

◆ set_predicate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_components::ComponentInterface::set_predicate (const std::string & predicate_name,
const std::function< bool(void)> & predicate_function 
)
+
+protected
+
+ +

Set the value of the predicate given as parameter, if the predicate is not found does not do anything.

+

Even though the predicates are published periodically, the new value of this predicate will be published once immediately after setting it.

Parameters
+ + + +
predicate_namethe name of the predicate to retrieve from the map of predicates
predicate_functionthe function to call that returns the value of the predicate
+
+
+ +

Definition at line 207 of file ComponentInterface.cpp.

+ +
+
+ +

◆ set_qos()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::set_qos (const rclcpp::QoS & qos)
+
+protected
+
+ +

Set the Quality of Service for ROS publishers and subscribers.

+
Parameters
+ + +
qosThe desired Quality of Service
+
+
+ +

Definition at line 518 of file ComponentInterface.cpp.

+ +
+
+ +

◆ step()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_components::ComponentInterface::step ()
+
+protectedvirtual
+
+ +

Step function that is called periodically.

+ +

Definition at line 43 of file ComponentInterface.cpp.

+ +
+
+ +

◆ trigger()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_components::ComponentInterface::trigger (const std::string & trigger_name)
+
+protected
+
+ +

Latch the trigger with the provided name.

+
Parameters
+ + +
trigger_nameThe name of the trigger
+
+
+ +

Definition at line 244 of file ComponentInterface.cpp.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ ComponentInterfacePublicInterface

+ +
+
+ + + + + +
+ + + + +
friend class ComponentInterfacePublicInterface
+
+friend
+
+ +

Definition at line 58 of file ComponentInterface.hpp.

+ +
+
+

Member Data Documentation

+ +

◆ inputs_

+ +
+
+ + + + + +
+ + + + +
std::map<std::string, std::shared_ptr<modulo_core::communication::SubscriptionInterface> > modulo_components::ComponentInterface::inputs_
+
+protected
+
+ +

Map of inputs.

+ +

Definition at line 441 of file ComponentInterface.hpp.

+ +
+
+ +

◆ outputs_

+ +
+
+ + + + + +
+ + + + +
std::map<std::string, std::shared_ptr<modulo_core::communication::PublisherInterface> > modulo_components::ComponentInterface::outputs_
+
+protected
+
+ +

Map of outputs.

+ +

Definition at line 442 of file ComponentInterface.hpp.

+ +
+
+ +

◆ periodic_outputs_

+ +
+
+ + + + + +
+ + + + +
std::map<std::string, bool> modulo_components::ComponentInterface::periodic_outputs_
+
+protected
+
+ +

Map of outputs with periodic publishing flag.

+ +

Definition at line 443 of file ComponentInterface.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1_component_interface.png b/versions/v4.2.2/classmodulo__components_1_1_component_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..e327a755b810c33f67cbc0d052903549f5522268 GIT binary patch literal 1106 zcmeAS@N?(olHy`uVBq!ia0y~yVEh4O2XHV0$wTL+R{<&M0G|-o|Ns93nJ?aaE$u(F z+`>S!Kw|ot7Y7a;0E!1sy1W7?$5|5O7t8?UgMm5I>?;fm%y&Iq978G?-_CtG>9ZCO z>ul%HuJ84aW?LLf>y*|1`RL5lWtSfFrUXcT6n_xp#Bor8VH>CB(iA@N_m3EL9z9~@ zf#FSRb#>nko?px@`mSDc>6ZD`+n*|~V=Mi5y<2`=|Iv8i{c;zN`ae26zREi~|xP7<$r|^|>L6-5QstYP? zO4r@ei*229Dqgm*eudVx%jJdlaDNmYFFePmFK(4zcJ`e-_@h_ z{(m-q2-|%u@MG?ZWiC(WCfwV~_3?4A`2Vw_@#6Q6eeVp=*Y@1}soQVg@qEGg=I42< zYxdvITXDX%fAhk)=~ee1Gm5=9V(;~6v(d9vG562EEne;BRJ{9zW$5dTSJMCPWRm9! zeaG~9L06D{9^=sou{El8OQ)Rsd@y6aY=qa!KRbWyeI$Q+bKEb@r9YoPV*JOl4;WUT z{6EhQ^0M#jF8|0NR``*D4Td=tS(+Iv7{m*h3m9@9K4N@RxO-9X$$L2b9j2%hPkE$z zQbzCIQSV8TF?)cnpOnHXUY~RC;nA5Ya~FYPeA1Tr+wX4c{C~{k`03*h&*q$7zC8Hz z=|}CalRy5S_k;Jn#=QCdXW2eJy!h?svghGt|LyOcY=8B7c9do>?%Qc+J#&`sqjtGazBZ1}q2KR{^)EjcdVA?=g{k|k9_-7t}ON>mfumADw@H(|py(ucXAHItI z&zm*(@t)7+zIKymB|rLHwlVQ@_U=7v8-4Tm+b1naHS7F;%H;aDA5Jy4ZJ$@(RQ?xe z+$R0Fpv}3^e*5{gvjR=Gch3vy}#rCJ(K>H-A;Q{);`dV zn^d;R`WAoJ^d<6-;yb4=v2O%N2pcd*#_myxJa|+%xra^j$Z?6qw*Q#7?EioDK%;~c QF!wWfy85}Sb4q9e00rYJPXGV_ literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component-members.html b/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component-members.html new file mode 100644 index 000000000..5064ed9b8 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component-members.html @@ -0,0 +1,137 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components::LifecycleComponent Member List
+
+
+ +

This is the complete list of members for modulo_components::LifecycleComponent, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_input(const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceinlineprotected
add_output(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false, bool publish_on_step=true)modulo_components::LifecycleComponentinlineprotected
add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)modulo_components::ComponentInterfaceprotected
add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)modulo_components::ComponentInterfaceinlineprotected
add_periodic_callback(const std::string &name, const std::function< void(void)> &callback)modulo_components::ComponentInterfaceprotected
add_predicate(const std::string &predicate_name, bool predicate_value)modulo_components::ComponentInterfaceprotected
add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_components::ComponentInterfaceprotected
add_service(const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)modulo_components::ComponentInterfaceprotected
add_service(const std::string &service_name, const std::function< ComponentServiceResponse(const std::string &string)> &callback)modulo_components::ComponentInterfaceprotected
add_static_tf_broadcaster()modulo_components::ComponentInterfaceprotected
add_tf_broadcaster()modulo_components::ComponentInterfaceprotected
add_tf_listener()modulo_components::ComponentInterfaceprotected
add_trigger(const std::string &trigger_name)modulo_components::ComponentInterfaceprotected
ComponentInterface(const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > &interfaces)modulo_components::ComponentInterfaceexplicitprotected
declare_input(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceprotected
declare_output(const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)modulo_components::ComponentInterfaceprotected
get_parameter(const std::string &name) constmodulo_components::LifecycleComponentprotected
get_parameter_value(const std::string &name) constmodulo_components::ComponentInterfaceinlineprotected
get_predicate(const std::string &predicate_name)modulo_components::ComponentInterfaceprotected
get_qos() constmodulo_components::ComponentInterfaceprotected
LifecycleComponent(const rclcpp::NodeOptions &node_options, const std::string &fallback_name="LifecycleComponent")modulo_components::LifecycleComponentexplicit
LifecycleComponentPublicInterface (defined in modulo_components::LifecycleComponent)modulo_components::LifecycleComponentfriend
lookup_transform(const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)modulo_components::ComponentInterfaceprotected
lookup_transform(const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))modulo_components::ComponentInterfaceprotected
on_activate_callback()modulo_components::LifecycleComponentprotectedvirtual
on_cleanup_callback()modulo_components::LifecycleComponentprotectedvirtual
on_configure_callback()modulo_components::LifecycleComponentprotectedvirtual
on_deactivate_callback()modulo_components::LifecycleComponentprotectedvirtual
on_error_callback()modulo_components::LifecycleComponentprotectedvirtual
on_shutdown_callback()modulo_components::LifecycleComponentprotectedvirtual
on_step_callback()modulo_components::ComponentInterfaceprotectedvirtual
on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)modulo_components::ComponentInterfaceprotectedvirtual
publish_output(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
raise_error()modulo_components::ComponentInterfaceprotectedvirtual
remove_input(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
remove_output(const std::string &signal_name)modulo_components::ComponentInterfaceprotected
send_static_transform(const state_representation::CartesianPose &transform)modulo_components::ComponentInterfaceprotected
send_static_transforms(const std::vector< state_representation::CartesianPose > &transforms)modulo_components::ComponentInterfaceprotected
send_transform(const state_representation::CartesianPose &transform)modulo_components::ComponentInterfaceprotected
send_transforms(const std::vector< state_representation::CartesianPose > &transforms)modulo_components::ComponentInterfaceprotected
set_parameter_value(const std::string &name, const T &value)modulo_components::ComponentInterfaceinlineprotected
set_predicate(const std::string &predicate_name, bool predicate_value)modulo_components::ComponentInterfaceprotected
set_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_components::ComponentInterfaceprotected
set_qos(const rclcpp::QoS &qos)modulo_components::ComponentInterfaceprotected
trigger(const std::string &trigger_name)modulo_components::ComponentInterfaceprotected
~ComponentInterface()=defaultmodulo_components::ComponentInterfacevirtual
~LifecycleComponent()=defaultmodulo_components::LifecycleComponentvirtual
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component.html b/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component.html new file mode 100644 index 000000000..478fab341 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component.html @@ -0,0 +1,694 @@ + + + + + + + +Modulo: modulo_components::LifecycleComponent Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::LifecycleComponent Class Reference
+
+
+ +

A wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified component interfaces while supporting lifecycle states and transitions. + More...

+ +

#include <LifecycleComponent.hpp>

+
+Inheritance diagram for modulo_components::LifecycleComponent:
+
+
+ + +modulo_components::ComponentInterface + +
+ + + + + + + + + + + + +

+Public Member Functions

 LifecycleComponent (const rclcpp::NodeOptions &node_options, const std::string &fallback_name="LifecycleComponent")
 Constructor from node options.
 
+virtual ~LifecycleComponent ()=default
 Virtual default destructor.
 
- Public Member Functions inherited from modulo_components::ComponentInterface
+virtual ~ComponentInterface ()=default
 Virtual default destructor.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

std::shared_ptr< state_representation::ParameterInterface > get_parameter (const std::string &name) const
 Get a parameter by name.
 
virtual bool on_configure_callback ()
 Steps to execute when configuring the component.
 
virtual bool on_cleanup_callback ()
 Steps to execute when cleaning up the component.
 
virtual bool on_activate_callback ()
 Steps to execute when activating the component.
 
virtual bool on_deactivate_callback ()
 Steps to execute when deactivating the component.
 
virtual bool on_shutdown_callback ()
 Steps to execute when shutting down the component.
 
virtual bool on_error_callback ()
 Steps to execute when handling errors.
 
template<typename DataT >
void add_output (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false, bool publish_on_step=true)
 Add an output signal of the component.
 
- Protected Member Functions inherited from modulo_components::ComponentInterface
 ComponentInterface (const std::shared_ptr< rclcpp::node_interfaces::NodeInterfaces< ALL_RCLCPP_NODE_INTERFACES > > &interfaces)
 Constructor with all node interfaces.
 
virtual void on_step_callback ()
 Steps to execute periodically. To be redefined by derived Component classes.
 
void add_parameter (const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
 Add a parameter.
 
template<typename T >
void add_parameter (const std::string &name, const T &value, const std::string &description, bool read_only=false)
 Add a parameter.
 
std::shared_ptr< state_representation::ParameterInterface > get_parameter (const std::string &name) const
 Get a parameter by name.
 
template<typename T >
get_parameter_value (const std::string &name) const
 Get a parameter value by name.
 
template<typename T >
void set_parameter_value (const std::string &name, const T &value)
 Set the value of a parameter.
 
virtual bool on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > &parameter)
 Parameter validation function to be redefined by derived Component classes.
 
void add_predicate (const std::string &predicate_name, bool predicate_value)
 Add a predicate to the map of predicates.
 
void add_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Add a predicate to the map of predicates based on a function to periodically call.
 
bool get_predicate (const std::string &predicate_name)
 Get the logical value of a predicate.
 
void set_predicate (const std::string &predicate_name, bool predicate_value)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void set_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void add_trigger (const std::string &trigger_name)
 Add a trigger to the component. Triggers are predicates that are always false except when it's triggered in which case it is set back to false immediately after it is read.
 
void trigger (const std::string &trigger_name)
 Latch the trigger with the provided name.
 
void declare_input (const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
 Declare an input to create the topic parameter without adding it to the map of inputs yet.
 
void declare_output (const std::string &signal_name, const std::string &default_topic="", bool fixed_topic=false)
 Declare an output to create the topic parameter without adding it to the map of outputs yet.
 
template<typename DataT >
void add_input (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename DataT >
void add_input (const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename MsgT >
void add_input (const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)
 Add and configure an input signal of the component.
 
template<typename DataT >
std::string create_output (modulo_core::communication::PublisherType publisher_type, const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic, bool fixed_topic, bool publish_on_step)
 Helper function to parse the signal name and add an unconfigured PublisherInterface to the map of outputs.
 
void publish_output (const std::string &signal_name)
 Trigger the publishing of an output.
 
void remove_input (const std::string &signal_name)
 Remove an input from the map of inputs.
 
void remove_output (const std::string &signal_name)
 Remove an output from the map of outputs.
 
void add_service (const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)
 Add a service to trigger a callback function with no input arguments.
 
void add_service (const std::string &service_name, const std::function< ComponentServiceResponse(const std::string &string)> &callback)
 Add a service to trigger a callback function with a string payload.
 
void add_periodic_callback (const std::string &name, const std::function< void(void)> &callback)
 Add a periodic callback function.
 
void add_tf_broadcaster ()
 Configure a transform broadcaster.
 
void add_static_tf_broadcaster ()
 Configure a static transform broadcaster.
 
void add_tf_listener ()
 Configure a transform buffer and listener.
 
void send_transform (const state_representation::CartesianPose &transform)
 Send a transform to TF.
 
void send_transforms (const std::vector< state_representation::CartesianPose > &transforms)
 Send a vector of transforms to TF.
 
void send_static_transform (const state_representation::CartesianPose &transform)
 Send a static transform to TF.
 
void send_static_transforms (const std::vector< state_representation::CartesianPose > &transforms)
 Send a vector of static transforms to TF.
 
state_representation::CartesianPose lookup_transform (const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)
 Look up a transform from TF.
 
state_representation::CartesianPose lookup_transform (const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))
 Look up a transform from TF.
 
rclcpp::QoS get_qos () const
 Getter of the Quality of Service attribute.
 
void set_qos (const rclcpp::QoS &qos)
 Set the Quality of Service for ROS publishers and subscribers.
 
virtual void raise_error ()
 Put the component in error state by setting the 'in_error_state' predicate to true.
 
void publish_predicate (const std::string &name)
 Helper function to publish a predicate.
 
void publish_predicates ()
 Helper function to publish all predicates.
 
void publish_outputs ()
 Helper function to publish all output signals.
 
void evaluate_periodic_callbacks ()
 Helper function to evaluate all periodic function callbacks.
 
+ + + +

+Friends

class LifecycleComponentPublicInterface
 
+ + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from modulo_components::ComponentInterface
std::map< std::string, std::shared_ptr< modulo_core::communication::SubscriptionInterface > > inputs_
 Map of inputs.
 
std::map< std::string, std::shared_ptr< modulo_core::communication::PublisherInterface > > outputs_
 Map of outputs.
 
std::map< std::string, boolperiodic_outputs_
 Map of outputs with periodic publishing flag.
 
+

Detailed Description

+

A wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified component interfaces while supporting lifecycle states and transitions.

+

This class is intended for direct inheritance to implement custom state-based components that perform different behaviors based on their state and on state transitions. An example of state-based behaviour is a signal component that requires configuration steps to determine which inputs to register and subsequently should publish outputs only when the component is activated. Developers should override on_validate_parameter_callback() if any parameters are added. In addition, the following state transition callbacks should be overridden whenever custom transition behavior is needed:

+ +

Definition at line 29 of file LifecycleComponent.hpp.

+

Constructor & Destructor Documentation

+ +

◆ LifecycleComponent()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
modulo_components::LifecycleComponent::LifecycleComponent (const rclcpp::NodeOptions & node_options,
const std::string & fallback_name = "LifecycleComponent" 
)
+
+explicit
+
+ +

Constructor from node options.

+
Parameters
+ + + +
node_optionsNode options as used in ROS2 LifecycleNode
fallback_nameThe name of the component if it was not provided through the node options
+
+
+ +

Definition at line 10 of file LifecycleComponent.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ add_output()

+ +
+
+
+template<typename DataT >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_components::LifecycleComponent::add_output (const std::string & signal_name,
const std::shared_ptr< DataT > & data,
const std::string & default_topic = "",
bool fixed_topic = false,
bool publish_on_step = true 
)
+
+inlineprotected
+
+ +

Add an output signal of the component.

+
Template Parameters
+ + +
DataTType of the data pointer
+
+
+
Parameters
+ + + + + + +
signal_nameName of the output signal
dataData to transmit on the output signal
default_topicIf set, the default value for the topic name to use
fixed_topicIf true, the topic name of the output signal is fixed
publish_on_stepIf true, the output is published periodically on step
+
+
+ +

Definition at line 277 of file LifecycleComponent.hpp.

+ +
+
+ +

◆ get_parameter()

+ +
+
+ + + + + +
+ + + + + + + + +
std::shared_ptr< state_representation::ParameterInterface > modulo_components::LifecycleComponent::get_parameter (const std::string & name) const
+
+protected
+
+ +

Get a parameter by name.

+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Exceptions
+ + +
modulo_components::exceptions::ComponentParameterExceptionif the parameter could not be found
+
+
+
Returns
The ParameterInterface pointer to a Parameter instance
+ +

Definition at line 38 of file LifecycleComponent.cpp.

+ +
+
+ +

◆ on_activate_callback()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_components::LifecycleComponent::on_activate_callback ()
+
+protectedvirtual
+
+ +

Steps to execute when activating the component.

+

This method can be overridden by derived Component classes. Activation generally involves final setup steps before the on_step callback is periodically evaluated.

Returns
True if activation is successful, false otherwise
+ +

Definition at line 132 of file LifecycleComponent.cpp.

+ +
+
+ +

◆ on_cleanup_callback()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_components::LifecycleComponent::on_cleanup_callback ()
+
+protectedvirtual
+
+ +

Steps to execute when cleaning up the component.

+

This method can be overridden by derived Component classes. Cleanup generally involves resetting the properties and states to initial conditions.

Returns
True if cleanup is successful, false otherwise
+ +

Definition at line 103 of file LifecycleComponent.cpp.

+ +
+
+ +

◆ on_configure_callback()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_components::LifecycleComponent::on_configure_callback ()
+
+protectedvirtual
+
+ +

Steps to execute when configuring the component.

+

This method can be overridden by derived Component classes. Configuration generally involves reading parameters and adding inputs and outputs.

Returns
True if configuration is successful, false otherwise
+ +

Definition at line 82 of file LifecycleComponent.cpp.

+ +
+
+ +

◆ on_deactivate_callback()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_components::LifecycleComponent::on_deactivate_callback ()
+
+protectedvirtual
+
+ +

Steps to execute when deactivating the component.

+

This method can be overridden by derived Component classes. Deactivation generally involves any steps to reset the component to an inactive state.

Returns
True if deactivation is successful, false otherwise
+ +

Definition at line 154 of file LifecycleComponent.cpp.

+ +
+
+ +

◆ on_error_callback()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_components::LifecycleComponent::on_error_callback ()
+
+protectedvirtual
+
+ +

Steps to execute when handling errors.

+

This method can be overridden by derived Component classes. Error handling generally involves recovering and resetting the component to an unconfigured state.

Returns
True if error handling is successful, false otherwise
+ +

Definition at line 225 of file LifecycleComponent.cpp.

+ +
+
+ +

◆ on_shutdown_callback()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_components::LifecycleComponent::on_shutdown_callback ()
+
+protectedvirtual
+
+ +

Steps to execute when shutting down the component.

+

This method can be overridden by derived Component classes. Shutdown generally involves the destruction of any threads or properties not handled by the base class.

Returns
True if shutdown is successful, false otherwise
+ +

Definition at line 198 of file LifecycleComponent.cpp.

+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ LifecycleComponentPublicInterface

+ +
+
+ + + + + +
+ + + + +
friend class LifecycleComponentPublicInterface
+
+friend
+
+ +

Definition at line 31 of file LifecycleComponent.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component.png b/versions/v4.2.2/classmodulo__components_1_1_lifecycle_component.png new file mode 100644 index 0000000000000000000000000000000000000000..08cfe69b228217835364060003248540b1fee2bc GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0y~yVEh4O2XHV0$wTL+R{<&M0G|-o|Ns93nJ?aaE$u(F z+`>S!Kw|ot7Y7a;0E!1sy1W7?$5|5O7t8?UgMm5I>?;fmEcKo)jv*C{Z|A<9_DPG! z&3wnShyT|9$l%Ux5Q~0o@p;~nr^@l3E8eL6QEd_6>3Ukc`)(eatAL=PI!XpUFQn1&^h@&61n{X-@UluOI&x3Dn$paa7{5YU#p5 zkA;(ao_{U4U4JC;f;>Y#!vVe@!Sg;#f2wD&@4eq`&t%_M!BaECsM6|{rS|iAc_qi5 zf9**tUG07<_v8=Zd6$h}di38nTi0=7o7sW(rxL|Xc6Fb9GFQn&tx4-Xx@G1&x8Qi! zpuOczzQ?rk>UxVrSIPzbZ)|?x%^IKm(%$ ztE^;nDec(x<=0JZf4s^#ey( zy+cXq_AjF!J3oYNKeqe9?Ev3SE%Sp_*_t0JzdkpP(_I^0B$}fCIKKK_qqtz@+V|-- zu@%zy#GP`(CaHa%dikXFzDIw~$*%uU`u^CDzWbl&)LdCx_qXr9*Mi>HrN8^$zrW4= zHS*&QsjS^s>L2yhi(O<=_+E0k@qF0QlP13uO267YjqIJ@ztBxdiMjWHz4xOSN$=2g z&%0|kW+|9lK2^N(+RiKDf0i=s7xlW&^xAo4(ERlbUr!tdMrlcw)~1dV9{KN!4+guW zL`y$N?)kXu%WA>o9`P>+0}PKvybgY_e2(nXTlXK;G1mNBZg^~mYW4$H7q?%@cWfW) zH;4=VO#hk;(iK0Ux%`8YQreRTvU{4v1ve_O`*SEtOkt`Arl@Z$AEI|LM@+lQT=0S6 zTgiTD_5804GJDQ4SNzGn{ba3NL$i4`!!hl>cR})OPaiPyoI1!XF{PQ^K!cq>A%IWr zzycYY21m;ZhUOxmg3|r>-*01m!1QC)pF0GU;xVh?eh|=sA`Q8%Q-X}t+2224)IqV8 z`NQi=?DzZBLgegb8{BhU-*#Mm>6CM;->@e{*E9cVw7v4{O6~iZGBwP0HvK7f7c6JW z?XO&B5;{pYZ1d5iTR!EBSFTrDd;7fG*7kcl-@ROJv3qax^#{wFR|fdAZ|&RlCFFE> zaq4b!F3p$ueai#hn`SMl>MFi%{ln_<@58l>`CGyVT# zvi+FckE>hiq<49QgM?21Fss)ti|#pn_WsN*=M+`{+HTw1EZ?ZV{ZXU!zS7FbSL_c~ z=h?1w69+1u{b2sm!dWMl+nHwVW6%ye`_LSeF!lfwM%YpT?c=HI|Lp!X{ipYB>k3x8 zrBl|uUVQM}aqGNy5B!_v3vKcGJLS@^zXm@xKa{aK;Q04pkG<^KgUm8lmai`M()?R% pSpkfuK;&rRQexwS;vD<41;Fx&!PC{xWt~$(69AP7aQXlM literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception-members.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception-members.html new file mode 100644 index 000000000..fbab690eb --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception-members.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components::exceptions::AddServiceException Member List
+
+
+ +

This is the complete list of members for modulo_components::exceptions::AddServiceException, including all inherited members.

+ + + + +
AddServiceException(const std::string &msg) (defined in modulo_components::exceptions::AddServiceException)modulo_components::exceptions::AddServiceExceptioninlineexplicit
ComponentException(const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineexplicit
ComponentException(const std::string &prefix, const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineprotected
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception.html new file mode 100644 index 000000000..e9d111527 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception.html @@ -0,0 +1,154 @@ + + + + + + + +Modulo: modulo_components::exceptions::AddServiceException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::exceptions::AddServiceException Class Reference
+
+
+ +

An exception class to notify errors when adding a service. + More...

+ +

#include <AddServiceException.hpp>

+
+Inheritance diagram for modulo_components::exceptions::AddServiceException:
+
+
+ + +modulo_components::exceptions::ComponentException + +
+ + + + + + + +

+Public Member Functions

 AddServiceException (const std::string &msg)
 
- Public Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify errors when adding a service.

+

This is an exception class to be thrown if there is a problem while adding a service to the component.

+ +

Definition at line 12 of file AddServiceException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ AddServiceException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_components::exceptions::AddServiceException::AddServiceException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 14 of file AddServiceException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception.png b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_service_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7df987d51c75c29aec78f500c4b096f0fe9e49 GIT binary patch literal 1474 zcmb_cYh2Q26vn@J!BoVVIWtr9GMxQ%;nb!EB?`v8Bwe&ATA5CZ60dlVbk62AD;tqw z&Z3Lg%0{9Dnz|A-#f(CfE>luLs0fvrvHiAv>Em`job#OXoDc7Np7Xw^LW40z29^dO z5XdMHiw*;Uv``vctgo%{mriyoHDP_|x4ZpUS64MqGOtXl=w^7i!ILb`^CTP&M^ndF z@vmw)NNQLx9;C_tGEaau1_J2>1){g_CTmG+ULWi6GStPmhrU^%llhBPIS%IQ5?JcB zwSCnN7c8Ul;g`*J?S$usPKbVBWkXFRvRV`%5`BiPV`T%7)Qk|hAHb*}`oa8s;QFE-0$8(%sZ zpI(Qb&C!*G{JeUJ^MXzArYQGH2+wdh=Kk&hcqA*KykuD^cqKO@2%A+h8U2M*bt_Aq zUxaj&XOi9VBcc_j5kt-SZ74Ds#Qu@Umjdo!IaQ)ERNy}^DYk7r8-|8oPSuj%SOQEy zxmX(%GCF#T{-ZK5@b0bLsQ}caDH*)h#@bLo5PK6F3K+1jM4bSe>Q|xwEmI8%K*0Zj zl+WoH_qY`wuqfJQ!Q&NDBcP_=$5o?%L7pkLjv4_#+z~kWj+m`X1Oi9$9{Yt`;_ZsCUzi(hJ*hcfp{2INX{WPdZb+CkuMU9pOP@CUz?A9kd%ZMVp5p|)0) z*3cGHV~jBxA8xU&D7x!Jy|yGZOb6($mWNY@uP{Vs8wsvuw2t_Y-bQw#AS=q<3pzTT z>P=1D!mi zhk%iPyHH&fL7N&7_aIs~JPvC4wPq`1GOn%c5sjAzxkuyTC~uABeb!9kn`FrGEMMaD z0OXQk-{VCF8dhrWa3Y>mq&sUvzgHsDM##xza{PnVxgk9@U6+- z1x+Z#EuZ#-h+Ae)W0qnG0Zi8w(>yji)}(Gd1T2|(9-^z2bsBZTY*g?6k@?f@5kFbu^7o^&vqPiNP*V%o zX%w)@&J-JiMgx%2Vr&vTDOc&bpS@vrM7)OHC!o;HQ*G4JGwE^gh$<@76CKfQ# z_K3MgfSz$YZ@w%sevdh2*uJl#{E%W1d5(u1wAkF#PNjK)~5nI>%X3`gE8 z@-bnK9i1MqO1VD%KCZlDXU7@;P4WoA7qn~-U+I-tWmdw(m~XZ-Ou5!!e6F4wSb1Sd z`Ks;VJErI3;crM&LkAJsA%1koQ6GZmz{Zc$Vr&gUO24y zigGA@a5+J>K%5oos>eKOsHW?|sVmE!+k~*I>@nwj*AnOu=T3gwLt$@<&^f{OUxnLel9g+d|hI#ZOABSfkoCo;SVB1-0GE z2gzv$u20@4-Kc2(`jV7HCVgl+b=%g{k#-@az*!I=p2odQ?yB+M>}F>-ykKMw8|f`^ zkr`O^&)zNr2cYdMImP-gn8NW>5#%P}JK^ + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components::exceptions::AddSignalException Member List
+
+
+ +

This is the complete list of members for modulo_components::exceptions::AddSignalException, including all inherited members.

+ + + + +
AddSignalException(const std::string &msg) (defined in modulo_components::exceptions::AddSignalException)modulo_components::exceptions::AddSignalExceptioninlineexplicit
ComponentException(const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineexplicit
ComponentException(const std::string &prefix, const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineprotected
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception.html new file mode 100644 index 000000000..0362145a4 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception.html @@ -0,0 +1,154 @@ + + + + + + + +Modulo: modulo_components::exceptions::AddSignalException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::exceptions::AddSignalException Class Reference
+
+
+ +

An exception class to notify errors when adding a signal. + More...

+ +

#include <AddSignalException.hpp>

+
+Inheritance diagram for modulo_components::exceptions::AddSignalException:
+
+
+ + +modulo_components::exceptions::ComponentException + +
+ + + + + + + +

+Public Member Functions

 AddSignalException (const std::string &msg)
 
- Public Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify errors when adding a signal.

+

This is an exception class to be thrown if there is a problem while adding a signal to the component.

+ +

Definition at line 12 of file AddSignalException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ AddSignalException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_components::exceptions::AddSignalException::AddSignalException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 14 of file AddSignalException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception.png b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_add_signal_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..3a13ba585cf6eece4d05f4054629119ab2ad5c1c GIT binary patch literal 1471 zcmb`HZB&wH7{?#8Fg@xPJEhr+^@u69w57{8Oe;+3MLeMCQozl^FqvthAt{~NNwm`m zv5AOcx|yjNOU+csw`IivwdD)u1WOSt6BQ$KitK5vFMZwa5BL4QumAn!{{63W<%EU= zSy|Xw003Zx2}a`pzyt+p)>>0&KekXg4jr39kA?*rjYddLzR}aJbyj-qMxM3h$|l>} z+o3w1({~H<%u{e7cmTTpvpiSv`vG9hVGMeI*m;xbk||D&mnH1aa+haI{&PD5+SPU* zalB$hVy@ug-BW+G8Y-^i(8!AD>@ltDh(ZX`wOS0KSK*hVY8E-=q0$x*ZD8UX-7Sqq zG-E&DR-nU5oZFdvgbwsAVI^%KD$I61e ztrMQYRM%qjjXd$#KGIIQeo#XkJ|b-#9v?O9NGRK9_ga21zq>E>N8eGAX!Li3bWmaN z?<6@2{hf=DliC%=Y4xWca5P#0S~sG|4;F|RaLKtetnPZmVPyGroU7?<7YbP2PD6aL z?eX|_27vq^`byrIoMfXedf?31XdS=_-WmXxmLP;kUrd#Bf<}<% z+?i^bddlOOyVutQ3wYnbCGPG=KsuQWMIifHQYNlTiX*>saLrEN>qWr}m}Ih?-la9l zWU0@kFJ{SyFrFY8`otYoQjV`M{UMgWVl zQfoErsDs5Aazdte)*&KkXfmBS@V=oacVMb237R+W;(m<$5-WL8%QWijY~E3rmHtz?U+xWq09F)9aFLi^`;(tgNy!D7VUMEbT3yn zvU~#O*&|N%upx<;*(EQi8>DNWpB$9F>$9|;co4B{#!%KtUeysU%rz01zl|r{Hc*7U zJMe23y|SqEX-ZTn7*si(vMZM#8y|9-&ayA2odc;);=!vs{kgIx4WZ{o0mS88`~x!C zf2^`2Qy{}!s?l9e8n$xz7v9lAUdgskAahhao?{-$y&i$36Xdk=sTS=XfFv^w0HT9* zKr(7;of-SU2ceK`4S+#OJJ9~Wq(5t*)@UNKf`vQWZ0!ghK%=7rbs)$ICZf@B$rTpV zV(ZpnLR8&u#v9|(GJ#dk@NIa8L2UgnYlZmzQX7j!u=X)VsRGfPL)AX@;uY^G2Pg{hN{X@NJe@$wMv980%*wtBj z!VRvVM0IyO(q)&7`ppj~*31(#Co*Td8sZ%i7SdNR%{{#n;hUa37u-)sZb{%{?LC*1 z689-n2hT9?-3#aU?YZ0iWrVLkTP|qSBa>5xL*(U6-Ze$FB6G&s7u`7x+ifh0iUwXs zXFjy0pp<|4aD7P-%J<$(j}alvSI8tNcSnk9Tk%BSSP<-4^!z|?w!(cTrpWDFNejJQy`_ + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components::exceptions::ComponentException Member List
+
+
+ +

This is the complete list of members for modulo_components::exceptions::ComponentException, including all inherited members.

+ + + +
ComponentException(const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineexplicit
ComponentException(const std::string &prefix, const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineprotected
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception.html new file mode 100644 index 000000000..3e3053105 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception.html @@ -0,0 +1,192 @@ + + + + + + + +Modulo: modulo_components::exceptions::ComponentException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::exceptions::ComponentException Class Reference
+
+
+ +

A base class for all component exceptions. + More...

+ +

#include <ComponentException.hpp>

+
+Inheritance diagram for modulo_components::exceptions::ComponentException:
+
+
+ + +modulo_components::exceptions::AddServiceException +modulo_components::exceptions::AddSignalException +modulo_components::exceptions::ComponentParameterException +modulo_components::exceptions::LookupTransformException + +
+ + + + +

+Public Member Functions

 ComponentException (const std::string &msg)
 
+ + + +

+Protected Member Functions

 ComponentException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

A base class for all component exceptions.

+

This inherits from std::runtime_exception.

+ +

Definition at line 17 of file ComponentException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ ComponentException() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_components::exceptions::ComponentException::ComponentException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 19 of file ComponentException.hpp.

+ +
+
+ +

◆ ComponentException() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
modulo_components::exceptions::ComponentException::ComponentException (const std::string & prefix,
const std::string & msg 
)
+
+inlineprotected
+
+ +

Definition at line 21 of file ComponentException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception.png b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..4fff051bbf38b9ec60b9bd4018546c04704dacb7 GIT binary patch literal 3239 zcmdT{dstFw8do#N+Pq9x%hZ}}*QdtOvb#6NF4JXFN;{F5Vz!f;q?k&I2{^TnPUEDL zrj{n`ROWaLuw0_FJQ@{FnAGAGGg341f}#j0hr`(eTD!Bmf9+qh=Xt(!zK{2M-rxKF zfb;uY6*axDudl~G56zSQjLGIChXjXOU}y8S*{Y<)!eXBHo*jV)Q!SO<%8>D<#nvwh zf)-tYq2BAC<*77t^-a5j!#yru-j~U`p?Ix=^|y$UpE)>{=rAlO#2%{dD=V ztc;8dMhL9-la!WeSFTv`S9XgL6UJ1~ZEbDeyYq1p^{cR0H!CYE{T`)6?UzzGZDJ%U znazsVe|v4z^*U6x1Xx>JPpFGc>V`)lu%n~n3yIs{i-9;#X;1q#nH*)H6Lko=NSGyY zuNSS$K49;Rhdnl7IiQx)p%f0(o^g$)eN3Whlf(!K8ZY+za$%v!^;b&xRwH4GG&I)V zwLv0o*K{jr#qIBCEcEP523fKMq5u|K+#ubDGQs7LFrKZ9=Rvj=`)V2c@wBbj$V|dqZGGn_UN*JOyYlO{c+%ms~^~po#{H!*8 zZqC}Wq+r_R^Sw&5`SBU^YBREqRlf=Idz9jvtFeltoyA%>!}DevF}sa8Z8`^L( zr+ONrd>MtqZ=P;Sd@RIo^ZDBRTDS@XGw_%;@C%2_`xs*lW2*g>PYj}U(k?ui<3Bu-y&>`^+{V+>=uQR41(6nQ31U-3Ux)-kZJ$x} z(Ed!iGVShEuT&%#U$l45aY;uqqyzZvk!QB}ufHM@y0HQ=S2JT+2f%LByKD5v+?WjF z=HcE`Req`bQ4T(oEGCr52B?aRu5-5(6RJPu?814U!_u0D3rVjmi(e=&m67-;a?UHu zXJ{~Y)5GQbAmxP58Q+p;()_7OTB;3)f0{6z=+X!{D>5Sf$h>4uvc%z@M|Zz%ZmY52 zc5V#)&n7keM>Pe^O3~0}%bn8wv(=xnN}I-1B2y&EZc-2^wV%Txa~v#H>(`E4=@GI)jI(;;zJ=YKkb zj91}U^5h8)pBw_4JKX6FL41$j7Qa_nZX&m+3 zkqt4ZsWY7Sn;O5=IWWR-`?n>ZZ9Q?Rd;29rN^N)i)wfWW@^s%Sv^!qlEaHM|Ku{kRsRe)oKr4Qn2QG7; zA^;ciWjt`uvxp9~ZutcQW3Rp?0ULv3ArP!Rf~jKGAb2W|iAgIE5FAPDG?^GGL99-g z^oF()tPy`>GWqCGeNu@h7_nFvv$E2B-#|I{FTaPoCbXddbs$;|a|Nf3Mh`Gnqc0FM z7LXH$I&??TJrfRZ(KVK6%sv1hxP)>+Jtd|ViK4sK8A-=hbB*d}Pq!!PGHW{VP!j$@ zx{?5NuPfDV1)4=9NyH!kC|J9r!uceCDheg59&Tf5v!TN#C2eE>5kTC2Y_pJNI;N0| z+Bw*3l+=a8=+>6!sPXUqW2G__`*I+NdIHs2I7vJfr?Jq>hN?vE+?W!t0J`Df@`0+J zR9YnNO|oA4BVmn#ECJZdMTS>#NL33v*E8@RcX~c+3*2&d(2M7KU@vD?`wbSWDXoG_=VUJ|48z?H(2>#BqTUCAo}(E&8N~cPv_-s|(ZiZN zq?CI;4i{JHM|2K#j7qj(oU?&mbB>& z_In_~o4wM@J;}APK!#o(mkuRCS`vM=XV;|nIZ1ewrT{Mt0;ul@qvv1pnUnLy7qY+Q z(uL|-o={KpU!;yjD?PZA66#@IU+=!5PoC(G9{{LbY!JCkPU!EDyhMX0X2qg%8$*>U94Q0CRKo^;x_ zOKKWbX-Xai6vbek#hB-p&x&|jRQh1qa3twg^b!2jXRoq31XnAECaec? z}l2r!ZS*3tfS0#X%VP@TTonATXWIjp4lMXl=yQ?g43 z`V?bf2eBScS5o5an(H1bc4yh4tMn*{6#Z_}kjO~zE^qdsw?0{R%bwVziV-~3#iAOn zrf(;`zeUu^45oK(6;%<0oa>RLJqq396l~}R6?L@jhX6!Ca=8T#u9ir8doX&?--l{# za_zOke6-Sl9<2X8B@f+_k~M@h6$-&jwq{P1lLGo9v44~De0%4eDcb7?)Y1%G2MuxyOCf3<+ z=A;$|0HoX>{=hnBP6~kmpu7LhM;bG85;o-2B5~aZ8Z&be=C3uv6aGMBW`_cqi6=X- pm9w}Ai5GM|!4~ybv}tfSWHIaAOXinO*k1~ZJv)PUaJNOB{Rdh}xS0R| literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception-members.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception-members.html new file mode 100644 index 000000000..2064b68c0 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception-members.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components::exceptions::ComponentParameterException Member List
+
+
+ +

This is the complete list of members for modulo_components::exceptions::ComponentParameterException, including all inherited members.

+ + + + +
ComponentException(const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineexplicit
ComponentException(const std::string &prefix, const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineprotected
ComponentParameterException(const std::string &msg) (defined in modulo_components::exceptions::ComponentParameterException)modulo_components::exceptions::ComponentParameterExceptioninlineexplicit
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception.html new file mode 100644 index 000000000..8fe184b6e --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception.html @@ -0,0 +1,154 @@ + + + + + + + +Modulo: modulo_components::exceptions::ComponentParameterException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::exceptions::ComponentParameterException Class Reference
+
+
+ +

An exception class to notify errors with component parameters. + More...

+ +

#include <ComponentParameterException.hpp>

+
+Inheritance diagram for modulo_components::exceptions::ComponentParameterException:
+
+
+ + +modulo_components::exceptions::ComponentException + +
+ + + + + + + +

+Public Member Functions

 ComponentParameterException (const std::string &msg)
 
- Public Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify errors with component parameters.

+

This is an exception class to be thrown if there is a problem with component parameters (overriding, inconsistent types, undeclared, ...).

+ +

Definition at line 13 of file ComponentParameterException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ ComponentParameterException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_components::exceptions::ComponentParameterException::ComponentParameterException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 15 of file ComponentParameterException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception.png b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_component_parameter_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..855ff75e4cdccfc9056a08f0424bf7965a058341 GIT binary patch literal 1554 zcmb_ceKga17@y>L2}L)O8(l=#duCoLn_C=KS`N*wcTuXzOEEMSb(Q2~2gTMf3Tqo% zXfb1RLvAiPm!VCoEAm#qk(YT{ZTDB5bN{&a&wIare8120e4ghy=XpM#^Ud=|`RHiv z(t8(^ML38HA3Xb@c=H~cg($3PpnU0PQ zFdkSm^bo`}Qvy(d5YYd6TsKjK5Qthi((9*_=_)|^SPA2(HpJ#sJyM~}Cz>CQY|-e0 z8@)Pcf3ynd@_#&w@$%BwEA-t4ZR+Z?Ef6Ne8lbSQ&@EOR3i*1mxWDfymny?}WSsHf z%NM#A>0ks-3O!#sf94P$jTHVBJ^OqcQ} z57=j+Og1$@lNr;a0&Ox*f&w)c+39tNt~&S#jgrS9ktJ8hU}PJyAQDF;FOt4RDDm{f zl6e_6Qrb+H^nHLt2NhhGwRTgG8K;Z)LwUX;HClb+8q;-Pe%>g0B}fPCludyd zL7TF!3Vh_rHt{9xWYO{G!~dQM3B<;ZSEoXol1#+jU*`9O!0$R_Z{AZR)ZNxUiovUE zSaMXomL65SR*6Oe5P|1Wbqy^X*BIrN50 zbwCdve~qbRh(8*h!=NQo?&BfXdvYRr34Xl3y=@hrCqBcR2+ncQ6|fg1T54xLbNX`m z`S14~OSG%}l!@d%abtbAq=g8-%9t}z=OBh)_pMCX%EL9E1!mAlSAG6-j#^eXPkRR-L$Vf;ImJ3C? z%QE<6eDQ2pyUSzMa$HSdKW}_EnqiS^OmRog+HRs)i z+KG0Rx>WIi8M1g>q;GGyGzZYW6ikr7byAb7P0+(fJ~@j9^4F0!5DY??F$HWD1}Fr7V>cHa2G=*B6H&3^{2Z}Nqhf%N~8NvKK7jsgYXy!HL;?mZs&Fq0Jw44ygx0KHN((#u82EcbklrXS*5RmY Fe*wj866OE^ literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception-members.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception-members.html new file mode 100644 index 000000000..0e93e38ee --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception-members.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: Member List + + + + + + + + + + +
+
modulo_components::exceptions::LookupTransformException Member List
+
+
+ +

This is the complete list of members for modulo_components::exceptions::LookupTransformException, including all inherited members.

+ + + + +
ComponentException(const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineexplicit
ComponentException(const std::string &prefix, const std::string &msg) (defined in modulo_components::exceptions::ComponentException)modulo_components::exceptions::ComponentExceptioninlineprotected
LookupTransformException(const std::string &msg) (defined in modulo_components::exceptions::LookupTransformException)modulo_components::exceptions::LookupTransformExceptioninlineexplicit
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.html b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.html new file mode 100644 index 000000000..2da6af6f9 --- /dev/null +++ b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.html @@ -0,0 +1,154 @@ + + + + + + + +Modulo: modulo_components::exceptions::LookupTransformException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_components::exceptions::LookupTransformException Class Reference
+
+
+ +

An exception class to notify an error while looking up TF transforms. + More...

+ +

#include <LookupTransformException.hpp>

+
+Inheritance diagram for modulo_components::exceptions::LookupTransformException:
+
+
+ + +modulo_components::exceptions::ComponentException + +
+ + + + + + + +

+Public Member Functions

 LookupTransformException (const std::string &msg)
 
- Public Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_components::exceptions::ComponentException
 ComponentException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify an error while looking up TF transforms.

+

This is an exception class to be thrown if there is a problem with looking up a TF transform (unconfigured buffer/listener, TF2 exception).

+ +

Definition at line 13 of file LookupTransformException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ LookupTransformException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_components::exceptions::LookupTransformException::LookupTransformException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 15 of file LookupTransformException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.png b/versions/v4.2.2/classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..a2aed5fb84e3c1e41adface8011870f5f2971319 GIT binary patch literal 1551 zcmb_cdsLDK6#vZ3M;We`Gs{dYJsvA_WSW||9UYRdQqdHXS&nm3)A>O2C}_EvuVC7e zK+Tq^2`Z%-BI3u%SE*Ue%ts(oibMm)5>XJ@*Us4=JKNbm+x_Fde)rsS?!CWri%tfi zOie6J001yW`}u?bfF2I=3yt(4ooR3J17voc3<&ep>2#1g_g+b$JZf+|?C`Axb$E`? z=R^6>^3l5xW}F@p6beA`AL6>9@+ANm(9u3$gk98=RZHoY{k8y(Ga9=roqY_7?B%vm zSlU^+^F-Z#n==ojU}51tINWA09$!R@1f=7`2gpkacypB61yN$FrPKNpHlzkPIi5pQ zeeXZRT%*&7I~P@s;O4ZP#@*|r_2XRD)M~jRE`&&FY%R@yOONLdzYpvZvTj^Iw|XQu z5!GKo8O8sxT(`rwPr%!JF@K2SxRMGo7#e}o#g<2Dl96}QD#sySeM44u^;Z(M#K9@zYQzC*Mh~-1 z^Ui(L?WFl=xHpH0=CqsKbikW{(U%zW#rmMCqkqm*Ax&(*#bi-`kxcOrrizAu?Mhw#J>cOt8ry)o_LauG*U zH3t$O_pCoh(=w>rg~_!~4q!*y`ohpb5w{qflJ7*V`6I~QjIK#0^*G^J=L}wa(8ZN^ z_U4;q`5BY*q2WU*@y^e7Ae5q^9d{Wm6DlS{?ap-#$M6Q3Phy-TsRdLmIXGL@Ep;7d zG3L=;Baqh7{%PT>Rt2$s1+f-zV8xCEY|Ar)2w;IkI#}#2hA7YPz|?AsX06*XWO5c=Ef-;hiq@`8Iut#X(BqRBibeAe)NN`S@Z z%z7{$rpYQk558~hxWJau{M}Pj=AXDlUp5Pw05jak6otmf(e$1f#BV#|QES5n3`O)zwbhnN55H-6Z!C qs9ccWyo1YBA#MJ8o{){sQ#60km(BPs^8IU;Z6)nIg9U literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface-members.html b/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface-members.html new file mode 100644 index 000000000..cbd2a44ab --- /dev/null +++ b/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface-members.html @@ -0,0 +1,145 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_controllers::ControllerInterface Member List
+
+
+ +

This is the complete list of members for modulo_controllers::ControllerInterface, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_command_interface(const std::string &name, const std::string &interface)modulo_controllers::ControllerInterfaceprotected
add_input(const std::string &name, const std::string &topic_name="")modulo_controllers::ControllerInterfaceinlineprotected
add_input(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_input(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_input(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name="")modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)modulo_controllers::ControllerInterfaceprotected
add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)modulo_controllers::ControllerInterfaceinlineprotected
add_predicate(const std::string &predicate_name, bool predicate_value)modulo_controllers::ControllerInterfaceprotected
add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_controllers::ControllerInterfaceprotected
add_service(const std::string &service_name, const std::function< ControllerServiceResponse(void)> &callback)modulo_controllers::ControllerInterfaceprotected
add_service(const std::string &service_name, const std::function< ControllerServiceResponse(const std::string &string)> &callback)modulo_controllers::ControllerInterfaceprotected
add_state_interface(const std::string &name, const std::string &interface)modulo_controllers::ControllerInterfaceprotected
add_trigger(const std::string &trigger_name)modulo_controllers::ControllerInterfaceprotected
command_interface_configuration() const finalmodulo_controllers::ControllerInterface
ControllerInterface(bool claim_all_state_interfaces=false)modulo_controllers::ControllerInterface
evaluate(const rclcpp::Time &time, const std::chrono::nanoseconds &period)=0modulo_controllers::ControllerInterfaceprotectedpure virtual
get_command_interface(const std::string &name, const std::string &interface) constmodulo_controllers::ControllerInterfaceprotected
get_parameter(const std::string &name) constmodulo_controllers::ControllerInterfaceprotected
get_parameter_value(const std::string &name) constmodulo_controllers::ControllerInterfaceinlineprotected
get_predicate(const std::string &predicate_name) constmodulo_controllers::ControllerInterfaceprotected
get_qos() constmodulo_controllers::ControllerInterfaceprotected
get_state_interface(const std::string &name, const std::string &interface) constmodulo_controllers::ControllerInterfaceprotected
get_state_interfaces(const std::string &name) constmodulo_controllers::ControllerInterfaceprotected
hardware_name_modulo_controllers::ControllerInterfaceprotected
is_active() constmodulo_controllers::ControllerInterfaceprotected
on_activate(const rclcpp_lifecycle::State &previous_state) finalmodulo_controllers::ControllerInterface
on_activate()modulo_controllers::ControllerInterfaceprotectedvirtual
on_configure(const rclcpp_lifecycle::State &previous_state) finalmodulo_controllers::ControllerInterface
on_configure()modulo_controllers::ControllerInterfaceprotectedvirtual
on_deactivate(const rclcpp_lifecycle::State &previous_state) finalmodulo_controllers::ControllerInterface
on_deactivate()modulo_controllers::ControllerInterfaceprotectedvirtual
on_init() overridemodulo_controllers::ControllerInterface
on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter)modulo_controllers::ControllerInterfaceprotectedvirtual
read_input(const std::string &name)modulo_controllers::ControllerInterfaceinlineprotected
read_input(const std::string &name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
read_input(const std::string &name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
read_input(const std::string &name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
read_state_interfaces()modulo_controllers::ControllerInterfaceprotectedvirtual
set_command_interface(const std::string &name, const std::string &interface, double value)modulo_controllers::ControllerInterfaceprotected
set_parameter_value(const std::string &name, const T &value)modulo_controllers::ControllerInterfaceinlineprotected
set_predicate(const std::string &predicate_name, bool predicate_value)modulo_controllers::ControllerInterfaceprotected
set_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_controllers::ControllerInterfaceprotected
set_qos(const rclcpp::QoS &qos)modulo_controllers::ControllerInterfaceprotected
state_interface_configuration() const finalmodulo_controllers::ControllerInterface
trigger(const std::string &trigger_name)modulo_controllers::ControllerInterfaceprotected
update(const rclcpp::Time &time, const rclcpp::Duration &period) finalmodulo_controllers::ControllerInterface
write_command_interfaces(const rclcpp::Duration &period)modulo_controllers::ControllerInterfaceprotectedvirtual
write_output(const std::string &name, const T &data)modulo_controllers::ControllerInterfaceinlineprotected
write_output(const std::string &name, const bool &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const double &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const std::vector< double > &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const int &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const std::string &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
+ + + + diff --git a/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface.html b/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface.html new file mode 100644 index 000000000..1aedea8e4 --- /dev/null +++ b/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface.html @@ -0,0 +1,2636 @@ + + + + + + + +Modulo: modulo_controllers::ControllerInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_controllers::ControllerInterface Class Referenceabstract
+
+
+ +

Base controller class to combine ros2_control, control libraries and modulo. + More...

+ +

#include <ControllerInterface.hpp>

+
+Inheritance diagram for modulo_controllers::ControllerInterface:
+
+
+ + +modulo_controllers::RobotControllerInterface + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ControllerInterface (bool claim_all_state_interfaces=false)
 Default constructor.
 
CallbackReturn on_init () override
 Declare parameters and register the on_set_parameters callback.
 
CallbackReturn on_configure (const rclcpp_lifecycle::State &previous_state) final
 Set class properties from parameters and add signals.
 
CallbackReturn on_activate (const rclcpp_lifecycle::State &previous_state) final
 Initialize internal data attributes from configured interfaces and wait for valid states from hardware.
 
CallbackReturn on_deactivate (const rclcpp_lifecycle::State &previous_state) final
 Deactivate the controller.
 
controller_interface::return_type update (const rclcpp::Time &time, const rclcpp::Duration &period) final
 Read the state interfaces, perform control evaluation and write the command interfaces.
 
controller_interface::InterfaceConfiguration state_interface_configuration () const final
 Configure the state interfaces.
 
controller_interface::InterfaceConfiguration command_interface_configuration () const final
 Configure the command interfaces.
 
template<>
void write_output (const std::string &name, const bool &data)
 
template<>
void write_output (const std::string &name, const double &data)
 
template<>
void write_output (const std::string &name, const std::vector< double > &data)
 
template<>
void write_output (const std::string &name, const int &data)
 
template<>
void write_output (const std::string &name, const std::string &data)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

virtual CallbackReturn on_configure ()
 Configure the controller.
 
virtual CallbackReturn on_activate ()
 Activate the controller.
 
virtual CallbackReturn on_deactivate ()
 Deactivate the controller.
 
virtual controller_interface::return_type read_state_interfaces ()
 Read the state interfaces.
 
virtual controller_interface::return_type write_command_interfaces (const rclcpp::Duration &period)
 Write the command interfaces.
 
virtual controller_interface::return_type evaluate (const rclcpp::Time &time, const std::chrono::nanoseconds &period)=0
 The control logic callback.
 
void add_state_interface (const std::string &name, const std::string &interface)
 Add a state interface to the controller by name.
 
void add_command_interface (const std::string &name, const std::string &interface)
 Add a command interface to the controller by name.
 
std::unordered_map< std::string, doubleget_state_interfaces (const std::string &name) const
 Get a map containing the state interfaces by name of the parent tag.
 
double get_state_interface (const std::string &name, const std::string &interface) const
 Get the value of a state interface by name.
 
double get_command_interface (const std::string &name, const std::string &interface) const
 Get the value of a command interface by name.
 
void set_command_interface (const std::string &name, const std::string &interface, double value)
 Set the value of a command interface by name.
 
void add_parameter (const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
 Add a parameter.
 
template<typename T >
void add_parameter (const std::string &name, const T &value, const std::string &description, bool read_only=false)
 Add a parameter.
 
virtual bool on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > &parameter)
 Parameter validation function to be redefined by derived controller classes.
 
std::shared_ptr< state_representation::ParameterInterface > get_parameter (const std::string &name) const
 Get a parameter by name.
 
template<typename T >
get_parameter_value (const std::string &name) const
 Get a parameter value by name.
 
template<typename T >
void set_parameter_value (const std::string &name, const T &value)
 Set the value of a parameter.
 
void add_predicate (const std::string &predicate_name, bool predicate_value)
 Add a predicate to the map of predicates.
 
void add_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Add a predicate to the map of predicates based on a function to periodically call.
 
bool get_predicate (const std::string &predicate_name) const
 Get the logical value of a predicate.
 
void set_predicate (const std::string &predicate_name, bool predicate_value)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void set_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void add_trigger (const std::string &trigger_name)
 Add a trigger to the controller.
 
void trigger (const std::string &trigger_name)
 Latch the trigger with the provided name.
 
template<typename T >
void add_input (const std::string &name, const std::string &topic_name="")
 Add an input to the controller.
 
template<typename T >
void add_output (const std::string &name, const std::string &topic_name="")
 Add an output to the controller.
 
template<typename T >
std::optional< Tread_input (const std::string &name)
 Read the most recent message of an input.
 
template<typename T >
void write_output (const std::string &name, const T &data)
 Write an object to an output.
 
void add_service (const std::string &service_name, const std::function< ControllerServiceResponse(void)> &callback)
 Add a service to trigger a callback function with no input arguments.
 
void add_service (const std::string &service_name, const std::function< ControllerServiceResponse(const std::string &string)> &callback)
 Add a service to trigger a callback function with a string payload.
 
rclcpp::QoS get_qos () const
 Getter of the Quality of Service attribute.
 
void set_qos (const rclcpp::QoS &qos)
 Set the Quality of Service for ROS publishers and subscribers.
 
bool is_active () const
 Check if the controller is currently in state active or not.
 
template<>
void add_input (const std::string &name, const std::string &topic_name)
 
template<>
void add_input (const std::string &name, const std::string &topic_name)
 
template<>
void add_input (const std::string &name, const std::string &topic_name)
 
template<>
void add_output (const std::string &name, const std::string &topic_name)
 
template<>
void add_output (const std::string &name, const std::string &topic_name)
 
template<>
void add_output (const std::string &name, const std::string &topic_name)
 
template<>
std::optional< boolread_input (const std::string &name)
 
template<>
std::optional< doubleread_input (const std::string &name)
 
template<>
std::optional< intread_input (const std::string &name)
 
+ + + + +

+Protected Attributes

std::string hardware_name_
 The hardware name provided by a parameter.
 
+

Detailed Description

+

Base controller class to combine ros2_control, control libraries and modulo.

+ +

Definition at line 98 of file ControllerInterface.hpp.

+

Constructor & Destructor Documentation

+ +

◆ ControllerInterface()

+ +
+
+ + + + + + + + +
modulo_controllers::ControllerInterface::ControllerInterface (bool claim_all_state_interfaces = false)
+
+ +

Default constructor.

+
Parameters
+ + +
claim_all_state_interfacesFlag to indicate if all state interfaces should be claimed
+
+
+ +

Definition at line 21 of file ControllerInterface.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ add_command_interface()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_command_interface (const std::string & name,
const std::string & interface 
)
+
+protected
+
+ +

Add a command interface to the controller by name.

+
Parameters
+ + + +
nameThe name of the parent tag, e.g. the name of the joint, sensor or gpio
interfaceThe desired command interface
+
+
+ +

Definition at line 99 of file ControllerInterface.cpp.

+ +
+
+ +

◆ add_input() [1/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_input (const std::string & name,
const std::string & topic_name 
)
+
+inlineprotected
+
+ +

Definition at line 666 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_input() [2/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_input (const std::string & name,
const std::string & topic_name 
)
+
+inlineprotected
+
+ +

Definition at line 673 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_input() [3/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_input (const std::string & name,
const std::string & topic_name 
)
+
+inlineprotected
+
+ +

Definition at line 688 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_input() [4/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_input (const std::string & name,
const std::string & topic_name = "" 
)
+
+inlineprotected
+
+ +

Add an input to the controller.

+

Inputs should be added in the on_init function of the derived controllers. Doing this will create a ROS 2 subscription for the message type.

Template Parameters
+ + +
TThe type of the input data
+
+
+
Parameters
+ + + +
nameThe name of the input
topic_nameThe topic name of the input (defaults to ~/name)
+
+
+ +

Definition at line 657 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_output() [1/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_output (const std::string & name,
const std::string & topic_name 
)
+
+inlineprotected
+
+ +

Definition at line 717 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_output() [2/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_output (const std::string & name,
const std::string & topic_name 
)
+
+inlineprotected
+
+ +

Definition at line 722 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_output() [3/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_output (const std::string & name,
const std::string & topic_name 
)
+
+inlineprotected
+
+ +

Definition at line 733 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_output() [4/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_output (const std::string & name,
const std::string & topic_name = "" 
)
+
+inlineprotected
+
+ +

Add an output to the controller.

+

Outputs should be added in the on_init function of the derived controllers. Doing this will create a ROS 2 publisher for the message type and wrap it in a RealtimePublisher.

Template Parameters
+ + +
TThe type of the output data
+
+
+
Parameters
+ + + +
nameThe name of the output
topic_nameThe topic name of the output (defaults to ~/name)
+
+
+ +

Definition at line 711 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_parameter() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_parameter (const std::shared_ptr< state_representation::ParameterInterface > & parameter,
const std::string & description,
bool read_only = false 
)
+
+protected
+
+ +

Add a parameter.

+

This method stores a pointer reference to an existing Parameter object in the local parameter map and declares the equivalent ROS parameter on the ROS interface.

Parameters
+ + + + +
parameterA ParameterInterface pointer to a Parameter instance
descriptionThe description of the parameter
read_onlyIf true, the value of the parameter cannot be changed after declaration
+
+
+ +
+
+ +

◆ add_parameter() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_parameter (const std::string & name,
const Tvalue,
const std::string & description,
bool read_only = false 
)
+
+inlineprotected
+
+ +

Add a parameter.

+

This method creates a new Parameter object instance to reference in the local parameter map and declares the equivalent ROS parameter on the ROS interface.

Template Parameters
+ + +
TThe type of the parameter
+
+
+
Parameters
+ + + + + +
nameThe name of the parameter
valueThe value of the parameter
descriptionThe description of the parameter
read_onlyIf true, the value of the parameter cannot be changed after declaration
+
+
+ +

Definition at line 622 of file ControllerInterface.hpp.

+ +
+
+ +

◆ add_predicate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_predicate (const std::string & predicate_name,
bool predicate_value 
)
+
+protected
+
+ +

Add a predicate to the map of predicates.

+
Parameters
+ + + +
predicate_namethe name of the associated predicate
predicate_valuethe boolean value of the predicate
+
+
+ +

Definition at line 383 of file ControllerInterface.cpp.

+ +
+
+ +

◆ add_predicate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_predicate (const std::string & predicate_name,
const std::function< bool(void)> & predicate_function 
)
+
+protected
+
+ +

Add a predicate to the map of predicates based on a function to periodically call.

+
Parameters
+ + + +
predicate_namethe name of the associated predicate
predicate_functionthe function to call that returns the value of the predicate
+
+
+ +

Definition at line 387 of file ControllerInterface.cpp.

+ +
+
+ +

◆ add_service() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_service (const std::string & service_name,
const std::function< ControllerServiceResponse(const std::string &string)> & callback 
)
+
+protected
+
+ +

Add a service to trigger a callback function with a string payload.

+

The string payload can have an arbitrary format to parameterize and control the callback behaviour as desired. It is the responsibility of the service callback to parse the string according to some payload format. When adding a service with a string payload, be sure to document the payload format appropriately.

Parameters
+ + + +
service_nameThe name of the service
callbackA service callback function with a string argument that returns a ControllerServiceResponse
+
+
+ +

Definition at line 709 of file ControllerInterface.cpp.

+ +
+
+ +

◆ add_service() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_service (const std::string & service_name,
const std::function< ControllerServiceResponse(void)> & callback 
)
+
+protected
+
+ +

Add a service to trigger a callback function with no input arguments.

+
Parameters
+ + + +
service_nameThe name of the service
callbackA service callback function with no arguments that returns a ControllerServiceResponse
+
+
+ +

Definition at line 676 of file ControllerInterface.cpp.

+ +
+
+ +

◆ add_state_interface()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::add_state_interface (const std::string & name,
const std::string & interface 
)
+
+protected
+
+ +

Add a state interface to the controller by name.

+
Parameters
+ + + +
nameThe name of the parent tag, e.g. the name of the joint, sensor or gpio
interfaceThe desired state interface
+
+
+ +

Definition at line 95 of file ControllerInterface.cpp.

+ +
+
+ +

◆ add_trigger()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_controllers::ControllerInterface::add_trigger (const std::string & trigger_name)
+
+protected
+
+ +

Add a trigger to the controller.

+

Triggers are predicates that are always false except when it's triggered in which case it is set back to false immediately after it is read.

Parameters
+ + +
trigger_nameThe name of the trigger
+
+
+ +

Definition at line 451 of file ControllerInterface.cpp.

+ +
+
+ +

◆ command_interface_configuration()

+ +
+
+ + + + + +
+ + + + + + + +
controller_interface::InterfaceConfiguration modulo_controllers::ControllerInterface::command_interface_configuration () const
+
+final
+
+ +

Configure the command interfaces.

+
Returns
The command interface configuration
+ +

Definition at line 121 of file ControllerInterface.cpp.

+ +
+
+ +

◆ evaluate()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual controller_interface::return_type modulo_controllers::ControllerInterface::evaluate (const rclcpp::Time & time,
const std::chrono::nanoseconds & period 
)
+
+protectedpure virtual
+
+ +

The control logic callback.

+

This method should be overridden by derived classes. It is called in the update() method between reading the state interfaces and writing the command interfaces.

Parameters
+ + + +
timeThe controller clock time
periodTime elapsed since the last control evaluation
+
+
+
Returns
OK or ERROR
+ +
+
+ +

◆ get_command_interface()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double modulo_controllers::ControllerInterface::get_command_interface (const std::string & name,
const std::string & interface 
) const
+
+protected
+
+ +

Get the value of a command interface by name.

+
Parameters
+ + + +
nameThe name of the parent tag, e.g. the name of the joint, sensor or gpio
interfaceThe desired command interface
+
+
+
Exceptions
+ + +
out_of_rangeif the desired command interface is not available
+
+
+
Returns
The value of the command interface
+ +

Definition at line 283 of file ControllerInterface.cpp.

+ +
+
+ +

◆ get_parameter()

+ +
+
+ + + + + +
+ + + + + + + + +
std::shared_ptr< ParameterInterface > modulo_controllers::ControllerInterface::get_parameter (const std::string & name) const
+
+protected
+
+ +

Get a parameter by name.

+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Returns
The ParameterInterface pointer to a Parameter instance
+ +

Definition at line 332 of file ControllerInterface.cpp.

+ +
+
+ +

◆ get_parameter_value()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
T modulo_controllers::ControllerInterface::get_parameter_value (const std::string & name) const
+
+inlineprotected
+
+ +

Get a parameter value by name.

+
Template Parameters
+ + +
TThe type of the parameter
+
+
+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Returns
The value of the parameter
+ +

Definition at line 632 of file ControllerInterface.hpp.

+ +
+
+ +

◆ get_predicate()

+ +
+
+ + + + + +
+ + + + + + + + +
bool modulo_controllers::ControllerInterface::get_predicate (const std::string & predicate_name) const
+
+protected
+
+ +

Get the logical value of a predicate.

+

If the predicate is not found or the callable function fails, the return value is false.

Parameters
+ + +
predicate_namethe name of the predicate to retrieve from the map of predicates
+
+
+
Returns
the value of the predicate as a boolean
+ +

Definition at line 404 of file ControllerInterface.cpp.

+ +
+
+ +

◆ get_qos()

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp::QoS modulo_controllers::ControllerInterface::get_qos () const
+
+protected
+
+ +

Getter of the Quality of Service attribute.

+
Returns
The Quality of Service attribute
+ +

Definition at line 743 of file ControllerInterface.cpp.

+ +
+
+ +

◆ get_state_interface()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double modulo_controllers::ControllerInterface::get_state_interface (const std::string & name,
const std::string & interface 
) const
+
+protected
+
+ +

Get the value of a state interface by name.

+
Parameters
+ + + +
nameThe name of the parent tag, e.g. the name of the joint, sensor or gpio
interfaceThe desired state interface
+
+
+
Exceptions
+ + +
out_of_rangeif the desired state interface is not available
+
+
+
Returns
The value of the state interface
+ +

Definition at line 279 of file ControllerInterface.cpp.

+ +
+
+ +

◆ get_state_interfaces()

+ +
+
+ + + + + +
+ + + + + + + + +
std::unordered_map< std::string, double > modulo_controllers::ControllerInterface::get_state_interfaces (const std::string & name) const
+
+protected
+
+ +

Get a map containing the state interfaces by name of the parent tag.

+
Parameters
+ + +
nameThe name of the parent tag, e.g. the name of the joint, sensor or gpio
+
+
+
Exceptions
+ + +
out_of_rangeif the desired state interface is not available
+
+
+
Returns
The map containing the values of the state interfaces
+ +

Definition at line 275 of file ControllerInterface.cpp.

+ +
+
+ +

◆ is_active()

+ +
+
+ + + + + +
+ + + + + + + +
bool modulo_controllers::ControllerInterface::is_active () const
+
+protected
+
+ +

Check if the controller is currently in state active or not.

+
Returns
True if the controller is active, false otherwise
+ +

Definition at line 751 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_activate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::ControllerInterface::on_activate ()
+
+protectedvirtual
+
+ +

Activate the controller.

+

This method should be overridden by derived classes.

Returns
SUCCESS or ERROR
+ +

Reimplemented in modulo_controllers::RobotControllerInterface.

+ +

Definition at line 204 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_activate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::ControllerInterface::on_activate (const rclcpp_lifecycle::State & previous_state)
+
+final
+
+ +

Initialize internal data attributes from configured interfaces and wait for valid states from hardware.

+

This functions calls the internal on_activate() method

Parameters
+ + +
previous_stateThe previous lifecycle state
+
+
+
Returns
SUCCESS or ERROR
+ +

Definition at line 156 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_configure() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::ControllerInterface::on_configure ()
+
+protectedvirtual
+
+ +

Configure the controller.

+

This method should be overridden by derived classes.

Returns
SUCCESS or ERROR
+ +

Reimplemented in modulo_controllers::RobotControllerInterface.

+ +

Definition at line 91 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_configure() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::ControllerInterface::on_configure (const rclcpp_lifecycle::State & previous_state)
+
+final
+
+ +

Set class properties from parameters and add signals.

+

This functions calls the internal on_configure() method

Parameters
+ + +
previous_stateThe previous lifecycle state
+
+
+
Returns
SUCCESS or ERROR
+ +

Definition at line 56 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_deactivate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::ControllerInterface::on_deactivate ()
+
+protectedvirtual
+
+ +

Deactivate the controller.

+

This method should be overridden by derived classes.

Returns
SUCCESS or ERROR
+ +

Definition at line 213 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_deactivate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::ControllerInterface::on_deactivate (const rclcpp_lifecycle::State & previous_state)
+
+final
+
+ +

Deactivate the controller.

+
Parameters
+ + +
previous_stateThe previous lifecycle state
+
+
+
Returns
SUCCESS or ERROR
+ +

Definition at line 209 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_init()

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::ControllerInterface::on_init ()
+
+override
+
+ +

Declare parameters and register the on_set_parameters callback.

+
Returns
CallbackReturn status
+ +

Definition at line 27 of file ControllerInterface.cpp.

+ +
+
+ +

◆ on_validate_parameter_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
bool modulo_controllers::ControllerInterface::on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > & parameter)
+
+protectedvirtual
+
+ +

Parameter validation function to be redefined by derived controller classes.

+

This method is automatically invoked whenever the ROS interface tried to modify a parameter. Validation and sanitization can be performed by reading or writing the value of the parameter through the ParameterInterface pointer, depending on the parameter name and desired controller behaviour. If the validation returns true, the updated parameter value (including any modifications) is applied. If the validation returns false, any changes to the parameter are discarded and the parameter value is not changed.

Parameters
+ + +
parameterA ParameterInterface pointer to a Parameter instance
+
+
+
Returns
The validation result
+ +

Reimplemented in modulo_controllers::RobotControllerInterface.

+ +

Definition at line 379 of file ControllerInterface.cpp.

+ +
+
+ +

◆ read_input() [1/4]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
std::optional< T > modulo_controllers::ControllerInterface::read_input (const std::string & name)
+
+inlineprotected
+
+ +

Read the most recent message of an input.

+
Template Parameters
+ + +
TThe expected type of the input data
+
+
+
Parameters
+ + +
nameThe name of the input
+
+
+
Returns
The data on the desired input channel if the input exists and is not older than parameter 'input_validity_period'
+ +

Definition at line 743 of file ControllerInterface.hpp.

+ +
+
+ +

◆ read_input() [2/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + +
std::optional< int > modulo_controllers::ControllerInterface::read_input (const std::string & name)
+
+inlineprotected
+
+ +

Definition at line 743 of file ControllerInterface.hpp.

+ +
+
+ +

◆ read_input() [3/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + +
std::optional< double > modulo_controllers::ControllerInterface::read_input (const std::string & name)
+
+inlineprotected
+
+ +

Definition at line 743 of file ControllerInterface.hpp.

+ +
+
+ +

◆ read_input() [4/4]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + +
std::optional< bool > modulo_controllers::ControllerInterface::read_input (const std::string & name)
+
+inlineprotected
+
+ +

Definition at line 743 of file ControllerInterface.hpp.

+ +
+
+ +

◆ read_state_interfaces()

+ +
+
+ + + + + +
+ + + + + + + +
controller_interface::return_type modulo_controllers::ControllerInterface::read_state_interfaces ()
+
+protectedvirtual
+
+ +

Read the state interfaces.

+
Returns
OK or ERROR
+ +

Definition at line 258 of file ControllerInterface.cpp.

+ +
+
+ +

◆ set_command_interface()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::set_command_interface (const std::string & name,
const std::string & interface,
double value 
)
+
+protected
+
+ +

Set the value of a command interface by name.

+
Parameters
+ + + + +
nameThe name of the parent tag, e.g. the name of the sensor or gpio
interfaceThe name of the command interface
valueThe new value of the interface
+
+
+ +

Definition at line 287 of file ControllerInterface.cpp.

+ +
+
+ +

◆ set_parameter_value()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::set_parameter_value (const std::string & name,
const Tvalue 
)
+
+inlineprotected
+
+ +

Set the value of a parameter.

+

The parameter must have been previously declared. This method preserves the reference to the original Parameter instance

Template Parameters
+ + +
TThe type of the parameter
+
+
+
Parameters
+ + +
nameThe name of the parameter
+
+
+
Returns
The value of the parameter
+ +

Definition at line 637 of file ControllerInterface.hpp.

+ +
+
+ +

◆ set_predicate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::set_predicate (const std::string & predicate_name,
bool predicate_value 
)
+
+protected
+
+ +

Set the value of the predicate given as parameter, if the predicate is not found does not do anything.

+

Even though the predicates are published periodically, the new value of this predicate will be published once immediately after setting it.

Parameters
+ + + +
predicate_namethe name of the predicate to retrieve from the map of predicates
predicate_valuethe new value of the predicate
+
+
+ +

Definition at line 431 of file ControllerInterface.cpp.

+ +
+
+ +

◆ set_predicate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::set_predicate (const std::string & predicate_name,
const std::function< bool(void)> & predicate_function 
)
+
+protected
+
+ +

Set the value of the predicate given as parameter, if the predicate is not found does not do anything.

+

Even though the predicates are published periodically, the new value of this predicate will be published once immediately after setting it.

Parameters
+ + + +
predicate_namethe name of the predicate to retrieve from the map of predicates
predicate_functionthe function to call that returns the value of the predicate
+
+
+ +

Definition at line 435 of file ControllerInterface.cpp.

+ +
+
+ +

◆ set_qos()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_controllers::ControllerInterface::set_qos (const rclcpp::QoS & qos)
+
+protected
+
+ +

Set the Quality of Service for ROS publishers and subscribers.

+
Parameters
+ + +
qosThe desired Quality of Service
+
+
+ +

Definition at line 747 of file ControllerInterface.cpp.

+ +
+
+ +

◆ state_interface_configuration()

+ +
+
+ + + + + +
+ + + + + + + +
controller_interface::InterfaceConfiguration modulo_controllers::ControllerInterface::state_interface_configuration () const
+
+final
+
+ +

Configure the state interfaces.

+
Returns
The state interface configuration
+ +

Definition at line 138 of file ControllerInterface.cpp.

+ +
+
+ +

◆ trigger()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_controllers::ControllerInterface::trigger (const std::string & trigger_name)
+
+protected
+
+ +

Latch the trigger with the provided name.

+
Parameters
+ + +
trigger_nameThe name of the trigger
+
+
+ +

Definition at line 470 of file ControllerInterface.cpp.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
controller_interface::return_type modulo_controllers::ControllerInterface::update (const rclcpp::Time & time,
const rclcpp::Duration & period 
)
+
+final
+
+ +

Read the state interfaces, perform control evaluation and write the command interfaces.

+
Parameters
+ + + +
timeThe controller clock time
periodTime elapsed since the last control evaluation
+
+
+
Returns
OK or ERROR
+ +

Definition at line 218 of file ControllerInterface.cpp.

+ +
+
+ +

◆ write_command_interfaces()

+ +
+
+ + + + + +
+ + + + + + + + +
controller_interface::return_type modulo_controllers::ControllerInterface::write_command_interfaces (const rclcpp::Duration & period)
+
+protectedvirtual
+
+ +

Write the command interfaces.

+
Parameters
+ + +
periodTime elapsed since the last control evaluation
+
+
+
Returns
OK or ERROR
+ +

Definition at line 267 of file ControllerInterface.cpp.

+ +
+
+ +

◆ write_output() [1/6]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::write_output (const std::string & name,
const booldata 
)
+
+inline
+
+ +

Definition at line 897 of file ControllerInterface.hpp.

+ +
+
+ +

◆ write_output() [2/6]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::write_output (const std::string & name,
const doubledata 
)
+
+inline
+
+ +

Definition at line 902 of file ControllerInterface.hpp.

+ +
+
+ +

◆ write_output() [3/6]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::write_output (const std::string & name,
const intdata 
)
+
+inline
+
+ +

Definition at line 912 of file ControllerInterface.hpp.

+ +
+
+ +

◆ write_output() [4/6]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::write_output (const std::string & name,
const std::string & data 
)
+
+inline
+
+ +

Definition at line 917 of file ControllerInterface.hpp.

+ +
+
+ +

◆ write_output() [5/6]

+ +
+
+
+template<>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::write_output (const std::string & name,
const std::vector< double > & data 
)
+
+inline
+
+ +

Definition at line 907 of file ControllerInterface.hpp.

+ +
+
+ +

◆ write_output() [6/6]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void modulo_controllers::ControllerInterface::write_output (const std::string & name,
const Tdata 
)
+
+inlineprotected
+
+ +

Write an object to an output.

+

This uses the realtime publisher from add_output() to simplify publishing data in the realtime context of the control loop.

Template Parameters
+ + +
TThe type of the the object to publish
+
+
+
Parameters
+ + + +
nameThe name of the output
stateThe object to publish
+
+
+ +

Definition at line 831 of file ControllerInterface.hpp.

+ +
+
+

Member Data Documentation

+ +

◆ hardware_name_

+ +
+
+ + + + + +
+ + + + +
std::string modulo_controllers::ControllerInterface::hardware_name_
+
+protected
+
+ +

The hardware name provided by a parameter.

+ +

Definition at line 448 of file ControllerInterface.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface.png b/versions/v4.2.2/classmodulo__controllers_1_1_controller_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..423222b8b13f315c3f229d6c026b14f3ec2d158f GIT binary patch literal 1164 zcmeAS@N?(olHy`uVBq!ia0y~yU}OifJ2;qukaMYuVvVx_8w3CZSY!ECt>>i&*%TX z4AQ847aG1@X5!oE8E5C{J^jryb#K&r7WU|Z-1RZ{q`phvZqhq+>+}0#N9&#)-1PXX zi_0E9i;~G(#6wE+a{cXoTkk&6b@=3_@Yi=wD{hVNZ{E24oXP7=lM6eV{i|2rd;2%w z%#v5XZ|El$O}(GCMSj*g=C8+|AMXAAC}aP!&yUX4e!Nwqah}_{r>c4P(Szsmg>&R? zhh!e%pC-FrUFp%)$3P$Y?wWkqsKsiJtBYOa8<=Mm*oy=NKhCmj5ny6vcz=zVL8It~ zfelBKj1F6q0{b~nh5~T7Fnl1H`o+Pg*y6y-5_)yLxa9<9%N47tCLU(x+x>dyf11FeLtzW?!(H}-e(s^Z~x18bdeU{^WrPrn@*M=n}1ZXG{^8%o5c(n*V9(cv-W0| zp7s25tWHBo@2m6Wtp*Y8k55`2T6nAX?@xnkm;deAQ5=8ALjF%>V*B%pl@Hmn)2}VB zP28jRL}S@z<2B!(ef&|maMdr@s;P&Ks&-8Y4gKGCga3&G->Ow{K=R3gRj*8oITTsA z81AiQX9#$*A+bV$#WI42#gT8$WQGSWd_YAE4_ry5z6#1L%bay@&2bao%d=ZGk4fwY z+a{3Q6ZfQ`$vNXsm*KH_T+Q_!>dU$yb{+;WTP#rt2lZS#Ln5c04x++xp}haY5( z+9w3(#V7vTZ|f<3+_-wJ-1*a=s(WwEyS3wNK=B66ph;VIXqRp~mUVvJ%?&?qr_K() zWvO%U-P!Atey&T(J#%a+k5}RD^Z)itK2-mV+q9~!=;m+jnROo)US0a^!r9w#$rop3 z+R0qq9kDoWi|)SX|6=)`)t;^`lx~;1d}u;ie$-#P&idu@T^#1}?_RYp%TCQ(`{KVFWlks_lh}I#N~iH%Hu1e;|M5VcyJYU~ZNPGa!PC{x JWt~$(695=?F(&{3 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface-members.html b/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface-members.html new file mode 100644 index 000000000..8156b0436 --- /dev/null +++ b/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface-members.html @@ -0,0 +1,154 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_controllers::RobotControllerInterface Member List
+
+
+ +

This is the complete list of members for modulo_controllers::RobotControllerInterface, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
add_command_interface(const std::string &name, const std::string &interface)modulo_controllers::ControllerInterfaceprotected
add_input(const std::string &name, const std::string &topic_name="")modulo_controllers::ControllerInterfaceinlineprotected
add_input(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_input(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_input(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name="")modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_output(const std::string &name, const std::string &topic_name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)modulo_controllers::ControllerInterfaceprotected
add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)modulo_controllers::ControllerInterfaceinlineprotected
add_predicate(const std::string &predicate_name, bool predicate_value)modulo_controllers::ControllerInterfaceprotected
add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_controllers::ControllerInterfaceprotected
add_service(const std::string &service_name, const std::function< ControllerServiceResponse(void)> &callback)modulo_controllers::ControllerInterfaceprotected
add_service(const std::string &service_name, const std::function< ControllerServiceResponse(const std::string &string)> &callback)modulo_controllers::ControllerInterfaceprotected
add_state_interface(const std::string &name, const std::string &interface)modulo_controllers::ControllerInterfaceprotected
add_trigger(const std::string &trigger_name)modulo_controllers::ControllerInterfaceprotected
command_interface_configuration() const finalmodulo_controllers::ControllerInterface
compute_cartesian_state()modulo_controllers::RobotControllerInterfaceprotected
ControllerInterface(bool claim_all_state_interfaces=false)modulo_controllers::ControllerInterface
evaluate(const rclcpp::Time &time, const std::chrono::nanoseconds &period)=0modulo_controllers::ControllerInterfaceprotectedpure virtual
ft_sensor_name_modulo_controllers::RobotControllerInterfaceprotected
ft_sensor_reference_frame_modulo_controllers::RobotControllerInterfaceprotected
get_cartesian_state()modulo_controllers::RobotControllerInterfaceprotected
get_command_interface(const std::string &name, const std::string &interface) constmodulo_controllers::ControllerInterfaceprotected
get_ft_sensor()modulo_controllers::RobotControllerInterfaceprotected
get_joint_state()modulo_controllers::RobotControllerInterfaceprotected
get_parameter(const std::string &name) constmodulo_controllers::ControllerInterfaceprotected
get_parameter_value(const std::string &name) constmodulo_controllers::ControllerInterfaceinlineprotected
get_predicate(const std::string &predicate_name) constmodulo_controllers::ControllerInterfaceprotected
get_qos() constmodulo_controllers::ControllerInterfaceprotected
get_state_interface(const std::string &name, const std::string &interface) constmodulo_controllers::ControllerInterfaceprotected
get_state_interfaces(const std::string &name) constmodulo_controllers::ControllerInterfaceprotected
hardware_name_modulo_controllers::ControllerInterfaceprotected
is_active() constmodulo_controllers::ControllerInterfaceprotected
on_activate() overridemodulo_controllers::RobotControllerInterfacevirtual
modulo_controllers::ControllerInterface::on_activate(const rclcpp_lifecycle::State &previous_state) finalmodulo_controllers::ControllerInterface
on_configure() overridemodulo_controllers::RobotControllerInterfacevirtual
modulo_controllers::ControllerInterface::on_configure(const rclcpp_lifecycle::State &previous_state) finalmodulo_controllers::ControllerInterface
on_deactivate(const rclcpp_lifecycle::State &previous_state) finalmodulo_controllers::ControllerInterface
on_deactivate()modulo_controllers::ControllerInterfaceprotectedvirtual
on_init() overridemodulo_controllers::RobotControllerInterface
on_validate_parameter_callback(const std::shared_ptr< state_representation::ParameterInterface > &parameter) overridemodulo_controllers::RobotControllerInterfaceprotectedvirtual
read_input(const std::string &name)modulo_controllers::ControllerInterfaceinlineprotected
read_input(const std::string &name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
read_input(const std::string &name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
read_input(const std::string &name) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinlineprotected
robot_modulo_controllers::RobotControllerInterfaceprotected
RobotControllerInterface()modulo_controllers::RobotControllerInterface
RobotControllerInterface(bool robot_model_required, const std::string &control_type="")modulo_controllers::RobotControllerInterfaceexplicit
set_command_interface(const std::string &name, const std::string &interface, double value)modulo_controllers::ControllerInterfaceprotected
set_joint_command(const state_representation::JointState &joint_command)modulo_controllers::RobotControllerInterfaceprotected
set_parameter_value(const std::string &name, const T &value)modulo_controllers::ControllerInterfaceinlineprotected
set_predicate(const std::string &predicate_name, bool predicate_value)modulo_controllers::ControllerInterfaceprotected
set_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)modulo_controllers::ControllerInterfaceprotected
set_qos(const rclcpp::QoS &qos)modulo_controllers::ControllerInterfaceprotected
state_interface_configuration() const finalmodulo_controllers::ControllerInterface
task_space_frame_modulo_controllers::RobotControllerInterfaceprotected
trigger(const std::string &trigger_name)modulo_controllers::ControllerInterfaceprotected
update(const rclcpp::Time &time, const rclcpp::Duration &period) finalmodulo_controllers::ControllerInterface
write_output(const std::string &name, const T &data)modulo_controllers::ControllerInterfaceinlineprotected
write_output(const std::string &name, const bool &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const double &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const std::vector< double > &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const int &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
write_output(const std::string &name, const std::string &data) (defined in modulo_controllers::ControllerInterface)modulo_controllers::ControllerInterfaceinline
+ + + + diff --git a/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface.html b/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface.html new file mode 100644 index 000000000..1a062c090 --- /dev/null +++ b/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface.html @@ -0,0 +1,801 @@ + + + + + + + +Modulo: modulo_controllers::RobotControllerInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_controllers::RobotControllerInterface Class Reference
+
+
+ +

Base controller class that automatically associates joints with a JointState object. + More...

+ +

#include <RobotControllerInterface.hpp>

+
+Inheritance diagram for modulo_controllers::RobotControllerInterface:
+
+
+ + +modulo_controllers::ControllerInterface + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RobotControllerInterface ()
 Default constructor.
 
 RobotControllerInterface (bool robot_model_required, const std::string &control_type="")
 Constructor with robot model flag and a control type to determine the command interfaces to claim.
 
CallbackReturn on_init () override
 Declare parameters and register the on_set_parameters callback.
 
CallbackReturn on_configure () override
 Configure the controller.
 
CallbackReturn on_activate () override
 Activate the controller.
 
- Public Member Functions inherited from modulo_controllers::ControllerInterface
 ControllerInterface (bool claim_all_state_interfaces=false)
 Default constructor.
 
CallbackReturn on_init () override
 Declare parameters and register the on_set_parameters callback.
 
CallbackReturn on_configure (const rclcpp_lifecycle::State &previous_state) final
 Set class properties from parameters and add signals.
 
CallbackReturn on_activate (const rclcpp_lifecycle::State &previous_state) final
 Initialize internal data attributes from configured interfaces and wait for valid states from hardware.
 
CallbackReturn on_deactivate (const rclcpp_lifecycle::State &previous_state) final
 Deactivate the controller.
 
controller_interface::return_type update (const rclcpp::Time &time, const rclcpp::Duration &period) final
 Read the state interfaces, perform control evaluation and write the command interfaces.
 
controller_interface::InterfaceConfiguration state_interface_configuration () const final
 Configure the state interfaces.
 
controller_interface::InterfaceConfiguration command_interface_configuration () const final
 Configure the command interfaces.
 
template<>
void write_output (const std::string &name, const bool &data)
 
template<>
void write_output (const std::string &name, const double &data)
 
template<>
void write_output (const std::string &name, const std::vector< double > &data)
 
template<>
void write_output (const std::string &name, const int &data)
 
template<>
void write_output (const std::string &name, const std::string &data)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

const state_representation::JointState & get_joint_state ()
 Access the joint state object.
 
const state_representation::CartesianState & get_cartesian_state ()
 Access the Cartesian state object.
 
const state_representation::CartesianWrench & get_ft_sensor ()
 Access the Cartesian wrench object.
 
void compute_cartesian_state ()
 Compute the Cartesian state from forward kinematics of the current joint state.
 
void set_joint_command (const state_representation::JointState &joint_command)
 Set the joint command object.
 
bool on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > &parameter) override
 Parameter validation function to be redefined by derived controller classes.
 
- Protected Member Functions inherited from modulo_controllers::ControllerInterface
virtual CallbackReturn on_deactivate ()
 Deactivate the controller.
 
virtual controller_interface::return_type evaluate (const rclcpp::Time &time, const std::chrono::nanoseconds &period)=0
 The control logic callback.
 
void add_state_interface (const std::string &name, const std::string &interface)
 Add a state interface to the controller by name.
 
void add_command_interface (const std::string &name, const std::string &interface)
 Add a command interface to the controller by name.
 
std::unordered_map< std::string, doubleget_state_interfaces (const std::string &name) const
 Get a map containing the state interfaces by name of the parent tag.
 
double get_state_interface (const std::string &name, const std::string &interface) const
 Get the value of a state interface by name.
 
double get_command_interface (const std::string &name, const std::string &interface) const
 Get the value of a command interface by name.
 
void set_command_interface (const std::string &name, const std::string &interface, double value)
 Set the value of a command interface by name.
 
void add_parameter (const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)
 Add a parameter.
 
template<typename T >
void add_parameter (const std::string &name, const T &value, const std::string &description, bool read_only=false)
 Add a parameter.
 
std::shared_ptr< state_representation::ParameterInterface > get_parameter (const std::string &name) const
 Get a parameter by name.
 
template<typename T >
get_parameter_value (const std::string &name) const
 Get a parameter value by name.
 
template<typename T >
void set_parameter_value (const std::string &name, const T &value)
 Set the value of a parameter.
 
void add_predicate (const std::string &predicate_name, bool predicate_value)
 Add a predicate to the map of predicates.
 
void add_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Add a predicate to the map of predicates based on a function to periodically call.
 
bool get_predicate (const std::string &predicate_name) const
 Get the logical value of a predicate.
 
void set_predicate (const std::string &predicate_name, bool predicate_value)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void set_predicate (const std::string &predicate_name, const std::function< bool(void)> &predicate_function)
 Set the value of the predicate given as parameter, if the predicate is not found does not do anything.
 
void add_trigger (const std::string &trigger_name)
 Add a trigger to the controller.
 
void trigger (const std::string &trigger_name)
 Latch the trigger with the provided name.
 
template<typename T >
void add_input (const std::string &name, const std::string &topic_name="")
 Add an input to the controller.
 
template<typename T >
void add_output (const std::string &name, const std::string &topic_name="")
 Add an output to the controller.
 
template<typename T >
std::optional< Tread_input (const std::string &name)
 Read the most recent message of an input.
 
template<typename T >
void write_output (const std::string &name, const T &data)
 Write an object to an output.
 
void add_service (const std::string &service_name, const std::function< ControllerServiceResponse(void)> &callback)
 Add a service to trigger a callback function with no input arguments.
 
void add_service (const std::string &service_name, const std::function< ControllerServiceResponse(const std::string &string)> &callback)
 Add a service to trigger a callback function with a string payload.
 
rclcpp::QoS get_qos () const
 Getter of the Quality of Service attribute.
 
void set_qos (const rclcpp::QoS &qos)
 Set the Quality of Service for ROS publishers and subscribers.
 
bool is_active () const
 Check if the controller is currently in state active or not.
 
template<>
void add_input (const std::string &name, const std::string &topic_name)
 
template<>
void add_input (const std::string &name, const std::string &topic_name)
 
template<>
void add_input (const std::string &name, const std::string &topic_name)
 
template<>
void add_output (const std::string &name, const std::string &topic_name)
 
template<>
void add_output (const std::string &name, const std::string &topic_name)
 
template<>
void add_output (const std::string &name, const std::string &topic_name)
 
template<>
std::optional< boolread_input (const std::string &name)
 
template<>
std::optional< doubleread_input (const std::string &name)
 
template<>
std::optional< intread_input (const std::string &name)
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

std::shared_ptr< robot_model::Model > robot_
 Robot model object generated from URDF.
 
std::string task_space_frame_
 The frame in task space for forward kinematics calculations, if applicable.
 
std::string ft_sensor_name_
 The name of a force torque sensor in the hardware description.
 
std::string ft_sensor_reference_frame_
 The sensing reference frame.
 
- Protected Attributes inherited from modulo_controllers::ControllerInterface
std::string hardware_name_
 The hardware name provided by a parameter.
 
+

Detailed Description

+

Base controller class that automatically associates joints with a JointState object.

+

The robot controller interface extends the functionality of the modulo controller interface byautomatically claiming all state interfaces from joints and command interfaces of a given type (position, velocity, effort or acceleration) for those same joints. Joint state and command are associated with these interfaces and abstracted as JointState pointers for derived classes to access. A robot model, Cartesian state and force-torque sensor state are similarly available based on the URDF and state interfaces.

+ +

Definition at line 23 of file RobotControllerInterface.hpp.

+

Constructor & Destructor Documentation

+ +

◆ RobotControllerInterface() [1/2]

+ +
+
+ + + + + + + +
modulo_controllers::RobotControllerInterface::RobotControllerInterface ()
+
+ +

Default constructor.

+ +

Definition at line 17 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ RobotControllerInterface() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
modulo_controllers::RobotControllerInterface::RobotControllerInterface (bool robot_model_required,
const std::string & control_type = "" 
)
+
+explicit
+
+ +

Constructor with robot model flag and a control type to determine the command interfaces to claim.

+
Parameters
+ + + +
robot_model_requiredFlag to indicate if a robot model is required for the controller
control_typeOne of [position, velocity, effort or acceleration]
+
+
+ +

Definition at line 19 of file RobotControllerInterface.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ compute_cartesian_state()

+ +
+
+ + + + + +
+ + + + + + + +
void modulo_controllers::RobotControllerInterface::compute_cartesian_state ()
+
+protected
+
+ +

Compute the Cartesian state from forward kinematics of the current joint state.

+

This should only be used if a robot model has been generated, in which case the forward kinematics is calculated to get pose and twist for the desired target frame.

+ +

Definition at line 302 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ get_cartesian_state()

+ +
+
+ + + + + +
+ + + + + + + +
const CartesianState & modulo_controllers::RobotControllerInterface::get_cartesian_state ()
+
+protected
+
+ +

Access the Cartesian state object.

+

This internally calls compute_cartesian_state()

Returns
A const reference to the CartesianState object
+ +

Definition at line 292 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ get_ft_sensor()

+ +
+
+ + + + + +
+ + + + + + + +
const CartesianWrench & modulo_controllers::RobotControllerInterface::get_ft_sensor ()
+
+protected
+
+ +

Access the Cartesian wrench object.

+
Returns
A const reference to the CartesianWrench object
+ +

Definition at line 298 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ get_joint_state()

+ +
+
+ + + + + +
+ + + + + + + +
const JointState & modulo_controllers::RobotControllerInterface::get_joint_state ()
+
+protected
+
+ +

Access the joint state object.

+
Returns
A const reference to the JointState object
+ +

Definition at line 288 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ on_activate()

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::RobotControllerInterface::on_activate ()
+
+overridevirtual
+
+ +

Activate the controller.

+

This method should be overridden by derived classes.

Returns
SUCCESS or ERROR
+

Initialize a fore torque sensor if applicable

+ +

Reimplemented from modulo_controllers::ControllerInterface.

+ +

Definition at line 176 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ on_configure()

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::RobotControllerInterface::on_configure ()
+
+overridevirtual
+
+ +

Configure the controller.

+

This method should be overridden by derived classes.

Returns
SUCCESS or ERROR
+

Create a robot model from the robot description, get and sort the joints and construct the internal joint state object.

+ +

Reimplemented from modulo_controllers::ControllerInterface.

+ +

Definition at line 66 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ on_init()

+ +
+
+ + + + + +
+ + + + + + + +
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn modulo_controllers::RobotControllerInterface::on_init ()
+
+override
+
+ +

Declare parameters and register the on_set_parameters callback.

+
Returns
CallbackReturn status
+

Declare additional parameters.

+ +

Definition at line 32 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ on_validate_parameter_callback()

+ +
+
+ + + + + +
+ + + + + + + + +
bool modulo_controllers::RobotControllerInterface::on_validate_parameter_callback (const std::shared_ptr< state_representation::ParameterInterface > & parameter)
+
+overrideprotectedvirtual
+
+ +

Parameter validation function to be redefined by derived controller classes.

+

This method is automatically invoked whenever the ROS interface tried to modify a parameter. Validation and sanitization can be performed by reading or writing the value of the parameter through the ParameterInterface pointer, depending on the parameter name and desired controller behaviour. If the validation returns true, the updated parameter value (including any modifications) is applied. If the validation returns false, any changes to the parameter are discarded and the parameter value is not changed.

Parameters
+ + +
parameterA ParameterInterface pointer to a Parameter instance
+
+
+
Returns
The validation result
+ +

Reimplemented from modulo_controllers::ControllerInterface.

+ +

Definition at line 356 of file RobotControllerInterface.cpp.

+ +
+
+ +

◆ set_joint_command()

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_controllers::RobotControllerInterface::set_joint_command (const state_representation::JointState & joint_command)
+
+protected
+
+ +

Set the joint command object.

+
Parameters
+ + +
joint_commandA JointState command object
+
+
+ +

Definition at line 314 of file RobotControllerInterface.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ ft_sensor_name_

+ +
+
+ + + + + +
+ + + + +
std::string modulo_controllers::RobotControllerInterface::ft_sensor_name_
+
+protected
+
+ +

The name of a force torque sensor in the hardware description.

+ +

Definition at line 98 of file RobotControllerInterface.hpp.

+ +
+
+ +

◆ ft_sensor_reference_frame_

+ +
+
+ + + + + +
+ + + + +
std::string modulo_controllers::RobotControllerInterface::ft_sensor_reference_frame_
+
+protected
+
+ +

The sensing reference frame.

+ +

Definition at line 99 of file RobotControllerInterface.hpp.

+ +
+
+ +

◆ robot_

+ +
+
+ + + + + +
+ + + + +
std::shared_ptr<robot_model::Model> modulo_controllers::RobotControllerInterface::robot_
+
+protected
+
+ +

Robot model object generated from URDF.

+ +

Definition at line 95 of file RobotControllerInterface.hpp.

+ +
+
+ +

◆ task_space_frame_

+ +
+
+ + + + + +
+ + + + +
std::string modulo_controllers::RobotControllerInterface::task_space_frame_
+
+protected
+
+ +

The frame in task space for forward kinematics calculations, if applicable.

+ +

Definition at line 96 of file RobotControllerInterface.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface.png b/versions/v4.2.2/classmodulo__controllers_1_1_robot_controller_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..e586a93029c68837c9551f126eaaa8d919838b9e GIT binary patch literal 1158 zcmeAS@N?(olHy`uVBq!ia0y~yU}OifJ2;quPzm;-(Ua5^Q8-}TIHPk?bu7Z_RcW*LJ#@0{Vlw2zE%IN zw7JWbdVcY%cVS9hwyihM{0!QEKIG=^uX+U=SigVMdb;-Gj*Yr6l-BJ1^DgF1`aB)$ zc>mC=uUifqc-A}mKHv83P4S-1-8mL9I@R0nZI&te-D@FH{my5zp0(t1iyvFIzp}l@ zf7K^zU;kerweY{WX}=e~whGLzv$NTuf9_kho&LN#;`X!ozg8x;U(6`@ZgJyhZqwQ1 z*;@TSPHy`AH6(Pen+(v0p8iEQ+AcI~U-inm`!CG1Kwqy~6{p=U;Ix3@!TPVP3?h~) zJn<}!d}7Rw6PTZ?Fj!1vww%DsP(d=am$f}LQY`DBlG3M-O6)}n?1F;&MLP~Emeh52 z^n_Hd-M+jq@vpF8;V-k}6@hbel$2uk3bvoUW^w1af#bs#XARZM;ZgsWtN(mdA-?|Z z`jkia)N=(`x8@BaHw#>FC@6LW#ox1y3w8ZAZmCZ$W9v0h_ zuT(4Q;rY7hSZvWHe!J4*OiP~E-|jDr3OW3+s;?~2?B~HBdo7;yt#!L8!ajL%R%H5# z&F1UZS$F>5Ait_3`tOC(wLI4z))bv9$S8YUVRz>17JE<_^Pgj{kGt`(vMg@LL8}>G zE8`{BOIxmb`G)8B-b$PLxQ>pR33aCurEQ&0DJlJLyTK0(TqPxN!ctIrw6!Q=TIxdT z2Qo0`n4EeH>-L;zlsTbzOk(eehfM8@`uw=i4_|nP+e5-gdPA&i>N}_vG)@mwRlG6eaoTjc)aVoSyqH+qDjzZD0Ot z;p-^LHO=|wjrq>zNuO`uIqz-Ji`rKCD=*%6cm8~Ep4-~y{5fv(2=>i3@44;OtDn1m z+8w&s={3(&6{-2+hR1#!ob_}=uh?}7AoD#qX$vIxfP)=GgVXju=AeT)CJP!DnE^`- N22WQ%mvv4FO#n~(CEfr4 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair-members.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair-members.html new file mode 100644 index 000000000..5e2cdcfb6 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair-members.html @@ -0,0 +1,108 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::communication::MessagePair< MsgT, DataT > Member List
+
+
+ +

This is the complete list of members for modulo_core::communication::MessagePair< MsgT, DataT >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
get_data() constmodulo_core::communication::MessagePair< MsgT, DataT >inline
get_message_pair(bool validate_pointer=true)modulo_core::communication::MessagePairInterfaceinline
get_type() constmodulo_core::communication::MessagePairInterface
MessagePair(std::shared_ptr< DataT > data, std::shared_ptr< rclcpp::Clock > clock)modulo_core::communication::MessagePair< MsgT, DataT >
MessagePair(std::shared_ptr< bool > data, std::shared_ptr< rclcpp::Clock > clock) (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >
MessagePair(std::shared_ptr< double > data, std::shared_ptr< rclcpp::Clock > clock) (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >
MessagePair(std::shared_ptr< std::vector< double > > data, std::shared_ptr< rclcpp::Clock > clock) (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >
MessagePair(std::shared_ptr< int > data, std::shared_ptr< rclcpp::Clock > clock) (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >
MessagePair(std::shared_ptr< std::string > data, std::shared_ptr< rclcpp::Clock > clock) (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >
MessagePair(std::shared_ptr< state_representation::State > data, std::shared_ptr< rclcpp::Clock > clock) (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >
MessagePairInterface(MessageType type)modulo_core::communication::MessagePairInterfaceexplicit
MessagePairInterface(const MessagePairInterface &message_pair)=defaultmodulo_core::communication::MessagePairInterface
read(const MsgT &message)modulo_core::communication::MessagePairInterfaceinline
read_message(const MsgT &message)modulo_core::communication::MessagePair< MsgT, DataT >inline
read_message(const EncodedState &message) (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >inline
set_data(const std::shared_ptr< DataT > &data)modulo_core::communication::MessagePair< MsgT, DataT >inline
write()modulo_core::communication::MessagePairInterfaceinline
write_message() constmodulo_core::communication::MessagePair< MsgT, DataT >inline
write_message() const (defined in modulo_core::communication::MessagePair< MsgT, DataT >)modulo_core::communication::MessagePair< MsgT, DataT >inline
~MessagePairInterface()=defaultmodulo_core::communication::MessagePairInterfacevirtual
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair.html new file mode 100644 index 000000000..12f2bc22b --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair.html @@ -0,0 +1,608 @@ + + + + + + + +Modulo: modulo_core::communication::MessagePair< MsgT, DataT > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::communication::MessagePair< MsgT, DataT > Class Template Reference
+
+
+ +

The MessagePair stores a pointer to a variable and translates the value of this pointer back and forth between the corresponding ROS messages. + More...

+ +

#include <MessagePair.hpp>

+
+Inheritance diagram for modulo_core::communication::MessagePair< MsgT, DataT >:
+
+
+ + +modulo_core::communication::MessagePairInterface + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MessagePair (std::shared_ptr< DataT > data, std::shared_ptr< rclcpp::Clock > clock)
 Constructor of the MessagePair.
 
MsgT write_message () const
 Write the value of the data pointer to a ROS message.
 
void read_message (const MsgT &message)
 Read a ROS message and store the value in the data pointer.
 
std::shared_ptr< DataT > get_data () const
 Get the data pointer.
 
void set_data (const std::shared_ptr< DataT > &data)
 Set the data pointer.
 
EncodedState write_message () const
 
void read_message (const EncodedState &message)
 
 MessagePair (std::shared_ptr< bool > data, std::shared_ptr< rclcpp::Clock > clock)
 
 MessagePair (std::shared_ptr< double > data, std::shared_ptr< rclcpp::Clock > clock)
 
 MessagePair (std::shared_ptr< std::vector< double > > data, std::shared_ptr< rclcpp::Clock > clock)
 
 MessagePair (std::shared_ptr< int > data, std::shared_ptr< rclcpp::Clock > clock)
 
 MessagePair (std::shared_ptr< std::string > data, std::shared_ptr< rclcpp::Clock > clock)
 
 MessagePair (std::shared_ptr< state_representation::State > data, std::shared_ptr< rclcpp::Clock > clock)
 
- Public Member Functions inherited from modulo_core::communication::MessagePairInterface
 MessagePairInterface (MessageType type)
 Constructor with the message type.
 
+virtual ~MessagePairInterface ()=default
 Default virtual destructor.
 
MessagePairInterface (const MessagePairInterface &message_pair)=default
 Copy constructor from another MessagePairInterface.
 
template<typename MsgT , typename DataT >
std::shared_ptr< MessagePair< MsgT, DataT > > get_message_pair (bool validate_pointer=true)
 Get a pointer to a derived MessagePair instance from a MessagePairInterface pointer.
 
template<typename MsgT , typename DataT >
MsgT write ()
 Get the ROS message of a derived MessagePair instance through the MessagePairInterface pointer.
 
template<typename MsgT , typename DataT >
void read (const MsgT &message)
 Read a ROS message and set the data of the derived MessagePair instance through the MessagePairInterface pointer.
 
MessageType get_type () const
 Get the MessageType of the MessagePairInterface.
 
+

Detailed Description

+
template<typename MsgT, typename DataT>
+class modulo_core::communication::MessagePair< MsgT, DataT >

The MessagePair stores a pointer to a variable and translates the value of this pointer back and forth between the corresponding ROS messages.

+
Template Parameters
+ + + +
MsgTROS message type of the MessagePair
DataTData type corresponding to the ROS message type
+
+
+ +

Definition at line 20 of file MessagePair.hpp.

+

Constructor & Destructor Documentation

+ +

◆ MessagePair() [1/7]

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::MessagePair< MsgT, DataT >::MessagePair (std::shared_ptr< DataT > data,
std::shared_ptr< rclcpp::Clock > clock 
)
+
+ +

Constructor of the MessagePair.

+
Parameters
+ + + +
dataThe pointer referring to the data stored in the MessagePair
clockThe ROS clock for translating messages
+
+
+ +
+
+ +

◆ MessagePair() [2/7]

+ +
+
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::MessagePair< std_msgs::msg::Bool, bool >::MessagePair (std::shared_ptr< bool > data,
std::shared_ptr< rclcpp::Clock > clock 
)
+
+ +

Definition at line 8 of file MessagePair.cpp.

+ +
+
+ +

◆ MessagePair() [3/7]

+ +
+
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::MessagePair< std_msgs::msg::Float64, double >::MessagePair (std::shared_ptr< double > data,
std::shared_ptr< rclcpp::Clock > clock 
)
+
+ +

Definition at line 14 of file MessagePair.cpp.

+ +
+
+ +

◆ MessagePair() [4/7]

+ +
+
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::MessagePair< std_msgs::msg::Float64MultiArray, std::vector< double > >::MessagePair (std::shared_ptr< std::vector< double > > data,
std::shared_ptr< rclcpp::Clock > clock 
)
+
+ +

Definition at line 20 of file MessagePair.cpp.

+ +
+
+ +

◆ MessagePair() [5/7]

+ +
+
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::MessagePair< std_msgs::msg::Int32, int >::MessagePair (std::shared_ptr< int > data,
std::shared_ptr< rclcpp::Clock > clock 
)
+
+ +

Definition at line 26 of file MessagePair.cpp.

+ +
+
+ +

◆ MessagePair() [6/7]

+ +
+
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::MessagePair< std_msgs::msg::String, std::string >::MessagePair (std::shared_ptr< std::string > data,
std::shared_ptr< rclcpp::Clock > clock 
)
+
+ +

Definition at line 32 of file MessagePair.cpp.

+ +
+
+ +

◆ MessagePair() [7/7]

+ +
+
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::MessagePair< EncodedState, state_representation::State >::MessagePair (std::shared_ptr< state_representation::State > data,
std::shared_ptr< rclcpp::Clock > clock 
)
+
+ +

Definition at line 38 of file MessagePair.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ get_data()

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + +
+ + + + + + + +
std::shared_ptr< DataT > modulo_core::communication::MessagePair< MsgT, DataT >::get_data () const
+
+inline
+
+ +

Get the data pointer.

+ +

Definition at line 98 of file MessagePair.hpp.

+ +
+
+ +

◆ read_message() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void modulo_core::communication::MessagePair< EncodedState, state_representation::State >::read_message (const EncodedStatemessage)
+
+inline
+
+ +

Definition at line 90 of file MessagePair.hpp.

+ +
+
+ +

◆ read_message() [2/2]

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + +
+ + + + + + + + +
void modulo_core::communication::MessagePair< MsgT, DataT >::read_message (const MsgT & message)
+
+inline
+
+ +

Read a ROS message and store the value in the data pointer.

+
Parameters
+ + +
messageThe ROS message to read
+
+
+
Exceptions
+ + + +
modulo_core::exceptions::NullPointerExceptionif the data pointer is null
modulo_core::exceptions::MessageTranslationExceptionif the message could not be read
+
+
+ +

Definition at line 82 of file MessagePair.hpp.

+ +
+
+ +

◆ set_data()

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + +
+ + + + + + + + +
void modulo_core::communication::MessagePair< MsgT, DataT >::set_data (const std::shared_ptr< DataT > & data)
+
+inline
+
+ +

Set the data pointer.

+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the provided data pointer is null
+
+
+ +

Definition at line 103 of file MessagePair.hpp.

+ +
+
+ +

◆ write_message() [1/2]

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + +
+ + + + + + + +
MsgT modulo_core::communication::MessagePair< MsgT, DataT >::write_message () const
+
+inline
+
+ +

Write the value of the data pointer to a ROS message.

+
Returns
The value of the data pointer as a ROS message
+
Exceptions
+ + + +
modulo_core::exceptions::NullPointerExceptionif the data pointer is null
modulo_core::exceptions::MessageTranslationExceptionif the data could not be written to message
+
+
+ +

Definition at line 62 of file MessagePair.hpp.

+ +
+
+ +

◆ write_message() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
EncodedState modulo_core::communication::MessagePair< EncodedState, state_representation::State >::write_message () const
+
+inline
+
+ +

Definition at line 72 of file MessagePair.hpp.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /github/workspace/source/modulo_core/include/modulo_core/communication/MessagePair.hpp
  • +
+
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair.png b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair.png new file mode 100644 index 0000000000000000000000000000000000000000..238618100df0f658dab3d62e1639afcf23638ae9 GIT binary patch literal 1879 zcmb`IX;hO}8pmT*jueG5oeENEAhc3fP|8*`Q6UY;CQHx6w9j(jY52$%EAs`T&sn>?I% zersL9pYQAIgWtohJ--8MrfH!;VF>vC*K&XF<`@EDGVSMcBs^=Kv_^ViY1d|iRl@C2 zJw_fFJ!yxoZfIJRE`$u++~KzA)MvQ(wfy-s0ED>XGqT~CXvfZaJF zx})O}eNi*hJZh}qci8~F>cYrp1(^M>maDo(aN2wjf~253rnnWoIZnhp0Zg9Ncg~o4 zy7wLgcX%$WCjUCgj9|&}RSk;7HFJEoik)p5eZ>vwq{x&nZgCX*Ya_##I__8u3&0)_ z3*~Upn^l=9k`O4TKQ%;9ied2v{IaWiB;=PI1rnD+j*mtz)=md0o~7D8&>z~B#OS%c zK~X+Mz0}%Bcqp%8sK~z69Ew-ZoO*QeL)8(yYE>>RhA!|T1(djW1__Gz0xxjo0?kZd zy)o1P2)=4&qMu?;Aj9#za^+p74emcf?bh#Yq&Lt*Q3%b=to6Q#qrN=EH@%$3udjSQ z>U7vTle5#>j;b{Kz;9wB)d70%HyW^R8g4n?5PQV~ZrHwHWmgKzINkp$&#)9^wkYMX zG=qJ$FVN>xOG{HbsE7(1Vtrso6biPqqP zjH6J)@9N&j?uI2OD|PFV0gcc*S?TqENL4pppC20oiOaIxLurz z=>RfGx)$Zo){sP%%Ub8aU=svv=vg5@Ib^cD_`t4Hos3j3h__k@GY;BgeJ*nyDOSV9 zgIR%4%-<`2Pj#P2TS5N`*3Uog%cBnF1#4`J#;{P0pdg{J_jB2>hGWjX!wc5zMU7e> zrxZAJvtz*ybu1*t5eW1CXP!@aY!KyQKAhU^Ek&y_lI$_r6r#mUo;#6HMBS4$d(vn2 zr2IFpy{Hv@HVteU#k>lzq#3U}iW4nqtXc30C=1S|w4$lhY=?!DKA)B(|u%F z=U2al_$S(ud^=Fa&?;}EBTAbfr4s$;I0nE#_U;ZDw{1+GpVkKSl z&}*T`OmpLiKisI?SOyI7VTOoAm?4*Tk5N`7VS5FzRR22Ax*ts4^N)imJm-4pcAj;T zZTixJPRHngMpkfISC@h$-*`LkSg+7^~TS3Wp;51LB5j%*qR81cFDZ3Ho;bA26b*UJO?m&QQDTXofa7!OH`6o6Y7_)<6kg%(JSZ`G68vu z4?56pHS^kaZF^`|Z=h{F;e9Jr=Cn`%`gNCswQ_$|rbixIuZkua1+pA^`BiSdn{BE0 zh^1Hn%=Cr; literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface-members.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface-members.html new file mode 100644 index 000000000..acd7587a1 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface-members.html @@ -0,0 +1,95 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::communication::MessagePairInterface Member List
+
+ + + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface.html new file mode 100644 index 000000000..f017e7082 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface.html @@ -0,0 +1,338 @@ + + + + + + + +Modulo: modulo_core::communication::MessagePairInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::communication::MessagePairInterface Class Reference
+
+
+ +

Interface class to enable non-templated writing and reading ROS messages from derived MessagePair instances through dynamic down-casting. + More...

+ +

#include <MessagePairInterface.hpp>

+
+Inheritance diagram for modulo_core::communication::MessagePairInterface:
+
+
+ + +modulo_core::communication::MessagePair< MsgT, DataT > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MessagePairInterface (MessageType type)
 Constructor with the message type.
 
+virtual ~MessagePairInterface ()=default
 Default virtual destructor.
 
MessagePairInterface (const MessagePairInterface &message_pair)=default
 Copy constructor from another MessagePairInterface.
 
template<typename MsgT , typename DataT >
std::shared_ptr< MessagePair< MsgT, DataT > > get_message_pair (bool validate_pointer=true)
 Get a pointer to a derived MessagePair instance from a MessagePairInterface pointer.
 
template<typename MsgT , typename DataT >
MsgT write ()
 Get the ROS message of a derived MessagePair instance through the MessagePairInterface pointer.
 
template<typename MsgT , typename DataT >
void read (const MsgT &message)
 Read a ROS message and set the data of the derived MessagePair instance through the MessagePairInterface pointer.
 
MessageType get_type () const
 Get the MessageType of the MessagePairInterface.
 
+

Detailed Description

+

Interface class to enable non-templated writing and reading ROS messages from derived MessagePair instances through dynamic down-casting.

+ +

Definition at line 20 of file MessagePairInterface.hpp.

+

Constructor & Destructor Documentation

+ +

◆ MessagePairInterface()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::communication::MessagePairInterface::MessagePairInterface (MessageType type)
+
+explicit
+
+ +

Constructor with the message type.

+
Parameters
+ + +
typeThe message type of the message pair
+
+
+ +

Definition at line 5 of file MessagePairInterface.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ get_message_pair()

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + +
+ + + + + + + + +
std::shared_ptr< MessagePair< MsgT, DataT > > modulo_core::communication::MessagePairInterface::get_message_pair (bool validate_pointer = true)
+
+inline
+
+ +

Get a pointer to a derived MessagePair instance from a MessagePairInterface pointer.

+

If a MessagePairInterface pointer is used to address a derived MessagePair instance, this method will return a pointer to that derived instance through dynamic down-casting. The downcast will fail if the base MessagePairInterface object has no reference count (if the object is not owned by any pointer), or if the derived object is not a correctly typed instance of a MessagePair. By default, an InvalidPointerCastException is thrown when the downcast fails. If this validation is disabled by setting the validate_pointer flag to false, it will not throw an exception and instead return a null pointer.

Template Parameters
+ + + +
MsgTThe ROS message type of the MessagePair
DataTThe data type of the MessagePair
+
+
+
Parameters
+ + +
validate_pointerIf true, throw an exception when down-casting fails
+
+
+
Exceptions
+ + + +
modulo_core::exceptions::InvalidPointerExceptionif the base MessagePairInterface object has no reference count and validate_pointer is set to true
modulo_core::exceptions::InvalidPointerCastExceptionif the derived object from the dynamic down-casting is not a correctly typed instance of a MessagePair
+
+
+
Returns
A pointer to a derived MessagePair instance of the desired type, or a null pointer if down-casting failed and validate_pointer was set to false.
+ +

Definition at line 94 of file MessagePairInterface.hpp.

+ +
+
+ +

◆ get_type()

+ +
+
+ + + + + + + +
MessageType modulo_core::communication::MessagePairInterface::get_type () const
+
+ +

Get the MessageType of the MessagePairInterface.

+
See also
MessageType
+ +

Definition at line 7 of file MessagePairInterface.cpp.

+ +
+
+ +

◆ read()

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + +
+ + + + + + + + +
void modulo_core::communication::MessagePairInterface::read (const MsgT & message)
+
+inline
+
+ +

Read a ROS message and set the data of the derived MessagePair instance through the MessagePairInterface pointer.

+

This throws an InvalidPointerCastException if the MessagePairInterface does not point to a valid MessagePair instance or if the specified types does not match the type of the MessagePair instance.

Template Parameters
+ + + +
MsgTThe ROS message type of the MessagePair
DataTThe data type of the MessagePair
+
+
+
Parameters
+ + +
messageThe ROS message to read from
+
+
+ +

Definition at line 116 of file MessagePairInterface.hpp.

+ +
+
+ +

◆ write()

+ +
+
+
+template<typename MsgT , typename DataT >
+ + + + + +
+ + + + + + + +
MsgT modulo_core::communication::MessagePairInterface::write ()
+
+inline
+
+ +

Get the ROS message of a derived MessagePair instance through the MessagePairInterface pointer.

+

This throws an InvalidPointerCastException if the MessagePairInterface does not point to a valid MessagePair instance or if the specified types does not match the type of the MessagePair instance.

See also
MessagePairInterface::get_message_pair()
+
Template Parameters
+ + + +
MsgTThe ROS message type of the MessagePair
DataTThe data type of the MessagePair
+
+
+
Returns
The ROS message containing the data from the underlying MessagePair instance
+ +

Definition at line 111 of file MessagePairInterface.hpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface.png b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_message_pair_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..173df8fbff2c76b7f2554558da2b70467361dd67 GIT binary patch literal 1881 zcmb`IX;hO}8png%Km}@Qdq9v$MV10i0aG>=LM1UQf^1PBEHl#Lfv|`y!Nw#Wq_PJP zM1xX~AOT+rR1pFMcquBu0R$0@E#PZ~vLuEWAbZ|q-p-u)F!Ochez^C4@AKSqKm2~@ z+~Uv>qRB@VAE8hvlK_8wI0|KufaD^>?Z`~EH?Kq%%g~dN1ifC5#MSq*oQmOQPZx*t z<~PPyhlYlb^N4FNTacPjc6dkx3fcd2cx<~hgF@|E3c!CInP(ub7he!L8l%j<bP(v#4d39wU0E8$HFfbDX$W^P?0$oXd+uCb} zSJSD%<=vnJyC7GDV3)ctYw9bWb%E~lYP&Ru`AQPJgsssFcja!spF-9Sm@{vBD8Na9X%k|Kas|s4=Yo9E8qh+VZ z=*`%m&XPqpoJdjWNz>dBzr{i zkSvjONFPNHCBdhsJAjn^YiCGqtgTkSg7^pC#dU5?__grBV$@p?>8?stK_$arIFA1$_pF(He(lljJw)}+qJ!|ZCshoCcm5zM6KU|AcJ|$mlv!KVhw`PeKy;rw11Ao<_!tfxuOr}6hrkN>zr z+n`GOZ@=SXFVsve>R=!+k>^yc~ajYU7C}HA#M5OIB%MhYyppf5LWV*uZt{r&UNZg8$!e z))_$#whm1-hA76~43v?tA!0)rm;0&l9)fzO;bObT&h0x8VXOmq|7T(T+eYmXkUJ-q zm*(*n(zyvcJkV8myv^k;C+km$>d(-{2jP+;#9RXYUC$QT4#MLHZy(UYBWFh!<-4(t z5~kUew#IbtxCDJ?Hzr2+1!!%}lI3YE?1Io}_CvRUbdV*KY~AIwH#5fASdIHUPH~iv z1G9*&^ijo$g%ANVxW!^~QKXxv=IL7$@)M24M_w*>vbDcJCYjF@e-jXHs@fh1`HA41 z1ba0Z*fv9i;0snKcuI?>#sbEk@KnZL(T`QtC7VxGyu5h)2t}x97%gLT#LxNgM(UO~xj}D;3}?~f zY8B098Y`oo#?;zwH1y*Z6-Sf}x)5!j`lu0i + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::communication::PublisherHandler< PubT, MsgT > Member List
+
+
+ +

This is the complete list of members for modulo_core::communication::PublisherHandler< PubT, MsgT >, including all inherited members.

+ + + + + + + + + + + + + + + + + +
activate()modulo_core::communication::PublisherInterface
create_publisher_interface(const std::shared_ptr< MessagePairInterface > &message_pair)modulo_core::communication::PublisherHandler< PubT, MsgT >
deactivate()modulo_core::communication::PublisherInterface
get_handler(bool validate_pointer=true)modulo_core::communication::PublisherInterfaceinline
get_message_pair() constmodulo_core::communication::PublisherInterface
get_type() constmodulo_core::communication::PublisherInterface
on_activate()modulo_core::communication::PublisherHandler< PubT, MsgT >
on_deactivate()modulo_core::communication::PublisherHandler< PubT, MsgT >
publish(const MsgT &message) constmodulo_core::communication::PublisherHandler< PubT, MsgT >
modulo_core::communication::PublisherInterface::publish()modulo_core::communication::PublisherInterface
PublisherHandler(PublisherType type, std::shared_ptr< PubT > publisher)modulo_core::communication::PublisherHandler< PubT, MsgT >
PublisherInterface(PublisherType type, std::shared_ptr< MessagePairInterface > message_pair=nullptr)modulo_core::communication::PublisherInterfaceexplicit
PublisherInterface(const PublisherInterface &publisher)=defaultmodulo_core::communication::PublisherInterface
set_message_pair(const std::shared_ptr< MessagePairInterface > &message_pair)modulo_core::communication::PublisherInterface
~PublisherHandler() overridemodulo_core::communication::PublisherHandler< PubT, MsgT >
~PublisherInterface()=defaultmodulo_core::communication::PublisherInterfacevirtual
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler.html new file mode 100644 index 000000000..b3b969c24 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler.html @@ -0,0 +1,371 @@ + + + + + + + +Modulo: modulo_core::communication::PublisherHandler< PubT, MsgT > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::communication::PublisherHandler< PubT, MsgT > Class Template Reference
+
+
+ +

The PublisherHandler handles different types of ROS publishers to activate, deactivate and publish data with those publishers. + More...

+ +

#include <PublisherHandler.hpp>

+
+Inheritance diagram for modulo_core::communication::PublisherHandler< PubT, MsgT >:
+
+
+ + +modulo_core::communication::PublisherInterface + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PublisherHandler (PublisherType type, std::shared_ptr< PubT > publisher)
 Constructor with the publisher type and the pointer to the ROS publisher.
 
 ~PublisherHandler () override
 Destructor to explicitly reset the publisher pointer.
 
void on_activate ()
 Activate the ROS publisher if applicable.
 
void on_deactivate ()
 Deactivate the ROS publisher if applicable.
 
void publish (const MsgT &message) const
 Publish the ROS message through the ROS publisher.
 
std::shared_ptr< PublisherInterfacecreate_publisher_interface (const std::shared_ptr< MessagePairInterface > &message_pair)
 Create a PublisherInterface instance from the current PublisherHandler.
 
- Public Member Functions inherited from modulo_core::communication::PublisherInterface
 PublisherInterface (PublisherType type, std::shared_ptr< MessagePairInterface > message_pair=nullptr)
 Constructor with the message type and message pair.
 
PublisherInterface (const PublisherInterface &publisher)=default
 Copy constructor from another PublisherInterface.
 
+virtual ~PublisherInterface ()=default
 Default virtual destructor.
 
template<typename PubT , typename MsgT >
std::shared_ptr< PublisherHandler< PubT, MsgT > > get_handler (bool validate_pointer=true)
 Get a pointer to a derived PublisherHandler instance from a PublisherInterface pointer.
 
void activate ()
 Activate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
 
void deactivate ()
 Deactivate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
 
void publish ()
 Publish the data stored in the message pair through the ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
 
std::shared_ptr< MessagePairInterfaceget_message_pair () const
 Get the pointer to the message pair of the PublisherInterface.
 
void set_message_pair (const std::shared_ptr< MessagePairInterface > &message_pair)
 Set the pointer to the message pair of the PublisherInterface.
 
PublisherType get_type () const
 Get the type of the publisher interface.
 
+

Detailed Description

+
template<typename PubT, typename MsgT>
+class modulo_core::communication::PublisherHandler< PubT, MsgT >

The PublisherHandler handles different types of ROS publishers to activate, deactivate and publish data with those publishers.

+
Template Parameters
+ + + +
PubTThe ROS publisher type
MsgTThe ROS message type of the ROS publisher
+
+
+ +

Definition at line 18 of file PublisherHandler.hpp.

+

Constructor & Destructor Documentation

+ +

◆ PublisherHandler()

+ +
+
+
+template<typename PubT , typename MsgT >
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::PublisherHandler< PubT, MsgT >::PublisherHandler (PublisherType type,
std::shared_ptr< PubT > publisher 
)
+
+ +

Constructor with the publisher type and the pointer to the ROS publisher.

+
Parameters
+ + + +
typeThe publisher type
publisherThe pointer to the ROS publisher
+
+
+ +

Definition at line 63 of file PublisherHandler.hpp.

+ +
+
+ +

◆ ~PublisherHandler()

+ +
+
+
+template<typename PubT , typename MsgT >
+ + + + + +
+ + + + + + + +
modulo_core::communication::PublisherHandler< PubT, MsgT >::~PublisherHandler ()
+
+override
+
+ +

Destructor to explicitly reset the publisher pointer.

+ +

Definition at line 67 of file PublisherHandler.hpp.

+ +
+
+

Member Function Documentation

+ +

◆ create_publisher_interface()

+ +
+
+
+template<typename PubT , typename MsgT >
+ + + + + + + + +
std::shared_ptr< PublisherInterface > modulo_core::communication::PublisherHandler< PubT, MsgT >::create_publisher_interface (const std::shared_ptr< MessagePairInterface > & message_pair)
+
+ +

Create a PublisherInterface instance from the current PublisherHandler.

+
Parameters
+ + +
message_pairThe message pair of the PublisherInterface
+
+
+ +

Definition at line 116 of file PublisherHandler.hpp.

+ +
+
+ +

◆ on_activate()

+ +
+
+
+template<typename PubT , typename MsgT >
+ + + + + + + +
void modulo_core::communication::PublisherHandler< PubT, MsgT >::on_activate ()
+
+ +

Activate the ROS publisher if applicable.

+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the publisher pointer is null
+
+
+ +

Definition at line 72 of file PublisherHandler.hpp.

+ +
+
+ +

◆ on_deactivate()

+ +
+
+
+template<typename PubT , typename MsgT >
+ + + + + + + +
void modulo_core::communication::PublisherHandler< PubT, MsgT >::on_deactivate ()
+
+ +

Deactivate the ROS publisher if applicable.

+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the publisher pointer is null
+
+
+ +

Definition at line 88 of file PublisherHandler.hpp.

+ +
+
+ +

◆ publish()

+ +
+
+
+template<typename PubT , typename MsgT >
+ + + + + + + + +
void modulo_core::communication::PublisherHandler< PubT, MsgT >::publish (const MsgT & message) const
+
+ +

Publish the ROS message through the ROS publisher.

+
Parameters
+ + +
messageThe ROS message to publish
+
+
+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the publisher pointer is null
+
+
+ +

Definition at line 104 of file PublisherHandler.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler.png b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_handler.png new file mode 100644 index 0000000000000000000000000000000000000000..42d50947f5036d0617919301890819e5dbf6f98d GIT binary patch literal 1820 zcmcJQYfzI{8i1orp;ayh+G4pB7YURKmF=n!u0?|;ra?slYJ^a9sR9X?5JDgzg)WdH zL!maTK#IyO1~n>>5Fik=i?$?R5D1@3NLZJ_4-#$~iG&ccUpuouc4q(W?D=udd(QjL zoO#dl%pCT~=wo&}Ty`K32s<1W6N5l(qrq{-yH@b*dDH~Ji|ffRW1}n<3mncbuF zwFd?GX6~+&%}b?H`22M3I1kRfmlG3x8UgQrAA#E&CJ+egb{r-$HgDS!_gQvnuRQ`x zZX2^)d4(%Z+UdFjeVbZvFF3tE>8#Ls?_kVvUz~62w~?oagjixJ7UJ_Cw9tskGh)Rxj?$*6_Pt7yX*k2XnV(-Xv$)xJy?Y~;$dFMI zgu*B8kcXcQqcNiCO+WqP1GI)f=`8SY*Z^Ktd6Yhf6dRIX`deR<)l%vnB1KTAKX{{z z`mB_l{*CT1*-mH6+H4?M%JjF+2@K_fe@r*{vc@+$FXxP%kF#_!to;2+B@+Fu-oY}b z1)mw&P}tACT_nQ_dd0@|OX)thenEKd{rbYJ%mu@V(HW}8-_vOJht-(jALd=H%dsK# zd@X8ulA|#`eAsqvQFu4v>GbC=KH(#-09X>hlV13dqIq0C>pG=e`}z%C_ZAo((yTcY z_JkAf##^ZNLURbv$1l?MuM~c69I71U@*_GGm8lZ@)RFG|@Z6%43IWJD6_)YxbgW4i zM_~&fovG*J6gjE4!&$#D6IT_TpLqz3F)bf9_$+^dO!3W0^t5Dny{_yL}#NTOR zwyg#lw__2Hun^)VtFSev7(0gk;uD8CU-v!V=h*KexY$&nxK=;c0^5>t5CR5XdTDD0#Tt`~=E} z))Y%@|I{B>ZL?kPQ!-+djU!;UnvqvDQIPgMLxVc=&xX~MRMI~vYOs{nv- z=n?&+A!Q4ka*8jXHR?ulD?bJ-I1$P+b63g0C7`s#Z!09G<2*oBIh&DKTB^& zD&E95ZLvNb_{k%zxhTZVzlA{ZS$)zdYFDX%Ixiofe1E;bUpE|{A2e|DqwLJ1l@;e- zT5=-$=v_$TO0DU)M~0hl#0NVg*(h#h1x!2&10#o7gf^ZS zKY$uPKsbfiBn%)NivxaBgiMANsf8W*^$7F0&AVP)E6fkW|0hZQZJ_ZnfcHiDwq6VP zBqfD?{p_xVX_+4sBX4skIe+dp`y_&@j+Q$ z=-7)(diju-f!*6fo|~4*vO+b}V}v_Z7M|Y9ZeT=9ZvkcLikJQA&4TKeuf!UrnT8he z=;suB-Y%*P-bA^Wm7ppthmJ`^*36v=C8&Y-GTP#}rmJ$72D)vd=^4-{Vh_^8AsPo# zf@HN*#@f=6!UDp8#~knRJ<$gp;Ms=0xwhQV4hJe@F|P{{t4ej|7cD175S{@Hc9D<;1SOX_dbxq0qg-EdR!VQ(PwT=x1oa7iD(k$-XdXke$orFznPabNmg!3YFH zL8YXCXd+`e4>Yo#_t<5m7%acAmDMmayi692R&)Lf$67!xOJ)Y`Z@t!XE#}s`&F##0 V(h2=nN$@|0z(qx4?j24l`4`i9uDJjJ literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface-members.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface-members.html new file mode 100644 index 000000000..5f89a703a --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface-members.html @@ -0,0 +1,98 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::communication::PublisherInterface Member List
+
+ + + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface.html new file mode 100644 index 000000000..9dde196aa --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface.html @@ -0,0 +1,404 @@ + + + + + + + +Modulo: modulo_core::communication::PublisherInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::communication::PublisherInterface Class Reference
+
+
+ +

Interface class to enable non-templated activating/deactivating/publishing of ROS publishers from derived PublisherHandler instances through dynamic down-casting. + More...

+ +

#include <PublisherInterface.hpp>

+
+Inheritance diagram for modulo_core::communication::PublisherInterface:
+
+
+ + +modulo_core::communication::PublisherHandler< PubT, MsgT > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PublisherInterface (PublisherType type, std::shared_ptr< MessagePairInterface > message_pair=nullptr)
 Constructor with the message type and message pair.
 
PublisherInterface (const PublisherInterface &publisher)=default
 Copy constructor from another PublisherInterface.
 
+virtual ~PublisherInterface ()=default
 Default virtual destructor.
 
template<typename PubT , typename MsgT >
std::shared_ptr< PublisherHandler< PubT, MsgT > > get_handler (bool validate_pointer=true)
 Get a pointer to a derived PublisherHandler instance from a PublisherInterface pointer.
 
void activate ()
 Activate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
 
void deactivate ()
 Deactivate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
 
void publish ()
 Publish the data stored in the message pair through the ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.
 
std::shared_ptr< MessagePairInterfaceget_message_pair () const
 Get the pointer to the message pair of the PublisherInterface.
 
void set_message_pair (const std::shared_ptr< MessagePairInterface > &message_pair)
 Set the pointer to the message pair of the PublisherInterface.
 
PublisherType get_type () const
 Get the type of the publisher interface.
 
+

Detailed Description

+

Interface class to enable non-templated activating/deactivating/publishing of ROS publishers from derived PublisherHandler instances through dynamic down-casting.

+ +

Definition at line 21 of file PublisherInterface.hpp.

+

Constructor & Destructor Documentation

+ +

◆ PublisherInterface()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
modulo_core::communication::PublisherInterface::PublisherInterface (PublisherType type,
std::shared_ptr< MessagePairInterfacemessage_pair = nullptr 
)
+
+explicit
+
+ +

Constructor with the message type and message pair.

+
Parameters
+ + + +
typeThe type of the publisher interface
message_pairThe message pair with the data to be published
+
+
+ +

Definition at line 18 of file PublisherInterface.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ activate()

+ +
+
+ + + + + + + +
void modulo_core::communication::PublisherInterface::activate ()
+
+ +

Activate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.

+

This throws an InvalidPointerCastException if the PublisherInterface does not point to a valid PublisherHandler instance or if the type of the message pair does not match the type of the PublisherHandler instance.

See also
PublisherInterface::get_handler
+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the message pair pointer is null
+
+
+ +

Definition at line 21 of file PublisherInterface.cpp.

+ +
+
+ +

◆ deactivate()

+ +
+
+ + + + + + + +
void modulo_core::communication::PublisherInterface::deactivate ()
+
+ +

Deactivate ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.

+

This throws an InvalidPointerCastException if the PublisherInterface does not point to a valid PublisherHandler instance or if the type of the message pair does not match the type of the PublisherHandler instance.

See also
PublisherInterface::get_handler
+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the message pair pointer is null
+
+
+ +

Definition at line 57 of file PublisherInterface.cpp.

+ +
+
+ +

◆ get_handler()

+ +
+
+
+template<typename PubT , typename MsgT >
+ + + + + +
+ + + + + + + + +
std::shared_ptr< PublisherHandler< PubT, MsgT > > modulo_core::communication::PublisherInterface::get_handler (bool validate_pointer = true)
+
+inline
+
+ +

Get a pointer to a derived PublisherHandler instance from a PublisherInterface pointer.

+

If a PublisherInterface pointer is used to address a derived PublisherHandler instance, this method will return a pointer to that derived instance through dynamic down-casting. The downcast will fail if the base PublisherInterface object has no reference count (if the object is not owned by any pointer), or if the derived object is not a correctly typed instance of a PublisherHandler. By default, an InvalidPointerCastException is thrown when the downcast fails. If this validation is disabled by setting the validate_pointer flag to false, it will not throw an exception and instead return a null pointer.

Template Parameters
+ + + +
PubTThe ROS publisher type
MsgTThe ROS message type
+
+
+
Exceptions
+ + + +
modulo_core::exceptions::InvalidPointerExceptionif the base PublisherInterface object has no reference count and validate_pointer is set to true
modulo_core::exceptions::InvalidPointerCastExceptionif the derived object from the dynamic down-casting is not a correctly typed instance of a PublisherHandler
+
+
+
Parameters
+ + +
validate_pointerIf true, throw an exception when down-casting fails
+
+
+
Returns
A pointer to a derived PublisherHandler instance of the desired type, or a null pointer if down-casting failed and validate_pointer was set to false.
+ +

Definition at line 129 of file PublisherInterface.hpp.

+ +
+
+ +

◆ get_message_pair()

+ +
+
+ + + + + + + +
std::shared_ptr< MessagePairInterface > modulo_core::communication::PublisherInterface::get_message_pair () const
+
+ +

Get the pointer to the message pair of the PublisherInterface.

+ +

Definition at line 139 of file PublisherInterface.cpp.

+ +
+
+ +

◆ get_type()

+ +
+
+ + + + + + + +
PublisherType modulo_core::communication::PublisherInterface::get_type () const
+
+ +

Get the type of the publisher interface.

+
See also
PublisherType
+ +

Definition at line 150 of file PublisherInterface.cpp.

+ +
+
+ +

◆ publish()

+ +
+
+ + + + + + + +
void modulo_core::communication::PublisherInterface::publish ()
+
+ +

Publish the data stored in the message pair through the ROS publisher of a derived PublisherHandler instance through the PublisherInterface pointer.

+

This throws an InvalidPointerCastException if the PublisherInterface does not point to a valid PublisherHandler instance or if the type of the message pair does not match the type of the PublisherHandler instance.

See also
PublisherInterface::get_handler
+
Exceptions
+ + +
modulo_core::exceptions::CoreExceptionif the publishing failed for some reason (translation, null pointer, pointer cast, ...)
+
+
+ +

Definition at line 93 of file PublisherInterface.cpp.

+ +
+
+ +

◆ set_message_pair()

+ +
+
+ + + + + + + + +
void modulo_core::communication::PublisherInterface::set_message_pair (const std::shared_ptr< MessagePairInterface > & message_pair)
+
+ +

Set the pointer to the message pair of the PublisherInterface.

+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the provided message pair pointer is null
+
+
+ +

Definition at line 143 of file PublisherInterface.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface.png b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_publisher_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..c4195016ea2933ccb601e4ddeee6148908fd9d3c GIT binary patch literal 1825 zcmcJQX;hL~7=S-BLz~>PDaSHBIW5j)xH~#7Em(@`+UE$!;+ z(yWJEc;2L`>7@k+gaDfPr{S`sY5)M1wfG`-gdW$LxH3v7lMHrmPAM*9s!eLbDMmZW zMEzXyQ_BUUNl_{Mp`!qBlS$Y!<_0#W_1Zvk{S6w5V9j6C{nV!9ORUA?yt59 zt z!IBB#)^ZDNp(H8$s5_RbB1Q>p>PX31c4&RlTa1Tpf&}s2SvN%r)TUPGFs3eVT9H!WKKnH*Iw|-Gi>3sCk*=*Cu)3t2= zDch#51EmyEclQVFiAlxJ3O896PHKr;s5P8zB++Cd&~ic)Hxecb0TneURY>*!K;wd4n{G#Yh8k@a&)rtXBf0kSE0bJ>c+EozEgVF5x85E|_7-(n_FIntQxt?%hG2J0bd9O!&_7;oH9^uW}xj3Y{ z#bDRJU6M30WvdpjM&e`Ws7Ofqfgxuu-nlGj3D*s@D*t`rxR|6st>>qBjn0QC!>zc? z)awEl&_A(i6wIbYZ91-O4_14CsX^za*P*k=r|Wy$U1Vb3d`=lrkMSbBh2Cbz=lwBA z8F=s#7K_Q)g9YdNK|?}SJ*k!^^Oj4-p;4o{uJ4QG{k)<#t$XdpiLh5Kv+0 z<%o_N?D2G4=k;u>>uq8mn<~w%kif*fE!bV)W}UGm&_avJuD1AqJfVR7?wV&WlYDx! z3?CY`tR}~foSasNtANkeM!p@Q3{9^YfHHGCJtIWur0vR9{$8@M$YKaZyO4}NSj z^Q{+p;TmgDKOon78}%66Z!#kRld%h{IVV2?p`+gGF`gAa@?@z)o0@9R?PJH6vA+OW zY|N)uU%0XhHwLrRF=|LKFe25|oHj6O{%EjijWubE^1Xo(S(CqNz%icw&u7XMgoZ;3 zq+MY_9RhKxlP4j-ku*3jO%c#2=9P>`PMb1!1PD(z0=2>Y3~T^9Z?h4>T8@6{Eh)?K`YLe&{uaWsXIK z)jSouO>TD2JuEu>+B(f(wekT|k77T&zRJT{X=*!5zG8^P!@pHBFLpL{7cJr3HR-(>k z>zL;bX6qb2Ghht$$?_ppEVE!H`H`w_dvq+T=FPFm_CDVJztEL@f`u^p2^4WZx>-UT zvY(qN@<}FIb#&wJBzq(IyKBu`?3-+qnIjbE*paE301pxMJqfUkD|g1R&I)IVO?u>Jr5 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler-members.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler-members.html new file mode 100644 index 000000000..97a2626c1 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler-members.html @@ -0,0 +1,114 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::communication::SubscriptionHandler< MsgT > Member List
+
+
+ +

This is the complete list of members for modulo_core::communication::SubscriptionHandler< MsgT >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
create_subscription_interface(const std::shared_ptr< rclcpp::Subscription< MsgT > > &subscription)modulo_core::communication::SubscriptionHandler< MsgT >
get_callback()modulo_core::communication::SubscriptionHandler< MsgT >
get_callback(const std::function< void()> &user_callback)modulo_core::communication::SubscriptionHandler< MsgT >
get_callback() (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
get_callback() (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
get_callback() (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
get_callback() (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
get_callback() (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
get_callback() (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
get_handler(bool validate_pointer=true)modulo_core::communication::SubscriptionInterfaceinline
get_message_pair() constmodulo_core::communication::SubscriptionInterface
get_subscription() constmodulo_core::communication::SubscriptionHandler< MsgT >
set_message_pair(const std::shared_ptr< MessagePairInterface > &message_pair)modulo_core::communication::SubscriptionInterface
set_subscription(const std::shared_ptr< rclcpp::Subscription< MsgT > > &subscription)modulo_core::communication::SubscriptionHandler< MsgT >
set_user_callback(const std::function< void()> &user_callback)modulo_core::communication::SubscriptionHandler< MsgT >
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair=nullptr)modulo_core::communication::SubscriptionHandler< MsgT >explicit
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair) (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair) (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair) (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair) (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair) (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
SubscriptionHandler(std::shared_ptr< MessagePairInterface > message_pair) (defined in modulo_core::communication::SubscriptionHandler< MsgT >)modulo_core::communication::SubscriptionHandler< MsgT >
SubscriptionInterface(std::shared_ptr< MessagePairInterface > message_pair=nullptr)modulo_core::communication::SubscriptionInterfaceexplicit
SubscriptionInterface(const SubscriptionInterface &subscription)=defaultmodulo_core::communication::SubscriptionInterface
~SubscriptionHandler() overridemodulo_core::communication::SubscriptionHandler< MsgT >
~SubscriptionInterface()=defaultmodulo_core::communication::SubscriptionInterfacevirtual
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler.html new file mode 100644 index 000000000..85e32343c --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler.html @@ -0,0 +1,645 @@ + + + + + + + +Modulo: modulo_core::communication::SubscriptionHandler< MsgT > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::communication::SubscriptionHandler< MsgT > Class Template Reference
+
+
+ +

The SubscriptionHandler handles different types of ROS subscriptions to receive data from those subscriptions. + More...

+ +

#include <SubscriptionHandler.hpp>

+
+Inheritance diagram for modulo_core::communication::SubscriptionHandler< MsgT >:
+
+
+ + +modulo_core::communication::SubscriptionInterface + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SubscriptionHandler (std::shared_ptr< MessagePairInterface > message_pair=nullptr)
 Constructor with the message pair.
 
 ~SubscriptionHandler () override
 Destructor to explicitly reset the subscription pointer.
 
std::shared_ptr< rclcpp::Subscription< MsgT > > get_subscription () const
 Getter of the ROS subscription.
 
void set_subscription (const std::shared_ptr< rclcpp::Subscription< MsgT > > &subscription)
 Setter of the ROS subscription.
 
void set_user_callback (const std::function< void()> &user_callback)
 Setter of a user callback function to be executed after the subscription callback.
 
+std::function< void(const std::shared_ptr< MsgT >)> get_callback ()
 Get a callback function that will be associated with the ROS subscription to receive and translate messages.
 
std::function< void(const std::shared_ptr< MsgT >)> get_callback (const std::function< void()> &user_callback)
 Get a callback function that will be associated with the ROS subscription to receive and translate messages.
 
std::shared_ptr< SubscriptionInterfacecreate_subscription_interface (const std::shared_ptr< rclcpp::Subscription< MsgT > > &subscription)
 Create a SubscriptionInterface pointer through an instance of a SubscriptionHandler by providing a ROS subscription.
 
 SubscriptionHandler (std::shared_ptr< MessagePairInterface > message_pair)
 
 SubscriptionHandler (std::shared_ptr< MessagePairInterface > message_pair)
 
 SubscriptionHandler (std::shared_ptr< MessagePairInterface > message_pair)
 
 SubscriptionHandler (std::shared_ptr< MessagePairInterface > message_pair)
 
 SubscriptionHandler (std::shared_ptr< MessagePairInterface > message_pair)
 
 SubscriptionHandler (std::shared_ptr< MessagePairInterface > message_pair)
 
std::function< void(const std::shared_ptr< std_msgs::msg::Bool >)> get_callback ()
 
std::function< void(const std::shared_ptr< std_msgs::msg::Float64 >)> get_callback ()
 
std::function< void(const std::shared_ptr< std_msgs::msg::Float64MultiArray >)> get_callback ()
 
std::function< void(const std::shared_ptr< std_msgs::msg::Int32 >)> get_callback ()
 
std::function< void(const std::shared_ptr< std_msgs::msg::String >)> get_callback ()
 
std::function< void(const std::shared_ptr< EncodedState >)> get_callback ()
 
- Public Member Functions inherited from modulo_core::communication::SubscriptionInterface
 SubscriptionInterface (std::shared_ptr< MessagePairInterface > message_pair=nullptr)
 Constructor with the message pair.
 
SubscriptionInterface (const SubscriptionInterface &subscription)=default
 Copy constructor from another SubscriptionInterface.
 
+virtual ~SubscriptionInterface ()=default
 Default virtual destructor.
 
template<typename MsgT >
std::shared_ptr< SubscriptionHandler< MsgT > > get_handler (bool validate_pointer=true)
 Get a pointer to a derived SubscriptionHandler instance from a SubscriptionInterface pointer.
 
std::shared_ptr< MessagePairInterfaceget_message_pair () const
 Get the pointer to the message pair of the SubscriptionInterface.
 
void set_message_pair (const std::shared_ptr< MessagePairInterface > &message_pair)
 Set the pointer to the message pair of the SubscriptionInterface.
 
+

Detailed Description

+
template<typename MsgT>
+class modulo_core::communication::SubscriptionHandler< MsgT >

The SubscriptionHandler handles different types of ROS subscriptions to receive data from those subscriptions.

+
Template Parameters
+ + +
MsgTThe ROS message type of the ROS subscription
+
+
+ +

Definition at line 14 of file SubscriptionHandler.hpp.

+

Constructor & Destructor Documentation

+ +

◆ SubscriptionHandler() [1/7]

+ +
+
+
+template<typename MsgT >
+ + + + + +
+ + + + + + + + +
modulo_core::communication::SubscriptionHandler< MsgT >::SubscriptionHandler (std::shared_ptr< MessagePairInterfacemessage_pair = nullptr)
+
+explicit
+
+ +

Constructor with the message pair.

+
Parameters
+ + +
message_pairThe pointer to the message pair with the data that should be updated through the subscription
+
+
+ +
+
+ +

◆ ~SubscriptionHandler()

+ +
+
+
+template<typename MsgT >
+ + + + + +
+ + + + + + + +
modulo_core::communication::SubscriptionHandler< MsgT >::~SubscriptionHandler ()
+
+override
+
+ +

Destructor to explicitly reset the subscription pointer.

+ +

Definition at line 80 of file SubscriptionHandler.hpp.

+ +
+
+ +

◆ SubscriptionHandler() [2/7]

+ +
+
+ + + + + + + + +
modulo_core::communication::SubscriptionHandler< std_msgs::msg::Bool >::SubscriptionHandler (std::shared_ptr< MessagePairInterfacemessage_pair)
+
+ +

Definition at line 8 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ SubscriptionHandler() [3/7]

+ +
+
+ + + + + + + + +
modulo_core::communication::SubscriptionHandler< std_msgs::msg::Float64 >::SubscriptionHandler (std::shared_ptr< MessagePairInterfacemessage_pair)
+
+ +

Definition at line 12 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ SubscriptionHandler() [4/7]

+ +
+
+ + + + + + + + +
modulo_core::communication::SubscriptionHandler< std_msgs::msg::Float64MultiArray >::SubscriptionHandler (std::shared_ptr< MessagePairInterfacemessage_pair)
+
+ +

Definition at line 15 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ SubscriptionHandler() [5/7]

+ +
+
+ + + + + + + + +
modulo_core::communication::SubscriptionHandler< std_msgs::msg::Int32 >::SubscriptionHandler (std::shared_ptr< MessagePairInterfacemessage_pair)
+
+ +

Definition at line 21 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ SubscriptionHandler() [6/7]

+ +
+
+ + + + + + + + +
modulo_core::communication::SubscriptionHandler< std_msgs::msg::String >::SubscriptionHandler (std::shared_ptr< MessagePairInterfacemessage_pair)
+
+ +

Definition at line 25 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ SubscriptionHandler() [7/7]

+ +
+
+ + + + + + + + +
modulo_core::communication::SubscriptionHandler< EncodedState >::SubscriptionHandler (std::shared_ptr< MessagePairInterfacemessage_pair)
+
+ +

Definition at line 29 of file SubscriptionHandler.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ create_subscription_interface()

+ +
+
+
+template<typename MsgT >
+ + + + + + + + +
std::shared_ptr< SubscriptionInterface > modulo_core::communication::SubscriptionHandler< MsgT >::create_subscription_interface (const std::shared_ptr< rclcpp::Subscription< MsgT > > & subscription)
+
+ +

Create a SubscriptionInterface pointer through an instance of a SubscriptionHandler by providing a ROS subscription.

+

This throws a NullPointerException if the ROS subscription is null.

See also
SubscriptionHandler::set_subscription
+
Parameters
+ + +
subscriptionThe ROS subscription
+
+
+
Returns
The resulting SubscriptionInterface pointer
+ +

Definition at line 110 of file SubscriptionHandler.hpp.

+ +
+
+ +

◆ get_callback() [1/7]

+ +
+
+ + + + + + + +
std::function< void(const std::shared_ptr< std_msgs::msg::Bool >)> modulo_core::communication::SubscriptionHandler< std_msgs::msg::Bool >::get_callback ()
+
+ +

Definition at line 34 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ get_callback() [2/7]

+ +
+
+ + + + + + + +
std::function< void(const std::shared_ptr< std_msgs::msg::Float64 >)> modulo_core::communication::SubscriptionHandler< std_msgs::msg::Float64 >::get_callback ()
+
+ +

Definition at line 47 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ get_callback() [3/7]

+ +
+
+ + + + + + + +
std::function< void(const std::shared_ptr< std_msgs::msg::Float64MultiArray >)> modulo_core::communication::SubscriptionHandler< std_msgs::msg::Float64MultiArray >::get_callback ()
+
+ +

Definition at line 60 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ get_callback() [4/7]

+ +
+
+ + + + + + + +
std::function< void(const std::shared_ptr< std_msgs::msg::Int32 >)> modulo_core::communication::SubscriptionHandler< std_msgs::msg::Int32 >::get_callback ()
+
+ +

Definition at line 73 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ get_callback() [5/7]

+ +
+
+ + + + + + + +
std::function< void(const std::shared_ptr< std_msgs::msg::String >)> modulo_core::communication::SubscriptionHandler< std_msgs::msg::String >::get_callback ()
+
+ +

Definition at line 86 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ get_callback() [6/7]

+ +
+
+ + + + + + + +
std::function< void(const std::shared_ptr< EncodedState >)> modulo_core::communication::SubscriptionHandler< EncodedState >::get_callback ()
+
+ +

Definition at line 98 of file SubscriptionHandler.cpp.

+ +
+
+ +

◆ get_callback() [7/7]

+ +
+
+
+template<typename MsgT >
+ + + + + + + + +
std::function< void(const std::shared_ptr< MsgT >)> modulo_core::communication::SubscriptionHandler< MsgT >::get_callback (const std::function< void()> & user_callback)
+
+ +

Get a callback function that will be associated with the ROS subscription to receive and translate messages.

+

This variant also takes a user callback function to execute after the message is received and translated.

Parameters
+ + +
user_callbackVoid callback function for additional logic after the message is received and translated.
+
+
+ +

Definition at line 104 of file SubscriptionHandler.hpp.

+ +
+
+ +

◆ get_subscription()

+ +
+
+
+template<typename MsgT >
+ + + + + + + +
std::shared_ptr< rclcpp::Subscription< MsgT > > modulo_core::communication::SubscriptionHandler< MsgT >::get_subscription () const
+
+ +

Getter of the ROS subscription.

+ +

Definition at line 85 of file SubscriptionHandler.hpp.

+ +
+
+ +

◆ set_subscription()

+ +
+
+
+template<typename MsgT >
+ + + + + + + + +
void modulo_core::communication::SubscriptionHandler< MsgT >::set_subscription (const std::shared_ptr< rclcpp::Subscription< MsgT > > & subscription)
+
+ +

Setter of the ROS subscription.

+
Parameters
+ + +
subscriptionThe ROS subscription
+
+
+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the provided subscription pointer is null
+
+
+ +

Definition at line 90 of file SubscriptionHandler.hpp.

+ +
+
+ +

◆ set_user_callback()

+ +
+
+
+template<typename MsgT >
+ + + + + + + + +
void modulo_core::communication::SubscriptionHandler< MsgT >::set_user_callback (const std::function< void()> & user_callback)
+
+ +

Setter of a user callback function to be executed after the subscription callback.

+
Parameters
+ + +
user_callbackThe ser callback function
+
+
+ +

Definition at line 98 of file SubscriptionHandler.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler.png b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_handler.png new file mode 100644 index 0000000000000000000000000000000000000000..a6eb5ca6d38bbe8cbc2d3c5d7206029b24db47c1 GIT binary patch literal 1837 zcmcJQdsNbA7{`H{UB%2DE3Xr4YNlBhhNRBI%o`>b&6t*!b|Iirf<&y=mYOS%X=PqU zt%3DJWon8kpbg74%~JE{1x3Z0nj+r9gv8M<=Pdv4J?Hs6-}n3c^PKa3&v{e#VSNpk zn=OYxAclT>F*pbW8mZSQOBd;x{U)wh-^}*~5`5<8=k;=E^c_9@w}Krm4yV@MY8#g_ovt{u(EFPl2|9#wGxvwA)gGxV)H-QON<}1&P6vFqcnGED=YZRGAvac3h z%QaC7mG`BYU8YM*Rw*`fv#xLCW-SdN5b*%O2~!Y>hWJm>ijudTl`I;}cfQKrDH%QI z-aMBhaUpLfB%AO7P>paWwq+!(l!x`FAG5HGm_ZJ2rH_vpa};7)yR8lNL@aw$p=^jl zDP_BFz!MjHjqUyl0V=V)Q86D|wygP`QS z(e5%vf6xf|aQyI~NORRAaQY!($w;d`PuguunxY^JmuV|O)R2itoO_WROg<$^?Dfv8 zZ&h~Fxh-sU1MonpGu%ol-$to4NPkE_y}uFF*Q$6qz_!ZdnOaJX7$^rDE}#2BxzX_v+Ic6o0g5b5rZx(wD0GpK8G01&yK#%WabDL0NIMFCfyJ~Qt` zqvCsFW_m`QfbyU#((*3!Q}hFIdz$pF8p#wkj-?HWoDVv{Ifdepk^`#jKlfR|KTNq( zy&BV`*q9oYZzpMRoY|fxX^`=#ZAs)nEv@<-NyL}#eny?CHRK1J!V-yt?hbGOI3F^9 z<}s9M?KA%e82NV2g9ZSC>4pga&>h(jNo@1FTgL~?cne@I$NBr+!1-T*BxOnv_)8$(A5~RzkOZFx4T z)ntyPu=ibq`UPcFPL5ECGXwabyb|!_r1N`>D(7F($aXbJszdWV_c|%N4>tXiGJ%N( zCa;f&4;}tf15y$K-gdOf_)`O$%Am>3%H*S~Y-Kh%8AY>5b1->wYk}a1>SR7%guoe? zb)@a>O_&+H`+l+`8TI?gjFyM}2|HWBCsC;ggzKD%NXeZ-$_p~_B3s$D50)ZQP)C5) zRH~lDmolO^BiQB&4{wE_q6wrn&y+EKℌoZ%||LFgD|SI!_<7&vZ1lm~@6`kX*Z zwW1ps|5ghQqNRfW#O9$IToH$+>sTIjW5v|5SXE45WwoyiDw_-Q)sE-9w~ClqAxPzQ zH6>D5ui&!i9h*WhM|kZ_AB--$*n(`FF@MlnsAl4p`(fYfozGgs!hR=i7Qumw zNr{fVxz$xGS}nL8uHX3+U?)QH<5uxwH0xNrTs4rHA?@(h9laFHqh7YC>b`X5^qjpY zHWoWIYjuF_m0`I_kmaCNUoP7iXLIH7UK@o`&`+eb+j)oHUIL)nYNdaDYL`&m{eu;@v7F~~lb zs=1eUP#y5*A5XrMZTY5V2qfkfjf94m@GOG~Q~S#p6-^G2u8xZgN1qhZ#4N_nYOLo6 z&qnXq+#5VpUQp3a5+!b%0W+e&v)(IB=rl$fV7sH9pi8&=>Q>7ucC3_!uPL)TijHGl zyUZkm=aDQsbu=ink(;d7oftW(G>xcdRdl)MlZ3%NGiCqFS8Vy!vnn)`v*uR#@tkV6 zv~ZbozXvF{6@)Y;7N|kTL^Sl@kU2+v8nW&UH8r!x0E&Wdnk>Ep4;@MWP-2G6tNO`G zaJ$pG)r-`b__Inu4=cXiX#{$umew#_S + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::communication::SubscriptionInterface Member List
+
+
+ +

This is the complete list of members for modulo_core::communication::SubscriptionInterface, including all inherited members.

+ + + + + + + +
get_handler(bool validate_pointer=true)modulo_core::communication::SubscriptionInterfaceinline
get_message_pair() constmodulo_core::communication::SubscriptionInterface
set_message_pair(const std::shared_ptr< MessagePairInterface > &message_pair)modulo_core::communication::SubscriptionInterface
SubscriptionInterface(std::shared_ptr< MessagePairInterface > message_pair=nullptr)modulo_core::communication::SubscriptionInterfaceexplicit
SubscriptionInterface(const SubscriptionInterface &subscription)=defaultmodulo_core::communication::SubscriptionInterface
~SubscriptionInterface()=defaultmodulo_core::communication::SubscriptionInterfacevirtual
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface.html b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface.html new file mode 100644 index 000000000..c735efcc6 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface.html @@ -0,0 +1,275 @@ + + + + + + + +Modulo: modulo_core::communication::SubscriptionInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::communication::SubscriptionInterface Class Reference
+
+
+ +

Interface class to enable non-templated subscriptions with ROS subscriptions from derived SubscriptionHandler instances through dynamic down-casting. + More...

+ +

#include <SubscriptionInterface.hpp>

+
+Inheritance diagram for modulo_core::communication::SubscriptionInterface:
+
+
+ + +modulo_core::communication::SubscriptionHandler< MsgT > + +
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SubscriptionInterface (std::shared_ptr< MessagePairInterface > message_pair=nullptr)
 Constructor with the message pair.
 
SubscriptionInterface (const SubscriptionInterface &subscription)=default
 Copy constructor from another SubscriptionInterface.
 
+virtual ~SubscriptionInterface ()=default
 Default virtual destructor.
 
template<typename MsgT >
std::shared_ptr< SubscriptionHandler< MsgT > > get_handler (bool validate_pointer=true)
 Get a pointer to a derived SubscriptionHandler instance from a SubscriptionInterface pointer.
 
std::shared_ptr< MessagePairInterfaceget_message_pair () const
 Get the pointer to the message pair of the SubscriptionInterface.
 
void set_message_pair (const std::shared_ptr< MessagePairInterface > &message_pair)
 Set the pointer to the message pair of the SubscriptionInterface.
 
+

Detailed Description

+

Interface class to enable non-templated subscriptions with ROS subscriptions from derived SubscriptionHandler instances through dynamic down-casting.

+ +

Definition at line 20 of file SubscriptionInterface.hpp.

+

Constructor & Destructor Documentation

+ +

◆ SubscriptionInterface()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::communication::SubscriptionInterface::SubscriptionInterface (std::shared_ptr< MessagePairInterfacemessage_pair = nullptr)
+
+explicit
+
+ +

Constructor with the message pair.

+
Parameters
+ + +
message_pairThe pointer to the message pair with the data that should be updated through the subscription
+
+
+ +

Definition at line 7 of file SubscriptionInterface.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ get_handler()

+ +
+
+
+template<typename MsgT >
+ + + + + +
+ + + + + + + + +
std::shared_ptr< SubscriptionHandler< MsgT > > modulo_core::communication::SubscriptionInterface::get_handler (bool validate_pointer = true)
+
+inline
+
+ +

Get a pointer to a derived SubscriptionHandler instance from a SubscriptionInterface pointer.

+

If a SubscriptionInterface pointer is used to address a derived SubscriptionHandler instance, this method will return a pointer to that derived instance through dynamic down-casting. The downcast will fail if the base SubscriptionInterface object has no reference count (if the object is not owned by any pointer), or if the derived object is not a correctly typed instance of a SubscriptionHandler. By default, an InvalidPointerCastException is thrown when the downcast fails. If this validation is disabled by setting the validate_pointer flag to false, it will not throw an exception and instead return a null pointer.

Template Parameters
+ + + +
PubTThe ROS publisher type
MsgTThe ROS message type
+
+
+
Exceptions
+ + + +
modulo_core::exceptions::InvalidPointerExceptionif the base SubscriptionInterface object has no reference count and validate_pointer is set to true
modulo_core::exceptions::InvalidPointerCastExceptionif the derived object from the dynamic down-casting is not a correctly typed instance of a SubscriptionHandler
+
+
+
Parameters
+ + +
validate_pointerIf true, throw an exception when down-casting fails
+
+
+
Returns
A pointer to a derived SubscriptionHandler instance of the desired type, or a null pointer if down-casting failed and validate_pointer was set to false.
+ +

Definition at line 75 of file SubscriptionInterface.hpp.

+ +
+
+ +

◆ get_message_pair()

+ +
+
+ + + + + + + +
std::shared_ptr< MessagePairInterface > modulo_core::communication::SubscriptionInterface::get_message_pair () const
+
+ +

Get the pointer to the message pair of the SubscriptionInterface.

+ +

Definition at line 10 of file SubscriptionInterface.cpp.

+ +
+
+ +

◆ set_message_pair()

+ +
+
+ + + + + + + + +
void modulo_core::communication::SubscriptionInterface::set_message_pair (const std::shared_ptr< MessagePairInterface > & message_pair)
+
+ +

Set the pointer to the message pair of the SubscriptionInterface.

+
Exceptions
+ + +
modulo_core::exceptions::NullPointerExceptionif the provided message pair pointer is null
+
+
+ +

Definition at line 14 of file SubscriptionInterface.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface.png b/versions/v4.2.2/classmodulo__core_1_1communication_1_1_subscription_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..3add2369cdefd59ef2870849df8d0f89a20b640c GIT binary patch literal 1837 zcmcJQe>Br;9LKlZ(l3M?)wtC<{ZObb4J|5{5)GHuj%Gyc+^j{hABO3)o3K!>LQCtH zWHO>z_M=GY#^@r$W?QHfX2dL;ZTH(fw?FFto^w90&-?j2&vVXmp3nQ7Co4E`zuDqd zi$Nfe*#SSF5D*9)0qD$yCIE}xC9;782|jqp*Jv~X^23;#koUCAeVaqVibBzchK2^9 z9-7~E4_I526cQK;0_Oh>w|R`$AkczG2YmJ(B7>DB%6y&U!u@$McN2`Lx#{&eRy*2= zEylj_>Y*yePrkdL)Y5{GkkSIHwb`sVf24ZKU%+BTeTSXRd`T|p&7-dJ2bvd!o)#N< zn68c3%8ZeOXk@n}!l#V2v$LvEw|UMoM|gWmz5#RBT<$p-D&Q)48=oQD?rSgtYO-Tl z8ow3)>4r+l@p8NFhB9;@#x{g>*Lf;>%n4#yKSMcC9r+sv)+7#;ON;-!KH$XSaJCwn z{u#rNyR?!O7_CPY^%%+8)3Liz>zaMsP4l-nm0^Z^Dz74#YeDfU>>Ekfs%u*nq-Dc~ zBsd9Ep2XDG#KrN`X`;hU2nf4z9Ue1gleqMAwfi)A^@}^@^Z7B;8v2rn;-3%}ML|G84D^&W#>OWXb3a_j@dZufBD@ z=^LS~-UXe)(!3IsvmSRA4k3~HwlCdE_s&8gcO3i+^<$E4r>vO0an9e0jqrjibcG=wZNl9 zH+sIWfJ@gNeYj>N};!JlSQe z&yi6oM}>sb$GasERQK@EDUJ@zWoq%tw>>KR6Hm~t4E%@IFh&$^qe@BeW;UcS+rh$D z;R+ri{(zECNg+ID#=?%e@$?f5qhqALE;Tz8*d}do#QW*uv69Nf>>g3e9+Q;qqiB`E z{pZMEblXge@rSR%!t?e^c)d;?q7!%1&vJ!H@@8Ga=}c0L^x_kmCd|67({N#6_7l2> z6ulLj1{w6+GgwvEELlAQQs4BB;2{;ap5d@FrUm3S(bMmc^c?N) zP#)sHXjy~X$9Wg$Wd;w<&+L4cp9(%(KnCARDrKaCqX9MVasn7Q`(tAoPcDoNd+Z0` zipr9n>F4kB7Vr)f3V7!m?0kk^5Cny;MhzRZQLxy0gZ%}&X0K1XA*tI4E-^jtYzpY3 zsDb5{r>?#tapyKw|6Zt>WUtdXH|>SUYi2Q|0WF`JY)JItMvPM8OTv$EW}1=eS#r3N z+Mq0>qT%X~pBsvou~b6N&}vJ<)J7Nq2K^ zZLRXw%Dxe9+8Js`Wd#h~Q<)D%NSXJvy)mj2C7}Xn$bwb9bUy_}GfpO!q<&5-qKRxA z5Q*-LBgqdX@Bdgj!3#{wO}B|h_bdK)6)tzqL4ZHCBBRzB8_-UCKVxS$d6MRJO=z8B z`BAz|1-44(5bB8Z_94$B_>%TYY1z20PkOnUCV_7@r!BX+B-zK;SPSy#0e4*6WDMUs z__B#{oGQ1lDj@!~oN{h=&>3Td#RGl?BcL~BrSiyJ6Ge{sNC=ccHHt+bOqn4L~a9$ljle{fJ!FH7C)2HAU3!zYEXH< + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::exceptions::CoreException Member List
+
+
+ +

This is the complete list of members for modulo_core::exceptions::CoreException, including all inherited members.

+ + + +
CoreException(const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineexplicit
CoreException(const std::string &prefix, const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineprotected
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception.html b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception.html new file mode 100644 index 000000000..702a03f08 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception.html @@ -0,0 +1,193 @@ + + + + + + + +Modulo: modulo_core::exceptions::CoreException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::exceptions::CoreException Class Reference
+
+
+ +

A base class for all core exceptions. + More...

+ +

#include <CoreException.hpp>

+
+Inheritance diagram for modulo_core::exceptions::CoreException:
+
+
+ + +modulo_core::exceptions::InvalidPointerCastException +modulo_core::exceptions::InvalidPointerException +modulo_core::exceptions::MessageTranslationException +modulo_core::exceptions::NullPointerException +modulo_core::exceptions::ParameterTranslationException + +
+ + + + +

+Public Member Functions

 CoreException (const std::string &msg)
 
+ + + +

+Protected Member Functions

 CoreException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

A base class for all core exceptions.

+

This inherits from std::runtime_exception.

+ +

Definition at line 17 of file CoreException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ CoreException() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::exceptions::CoreException::CoreException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 19 of file CoreException.hpp.

+ +
+
+ +

◆ CoreException() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
modulo_core::exceptions::CoreException::CoreException (const std::string & prefix,
const std::string & msg 
)
+
+inlineprotected
+
+ +

Definition at line 21 of file CoreException.hpp.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /github/workspace/source/modulo_core/include/modulo_core/exceptions/CoreException.hpp
  • +
+
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception.png b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_core_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..5b70d3aca45325c89444879b72b6b43bf4e34cc5 GIT binary patch literal 3455 zcmdT{dsLElAJ@0Gu4Y?hz1?fkn{DbkS#8QCD_3Z0p`@Wnxh+zrXp2x$*{RhoE?vyT zS0`*qy616-P0@KlOjm59MT%emMjO4hJJjCZ4(X%ml5Zf}f^(S2Xb3H2qxUP5OOr|~lY{5G#Bv?r$*%Kc4Poez zy?ghz`}hJf+?vg>7d#<}XR~p{)Q^jn&xPc@tMn8OZxaTy6q4G|Fpwv^e8}w-T-@{M z1`2me^1h%dG+8z%Ac?iQgy|p5ci@(HO*qAcOtHW_D|b{D8^Aq& zcRYJM@N@=LM&7Zog@1#j;eq;m8(irOcC;XEvUd!jypei|sF<6J=)w_Eue!?{!D0+p zGKXADtCSTBjVew=DhG-Y_gjq1NKVU;1ZI3zSMsaz=#1KNp*(G<>Ty#w^lVj6EZb&c z(Qf(gnFM%}jH4JaA&t=^jU=X~5IHNqGfavj?q~m*(;wlKEOEgD0aP`E+T0Oc`k`5OMf_;l%e+x4^l|DQ*mWk~`fc0@?(*SW@dZcbMZ)zC#X z#6O3^!1sO*1>cN(4uw%^`yCWi!*5WWf{{yy)?^!!f2Q3HLf9vjwi{|f8p5p6Pz`qc z?CfxT0VP$Sd$-+qlofZcWJQ%5$N&YaO8v-63^+`p6%Yz&iQ)~y4F~z;pC-N<{D3h} z$UN?qx7v1I8#p}N#K=!f{xP4}ilCS$`Q|)^o0VfcdUn%QZi*&uC#g_&`{p)oe^u67l9;Dw zwwaZNFWe((+72{6&dhy`%Wq}cz6p(7Cf^1~mXo5DyK)Wue%Ny&5+t0{{G4B|_#7uo zI8eeCnk(UccfwUzjKnGqMf*i2E|(5pWPHS>`Rt712Na6@6N>H`iLVhg1+I=EXSYQ> z8lf1(lN=<9lYz>g5RM6t3jN=72-ez_J4LsmmNB;?`9qn!=tT$wd3bdI${f{CHBe?r zhHqYHR@%gtr-NSQNOz4nghhwBD8AW&oylPlSf2U}@y!tHT!TMK8ykR0sRlvlZ~Xg9 z(2HXJYEnunlRr%^t<<^5y>TEa*u^`DdCXbnGx0m6!P-c&x&JC)w35?z_2dU z#s$mVrY`z+m+A8l7r0GsuR|Rlx=n7cEvJ4L5Hc;Mzy7;`kk^ao5?8M0UKh9g_sbA$ zk!CT~LQ07`D=!mGW~#I5*+Jq7I1W>;&RXvW+?#+Go~{8u1wl@6d_A}w1RKIYEVcqB z1;H+Q3RZf?7XZPK??S6Vs6qcJ1M5{l^D_;L-4BnLQhnRVg!A=N0yQhjFB6fDxFs~` z@rxASg*qcUUb*lsC>hhlY}ni>##?uN<9&y#6iahkH>o`vCG&o?!LKWJYfb?AHF8w{ z)D@|&5x=2=4T5Rb0iSHs)0!)A6oovX-u)};BX~L*i&X>$s$L2?Ce>t?&_S?SqqCVG z8k~f!c8mSJyHhKRVzAN(ZV0}pC$Vhu>o5@1R+hbl#d1#gL_miA27EwxN>J_t(i)Zh z?wD9xW;d$+ukfF}#Vv5FnZo+HEPvTHYU%XP5^2d?ZZ& za|s=fUwJmUPcVAhiQm%d`y&{%E;c&1b@56V?*Xo=KOftMw_0rW(&|t84<_<0cfK^d z2F#P!iHJ~5QKarN0Qs1aOI8^5@ij(xy}~qnjh>x#-mYO8F4c7>eA&7x`^l}OK4WyW z^x6}xNX(#+yJBVM8}zqLNLryY@eH=SKwRA8+^q6*b>aI&Od&(1B_grq>loEJ&TiTp z84={5dq~jh&Hi{yVX4_jw~j?*x3Jfbit;92j+Hg9;yudaV=#N3PHmKer8RM=3|Xaf z{sOlR~|5#eWpd%OY#Lm7gwd$CG-t96&9Z_J-JRgOtD$UMTIJ@ zKEWWr-QhEgd(BdFNgs_7Y*Kl-@>pu<*2{~<-I@7kR}7tP9~bdgr{jcIypwE~?NjvC zOfz+0msInB@I@X0eZ@PCJg0R$7xl~ci&GozRzDbdw<1L*>Xpa!X(Gz|_mTMer}_jG z#W9d{zkHFRf}I!A5kEbXCtyaezt>3ONVV1dy%X3IkFGf_-LxHQRsf*Nf|}Rggcj7X z@64mhAwhKm0|-&&$F zsn7QAtJa>&;jAr$E9$0SIr&t%$SLYFNNd+V3sfaPmgE=2R+st+wej|G zx_PRXbxYevGSF@|sOK4onN-KS1q_yLW%CWT;~jSq8EC|j%lQ&R<9&(YNm_hO>X;2N zCjCJuiS=*Wq2?C%yfT>EfH2G1PJckSFzqHxEHLE9;^o2Shg=2>i#6^DzFh$n_9Z0Egv6y1*XF!*?_V1KuZU8~+XNqZ) zlK?G&)FO!cpMsz_d}O5n)b{=l_Foiimw00B1YBI^*DwSZzkhcEPAZO3XE6_kgOC>5 g#?TV)a?JUPXzH+EKN1f8Rq{ZGMjoiyck;r&0A~|@W&i*H literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception-members.html b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception-members.html new file mode 100644 index 000000000..8216fcabc --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception-members.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::exceptions::InvalidPointerCastException Member List
+
+
+ +

This is the complete list of members for modulo_core::exceptions::InvalidPointerCastException, including all inherited members.

+ + + + +
CoreException(const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineexplicit
CoreException(const std::string &prefix, const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineprotected
InvalidPointerCastException(const std::string &msg) (defined in modulo_core::exceptions::InvalidPointerCastException)modulo_core::exceptions::InvalidPointerCastExceptioninlineexplicit
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.html b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.html new file mode 100644 index 000000000..91c61e8e4 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.html @@ -0,0 +1,153 @@ + + + + + + + +Modulo: modulo_core::exceptions::InvalidPointerCastException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::exceptions::InvalidPointerCastException Class Reference
+
+
+ +

An exception class to notify if the result of getting an instance of a derived class through dynamic down-casting of an object of the base class is not a correctly typed instance of the derived class. + More...

+ +

#include <InvalidPointerCastException.hpp>

+
+Inheritance diagram for modulo_core::exceptions::InvalidPointerCastException:
+
+
+ + +modulo_core::exceptions::CoreException + +
+ + + + + + + +

+Public Member Functions

 InvalidPointerCastException (const std::string &msg)
 
- Public Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify if the result of getting an instance of a derived class through dynamic down-casting of an object of the base class is not a correctly typed instance of the derived class.

+ +

Definition at line 12 of file InvalidPointerCastException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ InvalidPointerCastException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::exceptions::InvalidPointerCastException::InvalidPointerCastException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 14 of file InvalidPointerCastException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.png b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..30f0bf635315f4b86872278de8fc21dd9ceaa2b8 GIT binary patch literal 1465 zcmb`HdrXs87{)(jUSI-Mr%}-<2xDDTTslEYpj_%`ixvcIK`M2M^+sV_J}MW5seou$ zZIL=8=prrHRxAtHl0qq3CeHN|sGk&Saf(Iwgi=AMD;D-`X3LiS>-poH_j%5nlbqjk za>`@LQEsklT>$`aBNFg&0N{j0>hnvSkvVL%kB=;#vAYs>&d<*y<;d7H$iCOGV;lP0 z)mPLbot>SCAJ5g_MD|>A;>hs;qW>C!3u+z#z(PC`AD(d1X}p%1eRjvvMSUKas=0ap z4xg~5yQtWLV-^uv>LTTsr;St++7~UjERI#Hmt&ew@UfU?lu)bQj2B@rA9G-}I^tca zT-aUreFnGzC%7)ws>kZ`n&nw^@{p3GbJ!fCKRq7)Y)F;*`Zamw;mx#xgoO-7#xn(c zp?@-O?rM=#Q2Df>W8lr?K8Gdo0Aps=;O+FF2iUE!-CWm^0)0`ueftYl|%U?n_%wIffkGLuBrpg1yCM}aj z_1Kp7Q>v@g4%}ORVFArUGl{{>ZqI_Mt4jzVgW(ldTb*=1;Rs`u_dixT{Ql|}fx@kH zz@>9<-1@L{5=qWt)JDh&-&!5b0{Vy`5FWQK?0mvvlsDvbjsOB)NY{syI!fSD)upAX zZM2eb?sB61Yf&X1B_wkr_*kMV2lhdC*`O+|KheG{-HVRjBEt~}vLyZD;Polo+_!}w zw?$VMu7t{SI;vi82hBk-`oh7v7~d%>MyI3bmrPW^i`Zp(Z*~tQ8-+*9vAhuMxY}6H z7Fx1S60xeCAlq7TE6=LeGuBW_YU+bM_8O!jf-y!9iP*=f*WCSy4Xtw6UcT;TWdb(s ze%tZF)H|}F3;dP3X3IY0grAKN6vbkt9qR8fQIJMp<>r(=O$2N0hxs*7k7x3s zGzojWG{iH7n=-`&r-Yfqw_ar!%qNS$)r}#Kt`zfods9|4sG@t(XW#)(X-BYoh5-&p z-nW7FUG%%$NJ{#!^N;%O)*%0~D|`$s-j6u(?BQykQE%L`Ir^SJtxeWDD~5eWYY<>| zB^M!v|2M+S_`msn^jr4t3kbk%E(~}Vo)QEX148$W_cS!Qb1PZoyoCE4K$sV!5EG9` z4*Wr7p;R76B9hSNFFs+}x=fC>LaiwTFUn?laNsAVNIsTjLzTfiQPJIrEib-#qJ-bPMjHOS<{!0xyqP0>-=u2uc|@&NeLlK-dQ$_h30 z^^Jm+mKV~81;<*tcGQj>hohwI3}GiFKVQp9^MAAsY7+ovu@l$u-dFM?k3ZwcETHx zJd@Y4-L4dAO%CL>uxz;9{|(^JOuBaOM+fS+{DbrD`N$^=5O + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::exceptions::InvalidPointerException Member List
+
+
+ +

This is the complete list of members for modulo_core::exceptions::InvalidPointerException, including all inherited members.

+ + + + +
CoreException(const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineexplicit
CoreException(const std::string &prefix, const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineprotected
InvalidPointerException(const std::string &msg) (defined in modulo_core::exceptions::InvalidPointerException)modulo_core::exceptions::InvalidPointerExceptioninlineexplicit
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.html b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.html new file mode 100644 index 000000000..98783743a --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.html @@ -0,0 +1,153 @@ + + + + + + + +Modulo: modulo_core::exceptions::InvalidPointerException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::exceptions::InvalidPointerException Class Reference
+
+
+ +

An exception class to notify if an object has no reference count (if the object is not owned by any pointer) when attempting to get a derived instance through dynamic down-casting. + More...

+ +

#include <InvalidPointerException.hpp>

+
+Inheritance diagram for modulo_core::exceptions::InvalidPointerException:
+
+
+ + +modulo_core::exceptions::CoreException + +
+ + + + + + + +

+Public Member Functions

 InvalidPointerException (const std::string &msg)
 
- Public Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify if an object has no reference count (if the object is not owned by any pointer) when attempting to get a derived instance through dynamic down-casting.

+ +

Definition at line 12 of file InvalidPointerException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ InvalidPointerException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::exceptions::InvalidPointerException::InvalidPointerException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 14 of file InvalidPointerException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.png b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..2d961438bc80a891c07e4f3e0b1df2bc49ac0967 GIT binary patch literal 1413 zcmbtUeNfVO82{0-oQY(&yp7H=Nh{1*3k);C3P|xi13N6yOr7LgsRc<(S9ic%Dw2U@ z(I^C8vZdTXK&ES1)=)cNW)8twQj|h-`H~Q^U%TCH|Lm`xKfcfNectZ-{d}H#zDtac zgnGa|004lJqlifW0PzEDp8H4Od0Ek_1J#?*+j7--2CIKLh}7E6K#26c)sKDPMFt)N^+sqE9^Oay=nI7!8%7 zXssu`Gji&@FF};h(W45@?oI*I z?(IMRa{0N8aBh|1O&W%xpPx!^G*#)N+0M@7QEO1kxx)ELZRrUaTWIaKxq9FCO%{ts z%Y+Ho5~DQj)RlU1WzRP7^)(#59y!1l(}?gb=05$`Iu|%+i%L8~{16at9H8{%Id|w3FzWNy-c15_jmK+%z za#cGx5imRw2^Yw|8d>H{Ue9?w%R|5eu~Sn9ap#D@syLCWPR>P&b{{)4)ho;#WEJRq ztb0W5xr$38#g;>@?66z@m8?7qyy0lO`KHNt9hJ(;3A@>JM@1!t(c|_pzoEpuC}EM| zMHyamjuoEdKwmG0F{Em8PDrjPxu1_H4Zh_MJ;9ZhE=Suc9Z?x<2LupwKFGtSRn+a+YH{iVRxB~A>7jQ0O zha_2Z^S+X-VNILb%c~xDN>>r+W@xs~wq0vf{0#Qxa{OQ5!o!&XFB~VaZwo(5F`23b zZ=Zr*E(n?(Cin+2A_xl)<4^WhN*NdAnHS_uu&&4%H$LDAk_JgjYjRJIg)echb8A4B z`+*#;a{?d8;s1`tNr^NmnjDSF0=kX3qs&(V&X{rS0AI%@!i$*IQ3RXKTPp2%=>~t! zKRC3<{BF!VZZ6K~`lV^ohR?)E%7*zm2fyo4YJ7)q0W3YlaprR#nkJC!ck~$5;g0`s9QQ6a3s-K)ffJ}kpN`KB_$kSnghQ5;$DyM|2VQxdYYq&@_>NHy z8k(P&G}`KM*pJ&SeUInmiu=V_uDyCWXRM + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::exceptions::MessageTranslationException Member List
+
+
+ +

This is the complete list of members for modulo_core::exceptions::MessageTranslationException, including all inherited members.

+ + + + +
CoreException(const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineexplicit
CoreException(const std::string &prefix, const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineprotected
MessageTranslationException(const std::string &msg) (defined in modulo_core::exceptions::MessageTranslationException)modulo_core::exceptions::MessageTranslationExceptioninlineexplicit
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception.html b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception.html new file mode 100644 index 000000000..e83855b21 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception.html @@ -0,0 +1,153 @@ + + + + + + + +Modulo: modulo_core::exceptions::MessageTranslationException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::exceptions::MessageTranslationException Class Reference
+
+
+ +

An exception class to notify that the translation of a ROS message failed. + More...

+ +

#include <MessageTranslationException.hpp>

+
+Inheritance diagram for modulo_core::exceptions::MessageTranslationException:
+
+
+ + +modulo_core::exceptions::CoreException + +
+ + + + + + + +

+Public Member Functions

 MessageTranslationException (const std::string &msg)
 
- Public Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify that the translation of a ROS message failed.

+ +

Definition at line 11 of file MessageTranslationException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ MessageTranslationException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::exceptions::MessageTranslationException::MessageTranslationException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 13 of file MessageTranslationException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception.png b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_message_translation_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..4b020d21626c61d9c635da57c433d7d87a3ac814 GIT binary patch literal 1476 zcmb_cZB&wH7=Fz@)NHOT$t=??DNPU^OU<&dBm(mj%_Pe*^P`ctDJqcWu@AM^#38Fx zw9UjmCqvNGH_}ShvB(cJztK}kqM{^)W)9g~JNwc9o*&P1U)Oy<=RW7U?sMk``V&@| zS(^a>u!6YPCl~;X@Nk@CVhrDe+onSJSsS=71aB}H;83O3(b*5Ld$>3zT3wc@nwpwm zp3LdI0q0DUgZ;?>j6WUsMI~JTuq1%!;~kP_G+8=%soK+gPpWNq@yLSUy+>C2F1$;A zE6?4zmSh?a&Fd})lZYfoBp{WcT(PWTaa;@ni7qa}6Tz66AbELFIJYgFH?Fw7pjFfI zrfGNMVrJ&&a->?XmcIp0x@HX;Xu|y7xjgs6_K9twmxPJAH_c?Sp~st02$8bbpjfEo z7moKuqth9GW~8EAuq<2K>N+aZ2CWNly)DS73l}1=B6qFOQlBT)1W10TF=Q8Nt`tdr zwJ3GA*w~}5uk&Iqgo09Py&Ga;vg3|8tV*T3P}ZiR1SaKou^)#u#JB!(=YD z!%-HSXm!6?8%0&%GwoLA-dt(tLs^_t_>~d-Dbpc-r5y=|9K;ue|11F?xtO=OnC}Lb z5=r)B@$zzeSbNSYB$^b=6*~}v4o3@<7l?A-x{6Z;H4!^FV&!~`BsRO#SMGeex!hhc zYTeHEZ0D^Ozc&Ssub0GgF~j7R$?I$MTThIuQv+=hCH1*+Sr{R?gF{C_`}@~C^t0&{ zb&es&JlYQ2>+VW}7+0p;3Pqa-&koh!l-IH^h$Y3h_R~Y2&LlF4o)5@L!r@9AkVDG$ z>j`_n%3}Fe@1?kEz)`uc+;qn=;m|asSod_Mq3>WvspqW|{`|`ouTD{&Q_3)IwHH^^0sQj_o-O1xtVVbdboMhf66iLqV7`7pL$|mFnp7dwLSxPYi=}4k*D^8#P zsMlu#g3_Z_=cBF8zhD3vTO$EeT&CFM>yZhkEsL7>f`GU4H{=bt9GKc46(Rk)zo?&QL-GD*VwxYIui}krU{L6P4Spc+uk4 zm;nz(*xL-RdlJNR5u>(_1Z_B?xV3RwcrNk&GYCODlM)@N7O0dX4DsVT2ZzZ)gA+f+ zMh>Pw2QfX}FZ + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::exceptions::NullPointerException Member List
+
+
+ +

This is the complete list of members for modulo_core::exceptions::NullPointerException, including all inherited members.

+ + + + +
CoreException(const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineexplicit
CoreException(const std::string &prefix, const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineprotected
NullPointerException(const std::string &msg) (defined in modulo_core::exceptions::NullPointerException)modulo_core::exceptions::NullPointerExceptioninlineexplicit
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception.html b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception.html new file mode 100644 index 000000000..5758ca7fe --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception.html @@ -0,0 +1,154 @@ + + + + + + + +Modulo: modulo_core::exceptions::NullPointerException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::exceptions::NullPointerException Class Reference
+
+
+ +

An exception class to notify that a certain pointer is null. + More...

+ +

#include <NullPointerException.hpp>

+
+Inheritance diagram for modulo_core::exceptions::NullPointerException:
+
+
+ + +modulo_core::exceptions::CoreException + +
+ + + + + + + +

+Public Member Functions

 NullPointerException (const std::string &msg)
 
- Public Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify that a certain pointer is null.

+

This is an exception class to be thrown if a pointer is null or is trying to be set to a null pointer.

+ +

Definition at line 12 of file NullPointerException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ NullPointerException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::exceptions::NullPointerException::NullPointerException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 14 of file NullPointerException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception.png b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_null_pointer_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..aba210482abf22b82bd0910258a508cda6f21194 GIT binary patch literal 1342 zcmeAS@N?(olHy`uVBq!ia0y~yU=#wfJ2;quq)hUZ1|TIJ;1lBd|Nnm=^TnI5rTvGN zTNr2-NK8NT;=q9eK=I&7msbGgI7@>3f*F8(FfeDDeT9L6<)o*JV@L(#+qpLw8z8{E)t-xPIB| zRE;^eOIQU3^`F;zMID(Vzkk{MIIF7ajF-IU`oEs%1Iw)Sde)qj-1j%U`^D$7&mCfZ zE=OKhem?e7SatiA_p?{dhl;%Z`0H%;{dm>ao4C7RYl6@V>9Q^t#^0XGiQ6=oQ{tAe*e%S`>^}v7u{Um1g?hqz)iEW!@$ear6myP z`ko*m!Ni!UTdqZ2RBbr_fO~<4DnoTm?Ns3f=a;f5@BX~p^>vln+ReOMB^KY7^#`ia?h8Blje*@uWh-yk=Li$KO&>!#0}-i`Mx&X?(X zp3_vlysqY%&dqxkpEv%vn-+g=y}ga9>GA&S%Xd#-BI>X4QF^(3F@OG?cO~%dCt4INz>kFPh7J9@VinCPy6RN-|fSU_RN<*`)a%9#3k}UUMepq zYodkQ>Pe@c7HRHc`5;-tD6*6#p@04QBBn1pr!Y)g?{z!{tN#r}>{9>xl`O>>z589-a8ZiVH>3`vv_EBe=Z}^U^U7we~zP38*nU=g}r0Y(> zp7m>&GexYK^!7ME&{4M!Xz#kTSM%5Pti=_-KXybMy{i54{G?*WJyD+Z3v%5|rpUUc zNH4#AcAwX`DLdA^^Qf|GxW0Z;@2@=9yfbN{7nA1B4cZj3uwLxI!bzFuZHuSnK~u^`} + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core::exceptions::ParameterTranslationException Member List
+
+
+ +

This is the complete list of members for modulo_core::exceptions::ParameterTranslationException, including all inherited members.

+ + + + +
CoreException(const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineexplicit
CoreException(const std::string &prefix, const std::string &msg) (defined in modulo_core::exceptions::CoreException)modulo_core::exceptions::CoreExceptioninlineprotected
ParameterTranslationException(const std::string &msg) (defined in modulo_core::exceptions::ParameterTranslationException)modulo_core::exceptions::ParameterTranslationExceptioninlineexplicit
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.html b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.html new file mode 100644 index 000000000..1045d1cc9 --- /dev/null +++ b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.html @@ -0,0 +1,154 @@ + + + + + + + +Modulo: modulo_core::exceptions::ParameterTranslationException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_core::exceptions::ParameterTranslationException Class Reference
+
+
+ +

An exception class to notify incompatibility when translating parameters from different sources. + More...

+ +

#include <ParameterTranslationException.hpp>

+
+Inheritance diagram for modulo_core::exceptions::ParameterTranslationException:
+
+
+ + +modulo_core::exceptions::CoreException + +
+ + + + + + + +

+Public Member Functions

 ParameterTranslationException (const std::string &msg)
 
- Public Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &msg)
 
+ + + + +

+Additional Inherited Members

- Protected Member Functions inherited from modulo_core::exceptions::CoreException
 CoreException (const std::string &prefix, const std::string &msg)
 
+

Detailed Description

+

An exception class to notify incompatibility when translating parameters from different sources.

+

This is an exception class to be thrown if there is a problem while translating from a ROS parameter to a state_representation parameter and vice versa.

+ +

Definition at line 13 of file ParameterTranslationException.hpp.

+

Constructor & Destructor Documentation

+ +

◆ ParameterTranslationException()

+ +
+
+ + + + + +
+ + + + + + + + +
modulo_core::exceptions::ParameterTranslationException::ParameterTranslationException (const std::string & msg)
+
+inlineexplicit
+
+ +

Definition at line 15 of file ParameterTranslationException.hpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.png b/versions/v4.2.2/classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.png new file mode 100644 index 0000000000000000000000000000000000000000..29afe23bb629f151130374c4d2a31743477e92ff GIT binary patch literal 1486 zcmd5+e^AnA7{}6nxTT(3N-D`ZX~RfMnzWdhWhzQosCee3DMFV?CTUh`b+y#CB^UnM zSJUp2?1yIOKp7BX8d~_poLJ6@m}?@MLW~d+k$vlK*KPmqpWZ*-_j%suxqF`H^ZDF! zc^^4)jkA|C3c&8&?^K*^0%-$hToX*+8!WoUR5bzzb0TgArDk zp!v$^Z;3AjNtNH_p&J$jL?HOX( z%DG<)YVL^y-7$lk&PFx*F;8RPk>vDe=!rPT-oJ<(h^f z+p5Q10*SpAqkPtt8QI7kOryWJW2m1}6E<_|e|ieiCQ#Gx@$#fEFX@H}^7)Q-fdXF? zKjz~cNG!3;$Y+NF$2$&$N$xX!j+t838hvp!clo0y*T~oN`@yB)RQKMd-E$+Px)i_4 zs$d5RB85|yLuJ$|UN!S;6-}U!uO-amED2;x$mBfEQgFHycC^STL8oW3IUOe#;Fparc!L6Y5@6O4ORgFF6 z1dWYdi~@8zNKyG_sDE*Rn>eWY?zuyYUM$>9NQg)*ZDa;BsQG4s;_$uSC1(l_Yf~$y zbsbM6OOmt0yHsPi5qmREq{sqPz7=YLy zv9Q{hcO{GS1J|hxy9oj4Qg-my#+KWGS66qulE@~xbQ+( zrrqC;yD`NiNP_iZbQeEgGbKtW%3jE7f7`S=WcwRS<;b1;Cm$Ly=7^!@xht~q^-fP~ zc|!9aQUSiqwJ1^Z?R54vz{XT-zLQ*>I{il9ryAFITa9gC!)|?F7VmV?pq^p$7bi@! z@TdU8Xu}O!-nuS}^>p*z;M8oRzYI507)_gl_h5~$2aZBeU!Qo15Q%$Vr)wkW1kGFp uyJA|mK3tyrj*$HSaDi5ig?!i(_T^=h&m$6cywO3M7e?Ge4sY3Y=)&LnX4o76 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener-members.html b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener-members.html new file mode 100644 index 000000000..759a3407a --- /dev/null +++ b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener-members.html @@ -0,0 +1,92 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_utils::testutils::PredicatesListener Member List
+
+
+ +

This is the complete list of members for modulo_utils::testutils::PredicatesListener, including all inherited members.

+ + + + + +
get_predicate_future() const (defined in modulo_utils::testutils::PredicatesListener)modulo_utils::testutils::PredicatesListener
get_predicate_values() const (defined in modulo_utils::testutils::PredicatesListener)modulo_utils::testutils::PredicatesListener
PredicatesListener(const std::string &component, const std::vector< std::string > &predicates, const rclcpp::NodeOptions &node_options=rclcpp::NodeOptions()) (defined in modulo_utils::testutils::PredicatesListener)modulo_utils::testutils::PredicatesListener
reset_future() (defined in modulo_utils::testutils::PredicatesListener)modulo_utils::testutils::PredicatesListener
+ + + + diff --git a/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener.html b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener.html new file mode 100644 index 000000000..4850e23d6 --- /dev/null +++ b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener.html @@ -0,0 +1,208 @@ + + + + + + + +Modulo: modulo_utils::testutils::PredicatesListener Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_utils::testutils::PredicatesListener Class Reference
+
+
+
+Inheritance diagram for modulo_utils::testutils::PredicatesListener:
+
+
+ +
+ + + + + + + + + + +

+Public Member Functions

 PredicatesListener (const std::string &component, const std::vector< std::string > &predicates, const rclcpp::NodeOptions &node_options=rclcpp::NodeOptions())
 
void reset_future ()
 
const std::shared_future< void > & get_predicate_future () const
 
const std::map< std::string, bool > & get_predicate_values () const
 
+

Detailed Description

+
+

Definition at line 13 of file PredicatesListener.hpp.

+

Constructor & Destructor Documentation

+ +

◆ PredicatesListener()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
modulo_utils::testutils::PredicatesListener::PredicatesListener (const std::string & component,
const std::vector< std::string > & predicates,
const rclcpp::NodeOptions & node_options = rclcpp::NodeOptions() 
)
+
+ +

Definition at line 5 of file PredicatesListener.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ get_predicate_future()

+ +
+
+ + + + + + + +
const std::shared_future< void > & modulo_utils::testutils::PredicatesListener::get_predicate_future () const
+
+ +

Definition at line 32 of file PredicatesListener.cpp.

+ +
+
+ +

◆ get_predicate_values()

+ +
+
+ + + + + + + +
const std::map< std::string, bool > & modulo_utils::testutils::PredicatesListener::get_predicate_values () const
+
+ +

Definition at line 36 of file PredicatesListener.cpp.

+ +
+
+ +

◆ reset_future()

+ +
+
+ + + + + + + +
void modulo_utils::testutils::PredicatesListener::reset_future ()
+
+ +

Definition at line 27 of file PredicatesListener.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener.png b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_predicates_listener.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7d53c6087b89e92d82c8d244681dc7f6465558 GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^?}0dggBeI3GrFV=q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB);C<^>f^(0^_jN& zU!MOR#`5C4%FPo~O+D*ePI^x|pJ5U=>CYCpQ`F*&Hy5%n%)h|Tz_a9FMSa~dCb^#S zL$X{ICimW)XAp=y$<0tWbq|9;I0=jo{3#$WPcrG56h7&ZR;8-uI=#y8E9YHKi9h!9 zyx*ZYJI?ESTCMo{rcLkJ_V(}J_q=_hnt%LnO5-^>k6Xugr+cmnsaX5w`L5fSe`npa z`=hDz?Pf^Y-O8T|vxCpqK95zKebxN1*-NM2pKZ^aUtKvXcRly}(+ibq{_a?H$jWoF zUYpO=2`jB*jvc@Hw{3pgs&}2U*KfY}?fTq&;rAtT?cRTUB%0m6f9HPH?Tecs7?{C@J{XJlT^x?3Q{5!RwdZsr&i2XL)vYyX8-u~|S=;yW9Ch6Z;K&f9u7UAaDMihjWKmHCTyKVDgV zcZL41&zFi{U#R{V=6lO@)vN#SKK&1$)b!H7GG01Lc8f}F|EC&Y7{LPz94TM8pQfvD Uu9h<~113NQPgg&ebxsLQ0O*But^fc4 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client-members.html b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client-members.html new file mode 100644 index 000000000..099f49368 --- /dev/null +++ b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client-members.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_utils::testutils::ServiceClient< SrvT > Member List
+
+
+ +

This is the complete list of members for modulo_utils::testutils::ServiceClient< SrvT >, including all inherited members.

+ + + + +
call_async(const std::shared_ptr< typename SrvT::Request > &request) (defined in modulo_utils::testutils::ServiceClient< SrvT >)modulo_utils::testutils::ServiceClient< SrvT >inline
client_ (defined in modulo_utils::testutils::ServiceClient< SrvT >)modulo_utils::testutils::ServiceClient< SrvT >
ServiceClient(const rclcpp::NodeOptions &options, const std::string &service) (defined in modulo_utils::testutils::ServiceClient< SrvT >)modulo_utils::testutils::ServiceClient< SrvT >inline
+ + + + diff --git a/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client.html b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client.html new file mode 100644 index 000000000..faa2752ef --- /dev/null +++ b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client.html @@ -0,0 +1,206 @@ + + + + + + + +Modulo: modulo_utils::testutils::ServiceClient< SrvT > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
modulo_utils::testutils::ServiceClient< SrvT > Class Template Reference
+
+
+
+Inheritance diagram for modulo_utils::testutils::ServiceClient< SrvT >:
+
+
+ +
+ + + + + + +

+Public Member Functions

 ServiceClient (const rclcpp::NodeOptions &options, const std::string &service)
 
rclcpp::Client< SrvT >::FutureAndRequestId call_async (const std::shared_ptr< typename SrvT::Request > &request)
 
+ + + +

+Public Attributes

std::shared_ptr< rclcpp::Client< SrvT > > client_
 
+

Detailed Description

+
template<typename SrvT>
+class modulo_utils::testutils::ServiceClient< SrvT >
+

Definition at line 13 of file ServiceClient.hpp.

+

Constructor & Destructor Documentation

+ +

◆ ServiceClient()

+ +
+
+
+template<typename SrvT >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
modulo_utils::testutils::ServiceClient< SrvT >::ServiceClient (const rclcpp::NodeOptions & options,
const std::string & service 
)
+
+inline
+
+ +

Definition at line 15 of file ServiceClient.hpp.

+ +
+
+

Member Function Documentation

+ +

◆ call_async()

+ +
+
+
+template<typename SrvT >
+ + + + + +
+ + + + + + + + +
rclcpp::Client< SrvT >::FutureAndRequestId modulo_utils::testutils::ServiceClient< SrvT >::call_async (const std::shared_ptr< typename SrvT::Request > & request)
+
+inline
+
+ +

Definition at line 22 of file ServiceClient.hpp.

+ +
+
+

Member Data Documentation

+ +

◆ client_

+ +
+
+
+template<typename SrvT >
+ + + + +
std::shared_ptr<rclcpp::Client<SrvT> > modulo_utils::testutils::ServiceClient< SrvT >::client_
+
+ +

Definition at line 26 of file ServiceClient.hpp.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • /github/workspace/source/modulo_utils/include/modulo_utils/testutils/ServiceClient.hpp
  • +
+
+ + + + diff --git a/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client.png b/versions/v4.2.2/classmodulo__utils_1_1testutils_1_1_service_client.png new file mode 100644 index 0000000000000000000000000000000000000000..31fbccf02acdf077e50035affb494cbea131f1b6 GIT binary patch literal 742 zcmeAS@N?(olHy`uVBq!ia0y~yU}Ocd12~w0q3f*F8(FfeDDeT9L6snFBKF{Fa=?cCdCEe0H} z50|$8|Np3O7Wb1!H?F?&IewY-tj7eEXr}dxR#jDtvNp`t)||iuL=6hlgKorU&F-}m z&wV#nW6foGFURSNZK8^-g8w~bfBvFon&o#EhV+-LB4Ql3Ki*mYWl6*2SJQmIax(Z` z)-GB&M``X#sl%MM6YCfnE`QmpvE;R|rcOOW!J>c6Tnq)9;@lIL>+Pt!5HhiUm!N-@ z3+tDSwoD9GrQ*yCach@2aOp2&V8~wrWB?IEla0oTRrg|DUE0f>NAEqX-bWsBnPY-qgXO$Qq=;8YD1L0b+!bPzy+bhoegq$a9Bw2L^=h z-P<*5=G_=iu+}p=C-hpaOpB{-m`mZuXR2gpO#ZBJrg6tgMrnd!yxs$SzPr7_!I-GhtT0s4;@8|i8`SGPTx6EWdDj!+n`Tyj_uIK( z-XXJ_K`XA6zTl1*-tct(Wh*Y+1-Q|&-ySXaP1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/dir_005db6f82a7eca80f4e3827434b589b4.html b/versions/v4.2.2/dir_005db6f82a7eca80f4e3827434b589b4.html new file mode 100644 index 000000000..6ce5f699e --- /dev/null +++ b/versions/v4.2.2/dir_005db6f82a7eca80f4e3827434b589b4.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/src/testutils Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
testutils Directory Reference
+
+
+ + + + +

+Files

 PredicatesListener.cpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_049f97fddacb7dc6e4c718ac904130b4.html b/versions/v4.2.2/dir_049f97fddacb7dc6e4c718ac904130b4.html new file mode 100644 index 000000000..00b3534a9 --- /dev/null +++ b/versions/v4.2.2/dir_049f97fddacb7dc6e4c718ac904130b4.html @@ -0,0 +1,101 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/exceptions Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
exceptions Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

 CoreException.hpp
 
 InvalidPointerCastException.hpp
 
 InvalidPointerException.hpp
 
 MessageTranslationException.hpp
 
 NullPointerException.hpp
 
 ParameterTranslationException.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_05a91d83eeac941ff7d1774756f408e0.html b/versions/v4.2.2/dir_05a91d83eeac941ff7d1774756f408e0.html new file mode 100644 index 000000000..20048bd18 --- /dev/null +++ b/versions/v4.2.2/dir_05a91d83eeac941ff7d1774756f408e0.html @@ -0,0 +1,102 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components Directory Reference
+
+
+ + + + + + +

+Directories

 exceptions
 
 utilities
 
+ + + + + + + +

+Files

 Component.hpp
 
 ComponentInterface.hpp
 
 LifecycleComponent.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_0e754abea120a9c0c4911cca1dd0951c.html b/versions/v4.2.2/dir_0e754abea120a9c0c4911cca1dd0951c.html new file mode 100644 index 000000000..ff2def45e --- /dev/null +++ b/versions/v4.2.2/dir_0e754abea120a9c0c4911cca1dd0951c.html @@ -0,0 +1,93 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
src Directory Reference
+
+
+ + + + + + +

+Files

 ControllerInterface.cpp
 
 RobotControllerInterface.cpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_1086284b706fbaee53263fa501af42e8.html b/versions/v4.2.2/dir_1086284b706fbaee53263fa501af42e8.html new file mode 100644 index 000000000..dfe793119 --- /dev/null +++ b/versions/v4.2.2/dir_1086284b706fbaee53263fa501af42e8.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/include/modulo_controllers/utils Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
utils Directory Reference
+
+
+ + + + +

+Files

 utilities.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_2397dea4246cf971150250488a69dca4.html b/versions/v4.2.2/dir_2397dea4246cf971150250488a69dca4.html new file mode 100644 index 000000000..6dc0c4c1e --- /dev/null +++ b/versions/v4.2.2/dir_2397dea4246cf971150250488a69dca4.html @@ -0,0 +1,100 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core Directory Reference
+
+
+ + + + + + + + +

+Directories

 communication
 
 exceptions
 
 translators
 
+ + + +

+Files

 EncodedState.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_27c37b9b3673e5d3fc7170b21f143cd2.html b/versions/v4.2.2/dir_27c37b9b3673e5d3fc7170b21f143cd2.html new file mode 100644 index 000000000..a7b26b86c --- /dev/null +++ b/versions/v4.2.2/dir_27c37b9b3673e5d3fc7170b21f143cd2.html @@ -0,0 +1,98 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/include/modulo_controllers Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_controllers Directory Reference
+
+
+ + + + +

+Directories

 utils
 
+ + + + + +

+Files

 ControllerInterface.hpp
 
 RobotControllerInterface.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_30c9960b1e12cf048409514a1d0c5545.html b/versions/v4.2.2/dir_30c9960b1e12cf048409514a1d0c5545.html new file mode 100644 index 000000000..256ee4295 --- /dev/null +++ b/versions/v4.2.2/dir_30c9960b1e12cf048409514a1d0c5545.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
include Directory Reference
+
+
+ + + + +

+Directories

 modulo_core
 
+
+ + + + diff --git a/versions/v4.2.2/dir_349657725b3f4f657efe86018f81caee.html b/versions/v4.2.2/dir_349657725b3f4f657efe86018f81caee.html new file mode 100644 index 000000000..a7431121e --- /dev/null +++ b/versions/v4.2.2/dir_349657725b3f4f657efe86018f81caee.html @@ -0,0 +1,95 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/translators Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
translators Directory Reference
+
+
+ + + + + + + + +

+Files

 message_readers.cpp
 
 message_writers.cpp
 
 parameter_translators.cpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_3e8f83d5963dbe4a7be4947f2eff491b.html b/versions/v4.2.2/dir_3e8f83d5963dbe4a7be4947f2eff491b.html new file mode 100644 index 000000000..0b35a9944 --- /dev/null +++ b/versions/v4.2.2/dir_3e8f83d5963dbe4a7be4947f2eff491b.html @@ -0,0 +1,85 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
include Directory Reference
+
+
+
+ + + + diff --git a/versions/v4.2.2/dir_5442966453c41df6861b650ae85469b6.html b/versions/v4.2.2/dir_5442966453c41df6861b650ae85469b6.html new file mode 100644 index 000000000..493958c70 --- /dev/null +++ b/versions/v4.2.2/dir_5442966453c41df6861b650ae85469b6.html @@ -0,0 +1,95 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/translators Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
translators Directory Reference
+
+
+ + + + + + + + +

+Files

 message_readers.hpp
 
 message_writers.hpp
 
 parameter_translators.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_5b0a4e6091157a5e3a1c0d77b65afe7a.html b/versions/v4.2.2/dir_5b0a4e6091157a5e3a1c0d77b65afe7a.html new file mode 100644 index 000000000..b91c27e0c --- /dev/null +++ b/versions/v4.2.2/dir_5b0a4e6091157a5e3a1c0d77b65afe7a.html @@ -0,0 +1,99 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/communication Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
communication Directory Reference
+
+
+ + + + + + + + + + + + +

+Files

 MessagePair.cpp
 
 MessagePairInterface.cpp
 
 PublisherInterface.cpp
 
 SubscriptionHandler.cpp
 
 SubscriptionInterface.cpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_6df23892ff328103ad3e309d3548417b.html b/versions/v4.2.2/dir_6df23892ff328103ad3e309d3548417b.html new file mode 100644 index 000000000..9440d5685 --- /dev/null +++ b/versions/v4.2.2/dir_6df23892ff328103ad3e309d3548417b.html @@ -0,0 +1,85 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_component_interfaces Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_component_interfaces Directory Reference
+
+
+
+ + + + diff --git a/versions/v4.2.2/dir_727f33ea6496bb66c2db4f7101f40bd7.html b/versions/v4.2.2/dir_727f33ea6496bb66c2db4f7101f40bd7.html new file mode 100644 index 000000000..bb21cfdba --- /dev/null +++ b/versions/v4.2.2/dir_727f33ea6496bb66c2db4f7101f40bd7.html @@ -0,0 +1,85 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_core Directory Reference
+
+
+
+ + + + diff --git a/versions/v4.2.2/dir_880c3100161de164f55db9e5265190dd.html b/versions/v4.2.2/dir_880c3100161de164f55db9e5265190dd.html new file mode 100644 index 000000000..a0ba9d163 --- /dev/null +++ b/versions/v4.2.2/dir_880c3100161de164f55db9e5265190dd.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
include Directory Reference
+
+
+ + + + +

+Directories

 modulo_controllers
 
+
+ + + + diff --git a/versions/v4.2.2/dir_97c9a08c8a0ff5d05b217f6e73862a8f.html b/versions/v4.2.2/dir_97c9a08c8a0ff5d05b217f6e73862a8f.html new file mode 100644 index 000000000..62578595b --- /dev/null +++ b/versions/v4.2.2/dir_97c9a08c8a0ff5d05b217f6e73862a8f.html @@ -0,0 +1,93 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/include/modulo_utils/testutils Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
testutils Directory Reference
+
+
+ + + + + + +

+Files

 PredicatesListener.hpp
 
 ServiceClient.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_9d27c852c776d117417a91cf72db7998.html b/versions/v4.2.2/dir_9d27c852c776d117417a91cf72db7998.html new file mode 100644 index 000000000..5fea35bed --- /dev/null +++ b/versions/v4.2.2/dir_9d27c852c776d117417a91cf72db7998.html @@ -0,0 +1,93 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/utilities Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
utilities Directory Reference
+
+
+ + + + + + +

+Files

 predicate_variant.hpp
 
 utilities.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_a02cdc010ded81c7c2ac77993f10de2b.html b/versions/v4.2.2/dir_a02cdc010ded81c7c2ac77993f10de2b.html new file mode 100644 index 000000000..49ad8dc98 --- /dev/null +++ b/versions/v4.2.2/dir_a02cdc010ded81c7c2ac77993f10de2b.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
include Directory Reference
+
+
+ + + + +

+Directories

 modulo_components
 
+
+ + + + diff --git a/versions/v4.2.2/dir_a6c74a7b9b9addb9dd4654e424e31fd8.html b/versions/v4.2.2/dir_a6c74a7b9b9addb9dd4654e424e31fd8.html new file mode 100644 index 000000000..d6f7fd91d --- /dev/null +++ b/versions/v4.2.2/dir_a6c74a7b9b9addb9dd4654e424e31fd8.html @@ -0,0 +1,93 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
src Directory Reference
+
+
+ + + + + + +

+Directories

 communication
 
 translators
 
+
+ + + + diff --git a/versions/v4.2.2/dir_ad135c18ceef0560346390faedbedc87.html b/versions/v4.2.2/dir_ad135c18ceef0560346390faedbedc87.html new file mode 100644 index 000000000..bb830b5c7 --- /dev/null +++ b/versions/v4.2.2/dir_ad135c18ceef0560346390faedbedc87.html @@ -0,0 +1,85 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_utils Directory Reference
+
+
+
+ + + + diff --git a/versions/v4.2.2/dir_b0672ca90b2cc70fcfe3af0eed4bd360.html b/versions/v4.2.2/dir_b0672ca90b2cc70fcfe3af0eed4bd360.html new file mode 100644 index 000000000..2cc4010bf --- /dev/null +++ b/versions/v4.2.2/dir_b0672ca90b2cc70fcfe3af0eed4bd360.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
src Directory Reference
+
+
+ + + + +

+Directories

 testutils
 
+
+ + + + diff --git a/versions/v4.2.2/dir_b2f33c71d4aa5e7af42a1ca61ff5af1b.html b/versions/v4.2.2/dir_b2f33c71d4aa5e7af42a1ca61ff5af1b.html new file mode 100644 index 000000000..4e6310ba7 --- /dev/null +++ b/versions/v4.2.2/dir_b2f33c71d4aa5e7af42a1ca61ff5af1b.html @@ -0,0 +1,85 @@ + + + + + + + +Modulo: /github/workspace/source Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
source Directory Reference
+
+
+
+ + + + diff --git a/versions/v4.2.2/dir_b6467040e22f64a215d0cd51303d2b49.html b/versions/v4.2.2/dir_b6467040e22f64a215d0cd51303d2b49.html new file mode 100644 index 000000000..a41abe68f --- /dev/null +++ b/versions/v4.2.2/dir_b6467040e22f64a215d0cd51303d2b49.html @@ -0,0 +1,105 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/communication Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
communication Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Files

 MessagePair.hpp
 
 MessagePairInterface.hpp
 
 MessageType.hpp
 
 PublisherHandler.hpp
 
 PublisherInterface.hpp
 
 PublisherType.hpp
 
 SubscriptionHandler.hpp
 
 SubscriptionInterface.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_bc830b16dafc1f86e0bebd2067294caf.html b/versions/v4.2.2/dir_bc830b16dafc1f86e0bebd2067294caf.html new file mode 100644 index 000000000..0fcbd07be --- /dev/null +++ b/versions/v4.2.2/dir_bc830b16dafc1f86e0bebd2067294caf.html @@ -0,0 +1,95 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
src Directory Reference
+
+
+ + + + + + + + +

+Files

 Component.cpp
 
 ComponentInterface.cpp
 
 LifecycleComponent.cpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_d3939449d8b726061fb0cfc517c3fd5f.html b/versions/v4.2.2/dir_d3939449d8b726061fb0cfc517c3fd5f.html new file mode 100644 index 000000000..0e77a662d --- /dev/null +++ b/versions/v4.2.2/dir_d3939449d8b726061fb0cfc517c3fd5f.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_controllers Directory Reference
+
+
+ + + + +

+Directories

 src
 
+
+ + + + diff --git a/versions/v4.2.2/dir_f43720a52722f25f1201bb3ff6bb7f0f.html b/versions/v4.2.2/dir_f43720a52722f25f1201bb3ff6bb7f0f.html new file mode 100644 index 000000000..e6c0bea67 --- /dev/null +++ b/versions/v4.2.2/dir_f43720a52722f25f1201bb3ff6bb7f0f.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_utils/include/modulo_utils Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_utils Directory Reference
+
+
+ + + + +

+Directories

 testutils
 
+
+ + + + diff --git a/versions/v4.2.2/dir_f9a68d619a1bb26c95560bd0519ddde7.html b/versions/v4.2.2/dir_f9a68d619a1bb26c95560bd0519ddde7.html new file mode 100644 index 000000000..8b80cbdc3 --- /dev/null +++ b/versions/v4.2.2/dir_f9a68d619a1bb26c95560bd0519ddde7.html @@ -0,0 +1,85 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_interfaces Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_interfaces Directory Reference
+
+
+
+ + + + diff --git a/versions/v4.2.2/dir_fc328347369410c3380b696ba11ab788.html b/versions/v4.2.2/dir_fc328347369410c3380b696ba11ab788.html new file mode 100644 index 000000000..905d4a16c --- /dev/null +++ b/versions/v4.2.2/dir_fc328347369410c3380b696ba11ab788.html @@ -0,0 +1,99 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/exceptions Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
exceptions Directory Reference
+
+
+ + + + + + + + + + + + +

+Files

 AddServiceException.hpp
 
 AddSignalException.hpp
 
 ComponentException.hpp
 
 ComponentParameterException.hpp
 
 LookupTransformException.hpp
 
+
+ + + + diff --git a/versions/v4.2.2/dir_fe0b512c3e8d43ae6faf41ba22286ee8.html b/versions/v4.2.2/dir_fe0b512c3e8d43ae6faf41ba22286ee8.html new file mode 100644 index 000000000..32ef3f32a --- /dev/null +++ b/versions/v4.2.2/dir_fe0b512c3e8d43ae6faf41ba22286ee8.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
modulo_components Directory Reference
+
+
+ + + + +

+Directories

 src
 
+
+ + + + diff --git a/versions/v4.2.2/doc.svg b/versions/v4.2.2/doc.svg new file mode 100644 index 000000000..0b928a531 --- /dev/null +++ b/versions/v4.2.2/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/versions/v4.2.2/docd.svg b/versions/v4.2.2/docd.svg new file mode 100644 index 000000000..ac18b2755 --- /dev/null +++ b/versions/v4.2.2/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/versions/v4.2.2/doxygen.css b/versions/v4.2.2/doxygen.css new file mode 100644 index 000000000..009a9b554 --- /dev/null +++ b/versions/v4.2.2/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/versions/v4.2.2/doxygen.svg b/versions/v4.2.2/doxygen.svg new file mode 100644 index 000000000..79a763540 --- /dev/null +++ b/versions/v4.2.2/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/versions/v4.2.2/dynsections.js b/versions/v4.2.2/dynsections.js new file mode 100644 index 000000000..9b281563f --- /dev/null +++ b/versions/v4.2.2/dynsections.js @@ -0,0 +1,199 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ +$(document).ready(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/versions/v4.2.2/files.html b/versions/v4.2.2/files.html new file mode 100644 index 000000000..9ac4e77a1 --- /dev/null +++ b/versions/v4.2.2/files.html @@ -0,0 +1,159 @@ + + + + + + + +Modulo: File List + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123456]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  source
  modulo_components
  include
  modulo_components
  exceptions
 AddServiceException.hpp
 AddSignalException.hpp
 ComponentException.hpp
 ComponentParameterException.hpp
 LookupTransformException.hpp
  utilities
 predicate_variant.hpp
 utilities.hpp
 Component.hpp
 ComponentInterface.hpp
 LifecycleComponent.hpp
  src
 Component.cpp
 ComponentInterface.cpp
 LifecycleComponent.cpp
  modulo_controllers
  include
  modulo_controllers
  utils
 utilities.hpp
 ControllerInterface.hpp
 RobotControllerInterface.hpp
  src
 ControllerInterface.cpp
 RobotControllerInterface.cpp
  modulo_core
  include
  modulo_core
  communication
 MessagePair.hpp
 MessagePairInterface.hpp
 MessageType.hpp
 PublisherHandler.hpp
 PublisherInterface.hpp
 PublisherType.hpp
 SubscriptionHandler.hpp
 SubscriptionInterface.hpp
  exceptions
 CoreException.hpp
 InvalidPointerCastException.hpp
 InvalidPointerException.hpp
 MessageTranslationException.hpp
 NullPointerException.hpp
 ParameterTranslationException.hpp
  translators
 message_readers.hpp
 message_writers.hpp
 parameter_translators.hpp
 EncodedState.hpp
  src
  communication
 MessagePair.cpp
 MessagePairInterface.cpp
 PublisherInterface.cpp
 SubscriptionHandler.cpp
 SubscriptionInterface.cpp
  translators
 message_readers.cpp
 message_writers.cpp
 parameter_translators.cpp
  modulo_utils
  include
  modulo_utils
  testutils
 PredicatesListener.hpp
 ServiceClient.hpp
  src
  testutils
 PredicatesListener.cpp
+
+
+ + + + diff --git a/versions/v4.2.2/folderclosed.svg b/versions/v4.2.2/folderclosed.svg new file mode 100644 index 000000000..b04bed2e7 --- /dev/null +++ b/versions/v4.2.2/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/versions/v4.2.2/folderclosedd.svg b/versions/v4.2.2/folderclosedd.svg new file mode 100644 index 000000000..52f0166a2 --- /dev/null +++ b/versions/v4.2.2/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/versions/v4.2.2/folderopen.svg b/versions/v4.2.2/folderopen.svg new file mode 100644 index 000000000..f6896dd25 --- /dev/null +++ b/versions/v4.2.2/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/versions/v4.2.2/folderopend.svg b/versions/v4.2.2/folderopend.svg new file mode 100644 index 000000000..2d1f06e7b --- /dev/null +++ b/versions/v4.2.2/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/versions/v4.2.2/functions.html b/versions/v4.2.2/functions.html new file mode 100644 index 000000000..ab726b64a --- /dev/null +++ b/versions/v4.2.2/functions.html @@ -0,0 +1,265 @@ + + + + + + + +Modulo: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- ~ -

+
+ + + + diff --git a/versions/v4.2.2/functions_func.html b/versions/v4.2.2/functions_func.html new file mode 100644 index 000000000..b4e2a05aa --- /dev/null +++ b/versions/v4.2.2/functions_func.html @@ -0,0 +1,249 @@ + + + + + + + +Modulo: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- ~ -

+
+ + + + diff --git a/versions/v4.2.2/functions_vars.html b/versions/v4.2.2/functions_vars.html new file mode 100644 index 000000000..b3b3fe22a --- /dev/null +++ b/versions/v4.2.2/functions_vars.html @@ -0,0 +1,88 @@ + + + + + + + +Modulo: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+
+ + + + diff --git a/versions/v4.2.2/hierarchy.html b/versions/v4.2.2/hierarchy.html new file mode 100644 index 000000000..0c993de53 --- /dev/null +++ b/versions/v4.2.2/hierarchy.html @@ -0,0 +1,120 @@ + + + + + + + +Modulo: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cmodulo_components::ComponentInterfaceBase interface class for modulo components to wrap a ROS Node with custom behaviour
 Cmodulo_components::ComponentA wrapper for rclcpp::Node to simplify application composition through unified component interfaces
 Cmodulo_components::LifecycleComponentA wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified component interfaces while supporting lifecycle states and transitions
 CComponentInterfacePublicInterfaceFriend class to the ComponentInterface to allow test fixtures to access protected and private members
 Cmodulo_components::ComponentServiceResponseResponse structure to be returned by component services
 Cmodulo_controllers::ControllerInputInput structure to save topic data in a realtime buffer and timestamps in one object
 Ccontroller_interface::ControllerInterface
 Cmodulo_controllers::ControllerInterfaceBase controller class to combine ros2_control, control libraries and modulo
 Cmodulo_controllers::RobotControllerInterfaceBase controller class that automatically associates joints with a JointState object
 Cmodulo_controllers::ControllerServiceResponseResponse structure to be returned by controller services
 Cstd::enable_shared_from_this
 Cmodulo_core::communication::MessagePairInterfaceInterface class to enable non-templated writing and reading ROS messages from derived MessagePair instances through dynamic down-casting
 Cmodulo_core::communication::MessagePair< MsgT, DataT >The MessagePair stores a pointer to a variable and translates the value of this pointer back and forth between the corresponding ROS messages
 Cmodulo_core::communication::PublisherInterfaceInterface class to enable non-templated activating/deactivating/publishing of ROS publishers from derived PublisherHandler instances through dynamic down-casting
 Cmodulo_core::communication::PublisherHandler< PubT, MsgT >The PublisherHandler handles different types of ROS publishers to activate, deactivate and publish data with those publishers
 Cmodulo_core::communication::SubscriptionInterfaceInterface class to enable non-templated subscriptions with ROS subscriptions from derived SubscriptionHandler instances through dynamic down-casting
 Cmodulo_core::communication::SubscriptionHandler< MsgT >The SubscriptionHandler handles different types of ROS subscriptions to receive data from those subscriptions
 Crclcpp_lifecycle::LifecycleNode
 Cmodulo_components::LifecycleComponentA wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified component interfaces while supporting lifecycle states and transitions
 Crclcpp::Node
 Cmodulo_components::ComponentA wrapper for rclcpp::Node to simplify application composition through unified component interfaces
 Cmodulo_utils::testutils::PredicatesListener
 Cmodulo_utils::testutils::ServiceClient< SrvT >
 Cstd::runtime_error
 Cmodulo_components::exceptions::ComponentExceptionA base class for all component exceptions
 Cmodulo_components::exceptions::AddServiceExceptionAn exception class to notify errors when adding a service
 Cmodulo_components::exceptions::AddSignalExceptionAn exception class to notify errors when adding a signal
 Cmodulo_components::exceptions::ComponentParameterExceptionAn exception class to notify errors with component parameters
 Cmodulo_components::exceptions::LookupTransformExceptionAn exception class to notify an error while looking up TF transforms
 Cmodulo_core::exceptions::CoreExceptionA base class for all core exceptions
 Cmodulo_core::exceptions::InvalidPointerCastExceptionAn exception class to notify if the result of getting an instance of a derived class through dynamic down-casting of an object of the base class is not a correctly typed instance of the derived class
 Cmodulo_core::exceptions::InvalidPointerExceptionAn exception class to notify if an object has no reference count (if the object is not owned by any pointer) when attempting to get a derived instance through dynamic down-casting
 Cmodulo_core::exceptions::MessageTranslationExceptionAn exception class to notify that the translation of a ROS message failed
 Cmodulo_core::exceptions::NullPointerExceptionAn exception class to notify that a certain pointer is null
 Cmodulo_core::exceptions::ParameterTranslationExceptionAn exception class to notify incompatibility when translating parameters from different sources
+
+
+ + + + diff --git a/versions/v4.2.2/index.html b/versions/v4.2.2/index.html new file mode 100644 index 000000000..465e5e9c7 --- /dev/null +++ b/versions/v4.2.2/index.html @@ -0,0 +1,119 @@ + + + + + + + +Modulo: Modulo + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Modulo
+
+
+

Modulo is part of the AICA robotics framework.

+

It is an extension layer to ROS 2 that adds interoperability support for aica-technology/control-libraries and provides a modular framework for application composition through custom component classes in both C++ and Python.

+

Modulo API documentation is available at aica-technology.github.io/modulo.

+

To start developing custom components and controllers with modulo, refer to the aica-technology/component-template repository and corresponding documentation at https://docs.aica.tech/docs/category/custom-components.

+

Modulo Core

+

The core package implements interoperability between ROS 2 and state_representation data types, allowing state data and parameters to be directly translated and handled as messages on the ROS 2 interface layer.

+

Modulo Components

+

Modulo components are wrappers for ROS 2 Nodes which abstract low-level ROS methods for greater user convenience and consistency between components.

+

While ROS 2 Nodes provide a highly flexible and customizable interface, there is often a significant amount of boilerplate code that is duplicated with each new Node. In addition, the interoperability of multiple nodes in an application depends on them using compatible message types and behaving in a generally consistent manner.

+

The component classes are intended to simplify the development of compatible application modules. They provide more concise methods for adding parameters, services, transforms, topic subscriptions and publications. They also introduce new concepts such as predicate broadcasting, error handling and the direct binding of data attributes to their corresponding interface.

+

The package provides two variant classes: modulo_components::Component and modulo_components::LifecycleComponent. See the package documentation for more information.

+

Modulo Component Interfaces

+

This package defines custom standard interfaces for modulo components.

+

Modulo Utils

+

This package contains shared test fixtures.

+
+

Additional resources

+

Interfacing with ROS 1

+

It is possible to use a bridge service to interface ROS 2 with ROS 1 in order to publish/subscribe to topics from ROS 1.

+

ROS provides a docker image with this service. Run the following lines to pull the bridge image, launch an interactive shell, and subsequently start the bridge topic.

+
# run the bridge image interactively
+
docker run --rm -it --net=host ros:galactic-ros1-bridge
+
# start the bridge service in the container
+
root@docker-desktop:/# ros2 run ros1_bridge dynamic_bridge --bridge-all-topics
+

Further reading

+ +

Authors and maintainers

+ +
+
+ + + + diff --git a/versions/v4.2.2/jquery.js b/versions/v4.2.2/jquery.js new file mode 100644 index 000000000..1dffb65b5 --- /dev/null +++ b/versions/v4.2.2/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/versions/v4.2.2/md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html new file mode 100644 index 000000000..6273daebe --- /dev/null +++ b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html @@ -0,0 +1,93 @@ + + + + + + + +Modulo: Modulo Component Interfaces + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Modulo Component Interfaces
+
+
+

This package defines custom standard interfaces for modulo components.

+

Messages

+

Modulo component classes broadcast predicates to a global channel in a predicate message.

+

Predicate

+

The predicate message contains the component name, the predicate name, and the current value (true or false) of the predicate.

+

Services

+

Modulo component classes provide a simplified method to add services which trigger a pre-defined callback function. Services are either empty (with no request payload) or carry a string request. They return a common modulo_components::ComponentServiceResponse structure with a success flag and status message.

+

EmptyTrigger

+

The EmptyTrigger service request takes no parameters. The response contains a boolean success flag and a string message.

+

StringTrigger

+

The EmptyTrigger service request takes a string payload. The response contains a boolean success flag and a string message. It is the responsibility of the component to define the expected payload format and to document it appropriately.

+
+
+ + + + diff --git a/versions/v4.2.2/md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html new file mode 100644 index 000000000..478798149 --- /dev/null +++ b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html @@ -0,0 +1,101 @@ + + + + + + + +Modulo: Modulo Components + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Modulo Components
+
+
+

This package provides base component classes as wrappers for ROS2 Nodes for convenience and consistency when developing modules for a dynamically composed application.

+

Component

+

The modulo_components::Component (C++) and modulo_components.Component (Python) classes are wrappers for the standard ROS Node that simplify application composition through unified component interfaces.

+

This class is intended for direct inheritance to implement custom components that perform one-shot or externally triggered operations. Examples of triggered behavior include providing a service, processing signals or publishing outputs on a periodic timer. One-shot behaviors may include interacting with the filesystem or publishing a predefined sequence of outputs.

+

Developers should override on_validate_parameter_callback() if any parameters are added and on_execute_callback() to implement any one-shot behavior. In the latter case, execute() should be invoked at the end of the derived constructor.

+

LifecycleComponent

+

The modulo_components::Component (C++) and modulo_components.Component (Python) classes are state-based alternatives that follow the lifecycle pattern for managed nodes.

+

This class is intended for direct inheritance to implement custom state-based components that perform different behaviors based on their state and on state transitions. An example of state-based behaviour is a signal component that requires configuration steps to determine which inputs to register and subsequently should publish outputs only when the component is activated.

+

Developers should override on_validate_parameter_callback() if any parameters are added. In addition, the following state transition callbacks should be overridden whenever custom transition behavior is needed:

    +
  • on_configure_callback()
  • +
  • on_activate_callback()
  • +
  • on_deactivate_callback()
  • +
  • on_cleanup_callback()
  • +
  • on_shutdown_callback()
  • +
  • on_error_callback()
  • +
  • on_step_callback()
  • +
+

Further reading

+

See the generated C++ documentation for more details. Refer to the AICA Component SDK for usage examples and templates for creating custom components.

+
+
+ + + + diff --git a/versions/v4.2.2/md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html new file mode 100644 index 000000000..db79489d4 --- /dev/null +++ b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html @@ -0,0 +1,123 @@ + + + + + + + +Modulo: modulo-controllers + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
modulo-controllers
+
+
+

ROS 2 control interface classes for controllers in the AICA framework.

+

ControllerInterface

+

This C++ class derives from ros2_control ControllerInterface and incorporates modulo concepts like inputs, outputs, parameters, predicates, and services.

+

It supports the following parameters:

+
    +
  • hardware_name [string]: the name of the hardware interface
  • +
  • robot_description [string]: the string formatted content of the controller's URDF description
  • +
  • joints [string_array]: a vector of joint names that the controller will claim
  • +
  • activation_timeout [double]: the seconds to wait for valid data on state interfaces before activating
  • +
  • input_validity_period [double]: the maximum age of an input state before discarding it as expired
  • +
+

General behavior

+

The controller will claim either all or individually added state interfaces and individually added command interfaces. The class is intended to be used as a base class to implement any kind of controller.

+

The activation_timeout parameter gives the controller plugin and hardware interface additional time to read the initial states to prevent any NaN data from propagating through to the control logic.

+

RobotControllerInterface

+

The RobotControllerInterface is derived from the ControllerInterface. It incorporates JointState and CartesianState classes to leverage the robot_model::Model class for forward and inverse kinematics, and supports force-torque sensor data in CartesianWrench format.

+

Joints and control type

+

On top of any other individually added state interfaces, the controller will claim state interfaces matching the named joints, and read this state data into a JointState object.

+

It will claim individual command interfaces from the hardware interface according to the named joints and the specified control_type given to the class at construction. The hardware_name parameter determines the name of the JointState object.

+

This class is intended to be used as a base class to implement joint and task space controllers. They can set the joint command or access the joint state using the set_joint_command() and get_joint_state() methods, respectively.

+

Robot model and URDF

+

If a controller needs a robot model, a robot_model::Model will be configured from URDF information. To support this, the robot_description must be specified.

+

The robot model is used to calculate the CartesianState of a task frame from the JointState using forward kinematics, which is available to derived classes using the get_cartesian_state() method.

+

The task frame can be specified using the task_space_frame parameter. If left empty, the final link of the robot model will be used.

+

In certain cases, the joints parameter might not be in a physically correct order; for example, they might be sorted alphabetically, which makes the corresponding JointState incompatible with the actual order of joints in a robot system. If set to true, the sort_joints parameter orders the joint names to be physically correct using the robot model data.

+

Derived controllers can also access and leverage the robot model for more advanced behaviors such as inverse kinematics.

+

Force-Torque Sensor

+

If the ft_sensor_name and ft_sensor_reference_frame parameters are set, the controller will look for a matching sensor with the following state interfaces:

+
    +
  • force.x
  • +
  • force.y
  • +
  • force.z
  • +
  • torque.x
  • +
  • torque.y
  • +
  • torque.z
  • +
+

Derived controllers can use get_ft_sensor() to access a CartesianWrench object of the sensor data. If the ft_sensor_reference_frame matches the task_space_frame, the measured wrench will additionally be transformed to the robot base frame and applied to the Cartesian state of the robot that is available through get_cartesian_state().

+

General behavior

+

The command_half_life parameter is used to attenuate any dynamic commands (velocities, accelerations or torques) in case no new commands are received (i.e. if set_joint_command() was not called since the last controller update).

+

At each control step, the last command is scaled by a decay factor to cause an exponential fall-off towards zero. The decay factor is calculated in terms of the desired command half-life based on the control frequency. At the half-life time, the command value will be reduced by half. For example, a controller with a command half-life of 0.1 seconds will have the output command reduced by 50%, 25%, 12.5% and 6.25% at 0.1, 0.2, 0.3 and 0.4 seconds respectively.

+

The command_rate_limit parameter sets an upper bound on how much a command interface value can change at each control step. It is expressed in units per second. For example, a controller with a rate limit of 5.0 commanding the joint velocity interface at 100Hz (a control period of 0.01 seconds) will only allow the joint velocity to change by up to 0.05 radians per second at each control step, or at 5.0 radians per second, per second.

+
+
+ + + + diff --git a/versions/v4.2.2/md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html new file mode 100644 index 000000000..eedaee5da --- /dev/null +++ b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html @@ -0,0 +1,192 @@ + + + + + + + +Modulo: Modulo Core + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Modulo Core
+
+
+

Modulo Core is an interface package to support the interoperability of the Robot Operating System (ROS) with AICA control libraries by providing communication and translation utilities.

+

This package is specifically designed for ROS2 and was developed on Galactic Geochelone.

+

Communication

+

In ROS, applications communicate through publishers and subscribers. Communication is handled in a particular format (a ROS message), which includes a serialized representation of the data as well as a message header. For example, data of type bool maps to the standard message std_msgs::msg::Bool.

+

If application A wishes to send data to application B, a publisher of A and a subscriber of B must be configured to the same ROS message type. The data is written into the message format and published by A. B receives the message and can read the data back out.

+

MessagePair

+

The communication module simplifies the process of sending and receiving data by binding data types to their respective message types in a MessagePair. MessagePair objects are templated containers holding a pointer to the data. With a MessagePair instance, it is possible to set and get the data or read and write the corresponding message with simple access methods. The conversion between the data and the message when reading or writing is handled by the translators module.

+

MessageType

+

The supported groupings of data types and message types is defined by the MessageType enumeration. See the MessageType header file.

+ + + + + + + + + + + + + + + +
MessageType C++ data type ROS message type
BOOL bool std_msgs::msgs::Bool
INT32 int std_msgs::msgs::Int32
FLOAT64 double std_msgs::msgs::FLOAT64
FLOAT64_MUlTI_ARRAY std::vector<double> std_msgs::msgs::FLOAT64MultiArray
STRING std::string std_msgs::msgs::String
ENCODED_STATE state_representation::State modulo_core::EncodedState
+

Encoded State

+

The ENCODED_STATE type supports all classes in the family of state_representation::State. It uses the clproto serialization library from control_libraries to encode State type messages to and from a binary format. The message type modulo_core::EncodedState is equivalent to the ROS std_msgs::msg::UInt8MultiArray.

+

The helper function state_representation::make_shared_state(state_instance) can be used to inject any State-derived instance in a std::shared_ptr<state_representation::State> pointer for the MessagePair.

+

MessagePairInterface

+

As MessagePair instances need to be templated by the data type and message type, they can be somewhat verbose to manage directly. For example, storing multiple MessagePair instances in a container or passing them as function arguments would require additional templating.

+

The MessagePairInterface is the non-templated base class of the MessagePair. By injecting a reference to a MessagePair into a MessagePairInterface pointer, it is possible to manage any MessagePair in a generic, type-agnostic way.

+

The MessageType property of the MessagePairInterface allows introspection of the contained MessagePair type, and, through dynamic down-casting, both the MessagePair instance and contained data may be retrieved.

+

Publisher and Subscription Interfaces

+

To send and receive ROS messages, applications must create publishers and subscribers templated to the corresponding ROS message type. A ROS publisher provides a publish method which takes a ROS message as the argument. A ROS subscription forwards an incoming ROS message to a callback function.

+

By virtue of the MessagePair design pattern, the underlying ROS message types can be fully encapsulated and hidden from the user, allowing applications to simply publish and subscribe to supported data types.

+

Publisher

+

The PublisherHandler is a templated wrapper for a ROS publisher that additionally holds a MessagePair reference. This allows the user to invoke a publish() method without having to pass a ROS message as an argument. Instead, the data referenced by the MessagePair is automatically translated into a ROS message and published.

+

The PublisherHandler supports multiple publisher types, namely for standard or lifecycle publishers.

+

The intended pattern for the developer is shown below. There are a few more setup steps compared to creating a standard ROS publisher. However, once the publisher interface has been established, modifying and publishing the referenced data is greatly simplified.

+
++
+ +
typedef std_msgs::msg::FLOAT64 MsgT;
+
auto node = std::make_shared<rclcpp::Node>("example");
+
+
// hold a pointer reference to some data that should be published
+
auto data = std::make_shared<double>(1.0);
+
+
// make a MessagePair to bind the data pointer to the corresponding ROS message
+
auto message_pair = std::make_shared<MessagePair<MsgT, double>>(data, rclcpp::Clock());
+
+
// create the ROS publisher
+
auto publisher = node->create_publisher<MsgT>("topic", 10);
+
+
// create the PublisherHandler from the ROS publisher
+
auto publisher_handler =
+
std::make_shared<PublisherHandler<rclcpp::Publisher<MsgT>, MsgT>>(PublisherType::PUBLISHER, publisher);
+
+
// encapsulate the PublisherHandler in a PublisherInterface
+
std::shared_ptr<PublisherInterface> publisher_interface(publisher_handler);
+
+
// pass the MessagePair to the PublisherInterface
+
publisher_interface->set_message_pair(message_pair);
+
+
// now, the data can be published, with automatic translation of the data value into a ROS message
+
publisher_interface->publish();
+
+
// because the PublisherInterface holds a reference to the MessagePair, which in turn references the original data,
+
// any changes to the data value will be observed when publishing.
+
*data = 2.0;
+
publisher_interface->publish();
+
Modulo Core communication module for handling messages on publication and subscription interfaces.
+

Subscription

+

The SubscriptionHandler is a templated wrapper for a ROS subscription that additionally holds a MessagePair reference. When the subscription receives a message, the SubscriptionHandler callback automatically translates the ROS message and updates the value of the data referenced by the MessagePair.

+
++
+ +
typedef std_msgs::msg::FLOAT64 MsgT;
+
auto node = std::make_shared<rclcpp::Node>("example");
+
+
// hold a pointer reference to some data that should be published
+
auto data = std::make_shared<double>(1.0);
+
+
// make a MessagePair to bind the data pointer to the corresponding ROS message
+
auto message_pair = std::make_shared<MessagePair<MsgT, double>>(data, rclcpp::Clock());
+
+
// create the SubscriptionHandler
+
auto subscription_handler = std::make_shared<SubscriptionHandler<modulo_core::EncodedState>>(message_pair);
+
+
// create the ROS subscription and associate the SubscriptionHandler callback
+
auto subscription = node->create_subscription<modulo_core::EncodedState>(
+
"topic", 10, subscription_handler->get_callback());
+
+
// encapsulate the SubscriptionHandler in a SubscriptionInterface
+
auto subscription_interface = subscription_handler->create_subscription_interface(subscription);
+
+
// because the SubscriptionInterface holds a reference to the MessagePair, which in turn references the original data,
+
// any received ROS message will be translated to update the referenced data value
+
wait_until_some_subscription_received();
+
assert(*data == 2.0);
+
std_msgs::msg::UInt8MultiArray EncodedState
Define the EncodedState as UInt8MultiArray message type.
+

Translators

+

The translation module provides functions to convert between ROS2 and state_representation data types.

+

Message Translators

+

As described in the Communication section, the ROS framework uses specific message formats to send data between applications. Wrapping and unwrapping the data values to and from the ROS message is handled by the message translators.

+

The message readers set the value of a particular data type from the corresponding ROS message instance.

+

The message writers format the value of a data type into the corresponding ROS message instance.

+

Parameter Translators

+

Conceptually, parameters are a way to label and transfer data with a name-value relationship. A parameter has a name and a data value of a particular data type. On an interface level, this allows parameter values to be retrieved or written by name in order to determine or configure the behaviour of particular elements.

+

The ROS Parameter is a specific implementation of the parameter concept which, together with the ParameterMessage, can be used to read and write named parameters on application nodes through the ROS interface. The ROS Parameter supports only simple types (atomic types, strings and arrays).

+

The control libraries state_representation::Parameter is another implementation that supports more data types, including State-derived objects and matrices.

+

The parameter translator utilities in modulo_core::translators convert between ROS and state_representation parameter formats, so that parameters can be sent on the ROS interface but consumed as state_representation objects locally.

+
+
+ + + + diff --git a/versions/v4.2.2/md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html new file mode 100644 index 000000000..f2cc0e521 --- /dev/null +++ b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html @@ -0,0 +1,82 @@ + + + + + + + +Modulo: Modulo Interfaces + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Modulo Interfaces
+
+
+
+
+ + + + diff --git a/versions/v4.2.2/md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html new file mode 100644 index 000000000..0b27f0eab --- /dev/null +++ b/versions/v4.2.2/md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html @@ -0,0 +1,83 @@ + + + + + + + +Modulo: Modulo Utils + + + + + + + + + +
+
+ + + + + + +
+
Modulo 4.2.2 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Modulo Utils
+
+
+

Utils package for shared test fixtures

+
+
+ + + + diff --git a/versions/v4.2.2/menu.js b/versions/v4.2.2/menu.js new file mode 100644 index 000000000..b0b26936a --- /dev/null +++ b/versions/v4.2.2/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/versions/v4.2.2/menudata.js b/versions/v4.2.2/menudata.js new file mode 100644 index 000000000..9979bd6cc --- /dev/null +++ b/versions/v4.2.2/menudata.js @@ -0,0 +1,91 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"w",url:"namespacemembers.html#index_w"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"c",url:"namespacemembers_func.html#index_c"}, +{text:"g",url:"namespacemembers_func.html#index_g"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"w",url:"namespacemembers_func.html#index_w"}]}, +{text:"Typedefs",url:"namespacemembers_type.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"w",url:"functions.html#index_w"}, +{text:"~",url:"functions.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"w",url:"functions_func.html#index_w"}, +{text:"~",url:"functions_func.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/versions/v4.2.2/message__readers_8cpp_source.html b/versions/v4.2.2/message__readers_8cpp_source.html new file mode 100644 index 000000000..3faa754f0 --- /dev/null +++ b/versions/v4.2.2/message__readers_8cpp_source.html @@ -0,0 +1,229 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/translators/message_readers.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    message_readers.cpp
    +
    +
    +
    1#include "modulo_core/translators/message_readers.hpp"
    +
    2
    + +
    4
    +
    5static Eigen::Vector3d read_point(const geometry_msgs::msg::Point& message) {
    +
    6 return {message.x, message.y, message.z};
    +
    7}
    +
    8
    +
    9static Eigen::Vector3d read_vector3(const geometry_msgs::msg::Vector3& message) {
    +
    10 return {message.x, message.y, message.z};
    +
    11}
    +
    12
    +
    13static Eigen::Quaterniond read_quaternion(const geometry_msgs::msg::Quaternion& message) {
    +
    14 return {message.w, message.x, message.y, message.z};
    +
    15}
    +
    16
    +
    +
    17void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Accel& message) {
    +
    18 state.set_linear_acceleration(read_vector3(message.linear));
    +
    19 state.set_angular_acceleration(read_vector3(message.angular));
    +
    20}
    +
    +
    21
    +
    +
    22void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::AccelStamped& message) {
    +
    23 state.set_reference_frame(message.header.frame_id);
    +
    24 read_message(state, message.accel);
    +
    25}
    +
    +
    26
    +
    +
    27void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Pose& message) {
    +
    28 state.set_position(read_point(message.position));
    +
    29 state.set_orientation(read_quaternion(message.orientation));
    +
    30}
    +
    +
    31
    +
    +
    32void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::PoseStamped& message) {
    +
    33 state.set_reference_frame(message.header.frame_id);
    +
    34 read_message(state, message.pose);
    +
    35}
    +
    +
    36
    +
    +
    37void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Transform& message) {
    +
    38 state.set_position(read_vector3(message.translation));
    +
    39 state.set_orientation(read_quaternion(message.rotation));
    +
    40}
    +
    +
    41
    +
    +
    42void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::TransformStamped& message) {
    +
    43 state.set_reference_frame(message.header.frame_id);
    +
    44 state.set_name(message.child_frame_id);
    +
    45 read_message(state, message.transform);
    +
    46}
    +
    +
    47
    +
    +
    48void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Twist& message) {
    +
    49 state.set_linear_velocity(read_vector3(message.linear));
    +
    50 state.set_angular_velocity(read_vector3(message.angular));
    +
    51}
    +
    +
    52
    +
    +
    53void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::TwistStamped& message) {
    +
    54 state.set_reference_frame(message.header.frame_id);
    +
    55 read_message(state, message.twist);
    +
    56}
    +
    +
    57
    +
    +
    58void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Wrench& message) {
    +
    59 state.set_force(read_vector3(message.force));
    +
    60 state.set_torque(read_vector3(message.torque));
    +
    61}
    +
    +
    62
    +
    +
    63void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::WrenchStamped& message) {
    +
    64 state.set_reference_frame(message.header.frame_id);
    +
    65 read_message(state, message.wrench);
    +
    66}
    +
    +
    67
    +
    +
    68void read_message(state_representation::JointState& state, const sensor_msgs::msg::JointState& message) {
    +
    69 try {
    +
    70 state.set_names(message.name);
    +
    71 if (!message.position.empty()) {
    +
    72 state.set_positions(Eigen::VectorXd::Map(message.position.data(), message.position.size()));
    +
    73 }
    +
    74 if (!message.velocity.empty()) {
    +
    75 state.set_velocities(Eigen::VectorXd::Map(message.velocity.data(), message.velocity.size()));
    +
    76 }
    +
    77 if (!message.effort.empty()) {
    +
    78 state.set_torques(Eigen::VectorXd::Map(message.effort.data(), message.effort.size()));
    +
    79 }
    +
    80 } catch (const std::exception& ex) {
    + +
    82 }
    +
    83}
    +
    +
    84
    +
    +
    85void read_message(bool& state, const std_msgs::msg::Bool& message) {
    +
    86 state = message.data;
    +
    87}
    +
    +
    88
    +
    +
    89void read_message(double& state, const std_msgs::msg::Float64& message) {
    +
    90 state = message.data;
    +
    91}
    +
    +
    92
    +
    +
    93void read_message(std::vector<double>& state, const std_msgs::msg::Float64MultiArray& message) {
    +
    94 state = message.data;
    +
    95}
    +
    +
    96
    +
    +
    97void read_message(int& state, const std_msgs::msg::Int32& message) {
    +
    98 state = message.data;
    +
    99}
    +
    +
    100
    +
    +
    101void read_message(std::string& state, const std_msgs::msg::String& message) {
    +
    102 state = message.data;
    +
    103}
    +
    +
    104}// namespace modulo_core::translators
    +
    An exception class to notify that the translation of a ROS message failed.
    +
    Modulo Core translation module for converting between ROS2 and state_representation data types.
    +
    void read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Accel &message)
    Convert a ROS geometry_msgs::msg::Accel to a CartesianState.
    +
    + + + + diff --git a/versions/v4.2.2/message__readers_8hpp_source.html b/versions/v4.2.2/message__readers_8hpp_source.html new file mode 100644 index 000000000..eaa5e515d --- /dev/null +++ b/versions/v4.2.2/message__readers_8hpp_source.html @@ -0,0 +1,488 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/translators/message_readers.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    message_readers.hpp
    +
    +
    +
    1#pragma once
    +
    2
    +
    3#include <set>
    +
    4
    +
    5#include <geometry_msgs/msg/accel_stamped.hpp>
    +
    6#include <geometry_msgs/msg/pose_stamped.hpp>
    +
    7#include <geometry_msgs/msg/transform_stamped.hpp>
    +
    8#include <geometry_msgs/msg/twist_stamped.hpp>
    +
    9#include <geometry_msgs/msg/wrench_stamped.hpp>
    +
    10#include <std_msgs/msg/bool.hpp>
    +
    11#include <std_msgs/msg/float64.hpp>
    +
    12#include <std_msgs/msg/float64_multi_array.hpp>
    +
    13#include <std_msgs/msg/int32.hpp>
    +
    14#include <std_msgs/msg/string.hpp>
    +
    15#include <sensor_msgs/msg/joint_state.hpp>
    +
    16
    +
    17#include <clproto.hpp>
    +
    18#include <state_representation/DigitalIOState.hpp>
    +
    19#include <state_representation/AnalogIOState.hpp>
    +
    20#include <state_representation/parameters/Parameter.hpp>
    +
    21#include <state_representation/space/cartesian/CartesianPose.hpp>
    +
    22#include <state_representation/space/joint/JointPositions.hpp>
    +
    23#include <state_representation/space/Jacobian.hpp>
    +
    24
    +
    25#include "modulo_core/EncodedState.hpp"
    +
    26#include "modulo_core/exceptions/MessageTranslationException.hpp"
    +
    27
    +
    + +
    29
    +
    35void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Accel& message);
    +
    36
    +
    42void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::AccelStamped& message);
    +
    43
    +
    49void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Pose& message);
    +
    50
    +
    56void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::PoseStamped& message);
    +
    57
    +
    63void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Transform& message);
    +
    64
    +
    70void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::TransformStamped& message);
    +
    71
    +
    77void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Twist& message);
    +
    78
    +
    84void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::TwistStamped& message);
    +
    85
    +
    91void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::Wrench& message);
    +
    92
    +
    98void read_message(state_representation::CartesianState& state, const geometry_msgs::msg::WrenchStamped& message);
    +
    99
    +
    105void read_message(state_representation::JointState& state, const sensor_msgs::msg::JointState& message);
    +
    106
    +
    114template<typename T, typename U>
    +
    +
    115void read_message(state_representation::Parameter<T>& state, const U& message) {
    +
    116 state.set_value(message.data);
    +
    117}
    +
    +
    118
    +
    124void read_message(bool& state, const std_msgs::msg::Bool& message);
    +
    125
    +
    131void read_message(double& state, const std_msgs::msg::Float64& message);
    +
    132
    +
    138void read_message(std::vector<double>& state, const std_msgs::msg::Float64MultiArray& message);
    +
    139
    +
    145void read_message(int& state, const std_msgs::msg::Int32& message);
    +
    146
    +
    152void read_message(std::string& state, const std_msgs::msg::String& message);
    +
    153
    +
    161template<typename T>
    +
    +
    162inline void read_message(T& state, const EncodedState& message) {
    +
    163 try {
    +
    164 std::string tmp(message.data.begin(), message.data.end());
    +
    165 state = clproto::decode<T>(tmp);
    +
    166 } catch (const std::exception& ex) {
    + +
    168 }
    +
    169}
    +
    +
    170
    +
    181template<typename T>
    +
    +
    182inline std::shared_ptr<T> safe_dynamic_pointer_cast(std::shared_ptr<state_representation::State>& state) {
    +
    183 auto derived_state_ptr = std::dynamic_pointer_cast<T>(state);
    +
    184 if (derived_state_ptr == nullptr) {
    + +
    186 "Dynamic casting of state " + state->get_name() + " failed.");
    +
    187 }
    +
    188 return derived_state_ptr;
    +
    189}
    +
    +
    190
    +
    201template<typename T>
    +
    + +
    203 std::shared_ptr<state_representation::State>& state, std::shared_ptr<state_representation::State>& new_state
    +
    204) {
    +
    205 auto derived_state_ptr = safe_dynamic_pointer_cast<T>(state);
    +
    206 auto received_state_ptr = safe_dynamic_pointer_cast<T>(new_state);
    +
    207 *derived_state_ptr = *received_state_ptr;
    +
    208}
    +
    +
    209
    +
    226template<typename StateT, typename NewStateT>
    +
    + +
    228 std::shared_ptr<state_representation::State>& state, std::shared_ptr<state_representation::State>& new_state,
    +
    229 std::function<void(StateT&, const NewStateT&)> conversion_callback = {}
    +
    230) {
    +
    231 auto derived_state_ptr = safe_dynamic_pointer_cast<StateT>(state);
    +
    232 auto derived_new_state_ptr = safe_dynamic_pointer_cast<NewStateT>(new_state);
    +
    233 StateT tmp_new_state;
    +
    234 tmp_new_state.set_name(derived_new_state_ptr->get_name());
    +
    235 tmp_new_state.set_reference_frame(derived_new_state_ptr->get_reference_frame());
    +
    236 if (!derived_new_state_ptr->is_empty()) {
    +
    237 if (conversion_callback) {
    +
    238 conversion_callback(tmp_new_state, *derived_new_state_ptr);
    +
    239 }
    +
    240 }
    +
    241 *derived_state_ptr = tmp_new_state;
    +
    242}
    +
    +
    243
    +
    260// FIXME(#77): rename this upon modulo 5.0
    +
    261template<typename StateT, typename NewStateT>
    +
    + +
    263 std::shared_ptr<state_representation::State>& state, std::shared_ptr<state_representation::State>& new_state,
    +
    264 std::function<void(StateT&, const NewStateT&)> conversion_callback = {}
    +
    265) {
    +
    266 auto derived_state_ptr = safe_dynamic_pointer_cast<StateT>(state);
    +
    267 auto derived_new_state_ptr = safe_dynamic_pointer_cast<NewStateT>(new_state);
    +
    268 StateT tmp_new_state(derived_new_state_ptr->get_name(), derived_new_state_ptr->get_names());
    +
    269 if (!derived_new_state_ptr->is_empty()) {
    +
    270 if (conversion_callback) {
    +
    271 conversion_callback(tmp_new_state, *derived_new_state_ptr);
    +
    272 }
    +
    273 }
    +
    274 *derived_state_ptr = tmp_new_state;
    +
    275}
    +
    +
    276
    +
    277template<>
    +
    278inline void read_message(std::shared_ptr<state_representation::State>& state, const EncodedState& message) {
    +
    279 using namespace state_representation;
    +
    280 std::string tmp(message.data.begin(), message.data.end());
    +
    281 std::shared_ptr<State> new_state;
    +
    282 try {
    +
    283 new_state = clproto::decode<std::shared_ptr<State>>(tmp);
    +
    284 } catch (const std::exception& ex) {
    +
    285 throw exceptions::MessageTranslationException(ex.what());
    +
    286 }
    +
    287 try {
    +
    288 switch (state->get_type()) {
    +
    289 case StateType::STATE: {
    +
    290 if (new_state->get_type() == StateType::STATE) {
    +
    291 *state = *new_state;
    +
    292 } else {
    +
    293 *state = State(new_state->get_name());
    +
    294 }
    +
    295 break;
    +
    296 }
    +
    297 case StateType::DIGITAL_IO_STATE: {
    +
    298 if (new_state->get_type() == StateType::DIGITAL_IO_STATE) {
    +
    299 safe_joint_state_conversion<DigitalIOState, DigitalIOState>(
    +
    300 state, new_state, [](DigitalIOState& a, const DigitalIOState& b) {
    +
    301 a.set_data(b.data());
    +
    302 });
    +
    303 } else {
    +
    304 safe_dynamic_cast<DigitalIOState>(state, new_state);
    +
    305 }
    +
    306 break;
    +
    307 }
    +
    308 case StateType::ANALOG_IO_STATE: {
    +
    309 if (new_state->get_type() == StateType::ANALOG_IO_STATE) {
    +
    310 safe_joint_state_conversion<AnalogIOState, AnalogIOState>(
    +
    311 state, new_state, [](AnalogIOState& a, const AnalogIOState& b) {
    +
    312 a.set_data(b.data());
    +
    313 });
    +
    314 } else {
    +
    315 safe_dynamic_cast<AnalogIOState>(state, new_state);
    +
    316 }
    +
    317 break;
    +
    318 }
    +
    319 case StateType::SPATIAL_STATE: {
    +
    320 std::set<StateType> spatial_state_types = {
    +
    321 StateType::SPATIAL_STATE, StateType::CARTESIAN_STATE, StateType::CARTESIAN_POSE, StateType::CARTESIAN_TWIST,
    +
    322 StateType::CARTESIAN_ACCELERATION, StateType::CARTESIAN_WRENCH
    +
    323 };
    +
    324 if (spatial_state_types.find(new_state->get_type()) != spatial_state_types.cend()) {
    +
    325 safe_spatial_state_conversion<SpatialState, SpatialState>(state, new_state);
    +
    326 } else {
    +
    327 safe_dynamic_cast<SpatialState>(state, new_state);
    +
    328 }
    +
    329 break;
    +
    330 }
    +
    331 case StateType::CARTESIAN_STATE: {
    +
    332 if (new_state->get_type() == StateType::CARTESIAN_POSE) {
    +
    333 safe_spatial_state_conversion<CartesianState, CartesianPose>(
    +
    334 state, new_state, [](CartesianState& a, const CartesianPose& b) {
    +
    335 a.set_pose(b.get_pose());
    +
    336 });
    +
    337 } else if (new_state->get_type() == StateType::CARTESIAN_TWIST) {
    +
    338 safe_spatial_state_conversion<CartesianState, CartesianTwist>(
    +
    339 state, new_state, [](CartesianState& a, const CartesianTwist& b) {
    +
    340 a.set_twist(b.get_twist());
    +
    341 });
    +
    342 } else if (new_state->get_type() == StateType::CARTESIAN_ACCELERATION) {
    +
    343 safe_spatial_state_conversion<CartesianState, CartesianAcceleration>(
    +
    344 state, new_state, [](CartesianState& a, const CartesianAcceleration& b) {
    +
    345 a.set_acceleration(b.get_acceleration());
    +
    346 });
    +
    347 } else if (new_state->get_type() == StateType::CARTESIAN_WRENCH) {
    +
    348 safe_spatial_state_conversion<CartesianState, CartesianWrench>(
    +
    349 state, new_state, [](CartesianState& a, const CartesianWrench& b) {
    +
    350 a.set_wrench(b.get_wrench());
    +
    351 });
    +
    352 } else {
    +
    353 safe_dynamic_cast<CartesianState>(state, new_state);
    +
    354 }
    +
    355 break;
    +
    356 }
    +
    357 case StateType::CARTESIAN_POSE: {
    +
    358 if (new_state->get_type() == StateType::CARTESIAN_STATE) {
    +
    359 safe_spatial_state_conversion<CartesianPose, CartesianState>(
    +
    360 state, new_state, [](CartesianPose& a, const CartesianState& b) {
    +
    361 a.set_pose(b.get_pose());
    +
    362 });
    +
    363 } else {
    +
    364 safe_dynamic_cast<CartesianPose>(state, new_state);
    +
    365 }
    +
    366 break;
    +
    367 }
    +
    368 case StateType::CARTESIAN_TWIST: {
    +
    369 if (new_state->get_type() == StateType::CARTESIAN_STATE) {
    +
    370 safe_spatial_state_conversion<CartesianTwist, CartesianState>(
    +
    371 state, new_state, [](CartesianTwist& a, const CartesianState& b) {
    +
    372 a.set_twist(b.get_twist());
    +
    373 });
    +
    374 } else {
    +
    375 safe_dynamic_cast<CartesianTwist>(state, new_state);
    +
    376 }
    +
    377 break;
    +
    378 }
    +
    379 case StateType::CARTESIAN_ACCELERATION: {
    +
    380 if (new_state->get_type() == StateType::CARTESIAN_STATE) {
    +
    381 safe_spatial_state_conversion<CartesianAcceleration, CartesianState>(
    +
    382 state, new_state, [](CartesianAcceleration& a, const CartesianState& b) {
    +
    383 a.set_acceleration(b.get_acceleration());
    +
    384 });
    +
    385 } else {
    +
    386 safe_dynamic_cast<CartesianAcceleration>(state, new_state);
    +
    387 }
    +
    388 break;
    +
    389 }
    +
    390 case StateType::CARTESIAN_WRENCH: {
    +
    391 if (new_state->get_type() == StateType::CARTESIAN_STATE) {
    +
    392 safe_spatial_state_conversion<CartesianWrench, CartesianState>(
    +
    393 state, new_state, [](CartesianWrench& a, const CartesianState& b) {
    +
    394 a.set_wrench(b.get_wrench());
    +
    395 });
    +
    396 } else {
    +
    397 safe_dynamic_cast<CartesianWrench>(state, new_state);
    +
    398 }
    +
    399 break;
    +
    400 }
    +
    401 case StateType::JOINT_STATE: {
    +
    402 auto derived_state = safe_dynamic_pointer_cast<JointState>(state);
    +
    403 if (new_state->get_type() == StateType::JOINT_POSITIONS) {
    +
    404 safe_joint_state_conversion<JointState, JointPositions>(
    +
    405 state, new_state, [](JointState& a, const JointPositions& b) {
    +
    406 a.set_positions(b.get_positions());
    +
    407 });
    +
    408 } else if (new_state->get_type() == StateType::JOINT_VELOCITIES) {
    +
    409 safe_joint_state_conversion<JointState, JointVelocities>(
    +
    410 state, new_state, [](JointState& a, const JointVelocities& b) {
    +
    411 a.set_velocities(b.get_velocities());
    +
    412 });
    +
    413 } else if (new_state->get_type() == StateType::JOINT_ACCELERATIONS) {
    +
    414 safe_joint_state_conversion<JointState, JointAccelerations>(
    +
    415 state, new_state, [](JointState& a, const JointAccelerations& b) {
    +
    416 a.set_accelerations(b.get_accelerations());
    +
    417 });
    +
    418 } else if (new_state->get_type() == StateType::JOINT_TORQUES) {
    +
    419 safe_joint_state_conversion<JointState, JointTorques>(
    +
    420 state, new_state, [](JointState& a, const JointTorques& b) {
    +
    421 a.set_torques(b.get_torques());
    +
    422 });
    +
    423 } else {
    +
    424 safe_dynamic_cast<JointState>(state, new_state);
    +
    425 }
    +
    426 break;
    +
    427 }
    +
    428 case StateType::JOINT_POSITIONS: {
    +
    429 if (new_state->get_type() == StateType::JOINT_STATE) {
    +
    430 safe_joint_state_conversion<JointPositions, JointState>(
    +
    431 state, new_state, [](JointPositions& a, const JointState& b) {
    +
    432 a.set_positions(b.get_positions());
    +
    433 });
    +
    434 } else {
    +
    435 safe_dynamic_cast<JointPositions>(state, new_state);
    +
    436 }
    +
    437 break;
    +
    438 }
    +
    439 case StateType::JOINT_VELOCITIES: {
    +
    440 if (new_state->get_type() == StateType::JOINT_STATE) {
    +
    441 safe_joint_state_conversion<JointVelocities, JointState>(
    +
    442 state, new_state, [](JointVelocities& a, const JointState& b) {
    +
    443 a.set_velocities(b.get_velocities());
    +
    444 });
    +
    445 } else {
    +
    446 safe_dynamic_cast<JointVelocities>(state, new_state);
    +
    447 }
    +
    448 break;
    +
    449 }
    +
    450 case StateType::JOINT_ACCELERATIONS: {
    +
    451 if (new_state->get_type() == StateType::JOINT_STATE) {
    +
    452 safe_joint_state_conversion<JointAccelerations, JointState>(
    +
    453 state, new_state, [](JointAccelerations& a, const JointState& b) {
    +
    454 a.set_accelerations(b.get_accelerations());
    +
    455 });
    +
    456 } else {
    +
    457 safe_dynamic_cast<JointAccelerations>(state, new_state);
    +
    458 }
    +
    459 break;
    +
    460 }
    +
    461 case StateType::JOINT_TORQUES: {
    +
    462 if (new_state->get_type() == StateType::JOINT_STATE) {
    +
    463 safe_joint_state_conversion<JointTorques, JointState>(
    +
    464 state, new_state, [](JointTorques& a, const JointState& b) {
    +
    465 a.set_torques(b.get_torques());
    +
    466 });
    +
    467 } else {
    +
    468 safe_dynamic_cast<JointTorques>(state, new_state);
    +
    469 }
    +
    470 break;
    +
    471 }
    +
    472 case StateType::JACOBIAN:
    +
    473 safe_dynamic_cast<Jacobian>(state, new_state);
    +
    474 break;
    +
    475 case StateType::PARAMETER: {
    +
    476 auto param_ptr = std::dynamic_pointer_cast<ParameterInterface>(state);
    +
    477 switch (param_ptr->get_parameter_type()) {
    +
    478 case ParameterType::BOOL:
    +
    479 safe_dynamic_cast<Parameter<bool>>(state, new_state);
    +
    480 break;
    +
    481 case ParameterType::BOOL_ARRAY:
    +
    482 safe_dynamic_cast<Parameter<std::vector<bool>>>(state, new_state);
    +
    483 break;
    +
    484 case ParameterType::INT:
    +
    485 safe_dynamic_cast<Parameter<int>>(state, new_state);
    +
    486 break;
    +
    487 case ParameterType::INT_ARRAY:
    +
    488 safe_dynamic_cast<Parameter<std::vector<int>>>(state, new_state);
    +
    489 break;
    +
    490 case ParameterType::DOUBLE:
    +
    491 safe_dynamic_cast<Parameter<double>>(state, new_state);
    +
    492 break;
    +
    493 case ParameterType::DOUBLE_ARRAY:
    +
    494 safe_dynamic_cast<Parameter<std::vector<double>>>(state, new_state);
    +
    495 break;
    +
    496 case ParameterType::STRING:
    +
    497 safe_dynamic_cast<Parameter<std::string>>(state, new_state);
    +
    498 break;
    +
    499 case ParameterType::STRING_ARRAY:
    +
    500 safe_dynamic_cast<Parameter<std::vector<std::string>>>(state, new_state);
    +
    501 break;
    +
    502 case ParameterType::VECTOR:
    +
    503 safe_dynamic_cast<Parameter<Eigen::VectorXd>>(state, new_state);
    +
    504 break;
    +
    505 case ParameterType::MATRIX:
    +
    506 safe_dynamic_cast<Parameter<Eigen::MatrixXd>>(state, new_state);
    +
    507 break;
    +
    508 default:
    +
    509 throw exceptions::MessageTranslationException(
    +
    510 "The ParameterType contained by parameter " + param_ptr->get_name() + " is unsupported.");
    +
    511 }
    +
    512 break;
    +
    513 }
    +
    514 default:
    +
    515 throw exceptions::MessageTranslationException(
    +
    516 "The StateType contained by state " + new_state->get_name() + " is unsupported.");
    +
    517 }
    +
    518 } catch (const exceptions::MessageTranslationException& ex) {
    +
    519 throw;
    +
    520 }
    +
    521}
    +
    522}// namespace modulo_core::translators
    +
    +
    An exception class to notify that the translation of a ROS message failed.
    +
    Modulo Core translation module for converting between ROS2 and state_representation data types.
    +
    void safe_spatial_state_conversion(std::shared_ptr< state_representation::State > &state, std::shared_ptr< state_representation::State > &new_state, std::function< void(StateT &, const NewStateT &)> conversion_callback={})
    Update the value referenced by a state pointer by dynamically casting and converting the value refere...
    +
    std::shared_ptr< T > safe_dynamic_pointer_cast(std::shared_ptr< state_representation::State > &state)
    Safely downcast a base state pointer to a derived state pointer.
    +
    void safe_dynamic_cast(std::shared_ptr< state_representation::State > &state, std::shared_ptr< state_representation::State > &new_state)
    Update the value referenced by a state pointer from a new_state pointer.
    +
    void safe_joint_state_conversion(std::shared_ptr< state_representation::State > &state, std::shared_ptr< state_representation::State > &new_state, std::function< void(StateT &, const NewStateT &)> conversion_callback={})
    Update the value referenced by a state pointer by dynamically casting and converting the value refere...
    +
    void read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Accel &message)
    Convert a ROS geometry_msgs::msg::Accel to a CartesianState.
    +
    std_msgs::msg::UInt8MultiArray EncodedState
    Define the EncodedState as UInt8MultiArray message type.
    +
    + + + + diff --git a/versions/v4.2.2/message__writers_8cpp_source.html b/versions/v4.2.2/message__writers_8cpp_source.html new file mode 100644 index 000000000..9ac966a24 --- /dev/null +++ b/versions/v4.2.2/message__writers_8cpp_source.html @@ -0,0 +1,294 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/translators/message_writers.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    message_writers.cpp
    +
    +
    +
    1#include "modulo_core/translators/message_writers.hpp"
    +
    2
    +
    3#include <state_representation/space/cartesian/CartesianPose.hpp>
    +
    4
    +
    5using namespace state_representation;
    +
    6
    + +
    8
    +
    9static void write_point(geometry_msgs::msg::Point& message, const Eigen::Vector3d& vector) {
    +
    10 message.x = vector.x();
    +
    11 message.y = vector.y();
    +
    12 message.z = vector.z();
    +
    13}
    +
    14
    +
    15static void write_vector3(geometry_msgs::msg::Vector3& message, const Eigen::Vector3d& vector) {
    +
    16 message.x = vector.x();
    +
    17 message.y = vector.y();
    +
    18 message.z = vector.z();
    +
    19}
    +
    20
    +
    21static void write_quaternion(geometry_msgs::msg::Quaternion& message, const Eigen::Quaterniond& quat) {
    +
    22 message.w = quat.w();
    +
    23 message.x = quat.x();
    +
    24 message.y = quat.y();
    +
    25 message.z = quat.z();
    +
    26}
    +
    27
    +
    28void write_message(geometry_msgs::msg::Accel& message, const CartesianState& state, const rclcpp::Time&) {
    +
    29 if (!state) {
    +
    30 throw exceptions::MessageTranslationException(
    +
    31 state.get_name() + " state is empty while attempting to write it to message");
    +
    32 }
    +
    33 write_vector3(message.linear, state.get_linear_acceleration());
    +
    34 write_vector3(message.angular, state.get_angular_acceleration());
    +
    35}
    +
    36
    +
    37void write_message(geometry_msgs::msg::AccelStamped& message, const CartesianState& state, const rclcpp::Time& time) {
    +
    38 write_message(message.accel, state, time);
    +
    39 message.header.stamp = time;
    +
    40 message.header.frame_id = state.get_reference_frame();
    +
    41}
    +
    42
    +
    43void write_message(geometry_msgs::msg::Pose& message, const CartesianState& state, const rclcpp::Time&) {
    +
    44 if (!state) {
    +
    45 throw exceptions::MessageTranslationException(
    +
    46 state.get_name() + " state is empty while attempting to write it to message");
    +
    47 }
    +
    48 write_point(message.position, state.get_position());
    +
    49 write_quaternion(message.orientation, state.get_orientation());
    +
    50}
    +
    51
    +
    52void write_message(geometry_msgs::msg::PoseStamped& message, const CartesianState& state, const rclcpp::Time& time) {
    +
    53 write_message(message.pose, state, time);
    +
    54 message.header.stamp = time;
    +
    55 message.header.frame_id = state.get_reference_frame();
    +
    56}
    +
    57
    +
    58void write_message(geometry_msgs::msg::Transform& message, const CartesianState& state, const rclcpp::Time&) {
    +
    59 if (!state) {
    +
    60 throw exceptions::MessageTranslationException(
    +
    61 state.get_name() + " state is empty while attempting to write it to message");
    +
    62 }
    +
    63 write_vector3(message.translation, state.get_position());
    +
    64 write_quaternion(message.rotation, state.get_orientation());
    +
    65}
    +
    66
    +
    67void
    +
    68write_message(geometry_msgs::msg::TransformStamped& message, const CartesianState& state, const rclcpp::Time& time) {
    +
    69 write_message(message.transform, state, time);
    +
    70 message.header.stamp = time;
    +
    71 message.header.frame_id = state.get_reference_frame();
    +
    72 message.child_frame_id = state.get_name();
    +
    73}
    +
    74
    +
    75void write_message(geometry_msgs::msg::Twist& message, const CartesianState& state, const rclcpp::Time&) {
    +
    76 if (!state) {
    +
    77 throw exceptions::MessageTranslationException(
    +
    78 state.get_name() + " state is empty while attempting to write it to message");
    +
    79 }
    +
    80 write_vector3(message.linear, state.get_linear_velocity());
    +
    81 write_vector3(message.angular, state.get_angular_velocity());
    +
    82}
    +
    83
    +
    84void write_message(geometry_msgs::msg::TwistStamped& message, const CartesianState& state, const rclcpp::Time& time) {
    +
    85 write_message(message.twist, state, time);
    +
    86 message.header.stamp = time;
    +
    87 message.header.frame_id = state.get_reference_frame();
    +
    88}
    +
    89
    +
    90void write_message(geometry_msgs::msg::Wrench& message, const CartesianState& state, const rclcpp::Time&) {
    +
    91 if (!state) {
    +
    92 throw exceptions::MessageTranslationException(
    +
    93 state.get_name() + " state is empty while attempting to write it to message");
    +
    94 }
    +
    95 write_vector3(message.force, state.get_force());
    +
    96 write_vector3(message.torque, state.get_torque());
    +
    97}
    +
    98
    +
    99void write_message(geometry_msgs::msg::WrenchStamped& message, const CartesianState& state, const rclcpp::Time& time) {
    +
    100 write_message(message.wrench, state, time);
    +
    101 message.header.stamp = time;
    +
    102 message.header.frame_id = state.get_reference_frame();
    +
    103}
    +
    104
    +
    105void write_message(sensor_msgs::msg::JointState& message, const JointState& state, const rclcpp::Time& time) {
    +
    106 if (!state) {
    +
    107 throw exceptions::MessageTranslationException(
    +
    108 state.get_name() + " state is empty while attempting to write it to message");
    +
    109 }
    +
    110 message.header.stamp = time;
    +
    111 message.name = state.get_names();
    +
    112 message.position =
    +
    113 std::vector<double>(state.get_positions().data(), state.get_positions().data() + state.get_positions().size());
    +
    114 message.velocity =
    +
    115 std::vector<double>(state.get_velocities().data(), state.get_velocities().data() + state.get_velocities().size());
    +
    116 message.effort =
    +
    117 std::vector<double>(state.get_torques().data(), state.get_torques().data() + state.get_torques().size());
    +
    118}
    +
    119
    +
    120void write_message(tf2_msgs::msg::TFMessage& message, const CartesianState& state, const rclcpp::Time& time) {
    +
    121 if (!state) {
    +
    122 throw exceptions::MessageTranslationException(
    +
    123 state.get_name() + " state is empty while attempting to write it to message");
    +
    124 }
    +
    125 geometry_msgs::msg::TransformStamped transform;
    +
    126 write_message(transform, state, time);
    +
    127 message.transforms.push_back(transform);
    +
    128}
    +
    129
    +
    130template<typename U, typename T>
    +
    131void write_message(U& message, const Parameter<T>& state, const rclcpp::Time&) {
    +
    132 if (!state) {
    +
    133 throw exceptions::MessageTranslationException(
    +
    134 state.get_name() + " state is empty while attempting to write it to message");
    +
    135 }
    +
    136 message.data = state.get_value();
    +
    137}
    +
    138
    +
    139template void write_message<std_msgs::msg::Float64, double>(
    +
    140 std_msgs::msg::Float64& message, const Parameter<double>& state, const rclcpp::Time&
    +
    141);
    +
    142
    +
    143template void write_message<std_msgs::msg::Float64MultiArray, std::vector<double>>(
    +
    144 std_msgs::msg::Float64MultiArray& message, const Parameter<std::vector<double>>& state, const rclcpp::Time&
    +
    145);
    +
    146
    +
    147template void write_message<std_msgs::msg::Bool, bool>(
    +
    148 std_msgs::msg::Bool& message, const Parameter<bool>& state, const rclcpp::Time&
    +
    149);
    +
    150
    +
    151template void write_message<std_msgs::msg::String, std::string>(
    +
    152 std_msgs::msg::String& message, const Parameter<std::string>& state, const rclcpp::Time&
    +
    153);
    +
    154
    +
    155template<>
    +
    156void
    +
    157write_message(geometry_msgs::msg::Transform& message, const Parameter<CartesianPose>& state, const rclcpp::Time& time) {
    +
    158 write_message(message, state.get_value(), time);
    +
    159}
    +
    160
    +
    161template<>
    +
    162void write_message(
    +
    163 geometry_msgs::msg::TransformStamped& message, const Parameter<CartesianPose>& state, const rclcpp::Time& time
    +
    164) {
    +
    165 write_message(message, state.get_value(), time);
    +
    166}
    +
    167
    +
    168template<>
    +
    169void write_message(tf2_msgs::msg::TFMessage& message, const Parameter<CartesianPose>& state, const rclcpp::Time& time) {
    +
    170 write_message(message, state.get_value(), time);
    +
    171}
    +
    172
    +
    +
    173void write_message(std_msgs::msg::Bool& message, const bool& state, const rclcpp::Time&) {
    +
    174 message.data = state;
    +
    175}
    +
    +
    176
    +
    +
    177void write_message(std_msgs::msg::Float64& message, const double& state, const rclcpp::Time&) {
    +
    178 message.data = state;
    +
    179}
    +
    +
    180
    +
    +
    181void write_message(std_msgs::msg::Float64MultiArray& message, const std::vector<double>& state, const rclcpp::Time&) {
    +
    182 message.data = state;
    +
    183}
    +
    +
    184
    +
    +
    185void write_message(std_msgs::msg::Int32& message, const int& state, const rclcpp::Time&) {
    +
    186 message.data = state;
    +
    187}
    +
    +
    188
    +
    +
    189void write_message(std_msgs::msg::String& message, const std::string& state, const rclcpp::Time&) {
    +
    190 message.data = state;
    +
    191}
    +
    +
    192}// namespace modulo_core::translators
    +
    Modulo Core translation module for converting between ROS2 and state_representation data types.
    +
    void write_message(geometry_msgs::msg::Accel &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
    Convert a CartesianState to a ROS geometry_msgs::msg::Accel.
    +
    + + + + diff --git a/versions/v4.2.2/message__writers_8hpp_source.html b/versions/v4.2.2/message__writers_8hpp_source.html new file mode 100644 index 000000000..6689c9dc8 --- /dev/null +++ b/versions/v4.2.2/message__writers_8hpp_source.html @@ -0,0 +1,199 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/translators/message_writers.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    message_writers.hpp
    +
    +
    +
    1#pragma once
    +
    2
    +
    3#include <geometry_msgs/msg/accel_stamped.hpp>
    +
    4#include <geometry_msgs/msg/pose_stamped.hpp>
    +
    5#include <geometry_msgs/msg/transform_stamped.hpp>
    +
    6#include <geometry_msgs/msg/twist_stamped.hpp>
    +
    7#include <geometry_msgs/msg/wrench_stamped.hpp>
    +
    8#include <rclcpp/time.hpp>
    +
    9#include <sensor_msgs/msg/joint_state.hpp>
    +
    10#include <std_msgs/msg/bool.hpp>
    +
    11#include <std_msgs/msg/float64.hpp>
    +
    12#include <std_msgs/msg/float64_multi_array.hpp>
    +
    13#include <std_msgs/msg/int32.hpp>
    +
    14#include <std_msgs/msg/string.hpp>
    +
    15#include <tf2_msgs/msg/tf_message.hpp>
    +
    16
    +
    17#include <clproto.hpp>
    +
    18#include <state_representation/space/cartesian/CartesianState.hpp>
    +
    19#include <state_representation/space/joint/JointState.hpp>
    +
    20#include <state_representation/parameters/Parameter.hpp>
    +
    21
    +
    22#include "modulo_core/EncodedState.hpp"
    +
    23#include "modulo_core/exceptions/MessageTranslationException.hpp"
    +
    24
    + +
    26
    + +
    35 geometry_msgs::msg::Accel& message, const state_representation::CartesianState& state, const rclcpp::Time& time
    +
    36);
    +
    37
    + +
    46 geometry_msgs::msg::AccelStamped& message, const state_representation::CartesianState& state,
    +
    47 const rclcpp::Time& time
    +
    48);
    +
    49
    + +
    58 geometry_msgs::msg::Pose& message, const state_representation::CartesianState& state, const rclcpp::Time& time
    +
    59);
    +
    60
    + +
    69 geometry_msgs::msg::PoseStamped& message, const state_representation::CartesianState& state,
    +
    70 const rclcpp::Time& time
    +
    71);
    +
    72
    + +
    81 geometry_msgs::msg::Transform& message, const state_representation::CartesianState& state, const rclcpp::Time& time
    +
    82);
    +
    83
    + +
    92 geometry_msgs::msg::TransformStamped& message, const state_representation::CartesianState& state,
    +
    93 const rclcpp::Time& time
    +
    94);
    +
    95
    + +
    104 geometry_msgs::msg::Twist& message, const state_representation::CartesianState& state, const rclcpp::Time& time
    +
    105);
    +
    106
    + +
    115 geometry_msgs::msg::TwistStamped& message, const state_representation::CartesianState& state,
    +
    116 const rclcpp::Time& time
    +
    117);
    +
    118
    + +
    127 geometry_msgs::msg::Wrench& message, const state_representation::CartesianState& state, const rclcpp::Time& time
    +
    128);
    +
    129
    + +
    138 geometry_msgs::msg::WrenchStamped& message, const state_representation::CartesianState& state,
    +
    139 const rclcpp::Time& time
    +
    140);
    +
    141
    + +
    150 sensor_msgs::msg::JointState& message, const state_representation::JointState& state, const rclcpp::Time& time
    +
    151);
    +
    152
    + +
    161 tf2_msgs::msg::TFMessage& message, const state_representation::CartesianState& state, const rclcpp::Time& time
    +
    162);
    +
    163
    +
    173template<typename U, typename T>
    +
    174void write_message(U& message, const state_representation::Parameter<T>& state, const rclcpp::Time&);
    +
    175
    +
    182void write_message(std_msgs::msg::Bool& message, const bool& state, const rclcpp::Time& time);
    +
    183
    +
    190void write_message(std_msgs::msg::Float64& message, const double& state, const rclcpp::Time& time);
    +
    191
    +
    198void
    +
    199write_message(std_msgs::msg::Float64MultiArray& message, const std::vector<double>& state, const rclcpp::Time& time);
    +
    200
    +
    207void write_message(std_msgs::msg::Int32& message, const int& state, const rclcpp::Time& time);
    +
    208
    +
    215void write_message(std_msgs::msg::String& message, const std::string& state, const rclcpp::Time& time);
    +
    216
    +
    225template<typename T>
    +
    +
    226inline void write_message(EncodedState& message, const T& state, const rclcpp::Time&) {
    +
    227 try {
    +
    228 std::string tmp = clproto::encode<T>(state);
    +
    229 message.data = std::vector<unsigned char>(tmp.begin(), tmp.end());
    +
    230 } catch (const std::exception& ex) {
    + +
    232 }
    +
    233}
    +
    +
    234}// namespace modulo_core::translators
    +
    An exception class to notify that the translation of a ROS message failed.
    +
    Modulo Core translation module for converting between ROS2 and state_representation data types.
    +
    void write_message(geometry_msgs::msg::Accel &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
    Convert a CartesianState to a ROS geometry_msgs::msg::Accel.
    +
    std_msgs::msg::UInt8MultiArray EncodedState
    Define the EncodedState as UInt8MultiArray message type.
    +
    + + + + diff --git a/versions/v4.2.2/minus.svg b/versions/v4.2.2/minus.svg new file mode 100644 index 000000000..f70d0c1a1 --- /dev/null +++ b/versions/v4.2.2/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/versions/v4.2.2/minusd.svg b/versions/v4.2.2/minusd.svg new file mode 100644 index 000000000..5f8e87962 --- /dev/null +++ b/versions/v4.2.2/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/versions/v4.2.2/modulo__components_2include_2modulo__components_2utilities_2utilities_8hpp_source.html b/versions/v4.2.2/modulo__components_2include_2modulo__components_2utilities_2utilities_8hpp_source.html new file mode 100644 index 000000000..6b05337fe --- /dev/null +++ b/versions/v4.2.2/modulo__components_2include_2modulo__components_2utilities_2utilities_8hpp_source.html @@ -0,0 +1,159 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/utilities/utilities.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    utilities.hpp
    +
    +
    +
    1#pragma once
    +
    2
    +
    3#include <string>
    +
    4
    +
    5#include <rclcpp/rclcpp.hpp>
    +
    6
    + +
    12
    +
    20[[maybe_unused]] static std::string
    +
    21parse_string_argument(const std::vector<std::string>& args, const std::string& pattern, std::string& result) {
    +
    22 for (const auto& arg : args) {
    +
    23 std::string::size_type index = arg.find(pattern);
    +
    24 if (index != std::string::npos) {
    +
    25 result = arg;
    +
    26 result.erase(index, pattern.length());
    +
    27 break;
    +
    28 }
    +
    29 }
    +
    30 return result;
    +
    31}
    +
    32
    +
    39[[maybe_unused]] static std::string
    +
    40parse_node_name(const rclcpp::NodeOptions& options, const std::string& fallback = "") {
    +
    41 std::string node_name(fallback);
    +
    42 const std::string pattern("__node:=");
    +
    43 return parse_string_argument(options.arguments(), pattern, node_name);
    +
    44}
    +
    45
    +
    53[[maybe_unused]] static std::string parse_topic_name(const std::string& topic_name) {
    +
    54 std::string output;
    +
    55 for (char c : topic_name) {
    +
    56 if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
    +
    57 output.insert(output.end(), std::tolower(c));
    +
    58 } else if (!output.empty() && ((c >= '0' && c <= '9') || c == '_')) {
    +
    59 output.insert(output.end(), std::tolower(c));
    +
    60 }
    +
    61 }
    +
    62 return output;
    +
    63}
    +
    64
    +
    73[[maybe_unused]] static rclcpp::NodeOptions modify_parameter_overrides(const rclcpp::NodeOptions& options) {
    +
    74 auto modified = options;
    +
    75 rclcpp::Parameter rate;
    +
    76 rclcpp::Parameter period;
    +
    77 std::vector<rclcpp::Parameter> parameters;
    +
    78 for (const auto& parameter : options.parameter_overrides()) {
    +
    79 if (parameter.get_name() == "rate") {
    +
    80 rate = parameter;
    +
    81 } else if (parameter.get_name() == "period") {
    +
    82 period = parameter;
    +
    83 } else {
    +
    84 parameters.push_back(parameter);
    +
    85 }
    +
    86 }
    +
    87 if (rate.get_type() != rclcpp::ParameterType::PARAMETER_NOT_SET) {
    +
    88 period = rclcpp::Parameter("period", 1.0 / rate.as_int());
    +
    89 } else if (period.get_type() != rclcpp::ParameterType::PARAMETER_NOT_SET) {
    +
    90 rate = rclcpp::Parameter("rate", static_cast<int>(1.0 / period.as_double()));
    +
    91 } else {
    +
    92 modified.parameter_overrides() = parameters;
    +
    93 return modified;
    +
    94 }
    +
    95 parameters.push_back(rate);
    +
    96 parameters.push_back(period);
    +
    97 modified.parameter_overrides() = parameters;
    +
    98 return modified;
    +
    99}
    +
    100}// namespace modulo_components::utilities
    +
    Modulo component utilities.
    +
    + + + + diff --git a/versions/v4.2.2/modulo__controllers_2include_2modulo__controllers_2utils_2utilities_8hpp_source.html b/versions/v4.2.2/modulo__controllers_2include_2modulo__controllers_2utils_2utilities_8hpp_source.html new file mode 100644 index 000000000..8ad819119 --- /dev/null +++ b/versions/v4.2.2/modulo__controllers_2include_2modulo__controllers_2utils_2utilities_8hpp_source.html @@ -0,0 +1,113 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_controllers/include/modulo_controllers/utils/utilities.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    utilities.hpp
    +
    +
    +
    1#pragma once
    +
    2
    +
    3#include <string>
    +
    4
    +
    5#include <rclcpp/rclcpp.hpp>
    +
    6
    + +
    12
    +
    13typedef std::variant<bool, std::function<bool(void)>> PredicateVariant;
    +
    14
    +
    22[[maybe_unused]] static std::string parse_topic_name(const std::string& topic_name) {
    +
    23 std::string output;
    +
    24 for (char c : topic_name) {
    +
    25 if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
    +
    26 output.insert(output.end(), std::tolower(c));
    +
    27 } else if (!output.empty() && ((c >= '0' && c <= '9') || c == '_')) {
    +
    28 output.insert(output.end(), std::tolower(c));
    +
    29 }
    +
    30 }
    +
    31 return output;
    +
    32}
    +
    33}// namespace modulo_controllers::utilities
    +
    Modulo controllers utilities.
    +
    + + + + diff --git a/versions/v4.2.2/namespacemembers.html b/versions/v4.2.2/namespacemembers.html new file mode 100644 index 000000000..95456d850 --- /dev/null +++ b/versions/v4.2.2/namespacemembers.html @@ -0,0 +1,124 @@ + + + + + + + +Modulo: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - c -

    + + +

    - e -

    + + +

    - g -

    + + +

    - m -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - w -

    +
    + + + + diff --git a/versions/v4.2.2/namespacemembers_enum.html b/versions/v4.2.2/namespacemembers_enum.html new file mode 100644 index 000000000..fbfbf0077 --- /dev/null +++ b/versions/v4.2.2/namespacemembers_enum.html @@ -0,0 +1,82 @@ + + + + + + + +Modulo: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace enums with links to the namespaces they belong to:
    +
    + + + + diff --git a/versions/v4.2.2/namespacemembers_func.html b/versions/v4.2.2/namespacemembers_func.html new file mode 100644 index 000000000..ffacfdf9f --- /dev/null +++ b/versions/v4.2.2/namespacemembers_func.html @@ -0,0 +1,109 @@ + + + + + + + +Modulo: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace functions with links to the namespaces they belong to:
    + +

    - c -

    + + +

    - g -

    + + +

    - r -

    + + +

    - s -

    + + +

    - w -

    +
    + + + + diff --git a/versions/v4.2.2/namespacemembers_type.html b/versions/v4.2.2/namespacemembers_type.html new file mode 100644 index 000000000..98286677c --- /dev/null +++ b/versions/v4.2.2/namespacemembers_type.html @@ -0,0 +1,81 @@ + + + + + + + +Modulo: Namespace Members + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace typedefs with links to the namespaces they belong to:
    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__components.html b/versions/v4.2.2/namespacemodulo__components.html new file mode 100644 index 000000000..f4832214a --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__components.html @@ -0,0 +1,114 @@ + + + + + + + +Modulo: modulo_components Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    modulo_components Namespace Reference
    +
    +
    + +

    Modulo components. +More...

    + + + + + + + + +

    +Namespaces

    namespace  exceptions
     Modulo component exception classes.
     
    namespace  utilities
     Modulo component utilities.
     
    + + + + + + + + + + + + + +

    +Classes

    class  Component
     A wrapper for rclcpp::Node to simplify application composition through unified component interfaces. More...
     
    class  ComponentInterface
     Base interface class for modulo components to wrap a ROS Node with custom behaviour. More...
     
    struct  ComponentServiceResponse
     Response structure to be returned by component services. More...
     
    class  LifecycleComponent
     A wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified component interfaces while supporting lifecycle states and transitions. More...
     
    +

    Detailed Description

    +

    Modulo components.

    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__components_1_1exceptions.html b/versions/v4.2.2/namespacemodulo__components_1_1exceptions.html new file mode 100644 index 000000000..b0b835c13 --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__components_1_1exceptions.html @@ -0,0 +1,111 @@ + + + + + + + +Modulo: modulo_components::exceptions Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_components::exceptions Namespace Reference
    +
    +
    + +

    Modulo component exception classes. +More...

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

    +Classes

    class  AddServiceException
     An exception class to notify errors when adding a service. More...
     
    class  AddSignalException
     An exception class to notify errors when adding a signal. More...
     
    class  ComponentException
     A base class for all component exceptions. More...
     
    class  ComponentParameterException
     An exception class to notify errors with component parameters. More...
     
    class  LookupTransformException
     An exception class to notify an error while looking up TF transforms. More...
     
    +

    Detailed Description

    +

    Modulo component exception classes.

    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__components_1_1utilities.html b/versions/v4.2.2/namespacemodulo__components_1_1utilities.html new file mode 100644 index 000000000..908de861a --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__components_1_1utilities.html @@ -0,0 +1,115 @@ + + + + + + + +Modulo: modulo_components::utilities Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_components::utilities Namespace Reference
    +
    +
    + +

    Modulo component utilities. +More...

    + + + + +

    +Typedefs

    typedef std::variant< bool, std::function< bool(void)> > PredicateVariant
     
    +

    Detailed Description

    +

    Modulo component utilities.

    +

    Typedef Documentation

    + +

    ◆ PredicateVariant

    + +
    +
    + + + + +
    typedef std::variant<bool, std::function<bool(void)> > modulo_components::utilities::PredicateVariant
    +
    + +

    Definition at line 7 of file predicate_variant.hpp.

    + +
    +
    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__controllers_1_1utilities.html b/versions/v4.2.2/namespacemodulo__controllers_1_1utilities.html new file mode 100644 index 000000000..c7b524487 --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__controllers_1_1utilities.html @@ -0,0 +1,115 @@ + + + + + + + +Modulo: modulo_controllers::utilities Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_controllers::utilities Namespace Reference
    +
    +
    + +

    Modulo controllers utilities. +More...

    + + + + +

    +Typedefs

    typedef std::variant< bool, std::function< bool(void)> > PredicateVariant
     
    +

    Detailed Description

    +

    Modulo controllers utilities.

    +

    Typedef Documentation

    + +

    ◆ PredicateVariant

    + +
    +
    + + + + +
    typedef std::variant<bool, std::function<bool(void)> > modulo_controllers::utilities::PredicateVariant
    +
    + +

    Definition at line 13 of file utilities.hpp.

    + +
    +
    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__core.html b/versions/v4.2.2/namespacemodulo__core.html new file mode 100644 index 000000000..da24fd47e --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__core.html @@ -0,0 +1,127 @@ + + + + + + + +Modulo: modulo_core Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    modulo_core Namespace Reference
    +
    +
    + +

    Modulo Core. +More...

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

    +Namespaces

    namespace  communication
     Modulo Core communication module for handling messages on publication and subscription interfaces.
     
    namespace  exceptions
     Modulo Core exceptions module for defining exception classes.
     
    namespace  translators
     Modulo Core translation module for converting between ROS2 and state_representation data types.
     
    + + + + +

    +Typedefs

    typedef std_msgs::msg::UInt8MultiArray EncodedState
     Define the EncodedState as UInt8MultiArray message type.
     
    +

    Detailed Description

    +

    Modulo Core.

    +

    Typedef Documentation

    + +

    ◆ EncodedState

    + +
    +
    + +

    Define the EncodedState as UInt8MultiArray message type.

    + +

    Definition at line 15 of file EncodedState.hpp.

    + +
    +
    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__core_1_1communication.html b/versions/v4.2.2/namespacemodulo__core_1_1communication.html new file mode 100644 index 000000000..188f4cdae --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__core_1_1communication.html @@ -0,0 +1,453 @@ + + + + + + + +Modulo: modulo_core::communication Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_core::communication Namespace Reference
    +
    +
    + +

    Modulo Core communication module for handling messages on publication and subscription interfaces. +More...

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

    +Classes

    class  MessagePair
     The MessagePair stores a pointer to a variable and translates the value of this pointer back and forth between the corresponding ROS messages. More...
     
    class  MessagePairInterface
     Interface class to enable non-templated writing and reading ROS messages from derived MessagePair instances through dynamic down-casting. More...
     
    class  PublisherHandler
     The PublisherHandler handles different types of ROS publishers to activate, deactivate and publish data with those publishers. More...
     
    class  PublisherInterface
     Interface class to enable non-templated activating/deactivating/publishing of ROS publishers from derived PublisherHandler instances through dynamic down-casting. More...
     
    class  SubscriptionHandler
     The SubscriptionHandler handles different types of ROS subscriptions to receive data from those subscriptions. More...
     
    class  SubscriptionInterface
     Interface class to enable non-templated subscriptions with ROS subscriptions from derived SubscriptionHandler instances through dynamic down-casting. More...
     
    + + + + + + + +

    +Enumerations

    enum class  MessageType {
    +  BOOL +, FLOAT64 +, FLOAT64_MULTI_ARRAY +, INT32 +,
    +  STRING +, ENCODED_STATE +
    + }
     Enum of all supported ROS message types for the MessagePairInterface. More...
     
    enum class  PublisherType { PUBLISHER +, LIFECYCLE_PUBLISHER + }
     Enum of supported ROS publisher types for the PublisherInterface. More...
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename DataT >
    std::shared_ptr< MessagePairInterfacemake_shared_message_pair (const std::shared_ptr< DataT > &data, const std::shared_ptr< rclcpp::Clock > &clock)
     
    template<>
    std::shared_ptr< MessagePairInterfacemake_shared_message_pair (const std::shared_ptr< bool > &data, const std::shared_ptr< rclcpp::Clock > &clock)
     
    template<>
    std::shared_ptr< MessagePairInterfacemake_shared_message_pair (const std::shared_ptr< double > &data, const std::shared_ptr< rclcpp::Clock > &clock)
     
    template<>
    std::shared_ptr< MessagePairInterfacemake_shared_message_pair (const std::shared_ptr< std::vector< double > > &data, const std::shared_ptr< rclcpp::Clock > &clock)
     
    template<>
    std::shared_ptr< MessagePairInterfacemake_shared_message_pair (const std::shared_ptr< int > &data, const std::shared_ptr< rclcpp::Clock > &clock)
     
    template<>
    std::shared_ptr< MessagePairInterfacemake_shared_message_pair (const std::shared_ptr< std::string > &data, const std::shared_ptr< rclcpp::Clock > &clock)
     
    +

    Detailed Description

    +

    Modulo Core communication module for handling messages on publication and subscription interfaces.

    +

    Enumeration Type Documentation

    + +

    ◆ MessageType

    + +
    +
    + + + + + +
    + + + + +
    enum class modulo_core::communication::MessageType
    +
    +strong
    +
    + +

    Enum of all supported ROS message types for the MessagePairInterface.

    +
    See also
    MessagePairInterface
    + +

    Definition at line 13 of file MessageType.hpp.

    + +
    +
    + +

    ◆ PublisherType

    + +
    +
    + + + + + +
    + + + + +
    enum class modulo_core::communication::PublisherType
    +
    +strong
    +
    + +

    Enum of supported ROS publisher types for the PublisherInterface.

    +
    See also
    PublisherInterface
    + +

    Definition at line 9 of file PublisherType.hpp.

    + +
    +
    +

    Function Documentation

    + +

    ◆ make_shared_message_pair() [1/6]

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< MessagePairInterface > modulo_core::communication::make_shared_message_pair (const std::shared_ptr< bool > & data,
    const std::shared_ptr< rclcpp::Clock > & clock 
    )
    +
    +inline
    +
    + +

    Definition at line 119 of file MessagePair.hpp.

    + +
    +
    + +

    ◆ make_shared_message_pair() [2/6]

    + +
    +
    +
    +template<typename DataT >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< MessagePairInterface > modulo_core::communication::make_shared_message_pair (const std::shared_ptr< DataT > & data,
    const std::shared_ptr< rclcpp::Clock > & clock 
    )
    +
    +inline
    +
    + +

    Definition at line 112 of file MessagePair.hpp.

    + +
    +
    + +

    ◆ make_shared_message_pair() [3/6]

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< MessagePairInterface > modulo_core::communication::make_shared_message_pair (const std::shared_ptr< double > & data,
    const std::shared_ptr< rclcpp::Clock > & clock 
    )
    +
    +inline
    +
    + +

    Definition at line 125 of file MessagePair.hpp.

    + +
    +
    + +

    ◆ make_shared_message_pair() [4/6]

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< MessagePairInterface > modulo_core::communication::make_shared_message_pair (const std::shared_ptr< int > & data,
    const std::shared_ptr< rclcpp::Clock > & clock 
    )
    +
    +inline
    +
    + +

    Definition at line 138 of file MessagePair.hpp.

    + +
    +
    + +

    ◆ make_shared_message_pair() [5/6]

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< MessagePairInterface > modulo_core::communication::make_shared_message_pair (const std::shared_ptr< std::string > & data,
    const std::shared_ptr< rclcpp::Clock > & clock 
    )
    +
    +inline
    +
    + +

    Definition at line 144 of file MessagePair.hpp.

    + +
    +
    + +

    ◆ make_shared_message_pair() [6/6]

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< MessagePairInterface > modulo_core::communication::make_shared_message_pair (const std::shared_ptr< std::vector< double > > & data,
    const std::shared_ptr< rclcpp::Clock > & clock 
    )
    +
    +inline
    +
    + +

    Definition at line 130 of file MessagePair.hpp.

    + +
    +
    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__core_1_1exceptions.html b/versions/v4.2.2/namespacemodulo__core_1_1exceptions.html new file mode 100644 index 000000000..1959af11a --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__core_1_1exceptions.html @@ -0,0 +1,114 @@ + + + + + + + +Modulo: modulo_core::exceptions Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_core::exceptions Namespace Reference
    +
    +
    + +

    Modulo Core exceptions module for defining exception classes. +More...

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

    +Classes

    class  CoreException
     A base class for all core exceptions. More...
     
    class  InvalidPointerCastException
     An exception class to notify if the result of getting an instance of a derived class through dynamic down-casting of an object of the base class is not a correctly typed instance of the derived class. More...
     
    class  InvalidPointerException
     An exception class to notify if an object has no reference count (if the object is not owned by any pointer) when attempting to get a derived instance through dynamic down-casting. More...
     
    class  MessageTranslationException
     An exception class to notify that the translation of a ROS message failed. More...
     
    class  NullPointerException
     An exception class to notify that a certain pointer is null. More...
     
    class  ParameterTranslationException
     An exception class to notify incompatibility when translating parameters from different sources. More...
     
    +

    Detailed Description

    +

    Modulo Core exceptions module for defining exception classes.

    +
    + + + + diff --git a/versions/v4.2.2/namespacemodulo__core_1_1translators.html b/versions/v4.2.2/namespacemodulo__core_1_1translators.html new file mode 100644 index 000000000..efab8542c --- /dev/null +++ b/versions/v4.2.2/namespacemodulo__core_1_1translators.html @@ -0,0 +1,3214 @@ + + + + + + + +Modulo: modulo_core::translators Namespace Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_core::translators Namespace Reference
    +
    +
    + +

    Modulo Core translation module for converting between ROS2 and state_representation data types. +More...

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

    +Functions

    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::Accel &message)
     Convert a ROS geometry_msgs::msg::Accel to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::AccelStamped &message)
     Convert a ROS geometry_msgs::msg::AccelStamped to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::Pose &message)
     Convert a ROS geometry_msgs::msg::Pose to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::PoseStamped &message)
     Convert a ROS geometry_msgs::msg::PoseStamped to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::Transform &message)
     Convert a ROS geometry_msgs::msg::Transform to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::TransformStamped &message)
     Convert a ROS geometry_msgs::msg::TransformStamped to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::Twist &message)
     Convert a ROS geometry_msgs::msg::Twist to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::TwistStamped &message)
     Convert a ROS geometry_msgs::msg::TwistStamped to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::Wrench &message)
     Convert a ROS geometry_msgs::msg::Wrench to a CartesianState.
     
    void read_message (state_representation::CartesianState &state, const geometry_msgs::msg::WrenchStamped &message)
     Convert a ROS geometry_msgs::msg::WrenchStamped to a CartesianState.
     
    void read_message (state_representation::JointState &state, const sensor_msgs::msg::JointState &message)
     Convert a ROS sensor_msgs::msg::JointState to a JointState.
     
    template<typename T , typename U >
    void read_message (state_representation::Parameter< T > &state, const U &message)
     Template function to convert a ROS std_msgs::msg::T to a Parameter<T>
     
    void read_message (bool &state, const std_msgs::msg::Bool &message)
     Convert a ROS std_msgs::msg::Bool to a boolean.
     
    void read_message (double &state, const std_msgs::msg::Float64 &message)
     Convert a ROS std_msgs::msg::Float64 to a double.
     
    void read_message (std::vector< double > &state, const std_msgs::msg::Float64MultiArray &message)
     Convert a ROS std_msgs::msg::Float64MultiArray to a vector of double.
     
    void read_message (int &state, const std_msgs::msg::Int32 &message)
     Convert a ROS std_msgs::msg::Int32 to an integer.
     
    void read_message (std::string &state, const std_msgs::msg::String &message)
     Convert a ROS std_msgs::msg::String to a string.
     
    template<typename T >
    void read_message (T &state, const EncodedState &message)
     Convert a ROS std_msgs::msg::UInt8MultiArray message to a State using protobuf decoding.
     
    template<typename T >
    std::shared_ptr< T > safe_dynamic_pointer_cast (std::shared_ptr< state_representation::State > &state)
     Safely downcast a base state pointer to a derived state pointer.
     
    template<typename T >
    void safe_dynamic_cast (std::shared_ptr< state_representation::State > &state, std::shared_ptr< state_representation::State > &new_state)
     Update the value referenced by a state pointer from a new_state pointer.
     
    template<typename StateT , typename NewStateT >
    void safe_spatial_state_conversion (std::shared_ptr< state_representation::State > &state, std::shared_ptr< state_representation::State > &new_state, std::function< void(StateT &, const NewStateT &)> conversion_callback={})
     Update the value referenced by a state pointer by dynamically casting and converting the value referenced by a new_state pointer.
     
    template<typename StateT , typename NewStateT >
    void safe_joint_state_conversion (std::shared_ptr< state_representation::State > &state, std::shared_ptr< state_representation::State > &new_state, std::function< void(StateT &, const NewStateT &)> conversion_callback={})
     Update the value referenced by a state pointer by dynamically casting and converting the value referenced by a new_state pointer.
     
    template<>
    void read_message (std::shared_ptr< state_representation::State > &state, const EncodedState &message)
     
    void write_message (geometry_msgs::msg::Accel &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::Accel.
     
    void write_message (geometry_msgs::msg::AccelStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::AccelStamped.
     
    void write_message (geometry_msgs::msg::Pose &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::Pose.
     
    void write_message (geometry_msgs::msg::PoseStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::PoseStamped.
     
    void write_message (geometry_msgs::msg::Transform &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::Transform.
     
    void write_message (geometry_msgs::msg::TransformStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::TransformStamped.
     
    void write_message (geometry_msgs::msg::Twist &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::Twist.
     
    void write_message (geometry_msgs::msg::TwistStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::TwistStamped.
     
    void write_message (geometry_msgs::msg::Wrench &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::Wrench.
     
    void write_message (geometry_msgs::msg::WrenchStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS geometry_msgs::msg::WrenchStamped.
     
    void write_message (sensor_msgs::msg::JointState &message, const state_representation::JointState &state, const rclcpp::Time &time)
     Convert a JointState to a ROS sensor_msgs::msg::JointState.
     
    void write_message (tf2_msgs::msg::TFMessage &message, const state_representation::CartesianState &state, const rclcpp::Time &time)
     Convert a CartesianState to a ROS tf2_msgs::msg::TFMessage.
     
    template<typename U , typename T >
    void write_message (U &message, const state_representation::Parameter< T > &state, const rclcpp::Time &)
     Convert a Parameter<T> to a ROS equivalent representation.
     
    void write_message (std_msgs::msg::Bool &message, const bool &state, const rclcpp::Time &time)
     Convert a boolean to a ROS std_msgs::msg::Bool.
     
    void write_message (std_msgs::msg::Float64 &message, const double &state, const rclcpp::Time &time)
     Convert a double to a ROS std_msgs::msg::Float64.
     
    void write_message (std_msgs::msg::Float64MultiArray &message, const std::vector< double > &state, const rclcpp::Time &time)
     Convert a vector of double to a ROS std_msgs::msg::Float64MultiArray.
     
    void write_message (std_msgs::msg::Int32 &message, const int &state, const rclcpp::Time &time)
     Convert an integer to a ROS std_msgs::msg::Int32.
     
    void write_message (std_msgs::msg::String &message, const std::string &state, const rclcpp::Time &time)
     Convert a string to a ROS std_msgs::msg::String.
     
    template<typename T >
    void write_message (EncodedState &message, const T &state, const rclcpp::Time &)
     Convert a state to an EncodedState (std_msgs::msg::UInt8MultiArray) message using protobuf encoding.
     
    void copy_parameter_value (const std::shared_ptr< const state_representation::ParameterInterface > &source_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)
     Copy the value of one parameter interface into another.
     
    rclcpp::Parameter write_parameter (const std::shared_ptr< state_representation::ParameterInterface > &parameter)
     Write a ROS Parameter from a ParameterInterface pointer.
     
    std::shared_ptr< state_representation::ParameterInterface > read_parameter (const rclcpp::Parameter &ros_parameter)
     Create a new ParameterInterface from a ROS Parameter object.
     
    std::shared_ptr< state_representation::ParameterInterface > read_parameter_const (const rclcpp::Parameter &ros_parameter, const std::shared_ptr< const state_representation::ParameterInterface > &parameter)
     Update the parameter value of a ParameterInterface from a ROS Parameter object only if the two parameters have the same name and the ROS Parameter value can be interpreted as a ParameterInterface value.
     
    void read_parameter (const rclcpp::Parameter &ros_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)
     Update the parameter value of a ParameterInterface from a ROS Parameter object.
     
    rclcpp::ParameterType get_ros_parameter_type (const state_representation::ParameterType &parameter_type)
     Given a state representation parameter type, get the corresponding ROS parameter type.
     
    void write_message (geometry_msgs::msg::Accel &message, const CartesianState &state, const rclcpp::Time &)
     
    void write_message (geometry_msgs::msg::AccelStamped &message, const CartesianState &state, const rclcpp::Time &time)
     
    void write_message (geometry_msgs::msg::Pose &message, const CartesianState &state, const rclcpp::Time &)
     
    void write_message (geometry_msgs::msg::PoseStamped &message, const CartesianState &state, const rclcpp::Time &time)
     
    void write_message (geometry_msgs::msg::Transform &message, const CartesianState &state, const rclcpp::Time &)
     
    void write_message (geometry_msgs::msg::TransformStamped &message, const CartesianState &state, const rclcpp::Time &time)
     
    void write_message (geometry_msgs::msg::Twist &message, const CartesianState &state, const rclcpp::Time &)
     
    void write_message (geometry_msgs::msg::TwistStamped &message, const CartesianState &state, const rclcpp::Time &time)
     
    void write_message (geometry_msgs::msg::Wrench &message, const CartesianState &state, const rclcpp::Time &)
     
    void write_message (geometry_msgs::msg::WrenchStamped &message, const CartesianState &state, const rclcpp::Time &time)
     
    void write_message (sensor_msgs::msg::JointState &message, const JointState &state, const rclcpp::Time &time)
     
    void write_message (tf2_msgs::msg::TFMessage &message, const CartesianState &state, const rclcpp::Time &time)
     
    template<typename U , typename T >
    void write_message (U &message, const Parameter< T > &state, const rclcpp::Time &)
     
    +template void write_message< std_msgs::msg::Float64, double > (std_msgs::msg::Float64 &message, const Parameter< double > &state, const rclcpp::Time &)
     
    +template void write_message< std_msgs::msg::Float64MultiArray, std::vector< double > > (std_msgs::msg::Float64MultiArray &message, const Parameter< std::vector< double > > &state, const rclcpp::Time &)
     
    +template void write_message< std_msgs::msg::Bool, bool > (std_msgs::msg::Bool &message, const Parameter< bool > &state, const rclcpp::Time &)
     
    +template void write_message< std_msgs::msg::String, std::string > (std_msgs::msg::String &message, const Parameter< std::string > &state, const rclcpp::Time &)
     
    template<>
    void write_message (geometry_msgs::msg::Transform &message, const Parameter< CartesianPose > &state, const rclcpp::Time &time)
     
    template<>
    void write_message (geometry_msgs::msg::TransformStamped &message, const Parameter< CartesianPose > &state, const rclcpp::Time &time)
     
    template<>
    void write_message (tf2_msgs::msg::TFMessage &message, const Parameter< CartesianPose > &state, const rclcpp::Time &time)
     
    void copy_parameter_value (const std::shared_ptr< const ParameterInterface > &source_parameter, const std::shared_ptr< ParameterInterface > &parameter)
     
    rclcpp::Parameter write_parameter (const std::shared_ptr< ParameterInterface > &parameter)
     
    std::shared_ptr< ParameterInterface > read_parameter_const (const rclcpp::Parameter &ros_parameter, const std::shared_ptr< const ParameterInterface > &parameter)
     
    void read_parameter (const rclcpp::Parameter &ros_parameter, const std::shared_ptr< ParameterInterface > &parameter)
     
    rclcpp::ParameterType get_ros_parameter_type (const ParameterType &parameter_type)
     
    +

    Detailed Description

    +

    Modulo Core translation module for converting between ROS2 and state_representation data types.

    +

    Function Documentation

    + +

    ◆ copy_parameter_value() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::copy_parameter_value (const std::shared_ptr< const ParameterInterface > & source_parameter,
    const std::shared_ptr< ParameterInterface > & parameter 
    )
    +
    + +

    Definition at line 15 of file parameter_translators.cpp.

    + +
    +
    + +

    ◆ copy_parameter_value() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::copy_parameter_value (const std::shared_ptr< const state_representation::ParameterInterface > & source_parameter,
    const std::shared_ptr< state_representation::ParameterInterface > & parameter 
    )
    +
    + +

    Copy the value of one parameter interface into another.

    +

    When referencing a Parameter instance through a ParameterInterface pointer, it is necessary to know the parameter type to get or set the parameter value. Sometimes it is desirable to update the parameter value from another compatible ParameterInterface, while still preserving the reference to the original instance. This helper function calls the getters and setters of the appropriate parameter type to modify the value of the parameter instance while preserving the reference of the original pointer.

    Parameters
    + + + +
    source_parameterThe ParameterInterface with a value to copy
    parameterThe destination ParameterInterface to be updated
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::ParameterTranslationExceptionif the copying failed
    +
    +
    + +
    +
    + +

    ◆ get_ros_parameter_type() [1/2]

    + +
    +
    + + + + + + + + +
    rclcpp::ParameterType modulo_core::translators::get_ros_parameter_type (const ParameterType & parameter_type)
    +
    + +

    Definition at line 261 of file parameter_translators.cpp.

    + +
    +
    + +

    ◆ get_ros_parameter_type() [2/2]

    + +
    +
    + + + + + + + + +
    rclcpp::ParameterType modulo_core::translators::get_ros_parameter_type (const state_representation::ParameterType & parameter_type)
    +
    + +

    Given a state representation parameter type, get the corresponding ROS parameter type.

    +
    Parameters
    + + +
    parameter_typeThe state representation parameter type
    +
    +
    +
    Returns
    The corresponding ROS parameter type
    + +
    +
    + +

    ◆ read_message() [1/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (bool & state,
    const std_msgs::msg::Bool & message 
    )
    +
    + +

    Convert a ROS std_msgs::msg::Bool to a boolean.

    +
    Parameters
    + + + +
    stateThe state to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 85 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [2/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (double & state,
    const std_msgs::msg::Float64 & message 
    )
    +
    + +

    Convert a ROS std_msgs::msg::Float64 to a double.

    +
    Parameters
    + + + +
    stateThe state to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 89 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [3/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (int & state,
    const std_msgs::msg::Int32 & message 
    )
    +
    + +

    Convert a ROS std_msgs::msg::Int32 to an integer.

    +
    Parameters
    + + + +
    stateThe state to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 97 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [4/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::Accel & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::Accel to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 17 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [5/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::AccelStamped & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::AccelStamped to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 22 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [6/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::Pose & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::Pose to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 27 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [7/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::PoseStamped & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::PoseStamped to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 32 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [8/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::Transform & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::Transform to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 37 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [9/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::TransformStamped & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::TransformStamped to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 42 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [10/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::Twist & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::Twist to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 48 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [11/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::TwistStamped & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::TwistStamped to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 53 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [12/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::Wrench & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::Wrench to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 58 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [13/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::CartesianState & state,
    const geometry_msgs::msg::WrenchStamped & message 
    )
    +
    + +

    Convert a ROS geometry_msgs::msg::WrenchStamped to a CartesianState.

    +
    Parameters
    + + + +
    stateThe CartesianState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 63 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [14/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::JointState & state,
    const sensor_msgs::msg::JointState & message 
    )
    +
    + +

    Convert a ROS sensor_msgs::msg::JointState to a JointState.

    +
    Parameters
    + + + +
    stateThe JointState to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 68 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [15/19]

    + +
    +
    +
    +template<typename T , typename U >
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (state_representation::Parameter< T > & state,
    const U & message 
    )
    +
    + +

    Template function to convert a ROS std_msgs::msg::T to a Parameter<T>

    +
    Template Parameters
    + + + +
    TAll types of parameters supported in ROS std messages
    UAll types of parameters supported in ROS std messages
    +
    +
    +
    Parameters
    + + + +
    stateThe Parameter<T> to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 115 of file message_readers.hpp.

    + +
    +
    + +

    ◆ read_message() [16/19]

    + +
    +
    +
    +template<>
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (std::shared_ptr< state_representation::State > & state,
    const EncodedStatemessage 
    )
    +
    +inline
    +
    + +

    Definition at line 278 of file message_readers.hpp.

    + +
    +
    + +

    ◆ read_message() [17/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (std::string & state,
    const std_msgs::msg::String & message 
    )
    +
    + +

    Convert a ROS std_msgs::msg::String to a string.

    +
    Parameters
    + + + +
    stateThe state to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 101 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [18/19]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (std::vector< double > & state,
    const std_msgs::msg::Float64MultiArray & message 
    )
    +
    + +

    Convert a ROS std_msgs::msg::Float64MultiArray to a vector of double.

    +
    Parameters
    + + + +
    stateThe state to populate
    messageThe ROS message to read from
    +
    +
    + +

    Definition at line 93 of file message_readers.cpp.

    + +
    +
    + +

    ◆ read_message() [19/19]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_message (T & state,
    const EncodedStatemessage 
    )
    +
    +inline
    +
    + +

    Convert a ROS std_msgs::msg::UInt8MultiArray message to a State using protobuf decoding.

    +
    Template Parameters
    + + +
    TA state_representation::State type
    +
    +
    +
    Parameters
    + + + +
    stateThe state to populate
    messageThe ROS message to read from
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the translation failed or is not supported.
    +
    +
    + +

    Definition at line 162 of file message_readers.hpp.

    + +
    +
    + +

    ◆ read_parameter() [1/3]

    + +
    +
    + + + + + + + + +
    std::shared_ptr< ParameterInterface > modulo_core::translators::read_parameter (const rclcpp::Parameter & ros_parameter)
    +
    + +

    Create a new ParameterInterface from a ROS Parameter object.

    +
    Parameters
    + + +
    ros_parameterThe ROS parameter object to read
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::ParameterTranslationExceptionif the ROS parameter could not be read
    +
    +
    +
    Returns
    A new ParameterInterface pointer
    + +

    Definition at line 142 of file parameter_translators.cpp.

    + +
    +
    + +

    ◆ read_parameter() [2/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_parameter (const rclcpp::Parameter & ros_parameter,
    const std::shared_ptr< ParameterInterface > & parameter 
    )
    +
    + +

    Definition at line 254 of file parameter_translators.cpp.

    + +
    +
    + +

    ◆ read_parameter() [3/3]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::read_parameter (const rclcpp::Parameter & ros_parameter,
    const std::shared_ptr< state_representation::ParameterInterface > & parameter 
    )
    +
    + +

    Update the parameter value of a ParameterInterface from a ROS Parameter object.

    +

    The destination ParameterInterface must have a compatible parameter name and type.

    Parameters
    + + + +
    ros_parameterThe ROS parameter object to read
    parameterAn existing ParameterInterface pointer
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::ParameterTranslationExceptionif the ROS parameter could not be read
    +
    +
    + +
    +
    + +

    ◆ read_parameter_const() [1/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< ParameterInterface > modulo_core::translators::read_parameter_const (const rclcpp::Parameter & ros_parameter,
    const std::shared_ptr< const ParameterInterface > & parameter 
    )
    +
    + +

    Definition at line 193 of file parameter_translators.cpp.

    + +
    +
    + +

    ◆ read_parameter_const() [2/2]

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    std::shared_ptr< state_representation::ParameterInterface > modulo_core::translators::read_parameter_const (const rclcpp::Parameter & ros_parameter,
    const std::shared_ptr< const state_representation::ParameterInterface > & parameter 
    )
    +
    + +

    Update the parameter value of a ParameterInterface from a ROS Parameter object only if the two parameters have the same name and the ROS Parameter value can be interpreted as a ParameterInterface value.

    +
    Parameters
    + + + +
    ros_parameterThe ROS parameter object to read
    parameterAn existing ParameterInterface pointer
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::ParameterTranslationExceptionif the ROS parameter could not be read
    +
    +
    +
    Returns
    A new ParameterInterface pointer with the updated value
    + +
    +
    + +

    ◆ safe_dynamic_cast()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::safe_dynamic_cast (std::shared_ptr< state_representation::State > & state,
    std::shared_ptr< state_representation::State > & new_state 
    )
    +
    +inline
    +
    + +

    Update the value referenced by a state pointer from a new_state pointer.

    +

    The base state and new_state pointers must reference state-derived instances of type T. This function dynamically downcasts each pointer to a pointer of the derived type and assigns the de-referenced value from the new_state parameter to the address of the state pointer.

    Template Parameters
    + + +
    TThe derived state type
    +
    +
    +
    Parameters
    + + + +
    stateA base state pointer referencing a state-derived instance to be modified
    new_stateA base state pointer referencing a state-derived instance to be copied into the state parameter
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif either parameter cannot be cast to state type T
    +
    +
    + +

    Definition at line 202 of file message_readers.hpp.

    + +
    +
    + +

    ◆ safe_dynamic_pointer_cast()

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + +
    std::shared_ptr< T > modulo_core::translators::safe_dynamic_pointer_cast (std::shared_ptr< state_representation::State > & state)
    +
    +inline
    +
    + +

    Safely downcast a base state pointer to a derived state pointer.

    +

    This utility function asserts that result of the dynamic pointer cast is not null, and throws an exception otherwise. This helps to prevent uncaught segmentation faults from a null pointer dynamic cast result being passed to subsequent execution steps.

    Template Parameters
    + + +
    TThe derived state type
    +
    +
    +
    Parameters
    + + +
    stateA base state pointer referencing a state-derived instance
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the dynamic cast results in a null pointer
    +
    +
    +
    Returns
    The derived pointer of type T
    + +

    Definition at line 182 of file message_readers.hpp.

    + +
    +
    + +

    ◆ safe_joint_state_conversion()

    + +
    +
    +
    +template<typename StateT , typename NewStateT >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::safe_joint_state_conversion (std::shared_ptr< state_representation::State > & state,
    std::shared_ptr< state_representation::State > & new_state,
    std::function< void(StateT &, const NewStateT &)> conversion_callback = {} 
    )
    +
    +inline
    +
    + +

    Update the value referenced by a state pointer by dynamically casting and converting the value referenced by a new_state pointer.

    +

    This utility function is intended to help the conversion between joint-state-derived instances encapsulated in base state pointers. It sets the name and joint names of the referenced state instance from the new_state, and then passes the referenced values to a user-defined conversion callback function. For example, if state is referencing a JointPositions instance A and new_state is referencing a JointState instance B, the conversion callback function should invoke A.set_positions(B.get_positions()).

    Template Parameters
    + + + +
    StateTThe derived joint state type of the destination state
    NewStateTThe derived joint state type of the new state
    +
    +
    +
    Parameters
    + + + + +
    stateA base state pointer referencing a joint-state-derived instance to be modified
    new_stateA base state pointer referencing a joint-state-derived instance to be converted into the state parameter
    conversion_callbackA callback function taking parameters of type StateT and NewStateT, where the referenced StateT instance can be modified as needed from the NewStateT value
    +
    +
    + +

    Definition at line 262 of file message_readers.hpp.

    + +
    +
    + +

    ◆ safe_spatial_state_conversion()

    + +
    +
    +
    +template<typename StateT , typename NewStateT >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::safe_spatial_state_conversion (std::shared_ptr< state_representation::State > & state,
    std::shared_ptr< state_representation::State > & new_state,
    std::function< void(StateT &, const NewStateT &)> conversion_callback = {} 
    )
    +
    +inline
    +
    + +

    Update the value referenced by a state pointer by dynamically casting and converting the value referenced by a new_state pointer.

    +

    This utility function is intended to help the conversion between spatial-state-derived instances encapsulated in base state pointers. It sets the name and reference frame of the referenced state instance from the new_state, and then passes the referenced values to a user-defined conversion callback function. For example, if state is referencing a CartesianPose instance A and new_state is referencing a CartesianState instance B, the conversion callback function should invoke A.set_pose(B.get_pose()).

    Template Parameters
    + + + +
    StateTThe derived spatial state type of the destination state
    NewStateTThe derived spatial state type of the new state
    +
    +
    +
    Parameters
    + + + + +
    stateA base state pointer referencing a spatial-state-derived instance to be modified
    new_stateA base state pointer referencing a spatial-state-derived instance to be converted into the state parameter
    conversion_callbackA callback function taking parameters of type StateT and NewStateT, where the referenced StateT instance can be modified as needed from the NewStateT value
    +
    +
    + +

    Definition at line 227 of file message_readers.hpp.

    + +
    +
    + +

    ◆ write_message() [1/35]

    + +
    +
    +
    +template<typename T >
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (EncodedStatemessage,
    const T & state,
    const rclcpp::Time &  
    )
    +
    +inline
    +
    + +

    Convert a state to an EncodedState (std_msgs::msg::UInt8MultiArray) message using protobuf encoding.

    +
    Template Parameters
    + + +
    TA state_representation::State type
    +
    +
    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the translation failed or is not supported.
    +
    +
    + +

    Definition at line 226 of file message_writers.hpp.

    + +
    +
    + +

    ◆ write_message() [2/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Accel & message,
    const CartesianState & state,
    const rclcpp::Time &  
    )
    +
    + +

    Definition at line 28 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [3/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Accel & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::Accel.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [4/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::AccelStamped & message,
    const CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 37 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [5/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::AccelStamped & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::AccelStamped.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [6/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Pose & message,
    const CartesianState & state,
    const rclcpp::Time &  
    )
    +
    + +

    Definition at line 43 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [7/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Pose & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::Pose.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [8/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::PoseStamped & message,
    const CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 52 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [9/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::PoseStamped & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::PoseStamped.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [10/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Transform & message,
    const CartesianState & state,
    const rclcpp::Time &  
    )
    +
    + +

    Definition at line 58 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [11/35]

    + +
    +
    +
    +template<>
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Transform & message,
    const Parameter< CartesianPose > & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 157 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [12/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Transform & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::Transform.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [13/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::TransformStamped & message,
    const CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 68 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [14/35]

    + +
    +
    +
    +template<>
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::TransformStamped & message,
    const Parameter< CartesianPose > & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 162 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [15/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::TransformStamped & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::TransformStamped.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [16/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Twist & message,
    const CartesianState & state,
    const rclcpp::Time &  
    )
    +
    + +

    Definition at line 75 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [17/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Twist & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::Twist.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [18/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::TwistStamped & message,
    const CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 84 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [19/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::TwistStamped & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::TwistStamped.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [20/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Wrench & message,
    const CartesianState & state,
    const rclcpp::Time &  
    )
    +
    + +

    Definition at line 90 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [21/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::Wrench & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::Wrench.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [22/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::WrenchStamped & message,
    const CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 99 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [23/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (geometry_msgs::msg::WrenchStamped & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS geometry_msgs::msg::WrenchStamped.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [24/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (sensor_msgs::msg::JointState & message,
    const JointState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 105 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [25/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (sensor_msgs::msg::JointState & message,
    const state_representation::JointState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a JointState to a ROS sensor_msgs::msg::JointState.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [26/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (std_msgs::msg::Bool & message,
    const bool & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a boolean to a ROS std_msgs::msg::Bool.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    + +

    Definition at line 173 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [27/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (std_msgs::msg::Float64 & message,
    const double & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a double to a ROS std_msgs::msg::Float64.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    + +

    Definition at line 177 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [28/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (std_msgs::msg::Float64MultiArray & message,
    const std::vector< double > & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a vector of double to a ROS std_msgs::msg::Float64MultiArray.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    + +

    Definition at line 181 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [29/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (std_msgs::msg::Int32 & message,
    const int & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert an integer to a ROS std_msgs::msg::Int32.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    + +

    Definition at line 185 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [30/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (std_msgs::msg::String & message,
    const std::string & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a string to a ROS std_msgs::msg::String.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    + +

    Definition at line 189 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [31/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (tf2_msgs::msg::TFMessage & message,
    const CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 120 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [32/35]

    + +
    +
    +
    +template<>
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (tf2_msgs::msg::TFMessage & message,
    const Parameter< CartesianPose > & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Definition at line 169 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [33/35]

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (tf2_msgs::msg::TFMessage & message,
    const state_representation::CartesianState & state,
    const rclcpp::Time & time 
    )
    +
    + +

    Convert a CartesianState to a ROS tf2_msgs::msg::TFMessage.

    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_message() [34/35]

    + +
    +
    +
    +template<typename U , typename T >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (U & message,
    const Parameter< T > & state,
    const rclcpp::Time &  
    )
    +
    + +

    Definition at line 131 of file message_writers.cpp.

    + +
    +
    + +

    ◆ write_message() [35/35]

    + +
    +
    +
    +template<typename U , typename T >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void modulo_core::translators::write_message (U & message,
    const state_representation::Parameter< T > & state,
    const rclcpp::Time &  
    )
    +
    + +

    Convert a Parameter<T> to a ROS equivalent representation.

    +
    Template Parameters
    + + + +
    TAll types of parameters supported in ROS std messages
    UAll types of parameters supported in ROS std messages
    +
    +
    +
    Parameters
    + + + + +
    messageThe ROS message to populate
    stateThe state to read from
    timeThe time of the message
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::MessageTranslationExceptionif the provided state is empty.
    +
    +
    + +
    +
    + +

    ◆ write_parameter() [1/2]

    + +
    +
    + + + + + + + + +
    rclcpp::Parameter modulo_core::translators::write_parameter (const std::shared_ptr< ParameterInterface > & parameter)
    +
    + +

    Definition at line 90 of file parameter_translators.cpp.

    + +
    +
    + +

    ◆ write_parameter() [2/2]

    + +
    +
    + + + + + + + + +
    rclcpp::Parameter modulo_core::translators::write_parameter (const std::shared_ptr< state_representation::ParameterInterface > & parameter)
    +
    + +

    Write a ROS Parameter from a ParameterInterface pointer.

    +
    Parameters
    + + +
    parameterThe ParameterInterface pointer with a name and value
    +
    +
    +
    Exceptions
    + + +
    modulo_core::exceptions::ParameterTranslationExceptionif the ROS parameter could not be written
    +
    +
    +
    Returns
    A new ROS Parameter object
    + +
    +
    +
    + + + + diff --git a/versions/v4.2.2/namespaces.html b/versions/v4.2.2/namespaces.html new file mode 100644 index 000000000..6cccbc1e1 --- /dev/null +++ b/versions/v4.2.2/namespaces.html @@ -0,0 +1,113 @@ + + + + + + + +Modulo: Namespace List + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Nmodulo_componentsModulo components
     NexceptionsModulo component exception classes
     CAddServiceExceptionAn exception class to notify errors when adding a service
     CAddSignalExceptionAn exception class to notify errors when adding a signal
     CComponentExceptionA base class for all component exceptions
     CComponentParameterExceptionAn exception class to notify errors with component parameters
     CLookupTransformExceptionAn exception class to notify an error while looking up TF transforms
     NutilitiesModulo component utilities
     CComponentA wrapper for rclcpp::Node to simplify application composition through unified component interfaces
     CComponentInterfaceBase interface class for modulo components to wrap a ROS Node with custom behaviour
     CComponentServiceResponseResponse structure to be returned by component services
     CLifecycleComponentA wrapper for rclcpp_lifecycle::LifecycleNode to simplify application composition through unified component interfaces while supporting lifecycle states and transitions
     Nmodulo_coreModulo Core
     NcommunicationModulo Core communication module for handling messages on publication and subscription interfaces
     CMessagePairThe MessagePair stores a pointer to a variable and translates the value of this pointer back and forth between the corresponding ROS messages
     CMessagePairInterfaceInterface class to enable non-templated writing and reading ROS messages from derived MessagePair instances through dynamic down-casting
     CPublisherHandlerThe PublisherHandler handles different types of ROS publishers to activate, deactivate and publish data with those publishers
     CPublisherInterfaceInterface class to enable non-templated activating/deactivating/publishing of ROS publishers from derived PublisherHandler instances through dynamic down-casting
     CSubscriptionHandlerThe SubscriptionHandler handles different types of ROS subscriptions to receive data from those subscriptions
     CSubscriptionInterfaceInterface class to enable non-templated subscriptions with ROS subscriptions from derived SubscriptionHandler instances through dynamic down-casting
     NexceptionsModulo Core exceptions module for defining exception classes
     CCoreExceptionA base class for all core exceptions
     CInvalidPointerCastExceptionAn exception class to notify if the result of getting an instance of a derived class through dynamic down-casting of an object of the base class is not a correctly typed instance of the derived class
     CInvalidPointerExceptionAn exception class to notify if an object has no reference count (if the object is not owned by any pointer) when attempting to get a derived instance through dynamic down-casting
     CMessageTranslationExceptionAn exception class to notify that the translation of a ROS message failed
     CNullPointerExceptionAn exception class to notify that a certain pointer is null
     CParameterTranslationExceptionAn exception class to notify incompatibility when translating parameters from different sources
     NtranslatorsModulo Core translation module for converting between ROS2 and state_representation data types
    +
    +
    + + + + diff --git a/versions/v4.2.2/nav_f.png b/versions/v4.2.2/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/nav_fd.png b/versions/v4.2.2/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/nav_g.png b/versions/v4.2.2/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/open.png b/versions/v4.2.2/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +Modulo: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/versions/v4.2.2/parameter__translators_8cpp_source.html b/versions/v4.2.2/parameter__translators_8cpp_source.html new file mode 100644 index 000000000..ef97be70d --- /dev/null +++ b/versions/v4.2.2/parameter__translators_8cpp_source.html @@ -0,0 +1,385 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/src/translators/parameter_translators.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    parameter_translators.cpp
    +
    +
    +
    1#include "modulo_core/translators/parameter_translators.hpp"
    +
    2
    +
    3#include <clproto.hpp>
    +
    4#include <state_representation/space/cartesian/CartesianPose.hpp>
    +
    5#include <state_representation/space/cartesian/CartesianState.hpp>
    +
    6#include <state_representation/space/joint/JointPositions.hpp>
    +
    7#include <state_representation/space/joint/JointState.hpp>
    +
    8
    +
    9#include "modulo_core/exceptions/ParameterTranslationException.hpp"
    +
    10
    +
    11using namespace state_representation;
    +
    12
    + +
    14
    + +
    16 const std::shared_ptr<const ParameterInterface>& source_parameter,
    +
    17 const std::shared_ptr<ParameterInterface>& parameter
    +
    18) {
    +
    19 if (source_parameter->get_parameter_type() != parameter->get_parameter_type()) {
    +
    20 throw exceptions::ParameterTranslationException(
    +
    21 "Source parameter " + source_parameter->get_name()
    +
    22 + " to be copied does not have the same type as destination parameter " + parameter->get_name() + "("
    +
    23 + get_parameter_type_name(source_parameter->get_parameter_type()) + " vs. "
    +
    24 + get_parameter_type_name(parameter->get_parameter_type()) + ")");
    +
    25 }
    +
    26 switch (source_parameter->get_parameter_type()) {
    +
    27 case ParameterType::BOOL:
    +
    28 parameter->set_parameter_value(source_parameter->get_parameter_value<bool>());
    +
    29 return;
    +
    30 case ParameterType::BOOL_ARRAY:
    +
    31 parameter->set_parameter_value(source_parameter->get_parameter_value<std::vector<bool>>());
    +
    32 return;
    +
    33 case ParameterType::INT:
    +
    34 parameter->set_parameter_value(source_parameter->get_parameter_value<int>());
    +
    35 return;
    +
    36 case ParameterType::INT_ARRAY:
    +
    37 parameter->set_parameter_value(source_parameter->get_parameter_value<std::vector<int>>());
    +
    38 return;
    +
    39 case ParameterType::DOUBLE:
    +
    40 parameter->set_parameter_value(source_parameter->get_parameter_value<double>());
    +
    41 return;
    +
    42 case ParameterType::DOUBLE_ARRAY:
    +
    43 parameter->set_parameter_value(source_parameter->get_parameter_value<std::vector<double>>());
    +
    44 return;
    +
    45 case ParameterType::STRING:
    +
    46 parameter->set_parameter_value(source_parameter->get_parameter_value<std::string>());
    +
    47 return;
    +
    48 case ParameterType::STRING_ARRAY:
    +
    49 parameter->set_parameter_value(source_parameter->get_parameter_value<std::vector<std::string>>());
    +
    50 return;
    +
    51 case ParameterType::VECTOR:
    +
    52 parameter->set_parameter_value(source_parameter->get_parameter_value<Eigen::VectorXd>());
    +
    53 return;
    +
    54 case ParameterType::MATRIX:
    +
    55 parameter->set_parameter_value(source_parameter->get_parameter_value<Eigen::MatrixXd>());
    +
    56 return;
    +
    57 case ParameterType::STATE:
    +
    58 if (source_parameter->get_parameter_state_type() != parameter->get_parameter_state_type()) {
    +
    59 throw exceptions::ParameterTranslationException(
    +
    60 "Source parameter " + source_parameter->get_name()
    +
    61 + " to be copied does not have the same parameter state type as destination parameter "
    +
    62 + parameter->get_name() + "(" + get_state_type_name(source_parameter->get_parameter_state_type()) + " vs. "
    +
    63 + get_state_type_name(parameter->get_parameter_state_type()) + ")");
    +
    64 }
    +
    65 switch (source_parameter->get_parameter_state_type()) {
    +
    66 case StateType::CARTESIAN_STATE:
    +
    67 parameter->set_parameter_value(source_parameter->get_parameter_value<CartesianState>());
    +
    68 return;
    +
    69 case StateType::CARTESIAN_POSE:
    +
    70 parameter->set_parameter_value(source_parameter->get_parameter_value<CartesianPose>());
    +
    71 return;
    +
    72 case StateType::JOINT_STATE:
    +
    73 parameter->set_parameter_value(source_parameter->get_parameter_value<JointState>());
    +
    74 return;
    +
    75 case StateType::JOINT_POSITIONS:
    +
    76 parameter->set_parameter_value(source_parameter->get_parameter_value<JointPositions>());
    +
    77 return;
    +
    78 default:
    +
    79 break;
    +
    80 }
    +
    81 break;
    +
    82 default:
    +
    83 break;
    +
    84 }
    +
    85 throw exceptions::ParameterTranslationException(
    +
    86 "Could not copy the value from source parameter " + source_parameter->get_name() + " into parameter "
    +
    87 + parameter->get_name());
    +
    88}
    +
    89
    +
    90rclcpp::Parameter write_parameter(const std::shared_ptr<ParameterInterface>& parameter) {
    +
    91 if (parameter->is_empty()) {
    +
    92 return rclcpp::Parameter(parameter->get_name());
    +
    93 }
    +
    94 switch (parameter->get_parameter_type()) {
    +
    95 case ParameterType::BOOL:
    +
    96 return {parameter->get_name(), parameter->get_parameter_value<bool>()};
    +
    97 case ParameterType::BOOL_ARRAY:
    +
    98 return {parameter->get_name(), parameter->get_parameter_value<std::vector<bool>>()};
    +
    99 case ParameterType::INT:
    +
    100 return {parameter->get_name(), parameter->get_parameter_value<int>()};
    +
    101 case ParameterType::INT_ARRAY:
    +
    102 return {parameter->get_name(), parameter->get_parameter_value<std::vector<int>>()};
    +
    103 case ParameterType::DOUBLE:
    +
    104 return {parameter->get_name(), parameter->get_parameter_value<double>()};
    +
    105 case ParameterType::DOUBLE_ARRAY:
    +
    106 return {parameter->get_name(), parameter->get_parameter_value<std::vector<double>>()};
    +
    107 case ParameterType::STRING:
    +
    108 return {parameter->get_name(), parameter->get_parameter_value<std::string>()};
    +
    109 case ParameterType::STRING_ARRAY:
    +
    110 return {parameter->get_name(), parameter->get_parameter_value<std::vector<std::string>>()};
    +
    111 case ParameterType::STATE: {
    +
    112 switch (parameter->get_parameter_state_type()) {
    +
    113 case StateType::CARTESIAN_STATE:
    +
    114 return {parameter->get_name(), clproto::to_json(parameter->get_parameter_value<CartesianState>())};
    +
    115 case StateType::CARTESIAN_POSE:
    +
    116 return {parameter->get_name(), clproto::to_json(parameter->get_parameter_value<CartesianPose>())};
    +
    117 case StateType::JOINT_STATE:
    +
    118 return {parameter->get_name(), clproto::to_json(parameter->get_parameter_value<JointState>())};
    +
    119 case StateType::JOINT_POSITIONS:
    +
    120 return {parameter->get_name(), clproto::to_json(parameter->get_parameter_value<JointPositions>())};
    +
    121 default:
    +
    122 break;
    +
    123 }
    +
    124 break;
    +
    125 }
    +
    126 case ParameterType::VECTOR: {
    +
    127 auto eigen_vector = parameter->get_parameter_value<Eigen::VectorXd>();
    +
    128 std::vector<double> vec(eigen_vector.data(), eigen_vector.data() + eigen_vector.size());
    +
    129 return {parameter->get_name(), vec};
    +
    130 }
    +
    131 case ParameterType::MATRIX: {
    +
    132 auto eigen_matrix = parameter->get_parameter_value<Eigen::MatrixXd>();
    +
    133 std::vector<double> vec(eigen_matrix.data(), eigen_matrix.data() + eigen_matrix.size());
    +
    134 return {parameter->get_name(), vec};
    +
    135 }
    +
    136 default:
    +
    137 break;
    +
    138 }
    +
    139 throw exceptions::ParameterTranslationException("Parameter " + parameter->get_name() + " could not be written!");
    +
    140}
    +
    141
    +
    +
    142std::shared_ptr<ParameterInterface> read_parameter(const rclcpp::Parameter& parameter) {
    +
    143 switch (parameter.get_type()) {
    +
    144 case rclcpp::PARAMETER_BOOL:
    +
    145 return make_shared_parameter(parameter.get_name(), parameter.as_bool());
    +
    146 case rclcpp::PARAMETER_BOOL_ARRAY:
    +
    147 return make_shared_parameter(parameter.get_name(), parameter.as_bool_array());
    +
    148 case rclcpp::PARAMETER_INTEGER:
    +
    149 return make_shared_parameter(parameter.get_name(), static_cast<int>(parameter.as_int()));
    +
    150 case rclcpp::PARAMETER_INTEGER_ARRAY: {
    +
    151 auto array = parameter.as_integer_array();
    +
    152 std::vector<int> int_array(array.begin(), array.end());
    +
    153 return make_shared_parameter(parameter.get_name(), int_array);
    +
    154 }
    +
    155 case rclcpp::PARAMETER_DOUBLE:
    +
    156 return make_shared_parameter(parameter.get_name(), parameter.as_double());
    +
    157 case rclcpp::PARAMETER_DOUBLE_ARRAY:
    +
    158 return make_shared_parameter(parameter.get_name(), parameter.as_double_array());
    +
    159 case rclcpp::PARAMETER_STRING_ARRAY:
    +
    160 return make_shared_parameter<std::vector<std::string>>(parameter.get_name(), parameter.as_string_array());
    +
    161 case rclcpp::PARAMETER_STRING: {
    +
    162 // TODO: consider dedicated clproto::decode<std::shared_ptr<ParameterInterface>>(msg) specialization in library
    +
    163 std::string encoding;
    +
    164 try {
    +
    165 encoding = clproto::from_json(parameter.as_string());
    +
    166 } catch (const clproto::JsonParsingException&) {}
    +
    167 if (!clproto::is_valid(encoding)) {
    +
    168 return make_shared_parameter<std::string>(parameter.get_name(), parameter.as_string());
    +
    169 }
    +
    170 switch (clproto::check_message_type(encoding)) {
    +
    171 case clproto::CARTESIAN_STATE_MESSAGE:
    +
    172 return make_shared_parameter<CartesianState>(parameter.get_name(), clproto::decode<CartesianState>(encoding));
    +
    173 case clproto::CARTESIAN_POSE_MESSAGE:
    +
    174 return make_shared_parameter<CartesianPose>(parameter.get_name(), clproto::decode<CartesianPose>(encoding));
    +
    175 case clproto::JOINT_STATE_MESSAGE:
    +
    176 return make_shared_parameter<JointState>(parameter.get_name(), clproto::decode<JointState>(encoding));
    +
    177 case clproto::JOINT_POSITIONS_MESSAGE:
    +
    178 return make_shared_parameter<JointPositions>(parameter.get_name(), clproto::decode<JointPositions>(encoding));
    +
    179 default:
    + +
    181 "Parameter " + parameter.get_name() + " has an unsupported encoded message type");
    +
    182 }
    +
    183 }
    +
    184 case rclcpp::PARAMETER_BYTE_ARRAY:
    +
    185 // TODO: try clproto decode, re-use logic from above
    +
    186 throw exceptions::ParameterTranslationException("Parameter byte arrays are not currently supported.");
    +
    187 default:
    +
    188 break;
    +
    189 }
    +
    190 throw exceptions::ParameterTranslationException("Parameter " + parameter.get_name() + " could not be read!");
    +
    191}
    +
    +
    192
    +
    193std::shared_ptr<ParameterInterface> read_parameter_const(
    +
    194 const rclcpp::Parameter& ros_parameter, const std::shared_ptr<const ParameterInterface>& parameter
    +
    195) {
    +
    196 if (ros_parameter.get_name() != parameter->get_name()) {
    + +
    198 "The ROS parameter " + ros_parameter.get_name()
    +
    199 + " to be read does not have the same name as the reference parameter " + parameter->get_name());
    +
    200 }
    +
    201 if (ros_parameter.get_type() == rclcpp::PARAMETER_NOT_SET) {
    +
    202 return make_shared_parameter_interface(
    +
    203 parameter->get_name(), parameter->get_parameter_type(), parameter->get_parameter_state_type());
    +
    204 }
    +
    205 auto new_parameter = read_parameter(ros_parameter);
    +
    206 if (new_parameter->get_parameter_type() == parameter->get_parameter_type()) {
    +
    207 if (new_parameter->get_parameter_state_type() != parameter->get_parameter_state_type()) {
    +
    208 throw exceptions::ParameterTranslationException(
    +
    209 "The received state parameter " + ros_parameter.get_name()
    +
    210 + "does not have the same state type as the reference parameter ("
    +
    211 + get_state_type_name(new_parameter->get_parameter_state_type()) + " vs. "
    +
    212 + get_state_type_name(parameter->get_parameter_state_type()) + ")");
    +
    213 }
    +
    214 return new_parameter;
    +
    215 }
    +
    216 switch (new_parameter->get_parameter_type()) {
    +
    217 case ParameterType::DOUBLE_ARRAY: {
    +
    218 auto value = new_parameter->get_parameter_value<std::vector<double>>();
    +
    219 switch (parameter->get_parameter_type()) {
    +
    220 case ParameterType::VECTOR: {
    +
    221 Eigen::VectorXd vector = Eigen::Map<Eigen::VectorXd>(value.data(), static_cast<Eigen::Index>(value.size()));
    +
    222 new_parameter = make_shared_parameter(parameter->get_name(), vector);
    +
    223 break;
    +
    224 }
    +
    225 case ParameterType::MATRIX: {
    +
    226 auto matrix = parameter->get_parameter_value<Eigen::MatrixXd>();
    +
    227 if (static_cast<std::size_t>(matrix.size()) != value.size()) {
    +
    228 throw exceptions::ParameterTranslationException(
    +
    229 "The ROS parameter " + ros_parameter.get_name() + " with type double array has size "
    +
    230 + std::to_string(value.size()) + " while the reference parameter matrix " + parameter->get_name()
    +
    231 + " has size " + std::to_string(matrix.size()));
    +
    232 }
    +
    233 matrix = Eigen::Map<Eigen::MatrixXd>(value.data(), matrix.rows(), matrix.cols());
    +
    234 new_parameter = make_shared_parameter(parameter->get_name(), matrix);
    +
    235 break;
    +
    236 }
    +
    237 default:
    +
    238 throw exceptions::ParameterTranslationException(
    +
    239 "The ROS parameter " + ros_parameter.get_name()
    +
    240 + " with type double array cannot be interpreted by reference parameter " + parameter->get_name() + " ("
    +
    241 + get_parameter_type_name(parameter->get_parameter_type()) + ")");
    +
    242 }
    +
    243 break;
    +
    244 }
    +
    245 default:
    +
    246 throw exceptions::ParameterTranslationException(
    +
    247 "Incompatible parameter type (" + get_parameter_type_name(new_parameter->get_parameter_type())
    +
    248 + ") encountered while reading parameter " + parameter->get_name() + " ("
    +
    249 + get_parameter_type_name(parameter->get_parameter_type()) + ")");
    +
    250 }
    +
    251 return new_parameter;
    +
    252}
    +
    253
    +
    254void read_parameter(
    +
    255 const rclcpp::Parameter& ros_parameter, const std::shared_ptr<ParameterInterface>& parameter
    +
    256) {
    +
    257 auto new_parameter = read_parameter_const(ros_parameter, parameter);
    +
    258 copy_parameter_value(new_parameter, parameter);
    +
    259}
    +
    260
    +
    261rclcpp::ParameterType get_ros_parameter_type(const ParameterType& parameter_type) {
    +
    262 switch (parameter_type) {
    +
    263 case ParameterType::BOOL:
    +
    264 return rclcpp::ParameterType::PARAMETER_BOOL;
    +
    265 case ParameterType::BOOL_ARRAY:
    +
    266 return rclcpp::ParameterType::PARAMETER_BOOL_ARRAY;
    +
    267 case ParameterType::INT:
    +
    268 return rclcpp::ParameterType::PARAMETER_INTEGER;
    +
    269 case ParameterType::INT_ARRAY:
    +
    270 return rclcpp::ParameterType::PARAMETER_INTEGER_ARRAY;
    +
    271 case ParameterType::DOUBLE:
    +
    272 return rclcpp::ParameterType::PARAMETER_DOUBLE;
    +
    273 case ParameterType::DOUBLE_ARRAY:
    +
    274 case ParameterType::VECTOR:
    +
    275 case ParameterType::MATRIX:
    +
    276 return rclcpp::ParameterType::PARAMETER_DOUBLE_ARRAY;
    +
    277 case ParameterType::STRING:
    +
    278 return rclcpp::ParameterType::PARAMETER_STRING;
    +
    279 case ParameterType::STRING_ARRAY:
    +
    280 case ParameterType::STATE:
    +
    281 return rclcpp::ParameterType::PARAMETER_STRING_ARRAY;
    +
    282 default:
    +
    283 return rclcpp::ParameterType::PARAMETER_NOT_SET;
    +
    284 }
    +
    285}
    +
    286}// namespace modulo_core::translators
    +
    An exception class to notify incompatibility when translating parameters from different sources.
    +
    Modulo Core translation module for converting between ROS2 and state_representation data types.
    +
    std::shared_ptr< state_representation::ParameterInterface > read_parameter(const rclcpp::Parameter &ros_parameter)
    Create a new ParameterInterface from a ROS Parameter object.
    +
    rclcpp::Parameter write_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
    Write a ROS Parameter from a ParameterInterface pointer.
    +
    rclcpp::ParameterType get_ros_parameter_type(const state_representation::ParameterType &parameter_type)
    Given a state representation parameter type, get the corresponding ROS parameter type.
    +
    void copy_parameter_value(const std::shared_ptr< const state_representation::ParameterInterface > &source_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)
    Copy the value of one parameter interface into another.
    +
    std::shared_ptr< state_representation::ParameterInterface > read_parameter_const(const rclcpp::Parameter &ros_parameter, const std::shared_ptr< const state_representation::ParameterInterface > &parameter)
    Update the parameter value of a ParameterInterface from a ROS Parameter object only if the two parame...
    +
    + + + + diff --git a/versions/v4.2.2/parameter__translators_8hpp_source.html b/versions/v4.2.2/parameter__translators_8hpp_source.html new file mode 100644 index 000000000..bc583efb7 --- /dev/null +++ b/versions/v4.2.2/parameter__translators_8hpp_source.html @@ -0,0 +1,125 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_core/include/modulo_core/translators/parameter_translators.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    parameter_translators.hpp
    +
    +
    +
    1#pragma once
    +
    2
    +
    3#include <rclcpp/parameter.hpp>
    +
    4#include <state_representation/parameters/Parameter.hpp>
    +
    5
    + +
    11
    + +
    24 const std::shared_ptr<const state_representation::ParameterInterface>& source_parameter,
    +
    25 const std::shared_ptr<state_representation::ParameterInterface>& parameter
    +
    26);
    +
    27
    +
    34rclcpp::Parameter write_parameter(const std::shared_ptr<state_representation::ParameterInterface>& parameter);
    +
    35
    +
    42std::shared_ptr<state_representation::ParameterInterface> read_parameter(const rclcpp::Parameter& ros_parameter);
    +
    43
    +
    52std::shared_ptr<state_representation::ParameterInterface> read_parameter_const(
    +
    53 const rclcpp::Parameter& ros_parameter,
    +
    54 const std::shared_ptr<const state_representation::ParameterInterface>& parameter
    +
    55);
    +
    56
    + +
    65 const rclcpp::Parameter& ros_parameter, const std::shared_ptr<state_representation::ParameterInterface>& parameter
    +
    66);
    +
    67
    +
    68
    +
    74rclcpp::ParameterType get_ros_parameter_type(const state_representation::ParameterType& parameter_type);
    +
    75
    +
    76}// namespace modulo_core::exceptions
    +
    Modulo Core translation module for converting between ROS2 and state_representation data types.
    +
    std::shared_ptr< state_representation::ParameterInterface > read_parameter(const rclcpp::Parameter &ros_parameter)
    Create a new ParameterInterface from a ROS Parameter object.
    +
    rclcpp::Parameter write_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter)
    Write a ROS Parameter from a ParameterInterface pointer.
    +
    rclcpp::ParameterType get_ros_parameter_type(const state_representation::ParameterType &parameter_type)
    Given a state representation parameter type, get the corresponding ROS parameter type.
    +
    void copy_parameter_value(const std::shared_ptr< const state_representation::ParameterInterface > &source_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)
    Copy the value of one parameter interface into another.
    +
    std::shared_ptr< state_representation::ParameterInterface > read_parameter_const(const rclcpp::Parameter &ros_parameter, const std::shared_ptr< const state_representation::ParameterInterface > &parameter)
    Update the parameter value of a ParameterInterface from a ROS Parameter object only if the two parame...
    +
    + + + + diff --git a/versions/v4.2.2/plus.svg b/versions/v4.2.2/plus.svg new file mode 100644 index 000000000..075201655 --- /dev/null +++ b/versions/v4.2.2/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/versions/v4.2.2/plusd.svg b/versions/v4.2.2/plusd.svg new file mode 100644 index 000000000..0c65bfe94 --- /dev/null +++ b/versions/v4.2.2/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/versions/v4.2.2/predicate__variant_8hpp_source.html b/versions/v4.2.2/predicate__variant_8hpp_source.html new file mode 100644 index 000000000..a77361fa1 --- /dev/null +++ b/versions/v4.2.2/predicate__variant_8hpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +Modulo: /github/workspace/source/modulo_components/include/modulo_components/utilities/predicate_variant.hpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    predicate_variant.hpp
    +
    +
    +
    1#pragma once
    +
    2
    +
    3#include <variant>
    +
    4
    +
    + +
    6
    +
    7typedef std::variant<bool, std::function<bool(void)>> PredicateVariant;
    +
    8
    +
    9}// namespace modulo_components::utilities
    +
    +
    Modulo component utilities.
    +
    + + + + diff --git a/versions/v4.2.2/search/all_0.js b/versions/v4.2.2/search/all_0.js new file mode 100644 index 000000000..a56f1aecb --- /dev/null +++ b/versions/v4.2.2/search/all_0.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['activate_0',['activate',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#ad3cb237464da96e1dd2780b696bce139',1,'modulo_core::communication::PublisherInterface']]], + ['add_5fcommand_5finterface_1',['add_command_interface',['../classmodulo__controllers_1_1_controller_interface.html#ad7d9aff67e0bba6ef2a557cdb94ab000',1,'modulo_controllers::ControllerInterface']]], + ['add_5finput_2',['add_input',['../classmodulo__components_1_1_component_interface.html#a6d6fd277be46d40ea6d73b547d028055',1,'modulo_components::ComponentInterface::add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)'],['../classmodulo__components_1_1_component_interface.html#aed06da445cab193c04702a54d0039603',1,'modulo_components::ComponentInterface::add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)'],['../classmodulo__components_1_1_component_interface.html#ab5868c98d10e4f7abfa1a1377da7d81f',1,'modulo_components::ComponentInterface::add_input(const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)'],['../classmodulo__controllers_1_1_controller_interface.html#aaaec627072f31f45db49534300075eaa',1,'modulo_controllers::ControllerInterface::add_input()']]], + ['add_5foutput_3',['add_output',['../classmodulo__components_1_1_component.html#ab475ee0e8ea1b1f52c6f0720a0546e90',1,'modulo_components::Component::add_output()'],['../classmodulo__components_1_1_lifecycle_component.html#a22d31bd5f8a713b0ce757bea8622cbf3',1,'modulo_components::LifecycleComponent::add_output()'],['../classmodulo__controllers_1_1_controller_interface.html#a0723167993c55cb066aaed54df80439f',1,'modulo_controllers::ControllerInterface::add_output()']]], + ['add_5fparameter_4',['add_parameter',['../classmodulo__components_1_1_component_interface.html#a518bf9ca1ff6aa9dc16c88c5b06cb5d8',1,'modulo_components::ComponentInterface::add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)'],['../classmodulo__components_1_1_component_interface.html#ae833c972a8a140f8bacac3d680154a86',1,'modulo_components::ComponentInterface::add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)'],['../classmodulo__controllers_1_1_controller_interface.html#a98178d87edfbfa2dc1a90a57ef3f0bff',1,'modulo_controllers::ControllerInterface::add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)'],['../classmodulo__controllers_1_1_controller_interface.html#aadfd42d7dfe06426595c3d04f0f19768',1,'modulo_controllers::ControllerInterface::add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)']]], + ['add_5fperiodic_5fcallback_5',['add_periodic_callback',['../classmodulo__components_1_1_component_interface.html#ad17ee02a3b29dd632b594af6620a3168',1,'modulo_components::ComponentInterface']]], + ['add_5fpredicate_6',['add_predicate',['../classmodulo__components_1_1_component_interface.html#a64726a7779cd0ade615a10d037e8c107',1,'modulo_components::ComponentInterface::add_predicate()'],['../classmodulo__controllers_1_1_controller_interface.html#a255f23e8187539095cb4d1ec782f3957',1,'modulo_controllers::ControllerInterface::add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)'],['../classmodulo__controllers_1_1_controller_interface.html#a109b62a0bd025c4424db87c53aae2cf7',1,'modulo_controllers::ControllerInterface::add_predicate(const std::string &predicate_name, bool predicate_value)'],['../classmodulo__components_1_1_component_interface.html#ab245c0fc061c4109961c7339c2bf27a4',1,'modulo_components::ComponentInterface::add_predicate()']]], + ['add_5fservice_7',['add_service',['../classmodulo__controllers_1_1_controller_interface.html#a6f7b80e6dff868af11e1b4168d6df034',1,'modulo_controllers::ControllerInterface::add_service()'],['../classmodulo__components_1_1_component_interface.html#a12724f83b3327d6a35d9ae02046e96fd',1,'modulo_components::ComponentInterface::add_service()'],['../classmodulo__controllers_1_1_controller_interface.html#a860bf53284a52c402b2edc4e92cdfae6',1,'modulo_controllers::ControllerInterface::add_service()'],['../classmodulo__components_1_1_component_interface.html#af915cd5317266aa78dc61151e6f1fa6c',1,'modulo_components::ComponentInterface::add_service()']]], + ['add_5fstate_5finterface_8',['add_state_interface',['../classmodulo__controllers_1_1_controller_interface.html#a4f58fa18886d11dcf57a5abcde0e5e09',1,'modulo_controllers::ControllerInterface']]], + ['add_5fstatic_5ftf_5fbroadcaster_9',['add_static_tf_broadcaster',['../classmodulo__components_1_1_component_interface.html#a50d6d32870a7a81a72ab491f0d80f0bb',1,'modulo_components::ComponentInterface']]], + ['add_5ftf_5fbroadcaster_10',['add_tf_broadcaster',['../classmodulo__components_1_1_component_interface.html#ae782ab5b7593c368df9407df79d75c40',1,'modulo_components::ComponentInterface']]], + ['add_5ftf_5flistener_11',['add_tf_listener',['../classmodulo__components_1_1_component_interface.html#adf4b06438efcead7a6d29e3178161296',1,'modulo_components::ComponentInterface']]], + ['add_5ftrigger_12',['add_trigger',['../classmodulo__components_1_1_component_interface.html#abc67aa3f969574fb71b0a8527dad8346',1,'modulo_components::ComponentInterface::add_trigger()'],['../classmodulo__controllers_1_1_controller_interface.html#ab6072f96565cee5fc767622aea3d5989',1,'modulo_controllers::ControllerInterface::add_trigger()']]], + ['addserviceexception_13',['AddServiceException',['../classmodulo__components_1_1exceptions_1_1_add_service_exception.html',1,'modulo_components::exceptions']]], + ['addsignalexception_14',['AddSignalException',['../classmodulo__components_1_1exceptions_1_1_add_signal_exception.html',1,'modulo_components::exceptions']]] +]; diff --git a/versions/v4.2.2/search/all_1.js b/versions/v4.2.2/search/all_1.js new file mode 100644 index 000000000..7aa00b2e8 --- /dev/null +++ b/versions/v4.2.2/search/all_1.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['command_5finterface_5fconfiguration_0',['command_interface_configuration',['../classmodulo__controllers_1_1_controller_interface.html#a170ee563e6bbeb4b2cf441600f6a2490',1,'modulo_controllers::ControllerInterface']]], + ['component_1',['component',['../classmodulo__components_1_1_component.html',1,'modulo_components::Component'],['../classmodulo__components_1_1_component.html#ae19b0377e0b7fa7f43efff7adfae143b',1,'modulo_components::Component::Component()']]], + ['component_20interfaces_2',['Modulo Component Interfaces',['../md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html',1,'']]], + ['componentexception_3',['ComponentException',['../classmodulo__components_1_1exceptions_1_1_component_exception.html',1,'modulo_components::exceptions']]], + ['componentinterface_4',['componentinterface',['../classmodulo__components_1_1_component_interface.html',1,'modulo_components::ComponentInterface'],['../classmodulo__components_1_1_component_interface.html#a8ce3d7ecf6ff18041c0ec2829de40e22',1,'modulo_components::ComponentInterface::ComponentInterface()']]], + ['componentinterfacepublicinterface_5',['ComponentInterfacePublicInterface',['../class_component_interface_public_interface.html',1,'']]], + ['componentparameterexception_6',['ComponentParameterException',['../classmodulo__components_1_1exceptions_1_1_component_parameter_exception.html',1,'modulo_components::exceptions']]], + ['components_7',['Modulo Components',['../md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html',1,'']]], + ['componentserviceresponse_8',['ComponentServiceResponse',['../structmodulo__components_1_1_component_service_response.html',1,'modulo_components']]], + ['compute_5fcartesian_5fstate_9',['compute_cartesian_state',['../classmodulo__controllers_1_1_robot_controller_interface.html#a92904926dd9e22ff7c462a33b9306575',1,'modulo_controllers::RobotControllerInterface']]], + ['controllerinput_10',['ControllerInput',['../structmodulo__controllers_1_1_controller_input.html',1,'modulo_controllers']]], + ['controllerinterface_11',['controllerinterface',['../classmodulo__controllers_1_1_controller_interface.html#a45af1adc882e1d005c6ce3a0bf63f061',1,'modulo_controllers::ControllerInterface::ControllerInterface()'],['../classmodulo__controllers_1_1_controller_interface.html',1,'modulo_controllers::ControllerInterface']]], + ['controllers_12',['modulo-controllers',['../md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html',1,'']]], + ['controllerserviceresponse_13',['ControllerServiceResponse',['../structmodulo__controllers_1_1_controller_service_response.html',1,'modulo_controllers']]], + ['copy_5fparameter_5fvalue_14',['copy_parameter_value',['../namespacemodulo__core_1_1translators.html#af16d1185354f2f64f06698b0d1b3fc3f',1,'modulo_core::translators']]], + ['core_15',['Modulo Core',['../md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html',1,'']]], + ['coreexception_16',['CoreException',['../classmodulo__core_1_1exceptions_1_1_core_exception.html',1,'modulo_core::exceptions']]], + ['create_5foutput_17',['create_output',['../classmodulo__components_1_1_component_interface.html#aa84db667c915dcb03d367b0288ce1174',1,'modulo_components::ComponentInterface']]], + ['create_5fpublisher_5finterface_18',['create_publisher_interface',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#a95f0a5157539b3ffb1a936e4bbd60e23',1,'modulo_core::communication::PublisherHandler']]], + ['create_5fsubscription_5finterface_19',['create_subscription_interface',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a9adbe98500d927e5e76fb18c9f62e04b',1,'modulo_core::communication::SubscriptionHandler']]] +]; diff --git a/versions/v4.2.2/search/all_10.js b/versions/v4.2.2/search/all_10.js new file mode 100644 index 000000000..a4030d67e --- /dev/null +++ b/versions/v4.2.2/search/all_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['update_0',['update',['../classmodulo__controllers_1_1_controller_interface.html#a8f2ab4824543884e6d4e16a903c9a1bf',1,'modulo_controllers::ControllerInterface']]], + ['utils_1',['Modulo Utils',['../md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html',1,'']]] +]; diff --git a/versions/v4.2.2/search/all_11.js b/versions/v4.2.2/search/all_11.js new file mode 100644 index 000000000..639644264 --- /dev/null +++ b/versions/v4.2.2/search/all_11.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['write_0',['write',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a5cc486ee93eb7756636a851c07f10f35',1,'modulo_core::communication::MessagePairInterface']]], + ['write_5fcommand_5finterfaces_1',['write_command_interfaces',['../classmodulo__controllers_1_1_controller_interface.html#a1fd252f44e3618162c2cee552a8a7b2f',1,'modulo_controllers::ControllerInterface']]], + ['write_5fmessage_2',['write_message',['../namespacemodulo__core_1_1translators.html#ae887c515823c26c71a1266355577d5e0',1,'modulo_core::translators::write_message(geometry_msgs::msg::Wrench &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a02fa2614128ce09ee39cc4fd9a5d2314',1,'modulo_core::translators::write_message(EncodedState &message, const T &state, const rclcpp::Time &)'],['../namespacemodulo__core_1_1translators.html#aa77091be4785272fd22cc5215d930ddd',1,'modulo_core::translators::write_message(std_msgs::msg::String &message, const std::string &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ab5e6c729316ce06f03deec6fe811b3f5',1,'modulo_core::translators::write_message(std_msgs::msg::Int32 &message, const int &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#af3b73148b5111ac49d9b65a03c2682f5',1,'modulo_core::translators::write_message(std_msgs::msg::Float64MultiArray &message, const std::vector< double > &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a014392d41b245b63d2303fdee9e66db7',1,'modulo_core::translators::write_message(std_msgs::msg::Float64 &message, const double &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a2648db7b6384ba6b10186ae5e98bea59',1,'modulo_core::translators::write_message(std_msgs::msg::Bool &message, const bool &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a60be80575b8fb3e3d48f37a8bda6d9ed',1,'modulo_core::translators::write_message(U &message, const state_representation::Parameter< T > &state, const rclcpp::Time &)'],['../namespacemodulo__core_1_1translators.html#acdb4e193bb38e69690de512f7b6ea457',1,'modulo_core::translators::write_message(tf2_msgs::msg::TFMessage &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ae2679cbc4106a9373296b6f00aaea34b',1,'modulo_core::translators::write_message(sensor_msgs::msg::JointState &message, const state_representation::JointState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a1fd40d767a0a9a3c8221eaabb12e8e77',1,'modulo_core::translators::write_message(geometry_msgs::msg::WrenchStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a6960610fd4bf9bb981827e0146b04d05',1,'modulo_core::translators::write_message(geometry_msgs::msg::TwistStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a23c4f120bdc010eb6f5b61bfb21abec1',1,'modulo_core::translators::write_message(geometry_msgs::msg::Twist &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ade9e94aca963133615835e6724ada18b',1,'modulo_core::translators::write_message(geometry_msgs::msg::TransformStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a038c7d7431427a1b46d12a2eab8b9da7',1,'modulo_core::translators::write_message(geometry_msgs::msg::Transform &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ade7becbd0c04095260f1aad7dc4d5da0',1,'modulo_core::translators::write_message(geometry_msgs::msg::PoseStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a2ce2005274aa2509faa07e206f74202f',1,'modulo_core::translators::write_message(geometry_msgs::msg::Pose &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a0230b5afcd0bfca73a2a676a6e8706c3',1,'modulo_core::translators::write_message(geometry_msgs::msg::AccelStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a151198c871af003d2205cf0556115260',1,'modulo_core::translators::write_message(geometry_msgs::msg::Accel &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../classmodulo__core_1_1communication_1_1_message_pair.html#aa50124b4eb3e5811562c567da1f03f00',1,'modulo_core::communication::MessagePair::write_message()']]], + ['write_5foutput_3',['write_output',['../classmodulo__controllers_1_1_controller_interface.html#a0af9817d7df9d34b5a5363b8717d526e',1,'modulo_controllers::ControllerInterface']]], + ['write_5fparameter_4',['write_parameter',['../namespacemodulo__core_1_1translators.html#ab0ba0632a12496f0ad34f836c5001689',1,'modulo_core::translators']]] +]; diff --git a/versions/v4.2.2/search/all_12.js b/versions/v4.2.2/search/all_12.js new file mode 100644 index 000000000..9de67d867 --- /dev/null +++ b/versions/v4.2.2/search/all_12.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_7ecomponent_0',['~Component',['../classmodulo__components_1_1_component.html#a3973cf9c0bb9df9e21fb11fae1f8898f',1,'modulo_components::Component']]], + ['_7ecomponentinterface_1',['~ComponentInterface',['../classmodulo__components_1_1_component_interface.html#a9474669908e5674c651e34ade22acc32',1,'modulo_components::ComponentInterface']]], + ['_7elifecyclecomponent_2',['~LifecycleComponent',['../classmodulo__components_1_1_lifecycle_component.html#a534d2620117f9b2420418d4d6ca48a12',1,'modulo_components::LifecycleComponent']]], + ['_7emessagepairinterface_3',['~MessagePairInterface',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a1b0177982d2972d701692b3c89705aae',1,'modulo_core::communication::MessagePairInterface']]], + ['_7epublisherhandler_4',['~PublisherHandler',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#a9c2eafb61ee4d8e60a15e0af519be4d3',1,'modulo_core::communication::PublisherHandler']]], + ['_7epublisherinterface_5',['~PublisherInterface',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a1e670470b065bb1e7b1e5ef88eec5268',1,'modulo_core::communication::PublisherInterface']]], + ['_7esubscriptionhandler_6',['~SubscriptionHandler',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a3de45dc5da0ca5ae1de4a819851f4979',1,'modulo_core::communication::SubscriptionHandler']]], + ['_7esubscriptioninterface_7',['~SubscriptionInterface',['../classmodulo__core_1_1communication_1_1_subscription_interface.html#afd0d227d6533cafc7731f1fd52cb8d50',1,'modulo_core::communication::SubscriptionInterface']]] +]; diff --git a/versions/v4.2.2/search/all_2.js b/versions/v4.2.2/search/all_2.js new file mode 100644 index 000000000..8a09995d9 --- /dev/null +++ b/versions/v4.2.2/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['deactivate_0',['deactivate',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a2570447d8280ab4f1bc47e8c020082f3',1,'modulo_core::communication::PublisherInterface']]], + ['declare_5finput_1',['declare_input',['../classmodulo__components_1_1_component_interface.html#a0ef86c0ed9502607325d7df042c849d1',1,'modulo_components::ComponentInterface']]], + ['declare_5foutput_2',['declare_output',['../classmodulo__components_1_1_component_interface.html#a103aec4a95d9c136b572534221a1eeec',1,'modulo_components::ComponentInterface']]] +]; diff --git a/versions/v4.2.2/search/all_3.js b/versions/v4.2.2/search/all_3.js new file mode 100644 index 000000000..6040de9c7 --- /dev/null +++ b/versions/v4.2.2/search/all_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['encodedstate_0',['EncodedState',['../namespacemodulo__core.html#aa89356b8fb7ab13ff2514931d3b05fdc',1,'modulo_core']]], + ['evaluate_1',['evaluate',['../classmodulo__controllers_1_1_controller_interface.html#a258e8cc74be6bf915a2c1aa5f9278fc1',1,'modulo_controllers::ControllerInterface']]], + ['evaluate_5fperiodic_5fcallbacks_2',['evaluate_periodic_callbacks',['../classmodulo__components_1_1_component_interface.html#ae3356bb3938d2df54a5bd43b07c049df',1,'modulo_components::ComponentInterface']]], + ['execute_3',['execute',['../classmodulo__components_1_1_component.html#aeb496916cb46a1e8369412f06c440910',1,'modulo_components::Component']]] +]; diff --git a/versions/v4.2.2/search/all_4.js b/versions/v4.2.2/search/all_4.js new file mode 100644 index 000000000..643bd75b6 --- /dev/null +++ b/versions/v4.2.2/search/all_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ft_5fsensor_5fname_5f_0',['ft_sensor_name_',['../classmodulo__controllers_1_1_robot_controller_interface.html#a0dd8f48ee0160acd099bbf79b5183cfa',1,'modulo_controllers::RobotControllerInterface']]], + ['ft_5fsensor_5freference_5fframe_5f_1',['ft_sensor_reference_frame_',['../classmodulo__controllers_1_1_robot_controller_interface.html#a477eb72d1421e147e96a54ea1b96452f',1,'modulo_controllers::RobotControllerInterface']]] +]; diff --git a/versions/v4.2.2/search/all_5.js b/versions/v4.2.2/search/all_5.js new file mode 100644 index 000000000..75cdf6a3a --- /dev/null +++ b/versions/v4.2.2/search/all_5.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['get_5fcallback_0',['get_callback',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a60039333a4c81ea81c66ab2e88b6eaff',1,'modulo_core::communication::SubscriptionHandler::get_callback(const std::function< void()> &user_callback)'],['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a01f697561ba64f5d98ae0522f8c57cc6',1,'modulo_core::communication::SubscriptionHandler::get_callback()']]], + ['get_5fcartesian_5fstate_1',['get_cartesian_state',['../classmodulo__controllers_1_1_robot_controller_interface.html#a1ba472ffaa66f3061a85cd3918bceaa2',1,'modulo_controllers::RobotControllerInterface']]], + ['get_5fcommand_5finterface_2',['get_command_interface',['../classmodulo__controllers_1_1_controller_interface.html#a53a0f9e5243f9e0dca8d470a78e90426',1,'modulo_controllers::ControllerInterface']]], + ['get_5fdata_3',['get_data',['../classmodulo__core_1_1communication_1_1_message_pair.html#a951f34fcc216a1afdebefc665c5b80af',1,'modulo_core::communication::MessagePair']]], + ['get_5fft_5fsensor_4',['get_ft_sensor',['../classmodulo__controllers_1_1_robot_controller_interface.html#a54644709a8c725cc8df2ff3fee2adf1c',1,'modulo_controllers::RobotControllerInterface']]], + ['get_5fhandler_5',['get_handler',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a725e0facd73564ae7ab9c75396e401b0',1,'modulo_core::communication::PublisherInterface::get_handler()'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a29ee546de88bc4ddd63ea0aa5eaf2399',1,'modulo_core::communication::SubscriptionInterface::get_handler()']]], + ['get_5fjoint_5fstate_6',['get_joint_state',['../classmodulo__controllers_1_1_robot_controller_interface.html#a40b1b7a5a15a29656d2a3aaa1a1e0a9c',1,'modulo_controllers::RobotControllerInterface']]], + ['get_5fmessage_5fpair_7',['get_message_pair',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a284645c90efb812ecd3abd90125962fa',1,'modulo_core::communication::MessagePairInterface::get_message_pair()'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a5c38ad0774ca2a51218fc473320c5b71',1,'modulo_core::communication::PublisherInterface::get_message_pair()'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#acc3d58b49cd9c3d61f1896aa9dda2acf',1,'modulo_core::communication::SubscriptionInterface::get_message_pair()']]], + ['get_5fparameter_8',['get_parameter',['../classmodulo__components_1_1_lifecycle_component.html#a3e69d60ac7582fdd2306c97e1532f167',1,'modulo_components::LifecycleComponent::get_parameter()'],['../classmodulo__controllers_1_1_controller_interface.html#a0cec045351b8142814f97cb7baa4a52b',1,'modulo_controllers::ControllerInterface::get_parameter()'],['../classmodulo__components_1_1_component_interface.html#a3f4d8fe85525194e2f5393065ee056aa',1,'modulo_components::ComponentInterface::get_parameter()'],['../classmodulo__components_1_1_component.html#a2b02cb1ed0716c4911df78b6735d297e',1,'modulo_components::Component::get_parameter()']]], + ['get_5fparameter_5fvalue_9',['get_parameter_value',['../classmodulo__components_1_1_component_interface.html#a418d23ed978018d9d465b9036db3eb8d',1,'modulo_components::ComponentInterface::get_parameter_value()'],['../classmodulo__controllers_1_1_controller_interface.html#a276986a6d1a42d36200899716bda47a0',1,'modulo_controllers::ControllerInterface::get_parameter_value()']]], + ['get_5fpredicate_10',['get_predicate',['../classmodulo__components_1_1_component_interface.html#aafa1d3497232bf3d93658bef4d85f6b8',1,'modulo_components::ComponentInterface::get_predicate()'],['../classmodulo__controllers_1_1_controller_interface.html#a3d5e1424dbb90c278cca66811c375f9d',1,'modulo_controllers::ControllerInterface::get_predicate()']]], + ['get_5fqos_11',['get_qos',['../classmodulo__components_1_1_component_interface.html#aab0d3f3a481902f01c70edf2349f304e',1,'modulo_components::ComponentInterface::get_qos()'],['../classmodulo__controllers_1_1_controller_interface.html#a1081969b3f3ad9e98fcb8d9fb1569656',1,'modulo_controllers::ControllerInterface::get_qos()']]], + ['get_5fros_5fparameter_5ftype_12',['get_ros_parameter_type',['../namespacemodulo__core_1_1translators.html#aea1df4ab0bfb038f7b297865993149e2',1,'modulo_core::translators']]], + ['get_5fstate_5finterface_13',['get_state_interface',['../classmodulo__controllers_1_1_controller_interface.html#a880660f18e4f8dac9d41bf39323e9413',1,'modulo_controllers::ControllerInterface']]], + ['get_5fstate_5finterfaces_14',['get_state_interfaces',['../classmodulo__controllers_1_1_controller_interface.html#a2a36125b4ed269f974c8599d7f791e11',1,'modulo_controllers::ControllerInterface']]], + ['get_5fsubscription_15',['get_subscription',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#aa9c9421c48dbbbc87dfd0d370f452b44',1,'modulo_core::communication::SubscriptionHandler']]], + ['get_5ftype_16',['get_type',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a578dda86f8b23d5aeb8c3d3854239e77',1,'modulo_core::communication::MessagePairInterface::get_type()'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a2f878eb3cd08e69b685b39c6c79c5ed0',1,'modulo_core::communication::PublisherInterface::get_type()']]] +]; diff --git a/versions/v4.2.2/search/all_6.js b/versions/v4.2.2/search/all_6.js new file mode 100644 index 000000000..5146cd60f --- /dev/null +++ b/versions/v4.2.2/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hardware_5fname_5f_0',['hardware_name_',['../classmodulo__controllers_1_1_controller_interface.html#ac044ce7a57e68d15214dcfb2df172173',1,'modulo_controllers::ControllerInterface']]] +]; diff --git a/versions/v4.2.2/search/all_7.js b/versions/v4.2.2/search/all_7.js new file mode 100644 index 000000000..408bf6b2e --- /dev/null +++ b/versions/v4.2.2/search/all_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['inputs_5f_0',['inputs_',['../classmodulo__components_1_1_component_interface.html#adc740c0c1951cbc9327dc676ef2ef4a9',1,'modulo_components::ComponentInterface']]], + ['interfaces_1',['interfaces',['../md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html',1,'Modulo Component Interfaces'],['../md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html',1,'Modulo Interfaces']]], + ['invalidpointercastexception_2',['InvalidPointerCastException',['../classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.html',1,'modulo_core::exceptions']]], + ['invalidpointerexception_3',['InvalidPointerException',['../classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.html',1,'modulo_core::exceptions']]], + ['is_5factive_4',['is_active',['../classmodulo__controllers_1_1_controller_interface.html#a2b2c9e78ee4ad5a27d21818c58651213',1,'modulo_controllers::ControllerInterface']]] +]; diff --git a/versions/v4.2.2/search/all_8.js b/versions/v4.2.2/search/all_8.js new file mode 100644 index 000000000..cbcc1ed60 --- /dev/null +++ b/versions/v4.2.2/search/all_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['lifecyclecomponent_0',['lifecyclecomponent',['../classmodulo__components_1_1_lifecycle_component.html',1,'modulo_components::LifecycleComponent'],['../classmodulo__components_1_1_lifecycle_component.html#a81908c5428fea4a36262ffd82168dd06',1,'modulo_components::LifecycleComponent::LifecycleComponent()']]], + ['lookup_5ftransform_1',['lookup_transform',['../classmodulo__components_1_1_component_interface.html#a71b7fbc1c56b4cfb0fd2bd800d6c5015',1,'modulo_components::ComponentInterface::lookup_transform(const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)'],['../classmodulo__components_1_1_component_interface.html#a43c76f10f313827f7a32b88d3289885c',1,'modulo_components::ComponentInterface::lookup_transform(const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))']]], + ['lookuptransformexception_2',['LookupTransformException',['../classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.html',1,'modulo_components::exceptions']]] +]; diff --git a/versions/v4.2.2/search/all_9.js b/versions/v4.2.2/search/all_9.js new file mode 100644 index 000000000..a49367928 --- /dev/null +++ b/versions/v4.2.2/search/all_9.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['messagepair_0',['messagepair',['../classmodulo__core_1_1communication_1_1_message_pair.html',1,'modulo_core::communication::MessagePair< MsgT, DataT >'],['../classmodulo__core_1_1communication_1_1_message_pair.html#adeb7c57318156213f827ebdfc1eb05ff',1,'modulo_core::communication::MessagePair::MessagePair()']]], + ['messagepairinterface_1',['messagepairinterface',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html',1,'modulo_core::communication::MessagePairInterface'],['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#ac6a7c97767464a21fc8a7b9f10475703',1,'modulo_core::communication::MessagePairInterface::MessagePairInterface(const MessagePairInterface &message_pair)=default'],['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a42c43740bf2d3e11b0f228d422c570c7',1,'modulo_core::communication::MessagePairInterface::MessagePairInterface(MessageType type)']]], + ['messagetranslationexception_2',['MessageTranslationException',['../classmodulo__core_1_1exceptions_1_1_message_translation_exception.html',1,'modulo_core::exceptions']]], + ['messagetype_3',['MessageType',['../namespacemodulo__core_1_1communication.html#a14a52364ccbc238876007a3f134977ab',1,'modulo_core::communication']]], + ['modulo_4',['Modulo',['../index.html',1,'']]], + ['modulo_20component_20interfaces_5',['Modulo Component Interfaces',['../md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20components_6',['Modulo Components',['../md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20controllers_7',['modulo-controllers',['../md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20core_8',['Modulo Core',['../md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20interfaces_9',['Modulo Interfaces',['../md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20utils_10',['Modulo Utils',['../md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_5fcomponents_11',['modulo_components',['../namespacemodulo__components.html',1,'']]], + ['modulo_5fcomponents_3a_3aexceptions_12',['exceptions',['../namespacemodulo__components_1_1exceptions.html',1,'modulo_components']]], + ['modulo_5fcomponents_3a_3autilities_13',['utilities',['../namespacemodulo__components_1_1utilities.html',1,'modulo_components']]], + ['modulo_5fcontrollers_3a_3autilities_14',['utilities',['../namespacemodulo__controllers_1_1utilities.html',1,'modulo_controllers']]], + ['modulo_5fcore_15',['modulo_core',['../namespacemodulo__core.html',1,'']]], + ['modulo_5fcore_3a_3acommunication_16',['communication',['../namespacemodulo__core_1_1communication.html',1,'modulo_core']]], + ['modulo_5fcore_3a_3aexceptions_17',['exceptions',['../namespacemodulo__core_1_1exceptions.html',1,'modulo_core']]], + ['modulo_5fcore_3a_3atranslators_18',['translators',['../namespacemodulo__core_1_1translators.html',1,'modulo_core']]] +]; diff --git a/versions/v4.2.2/search/all_a.js b/versions/v4.2.2/search/all_a.js new file mode 100644 index 000000000..15fa934bb --- /dev/null +++ b/versions/v4.2.2/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nullpointerexception_0',['NullPointerException',['../classmodulo__core_1_1exceptions_1_1_null_pointer_exception.html',1,'modulo_core::exceptions']]] +]; diff --git a/versions/v4.2.2/search/all_b.js b/versions/v4.2.2/search/all_b.js new file mode 100644 index 000000000..7e502e555 --- /dev/null +++ b/versions/v4.2.2/search/all_b.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['on_5factivate_0',['on_activate',['../classmodulo__controllers_1_1_controller_interface.html#a5e9758c1b2f19970f5912e65274678b6',1,'modulo_controllers::ControllerInterface::on_activate()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#a27bec46fefa9083c1b0a19e5b8a69172',1,'modulo_controllers::RobotControllerInterface::on_activate()'],['../classmodulo__core_1_1communication_1_1_publisher_handler.html#aba41e8e6e8c06deeda4578b1807150c6',1,'modulo_core::communication::PublisherHandler::on_activate()'],['../classmodulo__controllers_1_1_controller_interface.html#a32a771d48d2f199175bbae212cf6cb9a',1,'modulo_controllers::ControllerInterface::on_activate()']]], + ['on_5factivate_5fcallback_1',['on_activate_callback',['../classmodulo__components_1_1_lifecycle_component.html#a45e7a84d2ff32d6538b065e7d5d59db4',1,'modulo_components::LifecycleComponent']]], + ['on_5fcleanup_5fcallback_2',['on_cleanup_callback',['../classmodulo__components_1_1_lifecycle_component.html#a4dba41e6a556184546ae3244077d3eab',1,'modulo_components::LifecycleComponent']]], + ['on_5fconfigure_3',['on_configure',['../classmodulo__controllers_1_1_controller_interface.html#a744aead2afb2097f13491c62b205c419',1,'modulo_controllers::ControllerInterface::on_configure(const rclcpp_lifecycle::State &previous_state) final'],['../classmodulo__controllers_1_1_controller_interface.html#a20045ceffec9a44e4666d92632be5400',1,'modulo_controllers::ControllerInterface::on_configure()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#ad7de2bc07230837f28faf0ebb4c1fc65',1,'modulo_controllers::RobotControllerInterface::on_configure()']]], + ['on_5fconfigure_5fcallback_4',['on_configure_callback',['../classmodulo__components_1_1_lifecycle_component.html#ae2750d56c97758b231c5a41c81e94787',1,'modulo_components::LifecycleComponent']]], + ['on_5fdeactivate_5',['on_deactivate',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#aa6a36040bdb492150a85e58ed6c89f5e',1,'modulo_core::communication::PublisherHandler::on_deactivate()'],['../classmodulo__controllers_1_1_controller_interface.html#ac9742c368a3bbdbf5ea6603f253ad2a7',1,'modulo_controllers::ControllerInterface::on_deactivate()'],['../classmodulo__controllers_1_1_controller_interface.html#ab5cd6b83dd7486f408a4b95aa211cdff',1,'modulo_controllers::ControllerInterface::on_deactivate(const rclcpp_lifecycle::State &previous_state) final']]], + ['on_5fdeactivate_5fcallback_6',['on_deactivate_callback',['../classmodulo__components_1_1_lifecycle_component.html#a22b81a549cb93798e4c7801541125b70',1,'modulo_components::LifecycleComponent']]], + ['on_5ferror_5fcallback_7',['on_error_callback',['../classmodulo__components_1_1_lifecycle_component.html#aa06d7c56d3cd549f20e550958eeac6c6',1,'modulo_components::LifecycleComponent']]], + ['on_5fexecute_5fcallback_8',['on_execute_callback',['../classmodulo__components_1_1_component.html#aa91321e421f2f71a9c86f694996baeb1',1,'modulo_components::Component']]], + ['on_5finit_9',['on_init',['../classmodulo__controllers_1_1_controller_interface.html#a3280902d5467912fd07fcc853a9214eb',1,'modulo_controllers::ControllerInterface::on_init()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#ab1c80242a247f5373b710c135309b295',1,'modulo_controllers::RobotControllerInterface::on_init()']]], + ['on_5fshutdown_5fcallback_10',['on_shutdown_callback',['../classmodulo__components_1_1_lifecycle_component.html#a05b5dfdf28ebf0d2a9f69cdad9d29eb3',1,'modulo_components::LifecycleComponent']]], + ['on_5fstep_5fcallback_11',['on_step_callback',['../classmodulo__components_1_1_component_interface.html#a7f5fff168fc2a31d5e36b4a103ca46fa',1,'modulo_components::ComponentInterface']]], + ['on_5fvalidate_5fparameter_5fcallback_12',['on_validate_parameter_callback',['../classmodulo__components_1_1_component_interface.html#a09bd587039da047128519ecf59ae544c',1,'modulo_components::ComponentInterface::on_validate_parameter_callback()'],['../classmodulo__controllers_1_1_controller_interface.html#af33e739ecc8164cd9c0a49517b3d3e07',1,'modulo_controllers::ControllerInterface::on_validate_parameter_callback()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#a3e8115f4baa72f001179efe8295bfe5c',1,'modulo_controllers::RobotControllerInterface::on_validate_parameter_callback()']]], + ['outputs_5f_13',['outputs_',['../classmodulo__components_1_1_component_interface.html#a3e7358644fd89bf60facc34ec5a22646',1,'modulo_components::ComponentInterface']]] +]; diff --git a/versions/v4.2.2/search/all_c.js b/versions/v4.2.2/search/all_c.js new file mode 100644 index 000000000..d9869d82b --- /dev/null +++ b/versions/v4.2.2/search/all_c.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['parametertranslationexception_0',['ParameterTranslationException',['../classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.html',1,'modulo_core::exceptions']]], + ['periodic_5foutputs_5f_1',['periodic_outputs_',['../classmodulo__components_1_1_component_interface.html#af132dad4fbddd625ef36d4a8f61538f0',1,'modulo_components::ComponentInterface']]], + ['predicateslistener_2',['PredicatesListener',['../classmodulo__utils_1_1testutils_1_1_predicates_listener.html',1,'modulo_utils::testutils']]], + ['publish_3',['publish',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#a864c43153af83707343920e33700043d',1,'modulo_core::communication::PublisherHandler::publish()'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a3e4d5682dc38835d7e1f02a2e71503ed',1,'modulo_core::communication::PublisherInterface::publish()']]], + ['publish_5foutput_4',['publish_output',['../classmodulo__components_1_1_component_interface.html#a98d4767b141939df0c7077c10d5b3aa7',1,'modulo_components::ComponentInterface']]], + ['publish_5foutputs_5',['publish_outputs',['../classmodulo__components_1_1_component_interface.html#a0bdfeacb7b0b13c2adeecb51a80a0fa0',1,'modulo_components::ComponentInterface']]], + ['publish_5fpredicate_6',['publish_predicate',['../classmodulo__components_1_1_component_interface.html#ad00c05e6e298aee1367b8a791f6184d3',1,'modulo_components::ComponentInterface']]], + ['publish_5fpredicates_7',['publish_predicates',['../classmodulo__components_1_1_component_interface.html#a9f7ba119ecceb0862634ed403306ddf8',1,'modulo_components::ComponentInterface']]], + ['publisherhandler_8',['publisherhandler',['../classmodulo__core_1_1communication_1_1_publisher_handler.html',1,'modulo_core::communication::PublisherHandler< PubT, MsgT >'],['../classmodulo__core_1_1communication_1_1_publisher_handler.html#abeb33dd415f1ab50bc86ca74f1aba9b1',1,'modulo_core::communication::PublisherHandler::PublisherHandler()']]], + ['publisherinterface_9',['publisherinterface',['../classmodulo__core_1_1communication_1_1_publisher_interface.html',1,'modulo_core::communication::PublisherInterface'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a8825c1bbfbe13075bfc88213cc2f0feb',1,'modulo_core::communication::PublisherInterface::PublisherInterface(PublisherType type, std::shared_ptr< MessagePairInterface > message_pair=nullptr)'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a2881b0902f8b9c22c62c08c2106ea7be',1,'modulo_core::communication::PublisherInterface::PublisherInterface(const PublisherInterface &publisher)=default']]], + ['publishertype_10',['PublisherType',['../namespacemodulo__core_1_1communication.html#a11c26e7082f80b74fb35da3f901f9366',1,'modulo_core::communication']]] +]; diff --git a/versions/v4.2.2/search/all_d.js b/versions/v4.2.2/search/all_d.js new file mode 100644 index 000000000..b8cf39b13 --- /dev/null +++ b/versions/v4.2.2/search/all_d.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['raise_5ferror_0',['raise_error',['../classmodulo__components_1_1_component_interface.html#a8a1c3bac0aa2141b33682059b3b8f18b',1,'modulo_components::ComponentInterface']]], + ['read_1',['read',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a8b81ae20f181f80df6d8e127a9719ede',1,'modulo_core::communication::MessagePairInterface']]], + ['read_5finput_2',['read_input',['../classmodulo__controllers_1_1_controller_interface.html#a403f9e05f88d5f9e576b4126fd64e3a0',1,'modulo_controllers::ControllerInterface']]], + ['read_5fmessage_3',['read_message',['../namespacemodulo__core_1_1translators.html#a7fb0ede2e2045b55a995ae71a3a1d8ad',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::TransformStamped &message)'],['../namespacemodulo__core_1_1translators.html#ae3028daafe4e35d4cb3ed83172d8bcb0',1,'modulo_core::translators::read_message(T &state, const EncodedState &message)'],['../namespacemodulo__core_1_1translators.html#a3eab5bfefb68847b86699826fc206757',1,'modulo_core::translators::read_message(std::string &state, const std_msgs::msg::String &message)'],['../namespacemodulo__core_1_1translators.html#a61a15e12792070307871484cec3919bd',1,'modulo_core::translators::read_message(int &state, const std_msgs::msg::Int32 &message)'],['../namespacemodulo__core_1_1translators.html#a89f6c759d19c4680f9bd0dc6dfccf287',1,'modulo_core::translators::read_message(std::vector< double > &state, const std_msgs::msg::Float64MultiArray &message)'],['../namespacemodulo__core_1_1translators.html#a00a802c20071659785e4e5651af201a6',1,'modulo_core::translators::read_message(double &state, const std_msgs::msg::Float64 &message)'],['../namespacemodulo__core_1_1translators.html#a329c6bf4bcf7e44b283fb8aadc6d7c6f',1,'modulo_core::translators::read_message(bool &state, const std_msgs::msg::Bool &message)'],['../namespacemodulo__core_1_1translators.html#a2c16bbbdfb7e718fc716139399e549ad',1,'modulo_core::translators::read_message(state_representation::Parameter< T > &state, const U &message)'],['../namespacemodulo__core_1_1translators.html#a552fe7a279beb774b39819f60bed127a',1,'modulo_core::translators::read_message(state_representation::JointState &state, const sensor_msgs::msg::JointState &message)'],['../namespacemodulo__core_1_1translators.html#ab0d3919f19f876ecd246045c9d58c2be',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::WrenchStamped &message)'],['../namespacemodulo__core_1_1translators.html#a9ea65818de625b6fa8ced760bc3c6c7d',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Wrench &message)'],['../namespacemodulo__core_1_1translators.html#a7f5eaa5ff35c583a37fda7e8b272a870',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::TwistStamped &message)'],['../namespacemodulo__core_1_1translators.html#a832274530f0275f7ef5cdfb4ea7fd2d9',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Twist &message)'],['../namespacemodulo__core_1_1translators.html#ad4836d631d145e89dfd47c4b394d174c',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Transform &message)'],['../namespacemodulo__core_1_1translators.html#a71af5ce246d3c9e1ff252f4c55d3817a',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::PoseStamped &message)'],['../namespacemodulo__core_1_1translators.html#a2aa635da759b460c5aad924c4f1dcedb',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Pose &message)'],['../namespacemodulo__core_1_1translators.html#afe26976826af1f5c0c381f0b7e428502',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::AccelStamped &message)'],['../namespacemodulo__core_1_1translators.html#af7b0fbec62bd9b885d289a7fb1ddba76',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Accel &message)'],['../classmodulo__core_1_1communication_1_1_message_pair.html#ac014837301539405388428fe893366b1',1,'modulo_core::communication::MessagePair::read_message()']]], + ['read_5fparameter_4',['read_parameter',['../namespacemodulo__core_1_1translators.html#a1bb1765511842105ebf5ea295b5e9750',1,'modulo_core::translators::read_parameter(const rclcpp::Parameter &ros_parameter)'],['../namespacemodulo__core_1_1translators.html#adcc089559e331a621718f275603b2dec',1,'modulo_core::translators::read_parameter(const rclcpp::Parameter &ros_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)']]], + ['read_5fparameter_5fconst_5',['read_parameter_const',['../namespacemodulo__core_1_1translators.html#afa6da1171b524ca4b63f6119f1774f1b',1,'modulo_core::translators']]], + ['read_5fstate_5finterfaces_6',['read_state_interfaces',['../classmodulo__controllers_1_1_controller_interface.html#a29a43b47e9a1e82b0670f2ff48d70483',1,'modulo_controllers::ControllerInterface']]], + ['remove_5finput_7',['remove_input',['../classmodulo__components_1_1_component_interface.html#a0c6b3ff94509f48df3a75f3ec68b14c4',1,'modulo_components::ComponentInterface']]], + ['remove_5foutput_8',['remove_output',['../classmodulo__components_1_1_component_interface.html#a969725887f31b8a88d0af54d390b7b05',1,'modulo_components::ComponentInterface']]], + ['robot_5f_9',['robot_',['../classmodulo__controllers_1_1_robot_controller_interface.html#a89d589f78643efc950e195ba92c4267d',1,'modulo_controllers::RobotControllerInterface']]], + ['robotcontrollerinterface_10',['robotcontrollerinterface',['../classmodulo__controllers_1_1_robot_controller_interface.html',1,'modulo_controllers::RobotControllerInterface'],['../classmodulo__controllers_1_1_robot_controller_interface.html#aa94d692f330dd5c3d0a92edeb460b0fa',1,'modulo_controllers::RobotControllerInterface::RobotControllerInterface(bool robot_model_required, const std::string &control_type="")'],['../classmodulo__controllers_1_1_robot_controller_interface.html#a0d36c86c0cf86b377195aa49290aa781',1,'modulo_controllers::RobotControllerInterface::RobotControllerInterface()']]] +]; diff --git a/versions/v4.2.2/search/all_e.js b/versions/v4.2.2/search/all_e.js new file mode 100644 index 000000000..f46e1a95b --- /dev/null +++ b/versions/v4.2.2/search/all_e.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['safe_5fdynamic_5fcast_0',['safe_dynamic_cast',['../namespacemodulo__core_1_1translators.html#a9b01bebfd4d9e35131e0d04620446c08',1,'modulo_core::translators']]], + ['safe_5fdynamic_5fpointer_5fcast_1',['safe_dynamic_pointer_cast',['../namespacemodulo__core_1_1translators.html#a6ef1c765b829bf82c25a6e4f409c618e',1,'modulo_core::translators']]], + ['safe_5fjoint_5fstate_5fconversion_2',['safe_joint_state_conversion',['../namespacemodulo__core_1_1translators.html#ad0f036bf1583f4542468ca69fd66ead0',1,'modulo_core::translators']]], + ['safe_5fspatial_5fstate_5fconversion_3',['safe_spatial_state_conversion',['../namespacemodulo__core_1_1translators.html#a04a6f2e996dbc7b5ce4dcda8d9d21548',1,'modulo_core::translators']]], + ['send_5fstatic_5ftransform_4',['send_static_transform',['../classmodulo__components_1_1_component_interface.html#ae9fb8bc91a29935a0e4d469e45e62a7b',1,'modulo_components::ComponentInterface']]], + ['send_5fstatic_5ftransforms_5',['send_static_transforms',['../classmodulo__components_1_1_component_interface.html#a39293f62ba806c5f599f70cdf876ccae',1,'modulo_components::ComponentInterface']]], + ['send_5ftransform_6',['send_transform',['../classmodulo__components_1_1_component_interface.html#ab3d9b98663be5983a1c677c32f582d3e',1,'modulo_components::ComponentInterface']]], + ['send_5ftransforms_7',['send_transforms',['../classmodulo__components_1_1_component_interface.html#a07e38f6eb54ae52374056e1ccc595e7f',1,'modulo_components::ComponentInterface']]], + ['serviceclient_8',['ServiceClient',['../classmodulo__utils_1_1testutils_1_1_service_client.html',1,'modulo_utils::testutils']]], + ['set_5fcommand_5finterface_9',['set_command_interface',['../classmodulo__controllers_1_1_controller_interface.html#a9623c4028e3da288789b80a750c96304',1,'modulo_controllers::ControllerInterface']]], + ['set_5fdata_10',['set_data',['../classmodulo__core_1_1communication_1_1_message_pair.html#ae71ad28f6e4270b5a318ddbdbf620585',1,'modulo_core::communication::MessagePair']]], + ['set_5fjoint_5fcommand_11',['set_joint_command',['../classmodulo__controllers_1_1_robot_controller_interface.html#ab2c42661fe2c0a665b8b7e6bc0f0bc7f',1,'modulo_controllers::RobotControllerInterface']]], + ['set_5fmessage_5fpair_12',['set_message_pair',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#aa59ed6b199b838811db4c29bb19c5319',1,'modulo_core::communication::PublisherInterface::set_message_pair()'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a817997523c09e4c1d912d9a18427f3ef',1,'modulo_core::communication::SubscriptionInterface::set_message_pair()']]], + ['set_5fparameter_5fvalue_13',['set_parameter_value',['../classmodulo__components_1_1_component_interface.html#a28047040106c7a84d7c69ba27a034746',1,'modulo_components::ComponentInterface::set_parameter_value()'],['../classmodulo__controllers_1_1_controller_interface.html#acfb5f26a4f5a3db1ce62630e5b37bb58',1,'modulo_controllers::ControllerInterface::set_parameter_value()']]], + ['set_5fpredicate_14',['set_predicate',['../classmodulo__components_1_1_component_interface.html#a8b5da2215ad8971dedddd82881136499',1,'modulo_components::ComponentInterface::set_predicate()'],['../classmodulo__controllers_1_1_controller_interface.html#a91d032f11f646b71d66b5137f1eca366',1,'modulo_controllers::ControllerInterface::set_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)'],['../classmodulo__controllers_1_1_controller_interface.html#a1543ea7f858ed8112df25ec1b1457601',1,'modulo_controllers::ControllerInterface::set_predicate(const std::string &predicate_name, bool predicate_value)'],['../classmodulo__components_1_1_component_interface.html#a8949cef47cf375d195f68e5782f37fbc',1,'modulo_components::ComponentInterface::set_predicate(const std::string &predicate_name, bool predicate_value)']]], + ['set_5fqos_15',['set_qos',['../classmodulo__components_1_1_component_interface.html#aa21a3ebb9bdce8d012558a46b4642fb4',1,'modulo_components::ComponentInterface::set_qos()'],['../classmodulo__controllers_1_1_controller_interface.html#a3348ef179f62c1e48e0c23155419621f',1,'modulo_controllers::ControllerInterface::set_qos()']]], + ['set_5fsubscription_16',['set_subscription',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#ad6ce10b7ac797009a7c64ddf52361276',1,'modulo_core::communication::SubscriptionHandler']]], + ['set_5fuser_5fcallback_17',['set_user_callback',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#ae5ce0270138b061c709ce4f1c2f76f14',1,'modulo_core::communication::SubscriptionHandler']]], + ['state_5finterface_5fconfiguration_18',['state_interface_configuration',['../classmodulo__controllers_1_1_controller_interface.html#af2769f953805848c8672421f769517bc',1,'modulo_controllers::ControllerInterface']]], + ['step_19',['step',['../classmodulo__components_1_1_component_interface.html#a9db2bd1155cbe7c4ed921f173e8f5942',1,'modulo_components::ComponentInterface']]], + ['subscriptionhandler_20',['subscriptionhandler',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a1e8e5d41669f1c0f952b93a2b86dadae',1,'modulo_core::communication::SubscriptionHandler::SubscriptionHandler()'],['../classmodulo__core_1_1communication_1_1_subscription_handler.html',1,'modulo_core::communication::SubscriptionHandler< MsgT >']]], + ['subscriptioninterface_21',['subscriptioninterface',['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a1d65d122da01edfcd28bdd049d2ad8e8',1,'modulo_core::communication::SubscriptionInterface::SubscriptionInterface(std::shared_ptr< MessagePairInterface > message_pair=nullptr)'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a00fca8a8317e59f37051b8a7b411143e',1,'modulo_core::communication::SubscriptionInterface::SubscriptionInterface(const SubscriptionInterface &subscription)=default'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html',1,'modulo_core::communication::SubscriptionInterface']]] +]; diff --git a/versions/v4.2.2/search/all_f.js b/versions/v4.2.2/search/all_f.js new file mode 100644 index 000000000..ddbfc6915 --- /dev/null +++ b/versions/v4.2.2/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['task_5fspace_5fframe_5f_0',['task_space_frame_',['../classmodulo__controllers_1_1_robot_controller_interface.html#aceb45b495a9ed7b4225b8c619ee6867a',1,'modulo_controllers::RobotControllerInterface']]], + ['trigger_1',['trigger',['../classmodulo__components_1_1_component_interface.html#a6460ddfe54a6cdf5c52edcec86658f3f',1,'modulo_components::ComponentInterface::trigger()'],['../classmodulo__controllers_1_1_controller_interface.html#a366856b4b894da1354372cb3278ca66a',1,'modulo_controllers::ControllerInterface::trigger()']]] +]; diff --git a/versions/v4.2.2/search/classes_0.js b/versions/v4.2.2/search/classes_0.js new file mode 100644 index 000000000..e1901314a --- /dev/null +++ b/versions/v4.2.2/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['addserviceexception_0',['AddServiceException',['../classmodulo__components_1_1exceptions_1_1_add_service_exception.html',1,'modulo_components::exceptions']]], + ['addsignalexception_1',['AddSignalException',['../classmodulo__components_1_1exceptions_1_1_add_signal_exception.html',1,'modulo_components::exceptions']]] +]; diff --git a/versions/v4.2.2/search/classes_1.js b/versions/v4.2.2/search/classes_1.js new file mode 100644 index 000000000..8bf0fef6f --- /dev/null +++ b/versions/v4.2.2/search/classes_1.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['component_0',['Component',['../classmodulo__components_1_1_component.html',1,'modulo_components']]], + ['componentexception_1',['ComponentException',['../classmodulo__components_1_1exceptions_1_1_component_exception.html',1,'modulo_components::exceptions']]], + ['componentinterface_2',['ComponentInterface',['../classmodulo__components_1_1_component_interface.html',1,'modulo_components']]], + ['componentinterfacepublicinterface_3',['ComponentInterfacePublicInterface',['../class_component_interface_public_interface.html',1,'']]], + ['componentparameterexception_4',['ComponentParameterException',['../classmodulo__components_1_1exceptions_1_1_component_parameter_exception.html',1,'modulo_components::exceptions']]], + ['componentserviceresponse_5',['ComponentServiceResponse',['../structmodulo__components_1_1_component_service_response.html',1,'modulo_components']]], + ['controllerinput_6',['ControllerInput',['../structmodulo__controllers_1_1_controller_input.html',1,'modulo_controllers']]], + ['controllerinterface_7',['ControllerInterface',['../classmodulo__controllers_1_1_controller_interface.html',1,'modulo_controllers']]], + ['controllerserviceresponse_8',['ControllerServiceResponse',['../structmodulo__controllers_1_1_controller_service_response.html',1,'modulo_controllers']]], + ['coreexception_9',['CoreException',['../classmodulo__core_1_1exceptions_1_1_core_exception.html',1,'modulo_core::exceptions']]] +]; diff --git a/versions/v4.2.2/search/classes_2.js b/versions/v4.2.2/search/classes_2.js new file mode 100644 index 000000000..8ad6f6734 --- /dev/null +++ b/versions/v4.2.2/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['invalidpointercastexception_0',['InvalidPointerCastException',['../classmodulo__core_1_1exceptions_1_1_invalid_pointer_cast_exception.html',1,'modulo_core::exceptions']]], + ['invalidpointerexception_1',['InvalidPointerException',['../classmodulo__core_1_1exceptions_1_1_invalid_pointer_exception.html',1,'modulo_core::exceptions']]] +]; diff --git a/versions/v4.2.2/search/classes_3.js b/versions/v4.2.2/search/classes_3.js new file mode 100644 index 000000000..c4e68fc2a --- /dev/null +++ b/versions/v4.2.2/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['lifecyclecomponent_0',['LifecycleComponent',['../classmodulo__components_1_1_lifecycle_component.html',1,'modulo_components']]], + ['lookuptransformexception_1',['LookupTransformException',['../classmodulo__components_1_1exceptions_1_1_lookup_transform_exception.html',1,'modulo_components::exceptions']]] +]; diff --git a/versions/v4.2.2/search/classes_4.js b/versions/v4.2.2/search/classes_4.js new file mode 100644 index 000000000..95049afcd --- /dev/null +++ b/versions/v4.2.2/search/classes_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['messagepair_0',['MessagePair',['../classmodulo__core_1_1communication_1_1_message_pair.html',1,'modulo_core::communication']]], + ['messagepairinterface_1',['MessagePairInterface',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html',1,'modulo_core::communication']]], + ['messagetranslationexception_2',['MessageTranslationException',['../classmodulo__core_1_1exceptions_1_1_message_translation_exception.html',1,'modulo_core::exceptions']]] +]; diff --git a/versions/v4.2.2/search/classes_5.js b/versions/v4.2.2/search/classes_5.js new file mode 100644 index 000000000..15fa934bb --- /dev/null +++ b/versions/v4.2.2/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nullpointerexception_0',['NullPointerException',['../classmodulo__core_1_1exceptions_1_1_null_pointer_exception.html',1,'modulo_core::exceptions']]] +]; diff --git a/versions/v4.2.2/search/classes_6.js b/versions/v4.2.2/search/classes_6.js new file mode 100644 index 000000000..8abbf383d --- /dev/null +++ b/versions/v4.2.2/search/classes_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['parametertranslationexception_0',['ParameterTranslationException',['../classmodulo__core_1_1exceptions_1_1_parameter_translation_exception.html',1,'modulo_core::exceptions']]], + ['predicateslistener_1',['PredicatesListener',['../classmodulo__utils_1_1testutils_1_1_predicates_listener.html',1,'modulo_utils::testutils']]], + ['publisherhandler_2',['PublisherHandler',['../classmodulo__core_1_1communication_1_1_publisher_handler.html',1,'modulo_core::communication']]], + ['publisherinterface_3',['PublisherInterface',['../classmodulo__core_1_1communication_1_1_publisher_interface.html',1,'modulo_core::communication']]] +]; diff --git a/versions/v4.2.2/search/classes_7.js b/versions/v4.2.2/search/classes_7.js new file mode 100644 index 000000000..c3d2fea26 --- /dev/null +++ b/versions/v4.2.2/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['robotcontrollerinterface_0',['RobotControllerInterface',['../classmodulo__controllers_1_1_robot_controller_interface.html',1,'modulo_controllers']]] +]; diff --git a/versions/v4.2.2/search/classes_8.js b/versions/v4.2.2/search/classes_8.js new file mode 100644 index 000000000..213288c40 --- /dev/null +++ b/versions/v4.2.2/search/classes_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['serviceclient_0',['ServiceClient',['../classmodulo__utils_1_1testutils_1_1_service_client.html',1,'modulo_utils::testutils']]], + ['subscriptionhandler_1',['SubscriptionHandler',['../classmodulo__core_1_1communication_1_1_subscription_handler.html',1,'modulo_core::communication']]], + ['subscriptioninterface_2',['SubscriptionInterface',['../classmodulo__core_1_1communication_1_1_subscription_interface.html',1,'modulo_core::communication']]] +]; diff --git a/versions/v4.2.2/search/close.svg b/versions/v4.2.2/search/close.svg new file mode 100644 index 000000000..337d6cc13 --- /dev/null +++ b/versions/v4.2.2/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/versions/v4.2.2/search/enums_0.js b/versions/v4.2.2/search/enums_0.js new file mode 100644 index 000000000..b231b7826 --- /dev/null +++ b/versions/v4.2.2/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['messagetype_0',['MessageType',['../namespacemodulo__core_1_1communication.html#a14a52364ccbc238876007a3f134977ab',1,'modulo_core::communication']]] +]; diff --git a/versions/v4.2.2/search/enums_1.js b/versions/v4.2.2/search/enums_1.js new file mode 100644 index 000000000..0238300ee --- /dev/null +++ b/versions/v4.2.2/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['publishertype_0',['PublisherType',['../namespacemodulo__core_1_1communication.html#a11c26e7082f80b74fb35da3f901f9366',1,'modulo_core::communication']]] +]; diff --git a/versions/v4.2.2/search/functions_0.js b/versions/v4.2.2/search/functions_0.js new file mode 100644 index 000000000..0371ddc53 --- /dev/null +++ b/versions/v4.2.2/search/functions_0.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['activate_0',['activate',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#ad3cb237464da96e1dd2780b696bce139',1,'modulo_core::communication::PublisherInterface']]], + ['add_5fcommand_5finterface_1',['add_command_interface',['../classmodulo__controllers_1_1_controller_interface.html#ad7d9aff67e0bba6ef2a557cdb94ab000',1,'modulo_controllers::ControllerInterface']]], + ['add_5finput_2',['add_input',['../classmodulo__components_1_1_component_interface.html#a6d6fd277be46d40ea6d73b547d028055',1,'modulo_components::ComponentInterface::add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::string &default_topic="", bool fixed_topic=false)'],['../classmodulo__components_1_1_component_interface.html#aed06da445cab193c04702a54d0039603',1,'modulo_components::ComponentInterface::add_input(const std::string &signal_name, const std::shared_ptr< DataT > &data, const std::function< void()> &callback, const std::string &default_topic="", bool fixed_topic=false)'],['../classmodulo__components_1_1_component_interface.html#ab5868c98d10e4f7abfa1a1377da7d81f',1,'modulo_components::ComponentInterface::add_input(const std::string &signal_name, const std::function< void(const std::shared_ptr< MsgT >)> &callback, const std::string &default_topic="", bool fixed_topic=false)'],['../classmodulo__controllers_1_1_controller_interface.html#aaaec627072f31f45db49534300075eaa',1,'modulo_controllers::ControllerInterface::add_input()']]], + ['add_5foutput_3',['add_output',['../classmodulo__components_1_1_component.html#ab475ee0e8ea1b1f52c6f0720a0546e90',1,'modulo_components::Component::add_output()'],['../classmodulo__components_1_1_lifecycle_component.html#a22d31bd5f8a713b0ce757bea8622cbf3',1,'modulo_components::LifecycleComponent::add_output()'],['../classmodulo__controllers_1_1_controller_interface.html#a0723167993c55cb066aaed54df80439f',1,'modulo_controllers::ControllerInterface::add_output()']]], + ['add_5fparameter_4',['add_parameter',['../classmodulo__components_1_1_component_interface.html#a518bf9ca1ff6aa9dc16c88c5b06cb5d8',1,'modulo_components::ComponentInterface::add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)'],['../classmodulo__components_1_1_component_interface.html#ae833c972a8a140f8bacac3d680154a86',1,'modulo_components::ComponentInterface::add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)'],['../classmodulo__controllers_1_1_controller_interface.html#a98178d87edfbfa2dc1a90a57ef3f0bff',1,'modulo_controllers::ControllerInterface::add_parameter(const std::shared_ptr< state_representation::ParameterInterface > &parameter, const std::string &description, bool read_only=false)'],['../classmodulo__controllers_1_1_controller_interface.html#aadfd42d7dfe06426595c3d04f0f19768',1,'modulo_controllers::ControllerInterface::add_parameter(const std::string &name, const T &value, const std::string &description, bool read_only=false)']]], + ['add_5fperiodic_5fcallback_5',['add_periodic_callback',['../classmodulo__components_1_1_component_interface.html#ad17ee02a3b29dd632b594af6620a3168',1,'modulo_components::ComponentInterface']]], + ['add_5fpredicate_6',['add_predicate',['../classmodulo__components_1_1_component_interface.html#ab245c0fc061c4109961c7339c2bf27a4',1,'modulo_components::ComponentInterface::add_predicate()'],['../classmodulo__controllers_1_1_controller_interface.html#a255f23e8187539095cb4d1ec782f3957',1,'modulo_controllers::ControllerInterface::add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)'],['../classmodulo__controllers_1_1_controller_interface.html#a109b62a0bd025c4424db87c53aae2cf7',1,'modulo_controllers::ControllerInterface::add_predicate(const std::string &predicate_name, bool predicate_value)'],['../classmodulo__components_1_1_component_interface.html#a64726a7779cd0ade615a10d037e8c107',1,'modulo_components::ComponentInterface::add_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)']]], + ['add_5fservice_7',['add_service',['../classmodulo__components_1_1_component_interface.html#af915cd5317266aa78dc61151e6f1fa6c',1,'modulo_components::ComponentInterface::add_service(const std::string &service_name, const std::function< ComponentServiceResponse(void)> &callback)'],['../classmodulo__components_1_1_component_interface.html#a12724f83b3327d6a35d9ae02046e96fd',1,'modulo_components::ComponentInterface::add_service(const std::string &service_name, const std::function< ComponentServiceResponse(const std::string &string)> &callback)'],['../classmodulo__controllers_1_1_controller_interface.html#a860bf53284a52c402b2edc4e92cdfae6',1,'modulo_controllers::ControllerInterface::add_service(const std::string &service_name, const std::function< ControllerServiceResponse(void)> &callback)'],['../classmodulo__controllers_1_1_controller_interface.html#a6f7b80e6dff868af11e1b4168d6df034',1,'modulo_controllers::ControllerInterface::add_service(const std::string &service_name, const std::function< ControllerServiceResponse(const std::string &string)> &callback)']]], + ['add_5fstate_5finterface_8',['add_state_interface',['../classmodulo__controllers_1_1_controller_interface.html#a4f58fa18886d11dcf57a5abcde0e5e09',1,'modulo_controllers::ControllerInterface']]], + ['add_5fstatic_5ftf_5fbroadcaster_9',['add_static_tf_broadcaster',['../classmodulo__components_1_1_component_interface.html#a50d6d32870a7a81a72ab491f0d80f0bb',1,'modulo_components::ComponentInterface']]], + ['add_5ftf_5fbroadcaster_10',['add_tf_broadcaster',['../classmodulo__components_1_1_component_interface.html#ae782ab5b7593c368df9407df79d75c40',1,'modulo_components::ComponentInterface']]], + ['add_5ftf_5flistener_11',['add_tf_listener',['../classmodulo__components_1_1_component_interface.html#adf4b06438efcead7a6d29e3178161296',1,'modulo_components::ComponentInterface']]], + ['add_5ftrigger_12',['add_trigger',['../classmodulo__components_1_1_component_interface.html#abc67aa3f969574fb71b0a8527dad8346',1,'modulo_components::ComponentInterface::add_trigger()'],['../classmodulo__controllers_1_1_controller_interface.html#ab6072f96565cee5fc767622aea3d5989',1,'modulo_controllers::ControllerInterface::add_trigger()']]] +]; diff --git a/versions/v4.2.2/search/functions_1.js b/versions/v4.2.2/search/functions_1.js new file mode 100644 index 000000000..a58890e17 --- /dev/null +++ b/versions/v4.2.2/search/functions_1.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['command_5finterface_5fconfiguration_0',['command_interface_configuration',['../classmodulo__controllers_1_1_controller_interface.html#a170ee563e6bbeb4b2cf441600f6a2490',1,'modulo_controllers::ControllerInterface']]], + ['component_1',['Component',['../classmodulo__components_1_1_component.html#ae19b0377e0b7fa7f43efff7adfae143b',1,'modulo_components::Component']]], + ['componentinterface_2',['ComponentInterface',['../classmodulo__components_1_1_component_interface.html#a8ce3d7ecf6ff18041c0ec2829de40e22',1,'modulo_components::ComponentInterface']]], + ['compute_5fcartesian_5fstate_3',['compute_cartesian_state',['../classmodulo__controllers_1_1_robot_controller_interface.html#a92904926dd9e22ff7c462a33b9306575',1,'modulo_controllers::RobotControllerInterface']]], + ['controllerinterface_4',['ControllerInterface',['../classmodulo__controllers_1_1_controller_interface.html#a45af1adc882e1d005c6ce3a0bf63f061',1,'modulo_controllers::ControllerInterface']]], + ['copy_5fparameter_5fvalue_5',['copy_parameter_value',['../namespacemodulo__core_1_1translators.html#af16d1185354f2f64f06698b0d1b3fc3f',1,'modulo_core::translators']]], + ['create_5foutput_6',['create_output',['../classmodulo__components_1_1_component_interface.html#aa84db667c915dcb03d367b0288ce1174',1,'modulo_components::ComponentInterface']]], + ['create_5fpublisher_5finterface_7',['create_publisher_interface',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#a95f0a5157539b3ffb1a936e4bbd60e23',1,'modulo_core::communication::PublisherHandler']]], + ['create_5fsubscription_5finterface_8',['create_subscription_interface',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a9adbe98500d927e5e76fb18c9f62e04b',1,'modulo_core::communication::SubscriptionHandler']]] +]; diff --git a/versions/v4.2.2/search/functions_2.js b/versions/v4.2.2/search/functions_2.js new file mode 100644 index 000000000..8a09995d9 --- /dev/null +++ b/versions/v4.2.2/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['deactivate_0',['deactivate',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a2570447d8280ab4f1bc47e8c020082f3',1,'modulo_core::communication::PublisherInterface']]], + ['declare_5finput_1',['declare_input',['../classmodulo__components_1_1_component_interface.html#a0ef86c0ed9502607325d7df042c849d1',1,'modulo_components::ComponentInterface']]], + ['declare_5foutput_2',['declare_output',['../classmodulo__components_1_1_component_interface.html#a103aec4a95d9c136b572534221a1eeec',1,'modulo_components::ComponentInterface']]] +]; diff --git a/versions/v4.2.2/search/functions_3.js b/versions/v4.2.2/search/functions_3.js new file mode 100644 index 000000000..42471a1f3 --- /dev/null +++ b/versions/v4.2.2/search/functions_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['evaluate_0',['evaluate',['../classmodulo__controllers_1_1_controller_interface.html#a258e8cc74be6bf915a2c1aa5f9278fc1',1,'modulo_controllers::ControllerInterface']]], + ['evaluate_5fperiodic_5fcallbacks_1',['evaluate_periodic_callbacks',['../classmodulo__components_1_1_component_interface.html#ae3356bb3938d2df54a5bd43b07c049df',1,'modulo_components::ComponentInterface']]], + ['execute_2',['execute',['../classmodulo__components_1_1_component.html#aeb496916cb46a1e8369412f06c440910',1,'modulo_components::Component']]] +]; diff --git a/versions/v4.2.2/search/functions_4.js b/versions/v4.2.2/search/functions_4.js new file mode 100644 index 000000000..75cdf6a3a --- /dev/null +++ b/versions/v4.2.2/search/functions_4.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['get_5fcallback_0',['get_callback',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a60039333a4c81ea81c66ab2e88b6eaff',1,'modulo_core::communication::SubscriptionHandler::get_callback(const std::function< void()> &user_callback)'],['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a01f697561ba64f5d98ae0522f8c57cc6',1,'modulo_core::communication::SubscriptionHandler::get_callback()']]], + ['get_5fcartesian_5fstate_1',['get_cartesian_state',['../classmodulo__controllers_1_1_robot_controller_interface.html#a1ba472ffaa66f3061a85cd3918bceaa2',1,'modulo_controllers::RobotControllerInterface']]], + ['get_5fcommand_5finterface_2',['get_command_interface',['../classmodulo__controllers_1_1_controller_interface.html#a53a0f9e5243f9e0dca8d470a78e90426',1,'modulo_controllers::ControllerInterface']]], + ['get_5fdata_3',['get_data',['../classmodulo__core_1_1communication_1_1_message_pair.html#a951f34fcc216a1afdebefc665c5b80af',1,'modulo_core::communication::MessagePair']]], + ['get_5fft_5fsensor_4',['get_ft_sensor',['../classmodulo__controllers_1_1_robot_controller_interface.html#a54644709a8c725cc8df2ff3fee2adf1c',1,'modulo_controllers::RobotControllerInterface']]], + ['get_5fhandler_5',['get_handler',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a725e0facd73564ae7ab9c75396e401b0',1,'modulo_core::communication::PublisherInterface::get_handler()'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a29ee546de88bc4ddd63ea0aa5eaf2399',1,'modulo_core::communication::SubscriptionInterface::get_handler()']]], + ['get_5fjoint_5fstate_6',['get_joint_state',['../classmodulo__controllers_1_1_robot_controller_interface.html#a40b1b7a5a15a29656d2a3aaa1a1e0a9c',1,'modulo_controllers::RobotControllerInterface']]], + ['get_5fmessage_5fpair_7',['get_message_pair',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a284645c90efb812ecd3abd90125962fa',1,'modulo_core::communication::MessagePairInterface::get_message_pair()'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a5c38ad0774ca2a51218fc473320c5b71',1,'modulo_core::communication::PublisherInterface::get_message_pair()'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#acc3d58b49cd9c3d61f1896aa9dda2acf',1,'modulo_core::communication::SubscriptionInterface::get_message_pair()']]], + ['get_5fparameter_8',['get_parameter',['../classmodulo__components_1_1_lifecycle_component.html#a3e69d60ac7582fdd2306c97e1532f167',1,'modulo_components::LifecycleComponent::get_parameter()'],['../classmodulo__controllers_1_1_controller_interface.html#a0cec045351b8142814f97cb7baa4a52b',1,'modulo_controllers::ControllerInterface::get_parameter()'],['../classmodulo__components_1_1_component_interface.html#a3f4d8fe85525194e2f5393065ee056aa',1,'modulo_components::ComponentInterface::get_parameter()'],['../classmodulo__components_1_1_component.html#a2b02cb1ed0716c4911df78b6735d297e',1,'modulo_components::Component::get_parameter()']]], + ['get_5fparameter_5fvalue_9',['get_parameter_value',['../classmodulo__components_1_1_component_interface.html#a418d23ed978018d9d465b9036db3eb8d',1,'modulo_components::ComponentInterface::get_parameter_value()'],['../classmodulo__controllers_1_1_controller_interface.html#a276986a6d1a42d36200899716bda47a0',1,'modulo_controllers::ControllerInterface::get_parameter_value()']]], + ['get_5fpredicate_10',['get_predicate',['../classmodulo__components_1_1_component_interface.html#aafa1d3497232bf3d93658bef4d85f6b8',1,'modulo_components::ComponentInterface::get_predicate()'],['../classmodulo__controllers_1_1_controller_interface.html#a3d5e1424dbb90c278cca66811c375f9d',1,'modulo_controllers::ControllerInterface::get_predicate()']]], + ['get_5fqos_11',['get_qos',['../classmodulo__components_1_1_component_interface.html#aab0d3f3a481902f01c70edf2349f304e',1,'modulo_components::ComponentInterface::get_qos()'],['../classmodulo__controllers_1_1_controller_interface.html#a1081969b3f3ad9e98fcb8d9fb1569656',1,'modulo_controllers::ControllerInterface::get_qos()']]], + ['get_5fros_5fparameter_5ftype_12',['get_ros_parameter_type',['../namespacemodulo__core_1_1translators.html#aea1df4ab0bfb038f7b297865993149e2',1,'modulo_core::translators']]], + ['get_5fstate_5finterface_13',['get_state_interface',['../classmodulo__controllers_1_1_controller_interface.html#a880660f18e4f8dac9d41bf39323e9413',1,'modulo_controllers::ControllerInterface']]], + ['get_5fstate_5finterfaces_14',['get_state_interfaces',['../classmodulo__controllers_1_1_controller_interface.html#a2a36125b4ed269f974c8599d7f791e11',1,'modulo_controllers::ControllerInterface']]], + ['get_5fsubscription_15',['get_subscription',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#aa9c9421c48dbbbc87dfd0d370f452b44',1,'modulo_core::communication::SubscriptionHandler']]], + ['get_5ftype_16',['get_type',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a578dda86f8b23d5aeb8c3d3854239e77',1,'modulo_core::communication::MessagePairInterface::get_type()'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a2f878eb3cd08e69b685b39c6c79c5ed0',1,'modulo_core::communication::PublisherInterface::get_type()']]] +]; diff --git a/versions/v4.2.2/search/functions_5.js b/versions/v4.2.2/search/functions_5.js new file mode 100644 index 000000000..5ea50a4d4 --- /dev/null +++ b/versions/v4.2.2/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['is_5factive_0',['is_active',['../classmodulo__controllers_1_1_controller_interface.html#a2b2c9e78ee4ad5a27d21818c58651213',1,'modulo_controllers::ControllerInterface']]] +]; diff --git a/versions/v4.2.2/search/functions_6.js b/versions/v4.2.2/search/functions_6.js new file mode 100644 index 000000000..3b11c2d09 --- /dev/null +++ b/versions/v4.2.2/search/functions_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['lifecyclecomponent_0',['LifecycleComponent',['../classmodulo__components_1_1_lifecycle_component.html#a81908c5428fea4a36262ffd82168dd06',1,'modulo_components::LifecycleComponent']]], + ['lookup_5ftransform_1',['lookup_transform',['../classmodulo__components_1_1_component_interface.html#a71b7fbc1c56b4cfb0fd2bd800d6c5015',1,'modulo_components::ComponentInterface::lookup_transform(const std::string &frame, const std::string &reference_frame, const tf2::TimePoint &time_point, const tf2::Duration &duration)'],['../classmodulo__components_1_1_component_interface.html#a43c76f10f313827f7a32b88d3289885c',1,'modulo_components::ComponentInterface::lookup_transform(const std::string &frame, const std::string &reference_frame="world", double validity_period=-1.0, const tf2::Duration &duration=tf2::Duration(std::chrono::microseconds(10)))']]] +]; diff --git a/versions/v4.2.2/search/functions_7.js b/versions/v4.2.2/search/functions_7.js new file mode 100644 index 000000000..8851524e7 --- /dev/null +++ b/versions/v4.2.2/search/functions_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['messagepair_0',['MessagePair',['../classmodulo__core_1_1communication_1_1_message_pair.html#adeb7c57318156213f827ebdfc1eb05ff',1,'modulo_core::communication::MessagePair']]], + ['messagepairinterface_1',['messagepairinterface',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a42c43740bf2d3e11b0f228d422c570c7',1,'modulo_core::communication::MessagePairInterface::MessagePairInterface(MessageType type)'],['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#ac6a7c97767464a21fc8a7b9f10475703',1,'modulo_core::communication::MessagePairInterface::MessagePairInterface(const MessagePairInterface &message_pair)=default']]] +]; diff --git a/versions/v4.2.2/search/functions_8.js b/versions/v4.2.2/search/functions_8.js new file mode 100644 index 000000000..8686584ff --- /dev/null +++ b/versions/v4.2.2/search/functions_8.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['on_5factivate_0',['on_activate',['../classmodulo__controllers_1_1_controller_interface.html#a5e9758c1b2f19970f5912e65274678b6',1,'modulo_controllers::ControllerInterface::on_activate()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#a27bec46fefa9083c1b0a19e5b8a69172',1,'modulo_controllers::RobotControllerInterface::on_activate()'],['../classmodulo__core_1_1communication_1_1_publisher_handler.html#aba41e8e6e8c06deeda4578b1807150c6',1,'modulo_core::communication::PublisherHandler::on_activate()'],['../classmodulo__controllers_1_1_controller_interface.html#a32a771d48d2f199175bbae212cf6cb9a',1,'modulo_controllers::ControllerInterface::on_activate()']]], + ['on_5factivate_5fcallback_1',['on_activate_callback',['../classmodulo__components_1_1_lifecycle_component.html#a45e7a84d2ff32d6538b065e7d5d59db4',1,'modulo_components::LifecycleComponent']]], + ['on_5fcleanup_5fcallback_2',['on_cleanup_callback',['../classmodulo__components_1_1_lifecycle_component.html#a4dba41e6a556184546ae3244077d3eab',1,'modulo_components::LifecycleComponent']]], + ['on_5fconfigure_3',['on_configure',['../classmodulo__controllers_1_1_controller_interface.html#a744aead2afb2097f13491c62b205c419',1,'modulo_controllers::ControllerInterface::on_configure(const rclcpp_lifecycle::State &previous_state) final'],['../classmodulo__controllers_1_1_controller_interface.html#a20045ceffec9a44e4666d92632be5400',1,'modulo_controllers::ControllerInterface::on_configure()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#ad7de2bc07230837f28faf0ebb4c1fc65',1,'modulo_controllers::RobotControllerInterface::on_configure()']]], + ['on_5fconfigure_5fcallback_4',['on_configure_callback',['../classmodulo__components_1_1_lifecycle_component.html#ae2750d56c97758b231c5a41c81e94787',1,'modulo_components::LifecycleComponent']]], + ['on_5fdeactivate_5',['on_deactivate',['../classmodulo__controllers_1_1_controller_interface.html#ac9742c368a3bbdbf5ea6603f253ad2a7',1,'modulo_controllers::ControllerInterface::on_deactivate()'],['../classmodulo__core_1_1communication_1_1_publisher_handler.html#aa6a36040bdb492150a85e58ed6c89f5e',1,'modulo_core::communication::PublisherHandler::on_deactivate()'],['../classmodulo__controllers_1_1_controller_interface.html#ab5cd6b83dd7486f408a4b95aa211cdff',1,'modulo_controllers::ControllerInterface::on_deactivate()']]], + ['on_5fdeactivate_5fcallback_6',['on_deactivate_callback',['../classmodulo__components_1_1_lifecycle_component.html#a22b81a549cb93798e4c7801541125b70',1,'modulo_components::LifecycleComponent']]], + ['on_5ferror_5fcallback_7',['on_error_callback',['../classmodulo__components_1_1_lifecycle_component.html#aa06d7c56d3cd549f20e550958eeac6c6',1,'modulo_components::LifecycleComponent']]], + ['on_5fexecute_5fcallback_8',['on_execute_callback',['../classmodulo__components_1_1_component.html#aa91321e421f2f71a9c86f694996baeb1',1,'modulo_components::Component']]], + ['on_5finit_9',['on_init',['../classmodulo__controllers_1_1_controller_interface.html#a3280902d5467912fd07fcc853a9214eb',1,'modulo_controllers::ControllerInterface::on_init()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#ab1c80242a247f5373b710c135309b295',1,'modulo_controllers::RobotControllerInterface::on_init()']]], + ['on_5fshutdown_5fcallback_10',['on_shutdown_callback',['../classmodulo__components_1_1_lifecycle_component.html#a05b5dfdf28ebf0d2a9f69cdad9d29eb3',1,'modulo_components::LifecycleComponent']]], + ['on_5fstep_5fcallback_11',['on_step_callback',['../classmodulo__components_1_1_component_interface.html#a7f5fff168fc2a31d5e36b4a103ca46fa',1,'modulo_components::ComponentInterface']]], + ['on_5fvalidate_5fparameter_5fcallback_12',['on_validate_parameter_callback',['../classmodulo__components_1_1_component_interface.html#a09bd587039da047128519ecf59ae544c',1,'modulo_components::ComponentInterface::on_validate_parameter_callback()'],['../classmodulo__controllers_1_1_controller_interface.html#af33e739ecc8164cd9c0a49517b3d3e07',1,'modulo_controllers::ControllerInterface::on_validate_parameter_callback()'],['../classmodulo__controllers_1_1_robot_controller_interface.html#a3e8115f4baa72f001179efe8295bfe5c',1,'modulo_controllers::RobotControllerInterface::on_validate_parameter_callback()']]] +]; diff --git a/versions/v4.2.2/search/functions_9.js b/versions/v4.2.2/search/functions_9.js new file mode 100644 index 000000000..59ec8541f --- /dev/null +++ b/versions/v4.2.2/search/functions_9.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['publish_0',['publish',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#a864c43153af83707343920e33700043d',1,'modulo_core::communication::PublisherHandler::publish()'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a3e4d5682dc38835d7e1f02a2e71503ed',1,'modulo_core::communication::PublisherInterface::publish()']]], + ['publish_5foutput_1',['publish_output',['../classmodulo__components_1_1_component_interface.html#a98d4767b141939df0c7077c10d5b3aa7',1,'modulo_components::ComponentInterface']]], + ['publish_5foutputs_2',['publish_outputs',['../classmodulo__components_1_1_component_interface.html#a0bdfeacb7b0b13c2adeecb51a80a0fa0',1,'modulo_components::ComponentInterface']]], + ['publish_5fpredicate_3',['publish_predicate',['../classmodulo__components_1_1_component_interface.html#ad00c05e6e298aee1367b8a791f6184d3',1,'modulo_components::ComponentInterface']]], + ['publish_5fpredicates_4',['publish_predicates',['../classmodulo__components_1_1_component_interface.html#a9f7ba119ecceb0862634ed403306ddf8',1,'modulo_components::ComponentInterface']]], + ['publisherhandler_5',['PublisherHandler',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#abeb33dd415f1ab50bc86ca74f1aba9b1',1,'modulo_core::communication::PublisherHandler']]], + ['publisherinterface_6',['publisherinterface',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a8825c1bbfbe13075bfc88213cc2f0feb',1,'modulo_core::communication::PublisherInterface::PublisherInterface(PublisherType type, std::shared_ptr< MessagePairInterface > message_pair=nullptr)'],['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a2881b0902f8b9c22c62c08c2106ea7be',1,'modulo_core::communication::PublisherInterface::PublisherInterface(const PublisherInterface &publisher)=default']]] +]; diff --git a/versions/v4.2.2/search/functions_a.js b/versions/v4.2.2/search/functions_a.js new file mode 100644 index 000000000..be7ea2576 --- /dev/null +++ b/versions/v4.2.2/search/functions_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['raise_5ferror_0',['raise_error',['../classmodulo__components_1_1_component_interface.html#a8a1c3bac0aa2141b33682059b3b8f18b',1,'modulo_components::ComponentInterface']]], + ['read_1',['read',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a8b81ae20f181f80df6d8e127a9719ede',1,'modulo_core::communication::MessagePairInterface']]], + ['read_5finput_2',['read_input',['../classmodulo__controllers_1_1_controller_interface.html#a403f9e05f88d5f9e576b4126fd64e3a0',1,'modulo_controllers::ControllerInterface']]], + ['read_5fmessage_3',['read_message',['../namespacemodulo__core_1_1translators.html#a832274530f0275f7ef5cdfb4ea7fd2d9',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Twist &message)'],['../namespacemodulo__core_1_1translators.html#ae3028daafe4e35d4cb3ed83172d8bcb0',1,'modulo_core::translators::read_message(T &state, const EncodedState &message)'],['../namespacemodulo__core_1_1translators.html#a3eab5bfefb68847b86699826fc206757',1,'modulo_core::translators::read_message(std::string &state, const std_msgs::msg::String &message)'],['../namespacemodulo__core_1_1translators.html#a61a15e12792070307871484cec3919bd',1,'modulo_core::translators::read_message(int &state, const std_msgs::msg::Int32 &message)'],['../namespacemodulo__core_1_1translators.html#a89f6c759d19c4680f9bd0dc6dfccf287',1,'modulo_core::translators::read_message(std::vector< double > &state, const std_msgs::msg::Float64MultiArray &message)'],['../namespacemodulo__core_1_1translators.html#a00a802c20071659785e4e5651af201a6',1,'modulo_core::translators::read_message(double &state, const std_msgs::msg::Float64 &message)'],['../namespacemodulo__core_1_1translators.html#a329c6bf4bcf7e44b283fb8aadc6d7c6f',1,'modulo_core::translators::read_message(bool &state, const std_msgs::msg::Bool &message)'],['../namespacemodulo__core_1_1translators.html#a2c16bbbdfb7e718fc716139399e549ad',1,'modulo_core::translators::read_message(state_representation::Parameter< T > &state, const U &message)'],['../namespacemodulo__core_1_1translators.html#a552fe7a279beb774b39819f60bed127a',1,'modulo_core::translators::read_message(state_representation::JointState &state, const sensor_msgs::msg::JointState &message)'],['../namespacemodulo__core_1_1translators.html#ab0d3919f19f876ecd246045c9d58c2be',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::WrenchStamped &message)'],['../namespacemodulo__core_1_1translators.html#a9ea65818de625b6fa8ced760bc3c6c7d',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Wrench &message)'],['../namespacemodulo__core_1_1translators.html#a7f5eaa5ff35c583a37fda7e8b272a870',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::TwistStamped &message)'],['../namespacemodulo__core_1_1translators.html#a7fb0ede2e2045b55a995ae71a3a1d8ad',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::TransformStamped &message)'],['../namespacemodulo__core_1_1translators.html#ad4836d631d145e89dfd47c4b394d174c',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Transform &message)'],['../namespacemodulo__core_1_1translators.html#a71af5ce246d3c9e1ff252f4c55d3817a',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::PoseStamped &message)'],['../namespacemodulo__core_1_1translators.html#a2aa635da759b460c5aad924c4f1dcedb',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Pose &message)'],['../namespacemodulo__core_1_1translators.html#afe26976826af1f5c0c381f0b7e428502',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::AccelStamped &message)'],['../namespacemodulo__core_1_1translators.html#af7b0fbec62bd9b885d289a7fb1ddba76',1,'modulo_core::translators::read_message(state_representation::CartesianState &state, const geometry_msgs::msg::Accel &message)'],['../classmodulo__core_1_1communication_1_1_message_pair.html#ac014837301539405388428fe893366b1',1,'modulo_core::communication::MessagePair::read_message()']]], + ['read_5fparameter_4',['read_parameter',['../namespacemodulo__core_1_1translators.html#a1bb1765511842105ebf5ea295b5e9750',1,'modulo_core::translators::read_parameter(const rclcpp::Parameter &ros_parameter)'],['../namespacemodulo__core_1_1translators.html#adcc089559e331a621718f275603b2dec',1,'modulo_core::translators::read_parameter(const rclcpp::Parameter &ros_parameter, const std::shared_ptr< state_representation::ParameterInterface > &parameter)']]], + ['read_5fparameter_5fconst_5',['read_parameter_const',['../namespacemodulo__core_1_1translators.html#afa6da1171b524ca4b63f6119f1774f1b',1,'modulo_core::translators']]], + ['read_5fstate_5finterfaces_6',['read_state_interfaces',['../classmodulo__controllers_1_1_controller_interface.html#a29a43b47e9a1e82b0670f2ff48d70483',1,'modulo_controllers::ControllerInterface']]], + ['remove_5finput_7',['remove_input',['../classmodulo__components_1_1_component_interface.html#a0c6b3ff94509f48df3a75f3ec68b14c4',1,'modulo_components::ComponentInterface']]], + ['remove_5foutput_8',['remove_output',['../classmodulo__components_1_1_component_interface.html#a969725887f31b8a88d0af54d390b7b05',1,'modulo_components::ComponentInterface']]], + ['robotcontrollerinterface_9',['robotcontrollerinterface',['../classmodulo__controllers_1_1_robot_controller_interface.html#aa94d692f330dd5c3d0a92edeb460b0fa',1,'modulo_controllers::RobotControllerInterface::RobotControllerInterface(bool robot_model_required, const std::string &control_type="")'],['../classmodulo__controllers_1_1_robot_controller_interface.html#a0d36c86c0cf86b377195aa49290aa781',1,'modulo_controllers::RobotControllerInterface::RobotControllerInterface()']]] +]; diff --git a/versions/v4.2.2/search/functions_b.js b/versions/v4.2.2/search/functions_b.js new file mode 100644 index 000000000..a0100fef9 --- /dev/null +++ b/versions/v4.2.2/search/functions_b.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['safe_5fdynamic_5fcast_0',['safe_dynamic_cast',['../namespacemodulo__core_1_1translators.html#a9b01bebfd4d9e35131e0d04620446c08',1,'modulo_core::translators']]], + ['safe_5fdynamic_5fpointer_5fcast_1',['safe_dynamic_pointer_cast',['../namespacemodulo__core_1_1translators.html#a6ef1c765b829bf82c25a6e4f409c618e',1,'modulo_core::translators']]], + ['safe_5fjoint_5fstate_5fconversion_2',['safe_joint_state_conversion',['../namespacemodulo__core_1_1translators.html#ad0f036bf1583f4542468ca69fd66ead0',1,'modulo_core::translators']]], + ['safe_5fspatial_5fstate_5fconversion_3',['safe_spatial_state_conversion',['../namespacemodulo__core_1_1translators.html#a04a6f2e996dbc7b5ce4dcda8d9d21548',1,'modulo_core::translators']]], + ['send_5fstatic_5ftransform_4',['send_static_transform',['../classmodulo__components_1_1_component_interface.html#ae9fb8bc91a29935a0e4d469e45e62a7b',1,'modulo_components::ComponentInterface']]], + ['send_5fstatic_5ftransforms_5',['send_static_transforms',['../classmodulo__components_1_1_component_interface.html#a39293f62ba806c5f599f70cdf876ccae',1,'modulo_components::ComponentInterface']]], + ['send_5ftransform_6',['send_transform',['../classmodulo__components_1_1_component_interface.html#ab3d9b98663be5983a1c677c32f582d3e',1,'modulo_components::ComponentInterface']]], + ['send_5ftransforms_7',['send_transforms',['../classmodulo__components_1_1_component_interface.html#a07e38f6eb54ae52374056e1ccc595e7f',1,'modulo_components::ComponentInterface']]], + ['set_5fcommand_5finterface_8',['set_command_interface',['../classmodulo__controllers_1_1_controller_interface.html#a9623c4028e3da288789b80a750c96304',1,'modulo_controllers::ControllerInterface']]], + ['set_5fdata_9',['set_data',['../classmodulo__core_1_1communication_1_1_message_pair.html#ae71ad28f6e4270b5a318ddbdbf620585',1,'modulo_core::communication::MessagePair']]], + ['set_5fjoint_5fcommand_10',['set_joint_command',['../classmodulo__controllers_1_1_robot_controller_interface.html#ab2c42661fe2c0a665b8b7e6bc0f0bc7f',1,'modulo_controllers::RobotControllerInterface']]], + ['set_5fmessage_5fpair_11',['set_message_pair',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#aa59ed6b199b838811db4c29bb19c5319',1,'modulo_core::communication::PublisherInterface::set_message_pair()'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a817997523c09e4c1d912d9a18427f3ef',1,'modulo_core::communication::SubscriptionInterface::set_message_pair()']]], + ['set_5fparameter_5fvalue_12',['set_parameter_value',['../classmodulo__controllers_1_1_controller_interface.html#acfb5f26a4f5a3db1ce62630e5b37bb58',1,'modulo_controllers::ControllerInterface::set_parameter_value()'],['../classmodulo__components_1_1_component_interface.html#a28047040106c7a84d7c69ba27a034746',1,'modulo_components::ComponentInterface::set_parameter_value(const std::string &name, const T &value)']]], + ['set_5fpredicate_13',['set_predicate',['../classmodulo__components_1_1_component_interface.html#a8b5da2215ad8971dedddd82881136499',1,'modulo_components::ComponentInterface::set_predicate()'],['../classmodulo__controllers_1_1_controller_interface.html#a1543ea7f858ed8112df25ec1b1457601',1,'modulo_controllers::ControllerInterface::set_predicate(const std::string &predicate_name, bool predicate_value)'],['../classmodulo__controllers_1_1_controller_interface.html#a91d032f11f646b71d66b5137f1eca366',1,'modulo_controllers::ControllerInterface::set_predicate(const std::string &predicate_name, const std::function< bool(void)> &predicate_function)'],['../classmodulo__components_1_1_component_interface.html#a8949cef47cf375d195f68e5782f37fbc',1,'modulo_components::ComponentInterface::set_predicate(const std::string &predicate_name, bool predicate_value)']]], + ['set_5fqos_14',['set_qos',['../classmodulo__components_1_1_component_interface.html#aa21a3ebb9bdce8d012558a46b4642fb4',1,'modulo_components::ComponentInterface::set_qos()'],['../classmodulo__controllers_1_1_controller_interface.html#a3348ef179f62c1e48e0c23155419621f',1,'modulo_controllers::ControllerInterface::set_qos()']]], + ['set_5fsubscription_15',['set_subscription',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#ad6ce10b7ac797009a7c64ddf52361276',1,'modulo_core::communication::SubscriptionHandler']]], + ['set_5fuser_5fcallback_16',['set_user_callback',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#ae5ce0270138b061c709ce4f1c2f76f14',1,'modulo_core::communication::SubscriptionHandler']]], + ['state_5finterface_5fconfiguration_17',['state_interface_configuration',['../classmodulo__controllers_1_1_controller_interface.html#af2769f953805848c8672421f769517bc',1,'modulo_controllers::ControllerInterface']]], + ['step_18',['step',['../classmodulo__components_1_1_component_interface.html#a9db2bd1155cbe7c4ed921f173e8f5942',1,'modulo_components::ComponentInterface']]], + ['subscriptionhandler_19',['SubscriptionHandler',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a1e8e5d41669f1c0f952b93a2b86dadae',1,'modulo_core::communication::SubscriptionHandler']]], + ['subscriptioninterface_20',['subscriptioninterface',['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a1d65d122da01edfcd28bdd049d2ad8e8',1,'modulo_core::communication::SubscriptionInterface::SubscriptionInterface(std::shared_ptr< MessagePairInterface > message_pair=nullptr)'],['../classmodulo__core_1_1communication_1_1_subscription_interface.html#a00fca8a8317e59f37051b8a7b411143e',1,'modulo_core::communication::SubscriptionInterface::SubscriptionInterface(const SubscriptionInterface &subscription)=default']]] +]; diff --git a/versions/v4.2.2/search/functions_c.js b/versions/v4.2.2/search/functions_c.js new file mode 100644 index 000000000..322b1d875 --- /dev/null +++ b/versions/v4.2.2/search/functions_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['trigger_0',['trigger',['../classmodulo__components_1_1_component_interface.html#a6460ddfe54a6cdf5c52edcec86658f3f',1,'modulo_components::ComponentInterface::trigger()'],['../classmodulo__controllers_1_1_controller_interface.html#a366856b4b894da1354372cb3278ca66a',1,'modulo_controllers::ControllerInterface::trigger()']]] +]; diff --git a/versions/v4.2.2/search/functions_d.js b/versions/v4.2.2/search/functions_d.js new file mode 100644 index 000000000..55cbcb157 --- /dev/null +++ b/versions/v4.2.2/search/functions_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['update_0',['update',['../classmodulo__controllers_1_1_controller_interface.html#a8f2ab4824543884e6d4e16a903c9a1bf',1,'modulo_controllers::ControllerInterface']]] +]; diff --git a/versions/v4.2.2/search/functions_e.js b/versions/v4.2.2/search/functions_e.js new file mode 100644 index 000000000..639644264 --- /dev/null +++ b/versions/v4.2.2/search/functions_e.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['write_0',['write',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a5cc486ee93eb7756636a851c07f10f35',1,'modulo_core::communication::MessagePairInterface']]], + ['write_5fcommand_5finterfaces_1',['write_command_interfaces',['../classmodulo__controllers_1_1_controller_interface.html#a1fd252f44e3618162c2cee552a8a7b2f',1,'modulo_controllers::ControllerInterface']]], + ['write_5fmessage_2',['write_message',['../namespacemodulo__core_1_1translators.html#ae887c515823c26c71a1266355577d5e0',1,'modulo_core::translators::write_message(geometry_msgs::msg::Wrench &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a02fa2614128ce09ee39cc4fd9a5d2314',1,'modulo_core::translators::write_message(EncodedState &message, const T &state, const rclcpp::Time &)'],['../namespacemodulo__core_1_1translators.html#aa77091be4785272fd22cc5215d930ddd',1,'modulo_core::translators::write_message(std_msgs::msg::String &message, const std::string &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ab5e6c729316ce06f03deec6fe811b3f5',1,'modulo_core::translators::write_message(std_msgs::msg::Int32 &message, const int &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#af3b73148b5111ac49d9b65a03c2682f5',1,'modulo_core::translators::write_message(std_msgs::msg::Float64MultiArray &message, const std::vector< double > &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a014392d41b245b63d2303fdee9e66db7',1,'modulo_core::translators::write_message(std_msgs::msg::Float64 &message, const double &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a2648db7b6384ba6b10186ae5e98bea59',1,'modulo_core::translators::write_message(std_msgs::msg::Bool &message, const bool &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a60be80575b8fb3e3d48f37a8bda6d9ed',1,'modulo_core::translators::write_message(U &message, const state_representation::Parameter< T > &state, const rclcpp::Time &)'],['../namespacemodulo__core_1_1translators.html#acdb4e193bb38e69690de512f7b6ea457',1,'modulo_core::translators::write_message(tf2_msgs::msg::TFMessage &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ae2679cbc4106a9373296b6f00aaea34b',1,'modulo_core::translators::write_message(sensor_msgs::msg::JointState &message, const state_representation::JointState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a1fd40d767a0a9a3c8221eaabb12e8e77',1,'modulo_core::translators::write_message(geometry_msgs::msg::WrenchStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a6960610fd4bf9bb981827e0146b04d05',1,'modulo_core::translators::write_message(geometry_msgs::msg::TwistStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a23c4f120bdc010eb6f5b61bfb21abec1',1,'modulo_core::translators::write_message(geometry_msgs::msg::Twist &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ade9e94aca963133615835e6724ada18b',1,'modulo_core::translators::write_message(geometry_msgs::msg::TransformStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a038c7d7431427a1b46d12a2eab8b9da7',1,'modulo_core::translators::write_message(geometry_msgs::msg::Transform &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#ade7becbd0c04095260f1aad7dc4d5da0',1,'modulo_core::translators::write_message(geometry_msgs::msg::PoseStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a2ce2005274aa2509faa07e206f74202f',1,'modulo_core::translators::write_message(geometry_msgs::msg::Pose &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a0230b5afcd0bfca73a2a676a6e8706c3',1,'modulo_core::translators::write_message(geometry_msgs::msg::AccelStamped &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../namespacemodulo__core_1_1translators.html#a151198c871af003d2205cf0556115260',1,'modulo_core::translators::write_message(geometry_msgs::msg::Accel &message, const state_representation::CartesianState &state, const rclcpp::Time &time)'],['../classmodulo__core_1_1communication_1_1_message_pair.html#aa50124b4eb3e5811562c567da1f03f00',1,'modulo_core::communication::MessagePair::write_message()']]], + ['write_5foutput_3',['write_output',['../classmodulo__controllers_1_1_controller_interface.html#a0af9817d7df9d34b5a5363b8717d526e',1,'modulo_controllers::ControllerInterface']]], + ['write_5fparameter_4',['write_parameter',['../namespacemodulo__core_1_1translators.html#ab0ba0632a12496f0ad34f836c5001689',1,'modulo_core::translators']]] +]; diff --git a/versions/v4.2.2/search/functions_f.js b/versions/v4.2.2/search/functions_f.js new file mode 100644 index 000000000..9de67d867 --- /dev/null +++ b/versions/v4.2.2/search/functions_f.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_7ecomponent_0',['~Component',['../classmodulo__components_1_1_component.html#a3973cf9c0bb9df9e21fb11fae1f8898f',1,'modulo_components::Component']]], + ['_7ecomponentinterface_1',['~ComponentInterface',['../classmodulo__components_1_1_component_interface.html#a9474669908e5674c651e34ade22acc32',1,'modulo_components::ComponentInterface']]], + ['_7elifecyclecomponent_2',['~LifecycleComponent',['../classmodulo__components_1_1_lifecycle_component.html#a534d2620117f9b2420418d4d6ca48a12',1,'modulo_components::LifecycleComponent']]], + ['_7emessagepairinterface_3',['~MessagePairInterface',['../classmodulo__core_1_1communication_1_1_message_pair_interface.html#a1b0177982d2972d701692b3c89705aae',1,'modulo_core::communication::MessagePairInterface']]], + ['_7epublisherhandler_4',['~PublisherHandler',['../classmodulo__core_1_1communication_1_1_publisher_handler.html#a9c2eafb61ee4d8e60a15e0af519be4d3',1,'modulo_core::communication::PublisherHandler']]], + ['_7epublisherinterface_5',['~PublisherInterface',['../classmodulo__core_1_1communication_1_1_publisher_interface.html#a1e670470b065bb1e7b1e5ef88eec5268',1,'modulo_core::communication::PublisherInterface']]], + ['_7esubscriptionhandler_6',['~SubscriptionHandler',['../classmodulo__core_1_1communication_1_1_subscription_handler.html#a3de45dc5da0ca5ae1de4a819851f4979',1,'modulo_core::communication::SubscriptionHandler']]], + ['_7esubscriptioninterface_7',['~SubscriptionInterface',['../classmodulo__core_1_1communication_1_1_subscription_interface.html#afd0d227d6533cafc7731f1fd52cb8d50',1,'modulo_core::communication::SubscriptionInterface']]] +]; diff --git a/versions/v4.2.2/search/mag.svg b/versions/v4.2.2/search/mag.svg new file mode 100644 index 000000000..ffb6cf0d0 --- /dev/null +++ b/versions/v4.2.2/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/versions/v4.2.2/search/mag_d.svg b/versions/v4.2.2/search/mag_d.svg new file mode 100644 index 000000000..4122773f9 --- /dev/null +++ b/versions/v4.2.2/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/versions/v4.2.2/search/mag_sel.svg b/versions/v4.2.2/search/mag_sel.svg new file mode 100644 index 000000000..553dba877 --- /dev/null +++ b/versions/v4.2.2/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/versions/v4.2.2/search/mag_seld.svg b/versions/v4.2.2/search/mag_seld.svg new file mode 100644 index 000000000..c906f84c8 --- /dev/null +++ b/versions/v4.2.2/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/versions/v4.2.2/search/namespaces_0.js b/versions/v4.2.2/search/namespaces_0.js new file mode 100644 index 000000000..11d926c09 --- /dev/null +++ b/versions/v4.2.2/search/namespaces_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['modulo_5fcomponents_0',['modulo_components',['../namespacemodulo__components.html',1,'']]], + ['modulo_5fcomponents_3a_3aexceptions_1',['exceptions',['../namespacemodulo__components_1_1exceptions.html',1,'modulo_components']]], + ['modulo_5fcomponents_3a_3autilities_2',['utilities',['../namespacemodulo__components_1_1utilities.html',1,'modulo_components']]], + ['modulo_5fcontrollers_3a_3autilities_3',['utilities',['../namespacemodulo__controllers_1_1utilities.html',1,'modulo_controllers']]], + ['modulo_5fcore_4',['modulo_core',['../namespacemodulo__core.html',1,'']]], + ['modulo_5fcore_3a_3acommunication_5',['communication',['../namespacemodulo__core_1_1communication.html',1,'modulo_core']]], + ['modulo_5fcore_3a_3aexceptions_6',['exceptions',['../namespacemodulo__core_1_1exceptions.html',1,'modulo_core']]], + ['modulo_5fcore_3a_3atranslators_7',['translators',['../namespacemodulo__core_1_1translators.html',1,'modulo_core']]] +]; diff --git a/versions/v4.2.2/search/pages_0.js b/versions/v4.2.2/search/pages_0.js new file mode 100644 index 000000000..14ca16021 --- /dev/null +++ b/versions/v4.2.2/search/pages_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['component_20interfaces_0',['Modulo Component Interfaces',['../md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html',1,'']]], + ['components_1',['Modulo Components',['../md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html',1,'']]], + ['controllers_2',['modulo-controllers',['../md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html',1,'']]], + ['core_3',['Modulo Core',['../md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html',1,'']]] +]; diff --git a/versions/v4.2.2/search/pages_1.js b/versions/v4.2.2/search/pages_1.js new file mode 100644 index 000000000..f5480c064 --- /dev/null +++ b/versions/v4.2.2/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['interfaces_0',['interfaces',['../md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html',1,'Modulo Component Interfaces'],['../md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html',1,'Modulo Interfaces']]] +]; diff --git a/versions/v4.2.2/search/pages_2.js b/versions/v4.2.2/search/pages_2.js new file mode 100644 index 000000000..c59e1bfe1 --- /dev/null +++ b/versions/v4.2.2/search/pages_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['modulo_0',['Modulo',['../index.html',1,'']]], + ['modulo_20component_20interfaces_1',['Modulo Component Interfaces',['../md__2github_2workspace_2source_2modulo__component__interfaces_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20components_2',['Modulo Components',['../md__2github_2workspace_2source_2modulo__components_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20controllers_3',['modulo-controllers',['../md__2github_2workspace_2source_2modulo__controllers_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20core_4',['Modulo Core',['../md__2github_2workspace_2source_2modulo__core_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20interfaces_5',['Modulo Interfaces',['../md__2github_2workspace_2source_2modulo__interfaces_2_r_e_a_d_m_e.html',1,'']]], + ['modulo_20utils_6',['Modulo Utils',['../md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html',1,'']]] +]; diff --git a/versions/v4.2.2/search/pages_3.js b/versions/v4.2.2/search/pages_3.js new file mode 100644 index 000000000..defe01412 --- /dev/null +++ b/versions/v4.2.2/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utils_0',['Modulo Utils',['../md__2github_2workspace_2source_2modulo__utils_2_r_e_a_d_m_e.html',1,'']]] +]; diff --git a/versions/v4.2.2/search/search.css b/versions/v4.2.2/search/search.css new file mode 100644 index 000000000..19f76f9d5 --- /dev/null +++ b/versions/v4.2.2/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/versions/v4.2.2/search/search.js b/versions/v4.2.2/search/search.js new file mode 100644 index 000000000..6fd40c677 --- /dev/null +++ b/versions/v4.2.2/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/splitbard.png b/versions/v4.2.2/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/structmodulo__components_1_1_component_service_response-members.html b/versions/v4.2.2/structmodulo__components_1_1_component_service_response-members.html new file mode 100644 index 000000000..2b921c770 --- /dev/null +++ b/versions/v4.2.2/structmodulo__components_1_1_component_service_response-members.html @@ -0,0 +1,90 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    modulo_components::ComponentServiceResponse Member List
    +
    + + + + + diff --git a/versions/v4.2.2/structmodulo__components_1_1_component_service_response.html b/versions/v4.2.2/structmodulo__components_1_1_component_service_response.html new file mode 100644 index 000000000..0028efc0e --- /dev/null +++ b/versions/v4.2.2/structmodulo__components_1_1_component_service_response.html @@ -0,0 +1,142 @@ + + + + + + + +Modulo: modulo_components::ComponentServiceResponse Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_components::ComponentServiceResponse Struct Reference
    +
    +
    + +

    Response structure to be returned by component services. + More...

    + +

    #include <ComponentInterface.hpp>

    + + + + + + +

    +Public Attributes

    bool success
     
    std::string message
     
    +

    Detailed Description

    +

    Response structure to be returned by component services.

    +

    The structure contains a bool success field and a string message field. This information is used to provide feedback on the service outcome to the service client.

    + +

    Definition at line 38 of file ComponentInterface.hpp.

    +

    Member Data Documentation

    + +

    ◆ message

    + +
    +
    + + + + +
    std::string modulo_components::ComponentServiceResponse::message
    +
    + +

    Definition at line 40 of file ComponentInterface.hpp.

    + +
    +
    + +

    ◆ success

    + +
    +
    + + + + +
    bool modulo_components::ComponentServiceResponse::success
    +
    + +

    Definition at line 39 of file ComponentInterface.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/versions/v4.2.2/structmodulo__controllers_1_1_controller_input-members.html b/versions/v4.2.2/structmodulo__controllers_1_1_controller_input-members.html new file mode 100644 index 000000000..21b1be3d5 --- /dev/null +++ b/versions/v4.2.2/structmodulo__controllers_1_1_controller_input-members.html @@ -0,0 +1,91 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    modulo_controllers::ControllerInput Member List
    +
    +
    + +

    This is the complete list of members for modulo_controllers::ControllerInput, including all inherited members.

    + + + + +
    buffer (defined in modulo_controllers::ControllerInput)modulo_controllers::ControllerInput
    ControllerInput(BufferVariant buffer_variant) (defined in modulo_controllers::ControllerInput)modulo_controllers::ControllerInputinline
    timestamp (defined in modulo_controllers::ControllerInput)modulo_controllers::ControllerInput
    + + + + diff --git a/versions/v4.2.2/structmodulo__controllers_1_1_controller_input.html b/versions/v4.2.2/structmodulo__controllers_1_1_controller_input.html new file mode 100644 index 000000000..54cdac7ae --- /dev/null +++ b/versions/v4.2.2/structmodulo__controllers_1_1_controller_input.html @@ -0,0 +1,176 @@ + + + + + + + +Modulo: modulo_controllers::ControllerInput Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_controllers::ControllerInput Struct Reference
    +
    +
    + +

    Input structure to save topic data in a realtime buffer and timestamps in one object. + More...

    + +

    #include <ControllerInterface.hpp>

    + + + + +

    +Public Member Functions

     ControllerInput (BufferVariant buffer_variant)
     
    + + + + + +

    +Public Attributes

    BufferVariant buffer
     
    std::chrono::time_point< std::chrono::steady_clock > timestamp
     
    +

    Detailed Description

    +

    Input structure to save topic data in a realtime buffer and timestamps in one object.

    + +

    Definition at line 77 of file ControllerInterface.hpp.

    +

    Constructor & Destructor Documentation

    + +

    ◆ ControllerInput()

    + +
    +
    + + + + + +
    + + + + + + + + +
    modulo_controllers::ControllerInput::ControllerInput (BufferVariant buffer_variant)
    +
    +inline
    +
    + +

    Definition at line 78 of file ControllerInterface.hpp.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ buffer

    + +
    +
    + + + + +
    BufferVariant modulo_controllers::ControllerInput::buffer
    +
    + +

    Definition at line 79 of file ControllerInterface.hpp.

    + +
    +
    + +

    ◆ timestamp

    + +
    +
    + + + + +
    std::chrono::time_point<std::chrono::steady_clock> modulo_controllers::ControllerInput::timestamp
    +
    + +

    Definition at line 80 of file ControllerInterface.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response-members.html b/versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response-members.html new file mode 100644 index 000000000..34e71ab1b --- /dev/null +++ b/versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response-members.html @@ -0,0 +1,90 @@ + + + + + + + +Modulo: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    modulo_controllers::ControllerServiceResponse Member List
    +
    + + + + + diff --git a/versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response.html b/versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response.html new file mode 100644 index 000000000..e2afb5834 --- /dev/null +++ b/versions/v4.2.2/structmodulo__controllers_1_1_controller_service_response.html @@ -0,0 +1,142 @@ + + + + + + + +Modulo: modulo_controllers::ControllerServiceResponse Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    Modulo 4.2.2 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    modulo_controllers::ControllerServiceResponse Struct Reference
    +
    +
    + +

    Response structure to be returned by controller services. + More...

    + +

    #include <ControllerInterface.hpp>

    + + + + + + +

    +Public Attributes

    bool success
     
    std::string message
     
    +

    Detailed Description

    +

    Response structure to be returned by controller services.

    +

    The structure contains a bool success field and a string message field. This information is used to provide feedback on the service outcome to the service client.

    + +

    Definition at line 89 of file ControllerInterface.hpp.

    +

    Member Data Documentation

    + +

    ◆ message

    + +
    +
    + + + + +
    std::string modulo_controllers::ControllerServiceResponse::message
    +
    + +

    Definition at line 91 of file ControllerInterface.hpp.

    + +
    +
    + +

    ◆ success

    + +
    +
    + + + + +
    bool modulo_controllers::ControllerServiceResponse::success
    +
    + +

    Definition at line 90 of file ControllerInterface.hpp.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/versions/v4.2.2/sync_off.png b/versions/v4.2.2/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/sync_on.png b/versions/v4.2.2/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/tab_a.png b/versions/v4.2.2/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/tab_ad.png b/versions/v4.2.2/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/tab_s.png b/versions/v4.2.2/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/tab_sd.png b/versions/v4.2.2/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/versions/v4.2.2/tabs.css b/versions/v4.2.2/tabs.css new file mode 100644 index 000000000..71c8a4704 --- /dev/null +++ b/versions/v4.2.2/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file