Projeto

Geral

Perfil

Protocolo » Histórico » Versão 2

Versão 1 (Joao Manuel Leite da Silva, 14/02/2013 15:53) → Versão 2/5 (Joao Manuel Leite da Silva, 14/02/2013 15:54)

h1. Protocolo de comunicação (AINDA EM CONTRUÇÃO)

O protocolo de comunicação definido para a comunicação entre robô e uma qualquer aplicação de controlo é baseado em dois tipos de mensagem: uma transmitida pelo robô para o controlador, outra transmitida pelo controlador para o robô.

Estas mensagens são na sua essência um fluxo de bytes, que têm que ser escritos de um lado e interpretados do outro em concordância. Foram Forma definidos 3 bytes especias para que seja possível sincronizar os pacotes de dados:

* *0x25* - Início de trama: o primeiro byte em qualquer mensagem, sinalizando o início de uma trama. É usado o valor *0x25* (carácter '%' na tabela ASCII)
* *0x03* - Fim de trama: o último byte em qualquer mensagem, sinalizando o final de uma trama. É usado o valor *0x03* (carácter ETX na tabela ASCII)
* *0x5C* - Byte de escape: byte para retirar o significado especial ao seguinte, de forma a que o byte seguinte seja interpretado como dados. É usado usaod o valor *0x5C* (carácter '\' na tabela ASCII)

Assim, qualquer mensagem tem o formato:
| 0x25 | ...(data bytes) | Checksum | 0x03 |

No entanto, qualquer valor do bloco de dados da mensagem pode ser igual a um dos bytes especiais. Nesse caso é necessário fazer o escape desse valor para que seja interpretado como dados. Nesse caso, é necessário adicionar o byte de escape antes do byte de dados. É necessário fazer o excape a qualquer byte de dados que tenha o mesmo valor que um especial, incluindo ao próprio byte de escape.

No cálculo do Checksum *NÃO* se incluem os valores dos bytes de escape.

A definição base da mensagem do controlador para o robô é a seguinte:
| 0x25 | Lmotor | Rmotor | beaconMotor | Checksum | 0x03 |

Assim, o tamanho padrão desta mensagem é 6 bytes. No pior caso, se todos os bytes de dados tiverem o valor de um byte especial, ficará com 10 bytes.
(Exemplos em breve)

A definição base da mensagem do robô para o controlador é a seguinte:
| 0x25 | Lsensor | Csensor | Rsensor | Ground | Beacon | Bat | xOdoHigh | xOdoLow | yOdoHigh | yOdoLow | thetaOdoHigh | thetaOdoLow | Checksum | 0x03 |

O tamanho padrão desta mensagem é 15 bytes. No pior caso, terá 28 bytes.
(Exemplos em breve)