Skip to content

Latest commit

 

History

History
111 lines (81 loc) · 2.97 KB

File metadata and controls

111 lines (81 loc) · 2.97 KB

Protocolo serial

Interface

  • Porta: USART2
  • Baud rate: 1000000
  • Formato: 8N1
  • RX com DMA circular

Comando recebido

O firmware aceita dois tipos de comando:

  • 0x01: velocidade no frame do robo, compativel com o protocolo antigo.
  • 0x02: velocidade no frame do campo, com yaw atual do robo para converter no firmware.

Tipo 0x01: velocidade no frame do robo

Frame de 20 bytes.

Layout:

Offset Tamanho Campo
0 1 0x55
1 1 0xAA
2 1 tipo
3 3 reservado
6 4 float vx
10 4 float vy
14 4 float omega
18 2 CRC16-CCITT-FALSE little-endian dos bytes 0..17

Tipo suportado:

  • 0x01: comando de velocidade do robo

Tipo 0x02: velocidade no frame do campo

Frame de 24 bytes.

Layout:

Offset Tamanho Campo
0 1 0x55
1 1 0xAA
2 1 tipo = 0x02
3 3 reservado
6 4 float vx_field
10 4 float vy_field
14 4 float omega
18 4 float yaw
22 2 CRC16-CCITT-FALSE little-endian dos bytes 0..21

O yaw e o angulo do frame do robo no frame do campo, positivo anti-horario, em radianos.

O firmware converte:

vx_robot =  cos(yaw) * vx_field + sin(yaw) * vy_field
vy_robot = -sin(yaw) * vx_field + cos(yaw) * vy_field

Convencoes usadas na cinematica:

  • vx: eixo +x para a direita
  • vy: eixo +y para frente
  • omega: rotacao anti-horaria
  • raio da roda usado na conversao: 0.03 m
  • raio geometrico do robo usado na conversao: 0.09 m

Depois da conversao, as velocidades das rodas em rad/s sao convertidas para rpm e aplicadas como setpoint dos 4 controladores.

Telemetria enviada

A telemetria e enviada a cada 1 ms.

O frame binario empacotado possui 30 bytes:

Campo Tipo Observacao
sof uint16_t valor 0xAA55
seq uint16_t contador incremental
time_ms uint32_t tempo de HAL_GetTick()
rpm1_x10 int16_t RPM de M1 multiplicado por 10
rpm2_x10 int16_t RPM de M2 multiplicado por 10
rpm3_x10 int16_t RPM de M3 multiplicado por 10
rpm4_x10 int16_t RPM de M4 multiplicado por 10
cmd1 int16_t comando interno de M1
cmd2 int16_t comando interno de M2
cmd3 int16_t comando interno de M3
cmd4 int16_t comando interno de M4
battery_mv uint16_t tensao em milivolts
battery_adc uint16_t leitura crua do ADC
brake uint8_t 0 coast, 1 brake
crc8 uint8_t XOR de todos os bytes anteriores do frame

Mensagem de boot

Ao iniciar, a placa transmite:

USART2 READY\r\n

Observacoes

  • A recepcao descarta qualquer frame com CRC invalido.
  • O firmware hoje envia a telemetria com HAL_UART_Transmit() bloqueante, nao por DMA.
  • Existe fila de TX por DMA implementada em main.c, mas a telemetria periodica ainda nao usa essa fila.