From 5f237d3f5313f1f4ce094ed95bc732a592768ea9 Mon Sep 17 00:00:00 2001
From: Matthew Hansen <matthew.k.hansen@intel.com>
Date: Thu, 6 Jun 2019 11:08:19 -0700
Subject: [PATCH] Add try/catch around loading critics

---
 .../dwb_core/src/dwb_local_planner.cpp            | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/nav2_dwb_controller/dwb_core/src/dwb_local_planner.cpp b/nav2_dwb_controller/dwb_core/src/dwb_local_planner.cpp
index c4a83bd5..5deecc79 100644
--- a/nav2_dwb_controller/dwb_core/src/dwb_local_planner.cpp
+++ b/nav2_dwb_controller/dwb_core/src/dwb_local_planner.cpp
@@ -94,7 +94,12 @@ DWBLocalPlanner::on_configure(const rclcpp_lifecycle::State & state)
   traj_generator_->initialize(node_);
   goal_checker_->initialize(node_);
 
-  loadCritics();
+  try {
+    loadCritics();
+  } catch (const std::exception & e) {
+    RCLCPP_ERROR(node_->get_logger(), "Couldn't load critics! Caught exception: %s", e.what());
+    return nav2_util::CallbackReturn::FAILURE;
+  }
 
   return nav2_util::CallbackReturn::SUCCESS;
 }
@@ -171,7 +176,13 @@ DWBLocalPlanner::loadCritics()
     RCLCPP_INFO(node_->get_logger(),
       "Using critic \"%s\" (%s)", plugin_name.c_str(), plugin_class.c_str());
     critics_.push_back(plugin);
-    plugin->initialize(node_, plugin_name, costmap_ros_);
+    try {
+      plugin->initialize(node_, plugin_name, costmap_ros_);
+    } catch (const std::exception & e) {
+      RCLCPP_ERROR(node_->get_logger(), "Couldn't initialize critic plugin!");
+      throw e;
+    }
+    RCLCPP_INFO(node_->get_logger(), "Critic plugin initialized");
   }
 }
 
-- 
GitLab