diff --git a/rtabmap_conversions/CMakeLists.txt b/rtabmap_conversions/CMakeLists.txt index 33c8a0e0..d0cc59ed 100644 --- a/rtabmap_conversions/CMakeLists.txt +++ b/rtabmap_conversions/CMakeLists.txt @@ -7,7 +7,7 @@ find_package(catkin REQUIRED COMPONENTS image_geometry rtabmap_msgs ) -find_package(RTABMap 0.21.13 REQUIRED) +find_package(RTABMap 0.23.4 REQUIRED) catkin_package( INCLUDE_DIRS include diff --git a/rtabmap_slam/src/CoreWrapper.cpp b/rtabmap_slam/src/CoreWrapper.cpp index b87aaeb3..83009168 100644 --- a/rtabmap_slam/src/CoreWrapper.cpp +++ b/rtabmap_slam/src/CoreWrapper.cpp @@ -888,15 +888,24 @@ CoreWrapper::~CoreWrapper() this->saveParameters(configPath_); printf("rtabmap: Saving database/long-term memory... (located at %s)\n", databasePath_.c_str()); + bool saveDatabase = true; if(rtabmap_.getMemory()) { - // save the grid map - float xMin=0.0f, yMin=0.0f, gridCellSize = 0.05f; - cv::Mat pixels = mapsManager_.getGridMap(xMin, yMin, gridCellSize); - if(!pixels.empty()) + if(!rtabmap_.getMemory()->isReadOnly()) { - printf("rtabmap: 2D occupancy grid map saved.\n"); - rtabmap_.getMemory()->save2DMap(pixels, xMin, yMin, gridCellSize); + // save the grid map + float xMin=0.0f, yMin=0.0f, gridCellSize = 0.05f; + cv::Mat pixels = mapsManager_.getGridMap(xMin, yMin, gridCellSize); + if(!pixels.empty()) + { + printf("rtabmap: 2D occupancy grid map saved.\n"); + rtabmap_.getMemory()->save2DMap(pixels, xMin, yMin, gridCellSize); + } + } + else + { + printf("rtabmap: Database is read-only, the current state of the memory is not saved.\n"); + saveDatabase = false; } }