1
HIDDEN MARKOV MODEL – EXEMPLO DE APLICAÇÃO
Nuno Pessanha Santos
https://marinha.academia.edu/NunoPessanhaSantos
1. Introdução
Tem como objetivo a elaboração de uma solução baseada num Hidden Markov Model
(HMM), para um problema de auto localização de um robô numa grelha.
O presente relatório encontra-se estruturado da seguinte forma: capítulo 2 - dedicado à
descrição do problema; capítulo 3 - focado na formulação matemática por detrás do problema de
estudo; capítulo 4 - apresentados os principais resultados e a descrição da implementação em
MATLAB®; capítulo 5 - efetuadas algumas conclusões do trabalho desenvolvido.
2. Problema
O enunciado do problema pretende que se desenvolva um sistema de auto localização para
um robô móvel, num espaço finito e limitado a duas dimensões – uma sala, com obstáculos. Por
forma a implementar um Hidden Markov Model é assumido que esta sala é representável por uma
grelha bidimensional discreta. A posição inicial do robô é desconhecida e o seu modelo de
movimento na sala será feito de modo aleatório, considerando que o robô se move sempre entre
cada instante de tempo.
O sistema a desenvolver tem como objetivo principal determinar a probabilidade do robô se
encontrar numa célula especifica, considerando todas as observações feitas até ao momento. As
observações são efetuadas recorrendo a sensores que detetam obstáculos nas proximidades, sendo
que foram exploradas duas alternativas (Figura 1): Deteção em 4 direções e em 8 direções.
Figura 1 – (Esq.) Deteção em 4 direções e (Dir.) deteção em 8 direções.
Na Figura anterior as bolas verdes representam a capacidade do robô em aferir em cada
instante de tempo se tem obstáculos na sua vizinhança ou não, sendo que a bola azul representa a
localização do robô.
Um exemplo de grelha (10 por 10) pode ser visto na Figura 2 em que as bolas vermelhas
representam obstáculos, ou seja, posições que o robô não poderá ocupar.
2
Figura 2 - Sala (grelha) e localização dos obstáculos (bolas vermelhas).
A sala representa o espaço total do robô (cada estado corresponde a uma célula sem
obstáculo) e a sua perceção do ambiente pode alterar uma vez que a mudança da posição do robô
atualiza a informação que tem. As leituras dos sensores em cada instante de tempo correspondem
às observações a considerar, isto é, a única coisa que o robô sabe é se há (ou não) obstáculos nas
células adjacentes nas direções dos sensores.
O movimento do robô é aleatório, mas a cada iteração o robô só se pode movimentar para
uma das células adjacentes das direções predefinidas (4 ou 8 direções), desde que não estejam
ocupadas por um obstáculo e desde que estejam dentro dos limites da sala.
Para resolver este problema vai ser utilizado o algoritmo de Baum – Forward, cuja
formulação matemática será abordada no próximo capítulo.
3. Formulação do Problema – HMM
Um HMM é um processo onde existe um dado conjunto de variáveis de estado
(𝑥1, 𝑥2, … , 𝑥𝑛) e uma sequência de observações (𝑦1, 𝑦2, … , 𝑦𝑛) e onde o estado da variável x no
instante de tempo t (𝑥𝑡) só depende do estado dessa variável no instante anterior (𝑥𝑡−1). As
observações no instante t (𝑦𝑡) apenas dependem das variáveis de estado nesse instante (𝑥𝑡).
No problema de estudo, as variáveis de estado (𝑥𝑡) correspondem à célula ocupada pelo robô
em cada instante de tempo e as observações (𝑦𝑡) correspondem aos dados obtidos pelos sensores.
O estado seguinte (𝑥𝑡+1), que corresponde a uma nova localização, é escolhido aleatoriamente
pelo robô, dadas as células livres adjacentes.
Num HMM verificam-se as seguintes propriedades:
𝑃(𝑥𝑡|𝑥1:𝑡−1) = 𝑃(𝑥𝑡|𝑥𝑡−1), ou seja, a probabilidade de o robô estar numa determinada
célula num instante de tempo depende apenas da localização anterior;
𝑃(𝑦𝑡|𝑥1:𝑡, 𝑦1:𝑡−1 ) = 𝑃(𝑦𝑡|𝑥𝑡), ou seja, é assumido que o valor obtido pelo sensor apenas
depende da sua localização na grelha no instante em que a medição é efetuada.
Posto isto, as condições para o problema ser considerado um HMM estão reunidas. Um
HMM é caracterizado por três elementos:
o vetor π - representa a distribuição de probabilidade inicial para cada estado, ou seja, a
distribuição da probabilidade para 𝑡 = 1 onde 𝑃(𝑥1 = 𝑖 ) = 𝜋𝑖;
0 2 4 6 8 10
0
1
2
3
4
5
6
7
8
9
10
11
Environment - Known
3
Matriz A - representa a probabilidade de transição entre estados (do estado i para o estado
j), tal que 𝑃(𝑥𝑡 = 𝑗 |𝑥𝑡−1 = 𝑖) = 𝑎𝑖𝑗;
Matriz B - representa para cada estado a probabilidade de se obter cada uma das
observações, tal que os seus elementos verifiquem 𝑃(𝑦𝑡 = 𝑗 |𝑥𝑡 = 𝑖) = 𝑏𝑖𝑗, para o caso
do espaço de observação discreto do problema.
No problema, a matriz 𝐴 corresponde às probabilidades de, estando o robô numa dada célula,
transitar para as células possíveis adjacentes (correspondente ao movimento do robô),
considerando todas as células existentes (ou seja, as que não estão ocupadas) e a matriz B
corresponde às probabilidades de, estando o robô numa dada célula obter uma determinada
observação através do seu sensor.
Dando um exemplo mais concreto e aplicado ao problema de estudo, considere-se a Figura
3, onde se encontram numeradas todas as células livres da sala, ou seja, todas as localizações que
podem ser ocupadas pelo nosso robô.
Figura 3 – Sala (grelha) com numeração das células livres.
Considerando que num instante de tempo 𝑡 temos 𝑥𝑡 = 19 (correspondente à célula 19 da
Figura 3). Podemos verificar que 𝑎19,28 = 𝑃(𝑥𝑡 = 28 |𝑥𝑡−1 = 19) = 1 e que 𝑎13,28 = 𝑃(𝑥𝑡 =
13 |𝑥𝑡−1 = 19) = 1, mas 𝑎19,𝑗 = 𝑃(𝑥𝑡 = 𝑗 |𝑥𝑡−1 = 19) = 0, qualquer que seja a posição 𝑗 ≠
{13,28}. Ou seja, a matriz A tem em cada linha as probabilidades de transição para as células
adjacentes possíveis do robô se movimentar. Sendo os valores igualmente prováveis e
considerando que o robô tem apenas 4 graus de liberdade para se movimentar, teremos que
𝑎19,13 = 𝑎19,28 = 0,5 e 𝑎19𝑗 = 0 ∀ 𝑗 ≠ {13,28}.
Assim, a matriz A é construída efetuando este procedimento para todas as (𝑖) células livres
de obstáculos e para as (𝑗) possibilidades de transição em cada célula, levando a que a matriz (𝑎𝑖𝑗)
seja construída da seguinte forma:
𝐴 = [
𝑎11 ⋯ 𝑎1𝑗
⋮ ⋱ ⋮𝑎𝑖1 ⋯ 𝑎𝑖𝑗
] (3.1)
Ao serem efetuadas leituras com o sensor (considerando neste exemplo 4 direções), irá ser
obtido o valor 1 para o caso de se detetar um obstáculo e 0 no caso de não detetar nenhum
0 2 4 6 8 10
0
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0
17
0
18
0
0
19
0
20
21
22
23
24
25
26
27
28
29
30
31
32
33
0
34
35
36
37
38
39
40
0
41
42
43
44
45
46
47
48
49
50
51
0
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
0
0
69
70
71
72
73
0
74
75
76
77
78
79
80
0
81
82
83
84
85
86
87
88
4
obstáculo. Admitindo novamente 𝑥𝑡=19, a medição do sensor será 𝑦𝑡 = [1,1,0,0] (Norte, Sul,
Oeste, Este). Isto indicará como opção de movimento para o instante seguinte 𝑥𝑡+1 = 13 ou
𝑥𝑡+1 = 28. Recorda-se que o movimento do robô é aleatório.
Para cada célula o robô pode obter uma de 16 (24) observações (leitura em 4 direções) ou
256 (28) observações (leitura em 8 direções) sendo que a matriz B terá i linhas, correspondentes
ao número de células livres existentes e k colunas, correspondente aos resultados obtidos pelo
sensor. A matriz B apresenta a seguinte estrutura:
𝐵 = [𝑏11 ⋯ 𝑏1𝑘
⋮ ⋱ ⋮𝑏𝑖1 ⋯ 𝑏𝑖𝑘
] (3.2)
Se o sensor for perfeito só existe uma leitura possível em cada posição resultando em 𝑏𝑖𝑗 =
𝑃(𝑦𝑡 = 𝑗|𝑥𝑡 = 𝑖) = 1 ou 𝑏𝑖𝑘 = 𝑃(𝑦𝑡 = 𝑘|𝑥𝑡 = 𝑖) = 0, ∀ 𝑘 ≠ 𝑗. Foram simuladas condições em
que o sensor é afetado por ruído, sendo que os pormenores de implementação serão descritos
pormenorizadamente mais à frente.
Como foi referido no capítulo anterior, foi utilizado o algoritmo de Baum – Forward que é
um algoritmo recursivo que calcula
𝛼𝑡(𝑖) = 𝑃(𝑥𝑡 = 𝑖 , 𝑦1:𝑡) (3.3)
A probabilidade de o robô estar numa determinada posição dadas todas as medições até a
essa iteração é dada através das seguintes expressões:
𝛼1(𝑗) = 𝑏𝑗(𝑦1). 𝜋𝑗 (3.4)
𝛼𝑡(𝑗) = 𝑏𝑗(𝑦𝑡) ∑ 𝑎𝑖𝑗𝑛𝑖=1 𝛼𝑡−1(𝑖) (3.5)
Ou alternativamente na forma matricial:
𝛼1(𝑗) = 𝑑𝑖𝑎𝑔(𝑦1). 𝜋𝑗 (3.6)
𝛼𝑡(𝑗) = 𝑑𝑖𝑎𝑔(𝑦𝑡)𝐴𝑇𝛼𝑡−1(𝑖) (3.7)
onde 𝑑𝑖𝑎𝑔(𝑦𝑡) é uma matriz diagonal com a diagonal principal a ser dada pelas colunas da
matriz 𝐵 correspondente à saída do sensor 𝑦𝑡. A probabilidade de o robô estar numa determinada
localização dadas todas as medições até aquela iteração é dada por:
𝑃(𝑥𝑡 = 𝑖|𝑦1:𝑡) =𝑃(𝑥𝑡 = 𝑖, 𝑦1:𝑡)
𝑃(𝑦1:𝑡)=
𝑃(𝑥𝑡 = 𝑖, 𝑦1:𝑡)
∑ 𝑃(𝑥𝑡 = 𝑖, 𝑦1:𝑡)𝑛𝑖=1
⇔
⇔ 𝑃(𝑥𝑡 = 𝑖|𝑦1:𝑡) =𝛼𝑡(𝑖)
∑ 𝛼𝑡(𝑖)𝑛𝑖=1
(3.8)
Na próxima seção vai ser descrita a implementação experimental elaborada recorrendo ao
software MATLAB®.
4. Descrição e Resultados
Este capítulo descreve alguns aspetos da implementação efetuada em MATLAB®, bem
como a descrição de algumas das simulações efetuadas em subcapítulos dedicados para o efeito.
Se considerarmos uma grelha sem obstáculos e com 𝑛 estados possíveis ( 𝑛 =𝑝𝑜𝑠𝑖çõ𝑒𝑠 𝑛𝑎 𝑔𝑟𝑒𝑙ℎ𝑎 − 𝑜𝑏𝑠𝑡á𝑐𝑢𝑙𝑜𝑠), a matriz 𝐴 vai ter 𝑛 × 𝑛 elementos possíveis e a matriz 𝐵
5
𝑛 × 𝑘. De acordo com a formulação do problema, o número de estados possíveis para transitar e
as medições efetuadas vão originar matrizes esparsas. Em vez de serem calculadas inteiramente
e armazenadas, apenas os elementos que são diferentes de zero são armazenados. Se forem
gravados todos os elementos de uma matriz de 150 × 150 (sem obstáculos) vai levar a 22500
estados possíveis sendo que se considerarmos 8 bytes (e.g. double) por cada elemento vamos ter
uma ocupação de 1,8 GB. Nos sistemas atuais este valor não é um problema, mas por forma a
otimizar isto apenas são guardados os valores diferentes de zero para ambas as matrizes
implementando assim uma série de ciclos em cada iteração por forma a efetuar o respetivo
cálculo.
Relativamente à medição feita pelo sensor este dá-nos um conjunto de bits que representam
a localização dos obstáculos na grelha ( 𝑏𝑖𝑗 = 𝑃(𝑦𝑡 = 𝑗|𝑥𝑡 = 𝑖) = 1 ou 𝑏𝑖𝑘 =
𝑃(𝑦𝑡 = 𝑘|𝑥𝑡 = 𝑖) = 0, ∀ 𝑘 ≠ 𝑗 ), sendo que este valor foi considerado um número binário e
convertido em decimal obtendo apenas um único número para caracterizar a medição em cada
instante de tempo.
Uma das preocupações durante a elaboração deste trabalho foi garantir que o programa era
escalável, e que poderia ser facilmente alterado o número de obstáculos e de células da grelha do
problema para que não se ficasse preso a um cenário específico, mas se pudesse alterar facilmente
estes parâmetros para tal toda a computação dado o tamanho da grelha, os obstáculos e o modelo
de movimento é feita de forma autónoma (exemplo na Figura 4).
(a) (b) Figura 4 – Exemplo de grelha de 20 posições.
A probabilidade de um robô estar numa determinada posição dadas todas as medições até
um determinado instante de tempo decresce até valores que podem ser difíceis de representar. De
acordo com (3.8), é possível normalizar o resultado obtido fazendo com que a soma seja unitária
e contornando este problema (como implementado na Figura 5).
De seguida é apresentado algum pseudocódigo que representa o algoritmo implementado.
6
Figura 5 – Descrição do algoritmo implementado – pseudocódigo.
Nos seguintes subcapítulos são dados alguns exemplos de implementação, abordando alguns
casos específicos em simulação.
4.1.1. Movimentação e medição em 4 direções
Nesta simulação foi considerado que o robô é forçado a mover-se entre cada iteração,
escolhendo o seu destino pelos seus nós vizinhos numa vizinhança possível de 4 direções, sendo
que o sensor também é capaz de detetar obstáculos numa vizinhança de 4 direções. Na Figura 6 é
possível observar a probabilidade para a localização do robô, dadas as medições. As bolas
vermelhas representam obstáculos e a bola verde representa a posição atual do robô.
Não foi representada a probabilidade 𝑃(𝑥1) mas esta é considerada equiprovável para todas
as localizações passíveis de serem ocupadas pelo robô. Em (a) é possível verificar que o robô
deteta um obstáculo à sua direita, sendo que todas as localizações em que existem obstáculos à
direita são dadas como localizações igualmente prováveis. Em (b) o robô move-se para outra
localização tendo agora um obstáculo à sua esquerda, sendo que agora nem todas as localizações
em que seria possível obter um obstáculo à esquerda são dadas como prováveis tendo em conta
as medições efetuadas. Sendo que em (c), (d) e (e) vão ser recolhidos cada vez mais dados de
sensor e obtendo com cada vez mais certeza (valor das probabilidades a ficar concentrado em
determinados estados) da posição do robô na grelha. Até que a probabilidade para um determinado
Algoritmo implementado - HMM
Inicialização:
Definição do tamanho da grelha;
Definição da localização dos obstáculos;
Definição das direções de movimento;
Cálculo da grelha – Estados possíveis;
Cálculo da matriz A – Guardados elementos diferentes de 0;
Cálculo da matriz B – Guardados elementos diferentes de 0;
Cálculo da posição inicial do robô (aleatória);
Fim de Inicialização
Baum (1ª iteração):
Medição do sensor (conversão para decimal);
𝛼1(𝑗) = 𝑏𝑗(𝑦1). 𝜋𝑗;
Normalizar valores obtidos;
Mostrar resultados na grelha;
Mover para uma nova posição;
Fim da 1ª iteração
Baum (Restantes iterações):
Medição do sensor (conversão para decimal);
𝛼𝑡(𝑗) = 𝑏𝑗(𝑦𝑡) ∑ 𝑎𝑖𝑗𝑛𝑖=1 𝛼𝑡−1(𝑖);
Normalizar os valores obtidos;
Mostrar resultados na grelha;
Se valor máximo de 𝛼𝑡 é maior que um threshold parar ciclo;
Mover para uma nova posição;
7
estado é igual a 1, e é obtida com 100% de certeza a localização do robô na grelha, deixando de
existir incerteza na sua localização.
(a) (b)
(c) (d)
(e) Figura 6 – Movimentação e medição em 4 direções: (a) 𝑷(𝒙𝟏|𝒚𝟏); (b) 𝑷(𝒙𝟐|𝒚𝟏:𝟐); (c) 𝑷(𝒙𝟑|𝒚𝟏:𝟑); (d) 𝑷(𝒙𝟒|𝒚𝟏:𝟒); (e)
𝑷(𝒙𝟓|𝒚𝟏:𝟓).
4.1.2. Movimentação e medição em 8 direções
Nesta simulação foi novamente considerado que o robô é forçado a mover-se entre cada
iteração, escolhendo o seu destino pelos seus nós vizinhos numa vizinhança possível de 8
direções, sendo que o sensor também é capaz de detetar obstáculos numa vizinhança de 8 direções.
Na Figura (7) seguinte é possível ver a probabilidade para a localização do robô, dadas as
medições. As bolas vermelhas representam obstáculos e a bola verde representa a posição atual
do robô.
8
(a) (b) Figura 7 – Movimentação e medição em 8 direções: (a) 𝑷(𝒙𝟏|𝒚𝟏); (b) 𝑷(𝒙𝟐|𝒚𝟏:𝟐).
𝑃(𝑥1) é mais uma vez considerada igualmente provável para todas as localizações passíveis
de serem ocupadas pelo robô. É possível verificar agora que com mais informação proveniente
do sensor a incerteza diminui mais rapidamente pois é possível recolher mais informação em cada
iteração (instante de tempo). Em (a) é possível verificar que o robô deteta um obstáculo a sudoeste,
sendo que todas as localizações em que existem obstáculos a sudoeste são dadas como
localizações igualmente prováveis. Em (b) é possível verificar que a incerteza desaparece, e é
obtido com 100% certeza a localização do robô na grelha.
4.1.3. Erro de sensor - 4 direções
O erro de sensor é simulado fazendo com que o sensor tenha observações erradas (ou com
probabilidade de erro). O espaço de observação neste caso concreto vai ser de 24 = 16
combinações possíveis, se consideramos que numa determinada iteração a saída do sensor é 𝒮 no
caso de um sensor ideal (sem erro) temos que 𝑃(𝑦𝑡 = 𝒮|𝑥𝑡) = 1 e 𝑃(𝑦𝑡 ≠ 𝒮|𝑥𝑡) = 0 . Se
considerarmos que estamos na presença de erro vamos ter 𝑃(𝑦𝑡 = 𝒮|𝑥𝑡) = 𝜃 e 𝑃(𝑦𝑡 ≠ 𝒮|𝑥𝑡) =1−𝜃
24−1, com 0 ≤ 𝜃 ≤ 1, sendo que assim o sensor vai simular um ambiente em que as medições são
ruidosas. Foi utilizado um 𝜃 = 0,85 nas simulações apresentadas nas Figuras abaixo.
(a) (b)
9
(c) (d)
(e) (f) Figura 8 – Movimentação e medição em 4 direções com erro: (a) 𝑷(𝒙𝟏|𝒚𝟏); (b) 𝑷(𝒙𝟐|𝒚𝟏:𝟐); (c) 𝑷(𝒙𝟑|𝒚𝟏:𝟑); (d)
𝑷(𝒙𝟒|𝒚𝟏:𝟒); (e) 𝑷(𝒙𝟓|𝒚𝟏:𝟓); (f) 𝑷(𝒙𝟔|𝒚𝟏:𝟔).
Não foi representada a 𝑃(𝑥1) mas esta é considerada igualmente provável para todas as
localizações passíveis de serem ocupadas pelo robô. É possível verificar que o robô demora mais
algumas iterações a verificar corretamente onde está, sendo que ao utilizar um sensor perfeito a
incerteza associada à sua localização é menor. É mesmo possível verificar em (d) e (e) que apesar
de existir alguma certeza na localização do robô continuam a existir alguns pontos que mantêm
probabilidade (embora menor) da sua localização. Até que chega finalmente a uma posição em
que a sua probabilidade é de aproximadamente 0,85, sendo que nas restantes localizações verifica-
se a existência de uma probabilidade residual.
4.1.4. Erro de sensor - 8 direções
O erro de sensor é simulado, fazendo com que o sensor tenha observações erradas. Muito à
semelhança do efetuado no subcapítulo anterior temos que o espaço de observação é de 28 = 256
combinações possíveis, se consideramos que numa determinada iteração a saída do sensor é 𝒮 no
caso de um sensor ideal (sem erro) temos que 𝑃(𝑦𝑡 = 𝒮|𝑥𝑡) = 1 e 𝑃(𝑦𝑡 ≠ 𝒮|𝑥𝑡) = 0 . Se
considerarmos que estamos na presença de erro vamos ter 𝑃(𝑦𝑡 = 𝒮|𝑥𝑡) = 𝜃 e 𝑃(𝑦𝑡 ≠ 𝒮|𝑥𝑡) =1−𝜃
28−1, com 0 ≤ 𝜃 ≤ 1, sendo que assim o sensor vai simular um ambiente em que as medições são
ruidosas. Foi utilizado um 𝜃 = 0,85 nas simulações apresentadas nas Figuras abaixo.
10
(a) (b)
(c) Figura 9 – Movimentação e medição em 8 direções com erro: (a) 𝑷(𝒙𝟏|𝒚𝟏); (b) 𝑷(𝒙𝟐|𝒚𝟏:𝟐); (c) 𝑷(𝒙𝟑|𝒚𝟏:𝟑).
Não foi representada a 𝑃(𝑥1) mas esta é considerada igualmente provável para todas as
localizações passíveis de serem ocupadas pelo robô. É possível verificar que apesar de termos
introduzido incerteza na medição obtemos uma estimativa com um grau de confiança elevado
(probabilidade elevada), porque apesar de existir incerteza na medição ao estarmos a recolher
mais informação em cada instante de tempo acaba por, de certa forma, “compensar” esta
incerteza.
4.1.5. Percurso predefinido
Por forma a comparar capacidades de medição dos sensores e a vantagem de termos mais
informação por parte do sensor em cada instante de tempo, foi efetuado um percurso predefinido
conforme ilustrado na Figura 10.
Figura 10 – Movimentação num percurso predefinido.
Ao fim de 3 iterações utilizando o sensor de 8 direções a posição do robô é estimada com
sucesso, enquanto o sensor de 4 direções necessita de 12 iterações (Figura 11) para obter com
certeza a posição do robô.
11
Este percurso foi escolhido de forma propositada para explorar o facto de, por exemplo, na
posição 3 o sensor de 4 direções não detetar qualquer obstáculo, enquanto que o sensor de 8
direções deteta um obstáculo a sudoeste. A deteção de obstáculos (informação) da grelha é um
dos elementos essenciais para poder aferir a localização do robô, pois essa informação vai fazer
com que a incerteza diminua e a posição do robô seja estimada com sucesso.
(a) (b) Figura 11 – Movimentação num percurso predefinido: (a) 𝑷(𝒙𝟏𝟐|𝒚𝟏:𝟏𝟐) - sensor 4 direções; (b) 𝑷(𝒙𝟑|𝒚𝟏:𝟑) – sensor 8
direções.
5. Conclusões
O trabalho atual apresenta um problema de localização numa grelha discreta que foi
formulado e resolvido usando HMM. Para tal foi utilizado o algoritmo de Baum – Forward que
possibilitou uma implementação simples utilizando o software MATLAB®.
Foram abordadas duas configurações possíveis de sensor (4 e 8 direções) bem como a
possibilidade de existência de incerteza na medição. Foi também explorada a possibilidade de
movimentação em 4 e 8 direções conforme a respetiva configuração de sensor escolhida.
Outros cenários e possibilidades poderiam ser testados, como por exemplo a possibilidade
de ficar na mesma posição entre iterações, a existência de memória de movimento em que o robô
procurasse não repetir posições onde tivesse estado, outro tipo de sensores, entre muitas outras
possibilidades. Seria impossível contemplar todas estas possibilidades em tempo útil, sendo que
a solução implementada permite uma correta elaboração de um HMM e de uma possibilidade de
aplicação real.
Algumas conclusões nesta aplicação específica são:
Apesar da introdução de erro de medição no sensor, ao utilizar o sensor de 8 direções
(mais informação em cada iteração) vai existir uma compensação dessa incerteza
obtendo valores precisos;
Ao introduzir erro de medição obtém-se sempre algum nível de incerteza, sendo que
a probabilidade máxima e respetiva estimação do robô vai ser inferior a 1;
Mais informação do sensor leva a melhores e mais rápidos resultados (como
esperado);
Pontos na grelha com as mesmas medições de sensor causam sempre incerteza na
sua localização, sendo esta incerteza é menor à medida que se vai recolhendo mais
informação do ambiente (mais medições do sensor).
Outro fator que é importante realçar é capacidade do programa desenvolvido ser invariante
relativamente ao número de estados possíveis e obstáculos, bastando que estes sejam definidos
inicialmente. Também a matriz 𝐴 e 𝐵 são calculadas e armazenadas de acordo com esta
informação, armazenando apenas os valores diferentes de 0 por forma a otimizar a memória
utilizada.
12
NOTAS:
Código utilizado disponível em:
https://github.com/Pessanha24/HMM_ToyExample_Matlab