Commit 46eea0fd authored by Federico Ciuffardi Alves's avatar Federico Ciuffardi Alves
Browse files

Update README.md

parent 2ba11684
......@@ -85,41 +85,41 @@ El proposito de esta libreria es obtener cada cierto tiempo, de forma incrementa
A continuacion se mostrara el flujo para lograr lo antes mencionado en el contexto del trabajo desarrollado.
1. El modulo central crea una instancia `gvdic` de `GVDIC` y el constructor de `GVDIC` hace lo siguiente:
_ 1. El modulo central crea una instancia `gvdic` de `GVDIC` y el constructor de `GVDIC` hace lo siguiente:
1.1. Crea una instancia `m` de `Map`.
_ _ 1.1. Crea una instancia `m` de `Map`.
1.2. Crea unas instancia `disMapIC` de `DisMapIC` para lo cual se le pasa la referencia al mapa `m`, los tipos de celda que se consideran ocupados y un conjunto en el cual se almacenaran fronteras libres.
_ _ 1.2. Crea unas instancia `disMapIC` de `DisMapIC` para lo cual se le pasa la referencia al mapa `m`, los tipos de celda que se consideran ocupados y un conjunto en el cual se almacenaran fronteras libres.
2. Desde el modulo central cuando se requiere hacer una nueva subasta se llama a la funcion `get_points_of_interest` `gvdic` con el `grid` que contiene la ultima informacion sobre el entorno como parametro, en la cual:
_ 2. Desde el modulo central cuando se requiere hacer una nueva subasta se llama a la funcion `get_points_of_interest` `gvdic` con el `grid` que contiene la ultima informacion sobre el entorno como parametro, en la cual:
2.1. se limpian las estructuras que guardan los cambios de una iteracion.
_ _ 2.1. se limpian las estructuras que guardan los cambios de una iteracion.
2.2. se actualiza el mapa `m` con la informacion contenida en el `grid`.
_ _ 2.2. se actualiza el mapa `m` con la informacion contenida en el `grid`.
2.3. se clasifica a las celdas cuyo estado difiere con respecto al `grid` con el que se llamo `get_points_of_interest` la ultima vez. Las clasificaciones son conjuntos, por ejemplo, las celadas cuyo estado cambio de obstruido a libre llamado `obs_to_free`.
_ _ 2.3. se clasifica a las celdas cuyo estado difiere con respecto al `grid` con el que se llamo `get_points_of_interest` la ultima vez. Las clasificaciones son conjuntos, por ejemplo, las celadas cuyo estado cambio de obstruido a libre llamado `obs_to_free`.
2.4. se actualizan las fronteras
_ _ 2.4. se actualizan las fronteras
2.5. se actualiza el mapa de distancias a los obstaculos. Para esto se usan ideas inspiradas en [1] utilizando multi-obstaculos en lugar de uno solo.
_ _ 2.5. se actualiza el mapa de distancias a los obstaculos. Para esto se usan ideas inspiradas en **[1]** utilizando multi-obstaculos en lugar de uno solo.
2.5.1 Al calcular el mapa de distancia a obstaculos se determina que celdas pueden pasar (`voro_to_true`) o dejar (`voro_to_false`) de formar parte del `GVD`
_ _ _ 2.5.1 Al calcular el mapa de distancia a obstaculos se determina que celdas pueden pasar (`voro_to_true`) o dejar (`voro_to_false`) de formar parte del `GVD`
2.6. se actualiza el `GVD`.
_ 2.6. se actualiza el `GVD`.
2.6.1 A partir de los conjuntos `voro_to_true` y `voro_to_false` se dermina con algoritomo de erosion o "brush fire" [2] cuales celdas realmente pasan a ser o dejan de ser partes `GVD`. Una vez determinados esto, se insertan y remueven los nodos en el `GVD` (que es un `collapsedGraph`) segun corresponda.
_ _ _ 2.6.1 A partir de los conjuntos `voro_to_true` y `voro_to_false` se dermina con algoritomo de erosion o "brush fire" **[2]** cuales celdas realmente pasan a ser o dejan de ser partes `GVD`. Una vez determinados esto, se insertan y remueven los nodos en el `GVD` (que es un `collapsedGraph`) segun corresponda.
2.6.2. Al final de la actualizacion del `GVD` se computan las celdas que pasan a ser (`possible_crit_to_true`) y las que dejan de ser (`possible_crit_to_false`) posibles criticos. Una celda es un posible critico si cuple todas las condiciones para ser criticos (explicadas en [3]) con excepcion de la cercania de estas celdas a lo desconocido, ya que para mantener la incrementalidad la cercania a lo desconocido sera calculada a partir de un mapa de distancias con los posibles criticos como fuentes.
_ _ _ 2.6.2. Al final de la actualizacion del `GVD` se computan las celdas que pasan a ser (`possible_crit_to_true`) y las que dejan de ser (`possible_crit_to_false`) posibles criticos. Una celda es un posible critico si cuple todas las condiciones para ser criticos (explicadas en **[3]**) con excepcion de la cercania de estas celdas a lo desconocido, ya que para mantener la incrementalidad la cercania a lo desconocido sera calculada a partir de un mapa de distancias con los posibles criticos como fuentes.
2.7. se actualiza el mapa de distancias a los posibles criticos (a traves de la instancia de `DisMapIC` creada en *1.2*)
_ _ 2.7. se actualiza el mapa de distancias a los posibles criticos (a traves de la instancia de `DisMapIC` creada en *1.2*)
2.7.1 Como se menciono en la descripcion del componente `DisMapIC` intenta generalizar la construccion de mapas de distancia de forma incremental. Su codigo es similar al usado para la construccion del mapa de distacia y ademas contiene codigo especifico utilizado para determinar los puntos criticos.
TODO(explicar como y que es bien lo que se hace aca con las fornteras y los datos que se van a necesitar para deteminar bien los criticos )
_ _ _ 2.7.1 Como se menciono en la descripcion del componente `DisMapIC` intenta generalizar la construccion de mapas de distancia de forma incremental. Su codigo es similar al usado para la construccion del mapa de distacia y ademas contiene codigo especifico utilizado para determinar los puntos criticos.
**TODO**(explicar como y que es bien lo que se hace aca con las fornteras y los datos que se van a necesitar para deteminar bien los criticos )
2.8. se acutalizan los criticos
TODO(explicar como se hace esto )
_ _ 2.8. se acutalizan los criticos
**TODO**(explicar como se hace esto )
2.9. se adapta la salida para devolver las estructuras que espera la central. Esto porque la central espera lo que devolvia GVDC (implentacion anterior) y para evitar problemas y probar rapidamente lo implementado hicimos una funcion (`generate output`) que tranforma lo generado por GVDIC y lo devuelve en el formato de lo generado por GVDC, que es lo que espera la centra. Esto deberia modificarse de forma que la central manipule directamente lo generado por GVDIC. Las problematicas de esto es que al utilizarse el grafo colapsado no se puede guardar la informacion solo en los nodods del grafo de boost (lo que se hacia antes) si no que habria que guardarlo en otra estructura mas relacionado con el `full_graph`. Tambien habria que ver como asignar los segmentos al grafo de forma incremental (detectar cuando un nodo cambia de segmento cuando se hace el mapa de distancia a los posibles criticos.
_ _ 2.9. se adapta la salida para devolver las estructuras que espera la central. Esto porque la central espera lo que devolvia GVDC (implentacion anterior) y para evitar problemas y probar rapidamente lo implementado hicimos una funcion (`generate output`) que tranforma lo generado por GVDIC y lo devuelve en el formato de lo generado por GVDC, que es lo que espera la centra. Esto deberia modificarse de forma que la central manipule directamente lo generado por GVDIC. Las problematicas de esto es que al utilizarse el grafo colapsado no se puede guardar la informacion solo en los nodods del grafo de boost (lo que se hacia antes) si no que habria que guardarlo en otra estructura mas relacionado con el `full_graph`. Tambien habria que ver como asignar los segmentos al grafo de forma incremental (detectar cuando un nodo cambia de segmento cuando se hace el mapa de distancia a los posibles criticos.
# Bugs experimentados
* Hay casos en los cuales el GVD queda disconexo. Deberia ser siempre conexo.
......@@ -133,7 +133,9 @@ Tenemos una convencion para algunas colecciones que es nombralas como `priopieda
fronteras libres: fronteras que a su ves no se encuentran obstaculizadas, son los posibles objetivos de exploracion.
# Referencias
[1] Lau, B., Sprunk, C. and Burgard, W., 2013. Efficient grid-based spatial representations for robot navigation in dynamic environments. Robotics and Autonomous Systems, 61(10), pp.1116-1130.
[2] Zhang, T.Y. and Suen, C.Y., 1984. A fast parallel algorithm for thinning digital patterns. Communications of the ACM, 27(3), pp.236-239.
[3] Wurm, K.M., Stachniss, C. and Burgard, W., 2008, September. Coordinated multi-robot exploration using a segmentation of the environment. In 2008 IEEE/RSJ International Conference on Intelligent Robots and Systems (pp. 1160-1165). IEEE.
**[1]** Lau, B., Sprunk, C. and Burgard, W., 2013. Efficient grid-based spatial representations for robot navigation in dynamic environments. Robotics and Autonomous Systems, 61(10), pp.1116-1130.
**[2]** Zhang, T.Y. and Suen, C.Y., 1984. A fast parallel algorithm for thinning digital patterns. Communications of the ACM, 27(3), pp.236-239.
**[3]** Wurm, K.M., Stachniss, C. and Burgard, W., 2008, September. Coordinated multi-robot exploration using a segmentation of the environment. In 2008 IEEE/RSJ International Conference on Intelligent Robots and Systems (pp. 1160-1165). IEEE.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment