Tabla de contenido:

Vehículo autónomo: 7 pasos (con imágenes)
Vehículo autónomo: 7 pasos (con imágenes)

Video: Vehículo autónomo: 7 pasos (con imágenes)

Video: Vehículo autónomo: 7 pasos (con imágenes)
Video: Qué es Mantenimiento Autónomo. Analizo características de su funcionamiento e implantación 2024, Noviembre
Anonim
Vehículo autónomo
Vehículo autónomo
Vehículo autónomo
Vehículo autónomo

Este proyecto es un robot de navegación autónoma que intenta alcanzar su posición objetivo evitando obstáculos en su camino. El robot estará equipado con un sensor LiDAR que se utilizará para detectar objetos en su entorno. A medida que se detectan objetos y el robot se mueve, se actualiza un mapa en tiempo real. El mapa se utilizará para guardar las ubicaciones de los obstáculos que se han identificado. De esta forma, el robot no volverá a intentar un camino fallido hacia la posición de destino. En su lugar, intentará caminos que no tengan obstáculos o caminos que aún no hayan sido revisados en busca de obstáculos.

El robot se moverá mediante dos ruedas impulsadas por un motor de CC y dos ruedas giratorias. Los motores se conectarán a la parte inferior de una plataforma circular. Los motores estarán controlados por dos controladores de motor. Los controladores del motor recibirán comandos PWM del procesador Zynq. Todos los codificadores de cada motor se utilizan para realizar un seguimiento de la posición y orientación de los vehículos. Todo el sistema se alimentará con una batería LiPo.

Paso 1: Montaje del vehículo

Montaje del vehículo
Montaje del vehículo
Montaje del vehículo
Montaje del vehículo
Montaje del vehículo
Montaje del vehículo
Montaje del vehículo
Montaje del vehículo

El robot es impulsado por dos motores conectados a las ruedas laterales y luego es apoyado adicionalmente por dos ruedas giratorias, una en la parte delantera y otra en la parte trasera. Los soportes de la plataforma y del motor estaban hechos de chapa de aluminio. Se compró un cubo de motor para sujetar las ruedas al motor. Sin embargo, era necesario fabricar un acoplador intermedio personalizado porque el patrón de agujeros del cubo era diferente al patrón de agujeros de la rueda.

El motor seleccionado fue un motor Port Escap 12V DC con codificadores incorporados. Este motor se puede comprar en eBay por un precio muy razonable (consulte la Lista de materiales). Busque las palabras clave “Motor DC con engranajes sin núcleo 12V Escap 16 con codificadores” en ebay para encontrar el motor. Por lo general, hay una buena cantidad de vendedores para elegir. Las especificaciones y los pines de los motores se muestran en los siguientes diagramas.

El montaje del robot comenzó con un diseño de modelo CAD del chasis. El siguiente modelo muestra la vista superior del perfil de forma 2D diseñado para el chasis.

Se sugiere que el chasis se diseñe como un perfil 2D para que se pueda fabricar fácilmente. Cortamos una hoja de aluminio de 30 x 30 cm (30 x 30 cm) en la forma del chasis usando un cortador de chorro de agua. La plataforma del chasis también se puede cortar con una sierra de cinta.

Paso 2: Montaje de motores

Motores de montaje
Motores de montaje
Motores de montaje
Motores de montaje

El siguiente paso es hacer los soportes del motor. Se sugiere que los soportes del motor estén hechos de chapa de aluminio de 90 grados. Usando esta pieza, el motor se puede unir en voladizo en una cara de la chapa usando los dos

Los orificios M2 del motor y la otra cara se pueden atornillar a la plataforma. Se deben perforar orificios en el soporte del motor para que los tornillos se puedan usar para sujetar el motor al soporte del motor y el soporte del motor a la plataforma. El soporte del motor se puede ver en la figura anterior.

A continuación, se coloca el cubo del motor Pololu (consulte la lista de materiales) en el eje del motor y se aprieta con el tornillo de fijación y la llave Allen provistos. El patrón de orificios del cubo del motor Pololu no coincide con el patrón de orificios de la rueda VEX, por lo que se debe hacer un acoplador intermedio personalizado. Se sugiere que la chapa de aluminio de desecho utilizada para hacer la plataforma del chasis se use para hacer el acoplador. El patrón de orificios y las dimensiones de este par se muestran en la siguiente figura. El diámetro exterior y la forma (no es necesario que sea un círculo) del acoplador de aluminio personalizado no importa siempre que todos los orificios encajen en la pieza.

Paso 3: Creación del diseño de bloques de Vivado

Creación de diseño de bloque Vivado
Creación de diseño de bloque Vivado
Creación de diseño de bloque Vivado
Creación de diseño de bloque Vivado

- Comience creando un nuevo proyecto Vivado y seleccione el Zybo Zynq 7000 Z010 como dispositivo de destino.

- A continuación, haga clic en crear nuevo diseño de bloque y agregue la IP de Zynq. Haga doble clic en la IP de Zynq e importe la configuración XPS proporcionada para Zynq. Luego habilite UART0 con MIO 10..11 en la pestaña de configuraciones MIO, y también asegúrese de que el temporizador 0 y el temporizador Watchdog estén habilitados.

- Agregue dos AXI GPIOS al diseño del bloque. Para GPIO 0, habilite el canal dual y configure ambos en todas las salidas. Establezca el ancho de GPIO para el canal 1 en 4 bits y para el canal 2 en 12 bits, estos canales se utilizarán para establecer la dirección del motor y enviar la cantidad de ticks que mide el codificador al procesador. Para GPIO 1, configure solo un canal para todas las entradas con un ancho de canal de 4 bits. Esto se utilizará para recibir datos de los codificadores. Haga que todos los puertos GPIO sean externos.

- Siguiente Agregue dos temporizadores AXI. Haga que los puertos pwm0 en ambos temporizadores sean externos. Estos serán los pwms que controlan la velocidad a la que giran los motores.

- Finalmente, ejecute la automatización del bloque y la automatización de la conexión. Verifique que el diseño de bloque que tiene coincida con el proporcionado.

Paso 4: comunicarse con el LiDAR

Este LiDAR utiliza un protocolo SCIP 2.0 para comunicarse a través de UART, el archivo adjunto describe el protocolo completo.

Para comunicarnos con el LiDAR usaremos UART0. El LiDAR devuelve 682 puntos de datos, cada uno de los cuales representa la distancia a un objeto en ese ángulo. El LiDAR escanea en sentido antihorario desde -30 grados a 210 grados con un paso de 0,351 grados.

- Toda la comunicación al LiDAR se realiza con caracteres ASCI, consulte el protocolo SCIP para el formato utilizado. Comenzamos enviando el comando QT para encender el LiDAR. Luego enviamos el comando GS varias veces solicitando 18 puntos de datos a la vez para colocarlos en el UARTS FIFO de 64 bytes. Los datos devueltos por LiDAR luego se analizan y almacenan en la matriz global SCANdata.

- Cada punto de datos almacenado son 2 bytes de datos codificados. Pasar estos datos al decodificador devolverá una distancia en milímetros.

En el archivo main_av.c encontrará las siguientes funciones para comunicarse con el LiDAR

sendLIDARcmd (comando)

- Esto enviará la cadena de entrada al LiDAR a través del UART0

recvLIDARdata ()

- Esto recibirá datos después de que se haya enviado un comando al LiDAR y almacenará los datos en el RECBuffer

requestDistanceData ()

- Esta función enviará una serie de comandos para recuperar los 682 puntos de datos. Después de recibir cada conjunto de 18 puntos de datos, se llama a parseLIDARinput () para analizar los datos y almacenarlos de forma incremental en SCANdata.

Paso 5: poblar la cuadrícula con obstáculos

Poblando la cuadrícula con obstáculos
Poblando la cuadrícula con obstáculos
Poblando la cuadrícula con obstáculos
Poblando la cuadrícula con obstáculos

La GRID que se almacena es una matriz 2D con cada valor de índice que representa una ubicación. Los datos almacenados en cada índice son 0 o 1, sin obstáculo y obstáculo respectivamente. La distancia cuadrada en milímetros que representa cada índice se puede cambiar con la definición GRID_SCALE en el archivo vehicle.h. El tamaño de la matriz 2D también se puede variar para permitir que el vehículo escanee un área más grande modificando la definición GRID_SIZE.

Después de escanear un nuevo conjunto de datos de distancia desde LiDAR, se llama a updateGrid (). Esto iterará a través de cada punto de datos almacenado en la matriz SCANdata para determinar qué índices de la cuadrícula tienen obstáculos. Usando la orientación actual del vehículo podemos determinar el ángulo que corresponde a cada punto de datos. Para determinar dónde está un obstáculo, simplemente multiplique la distancia correspondiente por cos / sin del ángulo. La suma de estos dos valores a la posición xey actual del vehículo devolverá el índice en la cuadrícula del obstáculo. Dividir la distancia devuelta por esta operación por GRID_SCALE nos permitirá variar el tamaño de la distancia al cuadrado de cada índice.

Las imágenes de arriba muestran el entorno actual de los vehículos y la cuadrícula resultante.

Paso 6: comunicación con motores

Para comunicarnos con los motores, comenzamos inicializando los GPIO para controlar la dirección en la que gira el motor. Luego, escribir directamente en la dirección base de los PWM en el temporizador AXI nos permite establecer cosas como el período y el ciclo de trabajo que controlan directamente el velocidad a la que gira el motor.

Paso 7: planificación de la ruta

Se implementará en un futuro próximo.

Utilizando la función de red y motor descrita anteriormente, es muy fácil implementar algoritmos como A *. A medida que el vehículo se mueve, continuará escaneando el área circundante y determinar si la ruta en la que se encuentra sigue siendo válida.

Recomendado: