Sistema de protección contra incendios inteligente colaborativo aire-tierra: colaboración entre vehículos aéreos no tripulados y automóviles

1 tema

1.1 Tareas

Diseñar un sistema de extinción de incendios inteligente colaborativo aire-tierra compuesto por drones quadrotor y camiones de bomberos. Se instala un puntero láser verticalmente hacia abajo en el UAV para indicar la pista de patrulla. El área de patrulla es de 40 dm × 48 dm. Cuando el dron patrulla, puede cubrir un área de 8 dm de ancho en el suelo. Basado en el principio de acortar el tiempo para completar las patrullas de cobertura total, las patrullas de UAV de acuerdo con la ruta planificada. Inmediatamente tome medidas preliminares de extinción de incendios después de descubrir el fuego y envíe la información de ubicación de la fuente del fuego al camión de bomberos, para que pueda ir a extinguir la fuente del fuego. Cuanto más corto sea el tiempo de finalización del trabajo coordinado aeroterrestre de patrullaje y extinción de incendios, mejor.

inserte la descripción de la imagen aquí

1.2 Puntos de misión

1. Requisitos básicos (50 puntos)

  • (1) Los equipos deben crear su propia fuente de fuego simulada. La fuente de fuego simulada es una fuente de luz roja alimentada por batería, como un LED, que se puede encender o apagar mediante irradiación continua con un puntero láser: se encenderá después de aproximadamente 2 segundos de irradiación continua y se apagará después de aproximadamente 2 segundos de irradiación continua. (5 puntos)
  • (2) Muestre el mapa de ruta de patrulla planificada. Después de presionar el botón en el camión de bomberos para que el UAV comience a despegar verticalmente, el UAV
    completará la patrulla de cobertura total en el área de patrulla de acuerdo con la ruta planificada a una altura de aproximadamente 18dm. (22 puntos)
  • (3) Se usa comunicación inalámbrica entre el UAV y el camión de bomberos; durante el período de patrulla, el UAV envía
    información de coordenadas de ubicación al camión de bomberos una vez por segundo, y el monitor en el camión de bomberos actualiza y muestra la información de coordenadas de ubicación del camión de bomberos. UAV en tiempo real. (8 puntos)
  • (4) Durante la patrulla, la pantalla del camión de bomberos muestra la curva de seguimiento de la patrulla, calcula y muestra el rango de patrulla acumulativo. (8 puntos)
  • (5) Después de completar la patrulla, el UAV regresa y aterriza con precisión en el área de despegue. (7 puntos)

2. Juega parte (50 puntos)

  • (1) Opere manualmente el puntero láser para encender: una fuente de fuego. Iniciar patrullas de drones en camiones de bomberos. El UAV
    patrulla de acuerdo con la ruta planificada. Después de encontrar un incendio, diríjase a la fuente del fuego (distancia horizontal ≤ 5dm) para identificar y confirmar, y luego use el indicador LED del UAV para advertir. (8 puntos)
  • (2) El UAV vuela por encima de la fuente de fuego, baja a una altura de aproximadamente 10 dm y, después de flotar durante 3 s, arroja
    la bolsa de extinción de incendios . La bolsa de extinción de incendios cae en un área circular con un radio de 3 dm centrada en la fuente de fuego. punto; Las coordenadas de posición de la ubicación se envían al camión de bomberos, y luego continúan patrullando y regresan al punto de despegue después de la finalización. (12 puntos)
  • (3) Después de recibir la información del incendio y mostrar las coordenadas de ubicación de la fuente del incendio, el camión de bomberos sale de la estación de bomberos
    hacia la ubicación de la fuente del incendio. No debe aplastar el bloque y su límite en el camino, e irradiar el fuego simulado. con un haz de puntero láser a una distancia de 5 dm de la fuente para apagarlo. (15 puntos)
  • (4) Después de extinguir la fuente de fuego simulada, el camión de bomberos regresa al área de inicio. La parte del juego se completa dentro de los 360 dentro del límite de tiempo. (10 puntos)
  • (5) Otros. (5 puntos)

1.3 Parte de diseño

1.3.1 Fuente de fuego simulada

Los requisitos de esta parte son los siguientes:
la fuente de fuego simulada puede ser un LED rojo alimentado por una batería, etc., y se requiere una campana con forma de cuerno hacia arriba. El ángulo de la campana es de aproximadamente 60 ° y la altura no no exceder los 10 cm. Se puede encender o apagar con un puntero láser.
El diagrama esquemático es el siguiente:
inserte la descripción de la imagen aquí
la campana externa se puede modificar como una campana de mordedura de mascota;
Por favor agregue una descripción de la imagen
la pantalla LED interna es para expandir el área de iluminación para facilitar el trabajo del sistema de reconocimiento de imágenes en el sistema. Al mismo tiempo, para mejorar la eficiencia de trabajo del algoritmo de seguimiento del láser del automóvil, es necesario expandir el área de detección del sensor fotosensible. Se recomienda usar la lente de plástico en el módulo de detección de microondas del ser humano. Cuerpo para lograr el efecto de concentrar la luz.
Por favor agregue una descripción de la imagen
Diagrama de diseño del circuito: la placa del sistema mínima STC8 más dos baterías secas de 1,5 V, un LED rojo, una resistencia de aproximadamente 300 Ω y un sensor fotosensible son casi suficientes.
Programación: en el programa se utilizan una salida GPIO, un ADC y un temporizador.

1.3.2 Pieza de coche

Los requisitos de esta parte son los siguientes: los
camiones de bomberos deben usar carros eléctricos de 4 ruedas, las dimensiones de proyección de largo y ancho no superan los 20 cm × 35 cm y la altura no supera los 40 cm; No se permiten ruedas Mecanum.

1. Chasis y motor:
(1) Chasis: opcional.
(2) Motor: es mejor usar un engranaje de metal con un codificador para desacelerar y hacer clic, de modo que se pueda obtener la velocidad y el ángulo, para estimar la posición del automóvil y controlar mejor el automóvil.
(3) Accionamiento del motor: módulo de accionamiento del motor del puente H.
(4) Batería: batería de litio de alta velocidad de 12 V.
Lo mejor es buscar un chasis de automóvil con accionamiento por motor, interfaz de codificador y la capacidad de bajar para suministrar energía al control principal, como el módulo de accionamiento del motor del hacha de montaña.
Por favor agregue una descripción de la imagen

2. Chip de control principal
(1) Pangu:
si elige TI, el desarrollo de la placa del sistema Pangu es relativamente fluido y hay pocos errores en uso. Hay chips de controladores OLED y sensores de aceleración, zumbadores, botones múltiples y puertos serie en la placa.
Por favor agregue una descripción de la imagen

(2) TM4C123GXL:
no se recomienda esta placa.Hay un problema con la interfaz de depuración, el controlador no es fácil de jugar (ICDI, necesita instalar CCS), el rendimiento es relativamente bajo y hay pocos puertos de fuente de alimentación Al escribir código, Keil falla innumerables veces. El programa de ejecución de hardware también es fácil de ingresar a la interrupción y atascarse.
Si hay productos terminados que han sido modificados y desarrollados por otros, aún es posible usarlos.
Por favor agregue una descripción de la imagen

3. Pantalla de visualización
Se recomienda utilizar la pantalla de puerto serie de Tao Jingchi, que es fácil de configurar, tiene un código simple y puede devolver cadenas.
Pines: 5V, GND, TXD, RXD
Por favor agregue una descripción de la imagen

4. El módulo inalámbrico
puede usar Bluetooth, WIFI, Lora, etc.
Se recomienda que el módulo inalámbrico use un módulo con función de transmisión, para que la depuración de varias máquinas sea más conveniente.
Pines: VCC (5 ~ 3.3V), GND, TXD, RXD
Por favor agregue una descripción de la imagen
también pueden usar UWB este año, que puede realizar el posicionamiento preciso de drones y automóviles, y también puede transmitir datos Siempre que haya tiempo para desarrollar código , se puede decir que es un golpe a la reducción de dimensionalidad, pero el precio sigue siendo relativamente caro.

5. Visión artificial y equipo de dirección
Para la detección de fuentes de fuego simuladas, existen soluciones OpenMV y soluciones K210.
El módulo OpenMV tiene una rutina para controlar el mecanismo de dirección, que puede controlar el puntero láser para apagar la fuente de fuego simulada, pero la prima es demasiado alta, por lo que puede hacerlo usted mismo.

6.
Lo mejor es tener la IMU en el tablero de control principal, si no, use el MPU6050 modular, pero debe instalarse en el centro del automóvil.

7. Otros módulos:
(1) Sensor de escala de grises: la luz blanca ilumina el suelo de diferentes colores y la intensidad de la luz reflejada es diferente, lo que puede realizar tareas como la inspección de línea.
(2) cabezal láser.
(3)...

1.3.3 Parte UAV

Si compra directamente un dron TI terminado, el tablero de control principal puede usar el control principal mencionado anteriormente.

2 Diseño del programa

Principalmente hago autos pequeños, así que hablaré sobre el diseño de mi auto pequeño.
La placa de control principal del automóvil utiliza la placa de desarrollo de TI Pangu. El chip integrado es TM4C123GH6PZT7. El núcleo de MCU es ARM Cortex-M4F. Tiene 256 KB, la EEPROM es de 2 KB, el ancho de bits del núcleo es de 32 bits, y el ADC es de 12 bits.
Los periféricos y los recursos internos deben usar la pantalla serial, el módulo Bluetooth/módulo UWB, el temporizador, PWM, la salida LED, la entrada clave (esto puede ser reemplazado por el evento de devolución de información del puerto serial clave de la pantalla serial) y el controlador del zumbador.

2.1 Configuración del módulo Bluetooth

Uso el módulo Bluetooth de modo dual de Big Bear Smart. Si se emparejan dos módulos Bluetooth, es necesario configurar un maestro y un esclavo. Los siguientes módulos Bluetooth están conectados al módulo CH340 y los dos módulos están configurados en la computadora utilizando comandos AT. De forma predeterminada, se utiliza una velocidad de transmisión de 115200 baudios para conectarse.

Esclavo Bluetooth, conectar drone:

AT+NAME=DX2003-S		# 设置从机名称
AT+MASTER=01			# 设置从机工作模式
AT+BAUD=115200			# 设置波特率为115200
AT+LADDR				# 读取从机蓝牙地址,以便主机连接

+LADDR=22345000891f

Host Bluetooth, conéctese al automóvil:

AT+NAME=DX2003-M		# 设置主机名称
AT+MASTER=04			# 设置主机工作模式
AT+BAUD=115200			# 设置波特率为115200
AT+CONN=22345000891f	# 主机连接从机地址

Después de conectar:
​​(1) El host muestra:

IM_CONN:0		# 0代表是BLE连接上,1代表是SPP连接上

(2) La máquina esclava muestra:

IM_CONN:8

Comando de desconexión de Bluetooth:

AT+DSCET=1	

2.2 Diseño de interfaz de pantalla serial

La pantalla en serie utiliza el software USART HMI para dibujar la interfaz, lo que requiere la composición tipográfica de la interfaz, la adición de fuentes y la compilación del programa.
Descarga de software y enlace de aprendizaje:

http://mall.micromove.cn/start/download_ide.html

2.2.1 Protocolo de comunicación serie

1. Recepción de pantalla serial:
el protocolo es: cadena + identificador HEX
El identificador HEX es: \xff\xff\xff
La simulación en el software USART HMI no necesita agregar el identificador HEX (\xff\xff\xff).
Ejemplo:
si la pantalla del puerto serie usa CH340 para conectarse a la computadora, entonces la herramienta del puerto serie ingresa en la computadora (no agregue espacios):

t0.txt="陶晶驰电子"\xff\xff\xff
b0.txt="Hello World"\xff\xff\xff
j0.val=100\xff\xff\xff
page0.bco=WHITE\xff\xff\xff

Si el puerto serial de la MCU envía datos: 2.4.2detallado en.

2. Envío de pantalla serial:
(1) imprime: imprime una variable/constante desde el puerto serial.
(2) printh: imprime hexadecimal desde el puerto serie.

2.2.2 Funciones de dibujo

Los usos principales son:
(1) cirs: dibujar un círculo sólido

cirs x,y,radius,color\xff\xff\xff
cirs 160,266,6,RED\xff\xff\xff

(2) línea: dibujar una línea recta

line x_start,y_start,x_end,y_end,color\xff\xff\xff
line 185,246,185,26,BLUE\xff\xff\xff

(3) Insertar imagen

pic x,y,picid\xff\xff\xff					# picid为软件插入的ID号为x的图片
pic,123,150,0\xff\xff\xff

2.2.3 Diseño de interfaz de pantalla serie

El automóvil puede recibir los datos del punto de referencia (protocolo A) y los datos de la ubicación del incendio (protocolo B) enviados por el dron a través del puerto serial Bluetooth, y mostrar el origen azul y el hexágono rojo en la pantalla serial.

inserte la descripción de la imagen aquí

2.3 Diseño de protocolo de comunicación entre UAV y coche

1. La cadena enviada por el UAV al automóvil a través del puerto serie:

A,160,150,F			// 无人机航点坐标(160,150)
B,250,100,F			// 模拟火源坐标(250,100)
C,1,F				// 模拟火源ID: 1

La clase A indica el punto de ruta del UAV, F es la bandera final, la
clase B representa las coordenadas de la fuente de fuego detectada por el UAV y F es la bandera final.
La clase C indica el ID del área donde se encuentra la fuente de fuego simulada detectada por el UAV, y F es la bandera final. Este protocolo no se puede enviar y el automóvil calcula directamente la posición de la fuente de fuego simulada a través del protocolo de tipo B.

2. La cadena enviada por el automóvil al dron a través del puerto serie solo necesita un botón para habilitarse, use la entrada del botón o haga clic en la pantalla del puerto serie, envíe la cadena "TakeOff" a través del puerto serie Bluetooth, y el dron puede despegar después de detectarlo.

2.4 Diseño del programa de automóviles

Inicialice cada parte primero, luego ingrese el ciclo while (1) y escriba la mayoría de las funciones de procesamiento en el ciclo. El bit de habilitación de la función de procesamiento se almacena en la función de procesamiento de interrupción. Cuando algunas funciones funcionan durante mucho tiempo, el bit de indicador debe habilitarse en la interrupción y luego procesarse en la función principal principal para evitar el bloqueo de interrupción.
inserte la descripción de la imagen aquí

2.4.1 Programa serie Bluetooth

El programa de puerto serie Bluetooth incluye inicialización de puerto serie, envío de puerto serie, función de servicio de interrupción de puerto serie (recepción de puerto serie), análisis de datos de puerto serie y otras partes.

1. Función principal:

#include "stdio.h"
#include <stdint.h>
#include <stdbool.h>
// ......

// 全局变量
char uart4_rec_temp[50];		// 接收到暂存的字符数组
bool uart4_rec_check_flag = 0;		// 接收数据解包的标志位

// ......

int main(void)
{
    
    
	ROM_FPUEnable();//使能浮点单元
	ROM_FPULazyStackingEnable();//浮点延迟堆栈,减少中断响应延迟  
	ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);//配置系统时钟
	initTime();					// 初始化滴答定时器
	GPIO_Init();				// LED灯初始化
	// ......
	ConfigureUART4();			// 初始化蓝牙BLE-串口4
	UART4_BLE_CONNECT();		// 串口4连接蓝牙
	// ......
	
	while(1)
	{
    
    
		// ......
		uart4_data_check();		//串口4数据包解包
		// ......
	}
}

2. Inicialización del puerto serie:

// 蓝牙-串口4驱动 PC4/PC5
void ConfigureUART4(void)
{
    
     
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);// Enable the GPIO Peripheral used by the UART.
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4);// Enable UART0
    ROM_GPIOPinConfigure(GPIO_PC4_U4RX);// Configure GPIO Pins for UART mode.
    ROM_GPIOPinConfigure(GPIO_PC5_U4TX);
    ROM_GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5);
	UARTConfigSetExpClk(UART4_BASE,SysCtlClockGet(),115200,
												(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
	UARTFIFODisable(UART4_BASE);			// 使能UART4中断
	UARTIntEnable(UART4_BASE,UART_INT_RX);	// 使能UART4接收中断
	UARTIntRegister(UART4_BASE,UART4_IRQHandler);	//UART4中断地址注册
	IntPrioritySet(INT_UART4,USER_INT3);			//中断优先级设置USER_INT3(0最高)
}

3. Función de servicio de interrupción en serie:

void UART4_IRQHandler(void)		//UART4中断函数-蓝牙BLE接收中断(无人机信息发送给小车)
{
    
    
	uint32_t flag = UARTIntStatus(UART4_BASE,1);//获取中断标志 原始中断状态 屏蔽中断标志		
	UARTIntClear(UART4_BASE,flag);//清除中断标志	
	char ch;
	while(UARTCharsAvail(UART4_BASE))//判断FIFO是否还有数据		
	{
    
    
		ch = UARTCharGet(UART4_BASE);	
		uart4_rec_temp[temp_cnt] = ch;
		temp_cnt ++;
 	}
	if(ch == 'F')
		uart4_rec_check_flag = 1;			// 接收数据解包的标志位置1
	if(temp_cnt >= 50)						//数组存满后清空
	{
    
    
		memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));		// 清空字符数组
		temp_cnt = 0;
	}
	bit_data = !bit_data;
	GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_5, bit_data);		//置低位点亮,保持闪烁,如果LED不闪烁了,表示程序卡死了
}

4. Función de envío de puerto serie:

void UART4_SendString(const char *string)
{
    
    
	int len = strlen(string);
	while(len--)
	{
    
    
		// 等待UART发送缓冲区为空
		while(UARTSpaceAvail(UART4_BASE) == 0);
		
		// 发送字符到UART
		UARTCharPut(UART4_BASE, *string++);
	}
}

5. Analice los datos recibidos por el puerto serie:
primero verifique si el primer número es "A" o "B", y luego verifique si el último carácter de la cadena es "F". Luego indexe el "," en la cadena, divida las dos cadenas numéricas en el medio y use la función atof() para convertir la cadena en un número de coma flotante. Finalmente, almacene el número de punto flotante obtenido en la variable correspondiente, o use la interfaz de depuración para generar, o use la pantalla OLED para generar.

// 串口4数据包解包
void uart4_data_check(void)
{
    
    
	if(uart4_rec_check_flag == 1)		// 分析uart4_rec_temp中的数据
	{
    
    
		uart4_rec_check_flag = 0;
		if(uart4_rec_temp[0] == 'A')		// 是无人机XY坐标数据包
		{
    
    
			int len = strlen(uart4_rec_temp);
			if(uart4_rec_temp[len-1] == 'F')
			{
    
    
				char* token;
				token = strtok(uart4_rec_temp,",");
				token = strtok(NULL,",");
				uart4_rec_x[uav_cnt] = atof(token);
				token = strtok(NULL,",");
				uart4_rec_y[uav_cnt] = atof(token);
				uart4_flight_dist = uart4_flight_dist + sqrt(pow(uart4_rec_x[uav_cnt]-uart4_rec_x[uav_cnt-1],2) + pow(uart4_rec_y[uav_cnt]-uart4_rec_y[uav_cnt-1],2));
				printf("A-X: uart4_rec_x[%d]:%f\r\n",uav_cnt,uart4_rec_x[uav_cnt]);		// 测试
				printf("A-Y: uart4_rec_y[%d]:%f\r\n",uav_cnt,uart4_rec_y[uav_cnt]);		// 测试
				printf("A-D: uart4_flight_dist[%d]:%fm\r\n",uav_cnt,uart4_flight_dist/100);		// 测试
				// ......
			}
			// 处理完成后,清空uart4_rec_temp
			memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));
			temp_cnt = 0;
		}
		else if(uart4_rec_temp[0] == 'B')		// 是火源XY坐标数据包
		{
    
    
			int len = strlen(uart4_rec_temp);
			if(uart4_rec_temp[len-1] == 'F')
			{
    
    
				char* token;
				token = strtok(uart4_rec_temp,",");
				token = strtok(NULL,",");
				uart4_fire[0] = atof(token);
				token = strtok(NULL,",");
				uart4_fire[1] = atof(token);
				printf("B-X: uart4_fire[0]:%f\r\n",uart4_fire[0]);		// 测试
				printf("B-Y: uart4_fire[1]:%f\r\n",uart4_fire[1]);		// 测试
				// ......
			}
			// 处理完成后,清空uart4_rec_temp
			memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));
			temp_cnt = 0;
		}
		else
		{
    
    	// 没找到A/B数据包,清空uart4_rec_temp
			memset(uart4_rec_temp, 0, sizeof(uart4_rec_temp));
			temp_cnt = 0;
		}
	}
}

Supongo que te gusta

Origin blog.csdn.net/qq_45362336/article/details/132128317
Recomendado
Clasificación