• No results found

en studie på intubasjonspraksis

In document NAF orum (sider 34-38)

A programação elaborada separa-se em diferentes ficheiros .c e respectivo .h que contém a declaração de variáveis e o cabeçalho das funções existentes no .c, de maneira a distinguir as diferentes rotinas por áreas de implementação e obter uma melhor percepção global de todo o código. Na Tabela 1 apresenta-se a lista dos diferentes ficheiros implementados e a sua função.

Nome Área de implementação

Local.c Remoto.c

Funções main() – executam a rotina de escolha de opção e contêm as funções de execução dos processos secundários (threads).

geral.c Funções e variáveis que não se limitam apenas a uma área de implementação

geometrias.c Desenho de geometrias padrão em SVGALIB font.c Desenho de caracteres em SVGALIB

video.c Controlo e acesso à placa de aquisição Imagem.c Processamento e compressão de imagem rede.c Comunicação por sockets

sensores.c Calculo e apresentação de dados dos sensores na interface gráfica Tabela 1 Lista de ficheiros utilizados na programação

Para usar as diferentes bibliotecas e interligar os diferentes ficheiros foi necessário criar um makefile que efectua a compilação de todo o programa.

Makefile implementado no pcLocal (unidade de processamento de imagem): # Makefile do GOLFINHO - pcLocal

CC = gcc

CFLAGS= -O4 -Wall

LIBS = -lvga -lhighgui -lcv

OBJ = geral.o font.o geometrias.o final: Local

Local: $(OBJ) sensores.o video.o rede.o imagem.o Local.o $(CC) $(CFLAGS) -o Local $(LIBS) *.o -lpthread -lmsock clean:

rm -f *.o *~ Local

Makefile implementado no pcRemoto (unidade de visualização remota dos sensores e imagem):

# Makefile do GOLFINHO - pcRemoto CC = gcc

CFLAGS= -O4 -Wall

LIBS = -lvga -lhighgui –lcv

OBJ = geral.o font.o geometrias.o final: Remoto

Remoto: $(OBJ) video.o rede.o imagem.o Remoto.o

$(CC) $(CFLAGS) -o Remoto $(LIBS) *.o -lpthread -lmsock clean:

rm -f *.o *~ Remoto

3.2.1 Metodologia de programação

A Figura 21 descreve o princípio de execução do pcLocal. No inicio do programa faz-se a leitura de dados gerais guardados nos ficheiros de configuração e a criação de todos os processos paralelos (threads) necessários para o não bloqueamento da execução do programa principal. Seguindo-se a aquisição da imagem, através da execução de funções de acesso à placa de aquisição de vídeo. Finalizando com o processamento de imagem, que executa algoritmos de detecção da quantidade de bolas visualizadas na zona de passagem do robô e determinar se o robô deve ou não mudar de trajectória. A determinação de uma possível trajectória que permita a recolha do maior número de bolas de golfe baseia-se na detecção de bolas (círculos com centro branco na imagem) e no cálculo do centro de massa de todas as bolas. A direcção fornecida à placa de processamento contínuo é a diferença entre o centro de massa e o centro geométrico da imagem, conforme descrito na eq. 3.

2 / ) , ( ) ,

(x y imagem width height massa de centro direccao= − (3) com n y x centro y x massa de centro n i

= = 0 ) , ( ) , ( (4) Inicio Captura de imagem Processar Imagem

Transmitir posição do centro de massa das bolas de golfe Ler ficheiros de configuração e iniciar

thread de actualização de sensores

Figura 21 Ciclo de processamento do pcLocal

A Figura 22 apresenta a sequência de execução do programa principal do pcRemoto.

Inicio

Ler ficheiros de configuração e iniciar modo gráfico e iniciar threads de imagem

e recepção de dados Ler opção escolhida pelo utilizador e processar Fim

O programa inicia com a execução do processo de iniciação de todo o software, que de modo idêntico ao programa executado no pcLocal, efectua a leitura dos ficheiros de configuração inicial e inicializa processos secundários que ficam em funcionamento paralelo ao processo principal que comanda as variáveis globais (definidas como flags).

Os processos possíveis de execução obedecem ao esquema da Figura 23, onde se executam rotinas de funcionamento em paralelo com a rotina principal, são elas:

• Recepção de imagem remota – entra em execução quando se verifica a condição flagRecebeuImagem==1, caso contrário fica em estado standby; • Recepção e actualização de dados dos sensores – actualiza os dados dos

sensores presentes no robô. Quando é detectada uma trama de dados válida, é activada a variável flagChegouTrama que acciona a actualização dos dados dos sensores na interface gráfica.

Figura 23 Esquema representativo das comunicações do software

O processo main() de execução em ciclo infinito só termina quando se verifica a condição FLAG_SAIR==1 correspondente ao valor da respectiva variável global..

Para estabelecer um padrão entre todo o código e de modo a definir informação relevante e mais usada dentro de todo o sistema, desenvolveu-se uma estrutura que contém os dados que sofrem constantes actualizações durante a execução do programa principal – struct {…} TRAMADADOS.

typedef struct {

char assinatura[4]; //definir a quem pertencem os dados int bateria12; // Voltagem da bateria do PC

int bateria24; // Voltagem da bateria da traccao float velocidade; //velocidade dos encoders

float pan, tilt; // valores do acelerometro float humidade, tempHumi;

double latitude, longitude;

int nSat; //nº de satelites que recebe o GPS float tempGps; //temperatura do GPS

float errox, erroy, erroz; //erro do GPS

float velGps; //velocidade dada pelo GPS } TRAMADADOS;

Esta estrutura, além de permitir o acesso directo a todos os dados globais do sistema, permite uma comunicação entre PC’s mais simplificada. Não é necessário estabelecer o envio de cada dado separadamente mas sim transmitir a posição de memória da estrutura tramaDados e enviar os n_bytes correspondentes ao tamanho alocado na inicialização da estrutura conforme as linhas de código seguintes:

enviar_trama((char *)&T, sizeof(TRAMADADOS),2);

O código acima efectua o envio da estrutura TRAMADADOS T para o IP destino definido no último argumento.

memcpy(&T, (void *)BUFFER, sizeof(TRAMADADOS)); //guarda os dados do BUFFER em T

Esta linha de código é a única a executar na recepção de dados, guardando os dados que chegam via TCP na mesma estrutura de dados TRAMADADOS T.

Com estas duas linhas de código e com o uso da estrutura padrão de todos os dados consegue-se uma melhor percepção e comunicação da informação relevante ao sistema.

In document NAF orum (sider 34-38)