@@ -37,6 +37,7 @@ MiraFramework::MiraFramework(const rclcpp::NodeOptions & options)
3737
3838 // Redirect MIRA logger
3939 MIRA_LOGGER.registerSink (scitos2_core::SinkLogger (this ->get_logger ()));
40+ MIRA_LOGGER.setSeverityLevel (mira::SeverityLevel::DEBUG);
4041
4142 framework_ = std::make_unique<mira::Framework>(0 , nullptr );
4243}
@@ -52,7 +53,7 @@ MiraFramework::~MiraFramework()
5253 timer_.reset ();
5354}
5455
55- nav2_util::CallbackReturn MiraFramework::on_configure (const rclcpp_lifecycle::State &)
56+ nav2_util::CallbackReturn MiraFramework::on_configure (const rclcpp_lifecycle::State & state )
5657{
5758 auto node = shared_from_this ();
5859
@@ -72,6 +73,7 @@ nav2_util::CallbackReturn MiraFramework::on_configure(const rclcpp_lifecycle::St
7273 loaded_ = true ;
7374 } else {
7475 RCLCPP_ERROR (get_logger (), " Can't read parameter 'scitos_config'" );
76+ on_cleanup (state);
7577 return nav2_util::CallbackReturn::FAILURE;
7678 }
7779 } else {
@@ -119,6 +121,7 @@ nav2_util::CallbackReturn MiraFramework::on_configure(const rclcpp_lifecycle::St
119121 modules_.insert ({module_ids_[i], module });
120122 } catch (const pluginlib::PluginlibException & ex) {
121123 RCLCPP_FATAL (get_logger (), " Failed to create module. Exception: %s" , ex.what ());
124+ on_cleanup (state);
122125 return nav2_util::CallbackReturn::FAILURE;
123126 }
124127 }
@@ -128,8 +131,7 @@ nav2_util::CallbackReturn MiraFramework::on_configure(const rclcpp_lifecycle::St
128131 }
129132
130133 RCLCPP_INFO (
131- get_logger (),
132- " MIRA framework has %s modules available." , module_ids_concat_.c_str ());
134+ get_logger (), " MIRA framework has %s modules available." , module_ids_concat_.c_str ());
133135
134136 // Create a publisher for diagnostics
135137 diag_pub_ = this ->create_publisher <diagnostic_msgs::msg::DiagnosticArray>(
@@ -138,18 +140,30 @@ nav2_util::CallbackReturn MiraFramework::on_configure(const rclcpp_lifecycle::St
138140 return nav2_util::CallbackReturn::SUCCESS;
139141}
140142
141- nav2_util::CallbackReturn MiraFramework::on_activate (const rclcpp_lifecycle::State & /* state*/ )
143+ nav2_util::CallbackReturn MiraFramework::on_activate (const rclcpp_lifecycle::State & state)
142144{
143145 RCLCPP_INFO (get_logger (), " Activating" );
144146
145147 // Activate the modules
146148 ModuleMap::iterator it;
147149 for (it = modules_.begin (); it != modules_.end (); ++it) {
148- it->second ->activate ();
150+ try {
151+ it->second ->activate ();
152+ } catch (const std::exception & ex) {
153+ RCLCPP_ERROR (get_logger (), " Failed to activate module. Exception: %s" , ex.what ());
154+ on_deactivate (state);
155+ return nav2_util::CallbackReturn::FAILURE;
156+ }
149157 }
150158
151159 // Start the MIRA framework
152- framework_->start ();
160+ try {
161+ framework_->start ();
162+ } catch (const mira::Exception & ex) {
163+ RCLCPP_ERROR (get_logger (), " Failed to start MIRA framework. Exception: %s" , ex.what ());
164+ on_deactivate (state);
165+ return nav2_util::CallbackReturn::FAILURE;
166+ }
153167
154168 // Create a timer to publish diagnostics
155169 timer_ = this ->create_wall_timer (
@@ -192,7 +206,12 @@ nav2_util::CallbackReturn MiraFramework::on_cleanup(const rclcpp_lifecycle::Stat
192206 diag_pub_.reset ();
193207 timer_.reset ();
194208
195- framework_->requestTermination ();
209+ try {
210+ framework_->requestTermination ();
211+ } catch (const mira::Exception & ex) {
212+ RCLCPP_ERROR (get_logger (), " Failed to request termination. Exception: %s" , ex.what ());
213+ return nav2_util::CallbackReturn::FAILURE;
214+ }
196215
197216 return nav2_util::CallbackReturn::SUCCESS;
198217}
0 commit comments