@@ -53,27 +53,38 @@ class ModeInference
5353 virtual void update_param (const std::string &, rclcpp::Parameter &);
5454 virtual void update_target (const std::string &, StateAndMode);
5555
56- virtual StateAndMode get (const std::string & part);
56+ virtual StateAndMode get (const std::string & part) const ;
5757 virtual StateAndMode get_or_infer (const std::string & part);
5858
5959 virtual StateAndMode infer (const std::string & part);
60- virtual StateAndMode infer_system (const std::string & part);
6160 virtual StateAndMode infer_node (const std::string & part);
61+ virtual StateAndMode infer_system (const std::string & part);
62+
63+ /* *
64+ * Infers latest transitions of systems
65+ *
66+ * Returns map of last inferred transitions of systems into new states or
67+ * new modes. State transitions of nodes don't have to be inferred, as
68+ * nodes publish their state transitions. For nodes, we only need to infer
69+ * mode transitions.
70+ */
71+ virtual Deviation infer_transitions ();
6272
63- virtual StateAndMode get_target (const std::string & part);
64- virtual ModeConstPtr get_mode (const std::string & part, const std::string & mode);
65- virtual std::vector<std::string> get_available_modes (const std::string & part);
73+ virtual StateAndMode get_target (const std::string & part) const ;
74+ virtual ModeConstPtr get_mode (const std::string & part, const std::string & mode) const ;
75+ virtual std::vector<std::string> get_available_modes (const std::string & part) const ;
6676
6777 virtual ~ModeInference () = default ;
6878
6979protected:
70- virtual bool matching_parameters (const rclcpp::Parameter &, const rclcpp::Parameter &);
80+ virtual bool matching_parameters (const rclcpp::Parameter &, const rclcpp::Parameter &) const ;
7181 virtual void read_modes_from_model (const std::string & model_path);
7282 virtual void add_param_to_mode (ModeBasePtr, const rclcpp::Parameter &);
7383
7484private:
75- StatesMap nodes_, nodes_target_;
76- StatesMap systems_, systems_target_;
85+ StatesMap nodes_, nodes_target_, nodes_cache_;
86+ StatesMap systems_, systems_target_, systems_cache_;
87+
7788 std::map<std::string, ModeMap> modes_;
7889 ParametersMap parameters_;
7990
@@ -83,6 +94,8 @@ class ModeInference
8394 param_mutex_;
8495 mutable std::shared_timed_mutex
8596 nodes_target_mutex_, systems_target_mutex_;
97+ mutable std::shared_timed_mutex
98+ nodes_cache_mutex_, systems_cache_mutex_;
8699};
87100
88101} // namespace system_modes
0 commit comments