Map Input » History » Version 1
Adam Klama, 06/21/2026 02:24 PM
| 1 | 1 | Adam Klama | # Map Input |
|---|---|---|---|
| 2 | |||
| 3 | ## Overview |
||
| 4 | A **Map Input** applies a **1D lookup table** to another input and reports the |
||
| 5 | result as a new, independent channel. You give it a list of X breakpoints and the |
||
| 6 | Y value at each one; the controller looks up the source value on the X axis and |
||
| 7 | **interpolates** between points. Use it to reshape a signal — for example to turn |
||
| 8 | a pedal-position input into a torque-request curve. |
||
| 9 | |||
| 10 | This is the standalone 1D map described on the |
||
| 11 | [Scaling & Maps](../Scaling-and-Maps.md) page — it produces a **separate** channel |
||
| 12 | that other IO can reference by alias. |
||
| 13 | |||
| 14 | ## Prerequisites & hardware |
||
| 15 | You need: |
||
| 16 | - A **source input** to use as the X axis — any existing input, by alias. |
||
| 17 | - The map data: matching lists of **X breakpoints** and **Y values**. |
||
| 18 | |||
| 19 | ## Add it in the app |
||
| 20 | 1. Add a new input and choose **Map Input** as the type. |
||
| 21 | 2. Choose the **source input** (the X axis). |
||
| 22 | 3. Give it a clear **alias** (e.g. `Torque Request`). |
||
| 23 | 4. Enter the **input values** (X) and **output values** (Y) of the map. |
||
| 24 | |||
| 25 | ## Settings reference |
||
| 26 | > Schema: `config/MapInputConfigData.proto`. |
||
| 27 | |||
| 28 | | Setting | Meaning | Unit | Range / values | Notes | |
||
| 29 | |---|---|---|---|---| |
||
| 30 | | **Source input** | The input read on the X axis | — | an existing input (by alias) | The value looked up in the map. | |
||
| 31 | | **Input values (X)** | The X-axis breakpoints | source's unit | list of sint32 | Must be **strictly increasing**. The points where the curve bends. | |
||
| 32 | | **Output values (Y)** | The result at each X breakpoint | result's unit | list of sint32 | One Y per X. Values between breakpoints are interpolated. | |
||
| 33 | |||
| 34 | **How it maps:** the source value is located between two X breakpoints and the |
||
| 35 | output is linearly interpolated between their Y values. Keep one Y for every X. |
||
| 36 | For more on editing maps, see [Scaling & Maps](../Scaling-and-Maps.md). |
||
| 37 | |||
| 38 | ## Common settings |
||
| 39 | Map Input also uses the shared setting — alias. See [Common IO Settings](../Common-IO-Settings.md). |
||
| 40 | |||
| 41 | ## Example — pedal position to torque request |
||
| 42 | 1. Type **Map Input**, alias `Torque Request`. |
||
| 43 | 2. **Source input** = your `Pedal Position` input (0–100 %). |
||
| 44 | 3. **Input values (X)** `0, 20, 50, 80, 100`. |
||
| 45 | 4. **Output values (Y)** `0, 50, 200, 450, 600` — a progressive curve that is |
||
| 46 | gentle off-idle and steeper near full pedal. |
||
| 47 | |||
| 48 | ## Troubleshooting |
||
| 49 | - **Output flat or stuck at one end:** the source is sitting below the first or |
||
| 50 | above the last X breakpoint — values outside the table are clamped to the end Y. |
||
| 51 | - **Map rejected / behaves oddly:** make sure **Input values** are strictly |
||
| 52 | increasing and that there is one **Output value** for each. |
||
| 53 | |||
| 54 | ## Related |
||
| 55 | - [Scaling & Maps](../Scaling-and-Maps.md) — concept page for 1D maps. |
||
| 56 | - [Map Output](../outputs/Map-Output.md) — the same lookup applied to an output. |
||
| 57 | - [Mux Input](Mux-Input.md) — select between inputs rather than interpolate. |