diff --git a/vortex_utils/include/vortex/utils/types.hpp b/vortex_utils/include/vortex/utils/types.hpp index 7cbbd99..bc8c158 100644 --- a/vortex_utils/include/vortex/utils/types.hpp +++ b/vortex_utils/include/vortex/utils/types.hpp @@ -395,6 +395,29 @@ struct LineSegment2D { } }; +/** + * @brief Enum class for operation modes. + */ +enum class Mode : uint8_t { manual, autonomous, reference }; + +/** + * @brief Convert Mode enum to string for logging or display purposes. + * @param mode Mode enum value + * @return std::string representation of the mode + */ +inline std::string mode_to_string(Mode mode) { + switch (mode) { + case Mode::manual: + return "manual mode"; + case Mode::autonomous: + return "autonomous mode"; + case Mode::reference: + return "reference mode"; + default: + throw std::runtime_error("Invalid operation mode."); + } +} + } // namespace vortex::utils::types #endif // VORTEX_UTILS_TYPES_HPP diff --git a/vortex_utils_ros/include/vortex/utils/ros/ros_conversions.hpp b/vortex_utils_ros/include/vortex/utils/ros/ros_conversions.hpp index 1c57074..8b7ab4e 100644 --- a/vortex_utils_ros/include/vortex/utils/ros/ros_conversions.hpp +++ b/vortex_utils_ros/include/vortex/utils/ros/ros_conversions.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -176,6 +177,25 @@ inline std::vector ros_to_pose_vec( return poses; } +/** + * @brief Converts a ROS vortex_msgs::msg::OperationMode to an internal Mode + * enum. + * @param mode_msg vortex_msgs::msg::OperationMode + * @return vortex::utils::types::Mode Internal mode representation + */ +inline vortex::utils::types::Mode convert_from_ros( + const vortex_msgs::msg::OperationMode& mode_msg) { + switch (mode_msg.operation_mode) { + case vortex_msgs::msg::OperationMode::MANUAL: + return vortex::utils::types::Mode::manual; + case vortex_msgs::msg::OperationMode::AUTONOMOUS: + return vortex::utils::types::Mode::autonomous; + case vortex_msgs::msg::OperationMode::REFERENCE: + return vortex::utils::types::Mode::reference; + } + throw std::runtime_error("Invalid operation mode."); +} + } // namespace vortex::utils::ros_conversions #endif // VORTEX_UTILS__ROS_CONVERSIONS_HPP_