0% encontró este documento útil (0 votos)
4 vistas73 páginas

Tesis sobre Robots Móviles Autónomos

bueno
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas73 páginas

Tesis sobre Robots Móviles Autónomos

bueno
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1

UNIVERSIDAD DE SONORA
División de Ciencias Exactas y Naturales
Programa de en Matemáticas

Título de tesis

T E S I S

Que para obtener el título de:

en Ciencias (Matemáticas)

Presenta:

Nombre del alumno

Directores de tesis: Dr.(Dra.) Nombre director 1

Dr.(Dra.) Nombre director 2

Hermosillo, Sonora, México, 20 de septiembre de 2024


ii

SINODALES

Dr.
Universidad de Sonora, Hermosillo, México

Dr.
Universidad de Sonora, Hermosillo, México

Dr.
Universidad de Sonora, Hermosillo, México

Dr.
Universidad de Sonora, Hermosillo, México
texto texto. . .
Agradecimientos
texto texto

iii
Todo list

iv
Índice general

Agradecimientos iii

Índice general iv

1. Introducción 1

Introducción 1

1.0.1. Robots móviles superciales . . . . . . . . . . . . . . . . . . . . . . 1


1.0.2. Robots submarinos . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.0.3. Robots aerios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.0.4. Visión por computadora . . . . . . . . . . . . . . . . . . . . . . . . 7
1.0.5. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
[Link]. Objetivos particulares . . . . . . . . . . . . . . . . . . . . 8
1.0.6. Contenido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2. Sistema de visión 10

2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3. WMR Amigobot 22

3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2. Robot móvil rodante Amigobot . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3. Características y Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4. Comunicación y conectividad . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.5. Operación y manejo de Amigobot . . . . . . . . . . . . . . . . . . . . . . . 26
3.5.1. ROS/ARIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.6. Modelo Cinemático . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4. Esquema de navegación 32

4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2. Campos potenciales de velocidad . . . . . . . . . . . . . . . . . . . . . . . 32
4.3. Estrategia de navegación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3.1. Campo de evasión . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4. Estrategia de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.5. Esquema experimental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

v
Índice general vi

4.5.1. Descripción del funcionamiento del sistema . . . . . . . . . . . . . . 39


4.6. Implementación en software . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6.1. Bloque: TrackableLocation . . . . . . . . . . . . . . . . . . . . . . . 41
4.6.2. subsistema: vel_eld_WMR . . . . . . . . . . . . . . . . . . . . . . 41

5. Resultados de validación 44

5.1. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

6. Conclusión 48

6.0.1. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Appendices 50

A. Programa de inicialisacion de bibliotecas motive 50

B. Bloque TrackableLocation 52

B.0.1. Funcion TrackableLocation . . . . . . . . . . . . . . . . . . . . . . . 53


B.0.1.1. Bloque Yaw correction . . . . . . . . . . . . . . . . . . . . 54
B.0.2. Bloque derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

C. Programa de generacion de campos potenciales 57

D. Programa de control 60

Bibliografía 62
Capítulo 1

Introducción

En la actualidad se an popularizado los vehículos autónomos, los cuales se emplean

emplean en muchos ámbitos, algunos ejemplos son en el transporte personal [1], en la

logística y traslado de mercancías [2], la minería [3], exploración espacial [4],entre otros.

Para que un vehículo sea considerado autónomo, debe ser capaz de desplazarse en di-

ferentes lugares con poca o nula intervención humana. Para lograr esto, debe tener la

capacidad de decidir la ruta a tomar hacia la posición o trayectoria deseada, al mismo

tiempo que evita colisionar con obstáculos [5]. Este tipo de vehículos constan de perifé-

ricos, tales como sensores de ultrasonido, cámaras de video, radares, lidares y unidades

de posicionamiento global (GPS), y computadoras tales como microcontroladores y uni-

dades de procesamiento de alto rendimiento. Estos dispositivos son capaces de captar

información del mundo real, procesarla y tomar decisiones sobre hacia dónde orientarse

y dirigirse, teniendo en cuenta factores como obstáculos, orientación y posición.

Podemos catalogar los robots móviles, según su lugar de operación, es decir en tres

tipos, siendo estos vehículos terrestres,submarinos y aéreos.

1.0.1. Robots móviles superciales

Como su nombre lo indica este tipo de robots operan en supercies como carreteras,

caminos, terrenos irregulares, en interiores como almacenes o fábricas o en la supercie

fuera del planeta ,como en la luna o marte. Estos a su vez se pueden clasicar según su

forma de desplazarse.

Robots móviles rodantes.

1
Introducción 2

Figura 1.1: Robot mobile rodante.

Figura 1.2: Robot cuadrúpedo.

Este tipo de robots se mueven en la tierra mediante el uso de ruedas. Estos diseños se

preeren debido a que son mucho mas simples que los diseños con patas, consumen

menos energía y desde el punto de vista del control se requiere menos esfuerzo de

control, debido a su mecánica simple y a la reducción de problemas de estabilidad.

Robots de patas

Este tipo de robots están diseñados para moverse utilizando patas, imitando el

movimiento de animales cuadrúpedos o el movimiento propio del ser humano. Su

diseño y funcionalidad pueden variar considerablemente dependiendo del propósito

especíco y el movimiento a imitar.

Robots tipo oruga Los robot de este tipo se inspiran en el movimiento de los insectos,

reptiles o vehículos militares, entre otros. La similitud con los insector viene dada

por una serie de placas o ruedas dentadas interconectadas por una banda exible,

las cuales permiten que el robot se mueva de manera eciente sobre una variedad

de terrenos, incluyendo supercies rugosas, terrenos irregulares, arena, barro, nieve,

escombros u otras supercies fuera del planeta.


Introducción 3

Figura 1.3: Robot tipo oruga.

Figura 1.4: Submarino remotamente operado.

1.0.2. Robots submarinos

Los robots submarinos se basan en los submarinos y sumergibles popularizados desde

la primera guerra mundial, los cuales son navíos capaces de navegar bajo la supercie del

agua. Existen distintos tipos de robots submarinos segun su tipo de operación.

ROVs (Remote Operated Vehicles) Son vehiculos operados de forma remota que

son controlados por un operador humano fuera del agua. Estos son equipados por

cámaras,manipuladores, sensores y herramientas especializadas para llevar acabo

distintas tareas sub-acuaticas.

AUVs (Autonomous Underwater Vehicles) Son robots submarinos autónomos, los

cuales están diseñados para operar de forma independiente, sin necesidad de control

humano en tiempo real.

Gliders( Planeadores submarinos) Son robots submarinos los cuales se mueven de

manera autónoma mediante cambios en su otabilidad y alerones, se emplean en

misiones de larga duración, recopilando datos de las condiciones del agua. tempe-

ratura, salinidad y la turbidez en áreas extensas del océano.


Introducción 4

Figura 1.5: Submarino autonomo.

Figura 1.6: Planeador submarino o glider.

1.0.3. Robots aerios

Mejor conocidos como drones, son robots aeronaves las cuales vuelan sin tripulantes

abordo, estos pueden ser controlados de forma remota por un operador, o de manera

autónoma. Se emplean en una variedad de aplicaciones, que van desde el entretenimiento

y la fotografía aérea hasta nes militares, industriales, agrícolas, de búsqueda y rescate,

y de vigilancia, entre otros. Estos se pueden clasicar según su tipo de helices o rotores,

algunos de ellos son:

Drones de ala ja Este tipo de drones tienen alas rigidas en el lugar de hélices,

planean y pueden ser alimentados por medio de energia solar para lograr tiempos

de vuelo y distancias mucho mayores en comparación con drones multirotor [6].

Figura 1.7: Dron de ala ja.

Drones multirotores Los drones multirotor tienen más de una hélice. Los tipos más

comunes de este tipo de aeronaves tienen 4 rotores, conocidos como quadcopteros.

El máximo número de motores que suelen tener los drones es de 6 u 8; cuanto


Introducción 5

mayor sea el número de rotores que tenga un dron, mayor será la carga útil que

podrá levantar. Todos los drones con 6 u 8 rotores se diseñan para tener aditamentos

como cámaras y tanques con pesticidas.

Figura 1.8: Dron multirotor.

Drones hibridos de despegue y aterrizaje vertical(VTOL)

Los tipos de drones híbridos VTOL combinan los benecios de los diseños de ala

ja y basados en rotor. Este tipo de dron tiene rotores unidos a las alas jas, lo que

le permite mantenerse en el aire, despegar y aterrizar verticalmente. Esta nueva

categoría de híbridos es aún escasa en el mercado, pero a medida que avanza la

tecnología, esta opción podría volverse mucho más popular en los próximos años.

Un ejemplo de VTOL híbrido de ala ja es el dron de entrega Prime Air de Amazon

[7].

Figura 1.9: Dron hibridos de despegue y aterrizaje vertical.

Al desarrollar y trabajar con vehículos autónomos surgen problemas de estudio, fuera

del desarrollo del propio hardware, estos problemas son abordados tanto en el ámbito

académico como en el industrial. Algunos problemas de estudio son:

Planicación de rutas

La planicación de rutas implica encontrar una ruta geométrica desde una con-

guración inicial hasta una conguración dada de manera que cada conguración y

estado en la ruta sea factible (si se tiene en cuenta el tiempo) [8] .


Introducción 6

Detección y evasión de obstáculos

Es imprescindible que un vehículo autónomo sea capaz de detectar entidades me-

diante el uso de sensores, ya sea por medio de sensores ultrasónicos, ópticos o

radares, para esquivar y evitar colisiones con las mismas. Esta capacidad de evasión

y detección de obstáculos es fundamental para garantizar la seguridad tanto del

vehículo como de los objetos que puedan encontrarse en su entorno.

El estudio de este problema es fundamental en el desarrollo y la implementación de

vehículos autónomos.

Localización y mapeo SLAM (Simultaneous Localization and Mapping)

SLAM aborda el problema de percepción de un robot al navegar en un entorno

desconocido. Al navegar en el entorno, el robot busca adquirir un mapa del mismo y,

al mismo tiempo, desea localizarse utilizando un mapa. El problema de SLAM busca

generar modelos detallados del entorno del robot; por otro lado, busca mantener un

sentido preciso de la ubicación de un robot móvil [9].

Formación y colaboración entre múltiples agentes

Un sistema de robot multiagente (MARS, por sus siglas en inglés) es uno de los

temas más importantes en la actualidad. La tarea básica de este sistema se basa

en el trabajo distribuido y cooperativo entre agentes (robots). Combina dos siste-

mas importantes; sistema multiagente (MAS, por sus siglas en inglés) y sistema

de múltiples robots (MRS, por sus siglas en inglés). MARS se ha utilizado en mu-

chas aplicaciones como sistemas de navegación, planicación de rutas, sistemas de

detección, protocolos de negociación y control cooperativo [10].

Navegacion en ambientes desconocidos dinámicos.

Generalmente fuera de los ambientes de laboratorio o industriales controlados, los

ambientes en los que operan robots móviles autónomos son desconocidos y dinámi-

cos, como puede ser el caso de los taxis autónomos, los cuales operan en vialidades

concurridas. El robot debe ser capaz de planicar rutas u trayectorias con informa-

ción incompleta, evitando entes cambiantes.

En este trabajo se aborda la generación de rutas en ambientes estáticos con evacion de

obstáculos, es decir se tiene información total del entorno en el cual se desarrolla el robot.

Hay diferentes técnicas para abordar la generación de rutas o trayectorias, una de las mas

populares por su simplicidad y elegancia matemática es la de campos potenciales [11] .

Los campos de velocidad para guiado de robots se han estudiado a través de ecuaciones
Introducción 7

de hidrodinámica. Una de las técnicas mas populares para evacion de obstáculos basada

en campos potenciales es la la función repulsiva convencional.

Varias alternativas han surgido para mejorar la función repulsiva convencional, la cual

es especialmente útil para implementación en tiempo real debido a su dependencia ex-

clusiva del gradiente local y la ausencia de necesidad de información global. No obstante,

una desventaja signicativa de este enfoque radica en la presencia de mínimos locales, lo

que puede resultar en la incapacidad del vehículo para alcanzar la posición meta. Diversos

métodos basados en campos potenciales han sido desarrollados como mejoras al esquema

repulsivo básico. Ejemplos de estos incluyen el método de Objetivos No Alcanzables con

Obstáculos Cercanos (GNRON) [12], las Funciones Potenciales Harmónicas (HPF)[13], el

Campo Potencial Híbrido[14], los Campos Potenciales Articiales Evolucionarios [15], y

el Campo de Potencial Articial Mejorado [16]. Una forma de mitigar la principal des-

ventaja de los campos estáticos, es decir, la presencia de mínimos locales que puedan

obstaculizar la realización de la tarea, es mediante la adopción de campos potenciales de

velocidad.

1.0.4. Visión por computadora

La visión por computadora, es un campo de estudio el cual busca desarrollar técnicas

con el objetivo de ayudar a las computadoras a ver.

La visión computación consiste en la extracción automatizada de imágenes y el pro-

cesamiento de las mismas para la obtención de información. Por información podemos

entender cualquier cosa en este contexto, como lo son: formas, colores, posición de las cá-

maras u objetos, reconocimiento de objetos, agrupación y búsqueda de contenido, también

las deformaciones de imágenes, eliminación de ruidos y la realidad aumentada [17].

Esta área de investigación tiene más de cuarenta años de investigación, con lo cual se

cuenta con diversas aplicaciones y técnicas desarrolladas.

Reconocimiento óptico de caracteres (OCR)

La tecnologias OCR engloban un conjunto de técnicas basadas en estadística, la

forma de los caracteres, transformadas y comparación, las cuales se complementan

entre si, se emplean para distinguir formas automáticamente entre los diferentes

caracteres alfanuméricos existentes [18].


Introducción 8

Inspección robotizada

Se emplean técnicas de reconocimiento de formar, procesamiento de imagenes u

inteligencia articial para automatizar y agilizar la inspección visual de piezas de

fabricacion insdustrial, con la nalidad de garantizar la calidad de fabricación [19].

Captura de movimiento

El proceso de captura de movimiento (MoCap por sus siglas en inglés) es el proceso

de rastrear y grabar digitalmente el movimiento de un objeto o sujeto en el espacio.

Se han desarrollado diferentes técnicas y tecnologías para llevar a cabo esta tarea.

Uno de los ejemplos más comunes son los sistemas con cámaras infrarrojas (IR), las

cuales se utilizan para triangular la ubicación de cuerpos rígidos retroreectantes

adheridos al objeto de estudio [20].

Así como en el campo de la animación, en este trabajo se emplea la captura de movi-

miento para obtener la pose del móvil empleado.

1.0.5. Objetivos

El objetivo general de este trabajo es implementar un sistema de navegación para

robots móviles rodantes,mediante captura de movimiento".

[Link]. Objetivos particulares

Dentro de lo particulas se busca que el sistema sea implementado para la plataforma de

desarollo Amigobot, acontinuación se presentan los objetivos particulares de este trabajo.

Obtención de la pose del robot móvil rodante (WMR por sus siglas en ingles)

mediante el sistema de vision Optitrack.

Comunicación vía remota con el WMR.

Lograr la obtención de la pose y la comunicación de manera simultanea del WMR

en un entorno de desarollo MATLAB/SIMULINK.

Validar la integración de los elementos del sistema mediante la implementación de

una estrategia de navegación.


Introducción 9

1.0.6. Contenido

En el capitulo 2 se trata el sistema de visión empleado con la nalidad de exponer

tanto su instalación y su funcionamiento.

En el capitulo 3 se exponen las características de software y hardware, necesarias para

establecer comunicación y operar el WMR, ademas se expone el modelo cinematico el

cual es necesario para abordad problemas de navegación y control.

El capitulo 4 expone la estrategia de navegación y control empleada para validad el

funcionamiento de nuestro sistema, ademas se explica el esquema experimental empleado

para la validación del mismo.

Finalmente el los capítulos 5 y 6 exponen los resultados de validación y las conclusiones

de este trabajo.
Capítulo 2

Sistema de visión

2.1. Introducción
El objetivo de un sistema de visión o Machine vision system es crear un modelo

del mundo real, mediante imágenes. Un sistema de visión recoge información útil de

una escena a través de su proyección en dos dimensiones. Debido a que las imágenes

son proyecciones bidimensionales de un entorno tridimensional, es necesario recuperar la

información dentro de las mismas, debido a que ésta no está disponible directamente. Este

tipo de sistemas suelen utilizar cámaras u otros dispositivos de captura de imágenes, con el

n de obtener datos visuales, procesarlos mediante algoritmos y técnicas de procesamiento

de imágenes, para así analizar, extraer información y tomar decisiones basadas en dichos

datos.

Los sistemas de visión se utilizan en una gran variedad de campos con aplicaciones

diversas, algunos de los usos más importantes dentro de este trabajo son:

Seguimiento: Rastreo del movimiento de objetos a lo largo del tiempo en secuencias

de imágenes.

Medición: Cálculo de dimensiones, distancias, áreas y otros parámetros de interés

en una imagen.

Interpretación de escenas: Comprender y analizar la disposición espacial de los ob-

jetos en una imagen para extraer información más completa.

10
Sistema de visión 11

Navegación autónoma: Permitir a vehículos autónomos, como drones o vehículos

terrestres, interpretar su entorno y tomar decisiones de navegación.

En este trabajo se emplea uno de dichos sistemas con la nalidad de estimar la posición

de un vehículo terrestre y abordar la temática de la navegación autonoma.

Sistema de visión Optitrack


En este traabajo se emplea el sostema de vision Optitrack, esta es la marca mas

conocida de NaturalPoint Inc, empresa especializada en el desarrollo y fabricación de

sistemas de Motion Capture o captura de movimiento. Fue fundada en 1996, tiene sede

en Corvallis, Oregon, Estados Unidos de América.

Componentes del sistema Optitrack

El sistema de visión Optitrack se compone de distintos componentes, tanto de hardware

como de software, los cuales se presentan a continuación.

Camaras Flex 13

El sistema emplea 6 cámaras Flex 13, de la marca Optitrack, la Figura 2.1 muestra el

tipo de cámara empleada.

Las Flex 13, son cámaras de captura de movimiento de volumen medio. Funcionan

mediante luz infrarroja de 850nm, la cual es invisible a la vista. La Tabla 2.1 muestra las

características más importantes de estas cámaras.

Estas cámaras emiten luces infrarrojas por medio de un círculo de elementos ópticos,

esta luz se emite por medio del aire y rebota en marcadores reejantes, una vez rebota en

los marcadores esta luz es captada por los sensores de las cámaras. También las cámaras

permiten visualizar las imágenes captadas en escala de grises, con la nalidad de orientar

la zona de visión de estas.

Para la colocación de cada una de las cámaras, estas son montadas en un trípode cada

una, la Figura 2.2 muestra una de las cámaras sobre su trípode.


Sistema de visión 12

Figura 2.1: Cámara Optitrack Flex 13.

Figura 2.2: Cámara Flex 13 colocada en su trípode.


Sistema de visión 13

Tabla 2.1: Características de Flex 13

Característica Valor
Resolución 1.3 MP
Latencia 8.3 ms
Precisión en 3D ±0.20 mm
Frecuencia de muestreo 120 FPS
Campo de visión 56°

Figura 2.3: Optihub 2

Optihub 2

Las cámaras se sincronizan y conectan mediante un Optihub 2, el cual es un hub que

sincroniza y alimenta cada una de las 6 cámaras con las que se cuenta.

Cada Optihub permite conectar 6 cámaras. La Figura 2.3 muestra la vista frontal del

HUB con sus conexiones USB para cada una de las cámaras.

En la Figura 2.4 podemos ver cómo espaciamos cada conector de cada una de las

cámaras. Debido a que se tienen 6 cámaras, dividiremos en grupos de 3, para así conectar

cada grupo a un HUB.


Sistema de visión 14

Figura 2.4: Vista frontal Optihub 2

1 2 3

Figura 2.5: Vista trasera Optihub 2

La Figura 2.5 muestra los cables y puertos necesarios para llevar a cabo la sincroniza-

ción entre los 2 hubs utilizados. Los números que aparecen en la gura hacen referencia

a las siguientes conexiones.

1. Conexión de voltaje: Cada HUB es alimentado por una fuente de voltaje de 24VCD.

2. Conexión de datos USB a la computadora: Este cable lleva la señal de salida de

cada HUB a nuestra computadora.

3. Cable de sincronización: Este cable nos permite sincronizar la señal entre dos HUB,

para que las cámaras funcionen al unísono.

Una vez se tengan colocadas las cámaras y conectadas a cada uno de los HUBS, será

necesario conectar a la computadora el cable USB de cada uno de los HUBS. También es

necesario emplear el Software Motive para realizar el SETUP del sistema de visión.
Sistema de visión 15

Figura 2.6: Logo Motive Optitrack.

Motive Optitrack

La misma marca Optitrack nos proporciona un software para realizar tanto la iniciación

del sistema de cámaras, como captura de movimiento, este siendo Motive. La Figura 2.6

muestra el logo del programa.

La versión utilizada de este software es la 1.10.1, con fecha de diciembre del 2016. Esta

se puede obtener a través del siguiente enlace: [Link]


software/Motive/Motive_1.10.1_Final_x64.exe

Este programa, requiere tanto de una clave serial, como de una llave sica usb para su

activación y uso.

La Figura 2.7 muestra la interfaz de motive con la cual contaremos al iniciar el pro-

grama.

Conguración y calibración del sistema de visión


Una vez que se han colocado las cámaras y se ha conectado todo el sistema, es in-

dispensable realizar el proceso de calibración. El proceso de calibración de una cámara

es necesario para la obtención de información 3D a partir de imágenes 2D de la escena.

Existen diferentes técnicas basadas en fotogrametría y auto-calibración. Como resultado

se obtienen los parámetros intrínsecos y extrínsecos de la cámara [21]. Asi, al calibrar,

logramos que el software estime la ubicación de las cámaras, además de denir el origen

del sistema de referencia en ese momento. Con el origen establecido, Motive será capaz

de estimar la posición relativa de los objetos distinguidos mediante marcadores ópticos.


Sistema de visión 16

Figura 2.7: Interfaz de Motive Tracker.


Para realizar la calibración, es necesario crear un proyecto nuevo, es indispensable

tener tanto el nombre del proyecto como la ruta de este bien presentes.

Pasos para calibración

Para iniciar la calibración, es necesario retirar todos los marcadores y objetos que

reejen la luz infraroja del área de trabajo, para evitar errores al momento de iniciar la

calibración.

1. Orientar las cámaras.

Es fundamental para el buen funcionalmiento del sistema que el campo visual de las

cámaras cubra todo el espacio de trabajo. Para ello en Motive hay que seleccionar

cada cámara en la ventana del lado izquierdo, como se ve en la Figura 2.7. En la

sección Preset se tiene que seleccionar la opción Aiming. Una vez echo lo anterior

se debed disminueir al mínimo el número de cuadros por segundos empleando la

barra deslizante etiquetada con FPS (frames per second), y asumentar al máximo

el valor de exposición con su correspondiente marcada con EXP.

La Figura 2.8 muestra la visualización del área de trabajo al momento de realizar el

acomodo de las cámaras una vez que se ha congurado el software con las opociones

mencionadas anteriormente. Esta visualización permite orientar adecuadamente las

cámaras.
Sistema de visión 17

Figura 2.8: Visualización de área de trabajo Motive.

Figura 2.9: Bara de calibración Optiwand CW-500.

2. Calibración

La calibración es fundamental para estimar la posición del objeto marcado, para

llevar a cabo la calibración es necesario emplear una vara de calibración, conocida

como Optiwand, incluida en el paquete Optitrack.

La vara de calibración de la Figura 2.9 una estructura metalica en forma de T a la

que se le colocan tres marcadoreas con una distribución conocida.


Sistema de visión 18

Figura 2.10: Vista de cámaras durante la calibración.

Para iniciar la calibración es necesario presionar el botón Start Wanding, el cual

se encuentra en la pestaña de Camera Calibration ubicada en la sección del lado

derecho de la Figura 2.7. Es muy importante que no haya marcadores, dentro del

rango de visión de las cámaras, también es necesario subir el número de cuadros por

segundo al máximo y bajar el valor de exposición al mínimo, es decir lo opuesto a

lo mencionado en el punto anterior.

Una vez iniciada la calibración debemos mover la vara ensamblada, dentro del rango

de visión de las cámaras. Al momento de mover la vara a través del rango de

visión, se irán generando líneas en cada una de las vistas previas de las cámaras, la

Figura 2.10 muestra las líneas generadas por Motive al detectar la herramienta de

calibración.

Es necesario generar un número suciente líneas, como las vistas en la Figura 2.10.

Cada cámara tomará muestras de la posición de los marcadores, mientras más

muestras se tomen, menor será el error de calibración, un buen rango de muestras

para cada cámara es de unas 4000.

La Figura 2.11 muestra el numero de muestras tomadas mediante el proceso de

calibración.

Una vez tengamos una cantidad de muestras suciente, como se muestra en la Figura

2.11, presionaremos el botón Calculate. De esta manera, el programa calcula los

parámetros intrínsecos y extrínsecos de las cámaras, además de establecer el marco

de referencia y calcular el error de estimación tal como se muestra en la Figura 2.12.

En la Figura 2.12 podemos observar los errores obtenidos. La calibración tomará


Sistema de visión 19

Figura 2.11: Muestras tomadas durante calibración.

Figura 2.12: Error de calibración.

efecto al presionar el botón Apply dentro de la ventana mostrada en la misma

Figura.

3. Seleción del origen

Una vez nalizada la calibración será necesario seleccionar el punto de origen del

marco de referencia, dentro del área de trabajo. Para ello es necesaria la escuadra

con marcadores mostrada en la Figura 2.13.

Una vez que seleccionemos el origen de coordenadas en el área de trabajo, coloca-

remos la escuadra de la Figura 2.13 sobre el piso y la nivelaremos. Para nalizar,


Sistema de visión 20

daremos clic en el botón Set Ground Plate, el cual estará ubicado en la parte superior
de una ventana del lado derecho dentro de la interfaz de Motive.

Creación de Rigidbody
Una de las funciones del software Motive es que permite identicar y estimar las poses

de objetos de interés usando los marcadores que reefan la luz infraroja. Para lograr esto

es necesario colocar los marcadores sobre el cuerpo del vehículo a seguir. Una vez que se

han agregado al objeto de interés es necesario posicionar el robot en el área de trabajo.

Posteriormente, se procede a selecionar cada uno de los marcadores del objeto, para

ello dentro de la ventana Perspective View en Motive, se presiona el boton izquierdo del

ratón sobre cada marcador azul mientras se preciona la tecla Ctrl, seguido se presiona

el boton derecho y se selecciona la opción Create Rigidbody. La Figura 2.13 muestra

un ejemplo de los marcadores agrupados de un objeto creado siguiendo el procedimiento

descrito anteriormente.

Figura 2.13: Objeto rigido creado.

Una vez se ha denido el objeto rígido, es necesario tomar en cuenta el nombre del

objeto, que se establece por defecto como Rigidbody1, este identicador es necesario para
congurar la adquisición de datos en las aplicaciones del sistema de visión.
Sistema de visión 21

Figura 2.14: Estimación de pose del objeto creado

Como se menciono anteriormente el software del sistema de visión estima la pose del

objeto que se ha denido. En la Figura 2.14 se muestran los valores de pose estimados,

estos valores son accesibles atravez del menu view/project, esto abre la ventana de assest,

lo cual nos muestra los objetos creados, se selecciona el objeto creado, como se muestra

en la gura, nalmente se selecciona Real-Time Info, lo cual muestra los valores de pose.
Capítulo 3

WMR Amigobot

3.1. Introducción
Hay una gran cantidad de vehículos móviles empleados actualmente. Estos son usados

tanto en ambientes domésticos como en ambientes industriales, y se han vuelto indis-

pensables en campos como la exploración marítima, la fotografía aérea, la entrega de

mercancía, el manejo de mercancías en almacenes o la nueva moda de taxis autónomos,

la cual está en auge sobre todo en Estados Unidos.

Existen diferentes clases de vehículos autónomos, los podemos clasicar en vehículos

terrestres, aéreos y marítimos según su ambiente de trabajo. El sistema de navegación

propuesto en esta tesis se aplicó en vehículos terrestres, sin embargo, se puede aplicar en

diversos tipos de robots móviles.

El principal enfoque del sistema presentado en este trabajo es un vehículo móviles ro-

dantes o WMR(por sus siglas en ingles). El vehículo estudiado y puesto en operación para

validar el sistema de navegación es el robot Amigobot de la marca Adept MobileRobots.

3.2. Robot móvil rodante Amigobot


El robot móvil rodante Amigobot, es un vehículo terrestre tipo uni-ciclo de la familia

Pioneer. Es un robot pequeño desarrollado con nes de investigaciÓn y desarrollo. La

Figura 3.1 muestra el WMR Amigobot.

22
Capitulo 3 WMR Amigobot 23

Figura 3.1: Robot móvil rodante Amigobot

Este robot cuenta con dos ruedas de dirección y una tercera rueda de estabilidad. El

cuerpo del Amigobot está hecho de policarbonato, el cual es soportado por un chasis de

aluminio. La Figura 3.2 muestra las dimensiones y materiales en los cuales esta construido

el robot.

Cuerpo de policarbonato

Ruedas de goma Chasis de aluminio

Figura 3.2: Dimensiones y materiales del robot Amigobot [22].

3.3. Características y Hardware


La plataforma Amigobot basa su sistema en un microprocesador Hitachi H8 a 20

MHz. Este sistema incluye memoria FLASH de sólo lectura, donde se guarda el sistema
Capitulo 3 WMR Amigobot 24

operativo y todo el software necesario para la operación de los sensor.

Sistema Operativo: AmigOS

El sistema operativo AmigOS gestiona todos los sistemas y componentes de bajo nivel

del WMR, incluyendo la ejecución de sonares, motores y la lectura de los codicadores

rotativos de las ruedas, por mencionar algunas tareas del SO. Al igual que muchos sistemas

operativos, AmigOS es invisible para la mayoría de los usuarios, realizando su trabajo

en segundo plano. Sin embargo, es una tecnología amigable al usuario, su interfaz está

disponible libremente para el comando y control a través de su propio software.

El paquete del robot incluye una serie de programas con los cuales el usuario puede

congurar, probar y operar de manera autónoma el robot. Estos programas hacen funcio-

nar los motores y el sonar incorporados y permiten al robot moverse de manera inteligente

por sí mismo.

Sensores y actuadores

Al ser un robot para investigación y desarollo, Amigobot presenta una variedad de

sensores y actuadores los cuales serán descritos a continuación. La Figura 3.3 muestra los

componentes y controles en el cuerpo del robot.

El robot tiene dos llanantas sólidas de cuatro pulgadas. Cada una es controlada por un

motor reversible de CD. La potencia de conducción se modula diferencialmente en ancho

de pulso para un control preciso e independiente del movimiento de translación (adelante

y atrás) y el movimiento de rotación (en sentido horario y en sentido antihorario).

El robot cuenta con una tercera rueda la cual sirve de soporte trasero pasivo para el

equilibrio y, a diferencia de muchos otros robots, puede girar en su propio eje para no

quedarse atascado en las esquinas.

Cada motor incluye un codicador de alta resolución, el cuál es utilizado por el micro-

controlador del robot para determinar las velocidades inmediatas de traslación y rotación

del robot. Las lecturas del codicador también ayudan a determinar la distancia que el

robot ha recorrido y la dirección en la que se dirige.

El AmigoBot estándar viene equipado con ocho sonares, éstos se ubican en los seis

discos dorados perforados alrededor de la parte delantera y los dos en la parte trasera. La
Capitulo 3 WMR Amigobot 25

LEDs
indicadores Vista superior
Vista
lateral
Pulsadores
de control

Bahía de
expansión

Bocina

Llanta de equilibrio Llanta de dirección

Interruptor de encendido,
puerto de carga, puerto serial
del sistema. Llantas de
dirección Vista inferior

Llanta de equilibrio Serial


Ethernet

Figura 3.3: Amigobot componentes y controles [22].

Figura muestra la ubicación y ángulos de cada uno de los sonares. El microcontrolador

de AmigoBot utiliza los sonares de manera similar a un murciélago, no sólo para detectar

objetos en la parte delantera, los lados y la parte trasera, sino también para determinar

a qué distancia se encuentran (estimación de distancia).

Ajuste de
sensibilidad

Figura 3.4: Ubicación y orientación de los sonares en Amigobot[22].


Capitulo 3 WMR Amigobot 26

3.4. Comunicación y conectividad


El robot Amigobot no tiene comunicación wireless, cuenta únicamente con comunica-

ción serial mediante un puerto RS232. Este puerto se utiliza para congurar parámetros

internos, como las velocidades máximas y las constantes de su controlador PID interno,

así como para recibir las velocidades necesarias para realizar la acción requerida.

Para solventar esta limitación, el robot cuenta con un módulo Lantronix WiBox2100E,
el cual es un módulo serial a WiFi. Este módulo permite acceder, controlar, monitorear

o compartir virtualmente cualquier dispositivo o equipo serial en una red inalámbrica

802.11b/g de forma remota.

Esta solución está bien integrada, ya que combina un sistema operativo, un servidor

web integrado, una pila completa de protocolo TCP/IP con un transceptor 802.11b/g

que admite seguridad WEP, WPA y 802.11i/WPA2-Personal, y dos puertos serie de alta

velocidad en un paquete compacto y pequeño [23].

3.5. Operación y manejo de Amigobot


En esta sección se plantea el método utilizado para la puesta en marcha y operación

del robot.

3.5.1. ROS/ARIA

El robot funciona mediante la interfaz de programación de aplicaciones (API por sus

siglas en ingles) ARIA (Adept MobileRobots Advanced Robotics Interface for Applica-

tions). ARIA es un interfaz de programación orientada a objetos para los los robots de

la línea intelligent mobile robots, de la marca Adept MobileRobots (y ActivMedia),

los cuales incluyen los robots móviles Pioneer 2/3 DX and AT, PeopleBot, PowerBot,

AmigoBot, PatrolBot/Guiabot, Seekur, SeekurJr y Pioneer LX.

Desarollado en C++, ARIA proporciona una forma de comunicarnos y administrar el


microcontrolador dentro del robot Amigobot, además de acceso a los sensores y actuadores

de la plataforma. ARIA se proporciona como software de código abierto bajo la Licencia

Pública General de GNU. Esto permite ver, modicar y reconstruir la biblioteca ARIA
Capitulo 3 WMR Amigobot 27

según se desee, siempre y cuando el software desarrollado con ARIA cumpla con los

requisitos de la licencia.

Por otra parte, el Sistema Operativo de Robots (ROS, por sus siglas en inglés) es

un conjunto de bibliotecas de software y herramientas de desarrollo para robots. Estas

bibliotecas incluyen desde controladores hasta algoritmos de última generación para de-

sarrolladores, siendo estas herramientas de código abierto.

El método para enviar consignas de control o parámetros de conguración al WMR

Amigobot fue la implementación ROS/ARIA. Este método requiere únicamente una

computadora con un SO Linux, el cual sea compatible con la versión 1 de ROS y el

paquete .deb de instalación de ARIA. En el caso de este trabajo se estableció la comu-

nicación empleando distribuciones de Debian y Ubuntu, tanto en versiones de escritorio

como en Raspberry Pi.

Existen distintas maneras en las cauales se pueden instalar las funciones de ROS/A-

RIA. En esta sección se describen dos métodos para su instalación, el primero en una

computadora monoplaca Raspberry pi 3 y el segundo en una computadora personal. En

ambos casos el primer paso es instalar el sistema ROS 1 en la versión selecionada de

Linux.

Para realizar la instalación del sistema operativo, consulta el sitio web de DEBIAN

10 en [Link] y para UBUNTU en Raspberry Pi,


visita [Link]

La forma más sencilla de instalación de ROS Noetic(la ultima versión de ROS 1)

en Raspberry pi, es descargando la imagen de Ubuntu 20.04 LTS + GDM3 desde la

página de Ubiquity Robotics, véase [Link]


pi_image_downloads, y grabar la imagen en una microSD para ser utilizada como sistema
de arranque por la Raspberry Pi, esto se puede hacer mediante el software Etcher, véase

[Link] tambien es posible hacerlo usando el software Raspberry

Pi Imager, véase [Link]

Por otra parte la instalación de Ros Noetic en versiones de escritorio de Linux requiere

una secuencia de pasos más extensa, a continuación se describe la misma, la cual fue

probada tanto en DEBIAN 10 como en UBUNTU 20.04.

Es necesario ejecutar las instrucciones listadas a continuación en la terminal del siste-

ma.
Capitulo 3 WMR Amigobot 28

1. Se agrega el repositorio de software ROS a la lista de fuentes apt en Linux usando

el comando sudo para ejecutar la instrucción como administrados, por lo cual sera

necesario autenticar la cuenda de administrador.

$ sudo sh -c 'echo "deb [Link] $(lsb_release -sc) "


\ > /etc/apt/[Link].d/[Link]'

2. Se agregan las rmas digitales para la identicación de los paquetes.

$ sudo apt-key adv --keyserver hkp://[Link] \


--recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3. Se actualiza el sistema.

$ sudo apt update

4. Se instala ROS.

$ sudo apt install ros-noetic-desktop-full

5. Se incluye el ambiente de ejecución.

$ source /opt/ros/noetic/[Link]

6. Se instalan los paquetes de Python necesarios para ROS.

$ sudo apt install python3-rosdep python3-rosinstall python3-rosinstall- \


generator python3-wstool build-essential
$ sudo apt install python3 - rosdep

Finalizada la instalación de ROS se valida su correcto funcionamiento mediante las

siguientes instruciones ejecutadas en la terminal.

Se inicializa el sistema de gestión de dependencias rosdep


$ sudo rosdep init

Se actualiza el sistema de gestión de dependencias.

$ rosdep update

Una vez que ROS está funcionando adecuadamente, se procede con la instalación de

ARIA. Para ello se ejecutan los comandos listados a continuación.


Capitulo 3 WMR Amigobot 29

1. Se crea un entorno de trabajo Catkin, con la nalidad que la terminal acceda algunos
comandos especícos de ROS.

$ mkdir -p ~/ catkin_ws / src


$ cd ~/ catkin_ws / src
$ catkin_init_workspace
$ cd ~/ catkin_ws
$ catkin_make

2. Cada vez que sea necesario copilar paquetes empleando el espacio Catkin, se debe

ejecutar el script especial devel/[Link].

$ cd catkin_ws
$ . devel/setup . bash

Teniendo ROS instalado se procede a instalar los paquetes necesarios para el uso de

ARIA, el proceso de instalaciòn es igual al anterior.

1. Se clona el repositorio de Aria mediante el comando git clone.

$ git clone [Link]

2. Se instala el paquete de ARIA empleando el comando dpkg.

$ sudo dpkg -i libaria_2.9.4+ubuntu16_amd64.deb # install Aria

3. Clonamos de github las bibliotecas necesarias para poder emplear Aria en ROS en

el espacio Catkin y copilamos el espacio de nuevo.

$ cd ~/catkin_ws/src
$ git clone [Link]
$ cd ~/catkin_ws
$ catkin_make --force-make

Para inicializar ROS/ARIA y conectarse al Amigobot se ejecutan los siguientes co-

mandos en una terminal.

$ roscore
$ rosrun rosaria RosAria _port:=[Link]:8101

Estos comandos inicializan ROS y seguido se llama al API de ARIA para conectar con

el robot. Nótese que el comando roscore no se debe ejecutar si se está emplendo la versión
Capitulo 3 WMR Amigobot 30

de Ubuntu desarollada por Ubiquity Robotics. Al momento de emplear el comando rosrun


rosaria para conectar con el robot se debe tener encuenta la ip y el puerto de red al cual

se va a llamar, esto varía según la conguraciòn del módulo de red Lantronix.

3.6. Modelo Cinemático


En el caso de los robots móviles de tipo uni-ciclo es de gran utilidad conocer el modelo

cinemático al momento de diseñar controladores o estrategias de navegación, por lo cual

a continuación se describe dicho modelo el cuál corresponde a la plataforma de pruebas

usada en este trabajo.

Figura 3.5: WMR Amigobot y sus marcos de referencia.

El modelo cinemático de un vehículo tipo uni-ciclo, bajo la restricción no holonómica

de rodadura pura y sin deslizamiento, se expresa de la siguiente manera

q̇ = S(q)v (3.1)

donde q(t), q̇(t) ∈ R3 se denen como

h iT h iT
q = xc yc θ q̇ = ẋc ẏc θ̇ , (3.2)

denotando xc (t), yc (t) ∈ R la posición al centro de masa del vehículo con respecto de un

marco de referencia {I} en coordenadas cartesianas y θ(t) ∈ R representa la orientación


Capitulo 3 WMR Amigobot 31

del vehículo con relación al marco de referencia {B}, como se muestra en la Figura 3.5.

Las variables ẋc y ẏc denotan las componentes cartesianas de la velocidad lineal v(t) ∈ R1
y la velocidad angular ω(t) ∈ R, respectivamente, por lo que la matriz S(q) ∈ R2×3 se

dene como  
cos θ 0
 
S(q) =  sin θ 0

 (3.3)

0 1

y el vector de velocidad v(t) ∈ R2 se dene como

h iT
v= v ω (3.4)

Nótese que se asume que el centro de rotación y el centro de masa coinciden.


Capítulo 4

Esquema de navegación

4.1. Introducción
En este trabajo, proponemos un sistema de navegación con el cual es posible aplicar

controladores y estrategias de navegación a la plataforma de pruebas Amigobot. El sistema

propuesto es adaptable a otras plataformas de prueba, como drones u otros robots móviles

en general.

Este capítulo describe el proceso a seguir para realizar la integración de los elementos

vistos en los capítulos anteriores, con el n obtener el sistema de navegación enfocado en

robots móviles rodantes.

4.2. Campos potenciales de velocidad


La generación de trayectorias es un problema fundamental dentro de la navegación au-

tónoma. El sistema de navegación propuesto en este trabajo permite abordar este y otros

problemas, tales como la evasión de obstaculos, la optimización de rutas, la navegación

en entornos dinamicos, entre otros.

El sistema propuesto aborda el problema de la generación de trayectorias y evasión de

obstaculos, por lo cual se empleó el algoritmo de capos potenciales de velocidad.

La idea básica detrás de los campos potenciales es tratar al robot como una partícula

puntual en el espacio Euclidiano bajo la inuencia de un campo potencial articial U. El

32
Capitulo 4: Esquema de navegación 33

campo U se construye de tal manera que el robot es atraído a su posición deseada mientras

es repelido por los obstáculos. Este método requiere únicamente información de gradiente

local, es decir, sólo hace uso de la posición actual del vehículo. Su matemática es sencilla

y elegante, por lo cual es adecuado para implementarse en tiempo real. No obstante,

este método presenta el problema de mínimos locales. En la Figura 4.1 se muestra un

campo potencial, donde la partícula, en cierta conguración, puede quedar atrapada en

un mínimo local, es decir una barrera, que le impida llegar a la posición meta.

En la mayoría de los planicadores de ruta por campos potenciales, el campo U se

construye como un campo aditivo, que consta de un componente que atrae al robot a su

posición deseada y un segundo componente que repele al robot de los obstáculos.

La planicación de ruta puede verse como un problema de optimización, a saber, el

problema de encontrar el mínimo global de U empezando desde una condición inicial,

y a menudo se utilizan métodos de descenso del gradiente para encontrar una solución.

En física, un campo de fuerza conservador se puede escribir como el gradiente negativo

de una función potencial. Por lo tanto, podemos interpretar el gradiente en descenso

análogamente como una partícula que se mueve bajo la inuencia de la fuerza F = −∇U .

Figura 4.1: a) Campo potencial con la presencia de una barrera, b) Contorno del
campo potencial con la presencia de una barrera [24].

4.3. Estrategia de navegación


La estrategia de navegación presentada a continuación está basada en la teoría de

campos de velocidad, los cuales se encargan de generar una trayectoria deseada, y que

al seguirla el vehículo evada obstáculos. La ruta deseada propuesta en este trabajo es


Capitulo 4: Esquema de navegación 34

una ruta circular. Para generar un campo de velocidad en una ruta circular, es necesario

calcular dos campos vectoriales: uno de aproximación Vac y otro tangencial. El campo de

aproximación está denido por el vector que apunta derectamente a la ruta, y se obtiene

mediante la sustracción normalizada del punto más cercano a la trayectoria, como se

describe en [25].Se desea seguir una ruta circular con radio rtr y con centro localizado en

el punto (ox , oy ), el cual está denido por

(x − ox )2 + (y − oy )2 = rtr
2
(4.1)

Para obtener el campo de aproximación es necesario calcular el punto más cercano

desde la posición del vehículo al círculo que describe la ruta deseada. Este punto es

calculado por
p 
mı́n (x − xtr )2 + (y − ytr )2 (4.2)

donde xtr y ytr son todos los puntos que conforman la ruta circular, es decir, el grupo de

puntos que satisfacen la ecuación (4.1). Ahora, denamos los vectores

" # " #
x̄ x − ox
ξ¯ = = (4.3)
ȳ y − oy

donde x̄ y ȳ denotan la diferencia entre cualquier punto del área de trabajo y el centro

de la ruta circular. A su vez, x̃ y ỹ son los errores de posición desde cualquier punto

del espacio de trabajo hasta su punto más cercano dentro de la trayectoria deseada. Las

coordenadas del punto más cercano a la trayectoria se obtienen como

xcl = ox + rtr cos(αcl ) (4.4)

ycl = oy + rtr sin(αcl ) (4.5)

donde αcl denota el vector formado por la posición actual y el punto más cercano a la ruta.
Tomando las ecuaciones (4.4)-(4.5) para calcular xcl y ycl , podemos denir la distancia

entre la posición actual y el punto más cercano a la ruta como

˜ =
p
∥ξ∥ x̃2 + ỹ 2 (4.6)

El ángulo αcl se obtiene mediante

αcl = atan2(y, x) (4.7)


Capitulo 4: Esquema de navegación 35

El campo de aproximación se dene como

ξ˜
Vac = (4.8)
˜
∥ξ∥

Denotamos el vector de las derivadas parciales de xcl e ycl como vc = [Vxc Vyc ]T ,
entonces el campo tangencial es denido por

vc
Vtg = (4.9)
∥vc ∥

El campo de velocidad se obtiene mediante la suma ponderada normalizada del campo

de aproximación y tangencial obtenidos en (4.8) y (4.9), respectivamente.

F1 Vac + F2 Vtg
V= (4.10)
∥F1 Vac + F2 Vtg ∥

donde F1 y F2 son funciones de la distancia euclidiana entre un punto en el espacio y la

trayectoria deseada, que vienen dadas por

2
F1 = − 1, F2 = 1 − F1 (4.11)
1 + e−γ∥ξ̃∥

4.3.1. Campo de evasión

Figura 4.2: Flujo ideal alrededor de un cilindro.


Capitulo 4: Esquema de navegación 36

El método de evasión de obstáculos se basa en el uso de la teoría hidrodinámica,

especícamente mediante el ujo ideal generado alrededor de un cilindro, como se muestra

en la Figura 4.2.

El ujo plano en estado estacionario se dene mediante un campo de velocidad

" #
u(x, y)
v(p) = (4.12)
v(x, y)

en el punto
" #
x
p= ∈Ω (4.13)
y

donde Ω ⊂ R2 es el dominio ocupado por el uido.

Se propone utilizar un obstáculo circular, el cual interere con el campo de ujo vec-

torial, donde (xo , yo ) es la posición central del obstáculo, con radio ro . Denimos el error

de posición con respecto del centro del obstáculo como

" # " #
x − xo x̃o
ξ̃ e = = (4.14)
y − yo ỹo

La función potencial de velocidad propuesta para un uido ideal alrededor de un obstáculo

circular es
r2
 
ϕ(ξ̃ o ) = 1+ 2 o 2 (x̃o cos β + ỹo sin β) (4.15)
x̃o + ỹo
donde

β = atan2(Vy , Vx ) (4.16)

es el ángulo del vector de campo de velocidad en ese punto. La velocidad de ujo alrededor

del cilindro está denida como el gradiente de la función ϕ, es decir, Vev = ∇ϕ. Entonces,
la componente x del campo vectorial de velocidad es

ro2 ro2
Vevx = − (x˜o cos β + y
˜o sin β)x˜o + (1 + ) cos β (4.17)
x̃2o + ỹo2 x̃2o + ỹo2

La función de velocidad en la coordenada y es

ro2 ro2
Vevy = − (x˜o cos β + y
˜o sin β)y˜o + (1 + ) sin β (4.18)
x̃2o + ỹo2 x̃2o + ỹo2
Capitulo 4: Esquema de navegación 37

Entonces, el vector velocidad para la maniobra evasiva es

" #
Vevx
Vev = (4.19)
Vevy

Para visualizar el efecto del campo evasivo, se puede decir que éste redirige la dirección

del vector del campo atractivo, modicando la referencia de velocidad para intentar evitar

el obstáculo. Por lo tanto, el vector de velocidad evasiva se reemplaza por el vector de

velocidad anterior y también se normaliza

Vev
V= (4.20)
∥Vev ∥

Este vector de velocidad se denió mediante coordenadas rectangulares x e y ; sin embargo,


para dar dichas referencias de velocidad al vehículo, se necesita el vector de velocidad en

componentes polares de magnitud y ángulo.

Cabe aclarar que el vector de velocidad V dado por (4.10), es obtenida en ausencia de

obstáculos en el ambiente de trabajo. Posteriormente, el vector de velocidad es actualizado

de manera iterativa empleando (4.16)(4.20) por cada obstáculo en el ambiente.

4.4. Estrategia de control


En el capítulo anterior se describió el modelo cinemático del WMR. En las ecuaciones

(3.1), las velocidades del robot móvil están relacionadas con el vector de velocidad lineal y

angular [v, ω]. En este modelo, las variables v y ω son las entradas o consignas de control.

A partir del campo de velocidad V generado, la entrada de velocidad lineal se obtiene

mediante la norma euclidiana del vector de velocidad V, es decir

q
v= Vx2 + Vy2 (4.21)

El ángulo asociado con el vector de velocidad V determina el ángulo de dirección deseado

θd ,
θd = atan2(Vx , Vy ) (4.22)

por lo que, para hacer un control de seguimiento de velocidad angular, se debe obtener

primero la derivada del vector V , mediante lo cual se puede calcular la velocidad angular
Capitulo 4: Esquema de navegación 38

deseada
Vx V̇y − Vy V̇x
ωd = (4.23)
||V ||2

Finalmente, la velocidad angular usada como entrada de control está dada por

ω = kp (θd − θ) + ωd + ki (ei ) (4.24)

donde kp es la ganancia proporcional positiva. ki es la ganancia integradora y ei es el

error integral.

La ruta propuesta para validad el sistema de navegación es una ruta circular con centro

un centro predenido y la evación de un obstáculo circular jo, es decir no se mueve y

se toma encuenta al momento de denir la ruta a partir de los campos potenciales de

velocidad.

4.5. Esquema experimental


El sistema de navegación implementado en este trabajo está compuesto del hardware

y software que se menciona a continuación.

En cuestión de hardware se requiere:

Sistema de visión Optitrack.

Raspberry Pi 4

Plataforma de pruebas Amigobot.

Router

El software necesario es el siguiente:

Optitrack Motive

MATLAB R2015 (es posible emplear hasta la versión R2017)

ROS/ARIA

La Figura 4.3 muestra el esquema de navegación experimental propuesto en este tra-

bajo.
Capitulo 4: Esquema de navegación 39

Figura 4.3: Esquema experimental de navegación.

4.5.1. Descripción del funcionamiento del sistema

El esquema de navegación implementado se compone principalmente de dos partes,

el sistema de visión presentado en el Capitulo 2 y la plataforma de pruebas Amigobot.

El primero sirve para la obtención de la posición del robot, mientras que el segundo

proporciona una plataforma de prueba en la cual es posible validar los algoritmos de

control y navegación desarrollados.

En el esquema de navegación experimental propuesto, existen distintos componentes

que interactúan para alcanzar el objetivo establecido. En la Figura 4.3 se pueden observar

de manera sencilla los distintos elementos que componen el esquema, tanto componentes

de software como de hardware. Se puede observar que el esquema de control corre en

una computadora con sistema operativo Windows. Dentro de este sistema se estima la

posición del robot por medio del software Motive y se realiza el cálculo de las entradas

de control del sistema.

La implementación del controlador y el esquema de navegación se realizó en el entorno

Simulink de MATLAB. El controlador en MATLAB obtiene la posición del robot vía


bibliotecas dinámicas .dll y bibliotecas estáticas .lib proporcionada por el software de

desrrollo de Optitrack. Una vez que se tiene la posición del robot, ésta se usa en el

cáculo de los campos de velocidad dentro de la estrategia de navegación implementada

en Simulink. Posteriormente, el algoritmo de navegación genera las consignas de control

y éstas se comparten, usando los bloques de ROS en simulink, a la estación intermedia

que permite establecer la comunicación con el robot. Cabe mencionar que esta estación

intermedia corresponde a la computadora Raspberry Pi, en la cual se tiene instaladas


Capitulo 4: Esquema de navegación 40

las herremientas de ROS/ARIA. Finalmente, la estación intermedia envía al robot las

consignas calculadas para realizar la tarea establecida.

4.6. Implementación en software


La implementación de la estrategia de navegación fue desarrollada en MATLAB/Si-
mulink, como se explico en la sección anterior. La Figura 4.4 muestra el programa de

bloques con el cual se implementó la estrategia de navegación y control.

x x

tiempo From1 Vx Vx
Vx
Clock
To Workspace2 Goto
y y
ROS
From2 To workspace

1 no need to

initilaze optittrack1 v v

Goto3
x

z
w w
yaw
Goto2
pitch
Trackable_index
1 ??? roll
Trackable_index TrackableLocation
Constant4 time stamp
teta_d teta_ d
Delta Time
To Workspace13
dx/dt

dy/dt

dz/dt
Trackable_Location1 Constant yaw yaw
e_teta e_ teta
ex ex From
To Workspace14
-0.5 x_obs
Real-Time Goto1
Sync 1
Constant7 4.5 kp [int_ e]
s
Display5
Real-Time Constant5 Integrator Goto8
Synchronization1 0 y_obs
teta_dp teta_ dp
Constant8 .2 ki
ey To Workspace6
ey
Constant6
.30 r_obs Goto7 Control

Constant9
Referencia

ex In1

From8 Out1

ey In2 Error de trayectoria


From9
Error

Figura 4.4: Modelo en Simulink para la implementación de la estrategia de navegación.

Esta implementación se compone de diversos bloques, los cuales realizan tareas nece-

sarias para la correcta generación y aplicación de la estrategia de navegación y control. A

continuación se presenta el funcionamiento de cada uno de los bloques empleados. Como

se observa en la Figura 4.4 tenemos 4 bloques o subsistemas principales, los cuales se

explican a continuación.
Capitulo 4: Esquema de navegación 41

4.6.1. Bloque: TrackableLocation

Este subsistema se basa en el program Natural Point Motive (Optitrack) API interface
to Matlab and Simulink 64bit by Or Hirshfeld, desarollado por [26]. Este programa permite
inicializar la comunicación con el software Motive, empleando sus bibliotecas dinámicas

y estáticas con el n de estimar la posición y velocidad del robot aparir de los datos

proporcionados por Motive.

El subsistema realiza 3 funciones principales:

Estimar la posición del robot por medio del sistema de visión.

Corrige el sistema de referencia y transforma el formato del angulo yaw de giro, el

cual es de -180° a 180°, al formato de 0° a 360°.

Calcula la velocidad estimada del robot por medio de la posición estimada por el

sistema de visión.

Para mas información acerca de este bloque y sus subsistemas y funciones vease el Apen-

dice B.

4.6.2. subsistema: vel_eld_WMR

Este bloque contiene las funciones que calculan los campos potenciales de velocidad y

la ruta a seguir por el robot tomando en cuenta:

Una velocidad lineal Kv .

Las coordenadas (xobs , yobs ) del obstáculo y el radio robs del mismo.

Las coordenadas (xc , yc ) y radio rc de la ruta circular a seguir.

La poderación gama, la cual se utiliza para calcular el campo de velocidad V,


empleado la Ecuación (4.10).

Para mas información acerca de este bloque y sus subsistemas y funciones vease el Apen-

dice C.
Capitulo 4: Esquema de navegación 42

Subsistema: Control

Este bloque o subsistema es el encargado de generar las consignas de control, las

cuales nalmente son enviadas al robot mediante el sistema ROS, este bloque basicamente

contiene a la función de control y toma en cuenta:

Las velocidades Vx y Vy calculadas a partir del campo de velocidad, es decir la

referencia de velocidad calculada por el bloque vel_eld_WMR.

Las derivadas temporales de las velocidades, siendo estas Vxp y Vyp .

El angulo de giro yaw.

La constante proporcional Kp y la constante integral ki .

Note que la entrada de control asociada con la velocidad angular ω pasa por un bloque

de saturación antes de ser aplicada al robot. Esto debido a que las ganancias kp y ki
del controlador fueron selecionadas para optimizar el desempeño en erores pequeños de

orientación, por lo cual errores grandes generan velocidades angulares de alta magnitud

causando inestabilidad al sistema.

Para mas información acerca de este bloque y sus subsistemas y funciones vease el

Apendice D.

Subsistema: ROS

Este subsistema contiene las funciones necesarias para enviar las consignas de control

al intermediario, es decir, el sistema que ejecuta ROS/ARIA. Este subsistema realiza las

siguientes funciones:

Se genera el mensaje a enviar vía ROS, seleccionando el tipo de mensaje. Para

enviar las consignas, se emplea el mensaje de tipo geometry_msgs/Twist.

Se incluyen las consignas de control y el tipo de mensaje a enviar mediante un

bloque Bus Assignment.

Finalmente, se envía el mensaje seleccionando el módulo de software de ROS, el cual


será encargado de enviar las consignas y que estas sean ejecutadas por el robot. Este

módulo es RosAria/cmd_vel.
Capitulo 4: Esquema de navegación 43

Ejecución del programa

Antes de ejecutar el programa y asegurarse de que el robot cumpla con la tarea pro-

puesta, es necesario seguir los siguientes pasos para ejecutar el programa sin errores. A

continuación, se presentan los pasos:

1. Ejecutar en Matlab el script initlaze_startup_parametres_setup_motive_1_5.m

que se encuentra en el directorio del proyecto. Nótese que la llave física USB del pro-

grama Motive debe estar conectada para tener acceso a las bibliotecas del mismo.

Véase el Apéndice para obtener más información sobre el script.

2. Ejecutar el script script_optitrack.m también en el mismo directorio. Este script

vericará que se haya inicializado de manera correcta el sistema de visión. Véase el

Apéndice para más detalles.

3. Finalmente, se debe ejecutar el programa en Simulink que contiene los subsistemas

ya mencionados. En el caso de este trabajo, el programa en Simulink es Con-

trol_cp_WMR.slx y se encuentra en el directorio de ejecución de los scripts men-

cionados anteriormente. Este directorio también incluye las bibliotecas, archivos de

inclusión del programa base propuesto por [26], además del proyecto con el Rigidbody
y la calibración explicada en el Capítulo 2.
Capítulo 5

Resultados de validación

El controlador de orientación propuesto y llevado acabo en Matlab/simulink fue pro-

bado bajo las condiciones de prueba propuestas en el capitulo anterior.

Como se menciono con anterioridad la ruta propuesta para validad el correcto funcio-

namiento del sistema propuesto, fue una ruta circular con las siguientes características:

Obstáculo circular a esquivar en las cordenadas (x, y) = (−0.5, 0.1), con un radio

r = .30m.

Trayectoria circular a cumplir en las cordenadas (x, y) = (1, 0), con un radio r=
.50m.

La velocidad Lineal del robot fue de .1m/s al momento de realizar pruebas experi-

mentales.

El controlador fue diseñado para mantener el robot en movimiento, es decir una vez

iniciado el programa el robot no se detendrá hasta que sus baterías se descarguen. A

continuación se presentan los resultados obtenidos durante la validación del sistema.

5.1. Resultados
La Figura 5.1 muestra la ruta seguida por el Amigobot. La linea azul muestra la ruta

44
Capitulo 5: Resultados de validación 45

Ruta del WMR (X,Y)

0.5
Posición en Y [m]

-0.5

-1

-1.5 -1 -0.5 0 0.5 1 1.5


Posición en X [m]

Figura 5.1: Ruta seguida por el robot.

seguida por el robot, mientras que en verde tenemos el obstáculo circular y en rojo el

circulo el cual marca los puntos sobre los cuales marcan la ruta circular deseada. Como

podemos observar en la ruta seguida por el robot

El robot esquiva perfectamente el obstáculo, pasa un poco cerca debido a que no se

generaron campos de repulsión.

El robot se mantiene cercano a la ruta propuesta, sin embargo tenemos sonás donde

el error el mayor y sonás donde se pega mejor a la ruta deseada.

La Figura 5.2 muestra la gráca de las consignas de control enviadas al robot. Podemos

observar cómo la velocidad lineal se mantiene en 0.1 m/s, mientras que la velocidad

angular permanece constante. Una vez que el robot comienza a girar sobre la ruta circular,

su velocidad angular se mantiene por debajo de los 10 grados.

En la Figura 5.3 podemos observar los errores de posición del robot en (x, y, θ). En

la gráca del error de posición podemos observar como este error se comporta de forma

sinusoidal, de manera que el error oscila entre −2cm y 2.5cm como máximo, lo cual es

aceptable para una ruta de 1m de diámetro.


Capitulo 5: Resultados de validación 46

Entrada de control: Velocidad lineal


Velocidad Lineal (m/s) 0.2

0.15

0.1

0.05

0
0 50 100 150 200 250
Tiempo (s)
Entrada de control: Velocidad Angular
Velocidad Angular (°/s)

20

10

-10

-20

-30
0 50 100 150 200 250
Tiempo (s)

Figura 5.2: Entradas de control.

La segunda gráca presentada en la Figura 5.3, muestra el error de posición en el eje

y de nuestra ruta realizada, podemos ver como este decrece, siendo que al esquivar el

obstáculo se vuelve muy alto para después ser corregido y mantenerse entre −2.3cm y

2.7cm de error.

En la tercera gráca tenemos el error angular de la ruta completada por el robot, la

cual se mantiene generalmente por debajo de los 2°. Todas las grácas obtenidas se ven

ruidosas, esto debido a que la señal procesada de las camaras contiene ruido derivado a

la propia conversión analógica a digital realizada por las cámaras, en esta ultima graca

se nota mucho mas el ruido de la señal, debido a que el robot tiene un comportamiento

oscilatorio al momento de seguir la ruta, esto se debe a que el control de direccional del

robot esta dado por 2 ruedas equidistantes. S


Capitulo 5: Resultados de validación 47

Error en (x)
Metros (m)

0.05

-0.05
0 50 100 150 200 250 300 350 400
Tiempo (s)
Error en (y)
Metros (m)

0.2
0.1
0
-0.1
0 50 100 150 200 250
Tiempo (s)
Error en (theta)
Grados (°)

10
5
0
-5
0 50 100 150 200 250 300 350 400
Tiempo (s)

Figura 5.3: Grácas de error de posición.


Capítulo 6

Conclusión

El sistema implementado en este trabajo es capaz de:

Obtener la pose del WMR empleado de manera precisa.

Para lograr obtener la pose se empleó el programa Motive y sus bibliotecas di-

námicas. El mayor reto que hubo al realizar la integración con MATLAB fue la

falta de información. Generalmente, se emplean las bibliotecas del kit de desarrollo

NatNetSDK, las cuales son proporcionadas por OptiTrack. Derivado de la falta de

información, se optó por emplear las propias bibliotecas dinámicas del programa

empleado, además del programa modicado basado en [26].

Se logro la comunicación con el robot mediante ROS/Aria

Este fue el mayor reto de este trabajo. El API de desarrollo ARIA es antiguo, ya que

el robot Amigobot salió al mercado en 2004. Por lo tanto, al momento del desarrollo

de este trabajo, no fue posible compilarlo y hacerlo funcionar en MATLAB 2015.

Ahora bien, la versión de ROS Noetic en la cual es posible ejecutar ARIA está

descontinuada, por lo cual se requiere una versión desactualizada de Linux en la

cual sea ejecutable. Por lo tanto, hubo la necesidad de emplear un sistema Linux

como intermediario para lograr la comunicación con el robot.

Se logro integrar el sistema en matlab con lo es posible provar controladores.

La integración del sistema se logró mediante el uso de una versión anterior a la

actual de MATLAB/Simulink, donde es posible ejecutar tanto el programa de las

cámaras con el sistema ROS. El inconveniente de las versiones actuales radica en que

ROS funciona en un modo de simulación en tiempo real, mientras que no es posible

48
Capitulo 6: Conclusión 49

ejecutar el programa de adquisición de datos en este modo de operación. Por lo tan-

to, fue necesaria una versión donde pudieran convivir ambos programas. El reto de

actualizar el programa para funcionar en versiones actuales de MATLAB/Simulink

queda propuesto como trabajo futuro.

Al validad el sistema mediante la estrategia de control basada en campos potenciales

de velocidad podemos concluir lo siguiente:

el controlador PI empleado hace que el robot logre seguir de manera adecuada la ruta

calculada, con el defecto de seguirla con una velocidad de 10cm/s devido a que unicamente

se toma encuenta la cinemática del robot y no la dinamica del mismo.

6.0.1. Trabajo futuro

Como trabajo futuro se propone lo siguiente:

Actualizar el programa desarollado para funcionar en versiones actuales de matlab

tales como R2021 o R2024.

Copilar ROS noetic para funcionar en la version actual de UBUNTU, siendo esta

la version 22.04.4 al año de redacion de este texto.

Copilar aria de forma que se pueda emplear en Matlab, quitando asi la necesidad

de linux como intermediario entre MATLAB y la misma biblioteca.

Abordar el problema de navegación en ambientes cambiantes dinamicos, mediante

campos potenciales u otras tecnicas. Tambien se propone abordar el problema de

mapeo mensionado en el capitulo 1 de este trabajo con la nalidad de emplear el

hardware interno del robot.


Apéndice A

Programa de inicialisacion de
bibliotecas motive

A continuación se presenta el programa encargado de inicializar y congurar el acceso

a las bibliotecas de Motive.

1 % Limpiar todo el espacio de trabajo


2 clear all;
3
4 %Agregar la ruta para los iconos de los bloques
5
addpath('D:\Projectos\Vehiculos_terrestres\Amigobot\campos_potenciales_GR\original\');
6
7 % Archivo de proyecto Motiove que contiene la calibraci\`{o}n de la c\'{a}mara y la
configuraci\`{o}n de los marcadores
8 project_file =
'D:\Projectos\Vehiculos_terrestres\Amigobot\campos_potenciales_GR\original\';
9
10 % Ubicaci\`{o}n que contiene archivos .dll (bibliotecas din\`{a}micas) y .lib
(bibliotecas est\`{a}ticas)
11 inc_location =
'D:\Projectos\Vehiculos_terrestres\Amigobot\campos_potenciales_GR\original\inc\';
12
13 % Ubicaci\`{o}n que contiene archivos .h (encabezados) fijos
14 lib_location =
'D:\Projectos\Vehiculos_terrestres\Amigobot\campos_potenciales_GR\original\lib\';
15
16 % Inicializaci\`{o}n de ROS
17 rosinit('[Link]')

50
Apendice A: Programa de inicializacion de bibliotecas motive 51
Apéndice B

Bloque TrackableLocation

El subsitema TrackableLocation, se muestra en la Figura B.1 podemos observar 3

bloques principales, ademas de varios bloques goto, los cuales sirven para enviar variables

a otros subsistemas y un bloque Gain el cual se emplea para volver invertir z segun nuestro

sistema de referencia.

52
Apendice B: Programa de inicializacion de bibliotecas motive 53

x
Goto

x x
dx_dt xp
Goto2
y y
y dy_dt
Terminator2
Goto1
z -1 z

Gain
dz_dt yp
Goto3
1 Trackable_index roll roll
Trackable_index TrackableLocation
roll droll_dt
Terminator
pitch pitch Yaw_correction yaw pitch
fcn
yaw Goto4
dpitch_dt
MATLAB Function1
yaw yaw Terminator1

dyaw_dt dyaw_dt
Current_Time_Stamp Current_Time_Stamp
To Workspace2

MATLAB Function Derivadas

Figura B.1: Subsistema: Trackable Location.

B.0.1. Funcion TrackableLocation

EL siguiente programa es el encargado de obtener la pose de Amigobot mediante las

bibliotecas de Motive iniciadas mediante el programa del Apendice A.

1 function [x,y,z,roll,pitch,yaw,Current_Time_Stamp]= TrackableLocation(Trackable_index)


2
3 [Link]('calllib') % Define funci\`{o}n de MATLAB en Simulink
4
5 % Actualiza el frame
6 calllib('NPTrackingTools', 'TT_Update'); % Actualiza los datos
7
8 % Define los tipos de salida de la funci\`{o}n TT_TrackableLocation
9 % Se necesita que sea de tipo de datos \`{u}nico para la funci\`{o}n
10 X=single(0); Y=single(0); Z=single(0);
11 YAW=single(0); PITCH=single(0); ROLL=single(0);
12 qx=single(0); qy=single(0); qz=single(0); qw=single(0);
Apendice B: Programa de inicializacion de bibliotecas motive 54

13 Current_Time=double(0);
14
15 % Encuentra los componentes de pose del objeto a rastear
16 [X,Y,Z,qx,qy,qz,qw,YAW,PITCH,ROLL] = calllib('NPTrackingTools',
'TT_RigidBodyLocation',(Trackable_index-1),X,Y,Z,qx,qy,qz,qw,YAW,PITCH,ROLL);
17
18 % Obtiene la marca de tiempo
19 Current_Time = calllib('NPTrackingTools', 'TT_FrameTimeStamp');
20
21 % Calcula la diferencia de tiempo entre las capturas de dato
22
23 % Simulink acepta solo tipo de datos double
24 x=double(X); y=double(Y); z=double(Z);
25 yaw=double(YAW); pitch=double(PITCH); roll=double(ROLL);
26
27 Current_Time_Stamp=double(Current_Time);
28
29 end

B.0.1.1. Bloque Yaw correction

Este bloque cambia el formato del angulo de giro yaw, de −180 a 180 lo convierte a

grados, ademas de corregir la discontinuidad presente cuando el robot pasa del segundo

al tercer cuadrante.

1 function Yaw_correction = fcn(roll,pitch,yaw) % Sirve para corregir el \`{a}ngulo


cuando pasa por la discontinuidad (cuando pasa del segundo al tercer cuadrante)
2 if abs(roll)>90 && abs(pitch)>90 % Comprueba si los valores absolutos de roll y
pitch son mayores que 90
3 if yaw>=0
4 Yaw_correction=180-yaw; % Correcci\`{o}n si yaw es mayor o igual a 0
5 else
6 Yaw_correction=-180-yaw; % Correcci\`{o}n si yaw es menor que 0
7 end
8 else
9 Yaw_correction=yaw; % Si no se cumplen las condiciones anteriores, no hay
correcci\`{o}n
10 end
11 end
Apendice B: Programa de inicializacion de bibliotecas motive 55

B.0.2. Bloque derivadas

Este bloque calcula las derivadas temporales necesarias, se usaron las derivada de x,
z (notece que la llamamos y en nuestro sistema de referencia) y yaw, la Figura B.2 muestra
el diagrama de bloques de este subsistema.

1
1 dx_dt
x
2 dx_dt
y
3 2
dy_dt
z
4 Data dy_dt
roll
5 3
pitch dz_dt
6 dz_dt
yaw
7 4
Current_Time_Stamp
Mux
fcn droll_dt

droll_dt

5
dpitch_dt

Previous_Data dpitch_dt

Memory
6
dyaw_dt
dyaw_dt

Mux1 MATLAB Function

Figura B.2: Subsistema: Derivadas.

El siguiente programa es el encargado de calcular las derivadas.

1 function [dx_dt,dy_dt,dz_dt,droll_dt,dpitch_dt,dyaw_dt] = fcn(Data,Previous_Data)


2 % Calcula la diferencia de tiempo entre muestras consecutivas
3 Delta_Time = Data(7) - Previous_Data(7);
4 % Calcula la norma de la diferencia entre los datos actuales y los anteriores
5 norm_delta = norm(Data(1:6) - Previous_Data(1:6));
6
7 % Comprueba si la norma es distinta de cero y si el tiempo transcurrido es
positivo
8 if ~((norm_delta == 0) && (Delta_Time <= 0))
9 % Calcula las derivadas temporales de las coordenadas espaciales
Apendice B: Programa de inicializacion de bibliotecas motive 56

10 dx_dt = (Data(1) - Previous_Data(1)) / Delta_Time;


11 dy_dt = (Data(2) - Previous_Data(2)) / Delta_Time;
12 dz_dt = (Data(3) - Previous_Data(3)) / Delta_Time;
13 dyaw_dt = (Data(6) - Previous_Data(6)) / Delta_Time;
14
15 % Corrige las derivadas temporales de yaw si supera los l\`{i}mites de -180 a
180 grados
16 if ((Data(6) - Previous_Data(6)) > 180)
17 dyaw_dt = ((Data(6) - Previous_Data(6)) - 360) / Delta_Time;
18 elseif ((Data(6) - Previous_Data(6)) < -180)
19 dyaw_dt = ((Data(6) - Previous_Data(6)) + 360) / Delta_Time;
20 end
21
22 % Calcula las derivadas temporales de los \`{a}ngulos de orientaci\`{o}n
23 dpitch_dt = (Data(5) - Previous_Data(5)) / Delta_Time;
24 droll_dt = (Data(4) - Previous_Data(4)) / Delta_Time;
25 else
26 % Si la norma es cero o el tiempo transcurrido es negativo, se usan los
valores anteriores
27 dx_dt = Previous_Data(8);
28 dy_dt = Previous_Data(9);
29 dz_dt = Previous_Data(10);
30 dyaw_dt = Previous_Data(13);
31 dpitch_dt = Previous_Data(12);
32 droll_dt = Previous_Data(11);
33 end
34 end
Apéndice C

Programa de generacion de campos


potenciales

El siguiente programa es el encargado de generar la referencia para ser empleada en el

controlador, se basa en la teoria revisada en la Sección 4.2.

1 function [Vx, Vy, Vxp, Vyp, ex, ey] = vel_field_WMR(x, y, xp, yp, xc, yc, rc, gama,
Kv, x_obs, y_obs, r_obs)
2 %------------------------------------------------------------------
3 % Entradas: x, y, xp, yp, xc, yc, rc
4 % Salidas: [xpd, ypd, xppd, yppd]
5 % g = 9.81;
6 % x = in(1); % Posici\`{o}n actual del veh\`{i}culo en x
7 % y = in(2); % Posici\`{o}n actual del veh\`{i}culo en y
8 % xp = in(3); % Posici\`{o}n actual del veh\`{i}culo en x
9 % yp = in(4); % Posici\`{o}n actual del veh\`{i}culo en y
10 % xc = in(5);
11 % yc = in(6);
12 % rc = in(7);
13
14 hp = [xp; yp];
15
16
17 %-------------------------------------------------------------------------
18 % C\`{a}lculo de teta_cl := qcl y sus derivadas
19 xt = x - xc;
20 yt = y - yc;
21 ht = [xt; yt];
22 qcl = atan2(yt, xt); % Theta_closer
23 qp_cl = cruz(ht, hp) / (ht' * ht); % (xt * yp - yt * xp) / d_cl^2;

57
Apendice C: Programa de generacion de campos potenciales 58

24
25 % C\`{a}lculo de derivadas de Vdes
26 [x_cl, y_cl] = TrayecCirculo(qcl, xc, yc, rc);
27 ex = x_cl - x;
28 ey = y_cl - y;
29 he = [ex; ey];
30 Vap = he / norm(he); % Vap
31
32 Vxc = -rc * sin(qcl);
33 Vyc = rc * cos(qcl);
34 Vc = [Vxc; Vyc];
35 dist_Vc = norm(Vc);
36 Vtg = Vc / dist_Vc; % Vtg
37
38 % V
39 gg = -gama * norm(he);
40 f = exp(gg);
41 F1 = (2 / (1 + f)) - 1;
42 F2 = 1 - F1;
43 Vnum = F1 * Vap + F2 * Vtg;
44 Vvf = Vnum / norm(Vnum);
45 % norm(Vnum)
46
47 % Primera derivada -----1-----------1---------------1------------1------
48 xp_cl = qp_cl * Vxc;
49 yp_cl = qp_cl * Vyc;
50 e_xp = xp_cl - xp;
51 e_yp = yp_cl - yp;
52 hep = [e_xp; e_yp];
53 Vp_ap = Vp(Vap, he, hep);
54
55 Vp_xc = -qp_cl * Vyc; % -10*qp_cl * cos(qcl);
56 Vp_yc = qp_cl * Vxc;
57 Vp_c = [Vp_xc; Vp_yc];
58 Vp_tg = Vp(Vtg, Vc, Vp_c); % (Vp_c - (Vtg' * Vp_c) * Vtg) / dist_Vc;
59
60 % Vp
61 gp = -gama * (Vap' * hep);
62 fp = f * gp;
63 F1p = -2 * fp / (1 + f)^2;
64 F2p = -F1p;
65
66 Vp_num = F1 * Vp_ap + F2 * Vp_tg + F1p * Vap + F2p * Vtg;
67 Vp_vf = Vp(Vvf, Vnum, Vp_num);
Apendice C: Programa de generacion de campos potenciales 59

68
69
70 Vxa = Vvf(1);
71 Vya = Vvf(2);
72 Vxpa = Vp_vf(1);
73 Vypa = Vp_vf(2);
74
75
76 in = [x; y; xp; yp; Vxa; Vya; Vxpa; Vypa; x_obs; y_obs; r_obs];
77 out = vel_ev(in);
78 Vx = Kv * out(1);
79 Vy = Kv * out(2);
80 Vxp = Kv * out(3);
81 Vyp = Kv * out(4);
82 end
83
84 function [x, y] = TrayecCirculo(q, xc, yc, rc)
85 x = xc + rc * cos(q);
86 y = yc + rc * sin(q);
87 end
88
89 function [out] = cruz(a, b)
90 % Producto cruzado
91 R = [0 1; -1 0];
92 out = a' * R * b;
93 end
94
95 function [out] = Vp(V, v1, v1p)
96 out = (v1p - (V' * v1p) * V) / norm(v1);
97 end
Apéndice D

Programa de control

El siguiente programa corresponde al bloque de control y es el encargado de controlar

la orientación del robot.

1 % Calcula la velocidad lineal del robot


2 v = sqrt(Vx^2 + Vy^2);
3
4 % Calcula el \`{a}ngulo deseado de orientaci\`{o}n
5 teta_d = atan2(Vy, Vx);
6
7 % Convierte el \`{a}ngulo actual de yaw a radianes
8 teta = yaw * pi / 180;
9
10 % Calcula el error de orientaci\`{o}n
11 e_teta = teta_d - teta;
12
13 % Corrige el error de orientaci\`{o}n si est\`{a} fuera del rango [-pi, pi]
14 if (e_teta < -pi)
15 e_teta = 2 * pi + e_teta;
16 elseif (e_teta > pi)
17 e_teta = -2 * pi + e_teta;
18 end
19 % Calcula la derivada del \`{a}ngulo de orientaci\`{o}n deseado
20
21 if (v == 0)
22 teta_dp = atan2(Vyp, Vxp);
23 else
24 teta_dp = (Vxp * Vy - Vyp * Vx) / v^2;
25 end
26

60
Apendice D: Programa de control 61

27 % Calcula la velocidad angular de control utilizando un controlador PI


28 w = kp * e_teta + teta_dp + ki * int_e;
29 end
Bibliografía 62

Bibliografía
[1] S. Tucker, Self-driving cars: Everything you need to know - kelley blue book, 2024.

[2] S. User, Amazon warehouse robots. 1

[3] MiX Telematics, The rise of autonomous trucks in the mining industry - mix tele-

matics north america. 1

[4] El rover perseverance de la NASA 'al volante' - NASA ciencia. 1

[5] L. A. García, R. Pérez Alcocer, and G. Ramos, Tracking control of a wheeled mo-

bile robot in a velocity eld with obstacle avoidance, REVISTA DE CIENCIAS


TECNOLÓGICAS, vol. 6, no. 4, p. e266, 2023. 1

[6] B. Shepperd, Types of drones. My Drone Professional - Best drones for beginners,

Good drones with cameras, Best drones for commercial use, recommended drone

cameras, drone reviews buying guides, Sin fecha. 4

[7] J. Rennie, Drone types: Multi-rotor, xed-wing, single rotor, hybrid vtol, 2024.

Accedido el 24 de febrero de 2024. 5

[8] P. Ryabchuk, How does path planning for autonomous vehicles work, 2018. 5

[9] C. Stachniss, J. J. Leonard, and S. Thrun, Simultaneous localization and mapping,

in Springer Handbook of Robotics, pp. 11531176, Springer, 2016. 6

[10] A. A. A. Rasheed, M. N. Abdullah, and A. S. Al-Araji, A review of multi-agent

mobile robot systems applications., International Journal of Electrical & Computer


Engineering (2088-8708), vol. 12, no. 4, 2022. 6

[11] P. Lin, J. H. Yang, Y. S. Quan, and C. C. Chung, Potential eld-based path planning

for emergency collision avoidance with a clothoid curve in waypoint tracking, Asian
Journal of Control, vol. 24, no. 3, pp. 10741087, 2022. 6

[12] S. H. A. Wahab, A. Saudi, N. Saad, and A. Chekia, Uav path planning using rotated

tor in structured environment, in2022 IEEE International Conference on Articial


Intelligence in Engineering and Technology (IICAIET), pp. 16, September 2022. 7
Bibliografía 63

[13] S. Ionita, Autonomous vehicles: from paradigms to technology, in IOP Conference


Series: Materials Science and Engineering, vol. 252, p. 012098, October 2017. 7

[14] X. Chen, Z. Huang, Y. Sun, Y. Zhong, R. Gu, and L. Bai, Online on-road mo-

tion planning based on hybrid potential eld model for car-like robot, Journal of
Intelligent & Robotic Systems, vol. 105, no. 1, p. 7, 2022. 7

[15] P. Vadakkepat, K. C. Tan, and W. Ming-Liang, Evolutionary articial potential

elds and their application in real-time robot path planning, in Proceedings of the
2000 Congress on Evolutionary Computation, CEC00, vol. 1, pp. 256263, July 2000.
7

[16] R. D. Puriyanto, O. Wahyunggoro, and A. I. Cahyadi, Implementation of improved

articial potential eld path planning algorithm in dierential drive mobile robot, in

14th International Conference on Information Technology and Electrical Engineering


(ICITEE), pp. 1823, October 2022. 7

[17] IAAR, Visión por computadora - libro online de iaar, s.f. 7

[18] S. Fernández, C. Javier, and V. S. Consuegra, Reconocimiento óptico de caracteres

(ocr), Univ. Carlo, vol. 3, no. 7, p. 2008, 2008. 7

[19] J. Sánchez Diez et al., Control de calidad del acabado supercial de bobinas de

alambrón mediante inspección robotizada asistida por visión articial, 2016. 8

[20] M. Menolotto, D.-S. Komaris, S. Tedesco, B. O'Flynn, and M. Walsh, Motion cap-

ture technology in industrial applications: A systematic review, Sensors, vol. 20,

no. 19, p. 5687, 2020. 8

[21] C. R. Viala and A. J. S. Salmerón, Procedimiento completo para el calibrado de

cámaras utilizando una plantilla plana, Revista Iberoamericana de Automática e


Informática Industrial RIAI, vol. 5, no. 1, pp. 93101, 2008. 15

[22] ActiveMedia ROBOTICS, Amigo User Guide. 23, 25

[23] Lantronix, Inc., WIBOX x 2100E Device Server User Guide. Lantronix, Inc., De-

cember 2017. Document Revision: December 2017. 26

[24] H. E. Espitia Cuchango and J. I. Sofrony Esmeral, Algoritmo para planear trayec-

torias de robots móviles, empleando campos potenciales y enjambres de partículas

activas brownianas, Ciencia e Ingeniería Neogranadina, vol. 22, no. 2, pp. 7596,

2012. 33
Bibliografía 64

[25] C. Pérez-D'Arpino, W. Medina-Meléndez, L. Fermín, J. Guzmán, G. Fernández-

López, and J. C. Grieco, Dynamic velocity eld angle generation for obstacle avoi-

dance in mobile robots using hydrodynamics, in Ibero-American Conference on Ar-


ticial Intelligence, pp. 372381, Springer, 2008. 34

[26] O. Hirshfeld, Natural point motive (optitrack) api interface to

matlab and simulink 64bit. [Link]


Motive-API-interface-to-Matlab-and-simulink-in-Real-time, 2023. GitHub.

Retrieved December 20, 2023. 41, 43, 48

También podría gustarte