From 8692e63d046e3c0db0a76c71e31a25905b359019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Mart=C3=ADn=20Rico?= Date: Tue, 11 Nov 2025 20:00:27 +0100 Subject: [PATCH 1/3] Add occupancy grid constants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Francisco Martín Rico --- navmap_ros/include/navmap_ros/conversions.hpp | 20 +++++++++++++++++++ navmap_ros/src/navmap_ros/conversions.cpp | 10 +++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/navmap_ros/include/navmap_ros/conversions.hpp b/navmap_ros/include/navmap_ros/conversions.hpp index 068f56f..a7e9f49 100644 --- a/navmap_ros/include/navmap_ros/conversions.hpp +++ b/navmap_ros/include/navmap_ros/conversions.hpp @@ -57,6 +57,26 @@ namespace navmap_ros { +/** + * @name Costmap value semantics + * @brief Standardized occupancy/cost values used when projecting NavMap layers + * onto a 2D grid (compatible with `costmap_2d` conventions). + * + * These constants follow the same meaning as in `costmap_2d`: + * - `NO_INFORMATION` (255): Unknown or unobserved area. + * - `LETHAL_OBSTACLE` (254): Non-traversable obstacle. + * - `INSCRIBED_INFLATED_OBSTACLE` (253): Inside the robot’s inscribed radius. + * - `MAX_NON_OBSTACLE` (252): Highest cost still considered traversable. + * - `FREE_SPACE` (0): Known free space. + * @{ + */ +constexpr uint8_t NO_INFORMATION = 255; +constexpr uint8_t LETHAL_OBSTACLE = 254; +constexpr uint8_t INSCRIBED_INFLATED_OBSTACLE = 253; +constexpr uint8_t MAX_NON_OBSTACLE = 252; +constexpr uint8_t FREE_SPACE = 0; +/** @} */ // end of Costmap value semantics group + // --------- NavMap <-> ROS message --------- /** diff --git a/navmap_ros/src/navmap_ros/conversions.cpp b/navmap_ros/src/navmap_ros/conversions.cpp index d04e0b6..65a3eb1 100644 --- a/navmap_ros/src/navmap_ros/conversions.cpp +++ b/navmap_ros/src/navmap_ros/conversions.cpp @@ -53,15 +53,15 @@ using navmap_ros_interfaces::msg::NavMapSurface; static inline uint8_t occ_to_u8(int8_t v) { - if (v < 0) {return 255u;} - if (v >= 100) {return 254u;} - return static_cast(std::lround((v / 100.0) * 254.0)); + if (v < 0) {return NO_INFORMATION;} + if (v >= 100) {return LETHAL_OBSTACLE;} + return static_cast(std::lround((v / 100.0) * static_cast(LETHAL_OBSTACLE))); } static inline int8_t u8_to_occ(uint8_t u) { - if (u == 255u) {return -1;} - return static_cast(std::lround((u / 254.0) * 100.0)); + if (u == NO_INFORMATION) {return -1;} + return static_cast(std::lround((u / static_cast(LETHAL_OBSTACLE)) * 100.0)); } static inline navmap::NavCelId tri_index_for_cell(uint32_t i, uint32_t j, uint32_t W) From e9556e1ee894bf17c6ecea655a460c8e4e7cc5e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Mart=C3=ADn=20Rico?= Date: Tue, 11 Nov 2025 20:00:50 +0100 Subject: [PATCH 2/3] FREE_SPACE as white MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Francisco Martín Rico --- navmap_rviz_plugin/src/NavMapDisplay.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/navmap_rviz_plugin/src/NavMapDisplay.cpp b/navmap_rviz_plugin/src/NavMapDisplay.cpp index f377532..037e89e 100644 --- a/navmap_rviz_plugin/src/NavMapDisplay.cpp +++ b/navmap_rviz_plugin/src/NavMapDisplay.cpp @@ -76,8 +76,8 @@ inline Ogre::ColourValue colorFromRainbow(float value, float max_value, float al inline Ogre::ColourValue colorFromU8(uint8_t v, float alpha) { - if (v == 0) {return Ogre::ColourValue(0.5f, 0.5f, 0.5f, alpha);} - if (v == 255) {return Ogre::ColourValue(0.0f, 0.39f, 0.0f, alpha);} + if (v == 0) {return Ogre::ColourValue(1.0f, 1.0f, 1.0f, alpha);} + if (v == 255) { return Ogre::ColourValue(0.25f, 0.25f, 0.25f, alpha); } if (v == 254) {return Ogre::ColourValue(0.0f, 0.0f, 0.0f, alpha);} float occ = static_cast(v) / 253.0f; float c = 1.0f - occ; From cc8425466eefe53603568c7e6c5facd657958009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Mart=C3=ADn=20Rico?= Date: Tue, 11 Nov 2025 20:01:45 +0100 Subject: [PATCH 3/3] Linting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Francisco Martín Rico --- navmap_rviz_plugin/src/NavMapDisplay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/navmap_rviz_plugin/src/NavMapDisplay.cpp b/navmap_rviz_plugin/src/NavMapDisplay.cpp index 037e89e..a6d4d2e 100644 --- a/navmap_rviz_plugin/src/NavMapDisplay.cpp +++ b/navmap_rviz_plugin/src/NavMapDisplay.cpp @@ -77,7 +77,7 @@ inline Ogre::ColourValue colorFromRainbow(float value, float max_value, float al inline Ogre::ColourValue colorFromU8(uint8_t v, float alpha) { if (v == 0) {return Ogre::ColourValue(1.0f, 1.0f, 1.0f, alpha);} - if (v == 255) { return Ogre::ColourValue(0.25f, 0.25f, 0.25f, alpha); } + if (v == 255) {return Ogre::ColourValue(0.25f, 0.25f, 0.25f, alpha);} if (v == 254) {return Ogre::ColourValue(0.0f, 0.0f, 0.0f, alpha);} float occ = static_cast(v) / 253.0f; float c = 1.0f - occ;