diff --git a/rviz2/src/main.cpp b/rviz2/src/main.cpp index 21ac3e09d..9d5f45777 100644 --- a/rviz2/src/main.cpp +++ b/rviz2/src/main.cpp @@ -86,7 +86,11 @@ int main(int argc, char ** argv) ); rviz_common::VisualizerApp vapp( - std::make_unique()); + std::make_unique( + // In custom setups, this is the injection point for ROS node options + rclcpp::NodeOptions() + ) + ); vapp.setApp(&qapp); if (vapp.init(argc, argv)) { return qapp.exec(); diff --git a/rviz_common/include/rviz_common/ros_integration/ros_client_abstraction.hpp b/rviz_common/include/rviz_common/ros_integration/ros_client_abstraction.hpp index e16d1960d..0cb768c76 100644 --- a/rviz_common/include/rviz_common/ros_integration/ros_client_abstraction.hpp +++ b/rviz_common/include/rviz_common/ros_integration/ros_client_abstraction.hpp @@ -48,7 +48,7 @@ class RosClientAbstraction : public RosClientAbstractionIface { public: RVIZ_COMMON_PUBLIC - RosClientAbstraction(); + explicit RosClientAbstraction(const rclcpp::NodeOptions & options = rclcpp::NodeOptions()); // TODO(wjwwood): Figure out which exceptions can be raised and document them // consider consolidating all possible exceptions to a few @@ -93,6 +93,7 @@ class RosClientAbstraction : public RosClientAbstractionIface private: std::shared_ptr rviz_ros_node_; + rclcpp::NodeOptions options_; }; } // namespace ros_integration diff --git a/rviz_common/include/rviz_common/ros_integration/ros_node_abstraction.hpp b/rviz_common/include/rviz_common/ros_integration/ros_node_abstraction.hpp index bede9d6c6..56f34f906 100644 --- a/rviz_common/include/rviz_common/ros_integration/ros_node_abstraction.hpp +++ b/rviz_common/include/rviz_common/ros_integration/ros_node_abstraction.hpp @@ -62,7 +62,9 @@ class RosNodeAbstraction : public RosNodeAbstractionIface * \param node_name name of the node to create */ RVIZ_COMMON_PUBLIC - explicit RosNodeAbstraction(const std::string & node_name); + explicit RosNodeAbstraction( + const std::string & node_name, + const rclcpp::NodeOptions & options = rclcpp::NodeOptions()); /// Returns the name of the ros node /** diff --git a/rviz_common/src/rviz_common/ros_integration/ros_client_abstraction.cpp b/rviz_common/src/rviz_common/ros_integration/ros_client_abstraction.cpp index 378f72afa..f37cdd560 100644 --- a/rviz_common/src/rviz_common/ros_integration/ros_client_abstraction.cpp +++ b/rviz_common/src/rviz_common/ros_integration/ros_client_abstraction.cpp @@ -44,7 +44,8 @@ namespace rviz_common namespace ros_integration { -RosClientAbstraction::RosClientAbstraction() +RosClientAbstraction::RosClientAbstraction(const rclcpp::NodeOptions & options) +: options_(options) {} RosNodeAbstractionIface::WeakPtr @@ -63,7 +64,7 @@ RosClientAbstraction::init(int argc, char ** argv, const std::string & name, boo // TODO(wjwwood): make a better exception type rather than using std::runtime_error. throw std::runtime_error("Node with name " + final_name + " already exists."); } - rviz_ros_node_ = std::make_shared(final_name); + rviz_ros_node_ = std::make_shared(final_name, options_); return rviz_ros_node_; } diff --git a/rviz_common/src/rviz_common/ros_integration/ros_node_abstraction.cpp b/rviz_common/src/rviz_common/ros_integration/ros_node_abstraction.cpp index ebf530b9e..f9997d09e 100644 --- a/rviz_common/src/rviz_common/ros_integration/ros_node_abstraction.cpp +++ b/rviz_common/src/rviz_common/ros_integration/ros_node_abstraction.cpp @@ -44,8 +44,10 @@ namespace rviz_common namespace ros_integration { -RosNodeAbstraction::RosNodeAbstraction(const std::string & node_name) -: raw_node_(rclcpp::Node::make_shared(node_name)) +RosNodeAbstraction::RosNodeAbstraction( + const std::string & node_name, + const rclcpp::NodeOptions & options) +: raw_node_(rclcpp::Node::make_shared(node_name, options)) {} std::string