Skip to content

Commit dfe3129

Browse files
committed
Improve exception handling
Signed-off-by: Alberto Tudela <[email protected]>
1 parent 481d7d5 commit dfe3129

File tree

6 files changed

+62
-13
lines changed

6 files changed

+62
-13
lines changed

scitos2_mira/src/mira_framework.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

scitos2_modules/src/charger.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,13 @@ void Charger::activate()
7272
logger_, "Activating module : %s of type scitos2_module::Charger", plugin_name_.c_str());
7373
battery_pub_->on_activate();
7474
charger_pub_->on_activate();
75-
authority_->start();
75+
76+
try {
77+
authority_->start();
78+
} catch (const mira::Exception & ex) {
79+
RCLCPP_ERROR(logger_, "Failed to start scitos2_module::Charger. Exception: %s", ex.what());
80+
return;
81+
}
7682
}
7783

7884
void Charger::deactivate()

scitos2_modules/src/display.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,13 @@ void Display::activate()
107107
RCLCPP_INFO(
108108
logger_, "Activating module : %s of type scitos2_module::Display", plugin_name_.c_str());
109109
display_data_pub_->on_activate();
110-
authority_->start();
110+
111+
try {
112+
authority_->start();
113+
} catch (const mira::Exception & ex) {
114+
RCLCPP_ERROR(logger_, "Failed to start scitos2_module::Display. Exception: %s", ex.what());
115+
return;
116+
}
111117
}
112118

113119
void Display::deactivate()

scitos2_modules/src/drive.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,14 @@ void Drive::activate()
227227
mileage_pub_->on_activate();
228228
odometry_pub_->on_activate();
229229
rfid_pub_->on_activate();
230-
authority_->start();
231-
is_active_ = true;
230+
231+
try {
232+
authority_->start();
233+
is_active_ = true;
234+
} catch (const mira::Exception & ex) {
235+
RCLCPP_ERROR(logger_, "Failed to start scitos2_module::Drive. Exception: %s", ex.what());
236+
return;
237+
}
232238
}
233239

234240
void Drive::deactivate()

scitos2_modules/src/ebc.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,13 @@ void EBC::activate()
274274
{
275275
RCLCPP_INFO(
276276
logger_, "Activating module : %s of type scitos2_module::EBC", plugin_name_.c_str());
277-
authority_->start();
277+
278+
try {
279+
authority_->start();
280+
} catch (const mira::Exception & ex) {
281+
RCLCPP_ERROR(logger_, "Failed to start scitos2_module::EBC. Exception: %s", ex.what());
282+
return;
283+
}
278284
}
279285

280286
void EBC::deactivate()

scitos2_modules/src/imu.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,13 @@ void IMU::activate()
8383
RCLCPP_INFO(
8484
logger_, "Activating module : %s of type scitos2_module::IMU", plugin_name_.c_str());
8585
imu_pub_->on_activate();
86-
authority_->start();
86+
87+
try {
88+
authority_->start();
89+
} catch (const mira::Exception & ex) {
90+
RCLCPP_ERROR(logger_, "Failed to start scitos2_module::IMU. Exception: %s", ex.what());
91+
return;
92+
}
8793
}
8894

8995
void IMU::deactivate()

0 commit comments

Comments
 (0)