Full text
Equation Chapter 1 Section 1 Proyecto Fin de Máster Máster en Ingeniería Industrial Instalación de Sensor Solar Mems en Rosbot 2.0 Pro con la Plataforma ROS Autor: Jaime García Díaz Tutores: Jose Ramón D. Frejo Javier García Martín Dpto. de Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021
12
Proyecto Fin de Máster Máster en Ingeniería Industrial Instalación de Sensor Solar Mems en Rosbot 2.0 Pro con la Plataforma ROS Autor: Jaime García Díaz Tutor: José Ramón D. Frejo Javier García Martín Dpto. de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2021
14
Proyecto Fin de Carrera: Instalación de Sensor Solar Mems en Rosbot 2.0 Pro con la Plataforma ROS Autor: Jaime García Díaz Tutores: Jose Ramón Jose Ramón D. Frejo Javier García Martín El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2021
16 El Secretario del Tribunal
A mi familia A mis maestros
18
Agradecimientos Como no podía ser de otra manera, agradecer en primer lugar a las personas que han estado apoyándome en mi día a día, a mis padres, sin los cuales no podría haber llegado hasta aquí. Gracias por todo el apoyo que me han dado a lo largo de estos seis años de carrera, así como por haberme ayudado en los momentos de mayor agobio y tensión, por ponérmelo todo más fácil para centrarme en mis estudios, y querer lo mejor siempre para mi futuro. Agradecimientos a mis cuatro hermanos, los cuales han estado para animarme y darme apoyo a lo largo de esta larga etapa. Al resto de mi familia, por estar en momentos tan importantes como mi graduación, y por desearme siempre triunfar en todo lo que me proponga. A mis amigos y compañeros, junto a los cuales he pasado grandes experiencias tanto académicas como socialmente, gracias a los cuales, hasta los días de examen se hacían más amenos. También debo agradecer tanto a la Universidad donde he realizado el grado en Badajoz, como el Máster en Sevilla, a todos aquellos profesores, que me han transmitido conocimientos y ganas de estudiar esta carrera. Y por supuesto a mis tutores José Ramón y Javier, por acogerme en este proyecto y darme la oportunidad de participar en él. Jaime García Díaz Alumno de la Escuela Técnica Superior de Ingeniería de la Universidad de Sevilla. Badajoz, 2021.
26 ÍNDICE DE TABLAS Tabla 3-1. Atributos de Rosbot 2.0 Pro. 41 Tabla 3-2. Descripción de los componentes. 42 Tabla 4-1. Arquitectura de ROS en Rosbot 2.0 Pro. 47
ÍNDICE DE FIGURAS Figura 1-1. Primer robot Industrial “Unimate” 31 Figura 1-2. Sistema operativo ROS. 32 Figura 1-3. Esquema básico de un robot. 32 Figura 1-4. Vehículo submarino no tripulado (AUV). 33 Figura 1-5. Robot de piscina Dolphin S200. 33 Figura 1-6. Robot de construcción de doble brazo con función de control remoto. 34 Figura 1-7. Robot para uso en el espacio (Curiosity). 34 Figura 1-8. Perro Robot Aibo de Sony [8]. 34 Figura 1-9. Robot de uso medicinal (Da Vinci). 35 Figura 1-10. Robots de uso industrial en fábrica de coches. 35 Figura 2-1. Central solar fotovoltaica. 36 Figura 2-2. Central térmica-solar. 36 Figura 2-3. Movimiento relativo del sol sobra la superficie terrestre. 37 Figura 2-4. Bóveda celeste-coordenadas celestes. 38 Figura 2-5. Pirheliómetro. 38 Figura 2-6. Piranómetro. 39 Figura 2-7. Sensor Solar MEMS ISS-AX y sistema de referencia. 39 Figura 3-1. Rosbot 2.0 Pro. 40 Figura 3-2. Dimensiones Rosbot 2.0 Pro. 40 Figura 3-3. Diagrama de bloques de ROSbot 2.0 PRO. 41 Figura 3-4. Distribución de conexionado de placa CORE2. 43 Figura 3-5. Conexiones Rosbot 2.0 Pro 43 Figura 4-1. Ejemplo de granularidad gruesa 44 Figura 4-2. Ejemplo de granularidad fina 45 Figura 4-3. Esquema de funcionamiento de ROS. 45 Figura 4-4. Arquitectura de nodos de Rosbot 2.0 Pro. 46 Figura 5-1. Cuadrantes del microsensor instalado. 49 Figura 5-2. Salidas y entradas sensor ISS-AX. 49 Figura 5-3. Fotodiodos del sensor y ejes. 50 Figura 5-4. Ángulo de incidencia del sol en el sensor. 50 Figura 5-5. Divisor de tensión. 51 Figura 5-6. Pines de conexión del sensor y la fuente de alimentación de 5 V (rojo). 51 Figura 5-7. Enumeración de pines de placa CORE 2 del robot. 52 Figura 5-8. Sensor y placa PCB conectados a Rosbot 2.0 Pro 52
28 Figura 5-9. Paquete Rosbot-Stm32-Firmware abierto en Visual Studio Code. 53 Figura 5-10. Directorio platformio.ini para compilación. 54 Figura 5-11. Carpetas de ROS en Rosbot 2.0 Pro. 55 Figura 6-1. Librerías añadidas en código main.cpp de CORE2. 56 Figura 6-2. Nombre de pines hext en placa CORE2. 56 Figura 6-3. Objeto de tipo rosserial_mbed. 57 Figura 6-4. Publicador con tópico /adc y tipo de mensaje enviado adc_msg. 57 Figura 6-5. Variables y función averageAnalog ( ). 57 Figura 6-6. Int main( ) donde debe incluirse el nuevo publicador creado. 58 Figura 6-7. Añadimos el publicador con nh.advertise(p). 58 Figura 6-8. Se calcula la media de los valores obtenidos y se publica el mensaje. 59 Figura 6-9. Programa configuración_sensor.cpp 60 Figura 6-10. Programa configuración_sensor.cpp 2. 61 Figura 6-11. Launch para iniciación del robot y sensor. 61 Figura 6-12. Ejecucuón de launch de inicialización del robot. 62 Figura 6-13. Publicadores y subscriptores. No inicializado subscriptor “configuración_sensor.cpp”. 62 Figura 7-1. Carga de setup.bash y utilización del comando rostopic echo. 63 Figura 7-2. Valores en bits tomados en la placa CORE 2. 63 Figura 7-3. Resultados experimentales de ejecutar el nodo subscrito a los datos del sensor. 64 Figura 7-4. Ángulo de incidencia X e Y en función de la variación del teléfono móvil. 65 Figura 7-5. Variación de radiación en función de la luz proyectada. 65 Figura 7-6. Ángulos de incidencia del sol. 66 Figura 7-7. Radiación del sol. 66 Figura 7-8. Zona 1 y zona 2 67 Figura 7-9. Zona 3 y 4 67 Figura 7-10. Zona 5 y 6 68 Figura 7-11. Ángulo de incidencia X e Y. 68 Figura 7-12. Radiación. 69 Figura 7-13. Ángulo de incidencia X e Y en función de la radiación solar. 70 Figura 7-14. Zona 1. 71 Figura 7-15. Zona 2. 71 Figura 7-16. Zona 3. 71 Figura 7-17. Zona 4. 72 Figura 7-18. Zona 5. 72 Figura 7-19. Zona 6. 72
30 1 INTRODUCCIÓN 1.1 Objetivos del proyecto y pasos a seguir. El objetivo del presente proyecto es la incorporación de un sensor de radiación solar, que mida tanto el ángulo de incidencia del sol, como el nivel de radiación, ya que puede tener un gran beneficio y distintas aplicaciones utilizarlo en ámbitos donde se aproveche la energía solar, como pueda ser en plantas solares térmicas [1]. En dichas centrales, también pueden tener su utilidad para calcular un MPC como se observa en [2]. Ambas citas son artículos relacionados con el uso de robots en el proyecto OCONTSOLAR ya mencionado. El robot móvil que se utiliza en este proyecto se programa mediante la plataforma de ROS para realizar una integración de las distintas partes y control de este, además de una programación de firmware de más bajo nivel en una placa CORE 2. Se dividirá el proyecto, de forma que cualquier usuario pueda realizar la instalación de cualquier tipo de sensor o actuador en el robot de forma sencilla. En primer lugar, se mencionará el estado del arte en el ámbito que nos ocupa, como son las centrales solares, los seguidores solares pirheliómetro y piranómetro, y el sensor utilizado en el proyecto de la empresa Solar Mems. A continuación, se hará conocer el robot que se va a utilizar, así como su plataforma de programación. Finalmente, se explicará el proceso llevado a cabo para la instalación del sensor y se darán resultados experimentales para la comprobación del funcionamiento. 1.2 Introducción a la robótica 1.2.1 Antecedentes de la robótica Desde épocas muy remotas, el hombre ha deseado construir máquinas que tengan forma de seres humanos y le ayuden a realizar las operaciones que le resultan aburridas o peligrosas. A diferencia de un empleado humano, una máquina nunca se cansaría ni enfermaría, y siempre estaría dispuesta a trabajar [3]. Los elementos que pueden funcionar automáticamente se utilizan desde épocas tan remotas como la antigua Grecia, sin embargo, es hasta mediados del siglo veinte cuando se lograron materializar los primeros robots industriales. Estos robots industriales distaban mucho de los sueños de poder contar con una máquina con forma de ser humano. Casi cincuenta años después de la aparición de los primeros robots se sigue trabajando en el diseño y fabricación de estas máquinas similares al ser humano. En 1961 se instala el primer robot industrial “unimate” en la fábrica de automóviles “General Motors” (figura 1-1), en Tenton (Nueva Jersey USA). Realizaba operaciones de carga y descarga de piezas en una máquina de fundición por inyección de metal.
Figura 1-1. Primer robot Industrial “Unimate” 1.2.2 Bases de la robótica actual Los robots hoy en día no necesitan asemejarse al ser humano, sino cubrir las necesidades de este, de la forma más eficiente posible. El empleo de robots se ha hecho tan popular dado que son unos excelentes auxiliares en tareas con alto grado de riesgo, o en trabajos que suelen ser desagradables para el ser humano. Pueden encargarse de hacer tareas monótonas y repetitivas durante 24 horas sin bajar su rendimiento. Dentro de sus líneas principales, están las de ensamblado, transporte de piezas, así como los procesos de soldadura y pintura. En la actualidad su campo de aplicación incrementa rápidamente, llegando a puntos inimaginables. Un robot conjunta diferentes disciplinas como la electrónica, la mecánica, los sistemas computacionales, etc. Exigiendo una plena y bien definida interacción entre cada una de ellas. Cada disciplina aporta elementos fundamentales que son los que determinan la efectividad en el desempeño del robot. A la hora de realizar un proyecto en robótica, se deben tener en cuenta 5 aspectos imprescindibles que todo robot puede alcanzar en función de la tarea que ocupa: • Localización: consiste en determinar la posición del robot con relación a un mapa dado del entorno. • Percepción: proceso mediante el cual, permite a los robots comunicarse con el entorno por medio de sensores y actuadores. • Mecánica: se trata de la constitución física de los robots. Los componentes que hacen posible el movimiento de este. • Control: indican a cada parte del robot como y cuando funcionar. El componente principal es el procesador o unidad central de procesamiento (CPU). • Electrónica: almacena y envía energía eléctrica a todos los componentes que la requieran. Está formado por baterías y cableado eléctrico. La programación de un robot es muy diversa, pudiendo utilizar diferentes softwares de programación, los cuales pueden ser específicos de la asociación que lo comercializa o de usos más genéricos, mediante distintas placas de control o con hardware propio. En el caso que nos ocupa (como se comentará en los siguientes apartados), el Sofware se desarrolla en Robot Operative System (ROS), un Framework especialmente diseñado para el desarrollo de software para robots basado en una arquitectura de grafos donde el procesamiento toma lugar en los nodos que pueden recibir, mandar y multiplexar mensajes de sensores, control, estados, planificaciones y actuadores, entre otros, el logotipo se puede observar en la figura 1-2.
32 Figura 1-2. Sistema operativo ROS. 1.2.3 Robots Los robots, como se explica en [4], son maquinas en las que se integran componentes mecánicos, eléctricos, electrónicos y de comunicaciones, dotadas además de un sistema informático para ser controlados en tiempo real, para la percepción del entorno y la programación. Están compuestos de sensores que reciben datos de entrada, que se conectan con la computadora y disponen de microprocesadores que ordenan al robot la ejecución de las acciones requeridas. Ofrecen dos tipos de flexibilidad: • Flexibilidad mecánica: es proporcionada por el sistema mecánico articulado que la forma, pudiendo variar su extremo libre en el espacio. • Flexibilidad de programación: proporcionada por el computador. Al poder cambiar a los diferentes programas desarrollados por el programador, puede cambiar la función del robot. La movilidad de un robot dependerá de los elementos mecánicos que tenga, así como los grados de libertad que lo forman. El grado de libertad de un robot es el número de movimientos independientes que puede realizar. El esquema general del sistema de un robot [4], se puede observar en la figura 1-3, donde se identifican las partes especificadas en el apartado 1.2.2, como el sistema mecánico, sensores para tener una percepción y localización en el entorno, y un sistema de control para medir y estimar la siguiente actuación del robot, que se transmitirá a través de los actuadores, por medio del sistema electrónico. Figura 1-3. Esquema básico de un robot. El uso de robots trae ventajas e inconvenientes [5]. • Ventajas: o Se obtiene una mayor precisión en las tareas, sobre todo cuando se trata de tareas monótonas. o Su uso en tareas consideradas peligrosas para el ser humano evita los incidentes y accidentes que puedan ocurrir.
o Mayor velocidad en el proceso. o Reducción de costos a largo plazo, debido al aumento de productividad. o Alcanza lugares donde el ser humano no puede llegar. o Aumento en la calidad. o Pueden trabajar 24 h al día sin descanso, con la única necesidad del correcto mantenimiento preventivo y correctivo. • Desventajas: o Elevado coste, que a corto plazo no resulta rentable, dada la necesidad de grandes inversiones iniciales. o Pueden ser hackeados por programadores especializados, produciendo un cambio en las tareas específicas del robot. o Necesidad de grandes gastos de energía para su funcionamiento. Una de las características del uso de robots es la sustitución de la mano de obra humana. Esto conlleva la reducción de puestos de trabajo, principalmente en fábricas, donde se busca un aumento de la productividad, reduciendo en gran medida los costes de la mano de obra, siendo necesario un aumento de personal más cualificado. 1.2.4 Aplicaciones de robots Como se indica en [6], la robótica es una de las expresiones de la tecnología cuya aplicación se ha extendido a diversos contextos de la vida del hombre. Además de sus diversas aplicaciones en la industria, hace presencia facilitando y mejorando actividades como: • Vuelos no tripulados en el estudio del mundo submarino (figura 1-4 [7]). Figura 1-4. Vehículo submarino no tripulado (AUV). • La limpieza de piscinas (figura 1-5). Figura 1-5. Robot de piscina Dolphin S200.
34 • Aplicaciones en la construcción (figura 1-6). Figura 1-6. Robot de construcción de doble brazo con función de control remoto. • La exploración del espacio exterior con robots como Opportunity, el Spirit, el Rocky IV, la Misión Robótica Juno y el Curiosity (figura 1-7). Figura 1-7. Robot para uso en el espacio (Curiosity). • En el ámbito del entretenimiento: la creación de robots, como Aibo de Sony (figura 1-8) que simulan características de una mascota, robots que pueden jugar al fútbol, robots móviles, humanoides y muchos otros en los cuales se aplican los últimos adelantos tecnológicos en sonido, reconocimiento y síntesis de voz e inteligencia artificial. Figura 1-8. Perro Robot Aibo de Sony [8]. • Una de las aplicaciones muy demandadas hoy en día en robots, es en el área de la medicina, donde además de emplearse como prótesis en clientes con discapacidad, también se usan para otras aplicaciones como telecirugía, en la que los robots pueden ser controlados de manera remota por los cirujanos, permitiendo las operaciones a distancia (es el caso del Sistema quirúrgico Da Vinci). En la figura 1-9 se observa el robot Da Vinci.
Figura 1-9. Robot de uso medicinal (Da Vinci). En cuanto a las aplicaciones de robots de uso industrial (figura 1-10), se pueden clasificar en las siguientes categorías: • Manipulación de materiales: se encargan de la carga y descarga para otras máquinas como pueda ser la colocación de herramientas o transferencia de material (pick and place). • Operaciones de procesado o transformación: soldadura, pintado, revestimientos con spray, etc. • Montaje e inspección: se encarga del correcto montaje y la verificación de la calidad. Figura 1-10. Robots de uso industrial en fábrica de coches.
42 Tabla 3-2. Descripción de los componentes. Atributo Cantidad Descripción Sensor de distancia por infrarrojos 4 Sensor de distancia de tiempo de vuelo VL53L0X con alcance de gasta 200 cm [17]. CORE2 1 Controlador en tiempo real basado en microcontrolador STM32F407. motor de corriente continua 4 Xinhe Motor XH-25D, Motor utilizado: RF-370, 6VDC nominal, 5000 rpm, velocidad sin carga en el eje de salida: 165 rpm, par de parada: 2.9 kg·cm, corriente de parada: 2.2 A, relación de transmisión: ~34 (30613/900), codificador: magnético, 48ppr, 12 polos Sensor de IMU 1 Potente sensor de aceleración/giroscopio/magnetómetro de 9 ejes con MPU-9250 [18] o sensor inteligente de orientación absoluta de 9 ejes BNO055 [19]. Cámara RGBD 1 Orbbec Astra con un tamaño de imagen RGB de 640x480 y un tamaño de imagen de profundidad de 640x480. Pilas 3 Li-Ion 18650 protegidas, baterías recargables, 3500 mAh de capacidad, 3,7 V de voltaje nominal. Nota: El dispositivo puede enviarse indistintamente con baterías similares. Antena 1 Conectado directamente al módulo Wi-Fi ASUS Tinker Board. Utiliza un cable RP-SMA (m) <-> I-PEX MHF4 para conectar la antena con SBC. SBC 1 Placa superior con 4 GB de RAM, Intel Atom Z8350 de 1,92 GHz de cuatro núcleos como CPU, gráficos Intel® HD 400 como GPU y eMMC de 32 GB. El SBC se ejecuta en un sistema operativo basado en Ubuntu, personalizado para usar ROS. LiDar 1 RpLidar A3, 360 grados y hasta 25 m de alcance [20]. La placa CORE2 cuenta con una serie de pines para realizar la conexión de sensores externos, los cuales serán de aplicación para la instalación del sensor Solar Mems, como se mencionará en el apartado 5.1. La hoja de características para el nombramiento del conexionado se observa en la figura 3-4 y los pines del robot en la figura 3-5.
Figura 3-4. Distribución de conexionado de placa CORE2. Figura 3-5. Conexiones Rosbot 2.0 Pro 3.2 Descripción del Software En cuanto al software, podemos diferenciar: • Sistema de bajo nivel en placa CORE 2 desarrollado mediante el codificador Visual Studio. • El entorno operativo Ubuntu 18.04, el cual se encuentra instalado en la SBC (Up Board) y contiene todos los componentes necesarios para trabajar con ROS. Dentro de la SBC se incluye la propia MicroSD de 32 Gb, donde está instalado el sistema operativo y sirve como memoria para el dispositivo. • El Framework de desarrollo de ROS, el cual se explicará con detalle en el apartado 4.
44 4 ENTORNO ROS 4.1 ROS ROS (Robot Operating System) es un framework para el desarrollo de software para robots. Fue desarrollado en 2007 por el Laboratorio de Inteligencia Artificial de Stanford. El sistema operativo de robots (ROS), como se especifica en [21], es un conjunto de bibliotecas de software y herramientas que le ayudan a crear aplicaciones de robot. Desde controladores hasta algoritmos de última generación y con potentes herramientas de desarrollo, todo en código abierto (código de un programa que se distribuye libremente y de manera gratuita que puede ser usado y modificado por los usuarios sin ninguna restricción). Provee de servicios que se esperarían de un sistema operativo, incluyendo abstracción de hardware, control de dispositivos de bajo nivel, implementación de funcionalidades comunes, pasaje de mensajes entre procesos y manejo de paquetes. Se trata de un sistema operativo multidominio y multiplataforma, ya que es compatible con Linux, Windows y macOS, lo que permite el desarrollo y la implementación sin problemas de la autonomía en el robot, la administración de back-end (parte del desarrollo web que se encarga de que toda la lógica de una página web funcione) y las interfaces de uso. ROS se publica como distribuciones (ROS Noetic, ROS Foxy Fitzroy, ROS Galactic Gechelone, etc). El objetivo primario de ROS es reusar código en la investigación y desarrollarlo dentro de la robótica. Para ello, utiliza una estructura distribuida en procesos llamados Nodos, que permite el diseño individualizado, pero fácilmente acoplable a los demás procesos. Estos procesos se pueden agrupar en paquetes y pilas, que fácilmente pueden ser intercambiados, compartidos y distribuidos. Los nodos se encargan de manejar dispositivos o algoritmos informáticos, cada nodo para una tarea separada, de forma que se consiga obtener un nivel de granularidad lo más fina posible (figuras 4-1 y 4-2 [22]). Los nodos pueden comunicarse entre sí mediante topic (información unidireccional) o servicios (información bidireccional). El proceso se puede observar en la figura 4-3. Figura 4-1. Ejemplo de granularidad gruesa
Figura 4-2. Ejemplo de granularidad fina Figura 4-3. Esquema de funcionamiento de ROS. 4.2 ROS en Rosbot 2.0 Pro En la figura 4-4 se observa la arquitectura de nodos de ROS en Rosbot 2.0 Pro, la cual se ha obtenido del propio robot una vez se han ejecutado todos los nodos de este proyecto, incluyendo el tópico añadido para el sensor Solar Mems. Los tópicos se muestran en un rectángulo, y los nodos en un óvalo. En primer lugar, el nodo principal “/serial_node” se subscribe a los tópicos de orden de movimiento del robot (/cmd_vel y /cmd_ser), donde se indica la velocidad y dirección del mismo. De los tópicos enviados por /serial_node, cabe mencionar los sensores de proximidad delanteros (range/fl, /range/fr) y traseros (range/rl, /range/rr) del robot, el tópico /adc el cual se programa como se indica en el apartado 6.1, junto con el nodo que se subscribe a este (/sensor_subscriber), programado como se indica en 6.2, además de los tópicos de velocidad (/velocity) y posición (/pose) en los que se encuentra el robot en el momento que publica el mensaje. El nodo “rqt_gui_py_node_2045” es el ejecutado con el comando $rqt_graph en la terminal de Linux. Todos estos tópicos se encuentran más detallados en la tabla 4-1.
46 Figura 4-4. Arquitectura de nodos de Rosbot 2.0 Pro.
Tabla 4-1. Arquitectura de ROS en Rosbot 2.0 Pro. Topic Tipo de mensaje Dirección Nodo Descripción /mpu9250 Rosbot_ekf/Imu Publicador /serial_node Datos de IMU sin procesar en tipo de mensaje personalizado /range/fl Sensor_msgs/Range Publicador /serial_node Datos sin procesar del sensor de rango delantero izquierdo /range/fr Sensor_msgs/Range Publicador /serial_node Datos sin procesar del sensor de rango frontal derecho /range/rl Sensor_msgs/Range Publicador /serial_node Datos sin procesar del sensor de rango trasero izquierdo /range/rr Sensor_msgs/Range Publicador /serial_node Datos sin procesar del sensor de rango trasero derecho /joint_states Sensor_msgs/JointState Publicador /serial_node Ángulo de rotación de las ruedas /battery Sensor_msgs/BatteryState Publicador /serial_node Voltaje de la batería /buttons std_msgs/UInt8 publicador /serial_node Esado de los botones de usuario /pose Std_msgs/PoseStamped publicador /serial_node Posición basada en codificadores /odom/Wheel Nav_msgs/Odometry publicador /msg_conversion Odometría basada en codificadores de las ruedas
48 /velocity Geometry_msgs/Twist publicador /serial_node Odometría basada en codificadores /imu Sensor_msgs/Imu Publicador /msgs_conversion Datos del IMU empaquetados en el tipo de mensaje ROS estándar /odom Nav_msgs/Odometry Publicador /rosbot_ekf Odometría basada en la fusión de sensores /tf Tf2_msgs/TFMessage Publicador /rosbot_ekf Posición de ROSbot basada en la fusión del sensor /set_pose Geometry_msgs/ PoseWithCovarianceStamped Suscriptor /rosbot_ekf Permitir establecer el estado personalizado de ekf /cmd_vel Geometry_msgs/Twist Suscriptor /serial_node Comandos de velocidad /config Rosbot_ekf/Configuration Servidor /serial_node Permite controlar el comportamiento de la placa CORE2 /adc Rosserial_mbed/adc Suscriptor /solar_sensor Recibe datos de los pines del 1 al 4 y transforma los datos (preparado para sensor Solar Mems)
5 INCORPORACIÓN DEL SENSOR SOLAR MEMS A continuación, se desarrolla el proceso de la instalación del sensor en el robot. 5.1 Configuración de Hardware del sensor con Rosbot 2.0 Pro El sensor instalado para medir la incidencia de los rayos del sol es el ISS-AX [23]. Este sensor está formado por una ventana que recibe la luz del sol, distribuyendo la misma en cuatro fotodetectores que generan una salida analógica en función de la incidencia solar recibida. En la figura 5-1 se puede observar la ventana por la que traspasa la luz solar e incide en los cuatro cuadrantes. Figura 5-1. Cuadrantes del microsensor instalado. Tiene 6 pines de conexionado, dos de entrada (alimentación) y cuatro de salida (uno para cada valor analógico) (figura 5-2). Figura 5-2. Salidas y entradas sensor ISS-AX. Entre las características del sensor, se pueden destacar las siguientes: • Campo de visión de 120 grados (modelo ISS-A60). • Tensión de alimentación de 5-12 V, con una tensión recomendada de 5 V. • Temperatura de operación entre -40º y 85º. • Mayor exactitud en la medida, con un ángulo de incidencia de cero grados (perpendicular a la fuente). Mediante las ecuaciones que rigen el comportamiento del sensor (obtenidas del datasheet insertado en el Anexo B), podemos calcular el ángulo de incidencia solar. Las ecuaciones se detallan a continuación: • Para el cálculo del ángulo X: 𝑋1= 𝑉𝑃𝐻3+ 𝑉𝑃𝐻4 𝑋2= 𝑉𝑃𝐻1+ 𝑉𝑃𝐻2
50 𝐹𝑋=𝑋2− 𝑋1 𝑋2+ 𝑋1 𝐴𝑛𝑔𝑢𝑙𝑜𝑋 = 𝑎𝑟𝑐𝑡𝑔(𝐶 · 𝐹𝑋) (5–1) • Para el cálculo del ángulo Y: 𝑌 1= 𝑉𝑃𝐻1+ 𝑉𝑃𝐻4 𝑌 2= 𝑉𝑃𝐻2+ 𝑉𝑃𝐻3 𝐹𝑌=𝑌 2− 𝑌 1 𝑌 2+ 𝑌 1 𝐴𝑛𝑔𝑢𝑙𝑜𝑌 = 𝑎𝑟𝑐𝑡𝑔(𝐶 · 𝐹𝑋) (5–2) El valor de la constante C depende del modelo de sensor. Para un sensor ISS-A60 tiene el valor C=1.871. VPH1,VPH2 , VPH3 y VPH4, son los 4 voltajes obtenidos de los fotodiodos de la figura 5-3. Figura 5-3. Fotodiodos del sensor y ejes. Con las ecuaciones indicadas, se calcula los ángulos de incidencia X e Y, observados en la figura 5-4. Figura 5-4. Ángulo de incidencia del sol en el sensor. Para realizar el conexionado del sensor, dado que las salidas de este son analógicas, se hará uso de los pines que posee el robot en la placa Core2. Debido a que la placa CORE2 solo recibe señales de 0 a 3.3 V, pudiendo dañarse en caso de tensiones de mayor magnitud, es necesario el diseño de una placa con un divisor de tensión, que sirva de adaptación para cada salida analógica. Para realizar el diseño del divisor de tensión, se calculan las resistencias para una tensión de entrada variable entre 0 y 5 V, y una tensión de salida entre 0 y 3.3 V.
Figura 5-5. Divisor de tensión. 𝑉𝑂𝑈𝑇 =𝑅2 𝑅1+ 𝑅2 · 𝑉𝑖𝑛 (5–3) Para un voltaje de entrada máximo de 5 V, el de salida debe ser de 3.3 V 3.3 = 𝑅2 𝑅1+ 𝑅2 · 5 (5–4) 𝑅1≈ 2 · 𝑅2 (5–5) Se obtienen los voltajes deseados, con las resistencias: 𝑅1=20𝑘Ω 𝑅2=10𝑘Ω Se fabrica la placa manualmente, mediante una PCB de soldadura manual, en la que se conectan las cuatro salidas analógicas del sensor en la posición Vin del divisor de tensión, y llevando las salidas Vout a los pines de entrada del robot que se observan en la figura 5-6. Figura 5-6. Pines de conexión del sensor y la fuente de alimentación de 5 V (rojo). Dichas entradas corresponden con la posición 1, 2, 3 y 4 de la figura 5-7 y la 13 y 20 para la alimentación de 5 V.
58 Figura 6-6. Int main( ) donde debe incluirse el nuevo publicador creado. Figura 6-7. Añadimos el publicador con nh.advertise(p). El firmware del robot tiene un bucle while(1), el cual se repite mientras se ejecuta el “rosserial.launch” indicado en el apartado 5.3, enviando los tópicos creados por los desarrolladores. Se incluye por tanto en este bucle el tópico como se muestra en la figura 6-8, donde se ha utilizado la función creada “averageAnalog”, para obtener la media de cada entrada analógica del sensor e incluirla en el objeto creado “adc_msg” de tipo “rosserial_mbed::adc”, para publicar el mensaje en el tópico “/adc”. Finalmente se publica el mensaje con “p.publish(&adc_msg)”.
Figura 6-8. Se calcula la media de los valores obtenidos y se publica el mensaje. El tópico “/adc” envía por tanto los datos obtenidos del sensor, convertidos a bits. 6.2 Programación de software del robot utilizando ROS Noetic en Linux Para la programación del software de control del robot, mediante ROS Noetic en Linux, se ha utilizado el código que se observa en las figuras 6-9 y 6-10, para suscribirse al tópico que se ha creado desde la placa CORE 2 como se indica en el apartado 6.1. El código se ha incluido en el nodo “configuración_sensor.cpp”, el cual se encuentra indicado en el apartado 5.3. El nodo se suscribe al topico “/adc”, recibiendo los valores en el objeto “msg”. Se crea una estructura tipo “información_sensor” para almacenar la información de los ángulos de incidencia y de la radiación. Se añade la función “delay()” para recibir los datos al iniciar el subscriptor con una retención de tiempo que se estime en la variable “secs”. El motivo de crear esta función, y no utilizar la propia función que incorpora ROS (ros::Rate [33]), es que cuando se programa con dicha función, no se ha conseguido detener el tiempo de envío de mensajes en el bucle del subscriptor. Se han escogido únicamente dos valores analógicos de los fotoreceptores para medir la radiación (pines 2 y 3), debido al propio funcionamiento del sensor, ya que, al realizar las pruebas experimentales, se comprueba, que dichos valores varían en mayor proporción que los otros dos, debido a que los fotoreceptores de estos pines, son los que reciben la mayor parte de la incidencia del sol, como se puede ver en la figura 5-1, y en la figura 7-2. El motivo de representar la radiación en bits, se debe a que no se conoce los valores de radiación en la medida, ya el datasheet del sensor solo menciona el ángulo de incidencia y no considera mediciones máximas y mínimas de radiación solar, por lo que no se pueden realizar estimaciones de la conversión a W/m², ni tampoco se conocen valores reales de la radiación tomada el día 04/11/2021 en Badajoz a las 17:15 para hacer un cálculo proporcional.
60 Figura 6-9. Programa configuración_sensor.cpp
Figura 6-10. Programa configuración_sensor.cpp 2. 6.3 Flasheado Antes de iniciar cualquier nodo, al abrir un terminal en Linux, es necesario cargar el setup.bash. En este caso, se utilizar el comando: $ source ~/ros_workspace/devel/setup.bash Cuando se inicia el fichero launch, no se precisa ejecutar el máster, ya que se inicia de forma automática en el robot. Se crea un fichero .launch como se menciona en el apartado 5.3, el cual se observa en la figura 6-11. Figura 6-11. Launch para iniciación del robot y sensor. Mediante este launch se ha introducido el puerto de conexión de la placa CORE 2 con la SBC y el serial_badruate del Rosbot 2.0 Pro [34]. De esta forma se inician todos los nodos del robot, mediante el puente, a través del paquete de “rosserial_python” que se encuentra dentro del paquete “rosserial” instalado en el “ros_workspace”. Se puede ver en la figura 6-12 el resultado de la ejecución del launch.
62 Figura 6-12. Ejecucuón de launch de inicialización del robot. En la figura 6-13 se utiliza el comando “rostopic list -v” para mostrar la lista de publicadores y subscriptores. Figura 6-13. Publicadores y subscriptores. No inicializado subscriptor “configuración_sensor.cpp”.
7 RESULTADOS EXPERIMENTALES Mediante el comando “rostopic echo /adc” observado en la figura 7-1, podemos ejecutar el tópico “/adc” en la terminal, para comprobar los datos de salida, e identificar los valores obtenidos en la placa CORE 2, los cuales como ya se mencionó en el apartado 5, se encuentran en bits. Figura 7-1. Carga de setup.bash y utilización del comando rostopic echo. Se puede ver en la figura 7-2, algunos de los resultados obtenidos con el sensor conectado, y variando la radiación con la luz artificial del teléfono móvil. Figura 7-2. Valores en bits tomados en la placa CORE 2. Se observa que la incidencia solar en los pines adc1 y adc2, es más sensible que en los pines adc 0 y adc3. En principio se entiende que, al estar fabricado el sensor para medir el ángulo de incidencia solar, los valores no son desorbitados. Se inicializa el subscriptor, que realiza la transformación a grados, como se observa en el apartado 6.2, y se obtienen valores del sensor, al variar el ángulo de incidencia de la linterna, obteniendo los datos de la figura 7- 3.
64 Figura 7-3. Resultados experimentales de ejecutar el nodo subscrito a los datos del sensor. 7.1 Resultados experimentales con luz artificial [35] 7.1.1 Resultados En la figura 7-4, se puede observar los resultados de los ángulos de incidencia al realizar las pruebas con la linterna del teléfono móvil. Para acceder al video de la prueba realizada pulse aquí [35]. Se comienza con luz ambiente de la habitación donde se realizan las pruebas, posteriormente se aproxima la linterna y se ha variado el ángulo de incidencia en círculos alrededor de la ventana del sensor.
Figura 7-4. Ángulo de incidencia X e Y en función de la variación del teléfono móvil. Se observa en la figura 7-5 la radiación obtenida en bits. Figura 7-5. Variación de radiación en función de la luz proyectada. 7.1.2 Análisis de resultados obtenidos Se analiza a continuación las distintas zonas de la gráfica de los resultados obtenidos.
66 Figura 7-6. Ángulos de incidencia del sol. Figura 7-7. Radiación del sol. Zona 5 Zona 6 Zona 1 Zona 2 Zona 3 Zona 4 Zona 2
En la figura 7-6 se observa la zona 1 y 2, en la cual se puede ver un incremento en la radiación al acercarse la luz de la linterna, y una variación del ángulo Y elevada en comparación con el ángulo X. Esto es debido a la incidencia de la luz en el extremo superior del sensor, y por tanto debe de estar recibiendo mayor inclinación en uno de los ángulos. Figura 7-8. Zona 1 y zona 2 Sin embargo en la figura 7-9, se observa como la luz pasa de la zona 3 a 4, donde la incidencia de la luz está en el lado opuesto del caso anterior (zona 2), obteniendo resultados opuestos en los ángulos, pero un aumento de radiación. Figura 7-9. Zona 3 y 4 Finalmente, en la imagen 7-10 se aleja y aproxima la linterna, disminuyendo en gran medida la radiación y aumentando al pasar de la zona 5 a la 6.
74 REFERENCIAS [1] J.G. Martín, J.R.D Frejo, R.A. García, E.F. Camacho, «Multi-robot task allocation problem with multiple nonlinear criteria using branch and bound and genetic algorithms,» Intelligent Service Robotics, pp. 1-21, 2021. [2] J.R.D Frejo and E.F. Camacho, «Centralized and distributed Model Predictive Control for the maximization of the thermal power of solar paraolic-trough plants,» Solar Energy 204, pp. 190-199, 2020. [3] J. M. D. González, «Robótica y Prótesis Inteligentes.,» Revista digital Universitaria, vol. 6, nº 1, 2004. [4] A. O. Baturone, "Robótica Manipuladores y robots móviles", marcombo Boixareu Editores, 2001. [5] «WIKILIBROS,» 2020. [En línea]. Available: https://es.wikibooks.org/wiki/Rob%C3%B3tica/Ventajas_y_desventajas_de_los_Robots. [6] P. A. L. Ramírez, «Aprendizaje de y con robótica, algunas experiencias,» Revista Educación, nº 37(1), 43- 63,ISSN:2215-2644, p. 21, 2013. [7] MUNDO, «Avión malasio: lo buscarán submarinos no tripulados,» 2014. [8] L. d. Barco, «Sony Aibo, el carismático perro robot de la compañía, llega a Europa,» hipertextual, 30 agosto 2018. [9] Instituto Superior Politécnico José Antonio Echeverría, «Seguidor Solar, optimizando el aprovechamiento de la energía solar,» Ingeniería Energética ISSN 1815-5901, vol. XXXVI, nº 2, 2015. [10] G. Arencibia-Carballo, «La importancia del uso de paneles solares en la generación de energía eléctrica,» Redvet ISSN 1695-7504, vol. 17, nº 9, 2016. [11] «Wikipedia,» 2019. [En línea]. Available: https://es.wikipedia.org/wiki/Pirheli%C3%B3metro. [12] N. L. Forero, W. Meza, M.A. Martinez, L.M. Caicedo, G. Gordillo, «Estimación del Valor Medio Mensual del Índice de Claridad Atmosférico,» Revista Colombiana de Física, vol. Vol. 40 , nº Nº 1, 2008. [13] E. P. Tutistar, «Modelo para calibrar piranómetro con la referencia mundial de radiación solar, utilizando un piranometro con banda de sombra,» El Hombre y la Máquina , Vols. %1 de %2ISSN 0121-0777, nº 45, 2014. [14] «Wikipedia,» 2021. [En línea]. Available: https://es.wikipedia.org/wiki/Piran%C3%B3metro. [15] «UP Board Series,» [En línea]. Available: https://up-board.org/up/specifications/. [16] Husarion, «Husarion DOCS,» [En línea]. Available: https://husarion.com/tutorials/ros-tutorials/1-ros- introduction. [17] life.augmented, «pololu "VL53L0X",» [En línea]. Available: http://catarina.udlap.mx/u_dl_a/tales/documentos/lis/dillanes_l_a/capitulo1.pdf#:~:text=%E2%80%A2%2
0Robot%20es%20una%20m%C3%A1quina%20controlada%20por%20computadora,barata%20y%20pre cisa%20que%20los%20seres%20humanos%20%5B1%5D.. [18] InvenSense Inc, «invensense.tdk.com "MPU-9250",» [En línea]. Available: https://invensense.tdk.com/wp-content/uploads/2015/02/PS-MPU-9250A-01-v1.1.pdf. [19] BOSCH , «dl.btc.pl "BNO055",» [En línea]. Available: https://dl.btc.pl/kamami_wa/bst_bno055_ds000_12.pdf. [20] SLAMTEC, «RPLIDAR A2,» [En línea]. Available: https://www.slamtec.com/en/Lidar/A2. [21] Robotics, Open, «ROS,» 2021. [En línea]. Available: https://www.ros.org/. [22] «Openwebinar,» [En línea]. Available: https://openwebinars.net/accounts/login/?next=/academia/aprende/programacion-ros/2657/. [23] Solar Mems Technologies S.L., "Sun Sensor ISS-AX", Sevilla. [24] GitHub, Inc, «husarion/rosbot-stm32-firmware,» 20 Octubre 2021. [En línea]. Available: https://github.com/husarion/rosbot-stm32-firmware. [25] arm Limited, «arm MBED "mbedOs",» [En línea]. Available: https://os.mbed.com/mbed-os/. [26] Microsoft, «VisualStudio,» [En línea]. Available: https://code.visualstudio.com/. [27] Github, Inc, «github/stm32loader,» [En línea]. Available: https://github.com/husarion/stm32loader. [28] Open Robotics, «Ros.org,» [En línea]. Available: http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment. [29] husarion , «Husarion DOCS,» [En línea]. Available: https://husarion.com/tutorials/. [30] Open Robotics, «Ros.org,» [En línea]. Available: http://wiki.ros.org/ROS/Tutorials. [31] GitHub, Inc, «husarion/rosbot_ekf,» [En línea]. Available: https://github.com/husarion/rosbot_ekf. [32] Open Robotics, «Ros.org,» 2015. [En línea]. Available: http://wiki.ros.org/rosserial_python. [33] J. Faust, «Docs.ros.org,» 2013. [En línea]. Available: http://docs.ros.org/en/diamondback/api/rostime/html/classros_1_1Rate.html . [34] GitHub, Inc, «husarion/rosbot-stm32-firmware/rosserial-interface,» [En línea]. Available: https://github.com/husarion/rosbot-stm32-firmware#rosserial-interface. [35] J. G. Díaz, «YouTube,» "Pruebas experimentales con luz artificial de sensor solar mems en rosbot 2.0 Pro", 2021. [En línea]. Available: https://www.youtube.com/watch?v=2FYffCTpQI0. [36] J. G. Díaz, «YouTube,» "Video experimental Rosbot 2.0 Pro con sensor Solar Mems", 2021. [En línea]. Available: https://youtu.be/2NjqYCxBOSs. [37] isaac879, «GitHub/Pan-Tilt-Mount,» [En línea]. Available: https://github.com/isaac879/Pan-Tilt-Mount.
76
ANEXO A ARCHIVOS PROGRAMADOS A.1 Codigo main.cpp para el firmware del robot (partes editadas)
78
80
82
90 <build_depend>rosserial_mbed</build_depend> <build_export_depend>roscpp</build_export_depend> <build_export_depend>rosserial_mbed</build_export_depend> <exec_depend>roscpp</exec_depend> <!-- The export tag contains other, unspecified, tags --> <export> <!-- Other tools can request additional information be placed here --> </export> </package>
ANEXO B DATASHEET SENSOR ISS-AX
92
94
96
98