Skip to content
Snippets Groups Projects
Commit cfad5af2 authored by Niklas Yann Wettengel's avatar Niklas Yann Wettengel
Browse files

Rebase from 'rpm/indigo/homer_mapnav'

parent a4025fbf
No related branches found
No related tags found
No related merge requests found
Showing
with 5 additions and 5817 deletions
......@@ -2,6 +2,11 @@
Changelog for package homer_mapnav
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.0.16 (2016-02-18)
-------------------
* moved homer_mapnav metapackage to subfolder
* Contributors: Niklas Yann Wettengel
0.0.2 (2016-02-18)
------------------
* added metapackage
......
## homer_mapnav (indigo) - 1.0.15-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Sat, 05 Dec 2015 22:32:30 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.14-0`
- old version: `1.0.14-0`
- new version: `1.0.15-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.14-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Sat, 05 Dec 2015 14:03:49 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.13-0`
- old version: `1.0.13-0`
- new version: `1.0.14-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.13-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Fri, 04 Dec 2015 12:50:49 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.12-0`
- old version: `1.0.12-0`
- new version: `1.0.13-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.12-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Thu, 03 Dec 2015 20:55:14 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.11-0`
- old version: `1.0.11-0`
- new version: `1.0.12-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.11-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Wed, 02 Dec 2015 10:48:30 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.10-0`
- old version: `1.0.10-0`
- new version: `1.0.11-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.10-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Tue, 01 Dec 2015 23:59:02 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.9-0`
- old version: `1.0.9-0`
- new version: `1.0.10-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.9-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Tue, 01 Dec 2015 17:52:28 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.8-0`
- old version: `1.0.8-0`
- new version: `1.0.9-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.8-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Sun, 29 Nov 2015 23:46:05 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.7-0`
- old version: `1.0.7-0`
- new version: `1.0.8-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.7-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Sat, 28 Nov 2015 22:58:14 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.6-0`
- old version: `1.0.6-0`
- new version: `1.0.7-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.6-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Fri, 27 Nov 2015 14:33:00 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.5-0`
- old version: `1.0.5-0`
- new version: `1.0.6-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.5-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Tue, 24 Nov 2015 13:28:24 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.4-0`
- old version: `1.0.4-0`
- new version: `1.0.5-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.4-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Fri, 20 Nov 2015 02:07:32 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.2-0`
- old version: `1.0.2-0`
- new version: `1.0.4-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.2-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Fri, 20 Nov 2015 00:10:16 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.1-5`
- old version: `1.0.1-5`
- new version: `1.0.2-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.1-5
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 17 Nov 2015 15:51:44 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.1-2`
- old version: `1.0.1-4`
- new version: `1.0.1-5`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.1-4
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 17 Nov 2015 15:42:59 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.1-2`
- old version: `1.0.1-3`
- new version: `1.0.1-4`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.1-3
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 17 Nov 2015 15:29:03 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.1-2`
- old version: `1.0.1-2`
- new version: `1.0.1-3`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.10`
- rosdep version: `0.11.4`
- rosdistro version: `0.4.2`
- vcstools version: `0.1.38`
## homer_mapnav (indigo) - 1.0.1-2
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Fri, 09 Oct 2015 09:48:20 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.1-1`
- old version: `1.0.1-1`
- new version: `1.0.1-2`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.7`
- rosdep version: `0.11.1`
- rosdistro version: `0.4.1`
- vcstools version: `0.1.36`
## homer_mapnav (indigo) - 1.0.1-1
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Fri, 25 Sep 2015 06:07:06 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- rosdistro version: `1.0.1-0`
- old version: `1.0.1-0`
- new version: `1.0.1-1`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.7`
- rosdep version: `0.11.1`
- rosdistro version: `0.4.1`
- vcstools version: `0.1.36`
## homer_mapnav (indigo) - 1.0.1-0
The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 15 Sep 2015 09:11:11 -0000`
These packages were released:
- `homer_map_manager`
- `homer_mapnav_msgs`
- `homer_mapping`
- `homer_nav_libs`
- `homer_navigation`
Version of package(s) in repository `homer_mapnav`:
- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
- release repository: unknown
- rosdistro version: `null`
- old version: `null`
- new version: `1.0.1-0`
Versions of tools used:
- bloom version: `0.5.20`
- catkin_pkg version: `0.2.7`
- rosdep version: `0.11.1`
- rosdistro version: `0.4.1`
- vcstools version: `0.1.36`
# mapping and navigation
Here you can find the homer mapping and navigation packages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package homer_map_manager
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.0.15 (2015-12-05)
-------------------
1.0.14 (2015-12-05)
-------------------
* moved header files to include directory
* Contributors: Niklas Yann Wettengel
1.0.13 (2015-12-04)
-------------------
* fixed CMakeLists
* Contributors: Niklas Yann Wettengel
1.0.12 (2015-12-03)
-------------------
* fixed yaml-cpp saucy error
* Contributors: Niklas Yann Wettengel
1.0.11 (2015-12-02)
-------------------
* added std_srvs dependency
* Contributors: Niklas Yann Wettengel
1.0.10 (2015-12-02)
-------------------
* added yaml-cpp dependency
* Contributors: Niklas Yann Wettengel
1.0.9 (2015-12-01)
------------------
* added sdl-image dependency
* Contributors: Niklas Yann Wettengel
1.0.8 (2015-11-30)
------------------
* added sdl dependency
* Contributors: Niklas Yann Wettengel
1.0.7 (2015-11-28)
------------------
* updated changelog
* updated catkin_depends
* Contributors: Niklas Yann Wettengel
* updated catkin_depends
* Contributors: Niklas Yann Wettengel
1.0.6 (2015-11-27)
------------------
* removed env HOMER_DIR from CMakeLists.txt
* Contributors: Niklas Yann Wettengel
1.0.5 (2015-11-24)
------------------
1.0.4 (2015-11-20)
------------------
* changed build dependency from libeigen3-dev to eigen
* Contributors: Niklas Yann Wettengel
1.0.3 (2015-11-20)
------------------
* added libeigen3-dev build dependency
* Contributors: Niklas Yann Wettengel
1.0.2 (2015-11-20)
------------------
* added Maintainers
* added cmake_modules build dependency
* added raphael as maintainer
* Contributors: Niklas Yann Wettengel, Raphael Memmesheimer
1.0.1 (2015-09-08)
------------------
* init
* Contributors: Raphael Memmesheimer
cmake_minimum_required(VERSION 2.8.3)
project(homer_map_manager)
find_package(catkin REQUIRED COMPONENTS roscpp roslib tf homer_mapnav_msgs homer_nav_libs std_srvs cmake_modules)
find_package( Eigen REQUIRED )
find_package(PkgConfig REQUIRED)
pkg_check_modules(YAML_CPP REQUIRED yaml-cpp)
if(NOT ${YAML_CPP_VERSION} VERSION_LESS "0.5")
add_definitions(-DHAVE_NEW_YAMLCPP)
endif()
catkin_package(
CATKIN_DEPENDS
roscpp
roslib
tf
homer_mapnav_msgs
homer_nav_libs
std_srvs
INCLUDE_DIRS include
)
include_directories(
include
${catkin_INCLUDE_DIRS}
${EIGEN_INCLUDE_DIRS}
)
add_subdirectory(${PROJECT_SOURCE_DIR}/src/Managers)
add_subdirectory(${PROJECT_SOURCE_DIR}/src/MapIO)
add_executable(map_manager src/map_manager_node.cpp)
target_link_libraries(
map_manager
${catkin_LIBRARIES}
Managers
image_io
)
add_dependencies(
map_manager
${catkin_EXPORTED_TARGETS}
homer_mapnav_msgs_gencpp
)
install(TARGETS map_manager DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
install(DIRECTORY include/homer_map_manager/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION})
# map_manager
## Known Issues / Todo's
Aus bisher ungeklärten Gründen kann es in seltenen Fällen passieren, dass der map_manager die Verbindung zum roscore verliert. In diesem Fall muss er durch rosrun map_manager map_manager neugestartet werden.
## Introduction
Der map_manager ist der Mittelpunkt der Kommunikation zwischen homer_mapping, homer_navigation, GUI und die Spiel-Nodes.
Das Zusammenspiel dieser Nodes ist im Screenshot des rqt_graphs zu sehen.
![rqt_graph](images/rosgraph.png)
Er verwaltet die aktuell durch das mapping erstellte Karte sowie weitere Kartebenen. Aktuell sind das die SLAM-Karte, die aktuellen Laserdaten in einer weiteren Ebene und eine Masking-Ebene, in der mit Hilfe der GUI Hindernisse oder freie Flächen in die Karte gezeichnet werden können.
Jedes mal, wenn eine SLAM-Karte von der mapping-Node geschickt wird, wird diese mit allen anderen Karteneben überschrieben (in der Reihenfolge SLAM, Masking, Laserdaten) und als eine zusammengefügte Karte versendet.
Zudem verwaltet der map_manager alle erstellten Points Of Interest (POIs), die z.B. als Ziele für die Navigation verwendet werden.
Die Node ist außerdem zuständig für das Speichern und Laden der Kartenebenen und der POIs. Dabei wird die SLAM-Ebene sowie die Masking-Ebene berücksichtigt.
## Topics
#### Publisher
* `/map`: Die aktuelle Karte, die aus allen aktivierten Kartenebenen zusammengesetzt ist. Diese wird in der GUI angezeigt und für die Navigation verwendet.
* `/map_manager/poi_list`: Verschickt einen Vektor mit allen aktuellen POIs. Dieser Publisher wird immer ausgelöst, sobald sich ein POI ändert oder ein neuer hinzugefügt wird.
* `/map_manager/loaded_map`: Wenn eine Karte geladen wird, wird über dieses Topic die geladene SLAM-Ebene an die homer_mapping-Node verschickt.
* `/map_manager/mask_slam`: Über die GUI kann die SLAM-Map verändert werden. Diese Modifizierungen werden über dieses Topic vom map_manager an das homer_mapping versendet.
#### Subscriber
* `/homer_mapping/slam_map (nav_msgs/OccupancyGrid)`: Hierüber wird die aktuelle SLAM-Map empfangen.
* `/map_manager/save_map (map_messages/SaveMap)`: Hierüber wird der Befehl zum Speichern der Karte inklusive des Dateinamens empfangen.
* `/map_manager/load_map (map_messages/SaveMap)`: Hiermit wird eine Karte geladen und alle bisherigen Kartenebenen durch die geladenen ersetzt.
* `/map_manager/toggle_map_visibility (map_messages/MapLayers)`: Hierüber können einzelne Kartenebenen aktiviert beziehungsweise deaktiviert werden. Deaktivierte werden nicht mehr beim Zusammenfügen der Karte berücksichtigt und dementsprechend auch nicht in der GUI angezeigt sowie für die Navigation verwendet.
* `/scan (nav_msgs/LaserScan)`: Der aktuelle Laserscan, der in die Laserscan-Ebene gezeichnet wird.
* `/map_manager/add_POI (map_messages/PointOfInterest)`: Hierüber kann ein POI hinzugefügt werden.
* `/map_manager/modify_POI (map_messages/ModifyPOI)`: Hierüber kann ein vorhandener POI verändert werden (Name, Position,...)
* `/map_manager/delete_POI (map_messages/DeletePointOfInterest)`: Hierüber kann ein vorhander POI gelöscht werden.
* `/map_manager/modify_map (map_messages/ModifyMap)`: Über dieses Topic werden die Koordinaten der Polygone verschickt, die über die GUI maskiert wurden. Außerdem wird die Kartenebene mitgeteilt, die verändet werden soll (SLAM oder Masking-Ebene).
* `/map_manager/reset_maps (std_msgs/Empty)`: Hierüber werden alle Kartenebenen zurückgesetzt.
\ No newline at end of file
<map_manager>
</map_manager>
<default>
<!-- MAPPING SETTINGS -->
<Map>
<!-- Path to a default map file that is loaded at start (e.g. maps/test.map). If value is not set, no map is loaded -->
<value name="sDefaultMapFile" value=""/>
<!-- Size of the map in x and y direction. -->
<!-- Note: the robot's initial pose is in the middle
of the map, so choose an adequate size.
i.e. if you set it to 2000, the map size will be
2000 * 2000 mm and the robot's start position is at (1000, 1000) -->
<!-- Note: values > 50000 may cause segmentation faults -->
<value name="iSize" value="35000"/>
<!-- Size of one cell of the map in mm.
The grid map will be of size iSize/iCellSize+1 -->
<value name="iCellSize" value="50"/>
<!-- Minimum occupancy probability for treating a map pixel as obstacle -->
<value name="fMinObstacleOccupancy" value="0.5"/>
<!-- This variabe is true, if dynamic obstacles are integrated in the map. -->
<value name="bDynamicMapping" value="1"/>
<!-- This variabe is true, if a loaded map shall be updated by the current laserdata.
If it is false, the map is just used for localization. -->
<value name="bUpdateLoadedMap" value="0"/>
<!-- Minimum distance (in mm) between two samples for probability calcualation
Values above 1.0 speed things up, but can result in lower accuracy -->
<value name="fMeasureSamplingStep" value="150.0"/>
<!-- Enable checking to avoid matching front- and backside of obstacles, e.g. walls.
Useful when creating high resolution maps. -->
<value name="bBacksideChecking" value="0"/>
<!-- Leaves a small border around obstacles unchanged when inserting a laser scan.
Useful when creating high resolution maps. -->
<value name="bObstacleBorders" value="1"/>
<!-- Options for map generation based on the sonar sensors -->
<Sonar>
<!-- If the sonar sensors detect an obstacle at a larger distance than this value,
only a free beam is inserted into the map, the position of the detected obstacle
is left blank. -->
<value name="fMaxTrustedObstacleDistance" value="800.0"/>
<!-- Minimal movement of the robot [deg/mm] when inserting a new measurement -->
<value name="fMinMoveAngle" value="2.0"/>
<value name="fMinMoveDistance" value="5.0"/>
<!-- Minimal difference between last and current sonar measurement when inserting -->
<value name="iMinSonarDiff" value="50"/>
</Sonar>
<Geotiff>
<!-- Standard file name for geotiff export
As the filename is printed on the geotiff map, a reasonable filename has to be choosen
During a competition this value should be set for providing backup savings-->
<value name="sStandardFileName" value="Resko.tiff"/>
<!-- Number of necessary observations of a cell to be displayed without transparency.
Transparency is approached via different gray level.-->
<value name="iTrancparencyThreshold" value="10"/>
<!-- Threshold to mark an occupied cell as an obstacle in the geotiff map.
In percentage of reliability. -->
<value name="iObstacleThreshold" value="90"/>
<Visibility>
<!-- 1 if the inaccessible regions shall be displayed in geotiff. -->
<value name="bShowInaccessibleRegions" value="1"/>
<!-- 1 if the navigation map shall be displayed in geotiff. -->
<value name="bShowNavigationMap" value="1"/>
<!-- 1 if the robot path shall be displayed in geotiff. -->
<value name="bShowRobotPath" value="1"/>
<!-- Sizes of the geotiff map.
Attention: all this values influence the map resolution -->
</Visibility>
<Sizes>
<!-- The width (in mm) of one forground grid cell in an exported map. -->
<value name="iGridWidth" value="500"/>
<!-- Thickness of the grid in the background of the explored area in mm -->
<value name="iExploredAreaGrid" value="10"/>
<!-- Size of the victim sign, radius in mm -->
<value name="iVictimLocation" value="350"/>
<!-- Size of the hazard sign, radius in mm -->
<value name="iHazardLocation" value="400"/>
<!-- Thickness of the robot path in mm -->
<value name="iRobotPath" value="20"/>
</Sizes>
<!-- Used color schemas for geotiff export. -->
<ColorSchema>
<NavigationMap>
<value name="iRed" value="160"/>
<value name="iGreen" value="230"/>
<value name="iBlue" value="160"/>
</NavigationMap>
<VictimLocation>
<value name="iRed" value="240"/>
<value name="iGreen" value="10"/>
<value name="iBlue" value="10"/>
</VictimLocation>
<HazardLocation>
<value name="iRed" value="255"/>
<value name="iGreen" value="100"/>
<value name="iBlue" value="30"/>
</HazardLocation>
<InitialRobotPosition>
<value name="iRed" value="250"/>
<value name="iGreen" value="200"/>
<value name="iBlue" value="0"/>
</InitialRobotPosition>
<RobotPath>
<value name="iRed" value="120"/>
<value name="iGreen" value="0"/>
<value name="iBlue" value="140"/>
</RobotPath>
<Obstacle>
<value name="iRed" value="0"/>
<value name="iGreen" value="40"/>
<value name="iBlue" value="120"/>
</Obstacle>
<FileInfo>
<value name="iRed" value="0"/>
<value name="iGreen" value="50"/>
<value name="iBlue" value="140"/>
</FileInfo>
<!-- Checkerbord pattern of two colors in the background of the unexplored region -->
<UnexploredAreaGrid>
<Light>
<value name="iRed" value="170"/>
<value name="iGreen" value="170"/>
<value name="iBlue" value="171"/>
</Light>
<Dark>
<value name="iRed" value="160"/>
<value name="iGreen" value="160"/>
<value name="iBlue" value="161"/>
</Dark>
</UnexploredAreaGrid>
<!-- Grid lines painted in the background in the explored region -->
<ExploredAreaGrid>
<value name="iRed" value="0"/>
<value name="iGreen" value="0"/>
<value name="iBlue" value="1"/>
</ExploredAreaGrid>
</ColorSchema>
</Geotiff>
</Map>
<!-- PARTICLE FILTER SETTINGS -->
<ParticleFilter>
<HyperSlamFilter>
<!-- Number of particle filters to use (hyper particles) -->
<value name="iParticleFilterNum" value="1"/>
<!-- Threshold for deleting particle filters (quotient between best/worst contrast) -->
<value name="fDeletionThreshold" value="0.98"/>
</HyperSlamFilter>
<!-- Number of particles to use -->
<value name="iParticleNum" value="1000"/>
<!-- The maximal rotation if mapping is performed. If the rotation is
bigger, mapping is interrupted.
This value may depend on the computing power, because it is influenced
by the size of time intervals of mapping. 0.35-->
<value name="fMaxRotationPerSecond" value="1.0"/> <!-- 0.55-->
<!-- Minimum time to wait between two mapping/localization steps -->
<value name="iWaitTime" value="500"/>
<!-- The map is only updated when the robot has turned a minimal angle (iUpdateMinMoveAngle),
has moved a minimal distance (iUpdateMinMoveDist) or a maximal time has passed( iMaxUpdateInterval ) -->
<value name="iUpdateMinMoveAngle" value="5"/>
<value name="iUpdateMinMoveDist" value="100"/>
<value name="iMaxUpdateInterval" value="2000"/>
<!-- Handle all incoming sensordata messages (AlwaysDeliver - value="1" - for SLAM benchmark) or only newest messages (keeponlynewest - value="0" - default) -->
<value name="bProcessAllMeasurements" value="0"/>
<!-- ASSUMED ERROR VALUES OF MOTION CALCULATION -->
<ErrorValues>
<!-- Rotation error while rotating in percent - old value: 50 20-->
<value name="fRotationErrorRotating" value="5.0"/>
<!-- Rotation error while translating in degrees per meter - old value: 5 2.0-->
<value name="fRotationErrorTranslating" value="5.0"/>
<!-- Translation error while translating in percent - old value: 15-25-->
<value name="fTranslationErrorTranslating" value="15.0"/>
<!-- Translation error while rotating in mm per degree - old value: 0.0-->
<value name="fTranslationErrorRotating" value="0.0"/>
<!-- Move jitter while turning in mm per degree - old value: 45800-->
<value name="fMoveJitterWhileTurning" value="30000.0"/>
</ErrorValues>
<!-- SETTINGS FOR SCAN MATCHING-->
<!-- SETTINGS FOR SCAN MATCHING-->
<ScanMatching>
<!-- If this variabe is true, scan matching is performed to improve the odometry data.
In a dynamic environment scan matching causes grave errors, especially if the
moving objects are close to the robot -->
<value name="bActivated" value="0"/>
<!-- Ignore odometry if true -->
<value name="bTest" value="0"/>
<!-- Used algorithm for scan matching.
1 = ICP, 2 = IDC, 3 = MbICP -->
<value name="iUsedAlgorithm" value="3"/>
<!-- Minimal point distance after reducing the number of scan points for
scan matching.
Value in mm. Value 0.0 means it is switched off. Standard: 200.0-->
<value name="fReducedPointDist" value="100.0"/>
<!-- Maximal distance of corresponding scan points, which are used
for scan matching. Value in mm. Standard: 300.0-->
<value name="fMaxCorrespondenceDiff" value="300.0"/>
<!-- Difference of scan angles which is considered to find
corresponding scan points for scan matching.
Value in degree. Standard: 90.0-->
<value name="fMaxAngleDiff" value="40.0"/>
<!-- Maximal distance of points in a cluster which is considered in
scan matching. Value in mm. 100.0-->
<value name="fMaxClusterDist" value="100.0"/>
<!-- Minimal diameter of a cluster of scan points which is considered
in scan matching.
Value in mm. Value 1.0 means it is switched of. Standard: 200.0-->
<value name="fMinClusterSize" value="200.0"/> <!--!!!!!!-->
<LineExtraction>
<!-- If this variable is true, the scan matcher works line-based.
If it is false, it works on the raw scan data.-->
<value name="bActivated" value="0"/>
<!-- Maximal distance of two consecutive points of a line -->
<value name="fMaxPointDistance" value="50.0"/>
<!-- Minimal number of points on a line -->
<value name="iMinPointsOnLine" value="10"/>
<!-- Minimal length of a line -->
<value name="fMinLength" value="100.0"/>
<!-- Maximal standard deviation of all points of a line-->
<value name="fMaxSigma" value="15.0"/>
</LineExtraction>
<MbICP>
<!--Factor which influences the behavior of the applied metric distance.
It describes the relation between rotation and translation.
If it is set to inifity, the behaviour of the MbIcpScanMatcher draws near to the IcpScanMatcher.
The value must be > 0. -->
<value name="fMetricFactor" value="1800.0"/>
</MbICP>
</ScanMatching>
</ParticleFilter>
<Kinect>
<!-- Settings for the kinect rgb camera -->
<Camera>
<!-- Note: sColorFormat can be RGB8 or Y8UV8 -->
<value name="sColorFormat" value="RGB8"/>
</Camera>
<!-- Determines whether to use Pointcloud(0) or Image(1) messages to compute our RGBDepthM -->
<value name="bUseImageTransport" value="1" />
<!-- Determines whether to use Image compression for transport of Images
If true(1) be sure to add a compression value (in percent) -->
<value name="bCompressImages" value="0" />
<value name="iCompressionValue" value="100" />
<value name="bSendContinuousDepthData" value="1" />
<!-- Determines how often RGBDepthDataM is updated -->
<value name="iIdleInterval" value="250" />
<value name="iTofIdleInterval" value="50" />
<!-- If set to true, RGBDepthM will be kept for painting and a 3DMap will be created
Always set to false, because of memory usage. -->
<value name="bCreate3DMap" value="0" />
<!-- 1: We are using the kinect instead of Laser Scanner data, affects PeopleTrackingModule (list may be incomplete)-->
<value name="bUseKinect" value="1" />
<value name="bUseKinectTracking" value="0" />
<value name="fTiltAngle" value="0"/>
<!-- If bMaskObstacles is true, then 3D Scan points with height greater
fMinObstacleHeight are marked inaccessible in the map -->
<value name="bMaskObstacles" value="1"/>
<!--value name="fMinObstacleHeight" value="140"/-->
<value name="fMinObstacleHeight" value="70"/>
<!-- Threshold for the maximum distance of points that are candidates as obstacles.
Needed because accuracy of the Kinect is decreasing by distance -->
<value name="fMaxObstacleFromRobotDistance" value="2000"/>
<value name="fMinObstacleFromRobotDistance" value="300"/>
<!-- How long is an obstcle saved after his last appearance in the kinect data -->
<value name="iObstacleSaveTime" value="10"/>
<value name="bDoKinectMappingWithTemporaryObstacles" value="1"/>
<!-- How often must an obstacle appear before it is known as an real obstacle -->
<value name="iObstacleMinAppearance" value="5"/>
</Kinect>
<SelfLocalization>
<value name="fScatterVarXY" value="50"/>
<!-- scattering variance for pose orientation in radiants -->
<value name="fScatterVarTheta" value="0.2"/>
</SelfLocalization>
<LaserScanners>
<SickLMS100>
<!-- Use this device in ActiveLaserScannerModule? -->
<value name="bActiveLaserScanner" value="0"/>
<!-- Is the device used for navigation? -->
<value name="bPassiveScan" value="1"/>
<!-- the ip and port the scanner is providing -->
<value name="sIP" value="169.254.97.144"/>
<value name="iPort" value="2111"/>
<!-- position of laserscanner in robot coordinates in mm -->
<value name="fPositionX" value="240"/>
<value name="fPositionY" value="0.0"/>
<value name="fPositionZ" value="40"/>
<!-- rotation radiuses of laserscanner beam in mm -->
<value name="fRotateRadiusY" value="0"/>
<value name="fRotateRadiusX" value="0"/>
<!-- orientation of laserscanner in robot coordinates
in degrees (counter clockwise) -->
<value name="fOrientation" value="-0.5"/>
<!-- valid maximum range (mm) -->
<value name="iValidMaxRange" value="30000"/>
<!-- valid minimum range (mm) -->
<value name="iValidMinRange" value="150"/>
<!-- minimum distance to be classified as free in case of errorneous measurement -->
<value name="iFreeReadingDistance" value="800"/>
<!-- number of scan points old 541-->
<value name="iScanSteps" value="1081"/>
<!-- scan angle in degrees -->
<value name="fScanAngle" value="270.0"/>
<!-- starting angle of one scan in degrees -->
<value name="fStartAngle" value="-135.0"/>
<value name="fObstacleThreshold" value="10"/>
<value name="iNumOffsetSteps" value="110" />
<value name="iNumBottomOffsetSteps" value="0"/>
<value name="iNumTopOffsetSteps" value="100"/>
<!-- iNumClearSlots for a 270Degree scanner. Only 180 Degree are used. Left and right 45 degree are deaktivated. For 0.5 resolution with 541 scanpoints we will need 90 points at each side masked. For security the Value for 0.5Degree Resolution is 100. If we use a 0.25 resulution we need 45Degree to masked out that means 180 Points + 10 Points security = 190 Points -->
<value name="iNumClearSlots" value="190"/>
<value name="sId" value="FrontLRF"/>
<!-- Set to 1 if scanner is mounted upside down -->
<value name="bMirror" value="1"/>
</SickLMS100>
</LaserScanners>
</default>
<?xml version="1.0" standalone="no" ?>
<MergedConfig>
<default>
<!-- MAPPING SETTINGS -->
<Map>
<!-- Path to a default map file that is loaded at start (e.g. maps/test.map). If value is not set, no map is loaded -->
<value name="sDefaultMapFile" value=""/>
<!-- Size of the map in x and y direction. -->
<!-- Note: the robot's initial pose is in the middle
of the map, so choose an adequate size.
i.e. if you set it to 2000, the map size will be
2000 * 2000 mm and the robot's start position is at (1000, 1000) -->
<!-- Note: values > 50000 may cause segmentation faults -->
<value name="iSize" value="35000"/>
<!-- Size of one cell of the map in mm.
The grid map will be of size iSize/iCellSize+1 -->
<value name="iCellSize" value="50"/>
<!-- Minimum occupancy probability for treating a map pixel as obstacle -->
<value name="fMinObstacleOccupancy" value="0.5"/>
<!-- This variabe is true, if dynamic obstacles are integrated in the map. -->
<value name="bDynamicMapping" value="1"/>
<!-- This variabe is true, if a loaded map shall be updated by the current laserdata.
If it is false, the map is just used for localization. -->
<value name="bUpdateLoadedMap" value="0"/>
<!-- Minimum distance (in mm) between two samples for probability calcualation
Values above 1.0 speed things up, but can result in lower accuracy -->
<value name="fMeasureSamplingStep" value="150.0"/>
<!-- Enable checking to avoid matching front- and backside of obstacles, e.g. walls.
Useful when creating high resolution maps. -->
<value name="bBacksideChecking" value="0"/>
<!-- Leaves a small border around obstacles unchanged when inserting a laser scan.
Useful when creating high resolution maps. -->
<value name="bObstacleBorders" value="1"/>
<!-- Options for map generation based on the sonar sensors -->
<Sonar>
<!-- If the sonar sensors detect an obstacle at a larger distance than this value,
only a free beam is inserted into the map, the position of the detected obstacle
is left blank. -->
<value name="fMaxTrustedObstacleDistance" value="800.0"/>
<!-- Minimal movement of the robot [deg/mm] when inserting a new measurement -->
<value name="fMinMoveAngle" value="2.0"/>
<value name="fMinMoveDistance" value="5.0"/>
<!-- Minimal difference between last and current sonar measurement when inserting -->
<value name="iMinSonarDiff" value="50"/>
</Sonar>
<Geotiff>
<!-- Standard file name for geotiff export
As the filename is printed on the geotiff map, a reasonable filename has to be choosen
During a competition this value should be set for providing backup savings-->
<value name="sStandardFileName" value="Resko.tiff"/>
<!-- Number of necessary observations of a cell to be displayed without transparency.
Transparency is approached via different gray level.-->
<value name="iTrancparencyThreshold" value="10"/>
<!-- Threshold to mark an occupied cell as an obstacle in the geotiff map.
In percentage of reliability. -->
<value name="iObstacleThreshold" value="90"/>
<Visibility>
<!-- 1 if the inaccessible regions shall be displayed in geotiff. -->
<value name="bShowInaccessibleRegions" value="1"/>
<!-- 1 if the navigation map shall be displayed in geotiff. -->
<value name="bShowNavigationMap" value="1"/>
<!-- 1 if the robot path shall be displayed in geotiff. -->
<value name="bShowRobotPath" value="1"/>
<!-- Sizes of the geotiff map.
Attention: all this values influence the map resolution -->
</Visibility>
<Sizes>
<!-- The width (in mm) of one forground grid cell in an exported map. -->
<value name="iGridWidth" value="500"/>
<!-- Thickness of the grid in the background of the explored area in mm -->
<value name="iExploredAreaGrid" value="10"/>
<!-- Size of the victim sign, radius in mm -->
<value name="iVictimLocation" value="350"/>
<!-- Size of the hazard sign, radius in mm -->
<value name="iHazardLocation" value="400"/>
<!-- Thickness of the robot path in mm -->
<value name="iRobotPath" value="20"/>
</Sizes>
<!-- Used color schemas for geotiff export. -->
<ColorSchema>
<NavigationMap>
<value name="iRed" value="160"/>
<value name="iGreen" value="230"/>
<value name="iBlue" value="160"/>
</NavigationMap>
<VictimLocation>
<value name="iRed" value="240"/>
<value name="iGreen" value="10"/>
<value name="iBlue" value="10"/>
</VictimLocation>
<HazardLocation>
<value name="iRed" value="255"/>
<value name="iGreen" value="100"/>
<value name="iBlue" value="30"/>
</HazardLocation>
<InitialRobotPosition>
<value name="iRed" value="250"/>
<value name="iGreen" value="200"/>
<value name="iBlue" value="0"/>
</InitialRobotPosition>
<RobotPath>
<value name="iRed" value="120"/>
<value name="iGreen" value="0"/>
<value name="iBlue" value="140"/>
</RobotPath>
<Obstacle>
<value name="iRed" value="0"/>
<value name="iGreen" value="40"/>
<value name="iBlue" value="120"/>
</Obstacle>
<FileInfo>
<value name="iRed" value="0"/>
<value name="iGreen" value="50"/>
<value name="iBlue" value="140"/>
</FileInfo>
<!-- Checkerbord pattern of two colors in the background of the unexplored region -->
<UnexploredAreaGrid>
<Light>
<value name="iRed" value="170"/>
<value name="iGreen" value="170"/>
<value name="iBlue" value="171"/>
</Light>
<Dark>
<value name="iRed" value="160"/>
<value name="iGreen" value="160"/>
<value name="iBlue" value="161"/>
</Dark>
</UnexploredAreaGrid>
<!-- Grid lines painted in the background in the explored region -->
<ExploredAreaGrid>
<value name="iRed" value="0"/>
<value name="iGreen" value="0"/>
<value name="iBlue" value="1"/>
</ExploredAreaGrid>
</ColorSchema>
</Geotiff>
</Map>
<!-- PARTICLE FILTER SETTINGS -->
<ParticleFilter>
<HyperSlamFilter>
<!-- Number of particle filters to use (hyper particles) -->
<value name="iParticleFilterNum" value="1"/>
<!-- Threshold for deleting particle filters (quotient between best/worst contrast) -->
<value name="fDeletionThreshold" value="0.98"/>
</HyperSlamFilter>
<!-- Number of particles to use -->
<value name="iParticleNum" value="1000"/>
<!-- The maximal rotation if mapping is performed. If the rotation is
bigger, mapping is interrupted.
This value may depend on the computing power, because it is influenced
by the size of time intervals of mapping. 0.35-->
<value name="fMaxRotationPerSecond" value="1.0"/> <!-- 0.55-->
<!-- Minimum time to wait between two mapping/localization steps -->
<value name="iWaitTime" value="500"/>
<!-- The map is only updated when the robot has turned a minimal angle (iUpdateMinMoveAngle),
has moved a minimal distance (iUpdateMinMoveDist) or a maximal time has passed( iMaxUpdateInterval ) -->
<value name="iUpdateMinMoveAngle" value="5"/>
<value name="iUpdateMinMoveDist" value="100"/>
<value name="iMaxUpdateInterval" value="2000"/>
<!-- Handle all incoming sensordata messages (AlwaysDeliver - value="1" - for SLAM benchmark) or only newest messages (keeponlynewest - value="0" - default) -->
<value name="bProcessAllMeasurements" value="0"/>
<!-- ASSUMED ERROR VALUES OF MOTION CALCULATION -->
<ErrorValues>
<!-- Rotation error while rotating in percent - old value: 50 20-->
<value name="fRotationErrorRotating" value="5.0"/>
<!-- Rotation error while translating in degrees per meter - old value: 5 2.0-->
<value name="fRotationErrorTranslating" value="5.0"/>
<!-- Translation error while translating in percent - old value: 15-25-->
<value name="fTranslationErrorTranslating" value="15.0"/>
<!-- Translation error while rotating in mm per degree - old value: 0.0-->
<value name="fTranslationErrorRotating" value="0.0"/>
<!-- Move jitter while turning in mm per degree - old value: 45800-->
<value name="fMoveJitterWhileTurning" value="30000.0"/>
</ErrorValues>
<!-- SETTINGS FOR SCAN MATCHING-->
<!-- SETTINGS FOR SCAN MATCHING-->
<ScanMatching>
<!-- If this variabe is true, scan matching is performed to improve the odometry data.
In a dynamic environment scan matching causes grave errors, especially if the
moving objects are close to the robot -->
<value name="bActivated" value="0"/>
<!-- Ignore odometry if true -->
<value name="bTest" value="0"/>
<!-- Used algorithm for scan matching.
1 = ICP, 2 = IDC, 3 = MbICP -->
<value name="iUsedAlgorithm" value="3"/>
<!-- Minimal point distance after reducing the number of scan points for
scan matching.
Value in mm. Value 0.0 means it is switched off. Standard: 200.0-->
<value name="fReducedPointDist" value="100.0"/>
<!-- Maximal distance of corresponding scan points, which are used
for scan matching. Value in mm. Standard: 300.0-->
<value name="fMaxCorrespondenceDiff" value="300.0"/>
<!-- Difference of scan angles which is considered to find
corresponding scan points for scan matching.
Value in degree. Standard: 90.0-->
<value name="fMaxAngleDiff" value="40.0"/>
<!-- Maximal distance of points in a cluster which is considered in
scan matching. Value in mm. 100.0-->
<value name="fMaxClusterDist" value="100.0"/>
<!-- Minimal diameter of a cluster of scan points which is considered
in scan matching.
Value in mm. Value 1.0 means it is switched of. Standard: 200.0-->
<value name="fMinClusterSize" value="200.0"/> <!--!!!!!!-->
<LineExtraction>
<!-- If this variable is true, the scan matcher works line-based.
If it is false, it works on the raw scan data.-->
<value name="bActivated" value="0"/>
<!-- Maximal distance of two consecutive points of a line -->
<value name="fMaxPointDistance" value="50.0"/>
<!-- Minimal number of points on a line -->
<value name="iMinPointsOnLine" value="10"/>
<!-- Minimal length of a line -->
<value name="fMinLength" value="100.0"/>
<!-- Maximal standard deviation of all points of a line-->
<value name="fMaxSigma" value="15.0"/>
</LineExtraction>
<MbICP>
<!--Factor which influences the behavior of the applied metric distance.
It describes the relation between rotation and translation.
If it is set to inifity, the behaviour of the MbIcpScanMatcher draws near to the IcpScanMatcher.
The value must be > 0. -->
<value name="fMetricFactor" value="1800.0"/>
</MbICP>
</ScanMatching>
</ParticleFilter>
<Kinect>
<!-- Settings for the kinect rgb camera -->
<Camera>
<!-- Note: sColorFormat can be RGB8 or Y8UV8 -->
<value name="sColorFormat" value="RGB8"/>
</Camera>
<!-- Determines whether to use Pointcloud(0) or Image(1) messages to compute our RGBDepthM -->
<value name="bUseImageTransport" value="1" />
<!-- Determines whether to use Image compression for transport of Images
If true(1) be sure to add a compression value (in percent) -->
<value name="bCompressImages" value="0" />
<value name="iCompressionValue" value="100" />
<value name="bSendContinuousDepthData" value="1" />
<!-- Determines how often RGBDepthDataM is updated -->
<value name="iIdleInterval" value="250" />
<value name="iTofIdleInterval" value="50" />
<!-- If set to true, RGBDepthM will be kept for painting and a 3DMap will be created
Always set to false, because of memory usage. -->
<value name="bCreate3DMap" value="0" />
<!-- 1: We are using the kinect instead of Laser Scanner data, affects PeopleTrackingModule (list may be incomplete)-->
<value name="bUseKinect" value="1" />
<value name="bUseKinectTracking" value="0" />
<value name="fTiltAngle" value="0"/>
<!-- If bMaskObstacles is true, then 3D Scan points with height greater
fMinObstacleHeight are marked inaccessible in the map -->
<value name="bMaskObstacles" value="1"/>
<!--value name="fMinObstacleHeight" value="140"/-->
<value name="fMinObstacleHeight" value="70"/>
<!-- Threshold for the maximum distance of points that are candidates as obstacles.
Needed because accuracy of the Kinect is decreasing by distance -->
<value name="fMaxObstacleFromRobotDistance" value="2000"/>
<value name="fMinObstacleFromRobotDistance" value="300"/>
<!-- How long is an obstcle saved after his last appearance in the kinect data -->
<value name="iObstacleSaveTime" value="10"/>
<value name="bDoKinectMappingWithTemporaryObstacles" value="1"/>
<!-- How often must an obstacle appear before it is known as an real obstacle -->
<value name="iObstacleMinAppearance" value="5"/>
</Kinect>
<SelfLocalization>
<value name="fScatterVarXY" value="50"/>
<!-- scattering variance for pose orientation in radiants -->
<value name="fScatterVarTheta" value="0.2"/>
</SelfLocalization>
<LaserScanners>
<SickLMS100>
<!-- Use this device in ActiveLaserScannerModule? -->
<value name="bActiveLaserScanner" value="0"/>
<!-- Is the device used for navigation? -->
<value name="bPassiveScan" value="1"/>
<!-- the ip and port the scanner is providing -->
<value name="sIP" value="169.254.97.144"/>
<value name="iPort" value="2111"/>
<!-- position of laserscanner in robot coordinates in mm -->
<value name="fPositionX" value="240"/>
<value name="fPositionY" value="0.0"/>
<value name="fPositionZ" value="40"/>
<!-- rotation radiuses of laserscanner beam in mm -->
<value name="fRotateRadiusY" value="0"/>
<value name="fRotateRadiusX" value="0"/>
<!-- orientation of laserscanner in robot coordinates
in degrees (counter clockwise) -->
<value name="fOrientation" value="-0.5"/>
<!-- valid maximum range (mm) -->
<value name="iValidMaxRange" value="30000"/>
<!-- valid minimum range (mm) -->
<value name="iValidMinRange" value="150"/>
<!-- minimum distance to be classified as free in case of errorneous measurement -->
<value name="iFreeReadingDistance" value="800"/>
<!-- number of scan points old 541-->
<value name="iScanSteps" value="1081"/>
<!-- scan angle in degrees -->
<value name="fScanAngle" value="270.0"/>
<!-- starting angle of one scan in degrees -->
<value name="fStartAngle" value="-135.0"/>
<value name="fObstacleThreshold" value="10"/>
<value name="iNumOffsetSteps" value="110" />
<value name="iNumBottomOffsetSteps" value="0"/>
<value name="iNumTopOffsetSteps" value="100"/>
<!-- iNumClearSlots for a 270Degree scanner. Only 180 Degree are used. Left and right 45 degree are deaktivated. For 0.5 resolution with 541 scanpoints we will need 90 points at each side masked. For security the Value for 0.5Degree Resolution is 100. If we use a 0.25 resulution we need 45Degree to masked out that means 180 Points + 10 Points security = 190 Points -->
<value name="iNumClearSlots" value="190"/>
<value name="sId" value="FrontLRF"/>
<!-- Set to 1 if scanner is mounted upside down -->
<value name="bMirror" value="1"/>
</SickLMS100>
</LaserScanners>
</default>
<map_manager>
</map_manager>
</MergedConfig>
\ No newline at end of file
homer_map_manager/images/rosgraph.png

660 KiB

This diff is collapsed.
#ifndef MAPMANAGER_H
#define MAPMANAGER_H
#include <string>
#include <map>
#include <list>
#include "nav_msgs/OccupancyGrid.h"
#include "geometry_msgs/Pose.h"
#include "ros/ros.h"
/** @class MapManager
* @author Malte Knauf, David Gossow (RX), Susanne Maur
* @brief This class holds all current map layers, updates them and publishes them in one merged map.
*/
class MapManager
{
public:
/**
* @brief Constructor
* @param nh node handle
*/
MapManager(ros::NodeHandle* nh);
/**
* @brief getMapLayer search for map layer of given type and return it
* @param type type of map layer to search for
* @return map layer
*/
nav_msgs::OccupancyGrid::ConstPtr getMapLayer(int type);
/**
* @brief updateMapLayer replaces map layer of given type
* @param type type of map layer
* @param layer new map layer
*/
void updateMapLayer(int type, nav_msgs::OccupancyGrid::ConstPtr layer);
/**
* @brief toggleMapVisibility toggles visibility of each map layer
* @param type type of map layer to toggle
* @param state visible or not
*/
void toggleMapVisibility(int type, bool state );
/**
* @brief clearMapLayers Clear all map layers
*/
void clearMapLayers();
/** getters */
double getHeight() { return m_Height; }
double getWidth() { return m_Width; }
double getResolution() { return m_Resolution; }
geometry_msgs::Pose getOrigin() { return m_Origin; }
/** destructor */
virtual ~MapManager();
private:
/** merges all map layers and publishes the merged map */
void sendMergedMap();
/**
* The map data of each available map layer ist stored in this map
*/
std::map<int, nav_msgs::OccupancyGrid::ConstPtr > m_MapLayers;
/**
* This map stores which map layers are enabled and which are disabled
*/
std::map<int, bool> m_MapVisibility;
//sizes of the last slam map
double m_Height;
double m_Width;
double m_Resolution;
geometry_msgs::Pose m_Origin;
/** map publisher */
ros::Publisher m_MapPublisher;
};
#endif
#ifndef MaskingManager_H
#define MaskingManager_H
#include <ros/ros.h>
#include "nav_msgs/OccupancyGrid.h"
#include "homer_mapnav_msgs/ModifyMap.h"
/**
* @class MaskingManager
* @brief Manages a map that can overwrite values in the SLAM map or store it in a separate layer
* @author Malte Knauf, David Gossow
*/
class MaskingManager
{
public:
/** @brief The constructor. */
MaskingManager(int mapSize, float resolution);
/** @brief The destructor. */
virtual ~MaskingManager();
/** modifies either the masking layer or the slam layer (accordingly to the given map layer in the msg */
nav_msgs::OccupancyGrid::ConstPtr modifyMap(homer_mapnav_msgs::ModifyMap::ConstPtr msg);
/** resets the masking map layer */
nav_msgs::OccupancyGrid::ConstPtr resetMap();
/** replaces the masking map layer */
void replaceMap(nav_msgs::OccupancyGrid map);
private:
/** stores the masking values in the dedicated masking map */
nav_msgs::OccupancyGrid m_MaskingMap;
/** stores the masking values that are afterwards sent to the slam map */
nav_msgs::OccupancyGrid m_SlamMap;
/** sizes of the masking map layer */
int m_Width, m_Height;
float m_CellSize;
/** tools to draw masking polygons */
void drawPolygon ( std::vector< geometry_msgs::Point > vertices, int value, int mapLayer );
void drawLine ( std::vector<int> &data, int startX, int startY, int endX, int endY, int value );
void fillPolygon ( std::vector<int> &data, int x, int y, int value );
};
#endif
#ifndef POI_MANAGER_H
#define POI_MANAGER_H
#include <list>
#include <homer_mapnav_msgs/PointOfInterest.h>
#include <homer_mapnav_msgs/ModifyPOI.h>
#include <ros/ros.h>
/** @class PoiManager
* @author Malte Knauf, David Gossow
* @brief This class manages the List of points of interest (POIs)
*
* This class keeps a list of all POIs within the current map. It provides the usual functions
* to edit the list.
*/
class PoiManager {
public:
/** The constructor of the class. */
PoiManager(ros::NodeHandle* nh);
/** constructor initializing the poi list */
PoiManager( std::vector< homer_mapnav_msgs::PointOfInterest > pois );
/** Does nothing. */
~PoiManager() {}
/** Adds a new POI to the list if no POI with the same name exists
* @param poi pointer to the PointOfInterest message with the POI to be added
* @return true if successful, false otherwise
*/
bool addPointOfInterest( const homer_mapnav_msgs::PointOfInterest::ConstPtr& poi );
/** Replaces a POI with a new one
* @param poi pointer with the PointOfInterest to be inserted
* the POI with the same ID as the new one is first deleted
* @return true if the old POI was found and could be deleted
* false otherwise
*/
bool modifyPointOfInterest( const homer_mapnav_msgs::ModifyPOI::ConstPtr& poi );
/** Deletes a POI with a certain name from the list
* @param name Name of the POI to be deleted
* @return true if the POI was found and could be deleted
* false otherwise
*/
bool deletePointOfInterest( std::string name );
/**
* @brief place the current poi list
* @param poilist new poi list
*/
void replacePOIList(std::vector<homer_mapnav_msgs::PointOfInterest> poilist);
/** Returns current POI list
* @return the POI list
*/
std::vector< homer_mapnav_msgs::PointOfInterest > getList();
private:
/** Looks for POI with name in the list
* @param name Name of the POI
*/
bool poiExists( std::string name );
/**
* @brief Publishes a PointsOfInterest Message with current POIs
*/
void broadcastPoiList();
/** The copy constructor of the class.
* It's kept private, because it will never be used.
*/
PoiManager( const PoiManager& instance );
/** Holds the POI vector */
std::vector< homer_mapnav_msgs::PointOfInterest > m_Pois;
/** publisher that publishes the current poi list */
ros::Publisher m_POIsPublisher;
};
#endif
#ifndef ROI_MANAGER_H
#define ROI_MANAGER_H
#include <ros/ros.h>
#include <homer_mapnav_msgs/RegionOfInterest.h>
/**
* @class RoiManager (Roi = Region of interest)
* @author Viktor Seib (R23)
* @brief This class manages the List of regions of interest (ROIs)
*
* This class keeps a list of all ROIs within the current map. It provides the usual functions
* to edit the list.
*/
class RoiManager
{
public:
/** The constructor of the class. */
RoiManager(ros::NodeHandle* nh);
/** constructor initializing the roi list */
RoiManager( std::vector< homer_mapnav_msgs::RegionOfInterest > rois );
/** Does nothing. */
~RoiManager() {}
/** Adds a new ROI to the list, in contrast to POIs, several ROIs with the same name are allowed
* @param roi RegionOfInterest message with the ROI to be added
* @return true if successful, false otherwise
*/
bool addRegionOfInterest( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& roi );
/** Replaces a ROI with a new one
* @param roi RegionOfInterest to be inserted
* the ROI with the same ID as the new one is first deleted
* @return true if the old ROI was found and could be deleted
* false otherwise
*/
bool modifyRegionOfInterest( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& roi );
/** Deletes all ROIs with a certain name from the list
* @param name Name of the ROIs to be deleted
* @return true if the ROI was found and could be deleted
* false otherwise
*/
bool deleteRegionOfInterest( std::string name );
/** Deltes ROI with the given id
* @param id ID of ROI to be deleted
* @return true if the ROI was found and could be deleted
* false otherwise
*/
bool deleteRegionOfInterest( int id );
/**
* @brief place the current roi list
* @param roilist new roi list
*/
void replaceROIList(std::vector<homer_mapnav_msgs::RegionOfInterest> roilist);
/** Returns current ROI list
* @return the ROI list
*/
std::vector< homer_mapnav_msgs::RegionOfInterest > getList();
private:
/** Looks for ROI with name in the list
* @param id ID of the ROI
*/
bool roiExists(int id );
/**
* @brief Publishes a RegionsOfInterest Message with current ROIs
*/
void broadcastRoiList();
/** The copy constructor of the class.
* It's kept private, because it will never be used.
*/
RoiManager( const RoiManager& instance );
/** Holds the ROI vector */
std::vector< homer_mapnav_msgs::RegionOfInterest > m_Rois;
/** publisher that publishes the current roi list */
ros::Publisher m_ROIsPublisher;
};
#endif
/*
* Copyright (c) 2008, Willow Garage, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Willow Garage, Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef MAP_SERVER_MAP_SERVER_H
#define MAP_SERVER_MAP_SERVER_H
/*
* Author: Brian Gerkey
*/
#include "nav_msgs/GetMap.h"
namespace map_server
{
/** Read the image from file and fill out the resp object, for later
* use when our services are requested.
*
* @param resp The map wil be written into here
* @param fname The image file to read from
* @param res The resolution of the map (gets stored in resp)
* @param negate If true, then whiter pixels are occupied, and blacker
* pixels are free
* @param occ_th Threshold above which pixels are occupied
* @param free_th Threshold below which pixels are free
* @param origin Triple specifying 2-D pose of lower-left corner of image
*
* @throws std::runtime_error If the image file can't be loaded
* */
void loadMapFromFile(nav_msgs::OccupancyGrid* map,
const char* fname, double res, bool negate,
double occ_th, double free_th, double* origin);
}
#endif
/*
* Copyright (c) 2008, Willow Garage, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Willow Garage, Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* Author: Brian Gerkey */
#define USAGE "\nUSAGE: map_server <map.yaml>\n" \
" map.yaml: map description file\n" \
"DEPRECATED USAGE: map_server <map> <resolution>\n" \
" map: image file to load\n"\
" resolution: map resolution [meters/pixel]"
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <fstream>
#include "ros/ros.h"
#include "ros/console.h"
#include "image_loader.h"
#include "nav_msgs/OccupancyGrid.h"
#include "yaml-cpp/yaml.h"
#include <homer_mapnav_msgs/PointOfInterest.h>
class MapServer
{
public:
/** Trivial constructor */
MapServer(const std::string fname);
nav_msgs::OccupancyGrid getSLAMMap();
nav_msgs::OccupancyGrid getMaskingMap();
std::vector<homer_mapnav_msgs::PointOfInterest> getPois();
private:
/** The map data is cached here
*/
nav_msgs::GetMap::Response map_resp_;
nav_msgs::OccupancyGrid m_SLAMMap;
nav_msgs::OccupancyGrid m_MaskingMap;
std::vector<homer_mapnav_msgs::PointOfInterest> poiList;
};
/*
* map_saver
* Copyright (c) 2008, Willow Garage, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the <ORGANIZATION> nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <cstdio>
#include "ros/ros.h"
#include "ros/console.h"
#include "nav_msgs/GetMap.h"
//#include "LinearMath/btMatrix3x3.h"
#include "geometry_msgs/Quaternion.h"
#include <homer_mapnav_msgs/PointOfInterest.h>
using namespace std;
/**
* @brief Map generation node.
*/
class MapGenerator
{
public:
MapGenerator(const std::string mapname);
void save(const nav_msgs::OccupancyGridConstPtr& SLAMMap,
const nav_msgs::OccupancyGridConstPtr& maskingMap,
std::vector<homer_mapnav_msgs::PointOfInterest> poiList);
private:
std::string m_Mapname;
void saveMapLayer(const nav_msgs::OccupancyGridConstPtr& map, std::string fileName);
};
#ifndef POINTOFINTEREST_H
#define POINTOFINTEREST_H
#include <string>
#include <map>
#include "Workers/Math/Pose.h"
//#include "Architecture/Serializer/ExtendedOutStream.h"
//#include "Architecture/Serializer/ExtendedInStream.h"
using namespace std;
typedef std::map< std::string, std::string > StringMapT;
typedef std::map< std::string, float > FloatMapT;
typedef std::map< std::string, int > IntMapT;
/**
* @class PointOfInterest
*
* @author Robert Hoffmann (RX), David Gossow (RX), Simon Graeser (RX),
* Nicolai Wojke (R14)
*
* @brief This class represents a point of interest (POI)
*
* This class represents a point of interest (POI). It is derived from
* Point2D and thus inherits its methods x(), y(), and theta() to query
* the world position and orientation.
*/
class PointOfInterest: public Pose
{
public:
enum PoiType { DEFAULT =100,
VICTIM =200,
OBJECT =300,
GRIPPABLE_OBJECT =400,
PERSON =600,
ROOMBA =700,
HAZARD_MATERIAL =800,
START_POSITION =900,
START_ORIENTATION =1000
};
PointOfInterest( );
/**
* @brief The constructor
*
* Creates a point of interest with orientation 0.0.
*
* @param id unique identification number
* @param name name of the poi
* @param type type of the poi (victim, etc.)
* @param posX,posY position within the map
* @param remarks additional information associated with the poi
*/
PointOfInterest ( int id, string name, PoiType type, float posX, float posY, string remarks,
StringMapT stringMap=StringMapT(), FloatMapT floatMap=FloatMapT() ,
IntMapT intMap=IntMapT() )
: Pose ( posX, posY, 0.0f )
{
init ( id, name, type , remarks, stringMap, floatMap, intMap );
}
/** @brief The constructor
* @param id unique identification number
* @param name name of the poi
* @param type type of the poi (victim, etc.)
* @param posX,posY position within the map
* @param theta orientation of the poi
* @param remarks additional information associated with the poi
*/
PointOfInterest ( int id, string name, PoiType type, float posX, float posY, float theta, string remarks,
StringMapT stringMap=StringMapT(), FloatMapT floatMap=FloatMapT(), IntMapT intMap=IntMapT() )
: Pose ( posX, posY, theta )
{
init ( id, name, type , remarks, stringMap, floatMap, intMap );
}
/** @brief Alternative constructor omitting the id parameter */
PointOfInterest ( string name, PoiType type, float posX, float posY , string remarks )
: Pose ( posX, posY, 0.0f )
{
init ( -1, name, type , remarks, StringMapT(), FloatMapT(), IntMapT() );
}
/** @brief Alternative constructor omitting the id parameter */
PointOfInterest ( string name, PoiType type, float posX, float posY , float theta, string remarks )
: Pose ( posX, posY, theta )
{
init ( -1, name, type , remarks, StringMapT(), FloatMapT(), IntMapT() );
}
/** @brief Copy constructor, assigns a new id */
PointOfInterest ( int id, const PointOfInterest* poi );
/** @brief The standard destructor */
virtual ~PointOfInterest() {}
/** @brief Tests whether this PointOfInterest has the specified name or not, ignoring case.
* @param name The name to test as a string.
* @return true if the given name matches the PointOfInterest's name (not case-sensitive), false if not.
*/
bool hasName ( string name ) const;
/** @brief Tests whether this PointOfInterest has the specified string in its name or not, ignoring case.
* @param part The string to test.
* @return true if the given string is contained in the PointOfInterest's name (not case-sensitive), false if not.
*/
bool hasInName ( string part ) const;
// SETTER FUNCTIONS /////////////////////////////
/** @param remarks Changes the contents of remarks attribute. */
void setRemarks ( string remarks ) { m_Remarks = remarks; }
void setName ( string name ) { m_Name = name; }
/** @brief Add a new String to the StringMap */
void addString ( string key, string data ) { m_StringMap.insert ( pair< string, string > ( key, data ) ); }
/** @brief Add a new Float to the FloatMap */
void addFloat ( string key, float data ) { m_FloatMap.insert ( pair< string, float > ( key, data ) ); }
/** @brief Add a new Int to the IntMap */
void addInt ( string key, int data ) { m_IntMap.insert ( pair< string, int > ( key, data ) ); }
// GETTER FUNCTIONS //////////////////////
/** @return id attribute */
int getId() const { return m_Id; }
/** @return name attribute */
string getName() const { return m_Name; }
/** @return type attribute */
PoiType getType() const { return m_Type; }
/** @return remarks attribute */
string getRemarks() const { return m_Remarks; }
/** Get the string to the matching string */
string getString ( string key ) const { return m_StringMap.find ( key )->second; }
/** Get the float to the matching string */
float getFloat ( string key ) const { return m_FloatMap.find ( key )->second; }
/** Get the Int to the matching string */
int getInt ( string key ) const { return m_IntMap.find ( key )->second; }
/** Get the string map */
map<string, string> getStringMap() const { return m_StringMap; }
/** Get the float map */
map<string, float> getFloatMap() const { return m_FloatMap; }
/** Get the int map */
map<string, int> getIntMap() const { return m_IntMap; }
// (DE)SERIALIZATION ///////////////////////////////////
//TODO
// void storer ( ExtendedOutStream& ) const ;
// PointOfInterest ( ExtendedInStream& );
/** @brief print description */
void printOn ( ostream& strm ) const;
private:
void init ( int id, string name, PoiType type, string remarks, StringMapT stringMap, FloatMapT floatMap, IntMapT intMap );
int m_Id;
string m_Name;
PoiType m_Type;
string m_Remarks;
StringMapT m_StringMap;
IntMapT m_IntMap;
FloatMapT m_FloatMap;
};
#endif
#ifndef MAP_MANAGER_NODE_H
#define MAP_MANAGER_NODE_H
#include <ros/ros.h>
#include <tf/transform_listener.h>
#include "Managers/MapManager.h"
#include "Managers/PoiManager.h"
#include "Managers/RoiManager.h"
#include "Managers/MaskingManager.h"
#include "std_msgs/String.h"
#include "std_msgs/Int32.h"
#include "nav_msgs/OccupancyGrid.h"
#include "homer_mapnav_msgs/MapLayers.h"
#include "homer_mapnav_msgs/ModifyMap.h"
#include "std_msgs/Empty.h"
#include "homer_mapnav_msgs/GetPointsOfInterest.h"
#include "homer_mapnav_msgs/GetRegionsOfInterest.h"
#include "homer_mapnav_msgs/ModifyPOI.h"
#include "homer_mapnav_msgs/DeletePointOfInterest.h"
#include "sensor_msgs/LaserScan.h"
#include "homer_mapnav_msgs/SaveMap.h"
#include "homer_mapnav_msgs/LoadMap.h"
#include "std_srvs/Empty.h"
/** @class MapManagerNode
* @author Malte Knauf, Viktor Seib
* @brief This class handles incoming and outgoing messages and redirects them to the according modules
*/
class MapManagerNode
{
public:
MapManagerNode(ros::NodeHandle* nh);
~MapManagerNode();
private:
/** callback functions */
/** callbacks of MapManagerModule */
void callbackSLAMMap( const nav_msgs::OccupancyGrid::ConstPtr& msg );
void callbackSaveMap( const std_msgs::String::ConstPtr& msg );
void callbackLoadMap( const std_msgs::String::ConstPtr& msg );
void callbackMapVisibility( const homer_mapnav_msgs::MapLayers::ConstPtr& msg );
void callbackResetMaps( const std_msgs::Empty::ConstPtr& msg );
/** laser scan callback */
void callbackLaserScan( const sensor_msgs::LaserScan::ConstPtr& msg );
/** callbacks of PointOfInterestManagerModule */
void callbackAddPOI( const homer_mapnav_msgs::PointOfInterest::ConstPtr& msg );
void callbackModifyPOI( const homer_mapnav_msgs::ModifyPOI::ConstPtr& msg );
void callbackDeletePOI( const homer_mapnav_msgs::DeletePointOfInterest::ConstPtr& msg );
/** callbacks of RegionOfInterestManagerModule */
void callbackAddROI( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& msg );
void callbackModifyROI( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& msg );
void callbackDeleteROIbyName( const std_msgs::String::ConstPtr& msg );
void callbackDeleteROIbyID( const std_msgs::Int32::ConstPtr& msg );
void callbackOctomapMap( const nav_msgs::OccupancyGrid::ConstPtr& msg);
/** callback of MaskingMapModule */
void callbackModifyMap( const homer_mapnav_msgs::ModifyMap::ConstPtr& msg );
/** service of PointOfInterestModule to get a list with all Points Of Interest */
bool getPOIsService(homer_mapnav_msgs::GetPointsOfInterest::Request& req,
homer_mapnav_msgs::GetPointsOfInterest::Response& res);
/** service of RegionOfInterestModule to get a list with all Regions Of Interest */
bool getROIsService(homer_mapnav_msgs::GetRegionsOfInterest::Request& req,
homer_mapnav_msgs::GetRegionsOfInterest::Response& res);
/** Service for saving a map**/
bool saveMapService(homer_mapnav_msgs::SaveMap::Request& req,
homer_mapnav_msgs::SaveMap::Response& res);
/** Service for loading a map**/
bool loadMapService(homer_mapnav_msgs::LoadMap::Request& req,
homer_mapnav_msgs::LoadMap::Response& res);
/** Service resetting the current map**/
bool resetMapService(std_srvs::Empty::Request& req,
std_srvs::Empty::Response& res);
/** modules that are included in this node */
MapManager* m_MapManager;
PoiManager* m_POIManager;
RoiManager* m_ROIManager;
MaskingManager* m_MaskingManager;
//ros specific members
ros::NodeHandle* m_Nodehandle;
//subscriptions of MapManagerModule here
ros::Subscriber m_SLAMMapSubscriber;
ros::Subscriber m_SaveMapSubscriber;
ros::Subscriber m_LoadMapSubscriber;
ros::Subscriber m_MapVisibilitySubscriber;
ros::Subscriber m_LaserScanSubscriber;
//subscriptions of PointOfInterestManagerModule
ros::Subscriber m_AddPOISubscriber;
ros::Subscriber m_ModifyPOISubscriber;
ros::Subscriber m_DeletePOISubscriber;
//subscriptions of RegionOfInterestManagerModule
ros::Subscriber m_AddROISubscriber;
ros::Subscriber m_ModifyROISubscriber;
ros::Subscriber m_DeleteROIByIDSubscriber;
ros::Subscriber m_DeleteROIByNameSubscriber;
//subscriptions of MaskingMapModule
ros::Subscriber m_ModifyMapSubscriber;
ros::Subscriber m_ResetMapsSubscriber;
/** publisher for loaded maps */
ros::Publisher m_LoadedMapPublisher;
/** publisher to mask slam map */
ros::Publisher m_MaskSlamMapPublisher;
/** service of PointOfInterstModule */
ros::ServiceServer m_GetPOIsService;
/** service of RegionOfInterstModule */
ros::ServiceServer m_GetROIsService;
/** Service for saving the current Map to a file **/
ros::ServiceServer m_SaveMapService;
/** Resetting the current map**/
ros::ServiceServer m_ResetMapService;
/** Service for loading a previously saved map **/
ros::ServiceServer m_LoadMapService;
tf::TransformListener m_TransformListener;
/** timestamp of last incoming laser scan message */
ros::Time m_LastLaserTime;
ros::Subscriber m_OctomapSubscriber;
nav_msgs::OccupancyGrid::ConstPtr m_highSensitiveMap;
};
#endif // MAP_MANAGER_NODE_H
/**
\mainpage
\htmlinclude manifest.html
\b map_manager
<!--
Provide an overview of your package.
-->
-->
*/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment