Track2Vehicle Module
Original blog post is available here: https://scuderiasegfault.github.io/blog/2026/03/17/t2v-module.html
One issue we have encountered in the many races we have participated in is the impact of human reaction time during the starting sequence. While a difference in starting time might have been a minor annoyance a few years ago, today we have incredibly competitive teams with lap times only separated by a few hundredths of a second. With such a minor difference in lap times, the result of the race may come down to human reaction time, which is in the order of a few tenths of a second.
As a mitigation for this problem, we are pleased to announce the new RoboRacer Track to Vehicle Module (T2V Module), developed in cooperation with the RoboRacer foundation for the 27th RoboRacer Grand Prix in Vienna. The T2V Module consists of one or more transmitters located around the track, which send commands and track information to receivers mounted on the cars using infrared signals. During the Vienna Grand Prix, we will utilize this system to start the races and, if possible, to indicate slow-driving sections1.
Protocol
The T2V Module uses IR NEC2 frames to relay information from the track to the cars. Many commercially available infrared remotes use IR NEC frames to transmit data, and the protocol is simple enough for small microcontrollers to interpret. One drawback of the protocol is that it is comparatively slow, with one frame requiring approximately 67.5 ms to transmit. While this is not an issue if all cars use the T2V Module, the starting system has to take the frame transmission time into account when human drivers are involved. The T2V protocol only uses the standard mode for IR NEC addressing, not the extended variant.
IR NEC transmits an address and a command in each frame, both of which are utilized by the T2V Module. Systems using the T2V Module protocol MUST use the address to process only frames destined for the system. For this purpose, we define four blocks of addresses that require different treatment. The table below defines the different blocks of addresses.
| Start | End | Name |
|---|---|---|
00 |
0F |
Multicast |
10 |
7F |
Race reserved |
80 |
EF |
Open addresses |
F0 |
FE |
RFU (Reserved for future use) |
FF |
FF |
Broadcast |
We use multicast (0x00 - 0x0F) addresses to identify a group of receivers that MUST process a frame, such as all
cars on one track or all cars in a group (e.g. all cars from the same team, or all cars in a training slot). To address
all receivers at once, we define the broadcast address (0xFF).
Any receiver receiving a frame with this address MUST process the frame.
For organizational reasons, we split the unicast addresses into two ranges: the race reserved (0x10 - 0x7F)
range and the open (0x80 - 0xEF) range. During a race, the race directors assign race reserved addresses. No
receiver SHALL use an address in this range unless the race directors have assigned it. Receivers can use any open
address freely at any time, but teams SHOULD coordinate the used addresses during a race. Addresses in the range
0xF0 - 0xFE are reserved for future use.
To date, only the essential commands required for a starting system have been defined. After the Vienna Grand Prix, we
will develop a standardization process to add additional commands to the standard. A complying device needs to implement
at least the commands START_GO, START_ABORT, and STOP. The other commands, START_READY and START_SET, are
informative, and devices might use them to optimize their starting routine (e.g., by allowing the car’s operator to press
the dead man’s switch without the car starting to drive).
| ID | Name | Required | Usage |
|---|---|---|---|
00 |
START_READY | No | Starting sequence has started. |
01 |
START_SET | No | Start of race is imminent. |
02 |
START_GO | Yes | Start the race. |
03 |
START_ABORT | Yes | Start sequence has been aborted. |
04 - 7E |
— | RFU | |
7F |
STOP | Yes | The car MUST stop immediately. |
80 - FF |
— | RFU |
Reference Receiver
We aim to make the T2V Module accessible to as many teams as possible by providing an affordable and widely available Reference Receiver. To achieve this, we have based the receiver on the ESP32-P4-NANO from Waveshare, which is internationally available and costs less than 20 USD. In the minimum configuration, teams need to purchase an additional IR Receiver, a USB plug with a corresponding cable, a few passive components, and a bunch of jumper wires:
| Reference | Note | Value/Type | Farnell Code | Link (Examples) |
|---|---|---|---|---|
| ESP32-P4-NANO | Waveshare.com | |||
| C2, C3, C6 | Capacitors | 1 µF | 3188966 | |
| F1 | Fuse | 2834854 | ||
| J3 | USB Connector | USB mini B | 4552359 | Amazon.de |
| R7 | Resistor for Receiver LED filter | 10 Ω | 9236643 | |
| U1 | Receiver LED | TSOP345xx | 2251343 | Amazon.de |
| Jumper wires |
Optionally also add a Power LED to be able to see that the device is powered:
| Reference | Note | Value/Type | Farnell Code | Link (Examples) |
|---|---|---|---|---|
| C1 | Capacitor | 1 µF | 3188966 | |
| D1 | Power LED | Green | 2099252 | |
| R1 | Resistor | 470 Ω | 9240926 |
For local testing you can easily extend the circuit with an infrared sender:
| Reference | Note | Value/Type | Farnell Code | Link (Examples) |
|---|---|---|---|---|
| C5 | Capacitor | 1 µF | 3188966 | |
| D2 | Sender LED | Infrared | 1328299 | Amazon.de |
| Q1 | Transistor | BSS138 | 4655271 | |
| R2 | Resistor | 39 Ω | 9236716 |
Wiring diagram:
The firmware handles the processing of the IR NEC frames and communication as a USB device. As we intend to expand the receiver’s functionality to read data from temperature sensors and voltage meters, these features will also be generally available when we have finished testing them.
The Reference Receiver uses USB Full-Speed to transfer the IR NEC frames to the car. By default, it uses the vendor ID
0x5455, the product ID 0x1911 and a vendor-specific interface with one endpoint. The endpoint with ID 1 is
an IN Interrupt endpoint that transfers 4 bytes of data (the IR NEC frame) when a frame is received.
For details on extensions and their endpoints, please refer to the documentation on the extension-specific branches.
For configuration, the Reference Receiver uses a Bluetooth Low Energy Interface. The race directors use this interface
during races to configure the correct addressing. For this purpose, the device provides a BLE GATT service under the
UUID c902d400-1809-2a94-904d-af5cbdcefe9b with the required characteristics to properly configure the receiver. The
table below describes the characteristics and their BLE attributes.
| Characteristic | Name | Attributes | Description |
|---|---|---|---|
FF01 |
Team Name | Read-only | The name of the team. |
FF02 |
Car Name | Read-only | Identfier of the car. |
FF03 |
IR NEC frames | Read/Notify | On read returns the latest IR NEC frame. If used with notifications sends the most recent frame. |
FF04 |
Unicast address | Read/Write | Unicast address for this device. |
FF05 |
Multicast mask | Read/Write | Multicast mask, with each bit in the mask representing one possible address. |
Documentation
- Instructions: https://github.com/ScuderiaSegfault/t2v_mod/tree/main
- Driver: https://github.com/ScuderiaSegfault/t2v_mod_rs
- Example ROS 2 node: https://github.com/ScuderiaSegfault/t2v_mod_node
- Message definitions: https://github.com/ScuderiaSegfault/t2v_msgs
Reference Sender
Similar to the Reference Receiver, we have also developed a Reference Sender for use at the Vienna Grand Prix. It is based on the same hardware platform as the receiver, but uses Power over Ethernet for power supply and network connectivity. In the first version, it will allow direct commands via UDP and TCP, as well as communication based on Zenoh for integration into more complex systems.
Specialized Sender: Starting Lights
We drew inspiration from the starting lights used in a slightly larger racing series (hint: about ten times larger) when designing the starting lights. They feature IR senders, as well as five lamps on each side of the starting line to indicate the starting process to humans. As mentioned before, the transmission of the IR NEC frame will finish when the starting lights indicate the start of the race.
We propose the following sequence for the starting lights:
- All lights start dark.
- The first light shows red, IR NEC
START_READYis sent. - Each second, another light turns red until all lights are red.
- IR NEC
START_SETis sent. - After another second, all lights turn green, IR NEC
START_GOis sent.
If the race directors need to abort the start, the lights will flash yellow slowly, and IR NEC START_ABORT is sent. To
indicate a faulty start, the lights will flash red, and an IR NEC STOP is sent.
-
Subject to final rule agreement and roll-out of T2V Module. ↩
-
See https://www.sbprojects.net/knowledge/ir/nec.php for more details on the IR NEC protocol. ↩