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

Trimmed the branch to only the homer_map_manager sub directory

parent ef8cac89
No related branches found
No related tags found
No related merge requests found
Showing
with 42 additions and 405 deletions
File moved
File moved
# mapping and navigation
Here you can find the homer mapping and navigation packages
# 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
File moved
File moved
File moved
# 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package mapnav_msgs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.0.1 (2015-09-08)
------------------
* init
* Contributors: Raphael Memmesheimer
cmake_minimum_required(VERSION 2.8.3)
project(homer_mapnav_msgs)
find_package(catkin REQUIRED
COMPONENTS message_generation nav_msgs geometry_msgs)
add_message_files(FILES
DeletePointOfInterest.msg
DoMapping.msg
MapLayers.msg
ModifyMap.msg
PointOfInterest.msg
PointsOfInterest.msg
RegionOfInterest.msg
RegionsOfInterest.msg
ModifyPOI.msg
TargetUnreachable.msg
StartNavigation.msg
StopNavigation.msg
NavigateToPOI.msg
)
add_service_files(FILES
GetPointsOfInterest.srv
GetRegionsOfInterest.srv
LoadMap.srv
SaveMap.srv
)
generate_messages(DEPENDENCIES geometry_msgs nav_msgs)
catkin_package(CATKIN_DEPENDS message_runtime geometry_msgs nav_msgs)
# map_messages
## Introduction
Dieses Package enthält alle benutzerdefinierten Messages, die neben den in ROS enthaltenen Messages für das Mapping und die Navigation verwendet werden. Das Package enthält keine Node oder Librabries.
## Messages
### PointOfInterest
Die PointOfInterest-Message enthält alle Informationen, um einen POI zu erstellen, zu verschicken und zu speichern.
~~~~~~ {.cpp}
PointOfInterest.msg
int32 DEFAULT=100
int32 VICTIM=200
int32 OBJECT=300
int32 GRIPPABLE_OBJECT=400
int32 PERSON=600
int32 ROOMBA=700
int32 HAZARD_MATERIAL=800
int32 START_POSITION=900
int32 START_ORIENTATION=1000
int32 type
string name
string remarks
geometry_msgs/Pose pose
~~~~~~
* `type` bezeichnet den Typ des POIs. Es kann eine der in dieser Message vorhandenen Konstanten verwendet werden.
* `name` bezeichnet den Namen des POIs. Dieser Name muss einzigartig sein, da die POIs über ihren Namen unterschieden werden.
* `remarks`: Hier können Anmerkungen reingeschrieben werden. Diese werden in der GUI angezeigt.
* `pose` bezeichnet die Position und Orientierung des POIS im /map-Frame.
### ModifyPOI
ModifyPOI ist dafür zuständig, einen vorhandenen POI zu verändern.
~~~~~~ {.cpp}
ModifyPOI.msg
PointOfInterest poi
string old_name
~~~~~~
* `poi` beinhaltet den POI, durch den der alte ersetzt werden soll.
* `old_name` bezeichnet den Namen des POIs, der verändert werden soll.
### TargetUnreachable
TargetUnreachable wird von der Navigation versendet, sobald kein Pfad mehr zu einem Ziel geplant werden kann.
~~~~~~ {.cpp}
TargetUnreachable.msg
int8 UNKNOWN=0
int8 TILT_OCCURED=10
int8 GRAVE_TILT_OCCURED=15
int8 STALL_OCCURED=20
int8 LASER_OBSTACLE=30
int8 reason
~~~~~~
* `reason` kann einen von den in dieser Message definierten Konstanten annehmen und beschreibt den Grund des Fehlers.
### SaveMap
SaveMap wird versendet, wenn eine Karte gespeichert oder geladen werden soll und beinhaltet den Dateipfad zum Kartenordner.
~~~~~~ {.cpp}
SaveMap.msg
string filename
~~~~~~
* `filename` bezeichnet den Dateipfad zum Kartenordner.
### PointsOfInterest
PointsOfInterest wird verwendet, um alle aktuellen POIs zu versenden.
~~~~~~ {.cpp}
PointsOfInterest.msg
PointOfInterest[] pois
~~~~~~
* `pois` beinhaltet einen Vektor mit allen aktuellen POIs.
### StartNavigation
StartNavigation ist eine von zwei Methoden, um eine Navigation zu starten. Hier wird Der POI mitgegeben, zu dem der Roboter navigieren soll.
~~~~~~ {.cpp}
StartNavigation.msg
geometry_msgs/Pose goal
float32 distance_to_target
bool skip_final_turn
bool fast_planning
~~~~~~
* `goal` beinhaltet den Ziel-POI
* `distance_to_target`: Hier kann angegeben werden, ab welcher Distanz zum Ziel die Navigation als erfolgreich abgeschlossen wird.
* `skip_final_turn`: Hier kann eingestellt werden, ob der Roboter sich am Ziel-POI in Richtund der POI-Orientierung ausrichten soll oder nicht.
* `fast_planning`: Mit dieser Option kann ein experimentelles "Schnelles Planen" eingeschaltet werden. Es werden nur Pfade geplant, die sich in einer Boundingbox zwischen Roboter und Zielposition befinden.
### MapLayers
MapLayers definiert die vorhanden Kartenebenen als Konstanten und kann zudem verwendet werden, um einzelne Ebenen ein- oder auszuschalten.
~~~~~~ {.cpp}
MapLayers.msg
int32 SLAM_LAYER=0
int32 MASKING_LAYER=1
int32 KINECT_LAYER=2
int32 SICK_LAYER=3
int32 layer
bool state
~~~~~~
* `layer` enthält die Kartenebenen-ID und kann einen Wert dern in dieser Message definierten Konstanten annehmen.
* `state` besagt, ob die ausgewählte Kartenebene aktiviert sein soll.
### NavigateToPOI
NavigateToPOI ist die zweite Art eine Navigation zu starten. Anstatt das gesamte POI-Objekt mitzugeben, wird nur der Name eines bereits im map_manger vorhandenen POIs mitgegeben, der daraufhin von der Navigation nachgeschlagen wird.
~~~~~~ {.cpp}
NavigateToPOI.msg
string poi_name
float32 distance_to_target
bool skip_final_turn
~~~~~~
* `poi_name` beschreibt den Namen des POIS, zu dem navigiert werden soll.
* `distance_to_target` siehe StartNavigation
* `skip_final_turn` siehe StartNavigation
### ModifyMap
Mit dieser Message können Bereiche in einzelnen Kartenebenen verändert werden.
~~~~~~ {.cpp}
ModifyMap.msg
int32 FREE = 0
int32 BLOCKED = 100
int32 OBSTACLE = 99
int32 NOT_MASKED = -1
geometry_msgs/Point[] region
int32 maskAction
int32 mapLayer
~~~~~~
* `region` beschreibt die Eckpunkte des Polygons, das maskiert werden soll.
* `maskAction` kann einen Wert der in dieser Message definierten Konstanten annehmen. OBSTACLE wird in der Karte rot dargestellt. Mit NOT_MASKED können bereits maskierte Bereiche wieder gelöscht werden.
* `mapLayer` enthält die ID der zu verändernden Kartenebene. Die IDs sind in der Message MapLayers definiert.
### DeletePointOfInterest
Löscht einen vorhandenen POI.
~~~~~~ {.cpp}
DeletePointOfInterest.msg
string name
~~~~~~
* `name` beschreibt den Namen des zu löschenden POIs.
### DoMapping
Mit dieser Message kann das Mapping ein- oder ausgeschaltet werden.
~~~~~~ {.cpp}
DoMapping.msg
bool state
~~~~~~
* `state` beinhaltet den Zustand des Mappings (true = an, false = off).
## Services
### GetPointsOfInterest
Über diesen Service kann die aktuelle Liste der POIs angefordert werden.
~~~~~~ {.cpp}
GetPointsOfInterest.srv
---
PointsOfInterest poi_list
~~~~~~
* `poi_list` beinhaltet einen Vektor mit allen aktuellen POIs.
/**
\mainpage
\htmlinclude manifest.html
\b map_messages
<!--
Provide an overview of your package.
-->
-->
*/
<package>
<description brief="map_messages">
map_messages
</description>
<author>Malte Knauf</author>
<license>BSD</license>
<review status="unreviewed" notes=""/>
<url>http://ros.org/wiki/map_messages</url>
<depend package="geometry_msgs"/>
<depend package="nav_msgs"/>
</package>
string name
bool state
int32 SLAM_LAYER=0
int32 MASKING_LAYER=1
int32 KINECT_LAYER=2
int32 SICK_LAYER=3
int32 layer # map layer name
bool state # visibility state (on/off)
int32 FREE = 0 # Area is free
int32 BLOCKED = 100 # Area blocked by user (use UNBLOCK to .. )
int32 OBSTACLE = 99 # Area is occupied by an obstacle (e.g. 3d scan)
int32 NOT_MASKED = -1 # Area is not masked: use slam map
int32 HIGH_SENSITIV = -2 # Area is highly sensitiv for Obstacles
int32 KINECT = 102 # Area is blocked by Kinect Obstacle
int32 SET_FREE = 0 # Mark area free, area must not be BLOCKED
int32 SET_BLOCKED = 100 # Block area
int32 SET_OBSTACLE = 99 # Mark area as occupied by an obstacle (e.g. 3d scan)
int32 SET_HIGH_SENSITIV = -2 # Mark Area as highly sensitiv for Obstacles
geometry_msgs/Point[] region
int32 maskAction
int32 mapLayer #currently not used. modifications only take place in the masking map layer
PointOfInterest poi
string old_name #necessary if name of poi is changed
string poi_name
float32 distance_to_target
bool skip_final_turn
#POI types
int32 DEFAULT=100
int32 OBJECT=300
int32 GRIPPABLE_OBJECT=400
int32 PERSON=600
int32 START_POSITION=900
int32 START_ORIENTATION=1000
int32 type
string name
string remarks
geometry_msgs/Pose pose
PointOfInterest[] pois
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