From 12311ad14fc867f34632d4456df711d5d83cb476 Mon Sep 17 00:00:00 2001 From: Alexander Mock Date: Mon, 9 Dec 2024 23:57:20 +0100 Subject: [PATCH] added logos and more structure --- docs/guides/index.md | 1 + docs/index.md | 49 ++++++------------ docs/library/controller_plugin.md | 1 + docs/library/cost_layer_plugin.md | 1 + docs/library/index.md | 3 ++ docs/library/planner_plugin.md | 1 + docs/media/mesh_nav_icon.png | Bin 0 -> 22803 bytes docs/media/mesh_nav_icon_bg_white.png | Bin 0 -> 23791 bytes ..._navigation_logo.png => mesh_nav_logo.png} | Bin docs/run.md | 0 docs/static/stylesheets/style.css | 6 +++ docs/theory/index.md | 1 + docs/tutorials/cost_layer_generation.md | 4 +- docs/tutorials/deliberation.md | 8 --- .../tutorials/editing/align_mesh_to_ground.md | 15 ++++++ docs/tutorials/editing/flatten_surface.md | 30 +++++++++++ docs/tutorials/index.md | 41 +++++++-------- .../tutorials/{ => plugins}/own_cost_layer.md | 0 docs/tutorials/worlds/real_world.md | 3 ++ docs/tutorials/worlds/simple.md | 7 +++ mkdocs.yml | 47 +++++++++++------ 21 files changed, 137 insertions(+), 81 deletions(-) create mode 100644 docs/guides/index.md create mode 100644 docs/library/index.md create mode 100644 docs/media/mesh_nav_icon.png create mode 100644 docs/media/mesh_nav_icon_bg_white.png rename docs/media/{mesh_navigation_logo.png => mesh_nav_logo.png} (100%) create mode 100644 docs/run.md create mode 100644 docs/static/stylesheets/style.css create mode 100644 docs/theory/index.md create mode 100644 docs/tutorials/editing/align_mesh_to_ground.md create mode 100644 docs/tutorials/editing/flatten_surface.md rename docs/tutorials/{ => plugins}/own_cost_layer.md (100%) create mode 100644 docs/tutorials/worlds/real_world.md create mode 100644 docs/tutorials/worlds/simple.md diff --git a/docs/guides/index.md b/docs/guides/index.md new file mode 100644 index 0000000..50a8673 --- /dev/null +++ b/docs/guides/index.md @@ -0,0 +1 @@ +# Guides diff --git a/docs/index.md b/docs/index.md index d2e854c..be772e5 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,55 +1,40 @@
- Mesh Navigation + Mesh Navigation

Mesh Navigation Documentation

-
- Code -   •   - Mesh Tools -   •   - Move Base Flex -   •   - Videos -
+
+
+
# Documentation - This documentation is under construction. It will contain both explanations for more applied users and for developers. ## Table of Contents This documentation cosists of several examples, guides and conceptual explanations to give users a more thourough understanding of [mesh_navigation](https://github.com/naturerobots/mesh_navigation). -**Mesh Navigation** +**Getting Started** - [Overview](/index.md) - [Installation](/installation.md) +- [Run](/run.md) -**Theory** -- [Why Meshes?](/theory/mesh_maps.md) - -**Tutorials** - -Guides: -1. [Mesh Mapping](/tutorials/mesh_mapping.md) -2. [Cost Layers Generation](/tutorials/cost_layer_generation.md) -3. [Localization](/tutorials/localization.md) -4. [Mesh Navigation](/tutorials/mesh_navigation.md) -5. [Deliberation](/tutorials/deliberation.md) - -**Library** - -Writing own plugins for -- [Cost Layer](/library/cost_layer_plugin.md) -- [Planner](/library/planner_plugin.md) -- [Controller](/library/controller_plugin.md) +**Documentation** -**Guides** -TODO +- [Theory](/theory/index.md) +- [Tutorials](tutorials/index.md) +- [Library](/library/index.md) +- [Guides](/guides/index.md) ## Contributions diff --git a/docs/library/controller_plugin.md b/docs/library/controller_plugin.md index e69de29..44d0b46 100644 --- a/docs/library/controller_plugin.md +++ b/docs/library/controller_plugin.md @@ -0,0 +1 @@ +# Controller Plugin \ No newline at end of file diff --git a/docs/library/cost_layer_plugin.md b/docs/library/cost_layer_plugin.md index e69de29..8348231 100644 --- a/docs/library/cost_layer_plugin.md +++ b/docs/library/cost_layer_plugin.md @@ -0,0 +1 @@ +# Cost Layer Plugin \ No newline at end of file diff --git a/docs/library/index.md b/docs/library/index.md new file mode 100644 index 0000000..36ec42c --- /dev/null +++ b/docs/library/index.md @@ -0,0 +1,3 @@ +# Library + +TODO: More in-depth library overview \ No newline at end of file diff --git a/docs/library/planner_plugin.md b/docs/library/planner_plugin.md index e69de29..3cb21da 100644 --- a/docs/library/planner_plugin.md +++ b/docs/library/planner_plugin.md @@ -0,0 +1 @@ +# Planner Plugin diff --git a/docs/media/mesh_nav_icon.png b/docs/media/mesh_nav_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..42ee91f37806e7f6db22cffd407e514d9cfd433a GIT binary patch literal 22803 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 z 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 + +
diff --git a/docs/tutorials/editing/flatten_surface.md b/docs/tutorials/editing/flatten_surface.md new file mode 100644 index 0000000..db50582 --- /dev/null +++ b/docs/tutorials/editing/flatten_surface.md @@ -0,0 +1,30 @@ + +# Mesh Editing: Flatten a surface + +*TODO*: Rewrite this + + +Due to sensor inaccuracies flat floors sometimes are mapped roughly... + + +straightened out the ground plane using Blender: + +1. enable ortographic view (numpad 5), +2. look from the side (numpad 3), +3. enable X-Ray (Alt-z), +4. box select vertices, +5. manually fix the selection, +6. then scale z to 0 (s z 0) + +Link: [https://www.youtube.com/watch?v=TmKt9RFphf0](https://www.youtube.com/watch?v=TmKt9RFphf0) + +
+ +
+ diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md index 1136d36..c1a72c7 100644 --- a/docs/tutorials/index.md +++ b/docs/tutorials/index.md @@ -1,23 +1,5 @@ -
- Mesh Navigation -
-

Tutorials of Mesh Navigation

-
- Code -   •   - Mesh Navigation -   •   - Mesh Tools -   •   - Move Base Flex -   •   - Videos - -
-
- - -# Documentation + +# Tutorials This documentation is under construction. It will contain both explanations for more applied users and for developers. @@ -25,19 +7,32 @@ This documentation is under construction. It will contain both explanations for explanations on how to start things (in more detail than the README.md) Link existing docs of mesh_navigation. e.g. wiki-page where all the implemented layers are explained. -Installation: +Overview: -Guides: 1. [Mesh Mapping](/tutorials/mesh_mapping.md) 2. [Cost Layers Generation](/tutorials/cost_layer_generation.md) 3. [Localization](/tutorials/localization.md) 4. [Mesh Navigation](/tutorials/mesh_navigation.md) 5. [Deliberation](/tutorials/deliberation.md) + +Mesh Generation: + +- TODO + +Mesh Editing: + +- [Flatten Floor](/tutorials/editing/flatten_surface.md) +- [Align Mesh to Ground](/tutorials/editing/align_mesh_to_ground.md) + + + ## Mesh Navigation for Developer instructions how to change certain things for developing new things. Explain concepts in more detail. -TODO +Writing Plugins: +- [Own Costmap](/tutorials/plugins/own_cost_layer.md) +- TODO diff --git a/docs/tutorials/own_cost_layer.md b/docs/tutorials/plugins/own_cost_layer.md similarity index 100% rename from docs/tutorials/own_cost_layer.md rename to docs/tutorials/plugins/own_cost_layer.md diff --git a/docs/tutorials/worlds/real_world.md b/docs/tutorials/worlds/real_world.md new file mode 100644 index 0000000..985b26f --- /dev/null +++ b/docs/tutorials/worlds/real_world.md @@ -0,0 +1,3 @@ +# Real World Worlds + +TODO \ No newline at end of file diff --git a/docs/tutorials/worlds/simple.md b/docs/tutorials/worlds/simple.md new file mode 100644 index 0000000..ac556a4 --- /dev/null +++ b/docs/tutorials/worlds/simple.md @@ -0,0 +1,7 @@ +# Simple Worlds + +Locations: +- Maps: `mesh_navigation_tutorials/maps` +- Worlds: `mesh_navigation_tutorials_sim/worlds` + + diff --git a/mkdocs.yml b/mkdocs.yml index 4a3505c..4cd96bd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -6,16 +6,19 @@ repo_url: https://github.com/naturerobots/mesh_navigation docs_dir: docs theme: - name: material - features: - - navigation.instant - - navigation.tabs - - navigation.sections - - navigation.footer - logo: resources/img/mesh_nav_logo.png - favicon: resources/img/mesh_nav_icon.png - palette: - primary: blue + name: material + features: + - navigation.instant + - navigation.tabs + - navigation.sections + - navigation.footer + logo: media/mesh_nav_icon_bg_white.png + favicon: media/mesh_nav_icon.png + palette: + primary: blue + +extra_css: + - static/stylesheets/style.css markdown_extensions: - pymdownx.highlight @@ -34,17 +37,31 @@ nav: - Overview: index.md - Installation: installation.md - Theory: + - Overview: theory/index.md - Why Meshes: theory/mesh_maps.md - Tutorials: - Overview: tutorials/index.md - - Mesh Mapping: tutorials/mesh_mapping.md - - Cost Layers Generation: tutorials/cost_layer_generation.md - - Localization: tutorials/localization.md - - Mesh Navigation: tutorials/mesh_navigation.md - - Deliberation: tutorials/deliberation.md + - General: + - Overview: tutorials/index.md + - Mesh Mapping: tutorials/mesh_mapping.md + - Cost Layers Generation: tutorials/cost_layer_generation.md + - Localization: tutorials/localization.md + - Mesh Navigation: tutorials/mesh_navigation.md + - Deliberation: tutorials/deliberation.md + - Worlds: + - Simple: tutorials/worlds/simple.md + - Real-World: tutorials/worlds/real_world.md + - Mesh Editing: + - Flatten Surfaces: tutorials/editing/flatten_surface.md + - Align Mesh to Ground: tutorials/editing/align_mesh_to_ground.md + - Writing Plugins: + - Own Cost Layer: tutorials/plugins/own_cost_layer.md - Library: + - Overview: library/index.md - Cost Layer Plugin: library/cost_layer_plugin.md - Planner Plugin: library/planner_plugin.md - Controller Plugin: library/controller_plugin.md + - Guides: + - Overview: guides/index.md