• Nenhum resultado encontrado

4. Conexão às redes subjacentes

4.2 Rede WiF

O modelo de rede Wifi adotado para a configuração dos robôs é o modelo de estrutura, ou ad- hoc. Ou seja, os robôs possuem endereço de IP fixo que devem ser conhecidos pelo controlador para que uma conexão seja estabelecida.

Todo robô possui um servidor no port de número 2000 esperando por conexões TCP/IP. Quando uma conexão é solicitada pelo controlador ao robô, um novo endpoint é criado, em um outro port, e as requisições do controlador solicitante passam a ser atendidas neste novo endpoint. Ao mesmo tempo, o robô continua a esperar por outros pedidos de conexão no port 2000.

Em resumo, o controlador deve conhecer o ESSID da rede na qual o robô está associado e o endereço IP atribuído ao robô em questão.

Dados para a Rede WiFi  IP: 192.168.1.1  Netmask: 255.255.255.0  Port: 2000  Channel: 1  ESSID: ROBODECK  Mode: ad-hoc 4.3 Rede Bluetooth

Ao ser iniciado, o robô registra um serviço no dispositivo Bluetooth chamado RoboDeck usando o identificador de classe classId = 0x3000 e o identificador de perfil profileId = 0x3000. O canal utilizado é o primeiro canal disponível encontrado no protocolo RFCOMM.

Assim, para conectar-se ao robô utilzando Bluetooth, o controlador deverá descobrir o canal do robô ao qual deseja conectar-se perguntando aos servidores SDP por serviços chamados RoboDeck que sejam da classe 0x3000.

Caso mais de um robô seja encontrado, o controlador deverá conectar-se a cada um dos robôs e enviar o comando ConfigGetIdentity. Este comando retornará o identificador e o nome do robô,

71 permitindo ao controlador descobrir o robô ao qual deseja conectar-se.

Dados para a Rede Bluetooth  ServiceName: RoboDeck  ClassId: 0x3000

 ProfileId: 0x3000  Protocol: RFCOMM

ANEXO A – Aplicativos Robóticos

A.1 CameraApp

Este aplicativo robótico lê as imagens geradas por uma webcam conectada ao hardware do Módulo de Alta Performance (MAP) e as transmite ao controlador por um canal Wifi. A seguir são descritos os comandos e respostas implementados por este aplicativo.

A.1.1 CameraError

Resposta enviada ao controlador indicando erros ocorridos no aplicativo.

Rsp: 0x84 0x04 0x00 message

Onde:

message: descrição do erro ocorrido. String terminada em nulo.

A.1.2 CameraStart

Inicia a captura continua das imagens da câmera. Quando este comando é recebido, o aplicativo inicia um servidor de imagens que passa a ouvir em um canal Wifi. Em seguida, a resposta é enviada ao controlador passando o número do port no qual o servidor está esperando por conexões.

O aplicativo espera por uma conexão do controlador durante 4 segundos. Caso nenhuma conexão seja estabelecida, o servidor é baixado e uma mensagem de erro é enviada. Após a primeira conexão ser estabelecida outras conexões são rejeitadas, ou seja, o servidor de imagens é exclusivo do controlador que o solicitou.

72 As imagens são enviadas sequencialmente e ininterruptamente até que o comando CameraStop seja recebido pelo aplicativo. Cada imagem é serializada seguindo o formato descrito na tabela Sending a seguir.

Cmd: 0x04 0x04 0x01

Rsp: 0x84 0x04 0x01 port

Sending: width height size format data

Onde:

port: número do port no qual o servidor espera por conexões. Inteiro não sinalizado (2 bytes). width: largura da imagem, em pixels. Inteiro não sinalizado (2 bytes).

height: altura da imagem, em pixels. Inteiro não sinalizado (2 bytes).

size: número de bytes dos dados da imagem. Inteiro não sinalizado (2 bytes).

format: 4 bytes em ASCII indicando o formato da imagem. Segue o padrão da biblioteca Video 4 Linux (V4L). Ex: ’JPEG’, ’RGB3’, etc.

data: dados da imagem seguindo o formato especificado em format.

A.1.3 CameraStop

Interrompe a captura e o envio de imagens ao controlador. A resposta relativa a este comando é sempre enviada, independentemente do processo de captura e envio de imagens não estar sendo executado quando do recebimento deste comando.

Cmd: 0x04 0x04 0x02

Rsp: 0x84 0x04 0x02

A.1.4 CameraTakePhoto

Captura uma única imagem da câmera e a envia ao controlador. Este comando inicia um canal Wifi e espera por uma conexão do controlador por até 4 segundos. Depois de estabelecida a conexão, a imagem é enviada e o canal é fechado logo em seguida. A imagem é serializada seguindo o formato descrito na tabela Sending a seguir.

73

Cmd: 0x04 0x04 0x03

Rsp: 0x84 0x04 0x03 port-H port-L

Sending: width-H weidth-L height-H height-L rgb

Onde:

port: número do port no qual o servidor espera por conexões. Inteiro não sinalizado (2 bytes). width: largura da imagem, empixels. Inteiro não sinalizado (2 bytes).

height: altura da imagem, em pixels. Inteiro não sinalizado (2 bytes).

rgb: valores dos pixels da imagem. Cada pixel é representado pela trinca [R, G, B], indicando os valores das cores vermelho verde e azul, respectivamente. Cada uma das três cores é um inteiro não sinalizado de 1 byte. Os valores dos pixels são serializados seguindo o padrão raster, ou seja, a imagem é enviada em linhas, serializadas da esquerda para a direita, onde as linhas superiores da imagem são enviados primeiro.

A.2 RtspServerApp

Este aplicativo robótico lê as imagens geradas por uma webcam conectada ao hardware do Módulo de Alta Performance (MAP) e inicia um servidor RTSP capaz de servir um stream de vídeo no formato MPEG4 com o vídeo captado. A seguir são descritos os comandos e respostas implementados por este aplicativo.

A.2.1 RtspServerError

Resposta enviada ao controlador indicando erros ocorridos no aplicativo.

Rsp: 0x84 0x06 0x00 message

Onde:

message: descrição do erro corrido. String termina da em nulo.

A.2.2 RtspServerStart

74 RTSP que passa a servir o stream do vídeo captado pela câmera, recebendo requisições em um port TCP.

Em seguida, a resposta é enviada ao controlador passando a URL na qual o servidor está esperando por requisições.

Cmd: 0x04 0x06 0x01

Rsp: 0x84 0x06 0x01 url

Onde:

url: URL do servidor RTSP esperando por conexões. String termina da em nulo.

A.2.3 RtspServerStop

Finaliza o servidor de streams RTSP.

Cmd: 0x04 0x06 0x02

75 PARTE III – RoboDeck SDK

A terceira parte do documento traz informações referentes à elaboração do RoboDeck SDK, uma biblioteca de classes em C++ a ser empregada como interface entre uma aplicação para o robô e o robô propriamente dito. Está organizado nas seguintes seções:

1. Requisitos para Elaboração do RoboDeck SDK. Levanta as necessidades e os itens que o SDK

Documentos relacionados