diff --git a/nav2_util/include/nav2_util/clear_entirely_costmap_service_client.hpp b/nav2_util/include/nav2_util/clear_entirely_costmap_service_client.hpp index 570feb79c865074341293bc54296b401f4787336..8b401e8a595df9158724868d339484a33db831b3 100644 --- a/nav2_util/include/nav2_util/clear_entirely_costmap_service_client.hpp +++ b/nav2_util/include/nav2_util/clear_entirely_costmap_service_client.hpp @@ -22,11 +22,17 @@ namespace nav2_util { - +/** + * @class nav2_util::ClearEntirelyCostmapServiceClient + * @brief A service client to clear costmaps entirely + */ class ClearEntirelyCostmapServiceClient : public nav2_util::ServiceClient<nav2_msgs::srv::ClearEntireCostmap> { public: + /** +* @brief A constructor for nav2_util::ClearEntirelyCostmapServiceClient + */ explicit ClearEntirelyCostmapServiceClient(const std::string & service_name) : nav2_util::ServiceClient<nav2_msgs::srv::ClearEntireCostmap>(service_name) { diff --git a/nav2_util/include/nav2_util/costmap.hpp b/nav2_util/include/nav2_util/costmap.hpp index c811007e4cedd981b80cdedd7e67af05fbe86ad7..0d868df6e033998f56cd60a188c7cdd3ba8c99bd 100644 --- a/nav2_util/include/nav2_util/costmap.hpp +++ b/nav2_util/include/nav2_util/costmap.hpp @@ -36,28 +36,65 @@ enum class TestCostmap maze2 }; -// Class for a single layered costmap initialized from an -// occupancy grid representing the map. +/** + * @class nav2_util::Costmap + * @brief Class for a single layered costmap initialized from an + * occupancy grid representing the map. + */ class Costmap { public: typedef uint8_t CostValue; + /** + * @brief A constructor for nav2_util::Costmap + * @param node Ptr to a node + * @param trinary_costmap Whether the costmap should be trinary + * @param track_unknown_space Whether to track unknown space in costmap + * @param lethal_threshold The lethal space cost threshold to use + * @param unknown_cost_value Internal costmap cell value for unknown space + */ Costmap( rclcpp::Node * node, bool trinary_costmap = true, bool track_unknown_space = true, int lethal_threshold = 100, int unknown_cost_value = -1); Costmap() = delete; ~Costmap(); + /** + * @brief Set the static map of this costmap + * @param occupancy_grid Occupancy grid to populate this costmap with + */ void set_static_map(const nav_msgs::msg::OccupancyGrid & occupancy_grid); + /** + * @brief Set the test costmap type of this costmap + * @param testCostmapType Type of stored costmap to use + */ void set_test_costmap(const TestCostmap & testCostmapType); + /** + * @brief Get a costmap message from this object + * @param specifications Parameters of costmap + * @return Costmap msg of this costmap + */ nav2_msgs::msg::Costmap get_costmap(const nav2_msgs::msg::CostmapMetaData & specifications); + /** + * @brief Get a metadata message from this object + * @return Costmap metadata of this costmap + */ nav2_msgs::msg::CostmapMetaData get_properties() {return costmap_properties_;} + /** + * @brief Get whether some coordinates are free + * @return bool if free + */ bool is_free(const unsigned int x_coordinate, const unsigned int y_coordinate) const; + + /** + * @brief Get whether some index in the costmap is free + * @return bool if free + */ bool is_free(const unsigned int index) const; // Mapping for often used cost values @@ -68,8 +105,16 @@ public: static const CostValue free_space; private: + /** + * @brief Get data from the test + * @return data + */ std::vector<uint8_t> get_test_data(const TestCostmap configuration); + /** + * @brief Get the interpreted value in the costmap + * @return uint value + */ uint8_t interpret_value(const int8_t value) const; // Costmap isn't itself a node diff --git a/nav2_util/include/nav2_util/geometry_utils.hpp b/nav2_util/include/nav2_util/geometry_utils.hpp index 52bd5ebb417edfb743cb2d86929a938a9dd05514..f4bef5b1405c9cec5fc873c76be917981410d152 100644 --- a/nav2_util/include/nav2_util/geometry_utils.hpp +++ b/nav2_util/include/nav2_util/geometry_utils.hpp @@ -28,6 +28,11 @@ namespace nav2_util namespace geometry_utils { +/** + * @brief Get a geometry_msgs Quaternion from a yaw angle + * @param angle Yaw angle to generate a quaternion from + * @return geometry_msgs Quaternion + */ inline geometry_msgs::msg::Quaternion orientationAroundZAxis(double angle) { tf2::Quaternion q; @@ -35,6 +40,12 @@ inline geometry_msgs::msg::Quaternion orientationAroundZAxis(double angle) return tf2::toMsg(q); } +/** + * @brief Get the L2 distance between 2 geometry_msgs::Points + * @param pos1 First point + * @param pos1 Second point + * @param double L2 distance + */ inline double euclidean_distance( const geometry_msgs::msg::Point & pos1, const geometry_msgs::msg::Point & pos2) @@ -45,6 +56,12 @@ inline double euclidean_distance( return std::sqrt(dx * dx + dy * dy + dz * dz); } +/** + * @brief Get the L2 distance between 2 geometry_msgs::Poses + * @param pos1 First pose + * @param pos1 Second pose + * @param double L2 distance + */ inline double euclidean_distance( const geometry_msgs::msg::Pose & pos1, const geometry_msgs::msg::Pose & pos2) @@ -55,6 +72,12 @@ inline double euclidean_distance( return std::sqrt(dx * dx + dy * dy + dz * dz); } +/** + * @brief Get the L2 distance between 2 geometry_msgs::PoseStamped + * @param pos1 First pose + * @param pos1 Second pose + * @param double L2 distance + */ inline double euclidean_distance( const geometry_msgs::msg::PoseStamped & pos1, const geometry_msgs::msg::PoseStamped & pos2) diff --git a/nav2_util/include/nav2_util/lifecycle_node.hpp b/nav2_util/include/nav2_util/lifecycle_node.hpp index 9180133817f708cdf9495363cae288720334a9c6..3a76786f9b461be22e23944c5fc507ce3cf10bba 100644 --- a/nav2_util/include/nav2_util/lifecycle_node.hpp +++ b/nav2_util/include/nav2_util/lifecycle_node.hpp @@ -35,9 +35,21 @@ using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface // to interface to classes, such as MessageFilter and TransformListener, that don't yet // support lifecycle nodes. Once we get the fixes into ROS2, this class will be removed. +/** + * @class nav2_util::LifecycleNode + * @brief A lifecycle node wrapper to enable common Nav2 needs such as background node threads + * and manipulating parameters + */ class LifecycleNode : public rclcpp_lifecycle::LifecycleNode { public: + /** + * @brief A lifecycle node constructor + * @param node_name Name for the node + * @param namespace Namespace for the node, if any + * @param use_rclcpp_node Whether to create an internal client node + * @param options Node options + */ LifecycleNode( const std::string & node_name, const std::string & namespace_ = "", @@ -59,7 +71,14 @@ public: int step; } integer_range; - // Declare a parameter that has no integer or floating point range constraints + /** + * @brief Declare a parameter that has no integer or floating point range constraints + * @param node_name Name of parameter + * @param default_value Default node value to add + * @param description Node description + * @param additional_constraints Any additional constraints on the parameters to list + * @param read_only Whether this param should be considered read only + */ void add_parameter( const std::string & name, const rclcpp::ParameterValue & default_value, const std::string & description = "", const std::string & additional_constraints = "", @@ -75,7 +94,15 @@ public: declare_parameter(descriptor.name, default_value, descriptor); } - // Declare a parameter that has a floating point range constraint + /** + * @brief Declare a parameter that has a floating point range constraint + * @param node_name Name of parameter + * @param default_value Default node value to add + * @param fp_range floating point range + * @param description Node description + * @param additional_constraints Any additional constraints on the parameters to list + * @param read_only Whether this param should be considered read only + */ void add_parameter( const std::string & name, const rclcpp::ParameterValue & default_value, const floating_point_range fp_range, @@ -96,7 +123,15 @@ public: declare_parameter(descriptor.name, default_value, descriptor); } - // Declare a parameter that has an integer range constraint + /** + * @brief Declare a parameter that has an integer range constraint + * @param node_name Name of parameter + * @param default_value Default node value to add + * @param integer_range Integer range + * @param description Node description + * @param additional_constraints Any additional constraints on the parameters to list + * @param read_only Whether this param should be considered read only + */ void add_parameter( const std::string & name, const rclcpp::ParameterValue & default_value, const integer_range int_range, @@ -117,12 +152,21 @@ public: declare_parameter(descriptor.name, default_value, descriptor); } + /** + * @brief Get a shared pointer of this + */ std::shared_ptr<nav2_util::LifecycleNode> shared_from_this() { return std::static_pointer_cast<nav2_util::LifecycleNode>( rclcpp_lifecycle::LifecycleNode::shared_from_this()); } + /** + * @brief Abstracted on_error state transition callback, since unimplemented as of 2020 + * in the managed ROS2 node state machine + * @param state State prior to error transition + * @return Return type for success or failed transition to error state + */ nav2_util::CallbackReturn on_error(const rclcpp_lifecycle::State & /*state*/) { RCLCPP_FATAL( @@ -131,11 +175,20 @@ public: return nav2_util::CallbackReturn::SUCCESS; } - // bond connection to lifecycle manager + /** + * @brief Create bond connection to lifecycle manager + */ void createBond(); + + /** + * @brief Destroy bond connection to lifecycle manager + */ void destroyBond(); protected: + /** + * @brief Print notifications for lifecycle node + */ void print_lifecycle_node_notification(); // Whether or not to create a local rclcpp::Node which can be used for ROS2 classes that don't diff --git a/nav2_util/include/nav2_util/line_iterator.hpp b/nav2_util/include/nav2_util/line_iterator.hpp index a9ff0c1f435cddd4d93f541ae9e7a5f094e22e25..82ea12425ead929884be3bac974dca5dcc6742fd 100644 --- a/nav2_util/include/nav2_util/line_iterator.hpp +++ b/nav2_util/include/nav2_util/line_iterator.hpp @@ -38,10 +38,21 @@ namespace nav2_util { -/** An iterator implementing Bresenham Ray-Tracing. */ + +/** + * @class nav2_util::LineIterator + * @brief An iterator implementing Bresenham Ray-Tracing. + */ class LineIterator { public: + /** + * @brief A constructor for LineIterator + * @param x0 Starting x + * @param y0 Starting y + * @param x1 Ending x + * @param y1 Ending y + */ LineIterator(int x0, int y0, int x1, int y1) : x0_(x0), y0_(y0), @@ -86,11 +97,18 @@ public: } } + /** + * @brief If the iterator is valid + * @return bool If valid + */ bool isValid() const { return curpixel_ <= numpixels_; } + /** + * @brief Advance iteration along the line + */ void advance() { num_ += numadd_; // Increase the numerator by the top of the fraction @@ -105,28 +123,55 @@ public: curpixel_++; } + /** + * @brief Get current X value + * @return X + */ int getX() const { return x_; } + + /** + * @brief Get current Y value + * @return Y + */ int getY() const { return y_; } + /** + * @brief Get initial X value + * @return X + */ int getX0() const { return x0_; } + + /** + * @brief Get initial Y value + * @return Y + */ int getY0() const { return y0_; } + /** + * @brief Get terminal X value + * @return X + */ int getX1() const { return x1_; } + + /** + * @brief Get terminal Y value + * @return Y + */ int getY1() const { return y1_; diff --git a/nav2_util/include/nav2_util/node_thread.hpp b/nav2_util/include/nav2_util/node_thread.hpp index 97ab46cee6a97033425e6c37dedf234ec6e7d886..634b4acd5bc1915997586986b20bd58ab6afb337 100644 --- a/nav2_util/include/nav2_util/node_thread.hpp +++ b/nav2_util/include/nav2_util/node_thread.hpp @@ -21,17 +21,31 @@ namespace nav2_util { - +/** + * @class nav2_util::NodeThread + * @brief A background thread to process node callbacks + */ class NodeThread { public: + /** + * @brief A background thread to process node callbacks constructor + * @param node_base Interface to Node to spin in thread + */ explicit NodeThread(rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base); + /** + * @brief A background thread to process node callbacks constructor + * @param node Node pointer to spin in thread + */ template<typename NodeT> explicit NodeThread(NodeT node) : NodeThread(node->get_node_base_interface()) {} + /** + * @brief A destructor + */ ~NodeThread(); protected: diff --git a/nav2_util/include/nav2_util/odometry_utils.hpp b/nav2_util/include/nav2_util/odometry_utils.hpp index f75d01ebefbf1b0c1f23a9c0a1df306ea8a21d3b..e6f7b7ede93ef5befcf4bb68ab6ac4b73f07ee54 100644 --- a/nav2_util/include/nav2_util/odometry_utils.hpp +++ b/nav2_util/include/nav2_util/odometry_utils.hpp @@ -52,11 +52,28 @@ public: double filter_duration = 0.3, const std::string & odom_topic = "odom"); + /** + * @brief Get twist msg from smoother + * @return twist Twist msg + */ inline geometry_msgs::msg::Twist getTwist() {return vel_smooth_.twist;} + + /** + * @brief Get twist stamped msg from smoother + * @return twist TwistStamped msg + */ inline geometry_msgs::msg::TwistStamped getTwistStamped() {return vel_smooth_;} protected: + /** + * @brief Callback of odometry subscriber to process + * @param msg Odometry msg to smooth + */ void odomCallback(nav_msgs::msg::Odometry::SharedPtr msg); + + /** + * @brief Update internal state of the smoother after getting new data + */ void updateState(); rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr odom_sub_; diff --git a/nav2_util/include/nav2_util/robot_utils.hpp b/nav2_util/include/nav2_util/robot_utils.hpp index 7dafe77e718eb0af49f955727f713e3fa72ac7fb..22f3f7f160b37d12ab7dfe09354343c9aedc6e71 100644 --- a/nav2_util/include/nav2_util/robot_utils.hpp +++ b/nav2_util/include/nav2_util/robot_utils.hpp @@ -30,12 +30,29 @@ namespace nav2_util { - +/** +* @brief get the current pose of the robot +* @param global_pose Pose to transform +* @param tf_buffer TF buffer to use for the transformation +* @param global_frame Frame to transform into +* @param robot_frame Frame to transform from +* @param transform_timeout TF Timeout to use for transformation +* @return bool Whether it could be transformed successfully +*/ bool getCurrentPose( geometry_msgs::msg::PoseStamped & global_pose, tf2_ros::Buffer & tf_buffer, const std::string global_frame = "map", const std::string robot_frame = "base_link", const double transform_timeout = 0.1); +/** +* @brief get an arbitrary pose in a target frame +* @param input_pose Pose to transform +* @param transformed_pose Output transformation +* @param tf_buffer TF buffer to use for the transformation +* @param target_frame Frame to transform into +* @param transform_timeout TF Timeout to use for transformation +* @return bool Whether it could be transformed successfully +*/ bool transformPoseInTargetFrame( const geometry_msgs::msg::PoseStamped & input_pose, geometry_msgs::msg::PoseStamped & transformed_pose, diff --git a/nav2_util/include/nav2_util/service_client.hpp b/nav2_util/include/nav2_util/service_client.hpp index 65ae36e9517aad832f02397edb924a956364c7ea..021eb61c4ea01e151593ccc4efe5a878e4fb4f2b 100644 --- a/nav2_util/include/nav2_util/service_client.hpp +++ b/nav2_util/include/nav2_util/service_client.hpp @@ -22,10 +22,19 @@ namespace nav2_util { +/** + * @class nav2_util::ServiceClient + * @brief A simple wrapper on ROS2 services for invoke() and block-style calling + */ template<class ServiceT> class ServiceClient { public: + /** + * @brief A constructor + * @param service_name name of the service to call + * @param provided_node Node to create the service client off of + */ explicit ServiceClient( const std::string & service_name, const rclcpp::Node::SharedPtr & provided_node) @@ -44,6 +53,12 @@ public: using RequestType = typename ServiceT::Request; using ResponseType = typename ServiceT::Response; + /** + * @brief Invoke the service and block until completed or timed out + * @param request The request object to call the service using + * @param timeout Maximum timeout to wait for, default infinite + * @return Response A pointer to the service response from the request + */ typename ResponseType::SharedPtr invoke( typename RequestType::SharedPtr & request, const std::chrono::nanoseconds timeout = std::chrono::nanoseconds(-1)) @@ -72,6 +87,12 @@ public: return future_result.get(); } + /** + * @brief Invoke the service and block until completed + * @param request The request object to call the service using + * @param Response A pointer to the service response from the request + * @return bool Whether it was successfully called + */ bool invoke( typename RequestType::SharedPtr & request, typename ResponseType::SharedPtr & response) @@ -101,6 +122,10 @@ public: return response.get(); } + /** + * @brief Block until a service is available + * @param timeout Maximum timeout to wait for, default infinite + */ void wait_for_service(const std::chrono::nanoseconds timeout = std::chrono::nanoseconds::max()) { auto sleep_dur = std::chrono::milliseconds(10); diff --git a/nav2_util/include/nav2_util/simple_action_server.hpp b/nav2_util/include/nav2_util/simple_action_server.hpp index f0c01b71acbfbbcd24605f5160408ad84d39bb52..4cd23dcb42775f24e4a14aa435b14ac5e385503c 100644 --- a/nav2_util/include/nav2_util/simple_action_server.hpp +++ b/nav2_util/include/nav2_util/simple_action_server.hpp @@ -28,12 +28,23 @@ namespace nav2_util { +/** + * @class nav2_util::SimpleActionServer + * @brief An action server wrapper to make applications simpler using Actions + */ template<typename ActionT, typename nodeT = rclcpp::Node> class SimpleActionServer { public: typedef std::function<void ()> ExecuteCallback; + /** + * @brief An constructor for SimpleActionServer + * @param node Ptr to node to make actions + * @param action_name Name of the action to call + * @param execute_callback Execution callback function of Action + * @param server_timeout Timeout to to react to stop or preemption requests + */ explicit SimpleActionServer( typename nodeT::SharedPtr node, const std::string & action_name, @@ -47,6 +58,13 @@ public: action_name, execute_callback, server_timeout) {} + /** + * @brief An constructor for SimpleActionServer + * @param <node interfaces> Abstract node interfaces to make actions + * @param action_name Name of the action to call + * @param execute_callback Execution callback function of Action + * @param server_timeout Timeout to to react to stop or preemption requests + */ explicit SimpleActionServer( rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base_interface, rclcpp::node_interfaces::NodeClockInterface::SharedPtr node_clock_interface, @@ -75,6 +93,12 @@ public: std::bind(&SimpleActionServer::handle_accepted, this, _1)); } + /** + * @brief handle the goal requested: accept or reject. This implementation always accepts. + * @param uuid Goal ID + * @param Goal A shared pointer to the specific goal + * @return GoalResponse response of the goal processed + */ rclcpp_action::GoalResponse handle_goal( const rclcpp_action::GoalUUID & /*uuid*/, std::shared_ptr<const typename ActionT::Goal>/*goal*/) @@ -89,6 +113,12 @@ public: return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE; } + /** + * @brief Accepts cancellation requests of action server. + * @param uuid Goal ID + * @param Goal A server goal handle to cancel + * @return CancelResponse response of the goal cancelled + */ rclcpp_action::CancelResponse handle_cancel( const std::shared_ptr<rclcpp_action::ServerGoalHandle<ActionT>>/*handle*/) { @@ -97,6 +127,10 @@ public: return rclcpp_action::CancelResponse::ACCEPT; } + /** + * @brief Handles accepted goals and adds to preempted queue to switch to + * @param Goal A server goal handle to cancel + */ void handle_accepted(const std::shared_ptr<rclcpp_action::ServerGoalHandle<ActionT>> handle) { std::lock_guard<std::recursive_mutex> lock(update_mutex_); @@ -129,6 +163,9 @@ public: } } + /** + * @brief Computed background work and processes stop requests + */ void work() { while (rclcpp::ok() && !stop_execution_ && is_active(current_handle_)) { @@ -168,6 +205,9 @@ public: debug_msg("Worker thread done."); } + /** + * @brief Active action server + */ void activate() { std::lock_guard<std::recursive_mutex> lock(update_mutex_); @@ -175,6 +215,9 @@ public: stop_execution_ = false; } + /** + * @brief Deactive action server + */ void deactivate() { debug_msg("Deactivating..."); @@ -208,6 +251,10 @@ public: debug_msg("Deactivation completed."); } + /** + * @brief Whether the action server is munching on a goal + * @return bool If its running or not + */ bool is_running() { return execution_future_.valid() && @@ -215,18 +262,30 @@ public: std::future_status::timeout); } + /** + * @brief Whether the action server is active or not + * @return bool If its active or not + */ bool is_server_active() { std::lock_guard<std::recursive_mutex> lock(update_mutex_); return server_active_; } + /** + * @brief Whether the action server has been asked to be preempted with a new goal + * @return bool If there's a preemption request or not + */ bool is_preempt_requested() const { std::lock_guard<std::recursive_mutex> lock(update_mutex_); return preempt_requested_; } + /** + * @brief Accept pending goals + * @return Goal Ptr to the goal that's going to be accepted + */ const std::shared_ptr<const typename ActionT::Goal> accept_pending_goal() { std::lock_guard<std::recursive_mutex> lock(update_mutex_); @@ -250,6 +309,10 @@ public: return current_handle_->get_goal(); } + /** + * @brief Get the current goal object + * @return Goal Ptr to the goal that's being processed currently + */ const std::shared_ptr<const typename ActionT::Goal> get_current_goal() const { std::lock_guard<std::recursive_mutex> lock(update_mutex_); @@ -262,6 +325,10 @@ public: return current_handle_->get_goal(); } + /** + * @brief Whether or not a cancel command has come in + * @return bool Whether a cancel command has been requested or not + */ bool is_cancel_requested() const { std::lock_guard<std::recursive_mutex> lock(update_mutex_); @@ -280,6 +347,10 @@ public: return current_handle_->is_canceling(); } + /** + * @brief Terminate all pending and active actions + * @param result A result object to send to the terminated actions + */ void terminate_all( typename std::shared_ptr<typename ActionT::Result> result = std::make_shared<typename ActionT::Result>()) @@ -290,6 +361,10 @@ public: preempt_requested_ = false; } + /** + * @brief Terminate the active action + * @param result A result object to send to the terminated action + */ void terminate_current( typename std::shared_ptr<typename ActionT::Result> result = std::make_shared<typename ActionT::Result>()) @@ -298,6 +373,10 @@ public: terminate(current_handle_, result); } + /** + * @brief Return success of the active action + * @param result A result object to send to the terminated actions + */ void succeeded_current( typename std::shared_ptr<typename ActionT::Result> result = std::make_shared<typename ActionT::Result>()) @@ -311,6 +390,10 @@ public: } } + /** + * @brief Publish feedback to the action server clients + * @param feedback A feedback object to send to the clients + */ void publish_feedback(typename std::shared_ptr<typename ActionT::Feedback> feedback) { if (!is_active(current_handle_)) { @@ -343,17 +426,30 @@ protected: typename rclcpp_action::Server<ActionT>::SharedPtr action_server_; + /** + * @brief Generate an empty result object for an action type + */ constexpr auto empty_result() const { return std::make_shared<typename ActionT::Result>(); } + /** + * @brief Whether a given goal handle is currently active + * @param handle Goal handle to check + * @return Whether this goal handle is active + */ constexpr bool is_active( const std::shared_ptr<rclcpp_action::ServerGoalHandle<ActionT>> handle) const { return handle != nullptr && handle->is_active(); } + /** + * @brief Terminate a particular action with a result + * @param handle goal handle to terminate + * @param the Results object to terminate the action with + */ void terminate( std::shared_ptr<rclcpp_action::ServerGoalHandle<ActionT>> handle, typename std::shared_ptr<typename ActionT::Result> result = @@ -373,6 +469,9 @@ protected: } } + /** + * @brief Info logging + */ void info_msg(const std::string & msg) const { RCLCPP_INFO( @@ -380,6 +479,9 @@ protected: "[%s] [ActionServer] %s", action_name_.c_str(), msg.c_str()); } + /** + * @brief Debug logging + */ void debug_msg(const std::string & msg) const { RCLCPP_DEBUG( @@ -387,6 +489,9 @@ protected: "[%s] [ActionServer] %s", action_name_.c_str(), msg.c_str()); } + /** + * @brief Error logging + */ void error_msg(const std::string & msg) const { RCLCPP_ERROR( @@ -394,6 +499,9 @@ protected: "[%s] [ActionServer] %s", action_name_.c_str(), msg.c_str()); } + /** + * @brief Warn logging + */ void warn_msg(const std::string & msg) const { RCLCPP_WARN( diff --git a/nav2_util/include/nav2_util/string_utils.hpp b/nav2_util/include/nav2_util/string_utils.hpp index 1f3478a68d04b2fc48388a38834c8856907e381b..06d93b82a2651c7e1532f5bacdad731872aa21eb 100644 --- a/nav2_util/include/nav2_util/string_utils.hpp +++ b/nav2_util/include/nav2_util/string_utils.hpp @@ -23,9 +23,20 @@ namespace nav2_util typedef std::vector<std::string> Tokens; +/* + * @brief Remove leading slash from a topic name + * @param in String of topic in + * @return String out without slash +*/ std::string strip_leading_slash(const std::string & in); -/// Split a string at the delimiters +/// +/* + * @brief Split a string at the delimiters + * @param in String to split + * @param Delimiter criteria + * @return Tokens +*/ Tokens split(const std::string & tokenstring, char delimiter); } // namespace nav2_util