The simulation stack
flowchart LR
%% My image with a constrained aspect ratio
cm@{ img: "https://www.ipg-automotive.com/favicon.svg", label: "CarMaker", pos: "b", h: 60, constraint: "on" }
camera@{ img: "https://www.svgrepo.com/show/179335/photo-camera-technology.svg", label: "Virtual Camera", pos: "b", h: 60, constraint: "on" }
pcan@{ img: "https://www.peak-system.com/favicon.svg", label: "PCAN", pos: "b", h: 60, constraint: "on" }
subgraph stack["NRAI Stack"]
direction TB
nims["NIMS"]
controller
perception
planner
nims <-- FIFO --> controller
end
stack["NRAI Stack"]
cm <-- Virtual CAN --> pcan <--CAN--> nims
cm -- Simulation --> camera -- Socket --> perception --> planner --> controller
classDef ic fill:none,stroke:none;
class cm,pcan,camera ic;
The simulation stack
sequenceDiagram
participant CarMaker@{ "type" : "boundary" } as CarMaker
participant Camera as Virtual Camera
participant Perception as Perception
participant Planner as Planner
participant Controller as Controller
participant NIMS as NIMS
par
CarMaker->>NIMS: State of the vehicle
CarMaker->>Camera: Virtual camera data
end
Camera->>Perception: Virtual camera data
Perception->>Planner: Cone detection (more?)
Planner->>Controller: Waypoints
par
Controller->>NIMS: High-level control inputs
NIMS->>Controller: State of the vehicle
end
NIMS->>CarMaker: Low-level control inputs
The real stack
flowchart LR
%% My image with a constrained aspect ratio
car@{ img: "https://www.iconpacks.net/icons/2/free-car-icon-2901-thumb.png", label: "Car", pos: "b", h: 60, constraint: "on" }
camera@{ img: "https://www.svgrepo.com/show/179335/photo-camera-technology.svg", label: "Zed Camera", pos: "b", h: 60, constraint: "on" }
subgraph stack["NRAI Stack"]
direction TB
nims["NIMS"]
controller
perception
planner
nims <-- Socket --> controller
end
stack["NRAI Stack"]
car <-- CAN --> nims
camera -- ZED SDK --> perception --> planner --> controller
classDef ic fill:none,stroke:none;
class car,camera ic;
The simulation stack
sequenceDiagram
participant Car@{ "type" : "boundary" } as Car
participant Camera@{ "type" : "boundary" } as Zed Camera
participant Perception as Perception
participant Planner as Planner
participant Controller as Controller
participant NIMS as NIMS
par
Car->>NIMS: State of the car
Camera->>Perception: Camera data
end
Perception->>Planner: Cone detection (more?)
Planner->>Controller: Waypoints
par
Controller->>NIMS: High-level control inputs
NIMS->>Controller: State of the car
end
NIMS->>Car: Low-level control inputs
CarMaker
- CarMaker From IPG Automotive
- Simulation software for virtual test driving
- Real-time physics engine
- Support for HIL tests

CarMaker dashboard
- Disengage the emergency brake
- Select and set the mission
- Turn the 3 knobs: AS, TS, LV
- Wait 5 seconds
- Send the GO signal
- ???
- Profit

FS-AI CAN API
Highlight of the CAN API messages.
From AI to car
- Status
- Drive_F
- Drive_R
- Steer
- Brake
From car to AI
- Status
- Drive_F
- Drive_R
- Steer
- Brake
- Speeds
- Wheel_counts
Car state machine
Highlight of the car state machine.
The goal is to reach the FINISHED state without triggering the EMERGENCY BRAKE state.
---
config:
theme: dark
---
stateDiagram-v2
state "OFF" as off
state "READY" as ready
state "DRIVING" as driving
state "FINISHED" as finished
state "EMERGENCY BRAKE" as brake
[*] --> off
ready --> off : AS = OFF
off --> ready : AS = ON & TS = ON & EBS = ARMED & MISSION = SET
ready --> driving : 5 seconds & DIRECTION = NEUTRAL & TORQUE = 0 & STEERING = 0 & GO = OFF -> ON
driving --> finished : MISSION = FINISHED & SPEED < 10rpm
driving --> brake : Emergency brake
driving --> off : AS = OFF | GO = OFF | ERROR = TRUE
brake --> off : AS = OFF
finished --> off : AS = OFF
classDef success stroke:#0f0
classDef failure stroke:#f00
class finished success
class brake failure