diff --git a/README.md b/README.md index 6b9ea54..854307b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# rmagine +# Rmagine These docs are built with [MkDocs](https://mkdocs.org) and published to [uos.github.io/rmagine_docs](https://uos.github.io/rmagine_docs) diff --git a/docs/extra/data.md b/docs/extra/data.md index 3c55529..0436b60 100644 --- a/docs/extra/data.md +++ b/docs/extra/data.md @@ -5,7 +5,7 @@ For development and testing we include some meshes inside our repository in the ## sphere.ply -![sphere.ply](../resources/img/rmagine_dat_sphere.png) +![sphere.ply](/resources/img/rmagine_dat_sphere.png) ```bash user@pc:~/rmagine/build$ ./bin/rmagine_map_info ../dat/sphere.ply @@ -41,7 +41,7 @@ Scene Graph: ## triangle.ply -![triangle.ply](../resources/img/rmagine_dat_triangle.png) +![triangle.ply](/resources/img/rmagine_dat_triangle.png) ```bash user@pc:~/rmagine/build$ ./bin/rmagine_map_info ../dat/triangle.ply @@ -77,7 +77,7 @@ Scene Graph: ## box_rot_trans_scaled.dae -![box_rot_trans_scaled.dae](../resources/img/rmagine_dat_box_rot_trans_scaled.png) +![box_rot_trans_scaled.dae](/resources/img/rmagine_dat_box_rot_trans_scaled.png) ```bash user@pc:~/rmagine/build$ ./bin/rmagine_map_info ../dat/box_rot_trans_scaled.dae @@ -146,7 +146,7 @@ Scene Graph: ## two_cubes.dae -![two_cubes.dae](../resources/img/rmagine_dat_two_cubes.png) +![two_cubes.dae](/resources/img/rmagine_dat_two_cubes.png) ```bash user@pc:~/rmagine/build$ ./bin/rmagine_map_info ../dat/two_cubes.dae @@ -239,7 +239,7 @@ Scene Graph: ## many_objects.dae -![many_objects.dae](../resources/img/rmagine_dat_many_objects.png) +![many_objects.dae](/resources/img/rmagine_dat_many_objects.png) ```bash user@pc:~/rmagine/build$ ./bin/rmagine_map_info ../dat/many_objects.dae diff --git a/docs/extra/tools.md b/docs/extra/tools.md index 6a87c12..c2578d5 100644 --- a/docs/extra/tools.md +++ b/docs/extra/tools.md @@ -153,7 +153,7 @@ Usage: ./bin/rmagine_synthetic mesh_type mesh_file | | | |:----:|:----:| -| ![plane](../resources/img/rmagine_synthetic_plane.png) | ![cube](../resources/img/rmagine_synthetic_cube.png) | +| ![plane](/resources/img/rmagine_synthetic_plane.png) | ![cube](/resources/img/rmagine_synthetic_cube.png) | | `rmagine_synthetic plane plane.ply` | `rmagine_synthetic cube cube.ply` | -| ![sphere](../resources/img/rmagine_synthetic_sphere.png) | ![cylinder](../resources/img/rmagine_synthetic_cylinder.png) | +| ![sphere](/resources/img/rmagine_synthetic_sphere.png) | ![cylinder](/resources/img/rmagine_synthetic_cylinder.png) | | `rmagine_synthetic sphere sphere.ply` | `rmagine_synthetic cylinder cylinder.ply` | \ No newline at end of file diff --git a/docs/getting_started/installation.md b/docs/getting_started/installation.md index 62cdec4..957e1c7 100644 --- a/docs/getting_started/installation.md +++ b/docs/getting_started/installation.md @@ -14,7 +14,7 @@ user@pc:~$ sudo apt install libassimp-dev ## Backbones -![rmagine_backends](../resources/img/rmagine_backends.png) +![rmagine_backends](/resources/img/rmagine_backends.png) Rmagine provides an interface to integrate ray tracing libraries, we call backbones. All of these backbones are optional. So far we integrated Intel Embree and NVIDIA OptiX. @@ -30,8 +30,7 @@ user@pc:~/embree/build$ make -j`nproc` user@pc:~/embree/build$ sudo make install ``` - - +For older Embree versions we refer to [this](/extra/embree3). ### OptiX Backbone (optional) diff --git a/docs/getting_started/maps.md b/docs/getting_started/maps.md index e392b6b..e4872ff 100644 --- a/docs/getting_started/maps.md +++ b/docs/getting_started/maps.md @@ -1,6 +1,6 @@ # Maps -Triangle Meshes can be stored in various file formats. Rmagine utilizes the [Open Asset Import Library (assimp)](https://github.com/assimp/assimp) in order to support a wide range of well known file formats. After loading the raw scene graph buffers with Assimp it is converted into Rmagines internal scene graph structure. Dependend on the computation backend `Embree` or `OptiX` the scene graph is prepared for fast ray traversals by building the required acceleration structures. +Triangle Meshes can be stored in various file formats. Rmagine utilizes the [Open Asset Import Library (assimp)](https://github.com/assimp/assimp) in order to support a wide range of well known file formats. After loading the raw scene graph buffers with Assimp it is converted into Rmagines internal scene graph structure. Dependent on the computation backend `Embree` or `OptiX` the scene graph is prepared for fast ray traversals by building the required acceleration structures. ## Embree Map @@ -34,5 +34,5 @@ int main(int argc, char** argv) ## Properties -After loading, the map consists of a complete scene graph. It then usually passed to a simulator (see next gettingstarted-sections). -The advanced [Map](library/Map)-section describes how to modify or create the internal maps from scratch. \ No newline at end of file +After loading, the map consists of a complete scene graph. It then usually passed to a simulator (see next "Getting Started"-sections). +The advanced [Map](library/map)-section describes how to modify or create the internal maps from scratch. \ No newline at end of file diff --git a/docs/getting_started/noise.md b/docs/getting_started/noise.md index 70f1bf0..9a4b794 100644 --- a/docs/getting_started/noise.md +++ b/docs/getting_started/noise.md @@ -1,6 +1,6 @@ Currently noise models are implemented as postprocessing steps that modify the simulated ranges. Any of the following noise models can be chained to generate complex combined noise models. -The Noise models are implented equally both on GPU and CPU. -Thus the developer can manage to apply noise to the data without downloading or uploading the data from GPU to CPU or vice versa. +The Noise models are implemented equally both for GPU and CPU. +Thus the developer can apply noise to the data without downloading or uploading the data from GPU to CPU or vice versa. 1. Gaussian Noise @@ -13,7 +13,7 @@ Apply gaussian noise $N(\mu, \sigma)$ to simulated ranges. | `stddev` | standard deviation $\sigma$ of normal distributed noise | -![rmagine_noise_gaussian](../resources/img/rmagine_noise_gaussian.png) +![rmagine_noise_gaussian](/resources/img/rmagine_noise_gaussian.png) Example CPU: @@ -74,7 +74,7 @@ Apply gaussian noise $N(\mu, \sigma_r)$ to simulated ranges. Here, the standard | `stddev` | standard deviation $\sigma$ of normal distributed noise | | `range_exp` | range exponent $c$ to compute range based stddev: $ \sigma_r = \sigma \cdot r^{c} $ | -![rmagine_noise_rel_gaussian](../resources/img/rmagine_noise_rel_gaussian.png) +![rmagine_noise_rel_gaussian](/resources/img/rmagine_noise_rel_gaussian.png) Example CPU: @@ -137,7 +137,7 @@ Parameters: | `return_prob` | Probability of a ray hitting dust returns to sender depending on particle distance | -![rmagine_noise_dust](../resources/img/rmagine_noise_dust.png) +![rmagine_noise_dust](/resources/img/rmagine_noise_dust.png) Example CPU: diff --git a/docs/getting_started/overview.md b/docs/getting_started/overview.md index 990adbf..a891e22 100644 --- a/docs/getting_started/overview.md +++ b/docs/getting_started/overview.md @@ -20,7 +20,7 @@ In addition to the wiki, the following papers wrap up the library conceptually. ```latex @inproceedings{mock2023rmagine, - title={Rmagine: 3D Range Sensor Simulation in Polygonal Maps via Ray Tracing for Embedded Hardware on Mobile Robots}, + title={{Rmagine: 3D Range Sensor Simulation in Polygonal Maps via Ray Tracing for Embedded Hardware on Mobile Robots}}, author={Mock, Alexander and Wiemann, Thomas and Hertzberg, Joachim}, booktitle={IEEE International Conference on Robotics and Automation (ICRA)}, year={2023} diff --git a/docs/getting_started/problem_modelling.md b/docs/getting_started/problem_modelling.md index 3067136..aee68e2 100644 --- a/docs/getting_started/problem_modelling.md +++ b/docs/getting_started/problem_modelling.md @@ -2,9 +2,9 @@ The general computing flow is as follows. -![rmagine_example](../resources/img/rmagine.drawio.png) +![rmagine_example](/resources/img/rmagine.drawio.png) -Tsb is the transform from sensor to base frame. Or spoken: The sensor pose relative to the robot base. The map can be either a pointer to an `EmbreeMap` or `OptixMap`. The Prefix of the `Simulator` is either `Embree` for CPU computation or `Optix` for GPU computation. The suffix of the Simulator is dependend on which sensor model you want to simulate. A few examples: +Tsb is the transform from sensor to base frame. Or spoken: The sensor pose relative to the robot base. The map can be either a pointer to an `EmbreeMap` or `OptixMap`. The Prefix of the `Simulator` is either `Embree` for CPU computation or `Optix` for GPU computation. The suffix of the Simulator is dependent on which sensor model you want to simulate. A few examples: - `SphereSimulatorEmbree` - Simulate a velodyne on CPU - `PinholeSimulatorOptix`- Simulate a depth camera on GPU @@ -14,7 +14,7 @@ Tsb is the transform from sensor to base frame. Or spoken: The sensor pose relat Now we want to construct the following pipeline. -![rmagine_example_1](../resources/img/rmagine_example_1.drawio.png) +![rmagine_example_1](/resources/img/rmagine_example_1.drawio.png) ```cpp @@ -75,7 +75,7 @@ int main(int argc, char** argv) Now we want to construct the following pipeline. -![rmagine_example_1](../resources/img/rmagine_example_2.drawio.png) +![rmagine_example_1](/resources/img/rmagine_example_2.drawio.png) The green cells are memory objects on GPU as you see in the following code snippet. @@ -146,7 +146,7 @@ int main(int argc, char** argv) Now we want to construct the following pipeline. -![rmagine_example_1](../resources/img/rmagine_example_3.drawio.png) +![rmagine_example_1](/resources/img/rmagine_example_3.drawio.png) ```cpp diff --git a/docs/getting_started/sensors.md b/docs/getting_started/sensors.md index 7c46114..d8dd8eb 100644 --- a/docs/getting_started/sensors.md +++ b/docs/getting_started/sensors.md @@ -3,8 +3,8 @@ Rmagine supports several configurations of commonly used range sensors as Spherical, Pinhole or even fully customizable O1Dn and OnDn models. The following image shows how the results could look like using these different models. -![sensor_models_3d](../resources/img/sensor_models_3d.png) -![sensor_models_ortho](../resources/img/sensor_models_ortho.png) +![sensor_models_3d](/resources/img/sensor_models_3d.png) +![sensor_models_ortho](/resources/img/sensor_models_ortho.png) The next instructions show how to initialize each model individually. diff --git a/docs/getting_started/simulation.md b/docs/getting_started/simulation.md index a65332e..ca0bfec 100644 --- a/docs/getting_started/simulation.md +++ b/docs/getting_started/simulation.md @@ -1,6 +1,6 @@ # Simulation -![simulation_attributes](../resources/img/simulation_attributes.png) +![simulation_attributes](/resources/img/simulation_attributes.png) ## Requirements diff --git a/docs/index.md b/docs/index.md index 3aaed8c..b3e30ad 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,12 +1,13 @@ ![rmagine_teaser_image](resources/img/sensor_models_3d.png) -# Rmagine +# Rmagine -This library called Rmagine allows a robot to simulate sensor data for arbitrary range sensors directly on board via raytracing. Since robots typically only have limited computational resources, the Rmagine aims at being flexible and lightweight, while scaling well even to large environment maps. It runs on several platforms like Laptops or embedded computing boards like Nvidia Jetson by putting an unified API over the specific proprietary libraries provided by the hardware manufacturers. This work is designed to support the future development of robotic applications depending on simulation of range data that could previously not be computed in reasonable time on mobile systems. +Rmagine allows a robot to simulate sensor data for arbitrary range sensors directly on board via raytracing. Since robots typically only have limited computational resources, Rmagine aims at being flexible and lightweight, while scaling well even to large environment maps. It runs on several platforms like Laptops or embedded computing boards like Nvidia Jetson by putting an unified API over specific proprietary libraries provided by the hardware manufacturers. This work is designed to support the future development of robotic applications depending on simulation of range data that could previously not be computed in reasonable time on mobile systems. ## Table of Contents **Getting Started** + - [Overview](getting_started/overview) - [Installation](getting_started/installation) - [Integration](getting_started/integration) @@ -15,6 +16,18 @@ This library called Rmagine allows a robot to simulate sensor data for arbitrary - [Simulation](getting_started/simulation) - [Problem Modelling](getting_started/problem_modelling) - [Noise](getting_started/noise) -- [Tools](getting_started/tools) +**Library** + +- [Concepts](library/concepts) +- [Math](library/math) +- [Memory](library/memory) +- [Maps](library/maps) + +**Extra** + +- [Tools](extra/tools) +- [Data](extra/data) +- [News](extra/news) +- [Embree 3](extra/embree3) diff --git a/docs/library/concepts.md b/docs/library/concepts.md index 7f0a01c..1ef67a6 100644 --- a/docs/library/concepts.md +++ b/docs/library/concepts.md @@ -18,11 +18,11 @@ Rmagine has the following top-level structure of directories: Contains all math related types and functions. All math datatypes are completely CUDA compatible. See `rmagine/math/types.h` for all types. -See [Math](Library-Math) section for more details. +See [Math](/library/math) section for more details. ## Types -Fundamental types required for simulations, e.g. [sensor models](GettingStarted-Sensors). Depends on math types. +Fundamental types required for simulations, e.g. [sensor models](/getting_started/sensors). Depends on math types. ## Util @@ -73,7 +73,7 @@ int main(int argc, char* argv) # Map -All classes and functions that relate to map construction and map modifications. See [Getting Started - Maps](GettingStarted-Maps) for a introduction to map loading. Go to [Library - Maps](Library-Maps) for a more detailed descriptions of how to build Rmagine maps. +All classes and functions that relate to map construction and map modifications. See [Getting Started - Maps](/getting_started/maps) for a introduction to map loading. Go to [Library - Maps](/library/maps) for a more detailed descriptions of how to build Rmagine maps. # Simulation diff --git a/docs/resources/img/rmagine_icon.png b/docs/resources/img/rmagine_icon.png new file mode 100644 index 0000000..ac5160a Binary files /dev/null and b/docs/resources/img/rmagine_icon.png differ diff --git a/docs/resources/img/rmagine_logo.png b/docs/resources/img/rmagine_logo.png new file mode 100644 index 0000000..98fa018 Binary files /dev/null and b/docs/resources/img/rmagine_logo.png differ diff --git a/mkdocs.yml b/mkdocs.yml index 10e3ef6..e209b53 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -11,8 +11,8 @@ theme: - navigation.instant - navigation.tabs - navigation.sections - # logo: img/mbf_icon.png - # favicon: img/mbf_icon.png + logo: resources/img/rmagine_logo.png + favicon: resources/img/rmagine_icon.png palette: primary: cyan