Projeto

Geral

Perfil

Ações

Atividade #1091

Fechada

Meta #1230: Ter bons filtro de posição e estimatidor de velocidades

Modificar o filtro de Kalman

Adicionado por Lucas Germano mais de 5 anos atrás. Atualizado mais de 4 anos atrás.

Situação:
Fechada
Prioridade:
Normal
Início:
23/08/2019
Data prevista:
30/08/2019

Descrição

Um grande problema que temos é tratar as informações quando algum objeto sai da visão sem efetivamente ter saído de campo.

Temos implementado Lifetime do robô e da bola.

Porém o Lifetime da bola por enquanto apenas a mantém na última posição, sem propagar sua trajetória.

Já o dos robôs tenta propagar sua trajetória mas está bastante incorreto, aumentando muito a velocidade dos robôs. Quando o robô está parado, o lifetime apenas o mantém em sua última posição.

O foco do trabalho é melhorar o Kalman colocando como input a velocidade medida do robô e como consequência, espera-se que o Lifetime funcione bem naturalmente.


Arquivos

BallLifeTime.png (72,5 KB) BallLifeTime.png Gabriel Borges da Conceição, 19/08/2019 18:59 h
LifeTimeRobotExec.png (8,77 KB) LifeTimeRobotExec.png Gabriel Borges da Conceição, 23/08/2019 19:03 h
LifeTimeBall.png (96,3 KB) LifeTimeBall.png Gabriel Borges da Conceição, 23/08/2019 19:03 h
LifeTimeRobot.png (37,7 KB) LifeTimeRobot.png Gabriel Borges da Conceição, 23/08/2019 19:03 h
Video_LifeTimeRobot.wmv (1,06 MB) Video_LifeTimeRobot.wmv Gabriel Borges da Conceição, 23/08/2019 19:14 h
TesteLifeTimeBall.png (36,2 KB) TesteLifeTimeBall.png Gabriel Borges da Conceição, 23/08/2019 19:28 h
Video_TesteLifeTimeBall.wmv (451 KB) Video_TesteLifeTimeBall.wmv Gabriel Borges da Conceição, 23/08/2019 19:29 h
DeleteBall.png (38,7 KB) DeleteBall.png Gabriel Borges da Conceição, 23/08/2019 19:37 h
Apagabola.png (39,1 KB) Apagabola.png Gabriel Borges da Conceição, 23/08/2019 19:37 h
BallOutAntes.png (72,5 KB) BallOutAntes.png Gabriel Borges da Conceição, 23/08/2019 19:51 h
Video_BallOutNoDecode.wmv (685 KB) Video_BallOutNoDecode.wmv Gabriel Borges da Conceição, 23/08/2019 19:51 h
Video_LTBallRolando.wmv (990 KB) Video_LTBallRolando.wmv Gabriel Borges da Conceição, 23/08/2019 20:00 h
ConfereSeUsaControle.png (98,6 KB) ConfereSeUsaControle.png Gabriel Borges da Conceição, 27/08/2019 14:37 h
SemEntradaDeControle.png (49,8 KB) SemEntradaDeControle.png Gabriel Borges da Conceição, 27/08/2019 14:40 h
Medição.png (19,1 KB) Medição.png Gabriel Borges da Conceição, 27/08/2019 14:51 h
zk.png (10,6 KB) zk.png Gabriel Borges da Conceição, 27/08/2019 14:52 h
AtualizaXkk.png (51,6 KB) AtualizaXkk.png Gabriel Borges da Conceição, 27/08/2019 14:56 h
TransformarH.png (15,9 KB) TransformarH.png Gabriel Borges da Conceição, 27/08/2019 14:57 h
TransformarReZk.png (51 KB) TransformarReZk.png Gabriel Borges da Conceição, 27/08/2019 15:00 h
FValuesKalman.png (101 KB) FValuesKalman.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
HValuesKalman2.png (163 KB) HValuesKalman2.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
MatrizeseEquações.png (148 KB) MatrizeseEquações.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
HValuesKalman.png (162 KB) HValuesKalman.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
PValuesKalman.png (134 KB) PValuesKalman.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
PValuesKalman2.png (178 KB) PValuesKalman2.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
RKalman.png (152 KB) RKalman.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
RvaluesKalman.png (150 KB) RvaluesKalman.png Gabriel Borges da Conceição, 04/09/2019 12:37 h
MexendoNoP.mp4 (7,05 MB) MexendoNoP.mp4 Gabriel Borges da Conceição, 06/09/2019 16:02 h
SemMexerNoP.mp4 (5 MB) SemMexerNoP.mp4 Gabriel Borges da Conceição, 06/09/2019 16:02 h
R001P1000Somando.mp4 (6,28 MB) R001P1000Somando.mp4 Gabriel Borges da Conceição, 07/09/2019 23:47 h
R01P100Somando.mp4 (5,58 MB) R01P100Somando.mp4 Gabriel Borges da Conceição, 07/09/2019 23:47 h
PSum.png (30,2 KB) PSum.png Gabriel Borges da Conceição, 07/09/2019 23:47 h
R01P1000SemSomar.mp4 (5,34 MB) R01P1000SemSomar.mp4 Gabriel Borges da Conceição, 07/09/2019 23:48 h
TesteKalmanSomandoP.png (4,19 KB) TesteKalmanSomandoP.png Gabriel Borges da Conceição, 07/09/2019 23:50 h
TesteOldKalmam.png (6,04 KB) TesteOldKalmam.png Gabriel Borges da Conceição, 07/09/2019 23:50 h
TesteKalman.png (6,52 KB) TesteKalman.png Gabriel Borges da Conceição, 07/09/2019 23:50 h
VInZP100.png (5,68 KB) VInZP100.png Gabriel Borges da Conceição, 09/09/2019 18:15 h
VInZ.png (5,88 KB) VInZ.png Gabriel Borges da Conceição, 09/09/2019 18:15 h
AnalisandoReacaoAVariacao.png (7,91 KB) AnalisandoReacaoAVariacao.png Gabriel Borges da Conceição, 09/09/2019 18:40 h
LifeTimeDoRobôFuncionando.mp4 (642 KB) LifeTimeDoRobôFuncionando.mp4 Gabriel Borges da Conceição, 09/09/2019 19:37 h
calcdt_principal.png (170 KB) calcdt_principal.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
infinito.png (160 KB) infinito.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
kalman B.png (195 KB) kalman B.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
mudancas no dt.png (150 KB) mudancas no dt.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
limitacaofps.png (162 KB) limitacaofps.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
ballfps.png (157 KB) ballfps.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
ballsfps.png (173 KB) ballsfps.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
ballZ.png (71,5 KB) ballZ.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
calcdt.png (183 KB) calcdt.png Antonio de Souza Gomes Pereira, 29/09/2019 04:00 h
WhatsApp Video 2019-09-29 at 00.58.27.mp4 (5,63 MB) WhatsApp Video 2019-09-29 at 00.58.27.mp4 Antonio de Souza Gomes Pereira, 29/09/2019 04:18 h
Ações #1

Atualizado por Nicolas Oliveiramais de 5 anos

Trabalhar nesta tarefa!

Ações #2

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

  • Título alterado de Analisar e corrigir a bola estar sumindo quando está em alta velocidade para Analisar e tratar casos de bola fora da visão
  • Atribuído para alterado de Lucas Germano para Intel
Ações #3

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

  • Início alterado de 30/04/2019 para 16/08/2019
Ações #4

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

O primeiro passo foi implementar o lifetime da bola no código novo. O lifetime foi feito no código antigo durante a RoboCup, utilizando uma ideia que a RoboFEI compartilhou com a gente.

![](BallLifeTime.png)

Basicamente, se está ocorrendo a primeira iteração em que não recebemos a bola da visão (empty array), então o vetor de bolas da última iteração é passado ao resto do código até que passe T segundos ou que chegue novas informações.

Esse tempo T é setado no ElapsedTime (basta clicar duas vezes em cima dele) e foi deixado como 10s por enquanto a fim de podermos testar no PIRF e realmente perceber isso acontecendo. Vamos analisar e chegar a um consenso de tempo "ideal".

A RoboFEI deixa tempo infinito, o que faz sentido já que, se a bola efetivamente estiver fora do campo, o comando do juiz mudará para Halt.

O próximo passo é fazer com que, ao invés da posição, a trajetória da bola seja mantida durante certo tempo caso ela saia da visão. Precisamos analisar se isso deve ser feito no Kalman ou "manualmente".

A VI da foto é SSL Detection Frame. Pra chegar até ela no códido: No while da visão, receiveDecodeAndDoKalman -> decodeCameras -> Decode SSL Wrapper Package -> SSL Detection Frame.

Ações #5

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

  • Data prevista ajustado para 31/08/2019
Ações #6

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Além do lifetime, foi refeito, na robocup, a parte de ignorar lados na visão. Isso também foi copiado para o código novo e se encontra na mesma VI.

Ações #7

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

O Nicolas informou que existe o lifetime dentro do Kalman e que já está implementado para os robôs. Durante a robocup, ele viu que tinha um erro na implementação pra bola e decidiu fazer na parte de decodificação de pacotes mesmo, como mostrado acima.

Devemos então retirar de onde atualmente está sendo feito e corrigir o que tem no Kalman.

Além disso, não sabemos se o lifetime dos robôs mantém a posição ou se mantem a trajetória. Devem ser realizados testes afim de averiguar isso.

Outro fato relacionado a isso é que as estimativas de velocidade estão sendo feitas pós Kalman e não sabemos como está o input e tratamento de velocidades no kalman. A ideia é fazermos essa estimativa com a derivada do labview (que usa método de tustin) antes do Kalman (logo, com as posições não filtradas) e passar isso como input.

Ações #8

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Foi criada a branch LifeTime, a partir da dev, para trabalhar nesta tarefa.

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Foram encontrados os lifetime dos robôs e bola no Kalman.

LifeTime do robô:

Phoenix -> receiveDecodeAndDoKalman -> KalmanAndMakeFrame -> SSL Detection Frame Simple Estimamtor Cameras VelCmd -> SSL Detection Frame Simple Estimamtor Kalman VelCmd -> SSL Detection Robot Estimamtor Kalman VelCmd -> SSL Detection Robots Delete Invalids
![](LifeTimeRobot.png)
![](LifeTimeRobotExec.png)

Também há para a bola (mesma conta do robô):

Phoenix -> receiveDecodeAndDoKalman -> KalmanAndMakeFrame -> SSL Detection Frame Simple Estimamtor Cameras VelCmd -> SSL Detection Frame Simple Estimamtor Kalman VelCmd -> SSL Detection Ball Estimamtor Kalman VelCmd:

![](LifeTimeBall.png)

Em testes no grSim, percebi que o lifetime do robô tenta manter a trajetória, mas ela não fica boa, como segue no vídeo abaixo:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4426, container_id: 1091, container_type: "Issue", filename: "LifeTimeBall.png", disk_filename: "190823190332_LifeTimeBall.png", filesize: 98561, content_type: "image/png", digest: "030c18c1e153f674b72b6bced00cdc16", downloads: 0, author_id: 93, created_on: "2019-08-23 19:03:32.000000000 +0000", description: "", disk_directory: "2019/08">, #<Attachment id: 4425, container_id: 1091, container_type: "Issue", filename: "LifeTimeRobotExec.png", disk_filename: "190823190331_LifeTimeRobotExec.png", filesize: 8983, content_type: "image/png", digest: "443d89d28a41c7b4f538983a818c6997", downloads: 0, author_id: 93, created_on: "2019-08-23 19:03:31.000000000 +0000", description: "", disk_directory: "2019/08">, #<Attachment id: 4427, container_id: 1091, container_type: "Issue", filename: "LifeTimeRobot.png", disk_filename: "190823190332_LifeTimeRobot.png", filesize: 38570, content_type: "image/png", digest: "b4ecf866391d01869003b73b01f7d733", downloads: 0, author_id: 93, created_on: "2019-08-23 19:03:32.000000000 +0000", description: "", disk_directory: "2019/08">, #<Attachment id: 4428, container_id: 1091, container_type: "Issue", filename: "Video_LifeTimeRobot.wmv", disk_filename: "190823191447_Video_LifeTimeRobot.wmv", filesize: 1109569, content_type: "video/x-ms-wmv", digest: "c0a4680ab019d6bcc934bc35639eef65", downloads: 0, author_id: 93, created_on: "2019-08-23 19:14:47.000000000 +0000", description: "", disk_directory: "2019/08">]:Array Did you mean? find_index)

Acredito que isso tenha acontecido pelo fato de as velocidades input no Kalman serem as que a gente mandou na intel na última iteração. Vou colocar o estimador de velocidades feito pelo Nicolas nessa parte e analisar o resultado.

Ações #10

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Para testar o lifetime da bola fiz o seguinte:
![](TesteLifeTimeBall.png).

Segue o resultado:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4429, container_id: 1091, container_type: "Issue", filename: "TesteLifeTimeBall.png", disk_filename: "190823192815_TesteLifeTimeBall.png", filesize: 37022, content_type: "image/png", digest: "855ddfcb89fd522c6fc7a324cff2fab9", downloads: 0, author_id: 93, created_on: "2019-08-23 19:28:15.000000000 +0000", description: "", disk_directory: "2019/08">]:Array Did you mean? find_index)

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Coloquei 10s no tempo dos LifeTimes da bola e robô para fazer os testes.

Percebi que o erro do lifetime da bola se dá pelo seguinte:

Como é feito o LifeTime: Se determinado robô tiver Valid Falso, ele é mantido no vetor até que dê o tempo. Esse vetor vai dentro de um cluster (Detection Frame) e é passado por feedback node e por isso o robô continua nele.

Porém, no passo a passo de recebimento de dados e tratamento desse cluster do feedback node no caso da bola tem uma diferença em relação ao robô, que é a VI CorrelateBalls:

![](Apagabola.png)
![](DeleteBall.png)

Essa parte do código elimina a bola que estava no cluster do feedback node, então quando chega na parte do lifetime no Kalman, não tem mais bola.

Confesso que não entendi direito o que essa VI CorrelateBalls faz.

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

Agora, se fizermos o mesmo teste na VI SSL Detection Frame (que fica na parte de decodificação da câmera) dá certo já que o código que elimina a bola acima continua recebendo ela.

Teste:
![](BallOutAntes.png)

Execução (coloquei 5s):

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4434, container_id: 1091, container_type: "Issue", filename: "Video_BallOutNoDecode.wmv", disk_filename: "190823195137_Video_BallOutNoDecode.wmv", filesize: 701533, content_type: "video/x-ms-wmv", digest: "962ebc661506cb85efea3114f1d1dbf0", downloads: 0, author_id: 93, created_on: "2019-08-23 19:51:37.000000000 +0000", description: "", disk_directory: "2019/08">, #<Attachment id: 4433, container_id: 1091, container_type: "Issue", filename: "BallOutAntes.png", disk_filename: "190823195137_BallOutAntes.png", filesize: 74275, content_type: "image/png", digest: "d3ecd9106c381ca61b917e08464daea9", downloads: 0, author_id: 93, created_on: "2019-08-23 19:51:37.000000000 +0000", description: "", disk_directory: "2019/08">]:Array Did you mean? find_index)

Ações #14

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

O LifeTime da bola apenas a mantém na mesma posição, como segue:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4435, container_id: 1091, container_type: "Issue", filename: "Video_LTBallRolando.wmv", disk_filename: "190823200026_Video_LTBallRolando.wmv", filesize: 1013569, content_type: "video/x-ms-wmv", digest: "a7a29adb6778fe80b5f4c7dea869321e", downloads: 0, author_id: 93, created_on: "2019-08-23 20:00:26.000000000 +0000", description: "", disk_directory: "2019/08">]:Array Did you mean? find_index)

Ações #15

Atualizado por Gabriel Borges da Conceiçãomais de 5 anos

  • Data prevista alterado de 31/08/2019 para 30/08/2019
  • Início alterado de 16/08/2019 para 23/08/2019
Ações #16

Atualizado por Nicolas Oliveiramais de 5 anos

Nesse teste do lifetime do robô, vc desligou a inserção do comando enviado pra ele no filtro? Pq se n isso pode ter influenciado e muito esse teste.

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Nicolas Oliveira escreveu:

Nesse teste do lifetime do robô, vc desligou a inserção do comando enviado pra ele no filtro? Pq se n isso pode ter influenciado e muito esse teste.

Não fiz isso, mas percebi que isso não fez diferença pois não estão sendo usadas as velocidades de controle no filtro:
![](ConfereSeUsaControle.png)

A parte do Kalman que usa as velocidades de controle está na foto acima, u_k representa isso. Repare que se our_robots for falso, o cálculo feito com isso não é utilizado e é passado uma matriz nula. Isso faz sentido pois não temos as velocidades de controle dos inimigos.

Mas, está sendo passado False para esse control tanto para o Kalman dos inimigos quanto dos nossos robôs:
![](SemEntradaDeControle.png)

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Como estamos discutindo, a ideia era parar de usar as velocidades de controle como input no Kalman (uso esse que é opcional e não é recomendado em nosso caso) e passar a usar a velocidade "medida", que seria calculada usando a derivada do LabVIEW (método de Tustin) a partir da posição ainda sem tratamento do Kalman.

Como disse acima, já percebi que o input de controle não está de fato sendo utilizado.

Em relação a entrar com as velocidades medidas, entendi o seguinte:

Contribuição da Medição:
![](Medição.png)

Cálculo de zk:
![](zk.png)
Sendo que xk é o vetor com x, vx, y, vy, orinet, vang.

Olhando o nosso código, percebi que zk tem apenas 3 coodenadas, ou seja, apenas posição e sem as velocidades.
Então """basta"""" introduzirmos vx, vy e vang em zk, fazendo uma matriz 6x1 ao invés de 3x1.

Mas isso tem outras implicações. A conta de fato é feita na seguinte VI:
![](AtualizaXkk.png)

Transformar zk em 6x1 implica em:

1. Transformar H (e consequentemente H') de 3x6 em 6x6. H e H' são as matrizes que saem da subVI da foto acima.
Isso deve ser feito em:
![](TransformarH.png)

2. Transformar R de 3x3 em 6x6. Isso deve ser feito em:
![](TransformarReZk.png)

É também na VI da última foto acima que devemos inserir em zk as coordenadas relativas às velocidades.

Então agora preciso entender o significado dos valores dos elementos dessas matrizes para poder aumentá-las e depois pensar em como testar essas mudanças.

Ações #19

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

  • Título alterado de Analisar e tratar casos de bola fora da visão para Modificar o filtro de Kalman
Ações #20

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

  • Descrição atualizado(a) (diff)
Ações #21

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Em relação ao robô ganhar muita velocidade e ir para o infinito quando ele sai da visão, ainda não consegui identificar o que faz isso.

Consegui eliminar a hipótese de ser o controle, pois nada de controle está sendo usado no Kalman.

Ações #22

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

  • Arquivo nãoécontrole.mp4 adicionado
Ações #23

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

  • Arquivo excluído (nãoécontrole.mp4)
Ações #24

Atualizado por Nicolas Oliveiraaproximadamente 5 anos

A ideia de inserir a velocidade é esse caminho mesmo!

Agora sobre o teste, refaça ele colocando probe nas variáveis de interesse.

Ações #25

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Nicolas Oliveira escreveu:

A ideia de inserir a velocidade é esse caminho mesmo!

Agora sobre o teste, refaça ele colocando probe nas variáveis de interesse.

O problema de usar probe é que abrir uma dessas VIs faz o código ficar muito lento e as informações deixam de ser atualizadas.
Depois pensei em comparar as velocidades que vão sair do "novo Kalman" com as estimativas geradas no Team And Side, as quais já sabemos que apresentam resultado condizente com a realidade.

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Tenho estudado como funcionam as matrizes e o significado de seus valores. Coletei os seguintes dados baseados no curso: https://www.udemy.com/autonomous-robots-kalman-filter/

Matrizes e equações:
![](MatrizeseEquações.png)

Matriz P:
![](PValuesKalman.png)

E

![](PValuesKalman2.png)

Matriz F:
![](FValuesKalman.png)

Matriz H:
![](HValuesKalman.png)

E

![](HValuesKalman2.png)

Matriz R:
![](RKalman.png)

E

![](RvaluesKalman.png)

Ações #27

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Meu foco não está sendo entender como funcionam ou são geradas as equações, já temos tudo pronto no nosso código. Estou focado apenas em entender o significado de cada matriz para poder aumenta-las e entrar com as velocidades medidas e ajustar seus valores de forma a melhorar o filtro.

O instrutor do vídeo mencionou que a parte mais importante é o ajuste dos valores das matrizes!

Ações #28

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Trabalhei com o Antonio ontem e mudamos algumas coisas conceituais em relação a como queremos informar as velocidades.

A princípio queríamos pegar a posição direto das câmeras, usar a derivada de tustin do labview e colocar na matriz z a posição e a velocidade.

Porém, não achamos em lugar nenhum um exemplo em que há input de velocidades no Z. O curso que fizemos só colocava posição no Z. Então ficamos em dúvida se pode colocar ou se isso seria um erro conceitual. Vamos procurar o Major Renault para tirar essas dúvidas.

Só encontramos input de velocidades na matriz u. Então decidimos colocar nela. Essa parte da matriz u já estava implementada em nosso código, mas estava disabled. Bom, tivemos que mudar um pouco as contas com o u. Reescrevemos essa equação de acordo com o um material que achamos na internet.

Aqui temos também uma dúvida conceitual. Teoricamente, u é a matriz das velocidades de controle e não de medidas. Mas no curso que fizemos, por exemplo, o simulador executava exatamente a velocidade de controle. Então acaba sendo a velocidade que o robô está executando, que difere da medida pelo fato de haver imprecisão nas medições, como ruído e etc.

Escolhemos, para a programar de fato, pegar as velocidades saídas do bloco de derivada do labview e colocar na matriz u e analisar os resultados.

Para começar a testar e ter uma noção mínima do efeito das nossas modificações, fizemos o seguinte:
Na parte da comunicação, sobrescrevemos as velocidades do controle por todas nulas exceto v_tang cte = 0,5m/s.
A ideia é colocar o robô com orientação 0 no grsim, daí o robô terá somente vx.

Porém, mandar 0,5 m/s para o grsim não significa que isso será de fato executado, pois depende do computador e etc. Então apenas medir o erro entre a medida do kalman e 0,5 não significa muita coisa, pois não sabemos qual velocidade de fato o robô está executando.

O que fizemos foi comparar esse erro da estimativa do kalman com a estimativa feita pelo Nicolas (pega a posição na saída do kalman e deriva). Essa estimativa feita pelo Nicolas foi testada na RoboCup para a bola comparando com o gráfico do programa do juiz e mostrou ser bastante razoável. Além disso, na competição de gol a gol do nosso processo seletivo 2019.2, uma das equipes montou seu goleiro com a estratégia de apenas se posicionar de acordo com a trajetória da bola e teve desempenho muito bom.

Ou seja, não é perfeito, mas mostrou ser uma estimativa consideravelmente boa.

Então, se nosso Kalman tiver valores parecidos com essa estimativa, já podemos concluir que ele melhorou em comparação ao que é hoje.

Como eu disse, esse simples teste é apenas para conseguirmos mensurar minimamente o efeito das nossas alterações. Posteriormente vamos elaborar uma rotina de testes que possa nos dar confiabilidade para refinarmos melhor o filtro.

Mas, depois percebemos que o efeito da matriz u tem relação com aceleração e desaceleração, não tem influência quando se trata de velocidade constante.

Ou seja, fazendo apenas essa alteração no código, não devíamos ter melhora significativa no Kalman. De fato, não tivemos.

Ações #29

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

O nosso Kalman trabalha muito mal com variações de velocidade (o que acontece a todo instante com o robô em campo). Quando o robô atinge velocidade constante, passa um tempo e nosso filtro estima razoavelmente bem.

Bom, para isso temos que mexer nos valores das matrizes P e R. Essas matrizes têm elementos nulos exceto na diagonal principal.

A matriz P tem relação com a incerteza no seu atual estado. A matriz R tem relação com a incerteza medida que você está recebendo. Em ambas, se tiver total certeza, deve colocar valor 0 no elemento relativa ao que está analisando (x ou vx ou y...). Quanto maior a incerteza, maior deve ser o valor.

A matriz P tem efeito direto com a demora para reação quanto a mudança de velocidade.

A matriz R tem efeito direto na estimativa com velocidade constante.

Essas matrizes se correlacionam, mexer em uma causa influencia no efeito causado pela outra.

Só para ter noção da relação entre as ordens de grandeza dessas matrizes, nos exemplos do curso, ele usava 0,1 nos elementos de R e 1000 nos elementos de P.

No nosso código, os elementos de R estavam em torno de 0,1 e os de P, 1.

Então, fizemos o teste citado acima com os valores que estavam nessas matrizes e colocando 1000 na matriz P, a diferença na reação com a mudança de velocidade foi BRUTAL.

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Só para ter uma noção, filmamos a tela do computador com o celular mesmo (usar o aTube Catcher estava sugando muito o computador).

O primeiro vídeo é o kalman com o novo u mas sem mexer no P.

O segundo vídeo é quando colocamos 1000 nos elementos de P ao invés de 1.

Vê-se na tela o erro do kalman e o erro da estimativa do Nicolas (erro em relação ao 0,5m/s que mandamos e não ao que o robô de fato executa). A luz acende quando o erro do kalman é menor que o erro do outro método.

No primeiro vídeo vemos que o erro do kalman começa 0,5m/s e demora um bom tempo até abaixar. Quando abaixa, fica muito parecido com o erro do outro método (quando a luz começa a piscar).

No segundo vídeo vemos que a luz começa a piscar desde o início. O kalman demora bem menos para ir para a velocidade do robô. E isso foi apenas trocando os elementos de P de 1 pra 1000.

Primeiro Vídeo(P = I):

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4548, container_id: 1091, container_type: "Issue", filename: "MexendoNoP.mp4", disk_filename: "190906160223_MexendoNoP.mp4", filesize: 7387530, content_type: "video/mp4", digest: "92044c13a125f7ac81136f1b18568d6b", downloads: 0, author_id: 93, created_on: "2019-09-06 16:02:23.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4549, container_id: 1091, container_type: "Issue", filename: "SemMexerNoP.mp4", disk_filename: "190906160226_SemMexerNoP.mp4", filesize: 5242503, content_type: "video/mp4", digest: "996088d91a0008f777b7312055e9fe38", downloads: 0, author_id: 93, created_on: "2019-09-06 16:02:26.000000000 +0000", description: "", disk_directory: "2019/09">]:Array Did you mean? find_index)

Segundo vídeo(P = 1000I):

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4548, container_id: 1091, container_type: "Issue", filename: "MexendoNoP.mp4", disk_filename: "190906160223_MexendoNoP.mp4", filesize: 7387530, content_type: "video/mp4", digest: "92044c13a125f7ac81136f1b18568d6b", downloads: 0, author_id: 93, created_on: "2019-09-06 16:02:23.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4549, container_id: 1091, container_type: "Issue", filename: "SemMexerNoP.mp4", disk_filename: "190906160226_SemMexerNoP.mp4", filesize: 5242503, content_type: "video/mp4", digest: "996088d91a0008f777b7312055e9fe38", downloads: 0, author_id: 93, created_on: "2019-09-06 16:02:26.000000000 +0000", description: "", disk_directory: "2019/09">]:Array Did you mean? find_index)

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Outra parte importante, além de escolher os valores iniciais da matriz P, é seu incremento a cada iteração.
![](PSum.png)

Nesse código, P estava com valor inicial de 1000 em sua diagonal principal. Esse incremento de 0.1 a cada iteração provoca uma diferença enorme.

Vou postar uns vídeos para mostrar essa diferença. Os seguintes vídeos são do simulador disponibilizados pelo curso:

1) RValues = 0.1, PVAlues = 1000, sem incremento em P:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4557, container_id: 1091, container_type: "Issue", filename: "R001P1000Somando.mp4", disk_filename: "190907234715_R001P1000Somando.mp4", filesize: 6586363, content_type: "video/mp4", digest: "7ae138c1d881a6c3071980d98f15c0be", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:15.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4558, container_id: 1091, container_type: "Issue", filename: "R01P100Somando.mp4", disk_filename: "190907234724_R01P100Somando.mp4", filesize: 5850386, content_type: "video/mp4", digest: "b978d7ebb1948a4b1c2762239b5a5a72", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:24.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4560, container_id: 1091, container_type: "Issue", filename: "R01P1000SemSomar.mp4", disk_filename: "190907234805_R01P1000SemSomar.mp4", filesize: 5599729, content_type: "video/mp4", digest: "400112a336986c8c01fc2181012d2509", downloads: 0, author_id: 93, created_on: "2019-09-07 23:48:05.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4559, container_id: 1091, container_type: "Issue", filename: "PSum.png", disk_filename: "190907234724_PSum.png", filesize: 30902, content_type: "image/png", digest: "aa1b196d62ccaa8ab303cfc6df0f5348", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:24.000000000 +0000", description: "", disk_directory: "2019/09">]:Array Did you mean? find_index)

2)RValues = 0.1, PValues = 1000, com incremento do P:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4557, container_id: 1091, container_type: "Issue", filename: "R001P1000Somando.mp4", disk_filename: "190907234715_R001P1000Somando.mp4", filesize: 6586363, content_type: "video/mp4", digest: "7ae138c1d881a6c3071980d98f15c0be", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:15.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4558, container_id: 1091, container_type: "Issue", filename: "R01P100Somando.mp4", disk_filename: "190907234724_R01P100Somando.mp4", filesize: 5850386, content_type: "video/mp4", digest: "b978d7ebb1948a4b1c2762239b5a5a72", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:24.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4560, container_id: 1091, container_type: "Issue", filename: "R01P1000SemSomar.mp4", disk_filename: "190907234805_R01P1000SemSomar.mp4", filesize: 5599729, content_type: "video/mp4", digest: "400112a336986c8c01fc2181012d2509", downloads: 0, author_id: 93, created_on: "2019-09-07 23:48:05.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4559, container_id: 1091, container_type: "Issue", filename: "PSum.png", disk_filename: "190907234724_PSum.png", filesize: 30902, content_type: "image/png", digest: "aa1b196d62ccaa8ab303cfc6df0f5348", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:24.000000000 +0000", description: "", disk_directory: "2019/09">]:Array Did you mean? find_index)

3) RValues = 0.01, PValues = 1000, com incremento de P:

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4557, container_id: 1091, container_type: "Issue", filename: "R001P1000Somando.mp4", disk_filename: "190907234715_R001P1000Somando.mp4", filesize: 6586363, content_type: "video/mp4", digest: "7ae138c1d881a6c3071980d98f15c0be", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:15.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4558, container_id: 1091, container_type: "Issue", filename: "R01P100Somando.mp4", disk_filename: "190907234724_R01P100Somando.mp4", filesize: 5850386, content_type: "video/mp4", digest: "b978d7ebb1948a4b1c2762239b5a5a72", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:24.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4560, container_id: 1091, container_type: "Issue", filename: "R01P1000SemSomar.mp4", disk_filename: "190907234805_R01P1000SemSomar.mp4", filesize: 5599729, content_type: "video/mp4", digest: "400112a336986c8c01fc2181012d2509", downloads: 0, author_id: 93, created_on: "2019-09-07 23:48:05.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4559, container_id: 1091, container_type: "Issue", filename: "PSum.png", disk_filename: "190907234724_PSum.png", filesize: 30902, content_type: "image/png", digest: "aa1b196d62ccaa8ab303cfc6df0f5348", downloads: 0, author_id: 93, created_on: "2019-09-07 23:47:24.000000000 +0000", description: "", disk_directory: "2019/09">]:Array Did you mean? find_index)

Ações #32

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Pudemos perceber nesses vídeos que o incremento de P fez diferença brutal quanto à variação de velocidade. Depois, aumentar a confiança na medição (mudar R de 0.1 para 0.01, lembrando que menor é o número quanto maior for a confiança) também melhorou a reação à variação, porém a diferença foi mais suave e isso fez com que a imprecisão ficasse maior quando a velocidade era constante, provocando maior erro na medição de x também.

A implementação do filtro passa por esse tipo de análise, que é muito importante; e temos que chegar a valores que melhor nos sirvam. Nosso robô varia muito de velocidade em campo, então creio que o último caso seria melhor, mas para isso temos que montar uma rotina de testes e analisar.

No nosso código ainda não testei com esse incremento de P. Vou testar e postar o resultado.

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Fiz o seguinte teste no nosso código:

Com um control, deixei a velocidade constante em 0,1m/s por um tempo, depois mudei abruptamente para 0,5m/s, deixei por um tempo e depois mudei abruptamente para 0,3m/s e deixei por um tempo, tudo isso sem controle. Plotei isso num gráfico, com a velocidade que estou mandando pra comunicação(branco), a velocidade medida pelo Kalman(verde) e a velocidade medida pela derivada da posição(vermelho):

![](TesteKalman.png)

A matriz estavam: R = 0,1, P = 100.

Podemos concluir que o robô muito provavelmente não estava executando a velocidade que mandamos e a estimativa gerada pelo Kalman varia consideravelmente.

Ações #34

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Fiz o mesmo teste no Kalman antigo:
![](TesteOldKalmam.png)

Podemos ver que demora muito mais para reagir à mudança de velocidade (o que acontece muito com o robô em campo), mas quando se trata de velocidade constante, não varia muito.

Lembrando que o "Kalman novo" por enquanto só foi acrescido de u (não faz muita diferença no nosso teste) e P com valores de 100 ao invés de 1.

Ações #35

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Mesmo Teste no "novo kalman" somando 0.1 em P.

![](TesteKalmanSomandoP.png)

Não fez a diferença que eu esperava, até porque mesmo sem esse incremento a reação à mudança de velocidade já estava boa.

Ações #36

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Nosso próximo passo é colocar velocidades na matriz z e consequentemente mexer em outras matrizes e analisar o resultado.

Queremos ter isso pronto até terça e já testar no pirf.

As alterações que fizemos no kalman e o teste montado estão na branch kalman-upgrade.

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Coloquei as velocidades na matriz z e fiz as alterações necessárias nas matrizes H e R e fiz o mesmo teste, o resultado ficou muito melhor, a variação do kalman em velocidade constante ficou muito pequena agora:

Com P = 10:
![](VInZ.png)

Com P = 100:
![](VInZP100.png)

Ações #38

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Estamos usando o bloquinho de derivada do labview. Eu percebi que a entrada dt dele só pega o valor informado na primeira iteração. Estávamos informando o tempo entre uma iteração e outra, mas apenas o primeiro valor estava sendo utilizado. Ele dá uma opção de initialize que atualiza o dt, mas faz a derivada com um x e seu anterior (e não com dois intervalos de diferença), então não podemos inicializar toda hora pois o método de tustin não estaria mais sendo utilizado.

Minha ideia é colocar 1/fps e inicializar apenas se o fps variar mais de 5 ou 10 unidades.

Ações #39

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Lembrando que a diferença entre colocar 1/fps e a diferença de tempo entre uma iteração e outra é que pra calcular o fps, fazemos uma média das 100 últimas iterações.

Ações #40

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Coloquei escala no eixo x (tirei auto-scale) para conseguir analisar melhor a reação à variação de velocidade:
![](AnalisandoReacaoAVariacao.png)

Ações #41

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Consegui perceber qual era o erro no lifetime do Robô. Quando o robô fica não valid, não era feito todo o kalman pra ele, apenas xk = Fxk-1. Alguns do elementos da matriz F (essa matriz multiplica xk) eram dt (nós fazemos dt como sendo timestamp - previoustimestamp). Quando um robô fica não valid, seu previoustimestamp deixa de ser atualizado, daí esse dt crescia muito e na multiplicação das matrizes aumentava muito a posição do robô.

O que eu fiz pra testar foi que quando o valid for falso, utiliza 1/40 para o intervalo ao invés da diferença de timestamp. Depois vou colocar pra ser 1/fps.

Resultado (MANTÉM TRAJETÓRIA):

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4574, container_id: 1091, container_type: "Issue", filename: "LifeTimeDoRobôFuncionando.mp4", disk_filename: "190909193759_79d524ddfa2ad733e411784b2c91c284.mp4", filesize: 656901, content_type: "video/mp4", digest: "996f1218c474a717faa7764c1d2a583a", downloads: 0, author_id: 93, created_on: "2019-09-09 19:37:59.000000000 +0000", description: "", disk_directory: "2019/09">]:Array Did you mean? find_index)

Ações #42

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Causei algum erro que faz com que quando eu desligue um robô da visão, o xk dele fique Nan quando eu ligo novamente.

Tenho que investigar

Ações #43

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Em resumo, as melhorias feitas até agora foram:

1. Colocamos Vx, Vy e Vang na matriz da medição z. Antes, essa matriz tinha apenas x, y, orientação

2. Matriz P com valor 100.

3. Adição de 0,1 nos elementos da diagonal principal de P a cada iteração.

O resultado está representado pelo último gráfico postado aqui na tarefa. Daqui pra frente, o que nos resta fazer é testar valores para as matrizes P e R que cheguem ao melhor filtro.

Ações #44

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Percebi um erro conceitual em nossas mudanças. O que fizemos foi basicamente inserir na matriz Z as 3 velocidades e mexer no tamanho das outras matrizes de acordo com isso.

Conceitualmente, temos que gerar essas velocidades derivando a posição de input (chamado de sample no nosso código). Mas, por distração, acabamos gerando essa velocidade a partir da posição contida na matriz xk. Na parte do código que fizemos isso, estamos derivando a posição tratada pelo kalman com uma iteração de atraso ao invés de derivar a posição que a câmera está nos mandando.

O que fizemos acabou sendo quase a mesma coisa que usar para velocidade de input a última velocidade contida em xk.

Temos que trocar isso para colocar no Z as velocidades derivadas a partir de pose do Z e analisar o efeito da mudança.

Ações #45

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Em relação aos checklists resolvidos:

1.Corrigir robô não voltar à visão:

O problema é que quando o robô saía da visão e ficava sendo mantido pelo lifetime, sua matriz P começava a crescer até que chegava a +inf. Lembrando que quando o robô está fora da visão, o Kalman faz apenas x_k+1 = F . x_k e nada faz com a matriz P, apenas mantém o valor.

Não consegui identificar o que faz o P crescer assim, mas nessa situação (case do Use Observation False), passo a matriz identidade para o P, daí quando o robô volta à visão, sua matriz P está igual à da primeira iteração do código, I6x6.

2.Fazer o input de velocidades em Z derivando a partir de pose da sample e não de xk:
Feito e não houve mudança significativa visível.

3.Consertar o fato de o time amarelo estar influenciando no kalman do time azul (provavelmente deve ser apenas clonar alguma VI que desclonamos sem querer):
Realmente bastava clonar alguma VIs.

Ações #46

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Em relação ao checklist "Consertar lifetime da bola", já descobrimos todos os problemas e resolvemos, mas isso foi feito na branch NewBallVision, a qual está sendo usada pra tratar os casos de aparecerem outras bolas em campo e etc.

Lembrando que tudo desta tarefa tem sido feito na branch KalmanZ e está tudo atualizado no git.

Ações #47

Atualizado por Gabriel Borges da Conceiçãoaproximadamente 5 anos

Gabriel Borges da Conceição escreveu:

Coloquei escala no eixo x (tirei auto-scale) para conseguir analisar melhor a reação à variação de velocidade:
![](AnalisandoReacaoAVariacao.png)

Ao montarmos este gráfico e colocar aqui na tarefa, mencionei que o que faltava para ter uma noção melhor da precisão do kalman era conseguir saber qual velocidade o robô estava de fato executando, pois o que mandamos para o grsim não é executado na risca devido a processamento e etc.

Uma coisa simples que fiz foi mandar o robô andar a 0,5m/s e contar em quanto tempo ele percorreu metade do campo pra saber a velocidade que ele executou, ficou em torno de 0,3m/s, o kalman retornou valores em torno de 0,29m/s.

Atualizado por Antonio de Souza Gomes Pereiraaproximadamente 5 anos

  1. Velocidades no Z da bola

![](ballZ.png)

Foram colocadas as velocidades no Z da bola, calculados a partir do sample

![](kalman B.png)

Além disso, coloquei a parte que calculava a velocidade de controle em uma vi separada(tanto para a bola quanto para o robô). NÃO TEM UM TETO DE ACELERAÇÃO PARA A BOLA AINDA COMO TEM PARA O ROBÔ.

  1. 1/FPS na derivada do robô

![](calcdt_principal.png)

Além disso, coloquei uma nova vi (já ta clonada) para calcular o dt que entra nas derivadas.

![](calcdt.png)

Basicamente o que ela faz é passar 1/fps ao invés de 1/40 como estava antes. Há uma tolerância de 5fps para mudar esse valor que é passado e o bool é para o initializer da derivada. No caso do robô, não ficou muito diferente da forma que estava, o que aconteceu foi apenas um deslocamento no gráfico para cima, o que já era previsto se o fps for maior que 40(no meu pc estava mais ou menos 50fps), além disso, a estimativa ficou muito sensível a efeitos externos.

![](mudancas no dt.png)

O dt que entra é calculado na vi e o bool entra na initializer da derivada

![](limitacaofps.png)

Eu apenas minimizei uma aba aberta no meu pc para ocorrer essa variação (pode ser que a tolerância esteja muito baixa)

![](infinito.png)

O problema de explodir para o infinito quando o robô é desligado está ocorrendo devido a velocidade de controle, assim q o valid fica falso.

  1. Resultados na bola

![](ballfps.png)

Para o caso do cálculo de dt usando o fps, a estimativa ficou dessa forma, eu apenas botei o robô para dar vários toquinhos na bola.

Error executing the video macro (undefined method `find_by_filename' for [#<Attachment id: 4702, container_id: 1091, container_type: "Issue", filename: "calcdt_principal.png", disk_filename: "190929040029_calcdt_principal.png", filesize: 174213, content_type: "image/png", digest: "061360c8e343fbe9691dcc6d5281d44d", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:29.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4703, container_id: 1091, container_type: "Issue", filename: "infinito.png", disk_filename: "190929040033_infinito.png", filesize: 163402, content_type: "image/png", digest: "cb7fe9385ce42ecc07d44d8fc5f98675", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:33.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4704, container_id: 1091, container_type: "Issue", filename: "kalman B.png", disk_filename: "190929040035_91c73f91dbb866d442108651006abe4a.png", filesize: 200073, content_type: "image/png", digest: "c71dc6d01ed3fdad5cd9439f26d05991", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:35.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4706, container_id: 1091, container_type: "Issue", filename: "limitacaofps.png", disk_filename: "190929040038_limitacaofps.png", filesize: 165837, content_type: "image/png", digest: "379ffee5a51ddf090eb44e8ad2467cf6", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:38.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4705, container_id: 1091, container_type: "Issue", filename: "mudancas no dt.png", disk_filename: "190929040038_60da0762cd159f3d781d043099e5898a.png", filesize: 153704, content_type: "image/png", digest: "77b98eada234f9c93cdfe1b0a73ff7e1", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:38.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4707, container_id: 1091, container_type: "Issue", filename: "ballfps.png", disk_filename: "190929040040_ballfps.png", filesize: 161023, content_type: "image/png", digest: "4ddfd58a6acbe2a7df6ea7aaab8ef424", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:40.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4708, container_id: 1091, container_type: "Issue", filename: "ballsfps.png", disk_filename: "190929040042_ballsfps.png", filesize: 177663, content_type: "image/png", digest: "a4b8d928175652d366ba21a5f6aaa4d8", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:42.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4709, container_id: 1091, container_type: "Issue", filename: "ballZ.png", disk_filename: "190929040042_ballZ.png", filesize: 73201, content_type: "image/png", digest: "4139e67e8d4fd6b785a708042684bc34", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:42.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4710, container_id: 1091, container_type: "Issue", filename: "calcdt.png", disk_filename: "190929040044_calcdt.png", filesize: 187615, content_type: "image/png", digest: "5921db155f5fcae8dcd00f2b31e37a9a", downloads: 0, author_id: 179, created_on: "2019-09-29 04:00:44.000000000 +0000", description: "", disk_directory: "2019/09">, #<Attachment id: 4711, container_id: 1091, container_type: "Issue", filename: "WhatsApp Video 2019-09-29 at 00.58.27.mp4", disk_filename: "190929041852_18ec1bab7ed5ca57ee4da38aeb877593.mp4", filesize: 5900002, content_type: "video/mp4", digest: "6b57368f1fe2103e9d38bba06812a47a", downloads: 0, author_id: 179, created_on: "2019-09-29 04:18:52.000000000 +0000", description: "", disk_directory: "2019/09">]:Array Did you mean? find_index)

Vídeo que eu gravei do que está acontecendo mais ou menos(apesar de não saber a real velocidade da bola para ter comparação)

![](ballsfps.png)

Para o caso de dt estar setado como 1/40 aconteceu o esperado e as duas ficaram iguais.

OBS: TA TUDO NA BRANCH KALMAN-FIX

Ações #49

Atualizado por Gabriel Borges da Conceiçãoquase 5 anos

  • Tarefa mãe ajustado para #1230
Ações #50

Atualizado por Gabriel Borges da Conceiçãomais de 4 anos

  • Situação alterado de Em andamento para Fechada
Ações

Exportar para Atom PDF