Neural Network Braking System
Transcript of Neural Network Braking System
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
COORDENAÇÃO DE ENGENHARIA ELETRÔNICA
ENGENHARIA ELETRÔNICA
ALMIR AUGUSTO BRAGGIO
DJONES ALDIVO BONI
CONTROLE DE FRENAGEM DEAUTOMÓVEIS
COM UTILIZAÇÃO DE REDES NEURAIS
RELATÓRIO DE ATIVIDADE DE PESQUISA
TOLEDO
2013
ALMIR AUGUSTO BRAGGIO
DJONES ALDIVO BONI
CONTROLE DE FRENAGEM DE AUTOMÓVEIS
COM UTILIZAÇÃO DE REDES NEURAIS
Relatório de atividade de pesquisa apresentada como requisito parcial para conclusão da disciplina de Inteligência Artificial Aplicada a Controle, do Curso de Engenharia Eletrônica,da Universidade TecnológicaFederal do Paraná.
Prof. Jaqueline Vargas
TOLEDO
2013
LISTA DE ILUSTRAÇÕES
Figura 1 - Disposição dos controladores no sistema ................................................... 6
Figura 2 - Primeiro controlador .................................................................................... 8
Figura 3 - Curva obtida no Script (fuzzy) ..................................................................... 9
Figura 4 - Rede neural (feed-forward backprop) ....................................................... 10
Figura 5 - Curva fuzzy (vermelho) e simulação da rede neural (azul) ....................... 10
Figura 6 - Curva fuzzy (vermelho) e simulações da rede neural (azul e verde) ........ 11
Figura 7 - Segundo controlador ................................................................................ 12
Figura 8 - Curva obtida no Script (fuzzy) ................................................................... 13
Figura 9 - Curva fuzzy (vermelho) e simulação da rede neural (azul) ....................... 14
Figura 10 - Curva fuzzy (vermelho) e simulações da rede neural (azul e verde) ...... 14
LISTA DE TABELAS
Tabela 1 - Variável de entrada "Velocidade" e valores considerados ......................... 8
Tabela 2 - Variável de entrada "Distância" e valores considerados ............................ 8
Tabela 3 - Variável de entrada "Pressão" e valores considerados ............................ 12
Tabela 4 - Variável de entrada "Atrito" e valores considerados ................................. 12
SUMÁRIO
1 INTRODUÇÃO .................................................................................................. 5
2 DESENVOLVIMENTO ....................................................................................... 6
2.1 PRIMEIRO CONTROLADOR ........................................................................ 8
2.2 SEGUNDO CONTROLADOR ........................................................................ 11
3 CONCLUSÃO .................................................................................................... 16
REFERÊNCIAS .................................................................................................... 17
APÊNDICE A - Arquivo Script do Primeiro Controlador ................................. 18
APÊNDICE B - Arquivo Script do Segundo Controlador ................................ 20
5
1 INTRODUÇÃO
Este trabalho apresenta um estudo de implementação de controle deum
sistema de frenagem de automóveis, através da utilização de redes neurais.
Propõem-se o uso desse controle para possível incorporação ao sistema de um
automóvel de forma a cancelar o tempo de reação do motorista em uma situação de
parada eminente, como um obstáculo, por exemplo.
O sistema proposto consiste de duas redes neurais, onde a primeira leva em
conta as variáveis distância de separação do veículo com um obstáculo e sua
velocidade relativa, e a segunda considera as condições da estrada, atrito estático,
no caso.
A saída destas malhas é a pressão em porcentagem que deve ser aplicada
ao pedal de freio para que o veículo pare em segurança, antes de uma possível
colisão.Os dados para treinamento das redes foram obtidos através de simulações
em trabalhos passados, do mesmo sistema, mas com controle fuzzy.
6
2 DESENVOLVIMENTO
O objetivo deste trabalho é aplicar a técnica de redes neurais em um sistema
de controle de frenagem de um veículo. O problema proposto é de que um veículo
em movimento tenha um obstáculo à frente, ou qualquer outra situação que
necessite de parada total do veículo, e que seja conhecida a situação da rodovia
(atrito estático).
O controlador deve aplicar a pressão correta no sistema de freio para evitar
uma colisão frontal do veículo com o obstáculo, proporcionando uma parada suave.
A malha neural em uso teve seu treinamento adaptado com o uso de dados
simulados de um controlador fuzzy para o mesmo problema. No caso, fora levantado
os resultados do sistema fuzzy e aplicado a técnica ‘back-propagation’, para o
treinamento da rede neural e, em seguida, plotado as curvas para comparação da
eficácia do sistema de aprendizado.
No caso, os conjuntos de entrada são determinados pela velocidade do
veículo (0 a 110km/h), pela distância (até 320m) e pela condição da rodovia (gelo ou
asfalto seco, por exemplo). O conjunto de saída será a pressão a ser aplicada no
sistema de freio.
O sistema fuzzy, trabalho passado, fora construído com dois controladores
conectados em cascata, conformeFigura1. Da mesma maneira, dividiu-se o sistema
neural em duas malhas, com as mesmas entradas e saídas.
Figura1- Disposição dos controladores no sistema
No primeiro controlador, a saída (pressão de freio) é obtida através da
análise entre as entradas “velocidade” e “distância”, em uma superfície ideal (como o
concreto seco, por exemplo). A saída, então, é a pressão a ser aplicada sob
7
condições ideais. O segundo controlador associa a saída do primeiro como uma
entrada e considera também o “atrito” (condições da pista).
De modo geral, o sistema funciona da seguinte maneira: por exemplo, se
oveículo está muito próximo de um obstáculo em uma velocidade relativa alta, o
sistema deve aplicar uma grande quantidade de freio para evitar uma colisão. Do
mesmo modo, se o veículo está muito longe de um obstáculo ou qualquer condição
de parada, uma suave pressão de freio resultará em uma quantidade de
desaceleração suficiente para uma parada em segurança.
A partir da situação descrita, devem-se detalhar alguns objetivos e
suposições:
a) Os freios devem ser aplicados apenas o necessário para a parada
(parada suave);
b) O veículo deve parar por completo antes de qualquer colisão;
c) O veículo está em linha reta com o obstáculo em uma superfície plana e
nivelada;
d) O sistema de freio é ABS, garantindo o não travamento das rodas,
limitando o sistema a considerar apenas atrito estático;
e) A aplicação de pressão de freio é linearmente proporcional com a
desaceleração do veículo;
f) As variáveis de entrada do controlador estão disponíveis;
g) A velocidade máxima do veículo é de 110 km/h.
Assim, pode-seaplicar as técnicas de redes neurais para o sistema.
8
2.1 PRIMEIRO CONTROLADOR
O primeiro controlador, esquematizado na próxima figura, consiste de duas
entradas e uma saída.
Figura2-Primeirocontrolador
A partir dos conjuntos do controlador fuzzy, pode-se definir as entradas da
rede neural de forma a gerar um target coerente para seu treinamento. Os valores
de entrada estão nas tabelas seguintes:
Tabela1 - Variável de entrada "Velocidade" e valoresconsiderados
Nome Símbolo Valor (km/h)
Limite Inferior - 0
MuitoDevagar VL 10
Devagar L 35
Médio M 55
Rápido H 75
MuitoRápido VH 100
Limite Superior - 110
Tabela2 - Variável de entrada "Distância" e valoresconsiderados
Nome Símbolo Valor (m)
Limite Inferior - 0
MuitoCurta VL 15
Curta L 40
Média M 90
Longa H 165
Muito Longa VH 250
Limite Superior - 320
Desenvolvendo um script em Matlab®, considerando a existência dos
sistemas fuzzy, é possível obter uma combinação destes valores de entrada de
9
modo a criar uma matriz de entrada para a rede neural com seus respectivos valores
target (objetivo).
Assim, gera-se uma matriz de entrada com 49 colunas (7 valores de
velocidade e 7 valores de distância considerados) e duas linhas (velocidade e
distância) e obtêm-se um objetivo (pressão de frenagem) por meio do controlador
fuzzy de tamanho 49. O script e a curva de iterações:
% fuzzy_to_neural_1.m
% entradas: velocidade = [0 10 35 55 75 100 110]; distancia = [0 15 40 90 165 250 320]; % obtenção de uma matriz combinada: data1 =
[sort(repmat(velocidade(:),length(distancia),1)),repmat(distancia(:),length
(velocidade),1)]'; % instanciação do controlador fuzzy1: fuzzy_controller_1 = readfis('Fuzzy_Controller_1.fis'); % vetor target: target1 = zeros(1,length(data1)); for m=1:length(data1) target1(m) = evalfis(data1(:,m),fuzzy_controller_1); end plot(target1,'r')
Figura3 - Curvaobtida no Script (fuzzy)
5 10 15 20 25 30 35 40 450
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Índice das Entradas no Controlador (49)
Pre
ssão d
e F
renagem
(%
)
10
Assim, pode-se aplicar o treinamento da rede neural. Utiliza-se a ferramenta
‘nntool’, e importa-se os conjuntos de entrada e target. Na sequência cria-se uma
rede ‘feedforwardbackprop’ com as duas entradas, dois neurônios na primeira
camada, um neurônio de saída e uma saída, como na Figura4. A malha, com os
parâmetros padrão de treinamento no Matlab®, teve execução com 12 iterações.
Figura4 - Rede neural (feed-forward backprop)
Após, executa-se a simulação, e obtém-se aFigura5, como comparação aos
valores do sistema de controle fuzzy da Figura3.
Figura5 - Curvafuzzy (vermelho) e simulação da rede neural (azul)
Como proposta de diminuição do erro, altera-se o parâmetro do treinamento
min_grad para 1e-30 (anterior igual a 1e-7), treina-se o sistema (8 iterações) e
simula-se. As curvas estão naFigura6.
5 10 15 20 25 30 35 40 450
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Índice das Entradas no Controlador (49)
Pre
ssão d
e F
renagem
(%
)
11
Figura6 - Curva fuzzy (vermelho) e simulações da rede neural (azul e verde)
A ferramenta utilizada faz uso do gradiente dos dados entre as interações
como um dos critérios de parada. Diminuindo esse gradiente de 1e-7 para 1e-30, ou
seja, tornando o critério mais exigente, garantimos que a rede forneça uma resposta
mais próxima aos valores de treinamento (desde que a rede convirja), como
podemos ver pela diferença entre as curvas verde e azul, com gradientes 1e-7 e 1e-
30, respectivamente. A curva vermelha mostra os dados de treinamento, obtidos do
controlador fuzzy.
Convém lembrar que, até o momento, não se considerou as condições da
pista.
2.2 SEGUNDO CONTROLADOR
Da mesma maneira que fora feito no controlador 1, é necessário criar
conjuntos das entradas e target. Neste caso, uma das entradas do controlador 2 é
saída do controlador 1, a representação do sistema:
5 10 15 20 25 30 35 40 450
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Índice das Entradas no Controlador (49)
Pre
ssão d
e F
renagem
(%
)
12
Figura7- Segundocontrolador
Os valores de entrada estão nas tabelas seguintes:
Tabela3 - Variável de entrada "Pressão" e valoresconsiderados
Nome Símbolo Valor (%)
Limite Inferior - 0
MuitoDevagar VL 0,1
Devagar L 0,3
Médio M 0,5
Rápido H 0,7
MuitoRápido VH 0,9
Limite Superior - 1
Tabela4 - Variável de entrada "Atrito" e valoresconsiderados
Nome Valor
Gelo 0,15
Neve 0,30
AsfaltoÚmido 0,55
AsfaltoSeco 0,7
ConcretoSeco 0,8
Através de umscript em Matlab®, utilizando o sistema fuzzy do segundo
controlador, é possível obter uma combinação destes valores de entrada de modo a
criar uma matriz de entrada para a rede neural com seus respectivos valores target
(objetivo).
Portanto, gera-se uma matriz de entrada com 35 colunas (7 valores de
pressão de frenagem e 5 valores de atrito considerados) e duas linhas (pressão de
frenagemideal e atrito estático), obtendo-se um objetivo (pressão de frenagem real)
por meio do controlador fuzzy. O script e a curva de iterações:
% fuzzy_to_neural_2.m
13
% entradas: atrito = [0.15 0.3 0.55 0.7 0.8]; pressao = [0 0.1 0.3 0.5 0.7 0.9 1]; % obtenção de uma matriz combinada: data2 =
[sort(repmat(atrito(:),length(pressao),1)),repmat(pressao(:),length(atrito)
,1)]'; % instanciação do controlador fuzzy2: fuzzy_controller_2 = readfis('Fuzzy_Controller_2.fis'); % vetor target: target2 = zeros(1,length(data2)); for m=1:length(data2) target2(m )= evalfis(data2(:,m),fuzzy_controller_2); end plot(target2,'r')
Figura8 - Curvaobtida no Script (fuzzy)
Assim, pode-se aplicar o treinamento da rede neural com o ‘nntool’.
Da mesma maneira que o primeiro controlador cria-se uma rede
‘feedforwardbackprop’ com as duas entradas, dois neurônios na primeira camada,
um neurônio de saída e uma saída. A malha, com os parâmetros padrão de
treinamento no Matlab®, teve execução com 10 iterações.
Após, executa-se a simulação, e obtém-se a Figura9, como comparação aos
valores do sistema de controle fuzzy da Figura8.
5 10 15 20 25 30 350.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Índice das Entradas no Controlador (35)
Pre
ssão d
e F
renagem
Real (%
)
14
Figura9 - Curvafuzzy (vermelho) e simulação da rede neural (azul)
Como proposta de diminuição do erro, altera-se o parâmetro do treinamento
min_grad para 1e-30 (anterior igual a 1e-7), treina-se o sistema (59 iterações) e
simula-se. As curvas estão na Figura10.
Figura10 - Curva fuzzy (vermelho) e simulações da rede neural (azul e verde)
5 10 15 20 25 30 350.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Índice das Entradas no Controlador (35)
Pre
ssão d
e F
renagem
Real (%
)
5 10 15 20 25 30 350.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Índice das Entradas no Controlador (35)
Pre
ssão d
e F
renagem
Real (%
)
15
Novamente, devido a escolha de um gradiente mais exigente, obtemos uma
rede neural com menos erro em relação aos valores de treinamento. As curvas azul
e verde mostram as características das respostas das redes com gradientes 1e-7 e
1e-30, respectivamente, e a curva vermelha mostra os dados de treinamento,
obtidos do controlador fuzzy.
Este controlador, serve para modificar as regras do primeiro sistema.
16
3 CONCLUSÃO
O número de amostras utilizado para o treinamento da rede neural precisa
ser compatível com sua necessidade de precisão. Enquanto mais dados (amostras)
são fornecidas ao treinamento da rede, esta se comporta de forma mais parecida
com o sistema que gerou esses dados.
A aplicação utilizada utiliza o gradiente entre as iterações como critério de
parada ao invés do erro entre os dados do treinamento e a saída. Escolhendo um
erro fixo ao invés de utilizar o gradiente não é a melhor opção, pois o erro mede a
distância entre o ideal (ou desejado) e o simulado enquanto o gradiente mede a
variação entre as iterações, ou seja, é uma forma de medir a aproximação do ponto
limite de convergência.
Aumentar a exigência com respeito ao erro da rede pode causar um elevado
custo computacional, tomando um tempo de treinamento inviável, dependendo da
aplicação.
Há casos em que é muito caro realizar uma grande quantidade de amostras
ou é inviável reduzir o erro a partir de certo ponto. É necessário levar em conta tanto
o custo-benefício dessas escolhas quanto suas implicações na implementação, pois
em aplicações práticas não adianta exigir erro zero em simulações se a precisão dos
os atuadores ou componentes não lhe fornecem o mesmo.
Conclui-se que redes neurais podem ser utilizadas como substitutos para os
controladores fuzzy nos aspectos considerados neste trabalho, sendo possível obter
a partir deles respostas bastante próximas ao desejado.
17
REFERÊNCIAS
Almir A. Braggio, Antonio M. N. Júnior, Controle Fuzzy para um Sistema de Frenagem em um Automóvel, UTFPR, 2013.
Arthur Schuler da Igreja, Tutorial Toolbox FuzzyMatlab, 2012.
Piero P. Bonissone, Kareem S. Aggour, Fuzzy Automated Braking System for CollisionPrevention, GE Corporate Research&Development, Schenectady, NY 12308, USA.
19
% fuzzy_to_neural_1.m
% entradas: velocidade = [0 10 35 55 75 100 110]; distancia = [0 15 40 90 165 250 320]; % obtenção de uma matriz combinada: data1 =
[sort(repmat(velocidade(:),length(distancia),1)),repmat(distancia(:),length
(velocidade),1)]'; % instanciação do controlador fuzzy1: fuzzy_controller_1 = readfis('Fuzzy_Controller_1.fis'); % vetor target: target1 = zeros(1,length(data1)); for m=1:length(data1) target1(m) = evalfis(data1(:,m),fuzzy_controller_1); end
figure(1); % resultado do controle fuzzy (vermelho) plot(target1,'r') holdon % primeiro treinamento com min_grad = 1e-07 (12 iterações) (azul) plot([0.53022 0.44568 0.29514 0.099242 0.034666 0.025656 0.024524 0.55561
0.47314 0.32073 0.10967 0.037095 0.027063 0.025874 0.66142 0.5897 0.43794
0.16759 0.053369 0.037572 0.036261 0.80485 0.75658 0.63542 0.31279 0.10461
0.072518 0.071274 0.92896 0.91012 0.85524 0.61192 0.2715 0.19192 0.18907
0.97964 0.97488 0.96012 0.86986 0.58399 0.44537 0.42897 0.98498 0.98175
0.97171 0.90718 0.66278 0.51811 0.49634],'b') % segundo treinamento com min_grad = 1e-30 (8 iterações) (verde) plot([0.50912 0.41873 0.27195 0.10133 0.043555 0.034141 0.032756 0.5464
0.45949 0.30839 0.11431 0.045384 0.03442 0.03283 0.62994 0.55759 0.41059
0.15983 0.05215 0.035828 0.033624 0.71891 0.66526 0.54094 0.2483 0.074386
0.047835 0.045832 0.93883 0.9277 0.89554 0.73419 0.37572 0.25678 0.25412
0.98614 0.98421 0.97854 0.94245 0.731 0.51829 0.47124 0.98734 0.98579
0.98129 0.9527 0.76267 0.53489 0.48006],'g')
21
% fuzzy_to_neural_2.m
% entradas: atrito = [0.15 0.3 0.55 0.7 0.8]; pressao = [0 0.1 0.3 0.5 0.7 0.9 1]; % obtenção de uma matriz combinada: data2 =
[sort(repmat(atrito(:),length(pressao),1)),repmat(pressao(:),length(atrito)
,1)]'; % instanciação do controlador fuzzy2: fuzzy_controller_2 = readfis('Fuzzy_Controller_2.fis'); % vetor target: target2 = zeros(1,length(data2)); for m=1:length(data2) target2(m )= evalfis(data2(:,m),fuzzy_controller_2); end
figure(2); % resultado do controle fuzzy (vermelho) plot(target2,'r') holdon % primeiro treinamento com min_grad = 1e-07 (10 iterações) (azul) plot([0.78294 0.72904 0.60677 0.48396 0.38444 0.31655 0.29293 0.8546
0.81319 0.71059 0.58766 0.46735 0.37249 0.33708 0.93032 0.90531 0.84279
0.75488 0.64008 0.51582 0.45873 0.95778 0.93889 0.8933 0.82997 0.73887
0.62157 0.55894 0.97093 0.95543 0.91772 0.86753 0.79388 0.69053
0.63004],'b') % segundo treinamento com min_grad = 1e-30 (59 iterações) (verde) plot([0.78703 0.75664 0.6018 0.36189 0.24377 0.21612 0.21269 0.88182 0.8577
0.72127 0.4558 0.29335 0.25087 0.24704 0.9661 0.95591 0.88968 0.70303
0.51821 0.46367 0.47287 0.98483 0.97996 0.94742 0.84808 0.73522 0.71282
0.73301 0.99068 0.9879 0.96944 0.91444 0.85477 0.85192 0.86854],'g')