diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index a8072f6834..cf5ef3551a 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -68,7 +68,7 @@ jobs: if [ "${{ matrix.os }}" = "ubuntu-latest" ]; then sudo apt install libicu-dev libsimpleini-dev # to enable pymrpt: - sudo apt install libboost-all-dev python3-numpy + sudo apt install pybind11-dev python3-dev #python3-numpy fi if [ "${{ matrix.compiler }}" = "gcc" ]; then diff --git a/3rdparty/nanogui b/3rdparty/nanogui index 0f857bc733..2bf2c17a63 160000 --- a/3rdparty/nanogui +++ b/3rdparty/nanogui @@ -1 +1 @@ -Subproject commit 0f857bc733b19676e0d42c66f265aa8c0b205eaf +Subproject commit 2bf2c17a63cf9482e030e8b218dc0c1aee4c1b60 diff --git a/CMakeLists.txt b/CMakeLists.txt index e39921ccee..a955e9c809 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -253,6 +253,16 @@ if(NOT MSVC AND NOT XCODE_VERSION) endif() endif() +# ---------------------------------------------------------------------------- +# ROS +# ---------------------------------------------------------------------------- +include(cmakemodules/script_ros.cmake REQUIRED) # Check for ROS1 / ROS2 + +# Abort from ROS scripts? (special case for the build farm) +if (MRPT_ABORT_CMAKE_SCRIPT) + return() +endif() + # ---------------------------------------------------------------------------- # Other sub-scripts: # ---------------------------------------------------------------------------- @@ -289,8 +299,8 @@ include(cmakemodules/script_opencv.cmake REQUIRED) # Check for the OpenCV l include(cmakemodules/script_openni2.cmake REQUIRED) # Check for the OpenNI2 library include(cmakemodules/script_pcap.cmake REQUIRED) # Check for the libpcap library include(cmakemodules/script_phidget.cmake REQUIRED) # Support for phidget Interface Kit with proximity sensor device : +include(cmakemodules/script_python_bindings.cmake REQUIRED) # Support for python include(cmakemodules/script_qt.cmake REQUIRED) # Check for wxWidgets + GL -include(cmakemodules/script_ros.cmake REQUIRED) # Check for ROS1 / ROS2 include(cmakemodules/script_SIMD.cmake REQUIRED) # SSE2/SSE3/... optimization options include(cmakemodules/script_simpleini.cmake REQUIRED) # SimpleINI lib include(cmakemodules/script_suitesparse.cmake REQUIRED) # SuiteSparse libs @@ -304,6 +314,7 @@ include(cmakemodules/script_zlib.cmake REQUIRED) # Check for zlib include(cmakemodules/process_emscripten_embedded_files.cmake REQUIRED) + # --------------------------------------------------------------------------- # OPTIONS #The options for the user when using "cmakesetup" or "ccmake": @@ -640,16 +651,12 @@ add_subdirectory(doc) # UNIT TESTS: # ---------------------------------------------------------------------------- -if (DEFINED BUILD_TESTING) - set(_def_value ${BUILD_TESTING}) +if (((DEFINED BUILD_TESTING) AND (NOT BUILD_TESTING)) OR (DEFINED ENV{ROS_DISTRO})) + # We are in a ROS environment: disable tests by default to reduce build time in ROS build farms. + set(_def_value OFF) else() - if ("$ENV{ROS_DISTRO}" STREQUAL "") - # Regular case: - set(_def_value ON) - else() - # We are in a ROS environment: disable tests by default to reduce build time in ROS build farms. - set(_def_value OFF) - endif() + # Regular case: + set(_def_value ON) endif() set(MRPT_BUILD_TESTING ${_def_value} CACHE BOOL "Build MRPT tests") if(MRPT_BUILD_TESTING) @@ -657,11 +664,6 @@ if(MRPT_BUILD_TESTING) endif() unset(_def_value ) -#----------------------------------- -# The python bindings -# *Note*: This must be AFTER the generation of mrpt-xxx-config.cmake files -include(cmakemodules/script_python_bindings.cmake REQUIRED) # Support for python - # Prepare CPack params for building binary packages (has to be after the apps/) include(cmakemodules/script_setup_cpack.cmake REQUIRED) diff --git a/README.md b/README.md index 15b633d691..8b0a9669d6 100644 --- a/README.md +++ b/README.md @@ -78,12 +78,17 @@ sudo apt install ros-$ROS_DISTRO-mrpt2 | Distro | `develop` branch | Stable release | Next builds | |---|---|---|---| -| ROS1 Melodic @ u18.04 | | [![Version](https://img.shields.io/ros/v/melodic/mrpt2)](https://index.ros.org/search/?term=mrpt2) | | | ROS1 Noetic @ u20.04 | [![Build Status](https://build.ros.org/job/Ndev__mrpt2__ubuntu_focal_amd64/badge/icon)](https://build.ros.org/job/Ndev__mrpt2__ubuntu_focal_amd64/) | [![Version](https://img.shields.io/ros/v/noetic/mrpt2)](https://index.ros.org/search/?term=mrpt2) | [![Build Status](https://build.ros.org/job/Nbin_uF64__mrpt2__ubuntu_focal_amd64__binary/badge/icon)](https://build.ros.org/job/Nbin_uF64__mrpt2__ubuntu_focal_amd64__binary/) | -| ROS2 Foxy @ u20.04 | [![Build Status](https://build.ros2.org/job/Fdev__mrpt2__ubuntu_focal_amd64/badge/icon)](https://build.ros2.org/job/Fdev__mrpt2__ubuntu_focal_amd64/) | [![Version](https://img.shields.io/ros/v/foxy/mrpt2)](https://index.ros.org/search/?term=mrpt2) | [![Build Status](https://build.ros2.org/job/Fbin_uF64__mrpt2__ubuntu_focal_amd64__binary/badge/icon)](https://build.ros2.org/job/Fbin_uF64__mrpt2__ubuntu_focal_amd64__binary/) | | ROS2 Humble @ u22.04 | [![Build Status](https://build.ros2.org/job/Hdev__mrpt2__ubuntu_jammy_amd64/badge/icon)](https://build.ros2.org/job/Hdev__mrpt2__ubuntu_jammy_amd64/) | [![Version](https://img.shields.io/ros/v/humble/mrpt2)](https://index.ros.org/search/?term=mrpt2) | [![Build Status](https://build.ros2.org/job/Hbin_uJ64__mrpt2__ubuntu_jammy_amd64__binary/badge/icon)](https://build.ros2.org/job/Hbin_uJ64__mrpt2__ubuntu_jammy_amd64__binary/) | +| ROS2 Iron @ u22.04 | [![Build Status](https://build.ros2.org/job/Idev__mrpt2__ubuntu_jammy_amd64/badge/icon)](https://build.ros2.org/job/Idev__mrpt2__ubuntu_jammy_amd64/) | [![Version](https://img.shields.io/ros/v/iron/mrpt2)](https://index.ros.org/search/?term=mrpt2) | [![Build Status](https://build.ros2.org/job/Ibin_uJ64__mrpt2__ubuntu_jammy_amd64__binary/badge/icon)](https://build.ros2.org/job/Ibin_uJ64__mrpt2__ubuntu_jammy_amd64__binary/) | | ROS2 Rolling @ u22.04 | [![Build Status](https://build.ros2.org/job/Rdev__mrpt2__ubuntu_jammy_amd64/badge/icon)](https://build.ros2.org/job/Rdev__mrpt2__ubuntu_jammy_amd64/) | [![Version](https://img.shields.io/ros/v/rolling/mrpt2)](https://index.ros.org/search/?term=mrpt2) | [![Build Status](https://build.ros2.org/job/Rbin_uJ64__mrpt2__ubuntu_jammy_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uJ64__mrpt2__ubuntu_jammy_amd64__binary/) | +| EOL Distro | Last release | +|---|---| +| ROS1 Melodic @ u18.04 | [![Version](https://img.shields.io/ros/v/melodic/mrpt2)](https://index.ros.org/search/?term=mrpt2) | +| ROS2 Foxy @ u20.04 | [![Version](https://img.shields.io/ros/v/foxy/mrpt2)](https://index.ros.org/search/?term=mrpt2) | + + ## 4. License MRPT is released under the [new BSD license](http://www.mrpt.org/License/). diff --git a/apps/DifOdometry-Datasets/DifOdometry_Datasets.h b/apps/DifOdometry-Datasets/DifOdometry_Datasets.h index 8c2fb8fb72..7387b983e9 100644 --- a/apps/DifOdometry-Datasets/DifOdometry_Datasets.h +++ b/apps/DifOdometry-Datasets/DifOdometry_Datasets.h @@ -8,7 +8,7 @@ +------------------------------------------------------------------------+ */ #include -#include +#include #include #include #include diff --git a/apps/DifOdometry-Datasets/DifOdometry_Datasets_main.cpp b/apps/DifOdometry-Datasets/DifOdometry_Datasets_main.cpp index f24fb8a8e1..e32179722e 100644 --- a/apps/DifOdometry-Datasets/DifOdometry_Datasets_main.cpp +++ b/apps/DifOdometry-Datasets/DifOdometry_Datasets_main.cpp @@ -8,6 +8,7 @@ +------------------------------------------------------------------------+ */ #include +#include #include #include diff --git a/apps/ReactiveNav3D-Demo/ReactiveNav3D_demo.h b/apps/ReactiveNav3D-Demo/ReactiveNav3D_demo.h index a23246a5b4..984a55a5e8 100644 --- a/apps/ReactiveNav3D-Demo/ReactiveNav3D_demo.h +++ b/apps/ReactiveNav3D-Demo/ReactiveNav3D_demo.h @@ -9,7 +9,7 @@ */ #include -#include +#include #include #include #include diff --git a/apps/ReactiveNavigationDemo/reactive_navigator_demoMain.cpp b/apps/ReactiveNavigationDemo/reactive_navigator_demoMain.cpp index 6a3c49affd..7353127a3b 100644 --- a/apps/ReactiveNavigationDemo/reactive_navigator_demoMain.cpp +++ b/apps/ReactiveNavigationDemo/reactive_navigator_demoMain.cpp @@ -62,7 +62,6 @@ wxBitmap MyArtProvider::CreateBitmap( return wxNullBitmap; } -#include #include #include #include diff --git a/apps/gps2rawlog/gps2rawlog_main.cpp b/apps/gps2rawlog/gps2rawlog_main.cpp index a437a7e2c6..1afa08c09b 100644 --- a/apps/gps2rawlog/gps2rawlog_main.cpp +++ b/apps/gps2rawlog/gps2rawlog_main.cpp @@ -98,16 +98,14 @@ int main(int argc, char** argv) { gps_if.doProcess(); - CGenericSensor::TListObservations lst_obs; - gps_if.getObservations(lst_obs); + const auto lst_obs = gps_if.getObservations(); printf( "%u bytes parsed, %u new observations identified...\n", (unsigned)fil_input->getPosition(), (unsigned)lst_obs.size()); - for (auto it = lst_obs.begin(); it != lst_obs.end(); ++it) - { - arch << *it->second; - } + + for (const auto& kv : lst_obs) + arch << *kv.second; } // successful end of program. diff --git a/apps/graph-slam/display_graph.cpp b/apps/graph-slam/display_graph.cpp index 002027e80c..68866a526a 100644 --- a/apps/graph-slam/display_graph.cpp +++ b/apps/graph-slam/display_graph.cpp @@ -8,8 +8,7 @@ +------------------------------------------------------------------------+ */ #include -//#include -#include +#include #include #include #include diff --git a/apps/graph-slam/graph-slam_main.cpp b/apps/graph-slam/graph-slam_main.cpp index 3c4a7edce6..28e7e164bf 100644 --- a/apps/graph-slam/graph-slam_main.cpp +++ b/apps/graph-slam/graph-slam_main.cpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include using namespace mrpt; using namespace mrpt::graphslam; diff --git a/apps/hmt-slam-gui/CDlgLog.cpp b/apps/hmt-slam-gui/CDlgLog.cpp deleted file mode 100644 index e4f8474a93..0000000000 --- a/apps/hmt-slam-gui/CDlgLog.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include "CDlgLog.h" - -#include "hmt_slam_guiMain.h" - -//(*InternalHeaders(CDlgLog) -#include -#include -#include - -#include -//*) - -//(*IdInit(CDlgLog) -const long CDlgLog::ID_BUTTON1 = wxNewId(); -const long CDlgLog::ID_BUTTON2 = wxNewId(); -const long CDlgLog::ID_TEXTCTRL2 = wxNewId(); -const long CDlgLog::ID_TIMER1 = wxNewId(); -//*) - -BEGIN_EVENT_TABLE(CDlgLog, wxDialog) -//(*EventTable(CDlgLog) -//*) -END_EVENT_TABLE() - -hmt_slam_guiFrame* myParent = nullptr; - -CDlgLog::CDlgLog( - wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) -{ - myParent = static_cast(parent); - - //(*Initialize(CDlgLog) - wxFlexGridSizer* FlexGridSizer1; - wxFlexGridSizer* FlexGridSizer2; - wxFlexGridSizer* FlexGridSizer3; - - Create( - parent, id, _("Log messages"), wxDefaultPosition, wxDefaultSize, - wxSYSTEM_MENU | wxRESIZE_BORDER | wxCLOSE_BOX | wxMAXIMIZE_BOX | - wxMINIMIZE_BOX, - _T("id")); - SetClientSize(wxSize(344, 143)); - Move(wxPoint(50, 350)); - FlexGridSizer1 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer1->AddGrowableCol(0); - FlexGridSizer1->AddGrowableRow(1); - FlexGridSizer2 = new wxFlexGridSizer(2, 3, 0, 0); - btnClear = new wxButton( - this, ID_BUTTON1, _("Clear"), wxDefaultPosition, wxDefaultSize, 0, - wxDefaultValidator, _T("ID_BUTTON1")); - FlexGridSizer2->Add(btnClear, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnSave = new wxButton( - this, ID_BUTTON2, _("Save log.."), wxDefaultPosition, wxDefaultSize, 0, - wxDefaultValidator, _T("ID_BUTTON2")); - FlexGridSizer2->Add(btnSave, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - FlexGridSizer1->Add( - FlexGridSizer2, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - FlexGridSizer3 = new wxFlexGridSizer(1, 1, 0, 0); - FlexGridSizer3->AddGrowableCol(0); - FlexGridSizer3->AddGrowableRow(0); - edLog = new wxTextCtrl( - this, ID_TEXTCTRL2, wxEmptyString, wxDefaultPosition, wxSize(408, 96), - wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxTE_MULTILINE | wxTE_READONLY | - wxHSCROLL | wxALWAYS_SHOW_SB, - wxDefaultValidator, _T("ID_TEXTCTRL2")); - wxFont edLogFont( - 8, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); - edLog->SetFont(edLogFont); - FlexGridSizer3->Add(edLog, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 1); - FlexGridSizer1->Add( - FlexGridSizer3, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - SetSizer(FlexGridSizer1); - timDumpLog.SetOwner(this, ID_TIMER1); - timDumpLog.Start(250, false); - FlexGridSizer1->SetSizeHints(this); - - Bind(wxEVT_TIMER, &CDlgLog::OntimDumpLogTrigger, this, ID_TIMER1); - Bind(wxEVT_CLOSE_WINDOW, &CDlgLog::OnClose, this, wxID_ANY); - //*) - - m_redirector = std::make_unique( - - edLog, false, 0, true, /* thread_safe */ true, - /*Also dump to cout*/ true); -} - -CDlgLog::~CDlgLog() -{ - //(*Destroy(CDlgLog) - //*) -} - -void CDlgLog::OnClose(wxCloseEvent& event) -{ - myParent->btnShowLogWin->SetValue(false); - myParent->btnShowLogWin->Refresh(); - - event.Skip(); // Continue processing this event -} - -void CDlgLog::OntimDumpLogTrigger(wxTimerEvent& event) -{ - m_redirector->dumpNow(); -} diff --git a/apps/hmt-slam-gui/CDlgLog.h b/apps/hmt-slam-gui/CDlgLog.h deleted file mode 100644 index def5e0f5dc..0000000000 --- a/apps/hmt-slam-gui/CDlgLog.h +++ /dev/null @@ -1,60 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#ifndef CDLGLOG_H -#define CDLGLOG_H - -//(*Headers(CDlgLog) -#include -#include -#include -#include -#include -//*) - -#include - -#include // unique_ptr - -class CDlgLog : public wxDialog -{ - public: - CDlgLog( - wxWindow* parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize); - ~CDlgLog() override; - - //(*Declarations(CDlgLog) - wxButton* btnClear; - wxTimer timDumpLog; - wxTextCtrl* edLog; - wxButton* btnSave; - //*) - - protected: - //(*Identifiers(CDlgLog) - static const long ID_BUTTON1; - static const long ID_BUTTON2; - static const long ID_TEXTCTRL2; - static const long ID_TIMER1; - //*) - - std::unique_ptr m_redirector; - - private: - //(*Handlers(CDlgLog) - void OnClose(wxCloseEvent& event); - void OntimDumpLogTrigger(wxTimerEvent& event); - //*) - - DECLARE_EVENT_TABLE() -}; - -#endif diff --git a/apps/hmt-slam-gui/CMakeLists.txt b/apps/hmt-slam-gui/CMakeLists.txt deleted file mode 100644 index 88d1edf20b..0000000000 --- a/apps/hmt-slam-gui/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ - - -#----------------------------------------------------------------- -# CMake file for the MRPT application: hmt-slam-gui -# -# Run with "cmake ." at the root directory -# -# Apr 2010, Jose Luis Blanco -#----------------------------------------------------------------- -project(hmt-slam-gui) - -if(NOT (CMAKE_MRPT_HAS_WXWIDGETS AND CMAKE_MRPT_HAS_OPENGL_GLUT)) - message(STATUS "wxWidgets and/or GL/GLUT not found!: **This target will not be included in the Makefiles**") - return() -endif() - -# --------------------------------------------- -# TARGET: -# --------------------------------------------- -set(SRCS - hmt_slam_guiApp.cpp hmt_slam_guiApp.h - hmt_slam_guiMain.cpp hmt_slam_guiMain.h - MyGLCanvas.cpp MyGLCanvas.h - MyArtProvider.cpp MyArtProvider.h - CDlgLog.cpp CDlgLog.h - generate_3d_views.cpp - thread_hmtslam.cpp - ) -if(WIN32) - set(SRCS ${SRCS} resource.rc) -endif() - -add_executable(${PROJECT_NAME} WIN32 ${SRCS} ${MRPT_VERSION_RC_FILE}) - -# Add the required libraries for linking: -target_link_libraries(${PROJECT_NAME} - imp_wxwidgets - mrptwxthings - ) - -# Dependencies on MRPT libraries: -# Just mention the top-level dependency, the rest will be detected automatically, -# and all the needed #include<> dirs added (see the script DeclareAppDependencies.cmake for further details) -DeclareAppDependencies(${PROJECT_NAME} mrpt::gui mrpt::hmtslam mrpt::slam mrpt::bayes) - -DeclareAppForInstall(${PROJECT_NAME}) - -AppStartMenuLink(${PROJECT_NAME} "HMT-SLAM visual interface") # Add link to the Start menu (in Windows Installable packages) diff --git a/apps/hmt-slam-gui/MyArtProvider.cpp b/apps/hmt-slam-gui/MyArtProvider.cpp deleted file mode 100644 index b36958b670..0000000000 --- a/apps/hmt-slam-gui/MyArtProvider.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include "MyArtProvider.h" - -#include "../wx-common/mrpt_logo.xpm" -#include "hmt_slam_guiMain.h" // Needed to avoid UNICODE WX build errors sometimes -#include "imgs/icon_about.xpm" -#include "imgs/icon_exit.xpm" -#include "imgs/icon_load.xpm" -#include "imgs/icon_log.xpm" -#include "imgs/icon_reset.xpm" -#include "imgs/icon_save.xpm" -#include "imgs/icon_step.xpm" -#include "imgs/icon_stop.xpm" -#include "imgs/main_icon.xpm" - -// CreateBitmap function -wxBitmap CMyArtProvider::CreateBitmap( - const wxArtID& id, const wxArtClient& client, const wxSize& size) -{ - // Icons: - if (id == wxART_MAKE_ART_ID(IMG_MRPT_LOGO)) return wxBitmap(mrpt_logo_xpm); - if (id == wxART_MAKE_ART_ID(MAIN_ICON)) return wxBitmap(main_icon_xpm); - - // toolbar buttons: - if (id == wxART_MAKE_ART_ID(ICON_RESET)) return wxBitmap(icon_reset_xpm); - if (id == wxART_MAKE_ART_ID(ICON_LOG)) return wxBitmap(icon_log_xpm); - - if (id == wxART_MAKE_ART_ID(ICON_LOAD)) return wxBitmap(icon_load_xpm); - if (id == wxART_MAKE_ART_ID(ICON_SAVE)) return wxBitmap(icon_save_xpm); - - if (id == wxART_MAKE_ART_ID(ICON_PLAY)) return wxBitmap(icon_step_xpm); - if (id == wxART_MAKE_ART_ID(ICON_STOP)) return wxBitmap(icon_stop_xpm); - - if (id == wxART_MAKE_ART_ID(ICON_ABOUT)) return wxBitmap(icon_about_xpm); - - if (id == wxART_MAKE_ART_ID(ICON_QUIT)) return wxBitmap(icon_exit_xpm); - - // Any wxWidgets icons not implemented here - // will be provided by the default art provider. - return wxNullBitmap; -} diff --git a/apps/hmt-slam-gui/MyArtProvider.h b/apps/hmt-slam-gui/MyArtProvider.h deleted file mode 100644 index de4456d3fc..0000000000 --- a/apps/hmt-slam-gui/MyArtProvider.h +++ /dev/null @@ -1,25 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#ifndef MYARTPROVIDER_H -#define MYARTPROVIDER_H - -#include - -#include "CDlgLog.h" - -class CMyArtProvider : public wxArtProvider -{ - protected: - wxBitmap CreateBitmap( - const wxArtID& id, const wxArtClient& client, - const wxSize& size) override; -}; - -#endif // MYARTPROVIDER_H diff --git a/apps/hmt-slam-gui/MyGLCanvas.cpp b/apps/hmt-slam-gui/MyGLCanvas.cpp deleted file mode 100644 index 1c01bc3ae2..0000000000 --- a/apps/hmt-slam-gui/MyGLCanvas.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include "MyGLCanvas.h" - -using namespace std; - -#if RAWLOGVIEWER_HAS_3D - -CMyGLCanvas::CMyGLCanvas( - wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, - long style, const wxString& name) - : CWxGLCanvasBase(parent, id, pos, size, style, name) -{ - setCameraPointing(0.0f, 0.0f, 0.0f); - setZoomDistance(20.0f); - setElevationDegrees(45.0f); - setAzimuthDegrees(135.0f); - setCameraProjective(true); -} - -CMyGLCanvas::~CMyGLCanvas() = default; -void CMyGLCanvas::OnRenderError(const wxString& str) {} -void CMyGLCanvas::OnPreRender() {} -void CMyGLCanvas::OnPostRenderSwapBuffers(double At, wxPaintDC& dc) {} -void CMyGLCanvas::OnPostRender() -{ - // Show credits on the screen?? - // renderTextBitmap(20, 20, "RoadBot GUI, Copyright 2008 UMA" ); -} - -#endif diff --git a/apps/hmt-slam-gui/MyGLCanvas.h b/apps/hmt-slam-gui/MyGLCanvas.h deleted file mode 100644 index 6ccd06640b..0000000000 --- a/apps/hmt-slam-gui/MyGLCanvas.h +++ /dev/null @@ -1,61 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#ifndef MYGLCANVAS_H -#define MYGLCANVAS_H - -#include - -using namespace mrpt::gui; - -// Allow RawlogViewer to build without 3D: -#define RAWLOGVIEWER_HAS_3D (wxUSE_GLCANVAS && MRPT_HAS_OPENGL_GLUT) - -#if RAWLOGVIEWER_HAS_3D - -// To avoid conflicts between Eigen & X11 headers -#ifdef Success -#undef Success -#endif - -class CMyGLCanvas : public CWxGLCanvasBase -{ - public: - CMyGLCanvas( - wxWindow* parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = _T("CMyGLCanvas")); - - ~CMyGLCanvas() override; - - void OnPreRender() override; - void OnPostRender() override; - void OnPostRenderSwapBuffers(double At, wxPaintDC& dc) override; - void OnRenderError(const wxString& str) override; -}; - -#else - -// Dummy class -class CMyGLCanvas : public wxPanel -{ - public: - CMyGLCanvas( - wxWindow* parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = _T("CMyGLCanvas")) - { - } -}; - -#endif // Have glut - -#endif // MYGLCANVAS_H diff --git a/apps/hmt-slam-gui/generate_3d_views.cpp b/apps/hmt-slam-gui/generate_3d_views.cpp deleted file mode 100644 index 7af85d7e64..0000000000 --- a/apps/hmt-slam-gui/generate_3d_views.cpp +++ /dev/null @@ -1,273 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include -#include - -#include "hmt_slam_guiMain.h" - -//(*InternalHeaders(hmt_slam_guiFrame) -#include -#include -#include -#include -#include -#include -#include -#include -#include -//*) - -#include - -using namespace std; -using namespace mrpt; -using namespace mrpt::hmtslam; -using namespace mrpt::slam; -using namespace mrpt::maps; -using namespace mrpt::serialization; -using namespace mrpt::poses; -using namespace mrpt::opengl; -using namespace mrpt::math; - -void hmt_slam_guiFrame::updateLocalMapView() -{ - WX_START_TRY - - m_glLocalArea->getOpenGLSceneRef()->clear(); - - // Get the hypothesis ID: - THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - if (m_hmtslam->m_LMHs.find(hypID) == m_hmtslam->m_LMHs.end()) - { - wxMessageBox( - format("No LMH has hypothesis ID %i!", (int)hypID).c_str(), - _("Error with topological hypotesis")); - return; - } - - // Get the selected area or LMH in the tree view: - wxArrayTreeItemIds lstSelect; - size_t nSel = treeView->GetSelections(lstSelect); - if (!nSel) return; - - CItemData* data1 = - static_cast(treeView->GetItemData(lstSelect.Item(0))); - if (!data1) return; - if (!data1->m_ptr) return; - - CSerializable::Ptr obj = data1->m_ptr; - if (obj->GetRuntimeClass() == CLASS_ID(CHMHMapNode)) - { - // The 3D view: - opengl::CSetOfObjects::Ptr objs = - std::make_shared(); - - // ------------------------------------------- - // Draw a grid on the ground: - // ------------------------------------------- - { - opengl::CGridPlaneXY::Ptr grid = - std::make_shared( - -100, 100, -100, 100, 0, 5); - grid->setColor(0.4f, 0.4f, 0.4f); - objs->insert(grid); // it will free the memory - } - - // Two passes: 1st draw the map on the ground, then the rest. - for (int nRound = 0; nRound < 2; nRound++) - { - CHMHMapNode::Ptr firstArea; - CPose3DPDFGaussian refPoseThisArea; - - for (size_t nSelItem = 0; nSelItem < nSel; nSelItem++) - { - CItemData* datai = static_cast( - treeView->GetItemData(lstSelect.Item(nSelItem))); - if (!datai) continue; - if (!datai->m_ptr) continue; - - CHMHMapNode::Ptr area = - std::dynamic_pointer_cast(datai->m_ptr); - if (!area) continue; - - // Is this the first rendered area?? - if (!firstArea) { firstArea = area; } - else - { - // Compute the translation btw. ref. and current area: - CPose3DPDFParticles pdf; - - m_hmtslam->m_map - .computeCoordinatesTransformationBetweenNodes( - firstArea->getID(), area->getID(), pdf, hypID, 200); - /*0.15f, - DEG2RAD(5.0f) );*/ - - refPoseThisArea.copyFrom(pdf); - cout << "Pose " << firstArea->getID() << " - " - << area->getID() << refPoseThisArea << endl; - } - - CMultiMetricMap::Ptr obj_mmap = - area->m_annotations.getAs( - NODE_ANNOTATION_METRIC_MAPS, hypID, false); - - CRobotPosesGraph::Ptr obj_robposes = - area->m_annotations.getAs( - NODE_ANNOTATION_POSES_GRAPH, hypID, false); - - TPoseID refPoseID; - area->m_annotations.getElemental( - NODE_ANNOTATION_REF_POSEID, refPoseID, hypID, true); - - // --------------------------------------------------------- - // The metric map: - // --------------------------------------------------------- - if (nRound == 0) - { - auto objMap = obj_mmap->getVisualization(); - objMap->setPose(refPoseThisArea.mean); - objs->insert(objMap); - } - - if (nRound == 1) - { - // --------------------------------------------------------- - // Bounding boxes for grid maps: - // --------------------------------------------------------- - if (auto grid = obj_mmap->mapByClass(); - grid) - { - float x_min = grid->getXMin(); - float x_max = grid->getXMax(); - float y_min = grid->getYMin(); - float y_max = grid->getYMax(); - - auto objBB = opengl::CSetOfLines::Create(); - objBB->setColor(0, 0, 1); - objBB->setLineWidth(4.0f); - - objBB->appendLine(x_min, y_min, 0, x_max, y_min, 0); - objBB->appendLine(x_max, y_min, 0, x_max, y_max, 0); - objBB->appendLine(x_max, y_max, 0, x_min, y_max, 0); - objBB->appendLine(x_min, y_max, 0, x_min, y_min, 0); - - objBB->setPose(refPoseThisArea.mean); - objs->insert(objBB); - } - - // ----------------------------------------------- - // Draw a 3D coordinates corner for the ref. pose - // ----------------------------------------------- - { - CPose3D p; - (*obj_robposes)[refPoseID].pdf.getMean(p); - - opengl::CSetOfObjects::Ptr corner = - stock_objects::CornerXYZ(); - corner->setPose(refPoseThisArea.mean + p); - corner->setName(format("AREA %i", (int)area->getID())); - corner->enableShowName(); - - objs->insert(corner); - } - - // ----------------------------------------------- - // Draw ellipsoid with uncertainty of pose transformation - // ----------------------------------------------- - if (refPoseThisArea.cov(0, 0) != 0 || - refPoseThisArea.cov(1, 1) != 0) - { - opengl::CEllipsoid3D::Ptr ellip = - std::make_shared(); - ellip->setPose(refPoseThisArea.mean); - ellip->enableDrawSolid3D(false); - - CMatrixDouble C = CMatrixDouble(refPoseThisArea.cov); - - if (C(2, 2) < 1e6) C.setSize(2, 2); - else - C.setSize(3, 3); - - ellip->setCovMatrix(C); - ellip->setQuantiles(3); - const auto p = ellip->getPose().translation(); - ellip->setLocation(p.x, p.y, p.z + 0.5); - ellip->setColor(1, 0, 0); - ellip->setLineWidth(3); - - objs->insert(ellip); - } - - // --------------------------------------------------------- - // Draw each of the robot poses as 2D/3D ellipsoids - // --------------------------------------------------------- - for (auto it = obj_robposes->begin(); - it != obj_robposes->end(); ++it) - { - } - } - - } // end for nSelItem - - } // two pass - - // Add to the scene: - m_glLocalArea->getOpenGLSceneRef()->insert(objs); - } - else if (obj->GetRuntimeClass() == CLASS_ID(CLocalMetricHypothesis)) - { - // CLocalMetricHypothesis *lmh = static_cast( - // obj ); - } - - m_glLocalArea->Refresh(); - - WX_END_TRY -} - -void hmt_slam_guiFrame::updateGlobalMapView() -{ - auto openGLSceneRef = m_glGlobalHMTMap->getOpenGLSceneRef(); - openGLSceneRef->clear(); - - wxBusyCursor busy; - - // Dump text representation to log window: - { - std::vector strLst; - m_hmtslam->m_map.dumpAsText(strLst); - string str; - mrpt::system::stringListAsString(strLst, str); - cout << str << endl; - } - - if (m_hmtslam->m_map.getFirstNode()) - { - CHMHMapNode::TNodeID refID = m_hmtslam->m_map.getFirstNode()->getID(); - - THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - - if (m_hmtslam->m_LMHs.find(hypID) == m_hmtslam->m_LMHs.end()) - { - wxMessageBox( - format("No LMH has hypothesis ID %i!", (int)hypID), - _("Error with topological hypotesis")); - return; - } - // cout << "Showing hypothesis ID: " << hypID << endl; - - m_hmtslam->m_map.getAs3DScene(*openGLSceneRef, refID, hypID); - - m_glGlobalHMTMap->Refresh(); - } -} diff --git a/apps/hmt-slam-gui/hmt-slam-gui_design_GUI.cbp b/apps/hmt-slam-gui/hmt-slam-gui_design_GUI.cbp deleted file mode 100644 index 0ad527268c..0000000000 --- a/apps/hmt-slam-gui/hmt-slam-gui_design_GUI.cbp +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - diff --git a/apps/hmt-slam-gui/hmt_slam_guiApp.cpp b/apps/hmt-slam-gui/hmt_slam_guiApp.cpp deleted file mode 100644 index d92a14c00b..0000000000 --- a/apps/hmt-slam-gui/hmt_slam_guiApp.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include "hmt_slam_guiApp.h" - -#include - -//(*AppHeaders -#include - -#include "hmt_slam_guiMain.h" -//*) - -IMPLEMENT_APP(hmt_slam_guiApp) - -bool hmt_slam_guiApp::OnInit() -{ - // Starting in wxWidgets 2.9.0, we must reset numerics locale to "C", - // if we want numbers to use "." in all countries. The App::OnInit() is a - // perfect place to undo - // the default wxWidgets settings. (JL @ Sep-2009) - wxSetlocale(LC_NUMERIC, wxString(wxT("C"))); - - //(*AppInitialize - bool wxsOK = true; - wxInitAllImageHandlers(); - if (wxsOK) - { - auto* Frame = new hmt_slam_guiFrame(nullptr); - Frame->Show(); - SetTopWindow(Frame); - } - //*) - return wxsOK; -} diff --git a/apps/hmt-slam-gui/hmt_slam_guiApp.h b/apps/hmt-slam-gui/hmt_slam_guiApp.h deleted file mode 100644 index 40ed1a9714..0000000000 --- a/apps/hmt-slam-gui/hmt_slam_guiApp.h +++ /dev/null @@ -1,21 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#ifndef HMT_SLAM_GUIAPP_H -#define HMT_SLAM_GUIAPP_H - -#include - -class hmt_slam_guiApp : public wxApp -{ - public: - bool OnInit() override; -}; - -#endif // HMT_SLAM_GUIAPP_H diff --git a/apps/hmt-slam-gui/hmt_slam_guiMain.cpp b/apps/hmt-slam-gui/hmt_slam_guiMain.cpp deleted file mode 100644 index ae5ca8b4bf..0000000000 --- a/apps/hmt-slam-gui/hmt_slam_guiMain.cpp +++ /dev/null @@ -1,1017 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include "hmt_slam_guiMain.h" - -#include -#include -#include -#include -#include - -#include "MyArtProvider.h" - -//(*InternalHeaders(hmt_slam_guiFrame) -#include -#include -#include -#include -#include -#include -#include -#include -#include -//*) - -#include - -#include - -using namespace std; -using namespace mrpt; -using namespace mrpt::hmtslam; -using namespace mrpt::slam; -using namespace mrpt::config; -using namespace mrpt::io; -using namespace mrpt::system; -using namespace mrpt::poses; - -//(*IdInit(hmt_slam_guiFrame) -const long hmt_slam_guiFrame::ID_BUTTON1 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICLINE3 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON2 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON3 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICLINE1 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON4 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON6 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICLINE2 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON12 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON10 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON5 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL1 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICTEXT1 = wxNewId(); -const long hmt_slam_guiFrame::ID_TEXTCTRL1 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON11 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICTEXT6 = wxNewId(); -const long hmt_slam_guiFrame::ID_TEXTCTRL2 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL3 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICTEXT2 = wxNewId(); -const long hmt_slam_guiFrame::ID_CHOICE1 = wxNewId(); -const long hmt_slam_guiFrame::ID_TREECTRL1 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL15 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL17 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL16 = wxNewId(); -const long hmt_slam_guiFrame::ID_NOTEBOOK2 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICTEXT5 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON7 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON8 = wxNewId(); -const long hmt_slam_guiFrame::ID_BUTTON9 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL14 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL8 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL5 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICTEXT3 = wxNewId(); -const long hmt_slam_guiFrame::ID_XY_GLCANVAS = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL11 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL10 = wxNewId(); -const long hmt_slam_guiFrame::ID_STATICTEXT4 = wxNewId(); -const long hmt_slam_guiFrame::ID_CUSTOM1 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL13 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL12 = wxNewId(); -const long hmt_slam_guiFrame::ID_SPLITTERWINDOW2 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL7 = wxNewId(); -const long hmt_slam_guiFrame::ID_SPLITTERWINDOW1 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL4 = wxNewId(); -const long hmt_slam_guiFrame::ID_NOTEBOOK1 = wxNewId(); -const long hmt_slam_guiFrame::ID_PANEL2 = wxNewId(); -const long hmt_slam_guiFrame::ID_MENUITEM1 = wxNewId(); -const long hmt_slam_guiFrame::ID_MENUITEM2 = wxNewId(); -const long hmt_slam_guiFrame::ID_MENUITEM3 = wxNewId(); -const long hmt_slam_guiFrame::idMenuQuit = wxNewId(); -const long hmt_slam_guiFrame::ID_MENUITEM6 = wxNewId(); -const long hmt_slam_guiFrame::ID_MENUITEM4 = wxNewId(); -const long hmt_slam_guiFrame::ID_MENUITEM5 = wxNewId(); -const long hmt_slam_guiFrame::idMenuAbout = wxNewId(); -const long hmt_slam_guiFrame::ID_STATUSBAR1 = wxNewId(); -//*) - -BEGIN_EVENT_TABLE(hmt_slam_guiFrame, wxFrame) -//(*EventTable(hmt_slam_guiFrame) -//*) -END_EVENT_TABLE() - -hmt_slam_guiFrame::hmt_slam_guiFrame(wxWindow* parent, wxWindowID id) -{ - // Load my custom icons: - wxArtProvider::Push(new CMyArtProvider); - - //(*Initialize(hmt_slam_guiFrame) - wxMenuItem* MenuItem2; - wxMenuItem* MenuItem1; - wxFlexGridSizer* FlexGridSizer8; - wxFlexGridSizer* FlexGridSizer1; - wxFlexGridSizer* FlexGridSizer2; - wxFlexGridSizer* FlexGridSizer15; - wxBoxSizer* BoxSizer3; - wxMenu* Menu1; - wxFlexGridSizer* FlexGridSizer17; - wxFlexGridSizer* FlexGridSizer11; - wxFlexGridSizer* FlexGridSizer7; - wxFlexGridSizer* FlexGridSizer4; - wxFlexGridSizer* FlexGridSizer9; - wxFlexGridSizer* FlexGridSizer14; - wxFlexGridSizer* FlexGridSizer6; - wxFlexGridSizer* FlexGridSizer3; - wxMenuItem* MenuItem5; - wxFlexGridSizer* FlexGridSizer16; - wxFlexGridSizer* FlexGridSizer10; - wxBoxSizer* BoxSizer1; - wxFlexGridSizer* FlexGridSizer13; - wxMenuBar* MenuBar1; - wxFlexGridSizer* FlexGridSizer18; - wxMenuItem* MenuItem6; - wxFlexGridSizer* FlexGridSizer12; - wxMenu* Menu2; - wxFlexGridSizer* FlexGridSizer5; - wxMenuItem* MenuItem8; - - Create( - parent, id, _("HTM-SLAM - Part of the MRPT project"), wxDefaultPosition, - wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("id")); - SetClientSize(wxSize(700, 400)); - SetMinSize(wxSize(-1, 300)); - { - wxIcon FrameIcon; - FrameIcon.CopyFromBitmap(wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("MAIN_ICON")), wxART_FRAME_ICON)); - SetIcon(FrameIcon); - } - FlexGridSizer1 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer1->AddGrowableCol(0); - FlexGridSizer1->AddGrowableRow(1); - Panel1 = new wxPanel( - this, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL1")); - FlexGridSizer2 = new wxFlexGridSizer(0, 12, 0, 0); - FlexGridSizer2->AddGrowableCol(8); - btnReset = new wxCustomButton( - Panel1, ID_BUTTON1, _("Reset"), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_RESET")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON1")); - btnReset->SetBitmapDisabled( - btnReset->CreateBitmapDisabled(btnReset->GetBitmapLabel())); - btnReset->SetLabelMargin(wxSize(10, 2)); - btnReset->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add(btnReset, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - StaticLine3 = new wxStaticLine( - Panel1, ID_STATICLINE3, wxDefaultPosition, wxSize(1, -1), wxLI_VERTICAL, - _T("ID_STATICLINE3")); - FlexGridSizer2->Add( - StaticLine3, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnLoad = new wxCustomButton( - Panel1, ID_BUTTON2, _("Load state..."), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_LOAD")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON2")); - btnLoad->SetBitmapDisabled( - btnLoad->CreateBitmapDisabled(btnLoad->GetBitmapLabel())); - btnLoad->SetLabelMargin(wxSize(10, 2)); - btnLoad->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add(btnLoad, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnSave = new wxCustomButton( - Panel1, ID_BUTTON3, _("Save state.."), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_SAVE")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON3")); - btnSave->SetBitmapDisabled( - btnSave->CreateBitmapDisabled(btnSave->GetBitmapLabel())); - btnSave->SetLabelMargin(wxSize(10, 2)); - btnSave->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add(btnSave, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - StaticLine1 = new wxStaticLine( - Panel1, ID_STATICLINE1, wxDefaultPosition, wxSize(1, -1), wxLI_VERTICAL, - _T("ID_STATICLINE1")); - FlexGridSizer2->Add( - StaticLine1, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnStart = new wxCustomButton( - Panel1, ID_BUTTON4, _("START"), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_PLAY")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON4")); - btnStart->SetBitmapDisabled( - btnStart->CreateBitmapDisabled(btnStart->GetBitmapLabel())); - btnStart->SetLabelMargin(wxSize(10, 2)); - btnStart->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add(btnStart, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnPause = new wxCustomButton( - Panel1, ID_BUTTON6, _("Pause"), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_STOP")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON6")); - btnPause->SetBitmapDisabled( - btnPause->CreateBitmapDisabled(btnPause->GetBitmapLabel())); - btnPause->SetLabelMargin(wxSize(10, 2)); - btnPause->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add(btnPause, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - StaticLine2 = new wxStaticLine( - Panel1, ID_STATICLINE2, wxDefaultPosition, wxSize(1, -1), wxLI_VERTICAL, - _T("ID_STATICLINE2")); - FlexGridSizer2->Add( - StaticLine2, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnShowLogWin = new wxCustomButton( - Panel1, ID_BUTTON12, _("Show log"), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_LOG")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON12")); - btnShowLogWin->SetBitmapDisabled( - btnShowLogWin->CreateBitmapDisabled(btnShowLogWin->GetBitmapLabel())); - btnShowLogWin->SetLabelMargin(wxSize(10, 2)); - btnShowLogWin->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add( - btnShowLogWin, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - FlexGridSizer2->Add(-1, -1, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnAbout = new wxCustomButton( - Panel1, ID_BUTTON10, _("About..."), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_ABOUT")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON10")); - btnAbout->SetBitmapDisabled( - btnAbout->CreateBitmapDisabled(btnAbout->GetBitmapLabel())); - btnAbout->SetLabelMargin(wxSize(10, 2)); - btnAbout->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add(btnAbout, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnQuit = new wxCustomButton( - Panel1, ID_BUTTON5, _("Quit"), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("ICON_QUIT")), - wxART_MAKE_CLIENT_ID_FROM_STR(wxString(wxEmptyString))), - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON5")); - btnQuit->SetBitmapDisabled( - btnQuit->CreateBitmapDisabled(btnQuit->GetBitmapLabel())); - btnQuit->SetLabelMargin(wxSize(10, 2)); - btnQuit->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer2->Add(btnQuit, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - Panel1->SetSizer(FlexGridSizer2); - FlexGridSizer2->Fit(Panel1); - FlexGridSizer2->SetSizeHints(Panel1); - FlexGridSizer1->Add(Panel1, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - Panel2 = new wxPanel( - this, ID_PANEL2, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL2")); - FlexGridSizer3 = new wxFlexGridSizer(1, 1, 0, 0); - FlexGridSizer3->AddGrowableCol(0); - FlexGridSizer3->AddGrowableRow(0); - Notebook1 = new wxNotebook( - Panel2, ID_NOTEBOOK1, wxDefaultPosition, wxDefaultSize, 0, - _T("ID_NOTEBOOK1")); - panConfig = new wxPanel( - Notebook1, ID_PANEL3, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL3")); - FlexGridSizer16 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer16->AddGrowableCol(0); - FlexGridSizer16->AddGrowableRow(1); - FlexGridSizer17 = new wxFlexGridSizer(1, 3, 0, 0); - FlexGridSizer17->AddGrowableCol(1); - StaticText1 = new wxStaticText( - panConfig, ID_STATICTEXT1, _("Input rawlog file:"), wxDefaultPosition, - wxDefaultSize, 0, _T("ID_STATICTEXT1")); - FlexGridSizer17->Add( - StaticText1, 1, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 5); - edInputRawlog = new wxTextCtrl( - panConfig, ID_TEXTCTRL1, _("dataset.rawlog"), wxDefaultPosition, - wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); - FlexGridSizer17->Add( - edInputRawlog, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnPickRawlog = new wxButton( - panConfig, ID_BUTTON11, _("Pick..."), wxDefaultPosition, wxDefaultSize, - 0, wxDefaultValidator, _T("ID_BUTTON11")); - FlexGridSizer17->Add( - btnPickRawlog, 1, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 5); - FlexGridSizer16->Add( - FlexGridSizer17, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - FlexGridSizer18 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer18->AddGrowableCol(0); - FlexGridSizer18->AddGrowableRow(1); - StaticText6 = new wxStaticText( - panConfig, ID_STATICTEXT6, _("More parameters:"), wxDefaultPosition, - wxDefaultSize, 0, _T("ID_STATICTEXT6")); - FlexGridSizer18->Add( - StaticText6, 1, wxALL | wxALIGN_BOTTOM | wxALIGN_CENTER_HORIZONTAL, 5); - edRestParams = new wxTextCtrl( - panConfig, ID_TEXTCTRL2, - _("//====================================================\n// " - " HMT-SLAM\n// Here come global parameters for the " - "app.\n//" - "====================================================\n[HMT-SLAM]" - "\n\n// The directory where the log files will be saved (left in " - "blank if no log is required)\nLOG_OUTPUT_DIR\t= " - "LOG_HTMSLAM_MALAGA\n\nrawlog_offset\t= 0\t\t// Whether to skip some " - "rawlog entries \nLOG_FREQUENCY\t= 20\t// The frequency of log files " - "generation:\nLOG_SHOW3D\t\t= 1\nrandom_seed\t\t= 1234\t// " - "0:Randomize, !=0:use that seed.\n\n// " - "--------------------------------\n// Local SLAM method " - "selection:\n// 1: RBPF_2DLASER\n// " - "--------------------------------\nSLAM_METHOD=1\n\n//" - "SLAM_MIN_DIST_BETWEEN_OBS=1.0\t\t// Map updates threshold " - "(meters)\n//SLAM_MIN_HEADING_BETWEEN_OBS_DEG=50\t// Map updates " - "threshold (degrees)\n\nSLAM_MIN_DIST_BETWEEN_OBS=1.25\t\t// Map " - "updates threshold (meters)\nSLAM_MIN_HEADING_BETWEEN_OBS_DEG=30\t// " - "Map updates threshold (degrees)\n\nMIN_ODOMETRY_STD_XY\t\t= " - "0.05\t\t// Minimum sigma in odometry increments " - "(meters)\nMIN_ODOMETRY_STD_PHI\t= 2\t\t\t// Minimum sigma in " - "odometry increments (deg)\n\n// Loop closure detectors:\n// " - "gridmaps\n// images\nTLC_DETECTORS=gridmaps\n\n// " - "====================================================\n// " - "TLC_GRIDMATCHING\n//\n// Top. Loop-closure detector based on " - "grid-matching\n// " - "====================================================\n[TLC_" - "GRIDMATCHING]\nfeatsPerSquareMeter\t\t= " - "0.012\n\nthreshold_max\t\t\t= 0.20 \t\t// For considering candidate " - "matches\nthreshold_delta\t\t\t= 0.09\n\nransac_prob_good_inliers = " - "0.9999999999 // Prob. of a good inliers (for the number of " - "iterations).\n\nmaxKLd_for_merge = 0.9\t\t// Merge of close " - "SOG modes\n\nmin_ICP_goodness\t= 0.25\nmax_ICP_mahadist\t= 20 //10 " - "// The maximum Mahalanobis distance between the initial and final " - "poses in the ICP not to discard the hypothesis " - "(default=10)\n\nransac_minSetSizeRatio\t= 0.15 // " - "0.20\n\nransac_mahalanobisDistanceThreshold\t= 6\t\t// amRobust " - "method only\nransac_chi2_quantile\t= 0.5 \t\t\t\t// " - "amModifiedRANSAC method only\n\nsave_feat_coors\t\t\t= 0\t\t// Dump " - "correspondences to grid_feats\ndebug_save_map_pairs\t= 1\t\t// Save " - "the pair of maps with the best " - "correspondences\ndebug_show_corrs\t\t= 0\t\t// Debug output of " - "graphs\n\n\n// " - "----------------------------------------------------------\n// All " - "the params of the feature detectors/descriptors\n// " - "----------------------------------------------------------" - "\nfeatsType\t\t\t= 1\t\t// 0: KLT, 1: Harris, 3: SIFT, 4: " - "SURF\n\n// The feature descriptor to use: 0=detector already has " - "descriptor, \n// 1= SIFT, 2=SURF, 4=Spin images, 8=Polar images, " - "16=log-polar images \nfeature_descriptor\t\t= 8\n\npatchSize\t\t\t= " - "0 \t// Not needed\n\nKLTOptions.min_distance\t\t= 6\t\t\t// " - "Pixels\nKLTOptions.threshold\t\t= 0.01 // 0.10 // " - "0.20\n\nharrisOptions.min_distance\t= 6\t\t\t// " - "Pixels\nharrisOptions.threshold \t= 0.10 // " - "0.20\n\nSIFTOptions.implementation\t= 3\t\t\t// " - "Hess\n\nSURFOptions.rotation_invariant\t= 1\t\t// 0=64 dims, " - "1=128dims\n\nSpinImagesOptions.hist_size_distance\t= 10 " - "\nSpinImagesOptions.hist_size_intensity\t= 10 " - "\nSpinImagesOptions.radius\t\t\t= " - "20\n\nPolarImagesOptions.bins_angle\t\t\t= " - "8\nPolarImagesOptions.bins_distance\t\t= " - "6\nPolarImagesOptions.radius\t\t\t= " - "40\n\nLogPolarImagesOptions.radius\t\t\t= " - "20\nLogPolarImagesOptions.num_angles\t\t= 8\n\n\n\n// " - "====================================================\n//\n// " - " \tPARTICLE_FILTER\n//\n// Parameters of the PARTICLE FILTER " - "within each LMH,\n// invoked & implemented in " - "CLSLAM_RBPF_2DLASER\n// " - "====================================================\n[PARTICLE_" - "FILTER]\n//" - "--------------------------------------------------------------------" - "--------------\n// The Particle Filter algorithm:\n//\t0: " - "pfStandardProposal\n//\t1: pfAuxiliaryPFStandard\n//\t2: " - "pfOptimalProposal *** (ICP,...)\n//\t3: pfAuxiliaryPFOptimal\t " - " *** (Optimal SAMPLING)\n//\n// See: " - "http://www.mrpt.org/Particle_Filters\n//" - "--------------------------------------------------------------------" - "--------------\nPF_algorithm=3\n\nadaptiveSampleSize\t= 0\t\t// 0: " - "Fixed # of particles, 1: KLD " - "adaptive\n\n//" - "--------------------------------------------------------------------" - "--------------\n// The Particle Filter Resampling method:\n//\t0: " - "prMultinomial\n//\t1: prResidual\n//\t2: prStratified\n//\t3: " - "prSystematic\n//\n// See: /docs/html/topic_resampling.html or " - "http://www.mrpt.org/ " - "topic_resampling.html\n//" - "--------------------------------------------------------------------" - "--------------\nresamplingMethod=0\npfAuxFilterOptimal_" - "MaximumSearchSamples = 250\t\t// For PF " - "algorithm=3\n\nsampleSize\t= 5\t\t// Number of particles (for fixed " - "number algorithms)\nBETA\t\t= 0.50\t// Resampling ESS " - "threshold\t\npowFactor\t= 0.01\t\t\t// A \"power factor\" for " - "updating weights\t\t\t\n\n\n// " - "====================================================\n//" - "\t\tGRAPH_CUT\n//\n// Params for Area Abstraction (AA)\n// " - "====================================================\n[GRAPH_CUT]" - "\npartitionThreshold = 0.6 // In the range " - "[0,1]. Lower gives larger clusters.\nminDistForCorrespondence " - " = 0.50\nuseMapMatching = " - "1\nminimumNumberElementsEachCluster = 5\n\n// " - "====================================================\n//\n// " - " MULTIMETRIC MAP CONFIGURATION\n//\n// The params for creating " - "the metric maps for \n// each LMH.\n// " - "====================================================\n[MetricMaps]" - "\n// Creation of maps:\noccupancyGrid_count\t\t\t= " - "1\ngasGrid_count\t\t\t\t= 0\nlandmarksMap_count\t\t\t= " - "0\nbeaconMap_count\t\t\t\t= 0\npointsMap_count\t\t\t\t= 1\n\n// " - "Selection of map for likelihood: (fuseAll=-1,occGrid=0, " - "points=1,landmarks=2,gasGrid=3)\nlikelihoodMapSelection\t\t= " - "0\n\n// Enables (1) / Disables (0) insertion into specific " - "maps:\nenableInsertion_pointsMap\t= " - "1\nenableInsertion_landmarksMap= 1\nenableInsertion_beaconMap\t= " - "1\nenableInsertion_gridMaps\t= 1\nenableInsertion_gasGridMaps\t= " - "1\n\n// ====================================================\n// " - "MULTIMETRIC MAP: OccGrid #00\n// " - "====================================================\n// Creation " - "Options for OccupancyGridMap " - "00:\n[MetricMaps_occupancyGrid_00_creationOpts]\nresolution=0." - "07\ndisableSaveAs3DObject=0\n\n\n// Insertion Options for " - "OccupancyGridMap " - "00:\n[MetricMaps_occupancyGrid_00_insertOpts]" - "\nmapAltitude\t\t\t\t\t\t\t= 0\nuseMapAltitude\t\t\t\t\t\t= " - "0\nmaxDistanceInsertion\t\t\t\t= " - "35\nmaxOccupancyUpdateCertainty\t\t\t= " - "0.60\nconsiderInvalidRangesAsFreeSpace\t= " - "1\nminLaserScanNoiseStd\t\t\t\t= " - "0.001\nhorizontalTolerance\t\t\t\t\t= 0.9 // In " - "degrees\n\nCFD_features_gaussian_size\t\t\t= " - "3\nCFD_features_median_size\t\t\t= 3\n\n\n// Likelihood Options for " - "OccupancyGridMap " - "00:\n[MetricMaps_occupancyGrid_00_likelihoodOpts]" - "\nlikelihoodMethod\t\t\t\t= 4 // 0=MI, 1=Beam Model, 2=RSLC, " - "3=Cells Difs, 4=LF_Thrun, 5=LF_II\nLF_decimation\t\t\t\t\t= " - "4\nLF_stdHit\t\t\t\t\t\t= 0.10\nLF_maxCorrsDistance\t\t\t\t= " - "0.50\nLF_zHit\t\t\t\t\t\t\t= 0.999\nLF_zRandom\t\t\t\t\t\t= " - "0.001\nLF_maxRange\t\t\t\t\t\t= 60\nLF_alternateAverageMethod\t\t= " - "0\nenableLikelihoodCache\t\t\t= 1\n\n// " - "====================================================\n// " - "MULTIMETRIC MAP: PointMap #00\n// " - "====================================================\n// Creation " - "Options for Pointsmap 00:\n// Creation Options for OccupancyGridMap " - "00:\n[MetricMaps_PointsMap_00_creationOpts]\ndisableSaveAs3DObject=" - "0\n\n[MetricMaps_PointsMap_00_insertOpts]" - "\nminDistBetweenLaserPoints=0.05 // The minimum distance between " - "points (in 3D): If two points are too close, one of them is not " - "inserted into the map.\nisPlanarMap=0 // If set " - "to true, only HORIZONTAL (i.e. XY plane) measurements will be " - "inserted in the map. Default value is false, thus 3D maps are " - "generated\n"), - wxDefaultPosition, wxDefaultSize, - wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxTE_MULTILINE | wxHSCROLL | - wxALWAYS_SHOW_SB, - wxDefaultValidator, _T("ID_TEXTCTRL2")); - wxFont edRestParamsFont( - 8, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); - edRestParams->SetFont(edRestParamsFont); - FlexGridSizer18->Add( - edRestParams, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 1); - FlexGridSizer16->Add( - FlexGridSizer18, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - panConfig->SetSizer(FlexGridSizer16); - FlexGridSizer16->Fit(panConfig); - FlexGridSizer16->SetSizeHints(panConfig); - panMapView = new wxPanel( - Notebook1, ID_PANEL4, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL4")); - FlexGridSizer4 = new wxFlexGridSizer(1, 1, 0, 0); - FlexGridSizer4->AddGrowableCol(0); - FlexGridSizer4->AddGrowableRow(0); - SplitterWindow1 = new wxSplitterWindow( - panMapView, ID_SPLITTERWINDOW1, wxPoint(176, 320), wxDefaultSize, - wxSP_3D | wxSP_LIVE_UPDATE, _T("ID_SPLITTERWINDOW1")); - SplitterWindow1->SetMinSize(wxSize(10, 10)); - SplitterWindow1->SetMinimumPaneSize(10); - Panel3 = new wxPanel( - SplitterWindow1, ID_PANEL5, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL5")); - FlexGridSizer5 = new wxFlexGridSizer(3, 1, 0, 0); - FlexGridSizer5->AddGrowableCol(0); - FlexGridSizer5->AddGrowableRow(1); - FlexGridSizer7 = new wxFlexGridSizer(0, 2, 0, 0); - StaticText2 = new wxStaticText( - Panel3, ID_STATICTEXT2, _("Select hypothesis:"), wxDefaultPosition, - wxDefaultSize, 0, _T("ID_STATICTEXT2")); - FlexGridSizer7->Add( - StaticText2, 1, - wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); - cbHypos = new wxChoice( - Panel3, ID_CHOICE1, wxDefaultPosition, wxDefaultSize, 0, nullptr, 0, - wxDefaultValidator, _T("ID_CHOICE1")); - FlexGridSizer7->Add( - cbHypos, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, - 5); - FlexGridSizer5->Add( - FlexGridSizer7, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - Notebook2 = new wxNotebook( - Panel3, ID_NOTEBOOK2, wxDefaultPosition, wxDefaultSize, wxNB_MULTILINE, - _T("ID_NOTEBOOK2")); - panTreeView = new wxPanel( - Notebook2, ID_PANEL15, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL15")); - FlexGridSizer15 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer15->AddGrowableCol(0); - FlexGridSizer15->AddGrowableRow(0); - treeView = new wxTreeCtrl( - panTreeView, ID_TREECTRL1, wxDefaultPosition, wxDefaultSize, - wxTR_LINES_AT_ROOT | wxTR_MULTIPLE | wxTR_DEFAULT_STYLE | wxVSCROLL | - wxHSCROLL, - wxDefaultValidator, _T("ID_TREECTRL1")); - FlexGridSizer15->Add( - treeView, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - panTreeView->SetSizer(FlexGridSizer15); - FlexGridSizer15->Fit(panTreeView); - FlexGridSizer15->SetSizeHints(panTreeView); - Panel15 = new wxPanel( - Notebook2, ID_PANEL17, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL17")); - Panel14 = new wxPanel( - Notebook2, ID_PANEL16, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL16")); - Notebook2->AddPage(panTreeView, _("Tree view"), true); - Notebook2->AddPage(Panel15, _("All nodes"), false); - Notebook2->AddPage(Panel14, _("All arcs"), false); - FlexGridSizer5->Add( - Notebook2, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 1); - Panel8 = new wxPanel( - Panel3, ID_PANEL8, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL8")); - FlexGridSizer8 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer8->AddGrowableCol(0); - FlexGridSizer8->AddGrowableRow(0); - BoxSizer3 = new wxBoxSizer(wxHORIZONTAL); - StaticText5 = new wxStaticText( - Panel8, ID_STATICTEXT5, _("Edit the map"), wxDefaultPosition, - wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT5")); - wxFont StaticText5Font = wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT); - if (!StaticText5Font.Ok()) - StaticText5Font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - StaticText5Font.SetPointSize( - (int)(StaticText5Font.GetPointSize() * 1.000000)); - StaticText5Font.SetWeight(wxFONTWEIGHT_BOLD); - StaticText5->SetFont(StaticText5Font); - BoxSizer3->Add( - StaticText5, 1, - wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); - FlexGridSizer8->Add( - BoxSizer3, 1, wxALL | wxALIGN_BOTTOM | wxALIGN_CENTER_HORIZONTAL, 0); - Panel12 = new wxPanel( - Panel8, ID_PANEL14, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL14")); - FlexGridSizer14 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer14->AddGrowableCol(0); - FlexGridSizer6 = new wxFlexGridSizer(0, 3, 0, 0); - btnImportArea = new wxCustomButton( - Panel12, ID_BUTTON7, _("Import area/metric map..."), wxNullBitmap, - wxDefaultPosition, wxDefaultSize, - wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON7")); - btnImportArea->SetLabelMargin(wxSize(10, 2)); - btnImportArea->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer6->Add( - btnImportArea, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - FlexGridSizer14->Add( - FlexGridSizer6, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - FlexGridSizer9 = new wxFlexGridSizer(0, 3, 0, 0); - btnAddNode = new wxCustomButton( - Panel12, ID_BUTTON8, _("Add node..."), wxNullBitmap, wxDefaultPosition, - wxDefaultSize, wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON8")); - btnAddNode->SetLabelMargin(wxSize(10, 2)); - btnAddNode->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer9->Add( - btnAddNode, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - btnAddArc = new wxCustomButton( - Panel12, ID_BUTTON9, _("Add arc..."), wxNullBitmap, wxDefaultPosition, - wxDefaultSize, wxCUSTBUT_BUTTON | wxCUSTBUT_BOTTOM | wxCUSTBUT_FLAT, - wxDefaultValidator, _T("ID_BUTTON9")); - btnAddArc->SetLabelMargin(wxSize(10, 2)); - btnAddArc->SetBitmapMargin(wxSize(-1, 3)); - FlexGridSizer9->Add(btnAddArc, 1, wxALL | wxALIGN_LEFT | wxALIGN_BOTTOM, 5); - FlexGridSizer14->Add( - FlexGridSizer9, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - Panel12->SetSizer(FlexGridSizer14); - FlexGridSizer14->Fit(Panel12); - FlexGridSizer14->SetSizeHints(Panel12); - FlexGridSizer8->Add( - Panel12, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - Panel8->SetSizer(FlexGridSizer8); - FlexGridSizer8->Fit(Panel8); - FlexGridSizer8->SetSizeHints(Panel8); - FlexGridSizer5->Add(Panel8, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - Panel3->SetSizer(FlexGridSizer5); - FlexGridSizer5->Fit(Panel3); - FlexGridSizer5->SetSizeHints(Panel3); - Panel4 = new wxPanel( - SplitterWindow1, ID_PANEL7, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL7")); - BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); - SplitterWindow2 = new wxSplitterWindow( - Panel4, ID_SPLITTERWINDOW2, wxDefaultPosition, wxDefaultSize, - wxSP_3D | wxSP_LIVE_UPDATE, _T("ID_SPLITTERWINDOW2")); - SplitterWindow2->SetMinSize(wxSize(60, 60)); - SplitterWindow2->SetMinimumPaneSize(60); - Panel6 = new wxPanel( - SplitterWindow2, ID_PANEL10, wxDefaultPosition, wxSize(100, 100), - wxTAB_TRAVERSAL, _T("ID_PANEL10")); - Panel6->SetMinSize(wxSize(100, 100)); - FlexGridSizer10 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer10->AddGrowableCol(0); - FlexGridSizer10->AddGrowableRow(1); - StaticText3 = new wxStaticText( - Panel6, ID_STATICTEXT3, _("Global HMT map"), wxDefaultPosition, - wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT3")); - wxFont StaticText3Font = wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT); - if (!StaticText3Font.Ok()) - StaticText3Font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - StaticText3Font.SetPointSize( - (int)(StaticText3Font.GetPointSize() * 1.000000)); - StaticText3Font.SetWeight(wxFONTWEIGHT_BOLD); - StaticText3->SetFont(StaticText3Font); - FlexGridSizer10->Add( - StaticText3, 1, - wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); - Panel7 = new wxPanel( - Panel6, ID_PANEL11, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL11")); - FlexGridSizer11 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer11->AddGrowableCol(0); - FlexGridSizer11->AddGrowableRow(0); - m_glGlobalHMTMap = new CMyGLCanvas( - Panel7, ID_XY_GLCANVAS, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_XY_GLCANVAS")); - FlexGridSizer11->Add( - m_glGlobalHMTMap, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - Panel7->SetSizer(FlexGridSizer11); - FlexGridSizer11->Fit(Panel7); - FlexGridSizer11->SetSizeHints(Panel7); - FlexGridSizer10->Add(Panel7, 1, wxEXPAND, 0); - Panel6->SetSizer(FlexGridSizer10); - FlexGridSizer10->SetSizeHints(Panel6); - Panel10 = new wxPanel( - SplitterWindow2, ID_PANEL12, wxDefaultPosition, wxSize(100, 100), - wxTAB_TRAVERSAL, _T("ID_PANEL12")); - Panel10->SetMinSize(wxSize(100, 100)); - FlexGridSizer12 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer12->AddGrowableCol(0); - FlexGridSizer12->AddGrowableRow(1); - StaticText4 = new wxStaticText( - Panel10, ID_STATICTEXT4, _("Selected area local map"), - wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT4")); - wxFont StaticText4Font = wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT); - if (!StaticText4Font.Ok()) - StaticText4Font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - StaticText4Font.SetPointSize( - (int)(StaticText4Font.GetPointSize() * 1.000000)); - StaticText4Font.SetWeight(wxFONTWEIGHT_BOLD); - StaticText4->SetFont(StaticText4Font); - FlexGridSizer12->Add( - StaticText4, 1, - wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); - Panel11 = new wxPanel( - Panel10, ID_PANEL13, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL13")); - FlexGridSizer13 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer13->AddGrowableCol(0); - FlexGridSizer13->AddGrowableRow(0); - m_glLocalArea = new CMyGLCanvas( - Panel11, ID_CUSTOM1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_CUSTOM1")); - FlexGridSizer13->Add( - m_glLocalArea, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - Panel11->SetSizer(FlexGridSizer13); - FlexGridSizer13->Fit(Panel11); - FlexGridSizer13->SetSizeHints(Panel11); - FlexGridSizer12->Add(Panel11, 1, wxEXPAND, 0); - Panel10->SetSizer(FlexGridSizer12); - FlexGridSizer12->SetSizeHints(Panel10); - SplitterWindow2->SplitHorizontally(Panel6, Panel10); - BoxSizer1->Add(SplitterWindow2, 1, wxEXPAND, 0); - Panel4->SetSizer(BoxSizer1); - BoxSizer1->Fit(Panel4); - BoxSizer1->SetSizeHints(Panel4); - SplitterWindow1->SplitVertically(Panel3, Panel4); - FlexGridSizer4->Add( - SplitterWindow1, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - panMapView->SetSizer(FlexGridSizer4); - FlexGridSizer4->Fit(panMapView); - FlexGridSizer4->SetSizeHints(panMapView); - Notebook1->AddPage(panConfig, _("SLAM parameters"), false); - Notebook1->AddPage(panMapView, _("HMT-MAP view"), true); - FlexGridSizer3->Add( - Notebook1, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 1); - Panel2->SetSizer(FlexGridSizer3); - FlexGridSizer3->Fit(Panel2); - FlexGridSizer3->SetSizeHints(Panel2); - FlexGridSizer1->Add(Panel2, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_BOTTOM, 0); - SetSizer(FlexGridSizer1); - MenuBar1 = new wxMenuBar(); - Menu1 = new wxMenu(); - MenuItem3 = new wxMenuItem( - Menu1, ID_MENUITEM1, _("Reset HMT map"), wxEmptyString, wxITEM_NORMAL); - Menu1->Append(MenuItem3); - Menu1->AppendSeparator(); - MenuItem4 = new wxMenuItem( - Menu1, ID_MENUITEM2, _("Load state..."), wxEmptyString, wxITEM_NORMAL); - Menu1->Append(MenuItem4); - MenuItem5 = new wxMenuItem( - Menu1, ID_MENUITEM3, _("Save state..."), wxEmptyString, wxITEM_NORMAL); - Menu1->Append(MenuItem5); - Menu1->AppendSeparator(); - MenuItem1 = new wxMenuItem( - Menu1, idMenuQuit, _("Quit\tAlt-F4"), _("Quit the application"), - wxITEM_NORMAL); - Menu1->Append(MenuItem1); - MenuBar1->Append(Menu1, _("&File")); - Menu3 = new wxMenu(); - MenuItem8 = new wxMenuItem( - Menu3, ID_MENUITEM6, _("Set parameters"), wxEmptyString, wxITEM_NORMAL); - Menu3->Append(MenuItem8); - Menu3->AppendSeparator(); - MenuItem6 = new wxMenuItem( - Menu3, ID_MENUITEM4, _("Start SLAM"), wxEmptyString, wxITEM_NORMAL); - Menu3->Append(MenuItem6); - MenuItem7 = new wxMenuItem( - Menu3, ID_MENUITEM5, _("Pause SLAM"), wxEmptyString, wxITEM_NORMAL); - Menu3->Append(MenuItem7); - MenuBar1->Append(Menu3, _("Map Building")); - Menu2 = new wxMenu(); - MenuItem2 = new wxMenuItem( - Menu2, idMenuAbout, _("About\tF1"), - _("Show info about this application"), wxITEM_NORMAL); - Menu2->Append(MenuItem2); - MenuBar1->Append(Menu2, _("Help")); - SetMenuBar(MenuBar1); - StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1, 0, _T("ID_STATUSBAR1")); - int __wxStatusBarWidths_1[1] = {-1}; - int __wxStatusBarStyles_1[1] = {wxSB_NORMAL}; - StatusBar1->SetFieldsCount(1, __wxStatusBarWidths_1); - StatusBar1->SetStatusStyles(1, __wxStatusBarStyles_1); - SetStatusBar(StatusBar1); - FlexGridSizer1->SetSizeHints(this); - - Bind(wxEVT_BUTTON, &hmt_slam_guiFrame::OnbtnResetClick, this, ID_BUTTON1); - Bind(wxEVT_BUTTON, &hmt_slam_guiFrame::OnbtnLoadClick, this, ID_BUTTON2); - Bind(wxEVT_BUTTON, &hmt_slam_guiFrame::OnbtnSaveClick, this, ID_BUTTON3); - Bind(wxEVT_BUTTON, &hmt_slam_guiFrame::OnbtnStartClick, this, ID_BUTTON4); - Bind(wxEVT_BUTTON, &hmt_slam_guiFrame::OnbtnPauseClick, this, ID_BUTTON6); - Bind( - wxEVT_BUTTON, &hmt_slam_guiFrame::OnbtnShowLogWinClick, this, - ID_BUTTON12); - Bind(wxEVT_BUTTON, &hmt_slam_guiFrame::OnAbout, this, ID_BUTTON10); - Bind(wxEVT_BUTTON, &hmt_slam_guiFrame::OnQuit, this, ID_BUTTON5); - Bind( - wxEVT_BUTTON, &hmt_slam_guiFrame::OnbtnPickRawlogClick, this, - ID_BUTTON11); - Bind( - wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, - &hmt_slam_guiFrame::OnNotebook2PageChanged, this, ID_NOTEBOOK2); - Bind(wxEVT_MENU, &hmt_slam_guiFrame::OnbtnResetClick, this, ID_MENUITEM1); - Bind(wxEVT_MENU, &hmt_slam_guiFrame::OnbtnLoadClick, this, ID_MENUITEM2); - Bind(wxEVT_MENU, &hmt_slam_guiFrame::OnbtnSaveClick, this, ID_MENUITEM3); - Bind(wxEVT_MENU, &hmt_slam_guiFrame::OnQuit, this, idMenuQuit); - Bind( - wxEVT_MENU, &hmt_slam_guiFrame::OnMenuSetSLAMParameter, this, - ID_MENUITEM6); - Bind(wxEVT_MENU, &hmt_slam_guiFrame::OnbtnStartClick, this, ID_MENUITEM4); - Bind(wxEVT_MENU, &hmt_slam_guiFrame::OnbtnPauseClick, this, ID_MENUITEM5); - Bind(wxEVT_MENU, &hmt_slam_guiFrame::OnAbout, this, idMenuAbout); - //*) - - // Initialize data ======================================================== - - // Create log window: - m_logWin = new CDlgLog(this); - // { wxCommandEvent dum; OnbtnShowLogWinClick(dum); } - - cout << "Initializing HMT-SLAM visual application...\n"; - - m_hmtslam = std::make_unique(); - - cout << "Initializing HMT-SLAM visual application DONE.\n"; - - // Reset HMT map: - { - wxCommandEvent dum; - OnbtnResetClick(dum); - } - - // Launch Thread: - m_hThreadHMTSLAM = std::thread(&hmt_slam_guiFrame::thread_HMTSLAM, this); - - // Set default size of the window: - this->SetSize(600, 500); - this->Maximize(); -} - -hmt_slam_guiFrame::~hmt_slam_guiFrame() -{ - WX_START_TRY - - // Stop thread: - m_thread_in_queue.push(new TThreadMsg(OP_QUIT_THREAD)); - if (m_hThreadHMTSLAM.joinable()) m_hThreadHMTSLAM.join(); - - //(*Destroy(hmt_slam_guiFrame) - //*) - - WX_END_TRY -} - -void hmt_slam_guiFrame::OnQuit(wxCommandEvent&) { Close(); } -void hmt_slam_guiFrame::OnAbout(wxCommandEvent&) -{ - mrpt::gui::show_mrpt_about_box_wxWidgets(this, "htm-slam-gui"); -} - -void hmt_slam_guiFrame::OnNotebook2PageChanged(wxNotebookEvent& event) {} -void hmt_slam_guiFrame::loadHMTConfigFromSettings() -{ - std::string s; - - // From the text block: - s += std::string(edRestParams->GetValue().mb_str()); - - CConfigFileMemory cfg(s); - - // From GUI controls: - cfg.write( - "HMT-SLAM", "rawlog_file", - std::string(this->edInputRawlog->GetValue().mb_str())); - - // Load - m_hmtslam->loadOptions(cfg); -} - -// RESET ======= -void hmt_slam_guiFrame::OnbtnResetClick(wxCommandEvent& event) -{ - WX_START_TRY - - this->loadHMTConfigFromSettings(); - m_hmtslam->initializeEmptyMap(); - updateAllMapViews(); - - WX_END_TRY -} - -void hmt_slam_guiFrame::OnbtnLoadClick(wxCommandEvent& event) -{ - string fil; - if (AskForOpenHMTMap(fil)) loadHTMSLAMFromFile(fil); -} - -bool hmt_slam_guiFrame::loadHTMSLAMFromFile(const std::string& filePath) -{ - WX_START_TRY - - if (!fileExists(filePath)) - { - wxMessageBox( - string(string("File doesn't exist:\n") + filePath).c_str(), - _("Error loading file"), wxOK, this); - return false; - } - - wxBusyCursor busy; - - // Save the path - WX_START_TRY - string the_path(extractFileDirectory(filePath)); - // iniFile->write(iniFileSect,"LastDir", the_path ); - WX_END_TRY - - // Load - { - CFileGZInputStream f(filePath); - mrpt::serialization::archiveFrom(f) >> *m_hmtslam; - } - - m_curFileOpen = filePath; - - // Refresh views: - // --------------------------- - - // The tree: - rebuildTreeView(); - - // The global map: - updateGlobalMapView(); - - return true; - - WX_END_TRY - - return false; -} - -void hmt_slam_guiFrame::rebuildTreeView() -{ - WX_START_TRY - - wxBusyCursor waitCursor; - treeView->DeleteAllItems(); - - treeView->SetQuickBestSize(true); - - // Root element & Areas: - wxTreeItemId root = treeView->AddRoot(_("Areas"), 0, -1, nullptr); - - CHierarchicalMHMap::const_iterator it; - size_t i; - - for (i = 0, it = m_hmtslam->m_map.begin(); it != m_hmtslam->m_map.end(); - it++, i++) - { - string str = format("Area %i", (int)it->second->getID()); - - // wxTreeItemId treeNode = - treeView->AppendItem( - root, str.c_str(), 0, -1, new CItemData(it->second, i)); - } - - treeView->ExpandAll(); - - // List of hypotheses: - cbHypos->Clear(); - - for (const auto& h : m_hmtslam->m_LMHs) - cbHypos->Append(format("%i", (int)h.first)); - - cbHypos->SetSelection(0); - - WX_END_TRY -} - -//------------------------------------------------------------------------ -// Asks the user for a file, return false if user cancels -//------------------------------------------------------------------------ -bool hmt_slam_guiFrame::AskForOpenHMTMap(std::string& fil) -{ - wxString caption = wxT("Choose a file to open"); - wxString wildcard = wxT( - "HMT-SLAM files (*.hmtslam;*.hmtslam.gz)|*.hmtslam;*.hmtslam.gz|All " - "files (*.*)|*.*"); - wxString defaultDir; - wxString defaultFilename; - - wxFileDialog dialog( - this, caption, defaultDir, defaultFilename, wildcard, - wxFD_OPEN | wxFD_FILE_MUST_EXIST); - - if (dialog.ShowModal() == wxID_OK) - { - fil = string(dialog.GetPath().mb_str()); - return true; - } - else - return false; -} - -void hmt_slam_guiFrame::OnbtnSaveClick(wxCommandEvent& event) {} -void hmt_slam_guiFrame::OnbtnStartClick(wxCommandEvent& event) -{ - m_thread_in_queue.push(new TThreadMsg(OP_START_SLAM)); -} - -void hmt_slam_guiFrame::OnbtnPauseClick(wxCommandEvent& event) -{ - m_thread_in_queue.push(new TThreadMsg(OP_PAUSE_SLAM)); -} - -void hmt_slam_guiFrame::OnMenuSetSLAMParameter(wxCommandEvent& event) {} -void hmt_slam_guiFrame::OnbtnPickRawlogClick(wxCommandEvent& event) {} -void hmt_slam_guiFrame::OnbtnShowLogWinClick(wxCommandEvent& event) -{ - if (m_logWin->IsVisible()) - { - m_logWin->Hide(); - btnShowLogWin->SetValue(false); - btnShowLogWin->Refresh(); - } - else - { - m_logWin->Show(); - btnShowLogWin->SetValue(true); - btnShowLogWin->Refresh(); - } -} diff --git a/apps/hmt-slam-gui/hmt_slam_guiMain.h b/apps/hmt-slam-gui/hmt_slam_guiMain.h deleted file mode 100644 index 618de2b7ce..0000000000 --- a/apps/hmt-slam-gui/hmt_slam_guiMain.h +++ /dev/null @@ -1,252 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#ifndef HMT_SLAM_GUIMAIN_H -#define HMT_SLAM_GUIMAIN_H - -#include - -#include "CDlgLog.h" - -//(*Headers(hmt_slam_guiFrame) -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "MyGLCanvas.h" -//*) - -#include - -// JLBC: Unix X headers have these funny things... -#ifdef Button1 -#undef Button1 -#undef Button2 -#undef Button3 -#endif - -#include - -#include // unique_ptr - -class CDlgLog; - -class hmt_slam_guiFrame : public wxFrame -{ - friend class CDlgLog; - - public: - public: - hmt_slam_guiFrame(wxWindow* parent, wxWindowID id = -1); - ~hmt_slam_guiFrame() override; - - private: - //(*Handlers(hmt_slam_guiFrame) - void OnQuit(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); - void OnNotebook2PageChanged(wxNotebookEvent& event); - void OnbtnResetClick(wxCommandEvent& event); - void OnbtnLoadClick(wxCommandEvent& event); - void OnbtnSaveClick(wxCommandEvent& event); - void OnbtnStartClick(wxCommandEvent& event); - void OnbtnPauseClick(wxCommandEvent& event); - void OnMenuSetSLAMParameter(wxCommandEvent& event); - void OnbtnPickRawlogClick(wxCommandEvent& event); - void OnbtnShowLogWinClick(wxCommandEvent& event); - //*) - - //(*Identifiers(hmt_slam_guiFrame) - static const long ID_BUTTON1; - static const long ID_STATICLINE3; - static const long ID_BUTTON2; - static const long ID_BUTTON3; - static const long ID_STATICLINE1; - static const long ID_BUTTON4; - static const long ID_BUTTON6; - static const long ID_STATICLINE2; - static const long ID_BUTTON12; - static const long ID_BUTTON10; - static const long ID_BUTTON5; - static const long ID_PANEL1; - static const long ID_STATICTEXT1; - static const long ID_TEXTCTRL1; - static const long ID_BUTTON11; - static const long ID_STATICTEXT6; - static const long ID_TEXTCTRL2; - static const long ID_PANEL3; - static const long ID_STATICTEXT2; - static const long ID_CHOICE1; - static const long ID_TREECTRL1; - static const long ID_PANEL15; - static const long ID_PANEL17; - static const long ID_PANEL16; - static const long ID_NOTEBOOK2; - static const long ID_STATICTEXT5; - static const long ID_BUTTON7; - static const long ID_BUTTON8; - static const long ID_BUTTON9; - static const long ID_PANEL14; - static const long ID_PANEL8; - static const long ID_PANEL5; - static const long ID_STATICTEXT3; - static const long ID_XY_GLCANVAS; - static const long ID_PANEL11; - static const long ID_PANEL10; - static const long ID_STATICTEXT4; - static const long ID_CUSTOM1; - static const long ID_PANEL13; - static const long ID_PANEL12; - static const long ID_SPLITTERWINDOW2; - static const long ID_PANEL7; - static const long ID_SPLITTERWINDOW1; - static const long ID_PANEL4; - static const long ID_NOTEBOOK1; - static const long ID_PANEL2; - static const long ID_MENUITEM1; - static const long ID_MENUITEM2; - static const long ID_MENUITEM3; - static const long idMenuQuit; - static const long ID_MENUITEM6; - static const long ID_MENUITEM4; - static const long ID_MENUITEM5; - static const long idMenuAbout; - static const long ID_STATUSBAR1; - //*) - - //(*Declarations(hmt_slam_guiFrame) - wxCustomButton* btnShowLogWin; - wxButton* btnPickRawlog; - wxPanel* Panel11; - wxPanel* Panel6; - wxPanel* Panel1; - wxTextCtrl* edRestParams; - wxPanel* Panel7; - wxStaticLine* StaticLine2; - wxCustomButton* btnReset; - wxStatusBar* StatusBar1; - wxChoice* cbHypos; - wxMenu* Menu3; - wxPanel* Panel12; - wxCustomButton* btnSave; - wxCustomButton* btnAbout; - wxPanel* Panel8; - wxStaticText* StaticText1; - wxPanel* Panel10; - wxCustomButton* btnAddNode; - wxPanel* Panel2; - wxSplitterWindow* SplitterWindow1; - wxTextCtrl* edInputRawlog; - wxStaticText* StaticText3; - wxPanel* Panel4; - wxSplitterWindow* SplitterWindow2; - wxMenuItem* MenuItem3; - wxCustomButton* btnAddArc; - wxStaticLine* StaticLine1; - wxPanel* panTreeView; - wxCustomButton* btnStart; - wxPanel* panMapView; - wxStaticLine* StaticLine3; - wxCustomButton* btnLoad; - wxPanel* Panel3; - wxPanel* Panel15; - wxCustomButton* btnPause; - wxCustomButton* btnImportArea; - wxPanel* panConfig; - wxNotebook* Notebook2; - wxPanel* Panel14; - wxStaticText* StaticText4; - wxStaticText* StaticText5; - wxStaticText* StaticText2; - wxNotebook* Notebook1; - wxMenuItem* MenuItem7; - wxMenuItem* MenuItem4; - wxStaticText* StaticText6; - wxTreeCtrl* treeView; - CMyGLCanvas* m_glLocalArea; - CMyGLCanvas* m_glGlobalHMTMap; - wxCustomButton* btnQuit; - //*) - - DECLARE_EVENT_TABLE() - - // DATA ============================= - CDlgLog* m_logWin; - - /** The main HMT-SLAM object, keeps the HMT map and does HMT SLAM. */ - std::unique_ptr m_hmtslam; - - // DATA ABOUT THREAD OF HMT-SLAM ---------------| - /** Handle of HMT-SLAM thread */ - std::thread m_hThreadHMTSLAM; - - void thread_HMTSLAM(); - - enum THREAD_OPCODE - { - OP_QUIT_THREAD = 0, - OP_START_SLAM, - OP_PAUSE_SLAM - }; - - struct TThreadMsg - { - TThreadMsg(THREAD_OPCODE op) : opcode(op) {} - THREAD_OPCODE opcode; - }; - - mrpt::containers::CThreadSafeQueue m_thread_in_queue, - m_thread_out_queue; - - // ---------------------------------------------| - - std::string m_curFileOpen; - - // METHODS: - bool AskForOpenHMTMap(std::string& fil); - bool loadHTMSLAMFromFile(const std::string& filePath); - - void loadHMTConfigFromSettings(); - - void rebuildTreeView(); - void updateGlobalMapView(); - void updateLocalMapView(); - - void updateAllMapViews() - { - rebuildTreeView(); - updateGlobalMapView(); - updateLocalMapView(); - } -}; - -// Auxiliary class for the tree data -class CItemData : public wxTreeItemData -{ - public: - mrpt::serialization::CSerializable::Ptr m_ptr; - size_t m_itemIndex; - - CItemData(mrpt::serialization::CSerializable::Ptr ptr, size_t itemIndex) - : m_ptr(ptr), m_itemIndex(itemIndex) - { - } -}; - -#endif // HMT_SLAM_GUIMAIN_H diff --git a/apps/hmt-slam-gui/imgs/icon_about.xpm b/apps/hmt-slam-gui/imgs/icon_about.xpm deleted file mode 100644 index a2a90f2ca6..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_about.xpm +++ /dev/null @@ -1,370 +0,0 @@ -/* XPM */ -static const char * icon_about_xpm[] = { -"24 24 343 2", -" c None", -". c #1158AE", -"+ c #2568B6", -"@ c #3171BB", -"# c #2F70BA", -"$ c #1E62B3", -"% c #0E56AD", -"& c #3D79BF", -"* c #719ED0", -"= c #96B8DD", -"- c #ADC8E5", -"; c #B7CFE9", -"> c #B5CDE8", -", c #A7C4E3", -"' c #8BB0D9", -") c #6193CB", -"! c #2C6DB8", -"~ c #3473BC", -"{ c #7FA9D6", -"] c #B9D0E9", -"^ c #CADDEF", -"/ c #CBDDF0", -"( c #CADDF0", -"_ c #C8DBEE", -": c #AAC7E4", -"< c #6596CD", -"[ c #2064B4", -"} c #1059AF", -"| c #5A8FCA", -"1 c #A5C4E3", -"2 c #BCD4EC", -"3 c #BBD4EC", -"4 c #D3E3F3", -"5 c #E9F1F9", -"6 c #E6EFF8", -"7 c #BCD4EB", -"8 c #BAD2EA", -"9 c #91B6DD", -"0 c #3F7CC0", -"a c #0C56AD", -"b c #548CCA", -"c c #A6C5E5", -"d c #AECBE8", -"e c #AECCE9", -"f c #AFCDEA", -"g c #B0CEEB", -"h c #B5D1EC", -"i c #EDF4FA", -"j c #FFFFFF", -"k c #D9E7F5", -"l c #B0CEEA", -"m c #ADCBE8", -"n c #94B9DF", -"o c #3374BD", -"p c #3A7BC2", -"q c #95BAE0", -"r c #A1C3E5", -"s c #A2C5E6", -"t c #A4C7E8", -"u c #A5C9E9", -"v c #A7CAEA", -"w c #A7C9EA", -"x c #DAE6F4", -"y c #FDFEFE", -"z c #C4DAEF", -"A c #A5C9EA", -"B c #A6C9E9", -"C c #A3C6E7", -"D c #A1C4E6", -"E c #A1C3E4", -"F c #7DAAD8", -"G c #1F64B4", -"H c #2068B8", -"I c #72A4D6", -"J c #94BBE2", -"K c #95BEE3", -"L c #98C0E6", -"M c #9AC2E7", -"N c #9CC5E9", -"O c #9DC6EA", -"P c #A1C6E8", -"Q c #B4D2EB", -"R c #B3D2EC", -"S c #9DC5E9", -"T c #9EC7EB", -"U c #9CC5EA", -"V c #9AC3E8", -"W c #99C1E6", -"X c #96BFE5", -"Y c #93BCE2", -"Z c #91B9E0", -"` c #548ECB", -" . c #3C7DC3", -".. c #82B1DD", -"+. c #88B5E1", -"@. c #8BB9E3", -"#. c #8EBCE6", -"$. c #91BFE8", -"%. c #93C2EA", -"&. c #95C4EB", -"*. c #96C5EC", -"=. c #C2DDF4", -"-. c #E7F1FA", -";. c #E0EEF9", -">. c #ACD1F0", -",. c #95C4EC", -"'. c #94C3EA", -"). c #92C0E9", -"!. c #8FBEE7", -"~. c #8DBBE4", -"{. c #89B7E2", -"]. c #87B4DF", -"^. c #72A5D8", -"/. c #2164B0", -"(. c #4C8BCB", -"_. c #7DAFDE", -":. c #7FB2E0", -"<. c #82B6E4", -"[. c #86BAE6", -"}. c #89BDE9", -"|. c #8CC0EB", -"1. c #8EC3ED", -"2. c #93C6EF", -"3. c #E2F0FB", -"4. c #BDDDF5", -"5. c #8DC3ED", -"6. c #8DC1EC", -"7. c #8ABEEA", -"8. c #87BBE8", -"9. c #84B8E5", -"0. c #80B4E2", -"a. c #7DAFDF", -"b. c #76A9DB", -"c. c #3173BA", -"d. c #3982CA", -"e. c #5D9ED9", -"f. c #70ACE0", -"g. c #7AB4E5", -"h. c #7FB8E8", -"i. c #82BCEB", -"j. c #85C0EE", -"k. c #88C3F0", -"l. c #8EC7F2", -"m. c #E2F1FC", -"n. c #BADDF7", -"o. c #87C3F0", -"p. c #86C1EF", -"q. c #83BDEC", -"r. c #80BAE9", -"s. c #7CB6E6", -"t. c #76B0E2", -"u. c #69A6DD", -"v. c #5296D5", -"w. c #2870BC", -"x. c #2B7CCA", -"y. c #3789D3", -"z. c #4796DA", -"A. c #5CA6E2", -"B. c #6DB2E9", -"C. c #77BAED", -"D. c #7EC0F1", -"E. c #82C4F4", -"F. c #89C8F6", -"G. c #E1F1FD", -"H. c #B7DEFA", -"I. c #81C4F4", -"J. c #81C2F2", -"K. c #7BBDEF", -"L. c #73B6EB", -"M. c #67ADE6", -"N. c #539FDE", -"O. c #3E8FD6", -"P. c #3284CF", -"Q. c #226FBD", -"R. c #3081CE", -"S. c #3B8ED7", -"T. c #4196DC", -"U. c #499EE2", -"V. c #53A7E8", -"W. c #5DB0EE", -"X. c #68B9F3", -"Y. c #70C0F7", -"Z. c #7BC6FA", -"`. c #DEF1FE", -" + c #AFDDFC", -".+ c #72C1F8", -"++ c #6DBCF5", -"@+ c #63B4F0", -"#+ c #58ABEB", -"$+ c #4EA2E5", -"%+ c #4599DF", -"&+ c #3D91D9", -"*+ c #378AD4", -"=+ c #2572C1", -"-+ c #2E7DCC", -";+ c #4094DB", -">+ c #479CE1", -",+ c #50A5E7", -"'+ c #57ADED", -")+ c #5DB4F3", -"!+ c #64BBF8", -"~+ c #6AC1FC", -"{+ c #75C8FE", -"]+ c #DCF1FF", -"^+ c #ABDEFF", -"/+ c #6AC3FD", -"(+ c #67BEFA", -"_+ c #60B8F5", -":+ c #5AB0F0", -"<+ c #53A9EA", -"[+ c #4BA0E4", -"}+ c #4397DD", -"|+ c #3D90D9", -"1+ c #226CBB", -"2+ c #2D79C9", -"3+ c #499DE1", -"4+ c #55AAEB", -"5+ c #5DB3F2", -"6+ c #6CC3FD", -"7+ c #76CAFF", -"8+ c #85D1FF", -"9+ c #E1F4FF", -"0+ c #B5E3FF", -"a+ c #79CBFF", -"b+ c #70C6FE", -"c+ c #67BFFA", -"d+ c #60B6F4", -"e+ c #58AEEE", -"f+ c #479BE0", -"g+ c #4699DF", -"h+ c #1D60AF", -"i+ c #165CB3", -"j+ c #4EA0E4", -"k+ c #52A7E8", -"l+ c #61B8F5", -"m+ c #69C0FC", -"n+ c #75C9FF", -"o+ c #83D1FF", -"p+ c #92D8FF", -"q+ c #E1F3FE", -"r+ c #BEE7FF", -"s+ c #87D3FF", -"t+ c #7CCDFF", -"u+ c #6DC4FE", -"v+ c #5CB3F2", -"w+ c #52A6E7", -"x+ c #408FD9", -"y+ c #0A438E", -"z+ c #003D94", -"A+ c #2670C4", -"B+ c #60B0ED", -"C+ c #61B6F3", -"D+ c #64BCF9", -"E+ c #6FC5FE", -"F+ c #7FCFFF", -"G+ c #91D7FF", -"H+ c #9EDDFE", -"I+ c #AFD5F0", -"J+ c #CCDFF0", -"K+ c #C5DCEF", -"L+ c #A8DBF8", -"M+ c #97DBFF", -"N+ c #88D3FF", -"O+ c #76C9FF", -"P+ c #68C0FB", -"Q+ c #5FB6F4", -"R+ c #61B4F0", -"S+ c #54A3E5", -"T+ c #1F65B6", -"U+ c #02429A", -"V+ c #2F7ACB", -"W+ c #6FBDF4", -"X+ c #71C5FC", -"Y+ c #74C8FF", -"Z+ c #87D2FF", -"`+ c #9ADCFF", -" @ c #ABE5FF", -".@ c #B2E6FB", -"+@ c #AFDFF5", -"@@ c #B0E2F7", -"#@ c #AFE6FE", -"$@ c #A1E0FF", -"%@ c #90D7FF", -"&@ c #6DC4FD", -"*@ c #73C4F9", -"=@ c #62AFEB", -"-@ c #2B74C2", -";@ c #134886", -">@ c #084AA0", -",@ c #3783CE", -"'@ c #77C1F3", -")@ c #8CD4FE", -"!@ c #93D9FF", -"~@ c #B2E8FF", -"{@ c #C6F3FF", -"]@ c #D4FAFF", -"^@ c #CEF7FF", -"/@ c #BBEDFF", -"(@ c #A7E3FF", -"_@ c #8DD5FF", -":@ c #87D0FC", -"<@ c #68B3EB", -"[@ c #3681C8", -"}@ c #1F5896", -"|@ c #15549E", -"1@ c #2E78C2", -"2@ c #5AA2DE", -"3@ c #84C4F2", -"4@ c #A4DCFC", -"5@ c #B8EAFE", -"6@ c #C9F4FF", -"7@ c #D0F8FF", -"8@ c #C2F0FF", -"9@ c #B0E4FE", -"0@ c #98D4F9", -"a@ c #78BCED", -"b@ c #55A0DA", -"c@ c #3A82C2", -"d@ c #275D91", -"e@ c #1A4D86", -"f@ c #296AAE", -"g@ c #3F85C9", -"h@ c #5E9FDE", -"i@ c #7BB4EC", -"j@ c #96C5F5", -"k@ c #A5CEFA", -"l@ c #A1CCF9", -"m@ c #8EC1F3", -"n@ c #75B1E9", -"o@ c #5DA2DD", -"p@ c #4B92CA", -"q@ c #3C7AAC", -"r@ c #264E70", -"s@ c #275986", -"t@ c #3773A8", -"u@ c #4585BB", -"v@ c #5393C8", -"w@ c #5C9BCF", -"x@ c #5E9DD0", -"y@ c #5A9ACA", -"z@ c #5290BD", -"A@ c #457EA5", -"B@ c #2F5875", -" ", -" . + @ # $ ", -" % & * = - ; > , ' ) ! ", -" ~ { ] ^ / ^ / ^ ( / _ : < [ ", -" } | 1 2 3 3 2 4 5 6 ( 3 3 7 8 9 0 ", -" a b c d e f g h i j j k g l e m d n o ", -" p q r s t u v w x j y z A B t C D E F G ", -" H I J K L M N O O P Q R S T U V W X Y Z ` ", -" ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./. ", -" (._.:.<.[.}.|.1.2.3.j j 4.5.6.7.8.9.0.a.b.c. ", -" d.e.f.g.h.i.j.k.l.m.j j n.o.p.q.r.s.t.u.v.w. ", -" x.y.z.A.B.C.D.E.F.G.j j H.I.J.K.L.M.N.O.P.Q. ", -" R.S.T.U.V.W.X.Y.Z.`.j j +.+++@+#+$+%+&+*+=+ ", -" -+;+>+,+'+)+!+~+{+]+j j ^+/+(+_+:+<+[+}+|+1+ ", -" 2+3+[+4+5+!+6+7+8+9+j j 0+a+b+c+d+e+,+f+g+h+ ", -" i+j+k+e+l+m+n+o+p+q+j j r+s+t+u+!+v+<+w+x+y+ ", -" z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+ ", -" U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@t+&@*@=@-@;@ ", -" >@,@'@)@!@$@~@{@]@^@/@(@M+_@:@<@[@}@ ", -" |@1@2@3@4@5@6@]@7@8@9@0@a@b@c@d@ ", -" e@f@g@h@i@j@k@l@m@n@o@p@q@r@ ", -" s@t@u@v@w@x@y@z@A@B@ ", -" ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/icon_exit.xpm b/apps/hmt-slam-gui/imgs/icon_exit.xpm deleted file mode 100644 index ee5d53d5f5..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_exit.xpm +++ /dev/null @@ -1,453 +0,0 @@ -/* XPM */ -static const char * icon_exit_xpm[] = { -"24 24 426 2", -" c None", -". c #C08484", -"+ c #CD9E9E", -"@ c #D3A9A9", -"# c #D5ADAD", -"$ c #D7AFAF", -"% c #D9B2B2", -"& c #DBB4B4", -"* c #DCB6B6", -"= c #DEB9B9", -"- c #E0BBBB", -"; c #E1BDBD", -"> c #E2C0C0", -", c #E3C2C2", -"' c #E4C4C4", -") c #E5C6C6", -"! c #E6C8C8", -"~ c #E6C9C9", -"{ c #E5C7C7", -"] c #E0C0C0", -"^ c #B36F6F", -"/ c #C89797", -"( c #C69595", -"_ c #C79292", -": c #C99494", -"< c #CC9696", -"[ c #CE9898", -"} c #D09A9A", -"| c #D29C9C", -"1 c #D39D9D", -"2 c #D49D9D", -"3 c #D7A0A0", -"4 c #D9A3A3", -"5 c #DAA5A5", -"6 c #DBA7A7", -"7 c #DCA9A9", -"8 c #DDABAB", -"9 c #DDADAD", -"0 c #DEB0B0", -"a c #E2BCBC", -"b c #AC6464", -"c c #C08585", -"d c #C28686", -"e c #C58888", -"f c #C78A8A", -"g c #CA8B8B", -"h c #CC8D8D", -"i c #CF8F8F", -"j c #D19191", -"k c #CF9898", -"l c #D3B0B0", -"m c #D3A5A5", -"n c #D79898", -"o c #D99A9A", -"p c #DB9C9C", -"q c #DC9E9E", -"r c #DDA0A0", -"s c #DDA2A2", -"t c #DEA4A4", -"u c #DDA5A5", -"v c #DFACAC", -"w c #C18989", -"x c #A14D4D", -"y c #BE7B7B", -"z c #C07B7B", -"A c #C47D7D", -"B c #C67F7F", -"C c #C98181", -"D c #CB8383", -"E c #CE8585", -"F c #D08585", -"G c #E4C1C1", -"H c #FEFFFF", -"I c #F4E8E8", -"J c #DB9999", -"K c #DA8F8F", -"L c #DC9292", -"M c #DD9494", -"N c #DE9696", -"O c #DF9797", -"P c #E09999", -"Q c #E09B9B", -"R c #DD9696", -"S c #A84949", -"T c #983A3A", -"U c #BC7070", -"V c #BF7171", -"W c #C27373", -"X c #C57575", -"Y c #C87777", -"Z c #CA7777", -"` c #CD7979", -" . c #D07B7B", -".. c #ECCACA", -"+. c #FFFFFF", -"@. c #FBF3F3", -"#. c #D98282", -"$. c #DA8484", -"%. c #DF8989", -"&. c #E08C8C", -"*. c #E18D8D", -"=. c #E38F8F", -"-. c #E39292", -";. c #DE8686", -">. c #9E2A2A", -",. c #922B2B", -"'. c #BB6666", -"). c #BE6969", -"!. c #C26B6B", -"~. c #C56C6C", -"{. c #C88585", -"]. c #CB8B8B", -"^. c #CE7474", -"/. c #EDC6C6", -"(. c #FBF2F2", -"_. c #DE9292", -":. c #DAA6A6", -"<. c #DDB3B3", -"[. c #DB8989", -"}. c #E28181", -"|. c #E48484", -"1. c #E58686", -"2. c #E78A8A", -"3. c #DE7171", -"4. c #9D1414", -"5. c #8F2121", -"6. c #B85B5B", -"7. c #BD5F5F", -"8. c #C16060", -"9. c #C26363", -"0. c #D39E9E", -"a. c #F4EBEB", -"b. c #F8F4F4", -"c. c #DB9393", -"d. c #ECC0C0", -"e. c #FBEFEF", -"f. c #E6A1A1", -"g. c #FAF3F3", -"h. c #EFD8D8", -"i. c #E08E8E", -"j. c #E67878", -"k. c #E97C7C", -"l. c #E97676", -"m. c #D92E2E", -"n. c #9F0000", -"o. c #8F1C1C", -"p. c #B75050", -"q. c #BC5454", -"r. c #BF5555", -"s. c #CF8C8C", -"t. c #F9F4F4", -"u. c #F9EBEB", -"v. c #DC8282", -"w. c #EDBCBC", -"x. c #E58888", -"y. c #F3C2C2", -"z. c #FEFBFB", -"A. c #F1DADA", -"B. c #E57D7D", -"C. c #EC6E6E", -"D. c #E73636", -"E. c #D90202", -"F. c #A50101", -"G. c #8F1919", -"H. c #B64747", -"I. c #BC4A4A", -"J. c #C15C5C", -"K. c #EED9D9", -"L. c #F9E8E8", -"M. c #DC8080", -"N. c #D25555", -"O. c #EDBABA", -"P. c #FCEFEF", -"Q. c #E47676", -"R. c #E36464", -"S. c #F2B2B2", -"T. c #FFFCFC", -"U. c #EEB0B0", -"V. c #E83C3C", -"W. c #E50A08", -"X. c #DD0B08", -"Y. c #A80806", -"Z. c #911515", -"`. c #B53D3D", -" + c #BA3E3E", -".+ c #D38989", -"++ c #FDFCFC", -"@+ c #E39A9A", -"#+ c #CE4848", -"$+ c #D24A4A", -"%+ c #ECAFAF", -"&+ c #FBE8E8", -"*+ c #E56969", -"=+ c #E45353", -"-+ c #E85F5F", -";+ c #F9CFCF", -">+ c #F8DEDE", -",+ c #E62F2C", -"'+ c #E7120D", -")+ c #DF1912", -"!+ c #AA100C", -"~+ c #951212", -"{+ c #B43333", -"]+ c #BA3535", -"^+ c #E2AAAA", -"/+ c #D56161", -"(+ c #CF3E3E", -"_+ c #D34141", -":+ c #DE6464", -"<+ c #EFADAD", -"[+ c #EB8A8A", -"}+ c #E24C4C", -"|+ c #E64C4C", -"1+ c #E94B4B", -"2+ c #F5A2A2", -"3+ c #FDF7F7", -"4+ c #EC5752", -"5+ c #E91B13", -"6+ c #E2241A", -"7+ c #AD1811", -"8+ c #990F0F", -"9+ c #B32B2B", -"0+ c #B92C2C", -"a+ c #E3A9A9", -"b+ c #F7E1E1", -"c+ c #D04949", -"d+ c #CF3636", -"e+ c #D33939", -"f+ c #D73939", -"g+ c #DC3C3C", -"h+ c #DF3D3D", -"i+ c #E44141", -"j+ c #E74040", -"k+ c #E82B2B", -"l+ c #EF706E", -"m+ c #FFFEFE", -"n+ c #FFFDFD", -"o+ c #F06F69", -"p+ c #EA2319", -"q+ c #E42C21", -"r+ c #AE1D15", -"s+ c #9E0B0B", -"t+ c #B22020", -"u+ c #B82222", -"v+ c #E3A4A4", -"w+ c #F8E9E9", -"x+ c #D24B4B", -"y+ c #D02B2B", -"z+ c #D42E2E", -"A+ c #D93131", -"B+ c #DD3232", -"C+ c #E03030", -"D+ c #E32121", -"E+ c #E51212", -"F+ c #E40604", -"G+ c #EF7977", -"H+ c #FEFAFA", -"I+ c #F06861", -"J+ c #EB2B1F", -"K+ c #E73427", -"L+ c #B12219", -"M+ c #A30707", -"N+ c #B21717", -"O+ c #B61616", -"P+ c #DA8181", -"Q+ c #FEFDFD", -"R+ c #DB6F6F", -"S+ c #CF1E1E", -"T+ c #D42323", -"U+ c #D81E1E", -"V+ c #DB1414", -"W+ c #DD0808", -"X+ c #E10101", -"Y+ c #E40403", -"Z+ c #E40D0A", -"`+ c #F2A7A6", -" @ c #FDE8E7", -".@ c #EE4E44", -"+@ c #EC3325", -"@@ c #E93A2B", -"#@ c #B2261C", -"$@ c #A80505", -"%@ c #B10E0E", -"&@ c #B50D0D", -"*@ c #C73C3C", -"=@ c #F8E6E6", -"-@ c #EBBBBB", -";@ c #CD2121", -">@ c #D00303", -",@ c #D50101", -"'@ c #D90000", -")@ c #DE0000", -"!@ c #E30000", -"~@ c #E30503", -"{@ c #E5524F", -"]@ c #FAEAEA", -"^@ c #F8B4B0", -"/@ c #EC3529", -"(@ c #ED382A", -"_@ c #EB3F2E", -":@ c #B5291E", -"<@ c #AD0101", -"[@ c #AF0202", -"}@ c #B40202", -"|@ c #B90404", -"1@ c #DB7373", -"2@ c #ECB7B7", -"3@ c #D84D4D", -"4@ c #D30E0E", -"5@ c #D80101", -"6@ c #DD0202", -"7@ c #E02121", -"8@ c #EA7B7A", -"9@ c #F9E0E0", -"0@ c #FCDCDA", -"a@ c #EF554B", -"b@ c #EC3224", -"c@ c #EE3C2C", -"d@ c #ED4231", -"e@ c #BA2C20", -"f@ c #B20000", -"g@ c #B00000", -"h@ c #B50000", -"i@ c #BA0000", -"j@ c #C10808", -"k@ c #E28383", -"l@ c #FDF6F6", -"m@ c #FCF4F4", -"n@ c #F0C3C3", -"o@ c #EB9F9F", -"p@ c #EEA7A7", -"q@ c #F7D8D8", -"r@ c #FCE0DF", -"s@ c #EF5F57", -"t@ c #EB2C20", -"u@ c #ED3629", -"v@ c #EE3E2E", -"w@ c #EF4533", -"x@ c #BF2E22", -"y@ c #B70101", -"z@ c #B10000", -"A@ c #B60000", -"B@ c #BB0000", -"C@ c #C00000", -"D@ c #C60808", -"E@ c #E17272", -"F@ c #F9E1E1", -"G@ c #FEF9F9", -"H@ c #F9C8C6", -"I@ c #EE5750", -"J@ c #EA261B", -"K@ c #EB2F23", -"L@ c #ED3829", -"M@ c #EE3F2F", -"N@ c #EF4634", -"O@ c #C32F23", -"P@ c #BB0B0B", -"Q@ c #B10101", -"R@ c #BC0000", -"S@ c #C10000", -"T@ c #C50000", -"U@ c #CA0202", -"V@ c #D72828", -"W@ c #E46060", -"X@ c #EB7C7C", -"Y@ c #F19393", -"Z@ c #F28D8D", -"`@ c #F17775", -" # c #EE5956", -".# c #E92923", -"+# c #E91E16", -"@# c #EA281E", -"## c #EF4937", -"$# c #BE382E", -"%# c #BE2423", -"&# c #BE1717", -"*# c #B60101", -"=# c #CA0000", -"-# c #CF0000", -";# c #D30000", -"># c #D80000", -",# c #E20000", -"'# c #E40301", -")# c #E50B07", -"!# c #E7150F", -"~# c #EA261C", -"{# c #EB2E21", -"]# c #ED3527", -"^# c #F04333", -"/# c #E65043", -"(# c #CA3532", -"_# c #CC3332", -":# c #C82726", -"<# c #CC2626", -"[# c #CF2626", -"}# c #D42626", -"|# c #D82626", -"1# c #DB2626", -"2# c #E02625", -"3# c #E42625", -"4# c #E72626", -"5# c #E92B2A", -"6# c #EA322E", -"7# c #EB3833", -"8# c #ED3E37", -"9# c #ED443C", -"0# c #EE4A40", -"a# c #EF5247", -"b# c #E6544C", -"c# c #AC2E2A", -"d# c #9C2E2A", -"e# c #933A38", -"f# c #923C39", -"g# c #933C3A", -"h# c #943C3A", -"i# c #953C3A", -"j# c #963C3A", -"k# c #973B39", -"l# c #993B39", -"m# c #9A3A38", -"n# c #9B3A38", -"o# c #9B3B38", -"p# c #9B3B39", -"q# c #9A3C3A", -"r# c #993E3B", -"s# c #9A3734", -" ", -" . + @ # $ % & * = - ; > , ' ) ! ~ { ] ", -" ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a - ", -" b c d e f g h i j k l m n o p q r s t u v w ", -" x y z A B C D E F G H I J K L M N O P Q R S ", -" T U V W X Y Z ` ...+.@.O #.$.%.&.*.=.-.;.>. ", -" ,.'.).!.~.~.{.].^./.+.(._.:.<.[.}.|.1.2.3.4. ", -" 5.6.7.8.9.0.a.b.c.d.+.e.f.g.H h.i.j.k.l.m.n. ", -" o.p.q.r.s.t.+.u.v.w.+.e.x.y.z.+.A.B.C.D.E.F. ", -" G.H.I.J.K.+.L.M.N.O.+.P.Q.R.S.T.H U.V.W.X.Y. ", -" Z.`. +.++++.@+#+$+%++.&+*+=+-+;++.>+,+'+)+!+ ", -" ~+{+]+^++.e./+(+_+:+<+[+}+|+1+2++.3+4+5+6+7+ ", -" 8+9+0+a++.b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+ ", -" s+t+u+v++.w+x+y+z+A+B+C+D+E+F+G++.H+I+J+K+L+ ", -" M+N+O+P++.Q+R+S+T+U+V+W+X+Y+Z+`++. @.@+@@@#@ ", -" $@%@&@*@=@+.-@;@>@,@'@)@!@~@{@]@+.^@/@(@_@:@ ", -" <@[@}@|@1@3+Q+2@3@4@5@6@7@8@9@+.0@a@b@c@d@e@ ", -" f@g@h@i@j@k@l@+.m@n@o@p@q@Q++.r@s@t@u@v@w@x@ ", -" y@z@A@B@C@D@E@F@m++.+.+.+.G@H@I@J@K@L@M@N@O@ ", -" P@Q@A@R@S@T@U@V@W@X@Y@Z@`@ #.#+#@#K@L@M@##$# ", -" %#&#*#B@C@T@=#-#;#>#)@,#'#)#!#+#~#{#]#^#/# ", -" (#_#:#<#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c# ", -" d#e#f#g#h#i#j#k#l#m#m#n#o#p#q#r#s# ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/icon_load.xpm b/apps/hmt-slam-gui/imgs/icon_load.xpm deleted file mode 100644 index 4607d35b84..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_load.xpm +++ /dev/null @@ -1,366 +0,0 @@ -/* XPM */ -static const char * icon_load_xpm[] = { -"24 24 339 2", -" c None", -". c #C7C7C7", -"+ c #CACBCB", -"@ c #DFE1E0", -"# c #E3E5E4", -"$ c #C5C5C5", -"% c #CFD1D0", -"& c #EEF0EF", -"* c #F4F6F5", -"= c #F2F5F4", -"- c #D8DAD9", -"; c #4275CC", -"> c #5486D2", -", c #5385D1", -"' c #5284D1", -") c #5183D0", -"! c #4F81D0", -"~ c #DDDEDD", -"{ c #F7F8F8", -"] c #F3F5F4", -"^ c #F1F3F2", -"/ c #CCCDCD", -"( c #D3F8FF", -"_ c #D8FBFF", -": c #D9FDFF", -"< c #DAFEFF", -"[ c #DBFEFF", -"} c #D0F5FF", -"| c #6F9EDC", -"1 c #9CABC2", -"2 c #D4D4D3", -"3 c #E9EAE9", -"4 c #F6F7F6", -"5 c #F4F5F4", -"6 c #F3F6F5", -"7 c #F5F7F6", -"8 c #ECEEED", -"9 c #C7C8C7", -"0 c #CCF2FD", -"a c #CFF4FE", -"b c #CFF4FF", -"c c #D0F4FE", -"d c #CEF2FB", -"e c #C2CBD0", -"f c #DEE1E1", -"g c #F3F5F3", -"h c #F5F7F5", -"i c #F4F7F5", -"j c #F3F5F5", -"k c #E8E9E8", -"l c #9FADC4", -"m c #CDF2FD", -"n c #CFF5FF", -"o c #CFF3FE", -"p c #CCE5EC", -"q c #EBECEA", -"r c #F6F7F5", -"s c #F6F6F4", -"t c #F5F6F5", -"u c #F5F5F5", -"v c #F5F6F4", -"w c #D6D7DA", -"x c #7895C7", -"y c #CDF3FD", -"z c #CEEFF7", -"A c #CBD7DB", -"B c #DCDCDB", -"C c #F3F4F2", -"D c #F7F8F6", -"E c #F4F6F4", -"F c #F7F8F5", -"G c #E6EBF1", -"H c #DAE2ED", -"I c #D8E1ED", -"J c #D4DCE9", -"K c #B3BBCA", -"L c #CEF3FD", -"M c #CAD9DD", -"N c #E4E5E2", -"O c #F9FAF5", -"P c #F9F9F5", -"Q c #F8F9F5", -"R c #F8F8F5", -"S c #FBFBF6", -"T c #C3D3E9", -"U c #5887D6", -"V c #6493DF", -"W c #6393DF", -"X c #6193E1", -"Y c #5D91DF", -"Z c #538CE0", -"` c #4E89E1", -" . c #3E74CC", -".. c #CEF4FD", -"+. c #BCC7D4", -"@. c #B2C6E5", -"#. c #B2C6E6", -"$. c #B3C6E6", -"%. c #B4C7E6", -"&. c #B5C8E7", -"*. c #B6C9E7", -"=. c #B7C9E7", -"-. c #B8CAE8", -";. c #BACCE8", -">. c #A4BCE3", -",. c #4D81D7", -"'. c #8EBDFE", -"). c #8CBCFF", -"!. c #84B9FF", -"~. c #7DB6FF", -"{. c #77B2FF", -"]. c #6CACFE", -"^. c #4078DC", -"/. c #386BC8", -"(. c #CFF4FD", -"_. c #CBF1FD", -":. c #77A1DC", -"<. c #9AB0E7", -"[. c #A0B6EC", -"}. c #9AB4EC", -"|. c #95B1EC", -"1. c #90AEEC", -"2. c #8AACEC", -"3. c #85A9EB", -"4. c #7FA7EB", -"5. c #7AA3EB", -"6. c #76A2EB", -"7. c #98C1FE", -"8. c #91BEFE", -"9. c #8ABAFF", -"0. c #83B7FF", -"a. c #80B8FF", -"b. c #6AA4F7", -"c. c #2F61CF", -"d. c #1D4ABB", -"e. c #CEF4FE", -"f. c #BFE6F9", -"g. c #7FA0E0", -"h. c #D4D9F8", -"i. c #D5DBFD", -"j. c #CFD9FE", -"k. c #C8D6FE", -"l. c #C2D3FE", -"m. c #BAD0FE", -"n. c #B3CDFE", -"o. c #ADCAFE", -"p. c #A6C6FE", -"q. c #9EC3FE", -"r. c #97C0FE", -"s. c #91BDFE", -"t. c #8BBBFF", -"u. c #85BAFF", -"v. c #5689E5", -"w. c #1A47BF", -"x. c #0C36B5", -"y. c #2655BF", -"z. c #CFF5FE", -"A. c #D2F6FF", -"B. c #94BEE8", -"C. c #A2B6EB", -"D. c #D8DFFF", -"E. c #D1D7F9", -"F. c #CDD7FC", -"G. c #C3D2FC", -"H. c #BBCDFB", -"I. c #B3CAFB", -"J. c #ACC7FB", -"K. c #A6C4FB", -"L. c #A0C1FB", -"M. c #98BDFB", -"N. c #90B9FA", -"O. c #88B4F9", -"P. c #6E9CEE", -"Q. c #325FCC", -"R. c #0F3AB6", -"S. c #103BB8", -"T. c #2D5FC3", -"U. c #D5F9FF", -"V. c #5D8AD4", -"W. c #D9DDFC", -"X. c #D4DBFD", -"Y. c #B1BFF1", -"Z. c #98AAE7", -"`. c #859DE3", -" + c #7692DF", -".+ c #6B89DD", -"++ c #6385DB", -"@+ c #5D7FD9", -"#+ c #577CD8", -"$+ c #4D74D4", -"%+ c #416AD0", -"&+ c #2C57C6", -"*+ c #1B46BC", -"=+ c #1843BB", -"-+ c #1440BA", -";+ c #103BB7", -">+ c #113CB7", -",+ c #3B6EC9", -"'+ c #A1CBED", -")+ c #83A0E0", -"!+ c #D6D8FB", -"~+ c #99A9E6", -"{+ c #859AE1", -"]+ c #778EDC", -"^+ c #6F8ADA", -"/+ c #6582D7", -"(+ c #5B7BD5", -"_+ c #5073D3", -":+ c #476BCF", -"<+ c #3E64CC", -"[+ c #355DC8", -"}+ c #2D56C5", -"|+ c #264FC2", -"1+ c #1F4ABF", -"2+ c #1A45BC", -"3+ c #143FB9", -"4+ c #0F39B6", -"5+ c #1B47BB", -"6+ c #D6FBFF", -"7+ c #5B8DD4", -"8+ c #C7CEF3", -"9+ c #A5B1E8", -"0+ c #97A8E4", -"a+ c #8CA0E2", -"b+ c #8197DF", -"c+ c #7790DB", -"d+ c #6F8AD9", -"e+ c #6683D7", -"f+ c #5B7CD5", -"g+ c #5274D1", -"h+ c #4A6DCE", -"i+ c #4065CA", -"j+ c #385FC8", -"k+ c #3259C5", -"l+ c #2B54C1", -"m+ c #264EBF", -"n+ c #2048BB", -"o+ c #1B42B9", -"p+ c #2C5BC2", -"q+ c #5082D0", -"r+ c #B5DEF6", -"s+ c #7EA2DC", -"t+ c #F2F7FB", -"u+ c #E7EEF7", -"v+ c #E4EAF6", -"w+ c #E1E8F4", -"x+ c #DCE4F2", -"y+ c #D8E0EF", -"z+ c #D4DCEE", -"A+ c #D0D9EC", -"B+ c #CBD5EB", -"C+ c #C6D1E8", -"D+ c #C1CCE6", -"E+ c #BDC7E3", -"F+ c #B7C4E2", -"G+ c #B3BFDF", -"H+ c #AFBADD", -"I+ c #AAB7DB", -"J+ c #A5B2D8", -"K+ c #A5AFD6", -"L+ c #3F71CA", -"M+ c #83B0E3", -"N+ c #D0DEF2", -"O+ c #F5FBFC", -"P+ c #F2F8FA", -"Q+ c #F0F5F9", -"R+ c #EFF3F7", -"S+ c #EBF0F5", -"T+ c #E8EDF3", -"U+ c #E3E8F0", -"V+ c #DFE4EE", -"W+ c #DCE2EC", -"X+ c #D8DEEB", -"Y+ c #D4D9E7", -"Z+ c #D0D7E7", -"`+ c #CDD3E5", -" @ c #C9CFE2", -".@ c #C5CCE0", -"+@ c #C3C9DE", -"@@ c #A5B4D9", -"#@ c #346BC8", -"$@ c #7EA5DE", -"%@ c #EAF3F9", -"&@ c #F4FAFB", -"*@ c #F3F8F9", -"=@ c #EEF3F6", -"-@ c #EBF1F6", -";@ c #E5EAF1", -">@ c #E1E7F0", -",@ c #DFE4EF", -"'@ c #DBE1EC", -")@ c #D7DDEB", -"!@ c #D3D9E8", -"~@ c #D0D6E6", -"{@ c #CCD2E4", -"]@ c #C8CEE3", -"^@ c #C4CBE0", -"/@ c #C5CADF", -"(@ c #7A98D3", -"_@ c #376AC7", -":@ c #9FBBE5", -"<@ c #FBFFFE", -"[@ c #FAFFFD", -"}@ c #F8FCFB", -"|@ c #F5F9FA", -"1@ c #F4F7F8", -"2@ c #F0F4F7", -"3@ c #EDF1F4", -"4@ c #EAEEF3", -"5@ c #E4E7F0", -"6@ c #E0E4ED", -"7@ c #DBE0EC", -"8@ c #D8DCE9", -"9@ c #D0D5E5", -"0@ c #CCD0E3", -"a@ c #C8CEE1", -"b@ c #C8CCDF", -"c@ c #5581CD", -"d@ c #3E70CA", -"e@ c #88A9DF", -"f@ c #A7C0E7", -"g@ c #A7BFE6", -"h@ c #A5BFE5", -"i@ c #A4BDE5", -"j@ c #A4BDE4", -"k@ c #A2BBE3", -"l@ c #A2B9E2", -"m@ c #A0B8E1", -"n@ c #9EB6E0", -"o@ c #9EB5DF", -"p@ c #9CB4DF", -"q@ c #9BB2DE", -"r@ c #99B1DD", -"s@ c #98AFDB", -"t@ c #97AEDB", -"u@ c #95ACD9", -"v@ c #93AAD8", -"w@ c #89A3D5", -"x@ c #4576CB", -" . ", -" + @ # $ ", -" % & * = - ", -"; > , ' ) ) ! . ~ { * ] * ^ / ", -"! ( _ : < [ } | 1 2 3 4 5 6 * ] 7 8 9 ", -"! 0 a b b c d e f g h i * j 6 6 ] * k l ", -"! m a n o p / q r s r r t u u t t t v w x ", -"! y a z A B C D v r r h t * E F G H I J K ", -"! L n M N O O P Q Q Q R R F S T U V W X Y Z ` .", -"! ..a z +.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.", -"! ..(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d. ", -"! e.(.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y. ", -"! z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.R.T. ", -"! z.U.V.W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+ ", -"! ( '+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+ ", -"! 6+7+8+9+0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+ ", -"q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+ ", -"q+M+N+O+P+Q+R+S+T+G U+V+W+X+Y+Z+`+ @.@+@@@#@ ", -"; $@%@&@*@Q+=@-@T+;@>@,@'@)@!@~@{@]@^@/@(@ ", -"_@:@<@[@}@|@1@2@3@4@G 5@6@7@8@Y+9@0@a@b@c@ ", -"d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@ ", -" ", -" ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/icon_log.xpm b/apps/hmt-slam-gui/imgs/icon_log.xpm deleted file mode 100644 index 3992d032c4..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_log.xpm +++ /dev/null @@ -1,147 +0,0 @@ -/* XPM */ -static const char * icon_log_xpm[] = { -"24 24 120 2", -" c None", -". c #F5F0FD", -"+ c #EEE4FF", -"@ c #EADFFF", -"# c #E7DAFF", -"$ c #E3D4FF", -"% c #DFCFFF", -"& c #DCCAFF", -"* c #D8C4FF", -"= c #D5BFFF", -"- c #D1BAFF", -"; c #CDB5FF", -"> c #C9AEFF", -", c #D1BDF9", -"' c #EFE6FC", -") c #E3D2FF", -"! c #D7C1FF", -"~ c #D1B8FF", -"{ c #CAAFFF", -"] c #C5A7FF", -"^ c #BE9EFF", -"/ c #B894FF", -"( c #B28CFF", -"_ c #AB83FF", -": c #A478FF", -"< c #B999FB", -"[ c #EBEAEE", -"} c #EFE8FA", -"| c #E5D7FC", -"1 c #E0D1FC", -"2 c #DBCAFC", -"3 c #D6C3FC", -"4 c #D1BBFC", -"5 c #CCB5FC", -"6 c #C8ADFC", -"7 c #C3A6FC", -"8 c #BE9FFC", -"9 c #B898FB", -"0 c #B08CF9", -"a c #BEA3F4", -"b c #F5F4F7", -"c c #ECECEC", -"d c #F1F0F2", -"e c #ECEBEF", -"f c #ECEAEF", -"g c #EBE9EF", -"h c #EAE8EF", -"i c #EAE7EF", -"j c #E9E7EF", -"k c #E9E6EF", -"l c #E7E3ED", -"m c #DAD7E1", -"n c #D5D3DA", -"o c #F9F9F9", -"p c #FCFCFC", -"q c #EEEEEE", -"r c #F3F3F3", -"s c #F0F0F0", -"t c #EFEFEF", -"u c #E5E5E5", -"v c #DADAD9", -"w c #FBFBFB", -"x c #F8F8F8", -"y c #E7E7E7", -"z c #F1F1F1", -"A c #EDEDED", -"B c #E0E0E0", -"C c #D8D8D8", -"D c #D4D4D4", -"E c #D0D0D0", -"F c #CCCCCC", -"G c #CDCDCD", -"H c #F5F5F5", -"I c #F4F4F4", -"J c #E3E3E3", -"K c #D9D9D9", -"L c #D3D3D3", -"M c #D7D7D7", -"N c #F6F6F6", -"O c #F7F7F7", -"P c #E8E8E8", -"Q c #E4E4E4", -"R c #FAFAFA", -"S c #EBEBEB", -"T c #B9B9B9", -"U c #BDBDBD", -"V c #B4B4B4", -"W c #B6B6B6", -"X c #B8B8B8", -"Y c #BBBBBB", -"Z c #BEBEBE", -"` c #BFBFBF", -" . c #DCDCDC", -".. c #DEDEDE", -"+. c #DFDFDF", -"@. c #DBDBDB", -"#. c #DDDDDD", -"$. c #E1E1E1", -"%. c #FDFDFD", -"&. c #FEFEFE", -"*. c #FFFFFF", -"=. c #F2F2F2", -"-. c #C5C5C5", -";. c #C9C9C9", -">. c #C0C0C0", -",. c #C2C2C2", -"'. c #C3C3C3", -"). c #C4C4C4", -"!. c #C6C6C6", -"~. c #C8C8C8", -"{. c #CACACA", -"]. c #E6E6E6", -"^. c #E9E9E9", -"/. c #BCBCBC", -"(. c #B5B5B5", -"_. c #B7B7B7", -":. c #C1C1C1", -"<. c #DADADA", -"[. c #E2E2E2", -"}. c #CFCFCF", -" ", -" . + @ # $ % & * = - ; > , ", -" ' ) & ! ~ { ] ^ / ( _ : < [ ", -" } | 1 2 3 4 5 6 7 8 9 0 a b c ", -" d e e f g g h i j k l m n o p q ", -" r s s s s s s s s s t u v r w x y ", -" r z z z z z z z z z z A B C D E F G ", -" H I I H I I H H H H H I q J K L E M ", -" N O N I N O I I I I I I I t P u Q y ", -" O R S T c r U V W X T Y U Z ` .H r ", -" x p I ..H x +.@. .#.....+.B $.s %.x ", -" R &.&.*.&.&.*.*.*.*.*.*.*.*.*.&.&.o ", -" R *.*.%.*.*.%.%.%.%.&.&.&.&.&.*.*.o ", -" R *.=.-.r o ;.>.,.'.).!.~.;.{.P *.o ", -" R *.R y R %.P u ].].y P P ^.^.N *.x ", -" R *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.x ", -" o *.&.%.*.*.%.%.%.%.%.%.%.%.%.&.*.O ", -" o *.s /.z o >.(._.X Y /.U ` :.Q *.H ", -" o *.O <.O p .M C C <.@.@. .#.s *.I ", -" o *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.r ", -" o *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.=. ", -" x *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.z ", -" +.^.P y ].].u Q J [.[.$.B +.....#.}. ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/icon_reset.xpm b/apps/hmt-slam-gui/imgs/icon_reset.xpm deleted file mode 100644 index dcbbc9633e..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_reset.xpm +++ /dev/null @@ -1,318 +0,0 @@ -/* XPM */ -static const char * icon_reset_xpm[] = { -"24 24 291 2", -" c None", -". c #F0BB7E", -"+ c #F5CEA1", -"@ c #EFC89D", -"# c #EEBF89", -"$ c #DE903B", -"% c #F8D7AD", -"& c #FFF7EA", -"* c #FFF5E5", -"= c #FFF1DE", -"- c #FBE0BD", -"; c #EDB676", -"> c #F8D19F", -", c #FFEED7", -"' c #FFECD4", -") c #FFECD3", -"! c #FFEDD5", -"~ c #FFEBD0", -"{ c #F3C38A", -"] c #F8CC94", -"^ c #FFE8C9", -"/ c #FFE6C5", -"( c #FFE5C2", -"_ c #FFE4C1", -": c #FFE4C0", -"< c #F6C58A", -"[ c #D5842D", -"} c #F5A141", -"| c #FEBC6D", -"1 c #FFD195", -"2 c #FFDDB1", -"3 c #FFDDB0", -"4 c #FFDEB2", -"5 c #F2B66F", -"6 c #DE6E00", -"7 c #E67401", -"8 c #F08512", -"9 c #FDB661", -"0 c #FFD6A0", -"a c #FFD6A1", -"b c #FED095", -"c c #DD9644", -"d c #E99A3C", -"e c #EFAF62", -"f c #F0A549", -"g c #E18A25", -"h c #B75C00", -"i c #C56300", -"j c #D76B00", -"k c #E97B08", -"l c #FCB054", -"m c #FFCF8F", -"n c #FFCE8F", -"o c #EBA551", -"p c #F4AB52", -"q c #FFCD89", -"r c #FFC881", -"s c #FCC072", -"t c #F7B25C", -"u c #F0A446", -"v c #E6922D", -"w c #894500", -"x c #C96400", -"y c #EF8611", -"z c #FFC26C", -"A c #FFC97F", -"B c #FFC77D", -"C c #FFC77F", -"D c #F6B159", -"E c #EF9E3F", -"F c #FFC578", -"G c #FFC476", -"H c #FFC477", -"I c #FFC475", -"J c #FEC06C", -"K c #FBB85D", -"L c #F5AE4B", -"M c #EDA034", -"N c #E39020", -"O c #D97302", -"P c #FEB54A", -"Q c #FFC670", -"R c #FFC36D", -"S c #FFC26E", -"T c #FAB356", -"U c #C2700F", -"V c #E68F26", -"W c #FFBC63", -"X c #FFBC64", -"Y c #FFBB64", -"Z c #FFBD63", -"` c #FFC063", -" . c #FFC263", -".. c #FFC463", -"+. c #FFC45F", -"@. c #FEC056", -"#. c #FAB848", -"$. c #F4AF3B", -"%. c #E5951A", -"&. c #B56401", -"*. c #FAB13B", -"=. c #FFC35E", -"-. c #FFC05C", -";. c #FFBE5A", -">. c #FBA62D", -",. c #C26D01", -"'. c #E18515", -"). c #FFB24D", -"!. c #FFB453", -"~. c #FFB552", -"{. c #FFB752", -"]. c #FFBA51", -"^. c #FFBC50", -"/. c #FFBF50", -"(. c #FFC14F", -"_. c #FFC24F", -":. c #FFC44F", -"<. c #FFC64F", -"[. c #FFB32F", -"}. c #E58006", -"|. c #C2790B", -"1. c #FAB83B", -"2. c #FFC14B", -"3. c #FFBE48", -"4. c #FFB12B", -"5. c #FB9B04", -"6. c #C47000", -"7. c #DA7A0A", -"8. c #FFA839", -"9. c #FFAE43", -"0. c #FFB142", -"a. c #FFB441", -"b. c #FFB741", -"c. c #FFBA40", -"d. c #FFBD40", -"e. c #FFBF3F", -"f. c #FFC13F", -"g. c #FFC33C", -"h. c #FEB323", -"i. c #EF8204", -"j. c #D16900", -"k. c #EBA31A", -"l. c #FFC139", -"m. c #FFBE35", -"n. c #FFB31C", -"o. c #FFA703", -"p. c #FA9A00", -"q. c #BE6900", -"r. c #D67402", -"s. c #FE9814", -"t. c #FFA526", -"u. c #FFAD2E", -"v. c #FFB22F", -"w. c #FFB52F", -"x. c #FFB92E", -"y. c #FFBC2E", -"z. c #FFBE2D", -"A. c #FFC12A", -"B. c #FDAB13", -"C. c #EC7E02", -"D. c #CC6600", -"E. c #985000", -"F. c #EEA910", -"G. c #FDBE1F", -"H. c #FFBE1B", -"I. c #FFB70B", -"J. c #FFB000", -"K. c #FFAD00", -"L. c #F19100", -"M. c #CB6D00", -"N. c #FB9000", -"O. c #FF9B02", -"P. c #FFA40B", -"Q. c #FFAC14", -"R. c #FFB219", -"S. c #FFB71B", -"T. c #FFBB1B", -"U. c #FFC118", -"V. c #FDB90C", -"W. c #F2A506", -"X. c #DA9404", -"Y. c #E2A406", -"Z. c #F7B809", -"`. c #FEC20B", -" + c #FFC005", -".+ c #FFBD00", -"++ c #FFB900", -"@+ c #FFB600", -"#+ c #E18000", -"$+ c #F69000", -"%+ c #FF9E00", -"&+ c #FFA400", -"*+ c #FFA900", -"=+ c #FFAF02", -"-+ c #FFB504", -";+ c #FFBA05", -">+ c #FFBE06", -",+ c #FFC207", -"'+ c #FFC607", -")+ c #FFC805", -"!+ c #FFC903", -"~+ c #FFC902", -"{+ c #FFC901", -"]+ c #FFC700", -"^+ c #FFC500", -"/+ c #FFC300", -"(+ c #FFC000", -"_+ c #FFBC00", -":+ c #C66600", -"<+ c #EF8C00", -"[+ c #FFA300", -"}+ c #FFA800", -"|+ c #FFAE00", -"1+ c #FFB300", -"2+ c #FFBA00", -"3+ c #FFBE00", -"4+ c #FFC200", -"5+ c #FFCA00", -"6+ c #FFCD00", -"7+ c #FFCF00", -"8+ c #FFD000", -"9+ c #FFCE00", -"0+ c #FFCC00", -"a+ c #FFC400", -"b+ c #FB9F00", -"c+ c #E17500", -"d+ c #E68700", -"e+ c #FFA600", -"f+ c #FFAC00", -"g+ c #FFAB00", -"h+ c #FFC100", -"i+ c #FFC900", -"j+ c #FFD400", -"k+ c #FFD600", -"l+ c #FFD700", -"m+ c #FA9C00", -"n+ c #E57200", -"o+ c #B56000", -"p+ c #DC8100", -"q+ c #FFA700", -"r+ c #F48000", -"s+ c #ED7500", -"t+ c #F98E00", -"u+ c #FFB100", -"v+ c #FFDA00", -"w+ c #FFDD00", -"x+ c #FFDE00", -"y+ c #FEBB00", -"z+ c #F78C00", -"A+ c #E37100", -"B+ c #BC6400", -"C+ c #CF7800", -"D+ c #FEA600", -"E+ c #FD9900", -"F+ c #EE7900", -"G+ c #D06B00", -"H+ c #C26600", -"I+ c #DE6F00", -"J+ c #EA7300", -"K+ c #F18C00", -"L+ c #F9AC00", -"M+ c #FCBC00", -"N+ c #FDC400", -"O+ c #FCC500", -"P+ c #FABA00", -"Q+ c #F39A00", -"R+ c #EA7C00", -"S+ c #D76E00", -"T+ c #AE5E00", -"U+ c #BF6900", -"V+ c #F78200", -"W+ c #EB7500", -"X+ c #C96A00", -"Y+ c #945200", -"Z+ c #BF6600", -"`+ c #D77000", -" @ c #E57900", -".@ c #EC8200", -"+@ c #F08800", -"@@ c #F08700", -"#@ c #EB8100", -"$@ c #DB7600", -"%@ c #BA6500", -"&@ c #DD7000", -"*@ c #C46800", -"=@ c #A05A00", -"-@ c #B36500", -";@ c #B96800", -">@ c #B26500", -",@ c #9C5900", -"'@ c #995400", -" ", -" . + @ # $ ", -" % & * = - ; ", -" > , ' ) ! ~ { ", -" ] ^ / ( ( _ : < [ ", -" } | 1 2 2 2 3 4 5 ", -" 6 7 8 9 0 a a a b c ", -" d e f g h i j k l m n n m o ", -" p q r s t u v w x y z A B C D ", -" E F G H H I J K L M N O P Q R S T U ", -" V W X Y W Z ` ...+.@.#.$.%. &.*.=.-.;.>.,.", -" '.).!.~.{.].^./.(._.:.<.[.}. |.1.2.3.4.5.6.", -" 7.8.9.0.a.b.c.d.e.f.g.h.i.j. k.l.m.n.o.p.q.", -" r.s.t.u.v.w.x.y.z.A.B.C.D.E. F.G.H.I.J.K.L. ", -" M.N.O.P.Q.R.S.T.H.U.V.W.X.Y.Z.`. +.+++@+J.#+ ", -" $+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+p.:+ ", -" <+[+}+|+1+2+3+4+]+5+6+7+8+8+9+0+5+a+b+c+ ", -" d+e+f+1+|+g+h+i+6+8+j+k+l+l+k+j+5+m+n+o+ ", -" p+q+J.q+r+s+t+u+0+l+v+w+x+x+k+y+z+A+B+ ", -" C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+ ", -" U+V+W+X+ Y+Z+`+ @.@+@@@#@$@%@ ", -" &@*@ =@-@;@>@,@ ", -" '@ ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/icon_save.xpm b/apps/hmt-slam-gui/imgs/icon_save.xpm deleted file mode 100644 index 0b28fbf706..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_save.xpm +++ /dev/null @@ -1,270 +0,0 @@ -/* XPM */ -static const char * icon_save_xpm[] = { -"24 24 243 2", -" c None", -". c #458C45", -"+ c #468C46", -"@ c #3F873F", -"# c #559855", -"$ c #A5CDA5", -"% c #A8CEA7", -"& c #A9CFA8", -"* c #90C18F", -"= c #59A256", -"- c #B2DBAF", -"; c #B6DDB2", -"> c #B7DDB4", -", c #9BCE98", -"' c #55A44C", -") c #A2D699", -"! c #A5D89C", -"~ c #A6D89D", -"{ c #8ECA85", -"] c #50A63F", -"^ c #94D484", -"/ c #97D686", -"( c #97D786", -"_ c #97D687", -": c #83CA72", -"< c #328C20", -"[ c #53984A", -"} c #71B064", -"| c #71B15F", -"1 c #65BC4A", -"2 c #87D46D", -"3 c #8AD66F", -"4 c #8BD86F", -"5 c #8BD76F", -"6 c #8AD670", -"7 c #7BCD61", -"8 c #64B44D", -"9 c #73B164", -"0 c #69AA5F", -"a c #4BA236", -"b c #80CC6B", -"c c #8BD474", -"d c #7CD25C", -"e c #7ED65A", -"f c #81D95A", -"g c #82DA5A", -"h c #80D85B", -"i c #7BD358", -"j c #83D367", -"k c #88D173", -"l c #6BBF56", -"m c #30831E", -"n c #389D13", -"o c #60CA35", -"p c #70D544", -"q c #75DA45", -"r c #7BDE49", -"s c #7EDF4C", -"t c #7DDF4A", -"u c #76DC43", -"v c #6CD63B", -"w c #5BCC2B", -"x c #44B716", -"y c #207F04", -"z c #93914D", -"A c #6ABB28", -"B c #5AD61C", -"C c #68DB2B", -"D c #78DF41", -"E c #7FE049", -"F c #7ADF42", -"G c #68DB2A", -"H c #50D50C", -"I c #4BCA07", -"J c #75A72E", -"K c #AB925F", -"L c #C3A169", -"M c #B29159", -"N c #9B9147", -"O c #72BB29", -"P c #72DD36", -"Q c #84E250", -"R c #8FE45F", -"S c #8BE35A", -"T c #79E042", -"U c #6BD529", -"V c #81A530", -"W c #AB8E51", -"X c #B39259", -"Y c #CFAB73", -"Z c #CEA66B", -"` c #A8854E", -" . c #8F6C34", -".. c #916D36", -"+. c #897434", -"@. c #87A845", -"#. c #A5E47A", -"$. c #B4ED90", -"%. c #AEEC89", -"&. c #96D263", -"*. c #848D37", -"=. c #8E6D34", -"-. c #916E36", -";. c #8F6D34", -">. c #BA975F", -",. c #D0A96F", -"'. c #CBA56C", -"). c #8E6732", -"!. c #7C5724", -"~. c #7D5824", -"{. c #7C5623", -"]. c #755522", -"^. c #97A162", -"/. c #CFF1B7", -"(. c #BFDD9E", -"_. c #82793E", -":. c #775221", -"<. c #7D5723", -"[. c #9C753D", -"}. c #CDA970", -"|. c #BE9962", -"1. c #7D5624", -"2. c #724E20", -"3. c #755223", -"4. c #745122", -"5. c #705427", -"6. c #928F64", -"7. c #817349", -"8. c #6E4D20", -"9. c #765223", -"0. c #8A612C", -"a. c #C5A067", -"b. c #CBA56B", -"c. c #D4AE74", -"d. c #C6A46E", -"e. c #C4A36F", -"f. c #CAA974", -"g. c #CAAA75", -"h. c #CAA975", -"i. c #C3A471", -"j. c #C6A673", -"k. c #C9A772", -"l. c #C9A66F", -"m. c #C9A66E", -"n. c #C7A46C", -"o. c #CDA76D", -"p. c #D5AD70", -"q. c #C4A16A", -"r. c #C39659", -"s. c #CD924B", -"t. c #C88F49", -"u. c #C78E48", -"v. c #CB9149", -"w. c #CB914A", -"x. c #CB924A", -"y. c #CC924B", -"z. c #CC924A", -"A. c #CC934C", -"B. c #C68F49", -"C. c #CD944D", -"D. c #CE964F", -"E. c #BA935B", -"F. c #C19456", -"G. c #CC944D", -"H. c #BB8442", -"I. c #AE7532", -"J. c #B07733", -"K. c #AF7733", -"L. c #B07834", -"M. c #B17935", -"N. c #B17835", -"O. c #B17834", -"P. c #B07734", -"Q. c #B17937", -"R. c #C8934F", -"S. c #CC9651", -"T. c #BC9053", -"U. c #D19A53", -"V. c #C38E4D", -"W. c #B7813F", -"X. c #B98341", -"Y. c #B98240", -"Z. c #B88240", -"`. c #BA8443", -" + c #D09D59", -".+ c #D39D56", -"++ c #B98D50", -"@+ c #D49F58", -"#+ c #CF9955", -"$+ c #CB924C", -"%+ c #CC944E", -"&+ c #CB944D", -"*+ c #CB934C", -"=+ c #CB924B", -"-+ c #CB934D", -";+ c #D5A35E", -">+ c #D39F5A", -",+ c #B78A4D", -"'+ c #D7A45E", -")+ c #D09E5C", -"!+ c #CB9754", -"~+ c #CC9956", -"{+ c #CC9955", -"]+ c #CD9A57", -"^+ c #D8A865", -"/+ c #D3A05B", -"(+ c #D9A965", -"_+ c #D4A361", -":+ c #D19F5B", -"<+ c #D2A05C", -"[+ c #D19F5C", -"}+ c #D1A05D", -"|+ c #DAAC69", -"1+ c #D7A763", -"2+ c #D6A968", -"3+ c #D3A563", -"4+ c #D4A765", -"5+ c #D4A766", -"6+ c #DCB06F", -"7+ c #CF9E5B", -"8+ c #D0A15E", -"9+ c #DDB475", -"0+ c #E0B97A", -"a+ c #E1BB7B", -"b+ c #E1BB7C", -"c+ c #E2BC7D", -"d+ c #E1BA7B", -"e+ c #DCB271", -"f+ c #C89856", -"g+ c #BF8C4B", -"h+ c #C89B5B", -"i+ c #CA9D5E", -"j+ c #CB9F60", -"k+ c #CCA164", -"l+ c #CDA365", -"m+ c #CEA467", -"n+ c #CDA265", -"o+ c #CDA264", -"p+ c #CEA366", -"q+ c #CDA163", -"r+ c #CA9F61", -"s+ c #C8995A", -"t+ c #B78446", -" . + + + + @ ", -" # $ % % % & * ", -" = - ; ; ; > , ", -" ' ) ! ! ! ~ { ", -" ] ^ / ( / _ : < ", -" [ } | 1 2 3 4 5 6 7 8 9 0 ", -" a b c d e f g g h i j k l m ", -" n o p q r s t u v w x y ", -" z A B C D E F G H I J K ", -" L M N O P Q R S T U V W X Y ", -" Z ` ...+.@.#.$.%.&.*.=.-.;.>.,. ", -" '.).!.~.{.].^./.(._.:.~.~.<.[.}. ", -" |.1.2.3.3.4.5.6.7.8.3.3.3.9.0.a. ", -" b.c.d.e.f.g.g.h.i.j.k.l.l.m.n.o.p.q. ", -" r.s.t.u.v.w.x.x.y.y.z.z.y.A.B.C.D.E. ", -" F.G.H.I.J.J.K.K.L.M.N.O.O.P.Q.R.S. ", -" T.U.V.W.X.X.X.X.X.Y.Z.Z.Z.Y.`. +.+ ", -" ++@+#+$+%+%+&+*+=+=+=+=+=+=+-+;+>+ ", -" ,+'+)+!+~+~+~+{+{+{+{+{+{+{+]+^+/+ ", -" (+_+ +:+:+:+:+:+:+:+:+<+[+}+|+:+ ", -" 1+2+3+4+4+4+4+4+4+4+4+4+4+5+6+7+ ", -" 8+9+0+a+b+b+c+b+b+c+b+b+b+d+e+f+ ", -" g+h+i+j+k+l+m+n+o+p+l+o+q+r+s+t+ ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/icon_step.xpm b/apps/hmt-slam-gui/imgs/icon_step.xpm deleted file mode 100644 index 54c10c4f75..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_step.xpm +++ /dev/null @@ -1,278 +0,0 @@ -/* XPM */ -static const char * icon_step_xpm[] = { -"24 24 251 2", -" c None", -". c #5C83D8", -"+ c #6087D9", -"@ c #205BCC", -"# c #8BABE5", -"$ c #C2D4F2", -"% c #89ABE6", -"& c #467DD9", -"* c #1A62D1", -"= c #2567D1", -"- c #9DBBEC", -"; c #BCD2F2", -"> c #B7CEF2", -", c #A8C5EF", -"' c #7AA7E7", -") c #3F82DD", -"! c #186BD7", -"~ c #4483DC", -"{ c #A4C6F1", -"] c #ADCDF3", -"^ c #A7C8F1", -"/ c #A3C6F1", -"( c #A1C5F1", -"_ c #91BBEF", -": c #6AA4E9", -"< c #4B92E5", -"[ c #257FE1", -"} c #5C99E4", -"| c #A3CDF5", -"1 c #A0CCF5", -"2 c #9BC7F4", -"3 c #96C3F2", -"4 c #92C0F1", -"5 c #8FBFF1", -"6 c #8CBEF1", -"7 c #84BAF1", -"8 c #65A9ED", -"9 c #3B92E9", -"0 c #2085E6", -"a c #66A7EC", -"b c #9CD0F9", -"c c #96CCF8", -"d c #91C8F6", -"e c #8DC4F5", -"f c #88BFF3", -"g c #84BCF2", -"h c #7FBBF3", -"i c #7CBAF3", -"j c #78B9F3", -"k c #70B5F3", -"l c #57A8F0", -"m c #3296ED", -"n c #198AEB", -"o c #6AB4F3", -"p c #91D3FD", -"q c #8BCEFC", -"r c #86CAFB", -"s c #81C6F9", -"t c #7DC1F7", -"u c #77BBF5", -"v c #73B7F3", -"w c #6FB6F3", -"x c #6BB7F5", -"y c #67B7F6", -"z c #64B6F6", -"A c #3EA5F4", -"B c #1B94F2", -"C c #1B96F2", -"D c #2A8DE8", -"E c #76C3F9", -"F c #85D3FF", -"G c #80D0FF", -"H c #7BCDFE", -"I c #76C9FE", -"J c #72C5FC", -"K c #6CBFF9", -"L c #67B9F7", -"M c #62B2F4", -"N c #5DAFF3", -"O c #5BB2F6", -"P c #49B0F9", -"Q c #23A1F8", -"R c #1D9EF8", -"S c #1C9EF8", -"T c #1B9DF8", -"U c #1E9EF8", -"V c #26A2F7", -"W c #389DEF", -"X c #79CCFD", -"Y c #7AD2FF", -"Z c #76CFFF", -"` c #71CCFF", -" . c #6CCAFF", -".. c #68C7FF", -"+. c #62C3FE", -"@. c #5DBDFC", -"#. c #59B6F9", -"$. c #52AEF5", -"%. c #3D9FF0", -"&. c #2092F0", -"*. c #1EA7FE", -"=. c #28ABFE", -"-. c #47B7FD", -";. c #6EC5FD", -">. c #47AEF6", -",. c #74D2FE", -"'. c #6FD1FF", -"). c #6BCFFF", -"!. c #66CCFF", -"~. c #61C9FF", -"{. c #5DC7FF", -"]. c #58C3FF", -"^. c #53C0FF", -"/. c #48B9FE", -"(. c #30ABFB", -"_. c #1F9CF6", -":. c #2998F1", -"<. c #4CA6F2", -"[. c #69BCF8", -"}. c #79C7FB", -"|. c #77CDFE", -"1. c #5DC4FF", -"2. c #43BAFF", -"3. c #23A5F3", -"4. c #1F9CF3", -"5. c #52BEFC", -"6. c #6AD4FF", -"7. c #65D1FF", -"8. c #60CFFF", -"9. c #5BCCFF", -"0. c #57CAFF", -"a. c #52C7FF", -"b. c #49C2FF", -"c. c #39BAFF", -"d. c #31B5FF", -"e. c #47BAFF", -"f. c #6DC5FD", -"g. c #84CBFC", -"h. c #7EC3F8", -"i. c #5DADF2", -"j. c #3895EB", -"k. c #2294EF", -"l. c #1EA7FB", -"m. c #20B0FF", -"n. c #1EA3F0", -"o. c #28A9FA", -"p. c #58CAFF", -"q. c #61D5FF", -"r. c #5CD2FF", -"s. c #57D0FF", -"t. c #50CDFF", -"u. c #49C9FF", -"v. c #43C6FF", -"w. c #4BC6FF", -"x. c #66CDFF", -"y. c #82D4FF", -"z. c #86D5FF", -"A. c #47B9FF", -"B. c #29A6FA", -"C. c #1A96F3", -"D. c #188CEE", -"E. c #1781E7", -"F. c #1780E6", -"G. c #1B92EE", -"H. c #2EB3FE", -"I. c #51D1FF", -"J. c #4FD5FF", -"K. c #49D2FF", -"L. c #49D1FF", -"M. c #5DD4FF", -"N. c #72D8FF", -"O. c #7BD9FF", -"P. c #7ED9FF", -"Q. c #67D1FF", -"R. c #51C8FF", -"S. c #35BCFF", -"T. c #23B3FF", -"U. c #1FAFFF", -"V. c #1FABFF", -"W. c #1EA3FB", -"X. c #167DDF", -"Y. c #1164C0", -"Z. c #0D4D9C", -"`. c #25B8FF", -" + c #37D4FF", -".+ c #4ED9FF", -"++ c #6EDEFF", -"@+ c #87E3FF", -"#+ c #8AE3FF", -"$+ c #72DDFF", -"%+ c #51D2FF", -"&+ c #35C8FF", -"*+ c #28C2FF", -"=+ c #25BFFF", -"-+ c #25BCFF", -";+ c #25B9FF", -">+ c #22B2FF", -",+ c #1EA1F6", -"'+ c #1886DD", -")+ c #1265B3", -"!+ c #35B7FD", -"~+ c #5CCFFF", -"{+ c #82E8FF", -"]+ c #8EEAFF", -"^+ c #7EE6FF", -"/+ c #5EDEFF", -"(+ c #3FD6FF", -"_+ c #2FD0FF", -":+ c #2BCDFF", -"<+ c #2BCBFF", -"[+ c #2BC8FF", -"}+ c #29C3FF", -"|+ c #24B6FB", -"1+ c #1F9FED", -"2+ c #1881CD", -"3+ c #0F5693", -"4+ c #47C0FB", -"5+ c #6EE1FF", -"6+ c #61E7FF", -"7+ c #49E2FF", -"8+ c #36DDFF", -"9+ c #30DAFF", -"0+ c #30D8FF", -"a+ c #31D7FF", -"b+ c #2ED2FF", -"c+ c #29C2FC", -"d+ c #22AAED", -"e+ c #1C8FCE", -"f+ c #146CA9", -"g+ c #27BCFA", -"h+ c #34DFFF", -"i+ c #35E5FF", -"j+ c #35E4FF", -"k+ c #35E3FF", -"l+ c #34E1FF", -"m+ c #30D5FF", -"n+ c #29BFF7", -"o+ c #209FDF", -"p+ c #1572AE", -"q+ c #2CC9F9", -"r+ c #38EBFF", -"s+ c #39ECFF", -"t+ c #36E4FF", -"u+ c #2FD1FB", -"v+ c #26B4EC", -"w+ c #1B89C6", -"x+ c #2AC1F0", -"y+ c #2FCFF7", -"z+ c #28B9E9", -"A+ c #1F94C4", -"B+ c #156EA5", -" ", -" . + @ ", -" # $ % & * ", -" = - ; > , ' ) ! ", -" ~ { ] ^ / ( _ : < [ ", -" } | 1 2 3 4 5 6 7 8 9 0 ", -" a b c d e f g h i j k l m n ", -" o p q r s t u v w x y z A B B C ", -" D E F G H I J K L M N O P Q R S T U V ", -" W X Y Z ` ...+.@.#.$.%.&.T *.=.-.;.;. ", -" >.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3. ", -" 4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n. ", -" o.p.q.r.s.t.u.v.w.x.y.z. .A.B.C.D.E.F.G. ", -" H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.B X.Y.Z. ", -" `. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+ ", -" !+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+ ", -" 4+5+6+7+8+9+0+a+b+c+d+e+f+ ", -" g+h+i+j+k+l+m+n+o+p+ ", -" q+r+s+t+u+v+w+ ", -" x+y+z+A+B+ ", -" ", -" ", -" ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/icon_stop.xpm b/apps/hmt-slam-gui/imgs/icon_stop.xpm deleted file mode 100644 index 8108dd17e6..0000000000 --- a/apps/hmt-slam-gui/imgs/icon_stop.xpm +++ /dev/null @@ -1,309 +0,0 @@ -/* XPM */ -static const char * icon_stop_xpm[] = { -"24 24 282 2", -" c None", -". c #F06161", -"+ c #F48787", -"@ c #F48686", -"# c #F48585", -"$ c #ED4848", -"% c #DE1313", -"& c #F76A6A", -"* c #FFC2C2", -"= c #FFCFCF", -"- c #FFCECE", -"; c #FEB1B1", -"> c #F14A4A", -", c #E31F1F", -"' c #FA7B7B", -") c #FFC1C1", -"! c #FFC4C4", -"~ c #FFC3C3", -"{ c #FFC5C5", -"] c #FFB7B7", -"^ c #F65D5D", -"/ c #EA3030", -"( c #FB8989", -"_ c #FFBCBC", -": c #FFD5D5", -"< c #FFE2E2", -"[ c #FFBABA", -"} c #FFBBBB", -"| c #FFCBCB", -"1 c #FFE4E4", -"2 c #FFCCCC", -"3 c #FFB6B6", -"4 c #F77373", -"5 c #E51E1E", -"6 c #EF3A3A", -"7 c #FE9595", -"8 c #FFD6D6", -"9 c #FFFBFB", -"0 c #FFFFFF", -"a c #FFEBEB", -"b c #FFBEBE", -"c c #FFB1B1", -"d c #FFB2B2", -"e c #FFC9C9", -"f c #FFF5F5", -"g c #FFF4F4", -"h c #FFB3B3", -"i c #FC8181", -"j c #EA2828", -"k c #F13F3F", -"l c #FF9A9A", -"m c #FFABAB", -"n c #FDBBBB", -"o c #FEF6F6", -"p c #FFEEEE", -"q c #FFB9B9", -"r c #FFA8A8", -"s c #FFC6C6", -"t c #FFF7F7", -"u c #FDE9E9", -"v c #FEAFAF", -"w c #FE8C8C", -"x c #EA2C2C", -"y c #CC0000", -"z c #FA5F5F", -"A c #FFA4A4", -"B c #FFA0A0", -"C c #FDA2A2", -"D c #F9BFBF", -"E c #FCF0F0", -"F c #FFECEC", -"G c #FFBDBD", -"H c #FFC8C8", -"I c #FAE4E4", -"J c #F9B4B4", -"K c #FEA0A0", -"L c #FFA1A1", -"M c #FF9B9B", -"N c #F53333", -"O c #CB0000", -"P c #FB5858", -"Q c #FF9797", -"R c #FE9696", -"S c #F7ADAD", -"T c #FBECEC", -"U c #FFF8F8", -"V c #F9DDDD", -"W c #F9A4A4", -"X c #FF9999", -"Y c #FF8B8B", -"Z c #FF4040", -"` c #F60303", -" . c #FC5353", -".. c #FF9292", -"+. c #FF8F8F", -"@. c #FF9090", -"#. c #FE9191", -"$. c #FBEDED", -"%. c #FFFEFE", -"&. c #F8DEDE", -"*. c #F9A2A2", -"=. c #FF9696", -"-. c #FF7676", -";. c #FF2C2C", -">. c #FF0404", -",. c #F70101", -"'. c #CE0000", -"). c #FC4D4D", -"!. c #FF8888", -"~. c #FF8787", -"{. c #FF8A8A", -"]. c #FF8C8C", -"^. c #FF8E8E", -"/. c #FE8E8E", -"(. c #FAAFAF", -"_. c #FCE8E8", -":. c #FAA1A1", -"<. c #FF7878", -"[. c #FF5050", -"}. c #FF2323", -"|. c #FF0E0E", -"1. c #FF0B0B", -"2. c #F90606", -"3. c #D00000", -"4. c #FC4B4B", -"5. c #FF8383", -"6. c #FF8686", -"7. c #FF8989", -"8. c #FF9C9C", -"9. c #FFDDDD", -"0. c #FF5B5B", -"a. c #FF2F2F", -"b. c #FF1E1E", -"c. c #FF1919", -"d. c #FF1313", -"e. c #FA0C0C", -"f. c #CA0505", -"g. c #D50101", -"h. c #FD3030", -"i. c #FF5D5D", -"j. c #FF6B6B", -"k. c #FF7777", -"l. c #FF7C7C", -"m. c #FF9191", -"n. c #FFDBDB", -"o. c #FFFDFD", -"p. c #FF3A3A", -"q. c #FF2929", -"r. c #FF2222", -"s. c #FF1B1B", -"t. c #FB1212", -"u. c #CC0707", -"v. c #DA0404", -"w. c #FE0A0A", -"x. c #FF1414", -"y. c #FF2121", -"z. c #FF3030", -"A. c #FF6A6A", -"B. c #FFD7D7", -"C. c #FFF2F2", -"D. c #FF5252", -"E. c #FF3434", -"F. c #FF2424", -"G. c #FC1B1B", -"H. c #CE0C0C", -"I. c #D50909", -"J. c #FF1818", -"K. c #FF1F1F", -"L. c #FE4D4D", -"M. c #FEDEDE", -"N. c #FF8282", -"O. c #FF5C5C", -"P. c #FFF6F6", -"Q. c #FEC3C3", -"R. c #FE4A4A", -"S. c #FF3636", -"T. c #FF2E2E", -"U. c #F92727", -"V. c #C91313", -"W. c #B10202", -"X. c #DD1414", -"Y. c #FD2424", -"Z. c #FF2828", -"`. c #FB3E3E", -" + c #F8ABAB", -".+ c #FFFCFC", -"++ c #FFE3E3", -"@+ c #FF8585", -"#+ c #FF7373", -"$+ c #FF6C6C", -"%+ c #FE9797", -"&+ c #FCF1F1", -"*+ c #F08E8E", -"=+ c #FC4C4C", -"-+ c #FF4141", -";+ c #FD3D3D", -">+ c #D62020", -",+ c #A50404", -"'+ c #BB0303", -")+ c #D81818", -"!+ c #F73636", -"~+ c #FF3D3D", -"{+ c #FB4848", -"]+ c #FB9292", -"^+ c #FF7D7D", -"/+ c #FF7272", -"(+ c #FF8080", -"_+ c #FE7C7C", -":+ c #FC9191", -"<+ c #FA5C5C", -"[+ c #FF5A5A", -"}+ c #F64E4E", -"|+ c #D52323", -"1+ c #B20404", -"2+ c #9E0000", -"3+ c #C00000", -"4+ c #D31717", -"5+ c #F64848", -"6+ c #FF5555", -"7+ c #FE5656", -"8+ c #FE6161", -"9+ c #FF9D9D", -"0+ c #FF9E9E", -"a+ c #F97373", -"b+ c #FD7676", -"c+ c #FF7474", -"d+ c #F46060", -"e+ c #D01E1E", -"f+ c #B80000", -"g+ c #C60000", -"h+ c #D81C1C", -"i+ c #F65C5C", -"j+ c #FF6D6D", -"k+ c #FF9393", -"l+ c #FFAAAA", -"m+ c #FFB0B0", -"n+ c #FFACAC", -"o+ c #FFA3A3", -"p+ c #FF9898", -"q+ c #F67777", -"r+ c #D52121", -"s+ c #BD0000", -"t+ c #C70000", -"u+ c #DC1616", -"v+ c #F05757", -"w+ c #FD8B8B", -"x+ c #FE9B9B", -"y+ c #FEA8A8", -"z+ c #FEB5B5", -"A+ c #FEBFBF", -"B+ c #FEC5C5", -"C+ c #FEC1C1", -"D+ c #FEB8B8", -"E+ c #FEAAAA", -"F+ c #F06E6E", -"G+ c #D91D1D", -"H+ c #CB0202", -"I+ c #DE0909", -"J+ c #E52727", -"K+ c #E72F2F", -"L+ c #E83232", -"M+ c #E83535", -"N+ c #E93737", -"O+ c #E83838", -"P+ c #E73838", -"Q+ c #E73737", -"R+ c #E53636", -"S+ c #E32F2F", -"T+ c #DB0B0B", -"U+ c #C40000", -"V+ c #C80C0C", -"W+ c #E10404", -"X+ c #E30303", -"Y+ c #E40404", -"Z+ c #E50505", -"`+ c #E50404", -" @ c #E50202", -".@ c #E40101", -"+@ c #E30000", -"@@ c #E10000", -"#@ c #DF0000", -"$@ c #C50000", -" ", -" . + @ @ @ @ @ @ # $ ", -" % & * = - - - - - - = ; > ", -" , ' ) ! ~ ! ! ! ! ! ! ~ { ] ^ ", -" / ( _ : < ~ [ } } } } [ | 1 2 3 4 5 ", -" 6 7 ] 8 9 0 a b c d d c e f 0 g e h i j ", -" k l m n o 0 0 0 p q r r s t 0 0 0 u v m w x ", -"y z A B C D E 0 0 0 F G H f 0 0 0 I J K L M N ", -"O P l Q Q R S T 0 0 0 U 9 0 0 0 V W X M Y Z ` ", -"O ...+.@...#.S $.0 0 0 0 0 %.&.*.Q =.-.;.>.,. ", -"'.).!.~.{.].^./.(.o 0 0 0 0 _.:.@.<.[.}.|.1.2. ", -"3.4.5.5.6.7.{.8.9.%.0 0 0 0 9 { 0.a.}.b.c.d.e.f.", -"g.h.i.j.k.l.m.n.0 0 0 9 o.0 0 9 8.p.a.q.r.s.t.u.", -"v.w.x.y.z.A.B.0 0 0 < 7.8.C.0 0 U h D.E.;.F.G.H.", -"I.t.J.K.L.M.0 0 0 a N.O.O.X P.0 0 0 Q.R.S.T.U.V.", -"W.X.Y.Z.`. +.+0 ++@+A.#+-.$+%+C.0 &+*+=+-+;+>+,+", -" '+)+!+~+{+]+} ^+/+(+6.7.{._+:+D @ <+[+}+|+1+ ", -" 2+3+4+5+6+7+8+<.6.m.X 9+0+M w a+b+c+d+e+f+ ", -" g+h+i+j+k.6.k+B l+m+c n+o+p+^.q+r+s+ ", -" t+u+v+w+x+y+z+A+B+B+C+D+E+F+G+s+ ", -" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+ ", -" V+W+X+Y+Z+`+ @.@+@@@#@$@ ", -" ", -" "}; diff --git a/apps/hmt-slam-gui/imgs/main_icon.ico b/apps/hmt-slam-gui/imgs/main_icon.ico deleted file mode 100644 index 50387f1d21..0000000000 Binary files a/apps/hmt-slam-gui/imgs/main_icon.ico and /dev/null differ diff --git a/apps/hmt-slam-gui/imgs/main_icon.xpm b/apps/hmt-slam-gui/imgs/main_icon.xpm deleted file mode 100644 index d214f3bef7..0000000000 --- a/apps/hmt-slam-gui/imgs/main_icon.xpm +++ /dev/null @@ -1,203 +0,0 @@ -/* XPM */ -static const char * main_icon_xpm[] = { -"32 32 168 2", -" c None", -". c #6432E1", -"+ c #6736DC", -"@ c #6432E0", -"# c #6839D9", -"$ c #6534DF", -"% c #6F43D0", -"& c #8A6FA9", -"* c #6C3FD4", -"= c #693AD9", -"- c #9B8B8F", -"; c #947F9A", -"> c #805FB7", -", c #C9D34D", -"' c #B7B667", -") c #A49982", -"! c #D6E83B", -"~ c #CDDB46", -"{ c #C3CA56", -"] c #D5E63C", -"^ c #D2E240", -"/ c #1D1D1D", -"( c #262626", -"_ c #19171C", -": c #121115", -"< c #323235", -"[ c #303031", -"} c #404040", -"| c #CDCDCD", -"1 c #131313", -"2 c #222125", -"3 c #CDD948", -"4 c #776E8C", -"5 c #665B82", -"6 c #B8AED1", -"7 c #EDE8FB", -"8 c #FAF8FE", -"9 c #FFFFFF", -"0 c #000000", -"a c #403F40", -"b c #C5C2CE", -"c c #B8B865", -"d c #9B8A90", -"e c #9D7DEC", -"f c #A385ED", -"g c #C8B7F4", -"h c #FDFDFE", -"i c #171717", -"j c #727272", -"k c #FDFCFE", -"l c #EAE4FB", -"m c #B8A1F1", -"n c #7954C1", -"o c #6E43D1", -"p c #764AE4", -"q c #E0D6F9", -"r c #FBFAFE", -"s c #1A1A1A", -"t c #323232", -"u c #7D7D7D", -"v c #BEBEBE", -"w c #BFBFBF", -"x c #808080", -"y c #8159E6", -"z c #6B6B6B", -"A c #2E2E2E", -"B c #303030", -"C c #313131", -"D c #323233", -"E c #333236", -"F c #413F46", -"G c #D4E53D", -"H c #FEFEFE", -"I c #191919", -"J c #F4F0FC", -"K c #D6C9F7", -"L c #AF95EF", -"M c #393939", -"N c #7F7F7F", -"O c #CAC9CD", -"P c #C1BBCF", -"Q c #D8CCF7", -"R c #CEBFF5", -"S c #BFC35C", -"T c #F3EFFC", -"U c #676767", -"V c #F2EEFC", -"W c #E4DCF9", -"X c #DCD1F8", -"Y c #4F4F4F", -"Z c #2F2F2F", -"` c #CAB9F4", -" . c #9877EB", -".. c #855EE7", -"+. c #968297", -"@. c #FCFBFE", -"#. c #D3D3D3", -"$. c #EAE3FB", -"%. c #AC92EF", -"&. c #7346E3", -"*. c #6635DD", -"=. c #C8B6F4", -"-. c #F8F6FD", -";. c #ECE6FB", -">. c #B198EF", -",. c #774BE4", -"'. c #6A3AE2", -"). c #8761E7", -"!. c #CBBAF5", -"~. c #F9F7FD", -"{. c #666666", -"]. c #F5F2FD", -"^. c #D1C2F6", -"/. c #A588ED", -"(. c #926FEA", -"_. c #B49CF0", -":. c #E2D9F9", -"<. c #040404", -"[. c #080808", -"}. c #CACACA", -"|. c #F1EDFC", -"1. c #DACEF7", -"2. c #E8E1FA", -"3. c #F7F4FD", -"4. c #D5E73B", -"5. c #4D4D4D", -"6. c #CBD64A", -"7. c #7E7C84", -"8. c #7D7D7F", -"9. c #0C0C0C", -"0. c #343434", -"a. c #F6F3FC", -"b. c #DCD2F7", -"c. c #BFABF1", -"d. c #A19486", -"e. c #D0C2F5", -"f. c #EEE8FB", -"g. c #FDFDFD", -"h. c #282828", -"i. c #EBE4FA", -"j. c #B59DF0", -"k. c #825AE6", -"l. c #7248CB", -"m. c #9B7BEB", -"n. c #D6C9F6", -"o. c #FBFAFD", -"p. c #E6E6E6", -"q. c #B9B9B9", -"r. c #A183EC", -"s. c #6E3FE2", -"t. c #6534DE", -"u. c #7E55E6", -"v. c #C7B5F3", -"w. c #1E1E1E", -"x. c #B9A3F1", -"y. c #855DE7", -"z. c #7447E4", -"A. c #9574EA", -"B. c #D4C6F6", -"C. c #FAF9FD", -"D. c #242424", -"E. c #E1D7F8", -"F. c #C2AEF3", -"G. c #CBBBF4", -"H. c #EBE5FB", -"I. c #767676", -"J. c #EEE9FB", -"K. c #F5F2FC", -" . . . ", -" . . . . . . . ", -" . . . . + . . . . ", -" . . . . @ . . . . ", -" . . . . . . . . . . . ", -" . . . . . . . @ . . . ", -" . . . . . . . . # . ", -" . . . $ @ . . % & ", -" . . * . = . . - ", -" ; . . > . . , ", -" ' ) ! ", -" ~ { ! ! ", -" ] ^ ! / ( ", -" ! ! ! _ : < [ } | ", -" ! ! 1 2 3 4 5 6 7 8 9 ", -" ! ! 0 1 0 0 a b c d e f g 7 h ", -" ! i 0 0 ! j } 9 9 k l m n o p f q r ", -" s ! 0 t u v w ! x 9 9 9 k l m y o p f q r ", -" / z A B C D E F G H 9 9 9 9 ! x I | 9 H J K L e f g 7 h ", -" M 0 } N | | O P Q R S T H 9 9 9 9 ! U t x 9 r V W X q 7 8 9 ", -"Y Z N 9 9 9 9 H T ` ...+.X @.9 9 9 9 ! 9 9 I U 9 H @.r r h 9 9 ", -"A #.9 9 9 9 9 k $.%.&.*.y =.-.9 9 9 9 ! 9 9 9 N I x 9 9 9 9 9 x ", -"0 9 9 9 9 9 9 k ;.>.,.'.).!.~.9 9 9 9 ! 9 9 9 9 U {.{.x } 0 0 N ", -"} } 9 9 9 9 9 H ].^./.(._.:.@.9 9 9 9 ! 9 9 9 | } t <.0 [.9 9 9 ", -"}.t 0 9 9 9 9 9 @.|.:.1.2.3.H 9 9 9 9 H 4.I U t } 9 9 5.( 0 x 9 ", -" 9 x t 9 9 9 9 9 H @.r k H 9 9 9 h ~.V 6.7.8.9 9 9 9 9 | t 9.I ", -" 9 0.} | 9 9 9 9 9 9 9 9 9 9 H a.b.c.d.e.f.g.9 9 9 9 9 9 U {.", -" C h.9 9 9 9 9 9 9 } x 9 h i.j.k.l.m.n.o.9 9 9 9 9 9 9 9 ", -" 9 B h.p.q.I h.t } N 9 @.W r.s.t.u.v.3.9 9 9 9 9 9 9 9 ", -" 0 / w.x | | 9 9 9 h f.x.y.z.A.B.C.9 9 9 9 9 9 9 9 ", -" D.| 9 9 9 9 9 9 9 -.E.F._.G.H.h 9 9 9 9 9 9 9 9 ", -" i I.9 9 9 9 9 9 9 9 C.T J.K.@.9 9 9 9 9 9 9 9 9 "}; diff --git a/apps/hmt-slam-gui/resource.rc b/apps/hmt-slam-gui/resource.rc deleted file mode 100644 index 39123de957..0000000000 --- a/apps/hmt-slam-gui/resource.rc +++ /dev/null @@ -1,3 +0,0 @@ -aaaa ICON "imgs/main_icon.ico" - -#include "wx/msw/wx.rc" diff --git a/apps/hmt-slam-gui/thread_hmtslam.cpp b/apps/hmt-slam-gui/thread_hmtslam.cpp deleted file mode 100644 index 50a7edbaca..0000000000 --- a/apps/hmt-slam-gui/thread_hmtslam.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include -#include -#include -#include - -#include -#include -#include - -#include "hmt_slam_guiMain.h" - -using namespace std; -using namespace mrpt; -using namespace mrpt::serialization; -using namespace mrpt::hmtslam; -using namespace mrpt::img; -using namespace mrpt::slam; -using namespace mrpt::poses; -using namespace mrpt::obs; -using namespace mrpt::system; -using namespace mrpt::maps; -using namespace mrpt::io; - -void hmt_slam_guiFrame::thread_HMTSLAM() -{ - try - { - cout << "[HMTSLAMGUI_THREAD] Thread alive\n"; - - bool is_running_slam = false; - - std::unique_ptr fInRawlog; - std::string OUT_DIR = "./HMTSLAM_OUT"; - unsigned int rawlogEntry = 0; // step = 0; - - while (true) - { - try - { - bool end = false; - const bool old_is_running = is_running_slam; - if (!m_thread_in_queue.empty()) - { - TThreadMsg* msg = m_thread_in_queue.get(); - - switch (msg->opcode) - { - case OP_QUIT_THREAD: end = true; break; - case OP_START_SLAM: is_running_slam = true; break; - case OP_PAUSE_SLAM: is_running_slam = false; break; - - default: - throw std::runtime_error("Unknown OPCODE!"); - break; - } - delete msg; - } - if (end) break; // end thread - - // If we are running SLAM, read actions/observations and feed - // them into the SLAM engine: - // ---------------------------------------------------------------------------------------- - if (is_running_slam && !old_is_running) - { - // This is the FIRST iteration: - fInRawlog.reset(); - - // From the text block: - // CConfigFileMemory cfg( - // std::string(edRestParams->GetValue().mb_str()) ); - const string fil = string( - this->edInputRawlog->GetValue() - .mb_str()); // cfg.read_string("HMT-SLAM","rawlog_file",""); - if (!mrpt::system::fileExists(fil)) - { - is_running_slam = false; - throw std::runtime_error( - format("Rawlog file not found: %s", fil.c_str())); - } - else - { - fInRawlog = std::make_unique(fil); - m_hmtslam->logFmt( - mrpt::system::LVL_INFO, "RAWLOG FILE: \n%s\n", - fil.c_str()); - OUT_DIR = - "HMT_SLAM_OUTPUT"; // cfg.read_string("HMT-SLAM","LOG_OUTPUT_DIR", - // "HMT_SLAM_OUTPUT"); - - // Set relative path for externally-stored images in - // rawlogs: - string rawlog_images_path = extractFileDirectory(fil); - rawlog_images_path += "/Images"; - CImage::setImagesPathBase( - rawlog_images_path); // Set it. - - rawlogEntry = 0; - // step = 0; - } - } // end first iteration - - if (!is_running_slam && fInRawlog) fInRawlog.reset(); - - if (is_running_slam) - { - ASSERT_(fInRawlog); - - // Wait for the mapping framework processed the data - // --------------------------------------------------- - if (!m_hmtslam->isInputQueueEmpty()) - { - std::this_thread::sleep_for(2ms); - continue; - } - - // Load next object from the rawlog: - // ---------------------------------------- - CSerializable::Ptr objFromRawlog; - try - { - archiveFrom(*fInRawlog) >> objFromRawlog; - rawlogEntry++; - cout << "[HMT-SLAM-GUI] Read rawlog entry " - << rawlogEntry << endl; - } - catch (std::exception&) - { - is_running_slam = false; - cout << endl - << "=============== END OF RAWLOG FILE: ENDING " - "HMT-SLAM ==============\n"; - continue; - } - catch (...) - { - printf("Untyped exception reading rawlog file!!\n"); - break; - } - - // Process the action and observations: - // -------------------------------------------- - if (IS_CLASS(*objFromRawlog, CActionCollection)) - { - m_hmtslam->pushAction( - std::dynamic_pointer_cast( - objFromRawlog)); // Memory will be freed in - // mapping class - } - else if (IS_CLASS(*objFromRawlog, CSensoryFrame)) - { - m_hmtslam->pushObservations( - std::dynamic_pointer_cast( - objFromRawlog)); // Memory will be freed in - // mapping class - } - else if (IS_CLASS(*objFromRawlog, CObservation)) - { - m_hmtslam->pushObservation( - std::dynamic_pointer_cast( - objFromRawlog)); // Memory will be freed in - // mapping class - } - else - THROW_EXCEPTION("Invalid object class from rawlog!!"); - - } // end is_running_slam - - std::this_thread::sleep_for(5ms); - } - catch (const std::exception& e) - { - cerr << "[HMTSLAMGUI_THREAD] Exception: \n" - << mrpt::exception_to_str(e); - } - - } // while running - } - catch (const std::exception& e) - { - cerr << "[HMTSLAMGUI_THREAD] Exception: \n" - << mrpt::exception_to_str(e); - } - cout << "[HMTSLAMGUI_THREAD] Thread closed\n"; -} diff --git a/apps/hmt-slam-gui/wxsmith/CDlgLog.wxs b/apps/hmt-slam-gui/wxsmith/CDlgLog.wxs deleted file mode 100644 index 728c63e532..0000000000 --- a/apps/hmt-slam-gui/wxsmith/CDlgLog.wxs +++ /dev/null @@ -1,69 +0,0 @@ - - - - Log messages - 50,350 - 344,143 - 1 - 1 - - - - 1 - 2 - 0 - 1 - - - 3 - 2 - - - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - 1 - 1 - 0 - 0 - - - 408,96 - - 8 - teletype - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 1 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - 250 - - - - diff --git a/apps/hmt-slam-gui/wxsmith/hmt_slam_guiframe.wxs b/apps/hmt-slam-gui/wxsmith/hmt_slam_guiframe.wxs deleted file mode 100644 index 2be6bcb063..0000000000 --- a/apps/hmt-slam-gui/wxsmith/hmt_slam_guiframe.wxs +++ /dev/null @@ -1,592 +0,0 @@ - - - - HTM-SLAM - Part of the MRPT project - - 700,400 - -1,300 - - 1 - 2 - 0 - 1 - - - - 12 - 8 - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1,-1 - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1,-1 - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1,-1 - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - - 10,2 - -1,3 - - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - - 1 - 1 - 0 - 0 - - - - - - 1 - 2 - 0 - 1 - - - 3 - 1 - 1 - - - - - wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL - 5 - - - - - dataset.rawlog - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - - - - wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - 1 - 2 - 0 - 1 - - - - - wxALL|wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL - 5 - - - - - //==================================================== // HMT-SLAM // Here come global parameters for the app. //==================================================== [HMT-SLAM] // The directory where the log files will be saved (left in blank if no log is required) LOG__OUTPUT__DIR = LOG__HTMSLAM__MALAGA rawlog__offset = 0 // Whether to skip some rawlog entries LOG__FREQUENCY = 20 // The frequency of log files generation: LOG__SHOW3D = 1 random__seed = 1234 // 0:Randomize, !=0:use that seed. // -------------------------------- // Local SLAM method selection: // 1: RBPF__2DLASER // -------------------------------- SLAM__METHOD=1 //SLAM__MIN__DIST__BETWEEN__OBS=1.0 // Map updates threshold (meters) //SLAM__MIN__HEADING__BETWEEN__OBS__DEG=50 // Map updates threshold (degrees) SLAM__MIN__DIST__BETWEEN__OBS=1.25 // Map updates threshold (meters) SLAM__MIN__HEADING__BETWEEN__OBS__DEG=30 // Map updates threshold (degrees) MIN__ODOMETRY__STD__XY = 0.05 // Minimum sigma in odometry increments (meters) MIN__ODOMETRY__STD__PHI = 2 // Minimum sigma in odometry increments (deg) // Loop closure detectors: // gridmaps // images TLC__DETECTORS=gridmaps // ==================================================== // TLC__GRIDMATCHING // // Top. Loop-closure detector based on grid-matching // ==================================================== [TLC__GRIDMATCHING] featsPerSquareMeter = 0.012 threshold__max = 0.20 // For considering candidate matches threshold__delta = 0.09 ransac__prob__good__inliers = 0.9999999999 // Prob. of a good inliers (for the number of iterations). maxKLd__for__merge = 0.9 // Merge of close SOG modes min__ICP__goodness = 0.25 max__ICP__mahadist = 20 //10 // The maximum Mahalanobis distance between the initial and final poses in the ICP not to discard the hypothesis (default=10) ransac__minSetSizeRatio = 0.15 // 0.20 ransac__mahalanobisDistanceThreshold = 6 // amRobust method only ransac__chi2__quantile = 0.5 // amModifiedRANSAC method only save__feat__coors = 0 // Dump correspondences to grid__feats debug__save__map__pairs = 1 // Save the pair of maps with the best correspondences debug__show__corrs = 0 // Debug output of graphs // ---------------------------------------------------------- // All the params of the feature detectors/descriptors // ---------------------------------------------------------- featsType = 1 // 0: KLT, 1: Harris, 3: SIFT, 4: SURF // The feature descriptor to use: 0=detector already has descriptor, // 1= SIFT, 2=SURF, 4=Spin images, 8=Polar images, 16=log-polar images feature__descriptor = 8 patchSize = 0 // Not needed KLTOptions.min__distance = 6 // Pixels KLTOptions.threshold = 0.01 // 0.10 // 0.20 harrisOptions.min__distance = 6 // Pixels harrisOptions.threshold = 0.10 // 0.20 SIFTOptions.implementation = 3 // Hess SURFOptions.rotation__invariant = 1 // 0=64 dims, 1=128dims SpinImagesOptions.hist__size__distance = 10 SpinImagesOptions.hist__size__intensity = 10 SpinImagesOptions.radius = 20 PolarImagesOptions.bins__angle = 8 PolarImagesOptions.bins__distance = 6 PolarImagesOptions.radius = 40 LogPolarImagesOptions.radius = 20 LogPolarImagesOptions.num__angles = 8 // ==================================================== // // PARTICLE__FILTER // // Parameters of the PARTICLE FILTER within each LMH, // invoked & implemented in CLSLAM__RBPF__2DLASER // ==================================================== [PARTICLE__FILTER] //---------------------------------------------------------------------------------- // The Particle Filter algorithm: // 0: pfStandardProposal // 1: pfAuxiliaryPFStandard // 2: pfOptimalProposal *** (ICP,...) // 3: pfAuxiliaryPFOptimal *** (Optimal SAMPLING) // // See: https://www.mrpt.org/Particle__Filters //---------------------------------------------------------------------------------- PF__algorithm=3 adaptiveSampleSize = 0 // 0: Fixed # of particles, 1: KLD adaptive //---------------------------------------------------------------------------------- // The Particle Filter Resampling method: // 0: prMultinomial // 1: prResidual // 2: prStratified // 3: prSystematic // // See: /docs/html/topic__resampling.html or http://mrpt.sourceforge.net/topic__resampling.html //---------------------------------------------------------------------------------- resamplingMethod=0 pfAuxFilterOptimal__MaximumSearchSamples = 250 // For PF algorithm=3 sampleSize = 5 // Number of particles (for fixed number algorithms) BETA = 0.50 // Resampling ESS threshold powFactor = 0.01 // A "power factor" for updating weights // ==================================================== // GRAPH__CUT // // Params for Area Abstraction (AA) // ==================================================== [GRAPH__CUT] partitionThreshold = 0.6 // In the range [0,1]. Lower gives larger clusters. minDistForCorrespondence = 0.50 useMapMatching = 1 minimumNumberElementsEachCluster = 5 // ==================================================== // // MULTIMETRIC MAP CONFIGURATION // // The params for creating the metric maps for // each LMH. // ==================================================== [MetricMaps] // Creation of maps: occupancyGrid__count = 1 gasGrid__count = 0 landmarksMap__count = 0 beaconMap__count = 0 pointsMap__count = 1 // Selection of map for likelihood: (fuseAll=-1,occGrid=0, points=1,landmarks=2,gasGrid=3) likelihoodMapSelection = 0 // Enables (1) / Disables (0) insertion into specific maps: enableInsertion__pointsMap = 1 enableInsertion__landmarksMap= 1 enableInsertion__beaconMap = 1 enableInsertion__gridMaps = 1 enableInsertion__gasGridMaps = 1 // ==================================================== // MULTIMETRIC MAP: OccGrid #00 // ==================================================== // Creation Options for OccupancyGridMap 00: [MetricMaps__occupancyGrid__00__creationOpts] resolution=0.07 disableSaveAs3DObject=0 // Insertion Options for OccupancyGridMap 00: [MetricMaps__occupancyGrid__00__insertOpts] mapAltitude = 0 useMapAltitude = 0 maxDistanceInsertion = 35 maxOccupancyUpdateCertainty = 0.60 considerInvalidRangesAsFreeSpace = 1 minLaserScanNoiseStd = 0.001 horizontalTolerance = 0.9 // In degrees CFD__features__gaussian__size = 3 CFD__features__median__size = 3 // Likelihood Options for OccupancyGridMap 00: [MetricMaps__occupancyGrid__00__likelihoodOpts] likelihoodMethod = 4 // 0=MI, 1=Beam Model, 2=RSLC, 3=Cells Difs, 4=LF__Thrun, 5=LF__II LF__decimation = 4 LF__stdHit = 0.10 LF__maxCorrsDistance = 0.50 LF__zHit = 0.999 LF__zRandom = 0.001 LF__maxRange = 60 LF__alternateAverageMethod = 0 enableLikelihoodCache = 1 // ==================================================== // MULTIMETRIC MAP: PointMap #00 // ==================================================== // Creation Options for Pointsmap 00: // Creation Options for OccupancyGridMap 00: [MetricMaps__PointsMap__00__creationOpts] disableSaveAs3DObject=0 [MetricMaps__PointsMap__00__insertOpts] minDistBetweenLaserPoints=0.05 // The minimum distance between points (in 3D): If two points are too close, one of them is not inserted into the map. isPlanarMap=0 // If set to true, only HORIZONTAL (i.e. XY plane) measurements will be inserted in the map. Default value is false, thus 3D maps are generated - - 8 - teletype - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 1 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - - - - - - 1 - 1 - 0 - 0 - - - 10 - vertical - 176,320 - 10,10 - - - - 1 - 3 - 0 - 1 - - - 2 - - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - - - - - - 1 - 2 - 0 - 0 - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - - 1 - - - - - - - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 1 - - - - - - 1 - 2 - 0 - 0 - - - - - - - bold - wxSYS_SYSTEM_FONT - 1.000000 - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - wxALL|wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL - - - - - - 1 - 2 - 0 - - - 3 - - - 1 - - 10,2 - -1,3 - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - 3 - - - 1 - - 10,2 - -1,3 - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - - 1 - - 10,2 - -1,3 - - wxALL|wxALIGN_LEFT|wxALIGN_BOTTOM - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - - - - - 60 - 60,60 - - - 100,100 - 100,100 - - 1 - 0 - 1 - - - - - bold - wxSYS_SYSTEM_FONT - 1.000000 - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - - - 1 - 0 - 0 - - - $(THIS) = new $(CLASS)($(PARENT),$(ID),$(POS),$(SIZE),$(STYLE),$(NAME)); - MyGLCanvas.h - 1 - - 1 - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - 100,100 - 100,100 - - 1 - 0 - 1 - - - - - bold - wxSYS_SYSTEM_FONT - 1.000000 - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - - - 1 - 0 - 0 - - - $(THIS) = new $(CLASS)($(PARENT),$(ID),$(POS),$(SIZE),$(STYLE),$(NAME)); - MyGLCanvas.h - 1 - - 1 - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - - 1 - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - 1 - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_BOTTOM - - - - - - - - - - - - - - - - - - - - - - - Alt-F4 - Quit the application - - - - - - - - - - - - - - - - - - - - - - - - F1 - Show info about this application - - - - - - 1 - -1 - wxSB_NORMAL - - - diff --git a/apps/hmt-slam/CMakeLists.txt b/apps/hmt-slam/CMakeLists.txt deleted file mode 100644 index 9b4d72dee7..0000000000 --- a/apps/hmt-slam/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ - - -#----------------------------------------------------------------- -# CMake file for the MRPT application: HMT-SLAM -# -# Run with "cmake ." at the root directory -# -# December 2007, Jose Luis Blanco -#----------------------------------------------------------------- -project(hmt-slam) - - - -# --------------------------------------------- -# TARGET: -# --------------------------------------------- -# Define the executable target: -add_executable(${PROJECT_NAME} - hmt-slam_main.cpp - ${MRPT_VERSION_RC_FILE}) - -# Dependencies on MRPT libraries: -# Just mention the top-level dependency, the rest will be detected automatically, -# and all the needed #include<> dirs added (see the script DeclareAppDependencies.cmake for further details) -DeclareAppDependencies(${PROJECT_NAME} mrpt::hmtslam mrpt::slam mrpt::bayes) - -DeclareAppForInstall(${PROJECT_NAME}) diff --git a/apps/hmt-slam/README.txt b/apps/hmt-slam/README.txt deleted file mode 100644 index 379c3cb6f0..0000000000 --- a/apps/hmt-slam/README.txt +++ /dev/null @@ -1,34 +0,0 @@ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Application: HMT_SLAM - - Part of "The Mobile Robot Programming Toolkit (MRPT)" -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - --------------- - DESCRIPTION --------------- - -This application implements Hybrid Metric-Topological (HMT) SLAM. - -See the application description page for more information: - - https://www.mrpt.org/list-of-mrpt::apps/application-HMT-SLAM - --------------- - COMPILING --------------- -Under Linux, invoke "make" at this directory. In windows build this from the global MRPT solution. - -For more information check out: -http://www.mrpt.org/Building_and_Installing_Instructions - --------------- - CHANGE LOG --------------- - -- Version 0.2, released with the MRPT version 0.4 with the name "HMT_SLAM". - * All the options have been moved to an external .INI file. - -- MapBuildingFromRawLog Version 0.1 (2005-2006), initial development. - diff --git a/apps/hmt-slam/hmt-slam_main.cpp b/apps/hmt-slam/hmt-slam_main.cpp deleted file mode 100644 index 9ea1698060..0000000000 --- a/apps/hmt-slam/hmt-slam_main.cpp +++ /dev/null @@ -1,240 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -/*--------------------------------------------------------------- - APPLICATION: Hybrid Metric-Topological SLAM implementation - FILE: hmt-slam_main.cpp - AUTHOR: Jose Luis Blanco Claraco - - See README.txt for instructions. - ---------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace mrpt; -using namespace mrpt::slam; -using namespace mrpt::obs; -using namespace mrpt::hmtslam; -using namespace mrpt::config; -using namespace mrpt::io; -using namespace mrpt::img; -using namespace mrpt::opengl; -using namespace mrpt::system; -using namespace mrpt::math; -using namespace mrpt::system; -using namespace mrpt::serialization; -using namespace std; - -std::string configFile; - -#define STEPS_BETWEEN_WAITING_FOR_QUEUE_EMPTY 10 - -void Run_HMT_SLAM(); - -// ------------------------------------------------------ -// MAIN -// ------------------------------------------------------ -int main(int argc, char** argv) -{ - try - { - CConsoleRedirector dbg_out_file( - "./DEBUG_log_streaming.txt", true, true, false, 0); - - printf(" HMT-SLAM version 0.2 - Part of the MRPT\n"); - printf( - " MRPT C++ Library: %s - Sources timestamp: %s\n", - MRPT_getVersion().c_str(), MRPT_getCompilationDate().c_str()); - printf( - "------------------------------------------------------------------" - "-\n"); - - // Process arguments: - if (argc < 2) - { - printf("Use: hmt-slam \n\nPush any key to exit...\n"); - os::getch(); - return -1; - } - - configFile = std::string(argv[1]); - - Run_HMT_SLAM(); - - return 0; - } - catch (const std::exception& e) - { - std::cerr << mrpt::exception_to_str(e) << std::endl - << "Program finished for an exception!!" << std::endl; - mrpt::system::pause(); - return -1; - } - catch (...) - { - std::cerr << "Untyped exception!!" << std::endl; - mrpt::system::pause(); - return -1; - } -} - -// ------------------------------------------------------ -// TestMapping -// ------------------------------------------------------ -void Run_HMT_SLAM() -{ - CHMTSLAM mapping; - - CConfigFile cfgFile(configFile); - std::string rawlogFileName; - - // wait for threads init. (Just to do not mix debug strings on console) - std::this_thread::sleep_for(100ms); - - // The rawlog file: - // ---------------------------------------- - rawlogFileName = cfgFile.read_string( - "HMT-SLAM", "rawlog_file", std::string("log.rawlog")); - unsigned int rawlog_offset = - cfgFile.read_int("HMT-SLAM", "rawlog_offset", 0); - - mapping.logFmt( - mrpt::system::LVL_INFO, "RAWLOG FILE: \n%s\n", rawlogFileName.c_str()); - - const std::string OUT_DIR = - cfgFile.read_string("HMT-SLAM", "LOG_OUTPUT_DIR", "HMT_SLAM_OUTPUT"); - - ASSERT_FILE_EXISTS_(rawlogFileName); - CFileGZInputStream rawlogFile(rawlogFileName); - - mapping.logStr( - mrpt::system::LVL_INFO, - "---------------------------------------------------\n\n"); - - // Set relative path for externally-stored images in rawlogs: - string rawlog_images_path = extractFileDirectory(rawlogFileName); - rawlog_images_path += "/Images"; - CImage::setImagesPathBase(rawlog_images_path); // Set it. - - // Load the config options for mapping: - // ---------------------------------------- - mapping.loadOptions(configFile); - - // INITIALIZATION - // ---------------------------------------- - mapping.initializeEmptyMap(); - - // The main loop: - // --------------------------------------- - unsigned int rawlogEntry = 0, step = 0; - bool finish = false; - - while (!finish && !mapping.abortedDueToErrors()) - { - if (os::kbhit()) - { - char pushKey = os::getch(); - finish = 27 == pushKey; - } - - // Load next object from the rawlog: - // ---------------------------------------- - CSerializable::Ptr objFromRawlog; - try - { - archiveFrom(rawlogFile) >> objFromRawlog; - rawlogEntry++; - } - catch (std::exception&) - { - break; - } - catch (...) - { - printf("Untyped exception reading rawlog file!!\n"); - break; - } - - if (rawlogEntry >= rawlog_offset) - { - // Process the action and observations: - // -------------------------------------------- - if (IS_CLASS(*objFromRawlog, CActionCollection)) - { - mapping.pushAction(std::dynamic_pointer_cast( - objFromRawlog)); // Memory will be freed in mapping - // class - } - else if (IS_CLASS(*objFromRawlog, CSensoryFrame)) - { - mapping.pushObservations( - std::dynamic_pointer_cast( - objFromRawlog)); // Memory will be freed in mapping - // class - } - else if (IS_CLASS(*objFromRawlog, CObservation)) - { - mapping.pushObservation(std::dynamic_pointer_cast( - objFromRawlog)); // Memory will be freed in mapping - // class - } - else - THROW_EXCEPTION("Invalid object class from rawlog!!"); - - // Wait for the mapping framework processed the data - // --------------------------------------------------- - if ((rawlogEntry % STEPS_BETWEEN_WAITING_FOR_QUEUE_EMPTY) == 0) - while (!mapping.isInputQueueEmpty() && !os::kbhit() && - !mapping.abortedDueToErrors()) - { - std::this_thread::sleep_for(2ms); - } - } // (rawlogEntry>=rawlog_offset) - - mapping.logFmt( - mrpt::system::LVL_INFO, - "======== Rawlog entries processed: %i ========\n", rawlogEntry); - - step++; - - }; // end "while(1)" - - mapping.logFmt( - mrpt::system::LVL_INFO, - "********* Application finished!! 3 seconds to exit... **********\n"); - std::this_thread::sleep_for(1000ms); - mapping.logFmt( - mrpt::system::LVL_INFO, - "********* Application finished!! 2 seconds to exit... **********\n"); - std::this_thread::sleep_for(1000ms); - mapping.logFmt( - mrpt::system::LVL_INFO, - "********* Application finished!! 1 second to exit... **********\n"); - std::this_thread::sleep_for(1000ms); - - { - string final_file = OUT_DIR + string("/final_map.hmtslam"); - mapping.logFmt( - mrpt::system::LVL_WARN, "\n Saving FINAL HMT-MAP to file: %s\n", - final_file.c_str()); - CFileGZOutputStream fil(final_file); - auto arch = archiveFrom(fil); - mapping.saveState(arch); - } -} diff --git a/apps/hmtMapViewer/CMakeLists.txt b/apps/hmtMapViewer/CMakeLists.txt deleted file mode 100644 index 539ccce40d..0000000000 --- a/apps/hmtMapViewer/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ - - -#----------------------------------------------------------------- -# CMake file for the MRPT application: hmtMapViewer -# -# Run with "cmake ." at the root directory -# -# May 2008, Jose Luis Blanco -#----------------------------------------------------------------- -project(hmtMapViewer) - -if(NOT(CMAKE_MRPT_HAS_WXWIDGETS AND CMAKE_MRPT_HAS_OPENGL_GLUT)) - message(STATUS "wxWidgets and/or GL/GLUT not found!: **This target will not be included in the Makefiles**") - return() -endif() - -# --------------------------------------------- -# TARGET: -# --------------------------------------------- -set(SRCS - hmtMapViewerApp.cpp hmtMapViewerApp.h - hmtMapViewerMain.cpp hmtMapViewerMain.h - ) -if(WIN32) -# set(SRCS ${SRCS} resource.rc) -endif() - -# Define the executable target: -add_executable(${PROJECT_NAME} WIN32 ${SRCS} ${MRPT_VERSION_RC_FILE}) - -# Add the required libraries for linking: -target_link_libraries(${PROJECT_NAME} - imp_wxwidgets - ) - -# Dependencies on MRPT libraries: -# Just mention the top-level dependency, the rest will be detected automatically, -# and all the needed #include<> dirs added (see the script DeclareAppDependencies.cmake for further details) -DeclareAppDependencies(${PROJECT_NAME} mrpt::gui mrpt::slam mrpt::hmtslam) - -DeclareAppForInstall(${PROJECT_NAME}) - diff --git a/apps/hmtMapViewer/codeblocks_linux/hmtMapViewer.cbp b/apps/hmtMapViewer/codeblocks_linux/hmtMapViewer.cbp deleted file mode 100644 index f58b7750a5..0000000000 --- a/apps/hmtMapViewer/codeblocks_linux/hmtMapViewer.cbp +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - diff --git a/apps/hmtMapViewer/hmtMapViewerApp.cpp b/apps/hmtMapViewer/hmtMapViewerApp.cpp deleted file mode 100644 index 612a21202a..0000000000 --- a/apps/hmtMapViewer/hmtMapViewerApp.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include "hmtMapViewerApp.h" - -//(*AppHeaders -#include - -#include "hmtMapViewerMain.h" -//*) -#include -#include - -IMPLEMENT_APP(hmtMapViewerApp) - -// The file to open (from cmd line), or an empty string -std::string global_fileToOpen; - -#include -#include -#include -#include - -using namespace mrpt; -using namespace mrpt::slam; -using namespace mrpt::config; -using namespace mrpt::opengl; -using namespace mrpt::system; -using namespace mrpt::math; -using namespace std; - -// The configuration file: -CConfigFile* iniFile = nullptr; - -bool hmtMapViewerApp::OnInit() -{ - // Starting in wxWidgets 2.9.0, we must reset numerics locale to "C", - // if we want numbers to use "." in all countries. The App::OnInit() is a - // perfect place to undo - // the default wxWidgets settings. (JL @ Sep-2009) - wxSetlocale(LC_NUMERIC, wxString(wxT("C"))); - - // Process cmd line arguments (for the case of opening a file): - if (argc > 1) global_fileToOpen = wxString(wxApp::argv[1]).mb_str(); - - // Create the INI file: - wxString dataDir = wxStandardPaths::Get().GetUserDataDir(); - std::string dataDirStr(dataDir.mb_str()); - createDirectory(dataDirStr); // Create dir! - std::string iniFileName(dataDirStr + std::string("/config.cfg")); - iniFile = new CConfigFile(iniFileName); - - //(*AppInitialize - bool wxsOK = true; - wxInitAllImageHandlers(); - if (wxsOK) - { - auto* Frame = new hmtMapViewerFrame(nullptr); - Frame->Show(); - SetTopWindow(Frame); - } - //*) - return wxsOK; -} - -int hmtMapViewerApp::OnExit() -{ - delete iniFile; - iniFile = nullptr; - return 0; -} diff --git a/apps/hmtMapViewer/hmtMapViewerApp.h b/apps/hmtMapViewer/hmtMapViewerApp.h deleted file mode 100644 index 71567dfbd9..0000000000 --- a/apps/hmtMapViewer/hmtMapViewerApp.h +++ /dev/null @@ -1,22 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#ifndef HMTMAPVIEWERAPP_H -#define HMTMAPVIEWERAPP_H - -#include - -class hmtMapViewerApp : public wxApp -{ - public: - bool OnInit() override; - int OnExit() override; -}; - -#endif // HMTMAPVIEWERAPP_H diff --git a/apps/hmtMapViewer/hmtMapViewerMain.cpp b/apps/hmtMapViewer/hmtMapViewerMain.cpp deleted file mode 100644 index 4c15acd48b..0000000000 --- a/apps/hmtMapViewer/hmtMapViewerMain.cpp +++ /dev/null @@ -1,1133 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#include "hmtMapViewerMain.h" - -#include - -//(*InternalHeaders(hmtMapViewerFrame) -#include -#include -#include -#include -#include -#include -#include -//*) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -const char* iniFileSect = "configuration"; // For the .ini file - -// The file to open (from cmd line), or an empty string -extern std::string global_fileToOpen; - -#if !wxUSE_GLCANVAS -#error "OpenGL required: set wxUSE_GLCANVAS to 1 and rebuild wxWidgets" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace mrpt; -using namespace mrpt::slam; -using namespace mrpt::hmtslam; -using namespace mrpt::opengl; -using namespace mrpt::serialization; -using namespace mrpt::gui; -using namespace mrpt::system; -using namespace mrpt::math; -using namespace mrpt::poses; -using namespace mrpt::maps; -using namespace mrpt::config; -using namespace mrpt::io; -using namespace std; - -// The configuration file: -extern CConfigFile* iniFile; - -// HMT map to be displayed. -CHMTSLAM* hmt_map = nullptr; - -class CMyGLCanvas : public CWxGLCanvasBase -{ - public: - CMyGLCanvas( - wxWindow* parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = _T("CWxGLCanvasBase")) - : CWxGLCanvasBase(parent, id, pos, size, style, name) - { - } - - ~CMyGLCanvas() override = default; - // void OnKeyDownCustom( wxKeyEvent& event ); - - void OnPreRender() override; - void OnPostRender() override; - void OnPostRenderSwapBuffers(double At, wxPaintDC& dc) override; - void OnRenderError(const wxString& str) override; -}; - -void CMyGLCanvas::OnRenderError(const wxString& str) -{ - // theWindow->StatusBar1->SetStatusText(str,1); -} - -void CMyGLCanvas::OnPreRender() -{ - // Do we have to update the scene?? - /* std::lock_guard lock(critSec_UpdateScene ); - if (newOpenGLScene) - { - if (m_openGLScene) delete m_openGLScene; - m_openGLScene = newOpenGLScene; - newOpenGLScene = nullptr; - }*/ -} - -void CMyGLCanvas::OnPostRenderSwapBuffers(double At, wxPaintDC& dc) {} -void CMyGLCanvas::OnPostRender() -{ - // Show filename over the screen?? - // if (showFileNameInViewport) - { - // renderTextBitmap( 20,20, extractFileName(loadedFileName).c_str() - //); - } -} - -// Auxiliary class for the tree data -class CItemData : public wxTreeItemData -{ - public: - CSerializable::Ptr m_ptr; - size_t m_itemIndex; - - CItemData(CSerializable::Ptr ptr, size_t itemIndex) - : m_ptr(ptr), m_itemIndex(itemIndex) - { - } -}; - -//(*IdInit(hmtMapViewerFrame) -const long hmtMapViewerFrame::ID_STATICTEXT1 = wxNewId(); -const long hmtMapViewerFrame::ID_STATICTEXT2 = wxNewId(); -const long hmtMapViewerFrame::ID_CHOICE1 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL5 = wxNewId(); -const long hmtMapViewerFrame::ID_TREECTRL1 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL9 = wxNewId(); -const long hmtMapViewerFrame::ID_TEXTCTRL1 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL8 = wxNewId(); -const long hmtMapViewerFrame::ID_SPLITTERWINDOW3 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL1 = wxNewId(); -const long hmtMapViewerFrame::ID_STATICTEXT3 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL6 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL3 = wxNewId(); -const long hmtMapViewerFrame::ID_STATICTEXT4 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL7 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL4 = wxNewId(); -const long hmtMapViewerFrame::ID_SPLITTERWINDOW2 = wxNewId(); -const long hmtMapViewerFrame::ID_PANEL2 = wxNewId(); -const long hmtMapViewerFrame::ID_SPLITTERWINDOW1 = wxNewId(); -const long hmtMapViewerFrame::ID_MENUITEM1 = wxNewId(); -const long hmtMapViewerFrame::ID_MENUITEM4 = wxNewId(); -const long hmtMapViewerFrame::idMenuQuit = wxNewId(); -const long hmtMapViewerFrame::ID_MENUITEM2 = wxNewId(); -const long hmtMapViewerFrame::ID_MENUITEM3 = wxNewId(); -const long hmtMapViewerFrame::ID_MENUITEM6 = wxNewId(); -const long hmtMapViewerFrame::ID_MENUITEM7 = wxNewId(); -const long hmtMapViewerFrame::ID_MENUITEM5 = wxNewId(); -const long hmtMapViewerFrame::idMenuAbout = wxNewId(); -const long hmtMapViewerFrame::ID_STATUSBAR1 = wxNewId(); -const long hmtMapViewerFrame::ID_TOOLBARITEM1 = wxNewId(); -const long hmtMapViewerFrame::ID_TOOLBARITEM2 = wxNewId(); -const long hmtMapViewerFrame::ID_TOOLBAR1 = wxNewId(); -//*) - -const long hmtMapViewerFrame::ID_TIMER1 = wxNewId(); - -BEGIN_EVENT_TABLE(hmtMapViewerFrame, wxFrame) -//(*EventTable(hmtMapViewerFrame) -//*) -END_EVENT_TABLE() - -hmtMapViewerFrame::hmtMapViewerFrame(wxWindow* parent, wxWindowID id) -{ - hmt_map = new CHMTSLAM(); - - //(*Initialize(hmtMapViewerFrame) - wxMenuItem* MenuItem2; - wxMenuItem* MenuItem1; - wxFlexGridSizer* FlexGridSizer8; - wxFlexGridSizer* FlexGridSizer1; - wxFlexGridSizer* FlexGridSizer2; - wxMenu* Menu1; - wxFlexGridSizer* FlexGridSizer7; - wxBoxSizer* BoxSizer2; - wxFlexGridSizer* FlexGridSizer4; - wxFlexGridSizer* FlexGridSizer9; - wxFlexGridSizer* FlexGridSizer6; - wxFlexGridSizer* FlexGridSizer3; - wxBoxSizer* BoxSizer1; - wxMenuBar* MenuBar1; - wxMenu* Menu2; - wxFlexGridSizer* FlexGridSizer5; - - Create( - parent, wxID_ANY, _("HMT Maps Viewer - Part of the MRPT project"), - wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, - _T("wxID_ANY")); - SetClientSize(wxSize(740, 606)); - SplitterWindow1 = new wxSplitterWindow( - this, ID_SPLITTERWINDOW1, wxPoint(176, 320), wxDefaultSize, - wxSP_3D | wxSP_LIVE_UPDATE, _T("ID_SPLITTERWINDOW1")); - SplitterWindow1->SetMinSize(wxSize(10, 10)); - SplitterWindow1->SetMinimumPaneSize(10); - Panel1 = new wxPanel( - SplitterWindow1, ID_PANEL1, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL1")); - FlexGridSizer1 = new wxFlexGridSizer(2, 1, 0, 0); - FlexGridSizer1->AddGrowableCol(0); - FlexGridSizer1->AddGrowableRow(1); - Panel5 = new wxPanel( - Panel1, ID_PANEL5, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL5")); - FlexGridSizer4 = new wxFlexGridSizer(5, 1, 0, 0); - FlexGridSizer4->AddGrowableCol(0); - BoxSizer2 = new wxBoxSizer(wxHORIZONTAL); - StaticText1 = new wxStaticText( - Panel5, ID_STATICTEXT1, _("Tree view of HMT map"), wxDefaultPosition, - wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT1")); - wxFont StaticText1Font = wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT); - if (!StaticText1Font.Ok()) - StaticText1Font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - StaticText1Font.SetPointSize( - (int)(StaticText1Font.GetPointSize() * 1.000000)); - StaticText1Font.SetWeight(wxFONTWEIGHT_BOLD); - StaticText1->SetFont(StaticText1Font); - BoxSizer2->Add(StaticText1, 1, wxEXPAND, 5); - FlexGridSizer4->Add(BoxSizer2, 1, wxEXPAND, 0); - FlexGridSizer5 = new wxFlexGridSizer(0, 2, 0, 0); - StaticText2 = new wxStaticText( - Panel5, ID_STATICTEXT2, _("Select hypothesis:"), wxDefaultPosition, - wxDefaultSize, 0, _T("ID_STATICTEXT2")); - FlexGridSizer5->Add( - StaticText2, 1, - wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); - cbHypos = new wxChoice( - Panel5, ID_CHOICE1, wxDefaultPosition, wxDefaultSize, 0, nullptr, 0, - wxDefaultValidator, _T("ID_CHOICE1")); - FlexGridSizer5->Add( - cbHypos, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, - 5); - FlexGridSizer4->Add(FlexGridSizer5, 1, wxEXPAND, 0); - Panel5->SetSizer(FlexGridSizer4); - FlexGridSizer4->Fit(Panel5); - FlexGridSizer4->SetSizeHints(Panel5); - FlexGridSizer1->Add(Panel5, 1, wxEXPAND, 0); - SplitterWindow3 = new wxSplitterWindow( - Panel1, ID_SPLITTERWINDOW3, wxDefaultPosition, wxDefaultSize, - wxSP_3D | wxSP_LIVE_UPDATE, _T("ID_SPLITTERWINDOW3")); - SplitterWindow3->SetMinSize(wxSize(10, 10)); - SplitterWindow3->SetMinimumPaneSize(10); - Panel9 = new wxPanel( - SplitterWindow3, ID_PANEL9, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL9")); - FlexGridSizer9 = new wxFlexGridSizer(0, 0, 0, 0); - FlexGridSizer9->AddGrowableCol(0); - FlexGridSizer9->AddGrowableRow(0); - treeView = new wxTreeCtrl( - Panel9, ID_TREECTRL1, wxDefaultPosition, wxDefaultSize, - wxTR_LINES_AT_ROOT | wxTR_MULTIPLE | wxTR_DEFAULT_STYLE | wxVSCROLL | - wxHSCROLL, - wxDefaultValidator, _T("ID_TREECTRL1")); - FlexGridSizer9->Add(treeView, 1, wxEXPAND, 0); - Panel9->SetSizer(FlexGridSizer9); - FlexGridSizer9->Fit(Panel9); - FlexGridSizer9->SetSizeHints(Panel9); - Panel8 = new wxPanel( - SplitterWindow3, ID_PANEL8, wxPoint(0, 305), wxSize(370, 235), - wxTAB_TRAVERSAL, _T("ID_PANEL8")); - FlexGridSizer8 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer8->AddGrowableCol(0); - FlexGridSizer8->AddGrowableRow(0); - edLog = new wxTextCtrl( - Panel8, ID_TEXTCTRL1, _("Log window"), wxDefaultPosition, wxDefaultSize, - wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxTE_MULTILINE | wxTE_READONLY | - wxHSCROLL | wxVSCROLL, - wxDefaultValidator, _T("ID_TEXTCTRL1")); - wxFont edLogFont = wxSystemSettings::GetFont(wxSYS_OEM_FIXED_FONT); - if (!edLogFont.Ok()) - edLogFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - edLogFont.SetPointSize((int)(edLogFont.GetPointSize() * 1.000000)); - edLog->SetFont(edLogFont); - FlexGridSizer8->Add(edLog, 1, wxEXPAND, 1); - Panel8->SetSizer(FlexGridSizer8); - FlexGridSizer8->SetSizeHints(Panel8); - SplitterWindow3->SplitHorizontally(Panel9, Panel8); - FlexGridSizer1->Add(SplitterWindow3, 1, wxEXPAND, 0); - Panel1->SetSizer(FlexGridSizer1); - FlexGridSizer1->Fit(Panel1); - FlexGridSizer1->SetSizeHints(Panel1); - Panel2 = new wxPanel( - SplitterWindow1, ID_PANEL2, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL2")); - BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); - SplitterWindow2 = new wxSplitterWindow( - Panel2, ID_SPLITTERWINDOW2, wxDefaultPosition, wxDefaultSize, - wxSP_3D | wxSP_LIVE_UPDATE, _T("ID_SPLITTERWINDOW2")); - SplitterWindow2->SetMinSize(wxSize(10, 10)); - SplitterWindow2->SetMinimumPaneSize(10); - Panel3 = new wxPanel( - SplitterWindow2, ID_PANEL3, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL3")); - FlexGridSizer2 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer2->AddGrowableCol(0); - FlexGridSizer2->AddGrowableRow(1); - StaticText3 = new wxStaticText( - Panel3, ID_STATICTEXT3, _("Global HMT map"), wxDefaultPosition, - wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT3")); - wxFont StaticText3Font = wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT); - if (!StaticText3Font.Ok()) - StaticText3Font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - StaticText3Font.SetPointSize( - (int)(StaticText3Font.GetPointSize() * 1.000000)); - StaticText3Font.SetWeight(wxFONTWEIGHT_BOLD); - StaticText3->SetFont(StaticText3Font); - FlexGridSizer2->Add( - StaticText3, 1, - wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); - Panel6 = new wxPanel( - Panel3, ID_PANEL6, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL6")); - FlexGridSizer6 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer6->AddGrowableCol(0); - FlexGridSizer6->AddGrowableRow(0); - Panel6->SetSizer(FlexGridSizer6); - FlexGridSizer6->Fit(Panel6); - FlexGridSizer6->SetSizeHints(Panel6); - FlexGridSizer2->Add(Panel6, 1, wxEXPAND, 0); - Panel3->SetSizer(FlexGridSizer2); - FlexGridSizer2->Fit(Panel3); - FlexGridSizer2->SetSizeHints(Panel3); - Panel4 = new wxPanel( - SplitterWindow2, ID_PANEL4, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL, _T("ID_PANEL4")); - FlexGridSizer3 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer3->AddGrowableCol(0); - FlexGridSizer3->AddGrowableRow(1); - StaticText4 = new wxStaticText( - Panel4, ID_STATICTEXT4, _("Selected area local map"), wxDefaultPosition, - wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT4")); - wxFont StaticText4Font = wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT); - if (!StaticText4Font.Ok()) - StaticText4Font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - StaticText4Font.SetPointSize( - (int)(StaticText4Font.GetPointSize() * 1.000000)); - StaticText4Font.SetWeight(wxFONTWEIGHT_BOLD); - StaticText4->SetFont(StaticText4Font); - FlexGridSizer3->Add( - StaticText4, 1, - wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5); - Panel7 = new wxPanel( - Panel4, ID_PANEL7, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, - _T("ID_PANEL7")); - FlexGridSizer7 = new wxFlexGridSizer(0, 1, 0, 0); - FlexGridSizer7->AddGrowableCol(0); - FlexGridSizer7->AddGrowableRow(0); - Panel7->SetSizer(FlexGridSizer7); - FlexGridSizer7->Fit(Panel7); - FlexGridSizer7->SetSizeHints(Panel7); - FlexGridSizer3->Add(Panel7, 1, wxEXPAND, 0); - Panel4->SetSizer(FlexGridSizer3); - FlexGridSizer3->Fit(Panel4); - FlexGridSizer3->SetSizeHints(Panel4); - SplitterWindow2->SplitHorizontally(Panel3, Panel4); - BoxSizer1->Add(SplitterWindow2, 1, wxEXPAND, 0); - Panel2->SetSizer(BoxSizer1); - BoxSizer1->Fit(Panel2); - BoxSizer1->SetSizeHints(Panel2); - SplitterWindow1->SplitVertically(Panel1, Panel2); - MenuBar1 = new wxMenuBar(); - Menu1 = new wxMenu(); - MenuItem3 = new wxMenuItem( - Menu1, ID_MENUITEM1, _("Load..."), _("Loads a \"hmtmap\" file"), - wxITEM_NORMAL); - Menu1->Append(MenuItem3); - Menu1->AppendSeparator(); - menuExportLocalMaps = new wxMenuItem( - Menu1, ID_MENUITEM4, _("Export local maps..."), wxEmptyString, - wxITEM_NORMAL); - Menu1->Append(menuExportLocalMaps); - Menu1->AppendSeparator(); - MenuItem1 = new wxMenuItem( - Menu1, idMenuQuit, _("Quit\tAlt-F4"), _("Quit the application"), - wxITEM_NORMAL); - Menu1->Append(MenuItem1); - MenuBar1->Append(Menu1, _("&File")); - Menu3 = new wxMenu(); - MenuItem4 = new wxMenuItem( - Menu3, ID_MENUITEM2, _("Translation btw. 2 areas..."), wxEmptyString, - wxITEM_NORMAL); - Menu3->Append(MenuItem4); - MenuItem5 = new wxMenuItem( - Menu3, ID_MENUITEM3, _("Overlap probability btw. 2 areas..."), - wxEmptyString, wxITEM_NORMAL); - Menu3->Append(MenuItem5); - MenuItem6 = new wxMenu(); - MenuItem7 = new wxMenuItem( - MenuItem6, ID_MENUITEM6, _("Grid matching"), wxEmptyString, - wxITEM_NORMAL); - MenuItem6->Append(MenuItem7); - MenuItem8 = new wxMenuItem( - MenuItem6, ID_MENUITEM7, _("FabMap"), wxEmptyString, wxITEM_NORMAL); - MenuItem6->Append(MenuItem8); - Menu3->Append( - ID_MENUITEM5, _("Topological transition models..."), MenuItem6, - wxEmptyString); - MenuBar1->Append(Menu3, _("&Compute")); - Menu2 = new wxMenu(); - MenuItem2 = new wxMenuItem( - Menu2, idMenuAbout, _("About\tF1"), - _("Show info about this application"), wxITEM_NORMAL); - Menu2->Append(MenuItem2); - MenuBar1->Append(Menu2, _("Help")); - SetMenuBar(MenuBar1); - StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1, 0, _T("ID_STATUSBAR1")); - int __wxStatusBarWidths_1[1] = {-1}; - int __wxStatusBarStyles_1[1] = {wxSB_NORMAL}; - StatusBar1->SetFieldsCount(1, __wxStatusBarWidths_1); - StatusBar1->SetStatusStyles(1, __wxStatusBarStyles_1); - SetStatusBar(StatusBar1); - ToolBar1 = new wxToolBar( - this, ID_TOOLBAR1, wxDefaultPosition, wxDefaultSize, - wxTB_FLAT | wxTB_VERTICAL | wxTB_TEXT | wxNO_BORDER, _T("ID_TOOLBAR1")); - ToolBarItem1 = ToolBar1->AddTool( - ID_TOOLBARITEM1, _("Load..."), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("wxART_FILE_OPEN")), wxART_TOOLBAR), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("wxART_FILE_OPEN")), wxART_TOOLBAR), - wxITEM_NORMAL, wxEmptyString, wxEmptyString); - ToolBar1->AddSeparator(); - ToolBarItem2 = ToolBar1->AddTool( - ID_TOOLBARITEM2, _("Exit"), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("wxART_CROSS_MARK")), wxART_TOOLBAR), - wxArtProvider::GetBitmap( - wxART_MAKE_ART_ID_FROM_STR(_T("wxART_CROSS_MARK")), wxART_TOOLBAR), - wxITEM_NORMAL, wxEmptyString, wxEmptyString); - ToolBar1->Realize(); - SetToolBar(ToolBar1); - Center(); - - Bind( - wxEVT_COMMAND_TREE_SEL_CHANGED, - &hmtMapViewerFrame::OntreeViewSelectionChanged, this, ID_TREECTRL1); - Bind(wxEVT_MENU, &hmtMapViewerFrame::OnMenuLoad, this, ID_MENUITEM1); - Bind( - wxEVT_MENU, &hmtMapViewerFrame::OnmenuExportLocalMapsSelected, this, - ID_MENUITEM4); - Bind(wxEVT_MENU, &hmtMapViewerFrame::OnQuit, this, idMenuQuit); - Bind( - wxEVT_MENU, &hmtMapViewerFrame::OnMenuTranslationBtw2, this, - ID_MENUITEM2); - Bind(wxEVT_MENU, &hmtMapViewerFrame::OnMenuOverlapBtw2, this, ID_MENUITEM3); - Bind( - wxEVT_MENU, &hmtMapViewerFrame::OnTopologicalModel_Gridmap, this, - ID_MENUITEM6); - Bind( - wxEVT_MENU, &hmtMapViewerFrame::OnTopologicalModel_Fabmap, this, - ID_MENUITEM7); - Bind(wxEVT_MENU, &hmtMapViewerFrame::OnAbout, this, idMenuAbout); - Bind(wxEVT_TOOL, &hmtMapViewerFrame::OnMenuLoad, this, ID_TOOLBARITEM1); - Bind(wxEVT_TOOL, &hmtMapViewerFrame::OnQuit, this, ID_TOOLBARITEM2); - //*) - - // Fix sizes: - SplitterWindow1->SetMinSize(wxSize(200, 200)); - SplitterWindow2->SetMinSize(wxSize(200, 200)); - SplitterWindow3->SetMinSize(wxSize(200, 200)); - Fit(); - Refresh(); - - // Create GL canvas: - // ------------------------------- - m_canvas_HMAP = - new CMyGLCanvas(Panel6, wxID_ANY, wxDefaultPosition, wxDefaultSize); - Panel6->SetMinSize(wxSize(200, 200)); - m_canvas_HMAP->SetMinSize(wxSize(200, 200)); - m_canvas_HMAP->getOpenGLSceneRef()->insert( - std::make_shared()); - - FlexGridSizer6->Add(m_canvas_HMAP, 1, wxEXPAND, 0); - - m_canvas_LMH = - new CMyGLCanvas(Panel7, wxID_ANY, wxDefaultPosition, wxDefaultSize); - Panel7->SetMinSize(wxSize(200, 200)); - m_canvas_LMH->SetMinSize(wxSize(200, 200)); - m_canvas_LMH->getOpenGLSceneRef()->insert( - std::make_shared()); - FlexGridSizer7->Add(m_canvas_LMH, 1, wxEXPAND, 0); - - m_canvas_LMH->setCameraPointing(0.0f, 0.0f, 0.0f); - m_canvas_LMH->setZoomDistance(100.0f); - m_canvas_LMH->setElevationDegrees(90.0f); - m_canvas_LMH->setAzimuthDegrees(0.0f); - m_canvas_LMH->setCameraProjective(false); - - Maximize(); - - // Splitters: - SplitterWindow1->SetSashPosition(300); - SplitterWindow2->SetSashPosition(400); - SplitterWindow3->SetSashPosition(GetSize().GetHeight() - 300); - - // Auto load file from command line? - timAutoLoad.SetOwner(this, ID_TIMER1); - if (!global_fileToOpen.empty()) - { - Bind( - wxEVT_TIMER, &hmtMapViewerFrame::OntimAutoLoadTrigger, this, - ID_TIMER1); - timAutoLoad.Start(250, true); - } -} - -hmtMapViewerFrame::~hmtMapViewerFrame() -{ - //(*Destroy(hmtMapViewerFrame) - //*) - - WX_START_TRY - - delete hmt_map; - hmt_map = nullptr; - - WX_END_TRY -} - -//------------------------------------------------------------------------ -// Auto-load the file passed in the cmd line (if any) -//------------------------------------------------------------------------ -void hmtMapViewerFrame::OntimAutoLoadTrigger(wxTimerEvent& event) -{ - // Now: Open it: - if (!global_fileToOpen.empty()) loadHTMSLAMFromFile(global_fileToOpen); -} - -void hmtMapViewerFrame::OnQuit(wxCommandEvent& event) { Close(); } -void hmtMapViewerFrame::OnAbout(wxCommandEvent& event) -{ - // wxString msg = wxbuildinfo(long_f); - // wxMessageBox(msg, _("Welcome to...")); -} - -void hmtMapViewerFrame::OnMenuLoad(wxCommandEvent& event) -{ - string fil; - if (AskForOpenHMTMap(fil)) loadHTMSLAMFromFile(fil); -} - -bool hmtMapViewerFrame::loadHTMSLAMFromFile(const std::string& filePath) -{ - WX_START_TRY - - if (!fileExists(filePath)) - { - wxMessageBox( - string(string("File doesn't exist:\n") + filePath).c_str(), - _("Error loading file"), wxOK, this); - return false; - } - - wxBusyCursor busy; - - // Save the path - WX_START_TRY - string the_path(extractFileDirectory(filePath)); - iniFile->write(iniFileSect, "LastDir", the_path); - WX_END_TRY - - // Load - { - CFileGZInputStream f(filePath); - archiveFrom(f) >> *hmt_map; - } - - m_curFileOpen = filePath; - - // Refresh views: - // --------------------------- - - // The tree: - rebuildTreeView(); - - // The global map: - updateGlobalMapView(); - - return true; - - WX_END_TRY - - return false; -} - -void hmtMapViewerFrame::rebuildTreeView() -{ - WX_START_TRY - - wxBusyCursor waitCursor; - treeView->DeleteAllItems(); - - treeView->SetQuickBestSize(true); - - // Root element & Areas: - wxTreeItemId root = treeView->AddRoot(_("Areas"), 0, -1, nullptr); - - CHierarchicalMHMap::const_iterator it; - size_t i; - - for (i = 0, it = hmt_map->m_map.begin(); it != hmt_map->m_map.end(); - it++, i++) - { - string str = format("Area %i", (int)it->second->getID()); - - // wxTreeItemId treeNode = - treeView->AppendItem( - root, str.c_str(), 0, -1, new CItemData(it->second, i)); - } - - treeView->ExpandAll(); - - // List of hypotheses: - cbHypos->Clear(); - - for (const auto& l : hmt_map->m_LMHs) - cbHypos->Append(std::to_string(l.first)); - - cbHypos->SetSelection(0); - - WX_END_TRY -} - -//------------------------------------------------------------------------ -// Asks the user for a file, return false if user cancels -//------------------------------------------------------------------------ -bool hmtMapViewerFrame::AskForOpenHMTMap(std::string& fil) -{ - wxString caption = wxT("Choose a file to open"); - wxString wildcard = - wxT("HMT-SLAM files (*.hmtslam)|*.hmtslam|All files (*.*)|*.*"); - wxString defaultDir = iniFile->read_string(iniFileSect, "LastDir", "."); - wxString defaultFilename; - - wxFileDialog dialog( - this, caption, defaultDir, defaultFilename, wildcard, - wxFD_OPEN | wxFD_FILE_MUST_EXIST); - - if (dialog.ShowModal() == wxID_OK) - { - fil = string(dialog.GetPath().mb_str()); - return true; - } - else - return false; -} - -void hmtMapViewerFrame::updateLocalMapView() -{ - WX_START_TRY - - CMyRedirector redir(edLog); - - m_canvas_LMH->getOpenGLSceneRef()->clear(); - - // Get the hypothesis ID: - THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - if (hmt_map->m_LMHs.find(hypID) == hmt_map->m_LMHs.end()) - { - wxMessageBox( - format("No LMH has hypothesis ID %i!", (int)hypID), - _("Error with topological hypotesis")); - return; - } - - // Get the selected area or LMH in the tree view: - wxArrayTreeItemIds lstSelect; - size_t nSel = treeView->GetSelections(lstSelect); - if (!nSel) return; - - CItemData* data1 = - static_cast(treeView->GetItemData(lstSelect.Item(0))); - if (!data1) return; - if (!data1->m_ptr) return; - - CSerializable::Ptr obj = data1->m_ptr; - if (obj->GetRuntimeClass() == CLASS_ID(CHMHMapNode)) - { - // The 3D view: - opengl::CSetOfObjects::Ptr objs = - std::make_shared(); - - // ------------------------------------------- - // Draw a grid on the ground: - // ------------------------------------------- - { - auto o = opengl::CGridPlaneXY::Create(-100, 100, -100, 100, 0, 5); - o->setColor(0.4f, 0.4f, 0.4f); - objs->insert(o); // it will free the memory - } - - // Two passes: 1st draw the map on the ground, then the rest. - for (int nRound = 0; nRound < 2; nRound++) - { - CHMHMapNode::Ptr firstArea; - CPose3DPDFGaussian refPoseThisArea; - - for (size_t nSelItem = 0; nSelItem < nSel; nSelItem++) - { - auto* d1 = static_cast( - treeView->GetItemData(lstSelect.Item(nSelItem))); - if (!d1 || !d1->m_ptr) continue; - - auto area = std::dynamic_pointer_cast(d1->m_ptr); - if (!area) continue; - - // Is this the first rendered area?? - if (!firstArea) { firstArea = area; } - else - { - // Compute the translation btw. ref. and current area: - CPose3DPDFParticles pdf; - - hmt_map->m_map.computeCoordinatesTransformationBetweenNodes( - firstArea->getID(), area->getID(), pdf, hypID, 200); - /*0.15f, - DEG2RAD(5.0f) );*/ - - refPoseThisArea.copyFrom(pdf); - cout << "Pose " << firstArea->getID() << " - " - << area->getID() << refPoseThisArea << endl; - } - - CMultiMetricMap::Ptr obj_mmap = - area->m_annotations.getAs( - NODE_ANNOTATION_METRIC_MAPS, hypID, false); - - CRobotPosesGraph::Ptr obj_robposes = - area->m_annotations.getAs( - NODE_ANNOTATION_POSES_GRAPH, hypID, false); - - TPoseID refPoseID; - area->m_annotations.getElemental( - NODE_ANNOTATION_REF_POSEID, refPoseID, hypID, true); - - // --------------------------------------------------------- - // The metric map: - // --------------------------------------------------------- - if (nRound == 0) - { - auto objMap = obj_mmap->getVisualization(); - objMap->setPose(refPoseThisArea.mean); - objs->insert(objMap); - } - - if (nRound == 1) - { - // --------------------------------------------------------- - // Bounding boxes for grid maps: - // --------------------------------------------------------- - if (auto grid = obj_mmap->mapByClass(); - grid) - { - float x_min = grid->getXMin(); - float x_max = grid->getXMax(); - float y_min = grid->getYMin(); - float y_max = grid->getYMax(); - - auto objBB = opengl::CSetOfLines::Create(); - objBB->setColor(0, 0, 1); - objBB->setLineWidth(4.0f); - - objBB->appendLine(x_min, y_min, 0, x_max, y_min, 0); - objBB->appendLine(x_max, y_min, 0, x_max, y_max, 0); - objBB->appendLine(x_max, y_max, 0, x_min, y_max, 0); - objBB->appendLine(x_min, y_max, 0, x_min, y_min, 0); - - objBB->setPose(refPoseThisArea.mean); - objs->insert(objBB); - } - - // ----------------------------------------------- - // Draw a 3D coordinates corner for the ref. pose - // ----------------------------------------------- - { - CPose3D p; - (*obj_robposes)[refPoseID].pdf.getMean(p); - - opengl::CSetOfObjects::Ptr corner = - stock_objects::CornerXYZ(); - corner->setPose(refPoseThisArea.mean + p); - corner->setName(format("AREA %i", (int)area->getID())); - corner->enableShowName(); - - objs->insert(corner); - } - - // ----------------------------------------------- - // Draw ellipsoid with uncertainty of pose transformation - // ----------------------------------------------- - if (refPoseThisArea.cov(0, 0) != 0 || - refPoseThisArea.cov(1, 1) != 0) - { - opengl::CEllipsoid3D::Ptr ellip = - std::make_shared(); - ellip->setPose(refPoseThisArea.mean); - ellip->enableDrawSolid3D(false); - - CMatrixDouble C = CMatrixDouble(refPoseThisArea.cov); - - if (C(2, 2) < 1e6) C.setSize(2, 2); - else - C.setSize(3, 3); - - ellip->setCovMatrix(C); - ellip->setQuantiles(3); - const auto p = ellip->getPose().translation(); - ellip->setLocation(p.x, p.y, p.z + 0.5); - ellip->setColor(1, 0, 0); - ellip->setLineWidth(3); - - objs->insert(ellip); - } - - // --------------------------------------------------------- - // Draw each of the robot poses as 2D/3D ellipsoids - // --------------------------------------------------------- - for (auto it = obj_robposes->begin(); - it != obj_robposes->end(); ++it) - { - } - } - - } // end for nSelItem - - } // two pass - - // Add to the scene: - m_canvas_LMH->getOpenGLSceneRef()->insert(objs); - } - else if (obj->GetRuntimeClass() == CLASS_ID(CLocalMetricHypothesis)) - { - // CLocalMetricHypothesis *lmh = static_cast( - // obj ); - } - - m_canvas_LMH->Refresh(); - - WX_END_TRY -} - -void hmtMapViewerFrame::updateGlobalMapView() -{ - m_canvas_HMAP->getOpenGLSceneRef()->clear(); - - wxBusyCursor busy; - - // Dump text representation to log window: - { - edLog->Clear(); - CMyRedirector redir(edLog); - - std::vector strLst; - hmt_map->m_map.dumpAsText(strLst); - string str; - mrpt::system::stringListAsString(strLst, str); - cout << str << endl; - } - - if (hmt_map->m_map.getFirstNode()) - { - CHMHMapNode::TNodeID refID = hmt_map->m_map.getFirstNode()->getID(); - - THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - - if (hmt_map->m_LMHs.find(hypID) == hmt_map->m_LMHs.end()) - { - wxMessageBox( - format("No LMH has hypothesis ID %i!", (int)hypID), - _("Error with topological hypotesis")); - return; - } - // cout << "Showing hypothesis ID: " << hypID << endl; - - hmt_map->m_map.getAs3DScene( - *m_canvas_HMAP->getOpenGLSceneRef(), refID, hypID); - - m_canvas_HMAP->Refresh(); - } -} - -void hmtMapViewerFrame::OnMenuOverlapBtw2(wxCommandEvent& event) -{ - WX_START_TRY - - wxArrayTreeItemIds lstSelect; - - size_t nSel = treeView->GetSelections(lstSelect); - - if (nSel != 2) - { - wxMessageBox( - _("Please, select two areas from the tree first"), _("Error")); - return; - } - - CItemData* data1 = - static_cast(treeView->GetItemData(lstSelect.Item(0))); - CItemData* data2 = - static_cast(treeView->GetItemData(lstSelect.Item(1))); - - ASSERT_(data1); - ASSERT_(data2); - ASSERT_(data1->m_ptr); - ASSERT_(data2->m_ptr); - - CHMHMapNode::Ptr area1 = - std::dynamic_pointer_cast(data1->m_ptr); - CHMHMapNode::Ptr area2 = - std::dynamic_pointer_cast(data2->m_ptr); - - THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - - const size_t monteCarloSamples = 100; - - double prob12 = hmt_map->m_map.computeOverlapProbabilityBetweenNodes( - area1->getID(), area2->getID(), hypID, monteCarloSamples); - - double prob21 = hmt_map->m_map.computeOverlapProbabilityBetweenNodes( - area2->getID(), area1->getID(), hypID, monteCarloSamples); - - { - CMyRedirector redir(edLog); - - cout << "Overlap probability: " << area1->getID() << " - " - << area2->getID() << ": " << prob12 << endl; - cout << "Overlap probability: " << area2->getID() << " - " - << area1->getID() << ": " << prob21 << endl; - } - - WX_END_TRY -} - -void hmtMapViewerFrame::OnMenuTranslationBtw2(wxCommandEvent& event) -{ - WX_START_TRY - - wxArrayTreeItemIds lstSelect; - - size_t nSel = treeView->GetSelections(lstSelect); - - if (nSel != 2) - { - wxMessageBox( - _("Please, select two areas from the tree first"), _("Error")); - return; - } - - CItemData* data1 = - static_cast(treeView->GetItemData(lstSelect.Item(0))); - CItemData* data2 = - static_cast(treeView->GetItemData(lstSelect.Item(1))); - - ASSERT_(data1); - ASSERT_(data2); - ASSERT_(data1->m_ptr); - ASSERT_(data2->m_ptr); - - CHMHMapNode::Ptr area1 = - std::dynamic_pointer_cast(data1->m_ptr); - CHMHMapNode::Ptr area2 = - std::dynamic_pointer_cast(data2->m_ptr); - - THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - - const size_t monteCarloSamples = 100; - - CPose3DPDFParticles pdf12; - - hmt_map->m_map.computeCoordinatesTransformationBetweenNodes( - area1->getID(), area2->getID(), pdf12, hypID, monteCarloSamples, 0, 0); - - CPose3DPDFGaussian pdfGauss; - pdfGauss.copyFrom(pdf12); - - { - CMyRedirector redir(edLog); - - cout << "PDF between " << area1->getID() << " -> " << area2->getID() - << ": " << endl; - cout << pdfGauss << endl; - } - - WX_END_TRY -} - -void hmtMapViewerFrame::OntreeViewSelectionChanged(wxTreeEvent& event) -{ - updateLocalMapView(); -} - -void hmtMapViewerFrame::OnmenuExportLocalMapsSelected(wxCommandEvent& event) -{ - WX_START_TRY - - // Get the hypothesis ID: - THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - if (hmt_map->m_LMHs.find(hypID) == hmt_map->m_LMHs.end()) - { - wxMessageBox( - format("No LMH has hypothesis ID %i!", (int)hypID), - _("Error with topological hypotesis")); - return; - } - - wxString caption = wxT("Choose the target file prefix"); - wxString wildcard = - wxT("simplemap files (*.simplemap)|*.hmtslam|All files (*.*)|*.*"); - wxString defaultDir = iniFile->read_string(iniFileSect, "LastDir", "."); - wxString defaultFilename; - - wxFileDialog dialog( - this, caption, defaultDir, defaultFilename, wildcard, - wxFD_SAVE | wxFD_OVERWRITE_PROMPT); - - if (dialog.ShowModal() != wxID_OK) return; - - string user_fil = string(dialog.GetPath().mb_str()); - string fil_dir = mrpt::system::extractFileDirectory(user_fil); - string fil_name = mrpt::system::extractFileName(user_fil); - - string map_prefix = fil_dir + string("/") + fil_name; - - CHierarchicalMHMap::const_iterator it; - - for (it = hmt_map->m_map.begin(); it != hmt_map->m_map.end(); it++) - { - CSimpleMap simpleMap; - - string map_file = map_prefix + - format("_map_area_%03u.simplemap", - (unsigned)it->first); // it->second->m_label.c_str() ); - CHMHMapNode::Ptr area = it->second; - - CRobotPosesGraph::Ptr obj_poseGraph = - area->m_annotations.getAs( - NODE_ANNOTATION_POSES_GRAPH, hypID, false); - obj_poseGraph->convertIntoSimplemap(simpleMap); - - CFileGZOutputStream f(map_file); - archiveFrom(f) << simpleMap; // Save simplemap - } - - WX_END_TRY -} - -void hmtMapViewerFrame::OnTopologicalModel_Gridmap(wxCommandEvent& event) -{ - WX_START_TRY - - // Get the hypothesis ID: - const THypothesisID hypID = - (THypothesisID)atoi(cbHypos->GetStringSelection().mb_str()); - if (hmt_map->m_LMHs.find(hypID) == hmt_map->m_LMHs.end()) - { - wxMessageBox( - format("No LMH has hypothesis ID %i!", (int)hypID), - _("Error with topological hypotesis")); - return; - } - - wxArrayTreeItemIds lstSelect; - - size_t nSel = treeView->GetSelections(lstSelect); - if (nSel != 2) - { - wxMessageBox( - _("Please, select two areas from the tree first"), _("Error")); - return; - } - - CItemData* data1 = - static_cast(treeView->GetItemData(lstSelect.Item(0))); - CItemData* data2 = - static_cast(treeView->GetItemData(lstSelect.Item(1))); - ASSERT_(data1); - ASSERT_(data2); - ASSERT_(data1->m_ptr); - ASSERT_(data2->m_ptr); - - const CHMHMapNode::Ptr area1 = - std::dynamic_pointer_cast(data1->m_ptr); - const CHMHMapNode::Ptr area2 = - std::dynamic_pointer_cast(data2->m_ptr); - - CTopLCDetectorBase::Ptr TLCD( - hmt_map->loopClosureDetector_factory("gridmaps")); - - CMyRedirector redir(edLog); - wxBusyCursor busy; - - double this_log_lik; - - // get the output from this LC detector: - CPose3DPDF::Ptr pdf = TLCD->computeTopologicalObservationModel( - hypID, area2, area1, this_log_lik); - - CPose3DPDFSOG::Ptr pdfSOG = std::dynamic_pointer_cast(pdf); - - cout << "The relative estimated pose is: " << endl; - for (auto& i : *pdfSOG) - { - cout << " Mode: " << i.val.mean << endl; - } - - WX_END_TRY -} - -void hmtMapViewerFrame::OnTopologicalModel_Fabmap(wxCommandEvent& event) {} diff --git a/apps/hmtMapViewer/hmtMapViewerMain.h b/apps/hmtMapViewer/hmtMapViewerMain.h deleted file mode 100644 index e2fd421e82..0000000000 --- a/apps/hmtMapViewer/hmtMapViewerMain.h +++ /dev/null @@ -1,148 +0,0 @@ -/* +------------------------------------------------------------------------+ - | Mobile Robot Programming Toolkit (MRPT) | - | https://www.mrpt.org/ | - | | - | Copyright (c) 2005-2023, Individual contributors, see AUTHORS file | - | See: https://www.mrpt.org/Authors - All rights reserved. | - | Released under BSD License. See: https://www.mrpt.org/License | - +------------------------------------------------------------------------+ */ - -#ifndef HMTMAPVIEWERMAIN_H -#define HMTMAPVIEWERMAIN_H - -//(*Headers(hmtMapViewerFrame) -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//*) -#include -#include - -/* Jerome Monceaux : 2011/03/08 - * Include needed under snow leopard - */ -#include - -class CMyGLCanvas; - -class hmtMapViewerFrame : public wxFrame -{ - public: - hmtMapViewerFrame(wxWindow* parent, wxWindowID id = -1); - ~hmtMapViewerFrame() override; - - bool AskForOpenHMTMap(std::string& fil); - - // Returns true if OK. - bool loadHTMSLAMFromFile(const std::string& filePath); - - // Rebuilds the tree view on the left panel. - void rebuildTreeView(); - - void updateGlobalMapView(); - void updateLocalMapView(); - - /** File loaded now. */ - std::string m_curFileOpen; - - private: - //(*Handlers(hmtMapViewerFrame) - void OnQuit(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); - void OnMenuLoad(wxCommandEvent& event); - void OnMenuOverlapBtw2(wxCommandEvent& event); - void OnMenuTranslationBtw2(wxCommandEvent& event); - void OntreeViewSelectionChanged(wxTreeEvent& event); - void OnmenuExportLocalMapsSelected(wxCommandEvent& event); - void OnTopologicalModel_Gridmap(wxCommandEvent& event); - void OnTopologicalModel_Fabmap(wxCommandEvent& event); - //*) - - //(*Identifiers(hmtMapViewerFrame) - static const long ID_STATICTEXT1; - static const long ID_STATICTEXT2; - static const long ID_CHOICE1; - static const long ID_PANEL5; - static const long ID_TREECTRL1; - static const long ID_PANEL9; - static const long ID_TEXTCTRL1; - static const long ID_PANEL8; - static const long ID_SPLITTERWINDOW3; - static const long ID_PANEL1; - static const long ID_STATICTEXT3; - static const long ID_PANEL6; - static const long ID_PANEL3; - static const long ID_STATICTEXT4; - static const long ID_PANEL7; - static const long ID_PANEL4; - static const long ID_SPLITTERWINDOW2; - static const long ID_PANEL2; - static const long ID_SPLITTERWINDOW1; - static const long ID_MENUITEM1; - static const long ID_MENUITEM4; - static const long idMenuQuit; - static const long ID_MENUITEM2; - static const long ID_MENUITEM3; - static const long ID_MENUITEM6; - static const long ID_MENUITEM7; - static const long ID_MENUITEM5; - static const long idMenuAbout; - static const long ID_STATUSBAR1; - static const long ID_TOOLBARITEM1; - static const long ID_TOOLBARITEM2; - static const long ID_TOOLBAR1; - //*) - - static const long ID_TIMER1; - - //(*Declarations(hmtMapViewerFrame) - wxPanel* Panel6; - wxPanel* Panel1; - wxPanel* Panel7; - wxStatusBar* StatusBar1; - wxMenuItem* menuExportLocalMaps; - wxChoice* cbHypos; - wxMenu* Menu3; - wxPanel* Panel8; - wxPanel* Panel9; - wxStaticText* StaticText1; - wxPanel* Panel2; - wxToolBarToolBase* ToolBarItem2; - wxSplitterWindow* SplitterWindow1; - wxStaticText* StaticText3; - wxMenu* MenuItem6; - wxPanel* Panel4; - wxSplitterWindow* SplitterWindow2; - wxMenuItem* MenuItem3; - wxPanel* Panel5; - wxSplitterWindow* SplitterWindow3; - wxToolBar* ToolBar1; - wxPanel* Panel3; - wxTextCtrl* edLog; - wxMenuItem* MenuItem5; - wxStaticText* StaticText4; - wxToolBarToolBase* ToolBarItem1; - wxStaticText* StaticText2; - wxMenuItem* MenuItem7; - wxMenuItem* MenuItem4; - wxTreeCtrl* treeView; - wxMenuItem* MenuItem8; - //*) - - DECLARE_EVENT_TABLE() - - CMyGLCanvas* m_canvas_HMAP; - CMyGLCanvas* m_canvas_LMH; - - wxTimer timAutoLoad; - void OntimAutoLoadTrigger(wxTimerEvent& event); -}; -#endif // HMTMAPVIEWERMAIN_H diff --git a/apps/hmtMapViewer/wxsmith/hmtMapViewerframe.wxs b/apps/hmtMapViewer/wxsmith/hmtMapViewerframe.wxs deleted file mode 100644 index 62b90fb44b..0000000000 --- a/apps/hmtMapViewer/wxsmith/hmtMapViewerframe.wxs +++ /dev/null @@ -1,272 +0,0 @@ - - - - HMT Maps Viewer - Part of the MRPT project (C) 2005-2008 - 1 - 740,606 - 0 - - 10 - vertical - 176,320 - 10,10 - - - - 1 - 2 - 0 - 1 - - - - 1 - 5 - 0 - - - - - - - bold - wxSYS_SYSTEM_FONT - 1.000000 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - 2 - - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - 10 - 10,10 - - - - 0 - 0 - - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - 0,305 - 370,235 - - 1 - 0 - 0 - - - Log window - - wxSYS_OEM_FIXED_FONT - 1.000000 - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - 1 - - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - - - - 10 - 10,10 - - - - 1 - 0 - 1 - - - - - bold - wxSYS_SYSTEM_FONT - 1.000000 - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - - - 1 - 0 - 0 - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - - 1 - 0 - 1 - - - - - bold - wxSYS_SYSTEM_FONT - 1.000000 - - - - wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL - 5 - - - - - - 1 - 0 - 0 - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP - - - - - - - - - - - Loads a "hmtmap" file - - - - - - - - - - - Alt-F4 - Quit the application - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - F1 - Show info about this application - - - - - - 1 - -1 - wxSB_NORMAL - - - - - - - - - - - - - - - - - - - diff --git a/apps/holonomic-navigator-demo/holonomic_navigator_demoMain.cpp b/apps/holonomic-navigator-demo/holonomic_navigator_demoMain.cpp index cc06eef18d..16e612ec1d 100644 --- a/apps/holonomic-navigator-demo/holonomic_navigator_demoMain.cpp +++ b/apps/holonomic-navigator-demo/holonomic_navigator_demoMain.cpp @@ -56,7 +56,7 @@ wxBitmap MyArtProvider::CreateBitmap( return wxNullBitmap; } -#include +#include #include #include #include diff --git a/apps/map-partition/map-partition.cpp b/apps/map-partition/map-partition.cpp index ef1e8107d4..1a123061db 100644 --- a/apps/map-partition/map-partition.cpp +++ b/apps/map-partition/map-partition.cpp @@ -16,7 +16,8 @@ ---------------------------------------------------------------*/ #include -#include +#include +#include #include #include #include diff --git a/apps/mrpt-performance/perf-gridmaps.cpp b/apps/mrpt-performance/perf-gridmaps.cpp index 31b547f876..f94e855662 100644 --- a/apps/mrpt-performance/perf-gridmaps.cpp +++ b/apps/mrpt-performance/perf-gridmaps.cpp @@ -94,7 +94,7 @@ double grid_test_4(int a1, int a2) CTicTac tictac; for (long i = 0; i < N; i++) { - COccupancyGridMap2D::updateCell_fast_occupied( + gridMap.updateCell_fast_occupied( 2, 2, logodd_obs, logodd_thres_occupied, theMapArray, theMapSize_x); } return tictac.Tac() / N; diff --git a/apps/robotic-arm-kinematics/robotic-arm-kinematics.cbp b/apps/robotic-arm-kinematics/robotic-arm-kinematics.cbp index 188ceab641..72aeb563dd 100644 --- a/apps/robotic-arm-kinematics/robotic-arm-kinematics.cbp +++ b/apps/robotic-arm-kinematics/robotic-arm-kinematics.cbp @@ -5,7 +5,7 @@