🗂️ Tabla de Contenido
Los sensores son elementos fundamentales para que los robots móviles puedan cumplir con su función. Estos dispositivos poseen un conjunto de características técnicas que se clasifican en características estáticas y características dinámicas. Asociadas a dichas características existe un conjunto de valores de error que conforman la incertidumbre de medida.
A medida que se busca un mejor desempeño de los robots, estos errores se vuelven más evidentes y adquieren mayor relevancia. Reconocer su existencia, magnitud y comportamiento permite controlarlos mediante el preprocesamiento de señales, o al menos identificar por qué el comportamiento del robot difiere del esperado.
En este contexto, el uso de ROS (Robot Operating System) se ha convertido en un estándar fundamental para el desarrollo de robots móviles. ROS proporciona una infraestructura flexible que facilita la integración de diversos componentes de hardware, como sensores, actuadores y unidades de procesamiento, mediante una arquitectura modular basada en nodos y mensajes. Gracias a ROS, es posible gestionar de manera eficiente la adquisición, procesamiento y distribución de datos de sensores, permitiendo el desarrollo de sistemas más robustos, escalables y reutilizables.
-
Familiarizarse con el uso e implementación de sensores.
-
Comprender los principios de funcionamiento de diferentes tipos de sensores, así como sus implicaciones en sistemas de adquisición de datos.
-
Evaluar la incertidumbre asociada a las mediciones obtenidas mediante sensores, aplicando métodos estadísticos básicos.
-
Realizar el manejo de las plataformas robóticas disponibles a través del uso de ROS (Robot Operating System).
- Robot Lego EV3.
- Robot Kuboki.
- Computador.
- Lidar Hokuyo URG-04LX-UG01 con cable USB-mini y sensor RPLIDAR.
- Sensor de distancia por ultrasonido HC-SR04.
- Cinta métrica.
- Graduador o transportador, escuadra de 45° y 60°.
- Arduino UNO con cable USB-B.
- Protoboard.
- Cables de conexión para protoboard.
- Ubuntu 20.04.
- Windows.
- Software Hokuyo. URG Benri data viewing tool.
- Matlab.
- Arduino IDE.
- Visual Studio Code.
-
¿Qué es el Vocabulario Internacional de Metrología (VIM)?
-
Según el VIM, defina los siguientes conceptos:
-
Exactitud de medida
-
Precisión de medida
-
Error de medida
-
Incertidumbre de medida
-
-
Explique la diferencia entre un error sistemático y un error aleatorio.
-
De acuerdo con la teoría estadística: ¿qué es el valor medio? ¿Qué magnitudes se utilizan para medir la dispersión de los datos?
-
Busque una definición de que es ROS y sus principales ventajas
-
Investigue sobre qué comandos se pueden usar con rosnode, rostopic, rosparam, rosservice, rosmsg y rospack.
-
Investigue acerca del robot TurtleBot2 y su relación con la base Kobuki.
-
¿Para que sirve los sensores cliff en el Kobuki?
-
¿Como leer un evento de dicho sensor?
-
¿Qué protocolo de comunicación usa el Lego Ev3 con sus sensores y actuadores?
-
¿Qué opciones de conexión permiten integrar sensores no nativos al sistema LEGO EV3?
Caution
Inicialmente no conecte el sensor al computador.
- Instale, ejecute el software URG Benri data viewing tool.
- Realice la configuración del sensor y compuebe el funcionamiento adecuado del Lidar.
- Abra MATLAB.
- Desde MATLAB verificar con la instrucción
instrfind
que no hay puertos abiertos, la respuesta en la ventana de comandos debe ser:
ans =
[]
o la instrucción serialportlist
.
ans =
1x0 empty
Tip
Si aparecen instrumentos asociados es preferible cerrar el software, desconectar el sensor, volver a abrir MATLAB y reconectar el sensor.
- En la carpeta de trabajo con MATLAB copiar la carpeta Lidar.
# Con gitbash o linux puede usar estos comandos para copiar puede cambiar la primera linea y usar su directorio de trabajo
cd ~/Matlab
git clone --filter=blob:none --no-checkout https://github.com/labsir-un/FRM_Lab_2_Sensores_y_ROS.git Lidar
cd Lidar
git sparse-checkout init
git sparse-checkout set Recursos/Sensores/Hokuyo
git checkout
mv Recursos/Sensores/Hokuyo/* ./
rm -r Recursos/
- Abrir el Administrador de dispositivos (Windows) y conecte el sensor a un puerto USB, observe los cambios en la carpeta
Puertos COM y LPT
. Registre en número de puerto asignado al sensor. - Abra desde MATLAB el archivo SetupLidar.m y modifique la línea 6 con el número de puerto
COM
correspondiente. - Organize su espacio de trabajo de manera que pueda colocar el sensor en 3 diferentes posturas en el área a mapear como el ejemplo mostrado a continuación con el sensor RPLidar.
-
Establezca un punto de su área de trabajo y definalo como origen de coordenadas y defina direcciones X e Y. Ubique el sensor lidar de manera tal, que el frente o línea frontal no este alineada con las direcciones X e Y reciente definidas.
-
Corra el programa
SetupLidar.m
. -
Abra el programa RunLidar2.m.
-
Modifique el algoritmo para que haga 3 escaneos con separación de tiempo de 1 a 3 segundos entre ellos.
-
Coloque el sensor en la pose 1 mida y guarde los datos de esa pose
$$[x, y, \theta]_{1}$$ . -
Corra el programa RunLidar2.m.
-
Modifique el algoritmo en las líneas 11 y 16 para que genere una variable
LidarSet2
. -
Coloque el sensor en la pose 2 mida y guarde los datos de esa pose
$$[x, y, \theta]_{2}$$ . -
Corra el programa RunLidar2.m.
-
Modifique el algoritmo en las líneas 11 y 16 para que genere una variable
LidarSet3
. -
Coloque el sensor en la pose 3 mida y guarde los datos de esa pose
$$[x, y, \theta]_{3}$$ . -
Corra el programa RunLidar2.m.
-
Desconecte el lidar usando el programa DisconnectLidar.m
-
Presente la foto de su área de trabajo modificada con las dimensiones totales y la pose aproximada del sensor en cada conjunto de medidas.
-
Para cada pose informe los datos
$$[x, y, θ]_{i}$$ y presente los datos capturados con alguno de los métodos plot(scan) presentados en la página de ayuda de MATLAB: lidarScan Create object for storing 2-D lidar scan. -
Para cada pose presente los datos en forma de mapa de ocupación. Ayuda de MATLAB occupancyMap Create 2-D occupancy map ejemplo Insert Laser Scans into Occupancy Map.
-
Usando los datos capturados en las 3 poses construya un mapa de ocumación de su área de trabajo, use como referencia la ayuda de MATLAB: buildMap Build occupancy map from lidar scans.
-
Realice un análisis de los errores y fuentes de error evidenciados en la construcción del mapa en el punto anterior.
- Organize su espacio de trabajo de manera que pueda colocar el sensor en 3 diferentes posturas en el área a mapear como aparece en el ejemplo en la sección anterior.
- Establezca un punto de su área de trabajo y definalo como origen de coordenadas y defina direcciones X e Y.
- Realice una toma de datos similar a la realizada para el sensor Hokuyo. Utilice los algoritmos disponibles en la carpeta RPLidar.
Tip
No olvide cambiar el número de puerto COM
en los scripts
- Realice el mismo post-procesamiento de datos que el realizado con el sensor Hokuyo (Pasos 22-26).
- En los sitios referenciados en la sección 5. 📚🔗 Recursos identifique la forma de conectar el ARDUINO y el sensor HC-SR04 y la forma de conexión a su computador. Haga las conexiones correspondientes. Tenga en cuenta los números de pines del ARDUINO a los cuales conectó los pines de trigger y de echo del HC-SR04.
- Abra el IDE de Arduino y cargue el archivo usound3.ino. Modifique las líneas correspondientes para que coincidan con los pines del Arduino que se están utilizando en su configuración actual.
const int pinecho = 11;
const int pintrigger = 12;
- Compila el código y súbelo al Arduino mediante el entorno de desarrollo (IDE) de Arduino.
- Desde el IDE de Arduino, abra el monitor serial para comprobar que los datos se están leyendo y registrando adecuadamente. Una vez verificado, cierra el monitor.
- Instale el montaje experimental de acuerdo con el esquema mostrado.
- En MATLAB abra el archivo ultrasound3.m.
- En la ventana de comandos, utiliza la instrucción
serialportlist
para identificar el puerto asignado al Arduino. - Edita la instrucción
port = serialport()
en el archivo, configurando el puertoCOM
que corresponda al asignado para el Arduino. El programa leerá los datos recibidos por el puerto serie y los almacenará en la variabledist
. - Ubica un objeto (por ejemplo, una caja de cartón o una tabla pequeña) que actúe como referencia para realizar la medición de distancia.
- Coloca el objeto a una distancia de 1 metro del sensor, verifica la distancia utilizando una cinta métrica y registra el valor obtenido.
- Ejecuta el programa ultrasound3.m para realizar la medición de distancia y guarda los resultados obtenidos en el proceso en un archivo debidamente identificado.
- Repita los dos pasos anteriores en tres posiciones adicionales del objeto, asegurándose de que las distancias al sensor estén entre 1 y 2,5 metros.
- Para cada conjunto de datos, calcule la distancia media, la desviación estándar, el error absoluto y el error relativo en relación con la medición de distancia realizada con el flexómetro.
- Presente la gráfica de distancia en función del índice de muestra.
- Para cada distancia medida, incluya un histograma que muestre la distribución de los datos.
- Incluya gráficas que representen el comportamiento de la desviación estándar, el error absoluto y el error relativo en relación con la distancia media.
- Lleve a cabo los análisis necesarios y elabore las conclusiones correspondientes.
Llevar a cabo una estimación preliminar de la incertidumbre de medida en los sensores y actuadores utilizados en los kits LEGO EV3.
-
Programe el robot LEGO EV3 para realizar las siguientes acciones: arranque, desplazamiento en línea recta de 100 cm y detención. Configure la velocidad de desplazamiento al 30% de la velocidad máxima del robot. Registre los datos de posición al inicio y al final del trayecto utilizando los siguientes elementos:
- Encoder sensor de rueda.
- Sensor de Ultrasonido del EV3.
- Cinta métrica.
-
Repita el procedimiento anterior, pero ahora con la velocidad al 100 % de la máxima.
-
Realice un análisis comparativo de las medidas y calcule los errores de desplazamiento tomando como patrón la cinta métrica.
-
Diseñe e implemente un algoritmo que permita girar una rueda del robot LEGO EV3 en intervalos de 30° y 45°. Configure un montaje experimental que permita medir externamente los ángulos girados utilizando un método alternativo, como un transportador, un apuntador láser con cinta métrica, u otro sistema de referencia. Realice múltiples repeticiones de la medición para evaluar la precisión del sistema.
-
Realice un análisis comparativo entre los valores de desplazamiento angular medidos por el sistema LEGO EV3 y los obtenidos mediante el método de medición externo. Utilice este último como patrón de referencia para calcular los errores de desplazamiento. Determine el error absoluto, el error relativo y, si es pertinente, el error porcentual para evaluar la precisión del sistema.
Important
Si quiere saber más de como funciona ROS, su estructura y como se estructura un paquete vea 📚🌐🤖 Introducción a ROS.
- Cree un Workspace para los archivos. En el siguiente ejemplo se crea uno con el nombre
catkin_ws
.
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
- Clone el paquete
laboratorio_2
de este respositorio para esto use los siguientes comandos:
cd ~/catkin_ws/src
git clone --filter=blob:none --no-checkout https://github.com/labsir-un/FRM_Lab_2_Sensores_y_ROS.git laboratorio_2
cd laboratorio_2
git sparse-checkout init
git sparse-checkout set Recursos/ROS/laboratorio_2
git checkout
mv Recursos/ROS/laboratorio_2/* ./
rm -r Recursos/
- Complilar el Workspace y cargar configuraciones.
cd ~/catkin_ws
#Compila todo el workspace creado
catkin_make
#Carga todas las configuraciones necesarias en el entorno actual
source devel/setup.bash
- Dar permisos de ejecución a los scripts de python.
chmod +x ~/catkin_ws/src/laboratorio_2/scripts/*.py
- Abra otra terminal e inicie ROS.
roscore
- Abra una tercera terminal e inicie el nodo de
turtlesim
.
rosrun turtlesim turtlesim_node
- En la primera terminal corra el ejecutable de hello.cpp. Con esto se correra el primer archivo ejecutable de C++.
rosrun laboratorio_2 hello
- Corra el ejecutable de subpose.cpp. Este programa se suscribe a la pose de la tortuga y la muestra en la terminal.
rosrun laboratorio_2 subpose
- Corra el ejecutable de pubvel.cpp. Este programa publica en las velocidades de la tortuga con valores alatorios lo cual hace que se mueva en la escena.
rosrun laboratorio_2 pubvel
- Corra el ejecutable de pysubpose.py. Este programa se suscribe a la pose de la tortuga y la muestra en la terminal.
rosrun laboratorio_2 pysubpose.py
- Corra el ejecutable de pypubvel.py. Este programa publica en las velocidades de la tortuga con valores alatorios lo cual hace que se mueva en la escena.
rosrun laboratorio_2 pypubvel.py
- Detenga el nodo de
turtlesim
y lance varios nodos usando el archivo p.launch.
roslaunch laboratorio_2 p.launch
-
Describa paso a paso que hacen los programas realizados en Python, indique las funciones de ROS usadas.
-
Use
turtle_teleop_key
y el programapysubpose.py
para conocer las dimensiones del plano donde el Turtlesim puede moverse. -
Describa como usar algún servicio en Python.
-
Pruebe el código ejemplo pycuadrado.py que se encarga de dibujar un cuadrado con el turtlesim. Y revise como se usan servicios en este script.
Note
Se recomienda usar las instrucciones rosservice list
y rosservice info
para ver los servicios que hay disponibles y la información de estos.
- Inicie un nodo de
turtlesim
, utilice el serviciospawn
para generar una segunda tortuga y desarrolle un programa en Python que permita a ambas tortugas dibujar un triángulo y un cuadrado. Emplee un archivolaunch
para automatizar la ejecución de la tarea.
- Desarrolle un programa que permita realizar la lectura del sensor de acantilado (cliff) del robot Kobuki y reproduzca un sonido al detectarse un evento asociado a dicho sensor. De forma simultánea, habilite el modo de teleoperación mediante teclado para controlar el movimiento del robot.
-
Desarrolle un programa que permita realizar la lectura de los siguientes sensores: táctil, giroscopio y, adicionalmente, un sensor infrarrojo, ultrasónico o de color, con el objetivo de detectar eventos asociados a cualquiera de ellos. Simultáneamente, implemente un modo de teleoperación, ya sea mediante teclado o una interfaz gráfica (GUI), para controlar el movimiento del robot.
-
Con las lecturas o eventos del robot genere una rutina como: parada con un umbral de seguridad, control de giro o generación de sonido.