Skip to content

Commit

Permalink
Correccion
Browse files Browse the repository at this point in the history
  • Loading branch information
Adrimapo committed Jan 25, 2024
1 parent fb50661 commit 985d5f3
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 41 deletions.
54 changes: 18 additions & 36 deletions docs/_posts/2023-12-28-Semana-9.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,69 +5,51 @@ categories:
tags:
- ROS2
- Aprendizaje automático

---


## Índice
1. [Navegación autónoma de un drone para localizar un transmisor de radiofrecuencia](#navegación-autónoma-de-un-drone-para-localizar-un-transmisor-de-radiofrecuencia)
1. [Navegación autónoma de un dron para localizar un transmisor de radiofrecuencia](#navegación-autónoma-de-un-dron-para-localizar-un-transmisor-de-radiofrecuencia)
1.1 [ANAIV: Algoritmos de navegación autónoma basados en vecindad](#anaiv-algoritmos-de-navegación-autónoma-basados-en-vecindad)
1.2 [Navegación autónoma por aprendizaje automático](#navegación-autónoma-por-aprendizaje-automático)

2. [A Reduction of Imitation Learning and Structured Prediction to No-Regret](#a-reduction-of-imitation-learning-and-structured-prediction-to-no-regret)

3. [Obtención de datasets](#obtención-de-datasets)


---
---

## Navegación autónoma de un drone para localizar un transmisor de radifrecuencia
Encontré este tfg en el linkdin del departemento y me pareció interesante leerlo ya que también era sobre navegación autonoma de drones con aprendizaje automático.


Además también es interesante el enfoque de localización de radiofrecuencias además de otros algoritmos de navegacioón autónoma.
## Navegación autónoma de un dron para localizar un transmisor de radiofrecuencia
Encontré este TFG en el LinkedIn del departamento y me pareció interesante leerlo, ya que también trata sobre la navegación autónoma de drones con aprendizaje automático.

* **ANAIV:** Algoritmos de navegación autonoma basados en vecinidad
Además, también es interesante el enfoque de localización de radiofrecuencias, además de otros algoritmos de navegación autónoma.

* **Métodos para comandar al drone:** Conjunto de funciones encargadas del movimiento
* **ANAIV:** Algoritmos de navegación autónoma basados en vecindad
* **Métodos para comandar al dron:** Conjunto de funciones encargadas del movimiento.
* **Métodos de tolerancia:** Establecen un margen aceptable entre la posición del dron y el objetivo deseado.
* **Métodos de conversión:** Transforman las coordenadas entre los distintos sistemas de referencia.
* **Algoritmos:** Conjunto de métodos que se necesitan para llevar a cabo una tarea.

* **Métodos de tolerancia:** Establecen un margen aceptable entre la posición del drone y el objetivo deseado.
La navegación autónoma por aprendizaje automático se realiza mediante Q-learning, dado una tabla Q de estados y acciones de modo que si el dron toma una decisión, se usará un sistema de recompensas; en este caso, los estados son las posiciones del dron y el mapa de calor.

* **Métodos de conversión:** Transforma las coordenadas entre los distintos sistemas de referencia.

* **Algoritmos:** Conjunto de métodos que se necesitan para llevar una tarea a cabo


La navegación autónoma por aprendizaje automático se hacer por Q learning, dada una tabla Q de estados ya acciones de mmodo que si al drone tomar una decisión, donde se usará un sistema de recommpensas, en este caso los estados son las posiciones del drone y el mapa de calor.

Otro enfoque interesante es la convinación de VFF junto a Q-learning para que el drone a la vez que está buscando la radio frecuencia pueda esquivas obstáculos.
Otro enfoque interesante es la combinación de VFF junto a Q-learning para que el dron, al mismo tiempo que está buscando la radiofrecuencia, pueda esquivar obstáculos.

---
---

## A Reduction of Imitation Learning and Structured Prediction to No-Regret

In imitation learning, we may not necessarily know or ob-
serve true costs C(s, a) for the particular task. Instead,
we observe expert demonstrations and seek to bound J(π)
for any cost function C based on how well π mimics the
expert’s policy π ∗ .

En el aprendizaje por imitación, es posible que no conozcamos u observemos los costos reales C(s, a) para la tarea específica. En su lugar, observamos demostraciones de expertos y buscamos acotar J(π) para cualquier función de costo C, basándonos en qué tan bien π imita la política del experto π∗.

---
---

## Obtención de dtasets
Una vez conseguido el piloto experto usamos el siguiente comando para grabar los topics que necesitamos para nuestro entrenamiento:
## Obtención de datasets
Una vez conseguido el piloto experto, usamos el siguiente comando para grabar los topics que necesitamos para nuestro entrenamiento:

```bash
ros2 bag record -o ros_bag_name /drone0/motion_reference/twist /drone0/sensor_measurements/frontal_camera/image_raw


```

Una vez grabados los datasets en distintos circuitos en ambos sentidos, cada dataset se guardó en una carpeta diferente para poder elegir que circuito procesar.
Una vez grabados los datasets en distintos circuitos en ambos sentidos, cada dataset se guardó en una carpeta diferente para poder elegir qué circuito procesar.

A la hora de cargar los datos me di cuenta que el ordenador se aceleraba mucho y se tardaba bastante solo en leer los datos de las rosbags, un solo circuito tardaba 30 segundos, pero si el programa leía de todas las pruebas del piloto experto, el ordenador se quedaba colgado.
Al cargar los datos, me di cuenta de que el ordenador se aceleraba mucho y tardaba bastante solo en leer los datos de las rosbags; un solo circuito tardaba 30 segundos. Sin embargo, si el programa leía de todas las pruebas del piloto experto, el ordenador se quedaba colgado.

Aprovechando que teníamos un ejemplo de datasets con drones en el siguiente (repositorio)[https://github.com/tii-racing/drone-racing-dataset] comprobé la manera estandar en que la gente guarda sus datasets, también así haciendo mas genérico el programa. Se vió como se guardan las imágenes en formato jpg y los labels en .txt por lo que se siguió la misma práctica.
Aprovechando que teníamos un ejemplo de datasets con drones en el siguiente [repositorio](https://github.com/tii-racing/drone-racing-dataset) comprobé la manera estándar en que la gente guarda sus datasets. Así se volvió más genérico el programa. Se observó cómo se guardan las imágenes en formato jpg y los labels en .txt, por lo que se siguió la misma práctica.
22 changes: 17 additions & 5 deletions src/drone_driver/src/3dplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import os
from PIL import Image
from imblearn.over_sampling import RandomOverSampler

from skimage.transform import resize

# Sets the label to a velocity
def updateNumAngular(value):
Expand Down Expand Up @@ -134,16 +134,28 @@ def getLabelDistribution(labels):
return positiveAngVels, negativeAngVels


def oversample_data(images, labels):
def oversample_data(images, labels, downsample_label=2, downsample_factor=0.5):
# Flatten images
flattened_images = [image.flatten() for image in images]

# Oversample using RandomOverSampler
# Identify the indices of the specified label
downsample_indices = [i for i, label in enumerate(labels) if label == downsample_label]

# Calculate the number of samples to keep after downsampling
num_samples_to_keep = int(len(downsample_indices) * downsample_factor)

# Randomly select samples to keep
selected_indices = np.random.choice(downsample_indices, size=num_samples_to_keep, replace=False)

# Combine selected and non-selected indices
indices_to_keep = list(set(selected_indices) | set(i for i in range(len(labels)) if i not in downsample_indices))

# Use RandomOverSampler only for the selected indices
ros = RandomOverSampler(random_state=42)
X_resampled, y_resampled = ros.fit_resample(flattened_images, labels)
X_resampled, y_resampled = ros.fit_resample(np.array(flattened_images)[indices_to_keep], np.array(labels)[indices_to_keep])

# Reshape back to the original format
#X_resampled = [resampled_image.reshape(images[0].shape) for resampled_image in X_resampled]
# X_resampled = [resampled_image.reshape(images[0].shape) for resampled_image in X_resampled]

return X_resampled, y_resampled

Expand Down

0 comments on commit 985d5f3

Please sign in to comment.