|
1 | | -N-Dimensional Fast Marching Method V1.0 |
| 1 | +N-Dimensional Fast Methods Library v0.7 |
2 | 2 |
|
3 | 3 | **Authors:** |
4 | 4 | - [Javier V. Gomez](http://jvgomez.github.io) javvgomez _at_ gmail.com |
5 | 5 | - Jose Pardeiro jose.pardeiro _at_ gmail.com |
6 | 6 | - Pablo Gely |
7 | 7 |
|
8 | 8 | ## ALGORITHMS |
| 9 | +All the theory and algorithms implemented in this library can be found in my [PhD thesis](doc/files/phd_thesis.pdf). In fact, all the benchmarking data in chapter 4 has been produced with this library and it is stored on the `experiments` branch. |
| 10 | + |
| 11 | + |
9 | 12 | **Fast Marching Methods:** |
10 | | -- [FMM](http://jvgomez.github.io/fastmarching/classFMM.html): Fast Marching Method with Binary Queue and Fibonacci Queue (binary by default). |
11 | | -- [FMM*](http://jvgomez.github.io/fastmarching/classFMMStar.html): FMM with CostToGo heuristics. |
12 | | -- [SFMM](http://jvgomez.github.io/fastmarching/classSFMM.html): Simplified Fast Marhching Method. |
13 | | -- [SFMM*](http://jvgomez.github.io/fastmarching/classSFMMStar.html): SFMM with CostToGo heuristics.. |
| 13 | +- [FMM](http://jvgomez.github.io/fast_methods/classFMM.html): Fast Marching Method with Binary Queue and Fibonacci Queue (binary by default). |
| 14 | +- [FMM*](http://jvgomez.github.io/fast_methods/classFMMStar.html): FMM with CostToGo heuristics. |
| 15 | +- [SFMM](http://jvgomez.github.io/fast_methods/classSFMM.html): Simplified Fast Marhching Method. |
| 16 | +- [SFMM*](http://jvgomez.github.io/fast_methods/classSFMMStar.html): SFMM with CostToGo heuristics.. |
14 | 17 |
|
15 | 18 | **O(n) Fast Marching Methods:** |
16 | | -- [GMM](http://jvgomez.github.io/fastmarching/classGMM.html): Group Marching Method. |
17 | | -- [UFMM](http://jvgomez.github.io/fastmarching/classUFMM.html): Untidy Fast Marching Method. |
18 | | -- [FIM](http://jvgomez.github.io/fastmarching/classFIM.html): Fast Iterative Method. |
| 19 | +- [GMM](http://jvgomez.github.io/fast_methods/classGMM.html): Group Marching Method. |
| 20 | +- [UFMM](http://jvgomez.github.io/fast_methods/classUFMM.html): Untidy Fast Marching Method. |
| 21 | +- [FIM](http://jvgomez.github.io/fast_methods/classFIM.html): Fast Iterative Method. |
19 | 22 |
|
20 | 23 | **Fast Sweeping Methods:** |
21 | | -- [FSM](http://jvgomez.github.io/fastmarching/classFSM.html): Fast Sweeping Method. |
22 | | -- [LSM](http://jvgomez.github.io/fastmarching/classLSM.html): Lock Sweeping Method. |
23 | | - |
24 | | -**Other methods:** |
25 | | -- [DDQM](http://jvgomez.github.io/fastmarching/classDDQM.html): Dynamic Double Queue Method. |
| 24 | +- [FSM](http://jvgomez.github.io/fast_methods/classFSM.html): Fast Sweeping Method. |
| 25 | +- [LSM](http://jvgomez.github.io/fast_methods/classLSM.html): Lock Sweeping Method. |
| 26 | +- [DDQM](http://jvgomez.github.io/fast_methods/classDDQM.html): Dynamic Double Queue Method. |
26 | 27 |
|
27 | 28 | **Fast Marching Square motion planning algorithms:** |
28 | | -- [FM2](http://jvgomez.github.io/fastmarching/classFM2.html): Fast Marching Square Method. |
29 | | -- [FM2*](http://jvgomez.github.io/fastmarching/classFM2Star.html): Fast Marching Square Star FM2 with CostToGo heuristics. |
| 29 | +- [FM2](http://jvgomez.github.io/fast_methods/classFM2.html): Fast Marching Square Method. |
| 30 | +- [FM2*](http://jvgomez.github.io/fast_methods/classFM2Star.html): Fast Marching Square Star FM2 with CostToGo heuristics. |
30 | 31 |
|
31 | 32 | **ROS** |
32 | 33 |
|
33 | | -ROS nodes using this code (tested in the TurtleBot) are provided in a separate repo: |
34 | | -https://github.com/jpardeiro/fastmarching_node |
| 34 | +ROS nodes using this code (tested in the TurtleBot) are provided in a [separate repo](https://github.com/jpardeiro/fastmarching_node) |
| 35 | + |
35 | 36 |
|
36 | 37 | ## DISCLAIMER and IMPORTANT NOTES |
37 | 38 |
|
38 | 39 | - The code is not deeply tested. I've just tested it works for the cases I need. If you find any problem, have any question (or whatever), please write to: javvgomez _at_ gmail.com |
39 | 40 |
|
40 | | -- The compilation time is highly increased due to CImg library. Please, omit it when possible. |
| 41 | +- The compilation time is highly increased due to CImg library. Please, omit it when possible as it is used only for visualization purposes. |
41 | 42 |
|
42 | | -- License GNU/GPL V3: http://www.gnu.org/copyleft/gpl.html |
| 43 | +- License [GNU/GPL V3](http://www.gnu.org/copyleft/gpl.html) |
43 | 44 |
|
44 | 45 | - This is a source code intended for my research. Although I want it to be useful for other people it is not intended to act as a library (there are many many points to improve). However, if you show interest or have feature request do not hesitate to contact me and I will try my best to improve the code for whoever needs it. I am also open to contributions and to create a formal library if necessary. |
45 | 46 |
|
46 | 47 |
|
47 | 48 | ## Documentation |
48 | 49 |
|
49 | | -- [API Reference](jvgomez.github.io/fastmarching/) |
50 | | -- This README is important as well. |
51 | | - |
52 | | - |
53 | | -To build latest the documentation: |
54 | | - |
55 | | - $ cd doc |
56 | | - $ doxygen |
57 | | - |
58 | | -Go into the HTML folder and open index.html |
59 | | - |
60 | | - |
61 | | -## Dependencies: |
62 | | - |
63 | | -This code uses C\++11 so a compiler g++ 4.8 or equivalent is required. With GCC 4.7 some runtime problems can occur. |
64 | | - |
65 | | -Additional dependencies: Boost, imagemafick and CImg. |
| 50 | +- [API Reference](jvgomez.github.io/fast_methods/) |
66 | 51 |
|
67 | | - $ sudo apt-get install imagemagick libboost-all-dev cimg-dev |
68 | 52 |
|
69 | 53 | ## Building the code |
70 | | -To build the code: |
71 | | - |
72 | | - $ cd build |
73 | | - $ cmake .. -DCMAKE_BUILD_TYPE=Release (Release, RelWithDebInf or Debug, Release by default) |
74 | | - $ make -j8 (or the number of cores you want to use during compilation) |
75 | | - $ sudo make install (only if you want to install the library) |
76 | | - $ ./fmm -map1 ../data/testimg.png -map2 ../data/map.png -vel ../data/velocities.png |
77 | | - |
78 | | -This main shows most of the utilities implemented so far. |
79 | | - |
80 | | -To uninstall: |
81 | | - |
82 | | - $ sudo make uninstall |
83 | | - |
84 | | - |
85 | | -## Folder structure |
86 | | - |
87 | | -Although there are a lot of folders, they are quite simple. It is organized this way because I'm focusing on an upload to Biicode (www.biicode.com) |
88 | | - |
89 | | -+ build: where the code should be compiled. |
90 | | -+ console: the console class. |
91 | | -+ data: additional files and maps to test. |
92 | | - + alpha: contains code the be refactorized and included in the library in the future. |
93 | | -+ doc: doxygen documentation. |
94 | | -+ examples: easy examples to understand how to use the code. |
95 | | -+ fm2: Fast Marching Square (FM2) algorithms. |
96 | | -+ fmm: Fast Marching Algorithms. |
97 | | - + fmdata: classes related to the data types of the Fast Marching Method and other algorithms. |
98 | | -+ gradientdescent: under development. |
99 | | -+ io: input/output helper classes. |
100 | | -+ ndgridmap: main container. |
101 | | -+ scripts: matlab scripts to parse outputs and automatic benchmarking bash script. |
102 | | -+ thirdparty: others' software included. |
103 | | - |
104 | | -### Installation |
105 | | -Default installation folder is` /usr/local` for Linux distributions (or equivalent on other OS). Libraries are installed in subfolder `lib`, together with CMake modules. All the includes are installed under `include` subfolder. Additionally, in the `share` subfolder the helper scripts and some samples of benchmark configurations files are installed. Finally, the benchmark binary is installed in `bin`. |
106 | | - |
107 | | -In order to change the default installation folder you can do: |
108 | | - |
109 | | - $ cmake ../.. -DCMAKE_INSTALL_PREFIX=<your folder> |
| 54 | +Check the [building section](http://jvgomez.github.io/fast_methods/md_markdown_building.html) of the documentation. |
110 | 55 |
|
111 | 56 |
|
112 | | -In this case, you will have to adapt your environment variables so that the libraries and CMake modules are found. |
| 57 | +## Design and folder structure |
| 58 | +Check the [design section](http://jvgomez.github.io/fast_methods/md_markdown_design.html) of the documentation. |
113 | 59 |
|
114 | 60 |
|
115 | 61 | ## KNOWN ISSUES |
116 | 62 |
|
117 | 63 | - Gradient Descent for FM2* could fail if very narrow passages are in the way of the path. |
118 | | -- It seems that UFMM can fail in maps with random (or similar) velocity changes. |
119 | | - |
120 | | -## TODO |
121 | | - |
122 | | -At the top of each file there are specific TODO comments. Here are some others. |
123 | | - |
124 | | -### Code TODOs |
125 | | -- Remove relative file dependencies (#include "../../fmm", filename = "../../data", CMakeLists.txt deps, etc). |
126 | | -- MapLoader, GridWriter... get a naming convention. MapReader or GridSaver for instance. |
127 | | -- printRunInfo implementation missing for most of the solvers. |
128 | | -- Unify GridWriter and GridPlotter functions parameter order: (grid, name) |
129 | | -- Fix Doxygen warnings. |
130 | | -- Convert all scripts to python (or similar) so that they keep completely open source. |
131 | | -- Reimplement FM2Dir from scratch. Currently in data/alpha folder. |
132 | | -- Substitute arg parsing with boost_options. |
133 | | -- Implement a grid copy constructor and assignment operator, etc. |
134 | | -- Most of the unsigned int should be replaced by size_t to be type-correct. |
135 | | -- Use smart pointers (specially for grid). |
136 | | -- Create a testing framework. |
137 | | -- BenchmarkCFG::configure, parse ctorParams_ with a variadic templated function, something like:` parseParams<int, bool>(param1, param2)`, `parseParams<string,double,bool>(p1,p2,p3)`. |
138 | | -- GridPlotter code can be refactorized so that the same code is not repeated many times. |
139 | | -- Review template template parameters, perhaps it can be simplified (specially for benchmark): `template <grid_t>` to `template <nDGridMap <cell_t, ndims>>` so we can use cell_t without doing `template <grid_t, cell_t>` (redundant). |
140 | | -- Unify names: one thing is Fast Methods, other Fast Marching, etc. |
141 | | - |
142 | | -### Algorithmic TODOs |
143 | | -- Improve untidy queue implementation with hash maps (specially remove element in increase_priority()). |
144 | | -- Mix SFMM and UFMM (researchy TODO). |
145 | | -- Improve the way FM2 and its versions deal with the grid when running multiple times on the same grid. Concretely, avoid recomputation of velocities map. |
146 | | -- For most methods, neighbors for same cell are computed many times. Store them like FMT to save some computation time. |
147 | | - |
148 | | -### Documentation TODOs |
149 | | -- Review and update nDGridMap.pdf |
150 | | -- Link thesis and papers. |
| 64 | +- It seems that UFMM can fail in maps with random (or similar) velocity changes. |
0 commit comments