Runner Spidwheel Logo Lsa Logo
>lsa>runner | Home LSA | Noticias | Equipa ISePorto | FALCOS | Runner | Aprender c/ Robótica | English Flag English 
 
 
Início
Notícias
Quem Somos
Hardware
Software
Fotos
Filmes
Contacto
Links
Actualizações
Trabalhos
Robots
Apoios
 

WWW
LSA
ISEP
DEE.net
Software
1 - Hodometria
2 - Sistema de Visão
3- Fusão sensorial
4 - Infra-vermelhos

Arquitectura do Software

EM PROCESSO DE DOCUMENTAÇÃO E DESENVOLVIMENTO

Descrição da arquitectura do software do Robot

O sistema operativo escolhido para este projecto é o Linux, porque para além de ser possuidor de vantagens, sobre um qualquer outro sistema, esta escolha vem no seguimento dos objectivos, pois o trabalho anterior também utiliza este sistema.

Vantagens do Linux em relação aos outros sistemas operativos:

  • É um sistema operativo livre.
  • Permite o acesso ao código (OPEN SOURCE).
  • É um sistema operativo actual e em constante desenvolvimento.
  • É bastante reconfigurável.
  • Suporte para o barramento USB.
  • Possibilidade de trabalhar com vídeo.
  • Apoio a nível mundial.
  • Vantagens didácticas (disponibilidade de código).

O software utilizado na implementação de sistema de navegação do robot foi desenvolvido em linguagem C. A escolha deste tipo de linguagem de programação é justificada pelo facto de ser uma linguagem bastante poderosa e familiar.

O software desenvolvido é constituído por três blocos relativos aos sensores utilizados: Hodometria, Visão e Infra-vermelhos. A informação proveniente dos sensores é fundida para a determinação do estado do veículo. O bloco da Fusão sensorial é o responsável pela determinação da posição e orientação do robot - navegação do robot. A informação dos sensores de infra-vermelhos foi apenas utilizada na primeira fase do desenvolvimento da navegação devido ao desenvolvimento de um sistemas de controlo em simultâneo. A escolha dos sensores de infra-vermelhos para a primeira solução de navegação tem como justificação os seguintes factores: a simplicidade, a resposta rápida e os contornos da pista serem uma linha.

A segunda fase do desenvolvimento da navegação tem como aspecto principal a introdução de um filtro de Kalman para a fusão sensorial. Nesta fase, os sensores de infra-vermelhos são substituídos pela visão. Esta substituição é justificada abaixo, na secção da implementação do filtro de Kalman.

Na figura abaixo é possível verificar que a informação dos infra-vermelhos afectava directamente o estado do veículo, o que tornava o robot muito sensível a correcções fortes da sua posição e orientação.

 

Figura 1– Arquitectura do software do sistema de navegação

 

Os blocos de software ilustrados na figura anterior são descrito nas secções seguintes.

 
1 - Hodometria

A inicialização da hodometria do robot é realizada pela função hodom_init(). Nessa função é criado o thread da hodometria que lança a função hodom(), a qual executa em ciclo fechado a leitura dos incrementos das rodas, a partir das leituras dos encoders ópticos. A leitura desses valores é efectuada pela função axisctr_rd_cnt().

O interface da informação hodometria com o filtro de Kalman é realizado na função update_robot_pos() .Esta função actualiza o estado do robot com os valores da previsão do filtro.

 
Funções utilizadas

hodom_init() -> inicialização da hodometria
hodom() -> ciclo de hodometria
axisctr_rd_cnt() -> leitura dos encoders
update_robot_pos() -> actualização do estado

 
2 - Sistema de Visão

O sistema de visão é constituído por dois threads, um dedicado à aquisição cíclica de imagens e outro dedicado ao processamento de imagem. Este threads são criados na função vision_init(). A função que realiza a aquisição é a vision_acquire_head(). O processamento é realizado pela função vision_process_head(), o qual é constituído por três blocos: Pesquisa do alvo, Compensação da distorção e Conversão dos referenciais. O interface do resultado final do processamento de imagem com o filtro de Kalman é realizado na função pose_estimation().

O bloco da Calibração não faz parte do sistema de visão porque é realizada em off-line, no qual a intervenção humana é necessária. Este assunto é abordado pormenorizadamente na secção da Calibração do Sistema de Visão.

A figura 2 ilustra a arquitectura do sistema de visão:

 

Arquitectura do software de visão

 

Figura 2 – Arquitectura software do sistema de visão

 
2.1 - Controlo e classificação de imagem

Um dos requisitos da implementação do sistema de visão é desenvolvimento de funções que permitam o controlo de imagem e a classificação correcta das cores. As funções que solucionam esse requisito são vis_read_cam_opt() e vis_make_color_img(), respectivamente .

O controlo de imagem é um dos problemas da implementação de um sistema de visão, dada a sua dependência com o meio ambiente. A má iluminação e os reflexos da pista de teste exigiu um minucioso ajuste das características da imagem, de forma a que o contraste entre a cor do chão e das linhas seja bem definido. Das muitas tentativas realizadas, é importante ilustrar os três casos seguintes:

Caso 1 - Brightness:60000; Contrast:65535; Hue:65535; Colour:0

Figura 3 – a) imagem original; b) imagem classificada

Observação - No caso 1, o excesso de brilho tem como consequência a má definição da linhas da imagem classificada. As linhas são quase imperceptíveis.

 

Caso 2 - Brightness:20000; Contrast:65535; Hue:65535; Colour:0

 

Figura 4

Figura 4 – a) imagem original; b) imagem classificada

Observação - No caso 2, o pouco brilho utilizado torna a imagem muito escura, tornando difícil a distinção das linhas em determinadas zonas.

 

Caso 3 - Brightness:35000; Contrast:65535; Hue:65535; Colour:0

 

Figura 5

Figura 5 – a) imagem original; b) imagem classificada

 

Observação – No caso 3, o contraste entre as linhas e o chão da pista está bem definido, apesar de se verificar o reflexo da iluminação na zona em linha faz um “v”. Os valores utilizados no controlo da imagem podem variar entre 0 a 65535(mínimo e máximo, respectivamente).

 
2.2 - Algoritmo de Pesquisa do Alvo

O algoritmo de pesquisa dos pontos das linhas limites da pista baseia-se numa procura de pixels pretos ao longo de um segmento. A procura dos pixels pretos da linha é realizada numa aérea de pesquisa constituída por duas zonas(esquerda e direita). A restrição da área de pesquisa visa diminuir o tempo necessário para varrer todos os pixels dessa área, optimizando o processamento de imagem. A divisão da área de pesquisa em duas zonas tem como objectivo facilitar a distinção lógica das linhas, ou seja, identificar se é a linha esquerda ou direita relativamente ao referencial do robot.

A validação da linha em cada zona é efectuada pela continuidade do percurso de pesquisa num dado número de linhas da imagem. O valor do número de linhas que validam o segmento é definido pelo diferença de linhas entre o ponto inicial e final. Se não existir continuidade entre esses limites o segmento não válido, logo não é considerado como pertencente à linha.

A função que realiza a análise dos pixels ao longo das linhas é a vis_search_vertical() . A análise do pixels ao longo das colunas é feita pela função vis_search_horizontal().

Na figura abaixo é possível verificar que na zona esquerda o algoritmo realiza por acção da função vis_search_line() um varrimento horizontal de várias linhas até encontrar pixels pretos de uma mancha escura do chão. Quando é detectado o primeiro pixel dessa mancha, as funções anteriores traçam um percurso assinalado de vermelho ao longo da mancha. No entanto, essa mancha de pixels pretos não é validada com um segmento das linhas da pista, devido à não continuidade num número mínimo de linhas da imagem.

Na zona direita da área de pesquisa a validação do segmento de recta foi positiva, visto que o percurso efectuado pelo algoritmo ao longo dessa mancha de pixels pretos atingiu o número mínimo de linhas da imagem.

Pesquisa dos pontos da linha

Figura 6 – Pesquisa dos pontos da linha na imagem

Quando um segmento de pixels pretos é validado como parte de uma linha da pista, determinados pixels são convertidos em pontos na imagem e depois compensados pela Look Up Table(matriz) de calibração. Esta compensação é realizada pela função v_calib_func(). Após a devida compensação da distorção, provocada pela lente da câmara, o pontos no referencial da imagem são convertidos para o referencial do robot pela função v_world_xyz().

 
Funções utilizadas

Inicializações:
vision_init() -> inicializações da visão.
v_calib_load() -> leitura dos parâmetros de calibração.
v_lut_load() -> leitura da LUT da compensação da distorção.
v_world_load() -> leitura dos pontos de referencia no mundo.
world_map_load() -> leitura do mapeamento do mundo.
vis_read_cam_opt()-> definições do controlo de imagem

Aquisição:
vision_acquire_head() -> ciclo de aquisição
vis_vidcat() -> captura de uma imagem

Processamento:
vision_process_head() -> ciclo de processamento
vis_make_color_img() -> classificação das cores
vis_scan_target() -> pesquisa do alvo na imagem

Pesquisa do alvo:
vis_search_vertical() -> pesquisa vertical da linha
vis_search_horizontal() -> pesquisa horizontal da linha
vis_search_line() -> pesquisa de linha

Compensação da distorção:
v_calib_func() -> função que compensa a distorção da imagem

Conversão dos referenciais:
v_world_xyz() -> conversão dos referenciais imagem/robot

 
3 - Fusão sensorial

A fusão sensorial tem como base as duas funções do filtro de Kalman: time_update() e measurement_update(). A primeira realiza a previsão do estado do robot e da confiança do sistema(matriz P) a partir da informação da hodometria( incrementos dos encoders-rodas). A segunda realiza correcções da posição e orientação do robot segundo os erros entre as observações e as estimativas da posição de alvos(landmarks) no mundo, que neste caso são as linhas. As estimativas da posição dos alvos no mundo são realizadas pela função pose_estimation(). Por outras palavras, esta função faz o matching(emparelhamento) do pontos observados no mapa do mundo.

A figura 7 ajuda a compreensão da fusão da informação proveniente dos sensores utilizados:

 

Estimação da posição/orientação do robot

 

Figura 7 – Estimação da posição/orientação do robot

 

Nota: A grande vantagem da fusão sensorial é a utilização simultânea muitos sensores com características que podem ser semelhantes ou completamente diferentes.

 
3.1 - Matching no mundo

O processo de procura de pontos correspondentes no mundo aos observados é designado por matching(emparelhamento). Os pontos resultantes deste processo são os chamados pontos ou valores estimados.

Na figura 8 é visível a diferença entre o valor estimado e observado para o ângulo . É esta diferença(inovação) a responsável pela correcção da previsão do estado do robot.

 

Estimação vs Observação

Figura 8 – Estimação vs Observação

 
Funções utilizadas

Inicializações:
kalman_init() -> inicialização do filtro de Kalman.

Matching:
pose_estimation() -> estimação dos pontos observados.

Previsão - filtro de Kalman:
Time_update() -> previsão do estado do robot.

Correcção - filtro de Kalman:
measurement_update() -> correcção do estado do robot.

 
4 - Infra-vermelhos

No diagrama da arquitectura do software do sistema de navegação é possível verificar que existe ligação deste bloco à fusão sensorial, isto porque as funções desenvolvidas para os sensores de infra-vermelhos afectam directamente o estado do robot. Existem duas funções desenvolvidas para este tipo de sensor que são a sen_ir_hodom_corr_recta() e a sen_ir_hodom_corr_curva(). A primeira executa correcções da posição nas rectas quando é detectado a linha preta, ao passo que a segunda função executa correcções da posição do robot nas curvas. Estas funções são inicializadas pela função sen_ir_init().

 
Funções utilizadas

sen_ir_init() -> inicialização dos sensores de infra-vermelhos

sen_ir_hodom_corr_recta() -> correcção nas rectas

sen_ir_hodom_corr_curva() -> correcção nas curvas

 

 

IPP
IPP Logo
ISEP
ISEP Logo
Links Rápidos

FALCOS

Logo Aprender

 
Instituto Superior de Engenharia do Porto - Lab. Sistemas Autónomos
R. Dr. Antonio Bernardino de Almeida
, 431 4200-072 Porto, Portugal Phone: +351 22 8340500 Fax:+351 22 8321159
Última Actualização em: 17.02.2006
14.02.2006