Especificaciones del dispositivo FRC CAN

This document seeks to describe the basic functions of the current FRC® CAN system and the requirements for any new CAN devices seeking to work with the system.

Direccionamiento

Los nodos FRC CAN asignan ID de arbitraje basados ​​en un esquema predefinido que divide la ID en 5 componentes:

Tipo de dispositivo

Este es un valor de 5 bits que describe el tipo de dispositivo al que se dirige. Una tabla de los tipos de dispositivos asignados actualmente se puede encontrar a continuación. Si desea que se asigne un nuevo tipo de dispositivo del grupo Reservado, envíe una solicitud a FIRST.

Tipos de dispositivo

Mensajes de difusión

0

Controlador del robot

1

Controlador del motor

2

Controlador de relé

3

Sensor giroscópico

4

Acelerómetro

5

Sensor ultrasónico

6

Sensor de dientes de engranaje

7

Módulo de distribución de energía

8

Controlador Neumático

9

Miscellaneous

10

IO Breakout

11

Reservado

12-30

Actualización de firmware

31

Fabricante

Este es un valor de 8 bits que indica el fabricante del dispositivo CAN. Los valores asignados actualmente se pueden encontrar en la tabla a continuación. Si desea que se asigne un ID de fabricante del grupo Reservado, envíe una solicitud a FIRST.

Fabricante

Emisión

0

NI

1

Luminary Micro

2

DEKA

3

CTR Electronics

4

REV Robotics

5

Grapple

6

MindSensors

7

Uso del equipo

8

Kauai Labs

9

Copperforge

10

Playing With Fusion

11

Studica

12

The Thrifty Bot

13

Redux Robotics

14

AndyMark

15

Vivid Hosting

16

Reservado

17-255

API / Identificador de mensaje

El identificador de la API o del mensaje es un valor de 10 bits que identifica un comando o un tipo de mensaje particular. Estos identificadores son únicos para cada combinación de Fabricante + Tipo de Dispositivo (por lo que un identificador de API que puede ser un «Voltage Set» para un Luminary Micro Motor Controller puede ser un «Status Get» para un CTR Electronics Motor Controller o Current Get para un CTR Power Distribution Module).

El identificador del mensaje se divide en 2 subcampos: la clase API de 6 bits y el índice API de 4 bits.

Clase API

La clase API es un identificador de 6 bits para una agrupación API. Los mensajes similares se agrupan en una sola clase de API. En la tabla a continuación se muestra un ejemplo de las clases API para el controlador de motor Jaguar.

Clase API

Modo de control de voltaje

0

Modo de control de velocidad

1

Modo de compensación de voltaje

2

Modo de control de posición

3

Modo de control actual

4

Estado

5

Estado periódico

6

Configuración

7

Ack

8

Índice API

El índice API es un identificador de 4 bits para un mensaje en particular dentro de una clase API. En la tabla a continuación se muestra un ejemplo de los valores del índice API para la clase API de control de velocidad del controlador de motor Jaguar.

Índice API

Control Enable

0

Control Disable

1

Establecer punto de ajuste

2

Constante P

3

Constante I

4

Constante D

5

Establecer referencia

6

Trusted Enable

7

Confianza sin reconocimiento

8

Punto de ajuste de confianza sin reconocimiento

10

Establecer punto de ajuste sin reconocimiento

11

Número del dispositivo

Número de dispositivo es una cantidad de 6 bits que indica el número del dispositivo de un tipo particular. Los dispositivos deben tener el ID de dispositivo 0 para que coincida con otros componentes del sistema de control FRC. El dispositivo 0x3F puede reservarse para mensajes de difusión específicos del dispositivo.

CAN addressing bit mapping.

Marcos Protegidos

Los nodos FRC CAN que implementan la capacidad de control del actuador (controladores de motor, relés, controladores neumáticos, etc.) deben implementar una forma de verificar que el robot esté habilitado y que los comandos se originen con el controlador principal del robot (es decir, el roboRIO).

Mensajes de difusión

Los mensajes de difusión son mensajes enviados a todos los nodos estableciendo el tipo de dispositivo y los campos del fabricante en 0. La clase de API para mensajes de difusión es 0. Los mensajes de difusión definidos actualmente se muestran en la tabla a continuación:

Descripción

Inhabilitar

0

Sistema detenido

1

Reinicio de sistema

2

Asignar dispositivo

3

Consulta de dispositivo

4

Heartbeat

5

Sincronizar

6

Actualizar

7

Versión de firmware

8

Enumerar

9

Reanudar sistema

10

Devices should disable immediately when receiving the Disable message (arbID 0). Implementation of other broadcast messages is optional.

Requisitos para los nodos FRC CAN

Para que los nodos CAN sean aceptados para su uso en el sistema FRC, deben:

  • Comuníquese utilizando ID de arbitraje que coincidan con el formato FRC prescrito:

    • Un tipo de dispositivo CAN emitido válido (según la Tabla 1 - Tipos de dispositivo CAN)

    • Una ID de fabricante válida y emitida (según la Tabla 2 - Códigos de fabricante de CAN)

    • Clase(s) e índice(s) API asignados y documentados por el fabricante del dispositivo

    • Un número de dispositivo seleccionable por el usuario si se pretende que varias unidades del tipo de dispositivo coexistan en la misma red.

  • Admite los requisitos mínimos de mensajes de transmisión como se detalla en la sección Mensajes de transmisión.

  • If controlling actuators, utilize a scheme to assure that the robot is issuing commands, is enabled, and is still present.

  • Provide software library support for LabVIEW, C++, and Java or arrange with FIRST® or FIRST’s Control System Partners to provide such interfaces.

Universal Heartbeat

The roboRIO provides a universal CAN heartbeat that any device on the bus can listen and react to. This heartbeat is sent every 20 ms. The heartbeat has a full CAN ID of 0x01011840 (which is the NI Manufacturer ID, RobotController type, Device ID 0 and API ID 0x061). It is an 8 byte CAN packet with the following bitfield layout.

Descripción

Byte

Width (bits)

Match time (seconds)

8

8

Match number

6-7

10

Replay number

6

6

Alianza roja

5

1

Habilitado

5

1

Modo autónomo

5

1

Modo de prueba

5

1

System watchdog

5

1

Tipo de torneo

5

3

Tiempo del día (año)

4

6

Tiempo del día (mes)

3-4

4

Tiempo del día (día)

3

5

Tiempo del día (segundos)

2-3

6

Tiempo del día (minutos)

1-2

6

Tiempo del día (horas)

1

5

struct [[gnu::packed]] RobotState {
  uint64_t matchTimeSeconds : 8;
  uint64_t matchNumber : 10;
  uint64_t replayNumber : 6;
  uint64_t redAlliance : 1;
  uint64_t enabled : 1;
  uint64_t autonomous : 1;
  uint64_t testMode : 1;
  uint64_t systemWatchdog : 1;
  uint64_t tournamentType : 3;
  uint64_t timeOfDay_yr : 6;
  uint64_t timeOfDay_month : 4;
  uint64_t timeOfDay_day : 5;
  uint64_t timeOfDay_sec : 6;
  uint64_t timeOfDay_min : 6;
  uint64_t timeOfDay_hr : 5;
};

If the System watchdog flag is set, motor controllers are enabled. If 100 ms has passed since this packet was received, the robot program can be considered hung, and devices should act as if the robot has been disabled.

Tenga en cuenta que todos los campos excepto «Enabled», «Autonomous mode», «Test mode» y «System watchdog» contendrán valores no válidos hasta un tiempo arbitrario después de que se conecte la Driver Station.