Speed and Deceleration Settings
NOTE
This is the canonical English user guide maintained with the carrot-wip code. When user-visible behavior changes, update this document together with the related code and tests.
This page explains all 23 speed and deceleration settings in the current code: event targets, deceleration distance, stock-navigation CAN, road-limit adjustment, speed bumps, curve/route/model speed, and traffic-light stop adjustment.
Change them in Carrot Web → Settings → Driving control → Speed and deceleration.
CAUTION
These settings can affect desired speed and the deceleration plan. Route, speed-limit, distance, and model inputs can be missing, late, or incorrect. The driver must always monitor the road and intervene immediately.
Five sections
The lowest candidate becomes the final desired speed
The code collects several candidates and selects their minimum as desired_speed:
| Candidate | Representative setting/input |
|---|---|
| Camera, average-speed zone, speed bump | Safety-event input, AutoNaviSpeed* |
| Road limit plus offset | AutoRoadSpeedLimitOffset |
| Vision curve | AutoCurveSpeedFactor, TurnSpeedControlMode |
| Route turn | MapTurnSpeedFactor, TurnSpeedControlMode |
| Separate automatic turn control | AutoTurnControl* |
If raising one value produces no change, another source may already be lower. Check the displayed source, event type, target limit, and remaining distance together.
NOTE
CarrotMan and CarrotLink are not currently supported. Features requiring external route, turn-by-turn, or road input may be unavailable in a given setup; describing their internal calculations does not imply support for those former connection methods.
Catalog defaults and initial Params can differ
| Parameter | Catalog default | Initial Params value |
|---|---|---|
AutoCurveSpeedFactor | 100 | 120 |
AutoNaviSpeedCtrlEnd | 6 | 7 |
MapTurnSpeedFactor | 100 | 90 |
AutoRoadSpeedAdjust | 0 | 50 |
Record the value currently shown on the device before changing anything.
1. Speed cameras
The related settings are AutoNaviSpeedCtrlMode, AutoNaviSpeedCtrlEnd, AutoNaviRearCameraHoldDistance, AutoNaviSpeedDecelRate, AutoNaviSpeedSafetyFactor, AutoNaviCountDownMode, VehicleNaviCanControl, VehicleNaviSchoolZoneControl, VehicleNaviDecelCancel(VehicleNaviDecelCancelBox, VehicleNaviDecelCancelMobileZone, VehicleNaviDecelCancelBump, VehicleNaviDecelCancelUnknown, VehicleNaviDecelCancelEarlyWarning), VehicleNaviSectionAvgControl, VehicleSpeedCameraControlMode, and VehicleSpeedCameraDistanceTime.
AutoNaviSpeedCtrlMode
| Value | Events used for deceleration |
|---|---|
0 | Disabled |
1 | Fixed cameras and average-speed zones |
2 | Mode 1 plus speed bumps |
3 | Mode 2 plus mobile-camera events |
The event type, limit, and distance must all be valid. An average-speed zone retains its target until the end distance; mobile-camera events are used only in mode 3.
Stock-navigation CAN control
When external navigation is connected, deceleration and countdowns use external navigation only. Stock cameras, bumps, sections, 30 km/h zone caps, and stock-navigation speed displays are excluded even if external navigation has no current guidance or enforcement item. After disconnection or receive timeout is detected, stock navigation becomes available again according to its settings.
VehicleNaviCanControl selects when exact camera and speed-bump distances from stock navigation are used on supported Hyundai/Kia CAN-FD vehicles. The modes below apply only without an external navigation connection. Always apply in mode 1 means independent of stock route guidance.
A current camera warning is associated only with a nearby distance candidate with the same limit. If only a distant same-speed camera is available, the current warning uses its own virtual distance while the distant camera remains queued for a later approach.
| Value | vNAVI future-event scope |
|---|---|
0 | Disabled |
1 | Always use cameras and bumps |
2 | Always use cameras; use bumps only when they match the calculated route |
3 | Use both cameras and bumps only when they match the calculated route |
A route match requires vNAVI to mark the current segment as calculated_route=1 and the future event's path index to equal the current path. With no route, during recalculation, on a path-index mismatch, or when route data is more than two seconds old, mode 2 rejects queued bumps and mode 3 rejects queued cameras and bumps. This filter applies only to future distance profiles. Current camera states confirmed directly by the vehicle remain controlled separately by VehicleSpeedCameraControlMode.
The Kia PV5 also holds a section speed cap after a section alert. A currently active section confirmed directly by the PV5 remains effective in VehicleNaviCanControl modes 1–3. It retains the cap after the brief alert ends and releases it when navigation enforcement ends, on early exit, on conflicting limits, or after more than one second of signal loss.
PV5 section control does not calculate average speed or remaining distance. Restarting, losing signals, or re-enabling the setting requires a new section alert, so the cap may not resume immediately within a zone. Recorded driving validates entry, retention within the zone, and early exit; passage through the actual enforcement endpoint remains to be validated. VehicleNaviSchoolZoneControl remains unsupported on the PV5.
This experimental control is off by default. First verify that the displayed event type, limit, and remaining distance match the road, and disable it immediately if they do not.
Stock-navigation camera kinds
The current stock warning (0x4A3) carries no camera kind. The kind of the preview received about 2 km ahead (0x4BE) is attached to the warning with the same limit at the same position. A warning starts about 6.1 m per km/h of the limit before its camera (about 366 m at 60 km/h), so only previews at that position match. A warning of unknown kind still decelerates as before.
| Preview kind | Navigation icon | Handling |
|---|---|---|
| Fixed speed camera | Red square | Always decelerates; no skip |
| Signal-and-speed | Traffic-light icon | Always decelerates; no skip |
| Rear speed, rear signal-and-speed | — | Always decelerates; no skip (identified by the preview's rear flag) |
| Mobile enforcement zone | Blue circle | Decelerates when AutoNaviSpeedCtrlMode is 3; ignored at 2 or lower |
| Mobile-camera box | — | Decelerates; can be cancelled with the deceleration cancel request |
A warning that also carries a fixed, signal, or rear camera always decelerates, even inside a mobile zone.
VehicleNaviDecelCancel (deceleration cancel request)
When enabled, while engaged and one of the kinds enabled in its details is decelerating, one press of cruise + or a gas tap (accelerator pressed for under 0.4 s) cancels that deceleration. The input does not raise the set speed (neither +1 nor the gas-tap +10), and the cancel applies to that one camera or bump; the next one decelerates again. While disengaged, below about 18 km/h, or when that kind is not actually decelerating, + and the gas tap keep their normal resume/engage/set-speed roles. Fixed, signal and rear cameras, warnings without a preview and section enforcement cannot be cancelled. Off by default.
Per-kind toggles (in the setting's detail screen, on by default so turning on the master enables all):
| Key | Applies to |
|---|---|
VehicleNaviDecelCancelBox | Mobile-camera box |
VehicleNaviDecelCancelMobileZone | Mobile enforcement zone; matters only when AutoNaviSpeedCtrlMode is 3, so zones decelerate |
VehicleNaviDecelCancelUnknown | [Experimental] Warnings whose camera kind preview was not received or not understood. It can include signal or speed cameras that send no preview, so off by default and must be turned on separately from the master. Not applied at 30 km/h or below (school and senior zones) or inside a section; if a signal, rear or fixed preview is matched after the cancel, that rule applies |
VehicleNaviDecelCancelEarlyWarning | [Experimental] For roads/cars where the warning starts earlier than 6.1 m x the limit. Grows the far end of the matching window up to 1.35x so box, fixed and mobile-zone previews are found. Risk: a mobile-zone preview attached to the wrong warning can, with low probability, skip a real enforcement camera when the mobile-zone cancel is on or AutoNaviSpeedCtrlMode is 2 or lower; always verify. Off by default |
VehicleNaviDecelCancelBump | Stock-navigation speed bump. The input is used only while the bump target (from the speed-bump settings) is below the set speed, i.e. actually decelerating, and cancels the nearest bump only |
VehicleNaviSectionAvgControl
When enabled, a stock-navigation section (vehicle average-speed signal present) still stays capped at the section limit × AutoNaviSpeedSafetyFactor (for example 117 in a 110 section at 107%). While engaged and with the cruise set speed above that cap, one press of cruise + or a gas tap unlocks the section. Up to the set speed is then allowed only while the average since entering the section stays at or below the section limit. Only time banked by driving slower (for example in congestion) can be spent; without it, or once it is spent, the cap applies. The bank uses the vehicle-speed (vEgo) odometer scaled to true distance (×1.015; vEgo reads about 0.6 % below GPS), and the allowance is passed back through the safety factor and the cluster/actual speed ratio so the car actually drives at it. Without banked time the cap is the same section limit × AutoNaviSpeedSafetyFactor as when locked, so if that is above the limit in true speed (for example 107 %), the average can exceed the limit by that much. The unlocking input does not raise the set speed (neither +1 nor the gas-tap +10). A long press of cruise - locks the section again without changing the set speed (while unlocked, a long - does not do its −10 step; a short press still lowers the set speed as usual). Leaving the section resets it.
Once unlocked, no virtual camera distance is used inside the section, and the end camera decelerates to the spot limit after its preview about 2 km ahead. The average uses the vehicle odometer (vEgo) with no margin. In a recorded drive the navigation-displayed average was 2–3 km/h higher than this calculation, so adjust the cruise set speed yourself if needed. The section start is taken when the average-speed signal appears; experimental.
VehicleSpeedCameraControlMode
This setting applies only to camera, average-speed-zone, and 30 km/h zone deceleration received over vehicle CAN. It does not affect camera information from Carrot Navi.
| Value | Accelerator behavior |
|---|---|
0 | Disable vehicle-received camera deceleration |
1 | Always apply deceleration regardless of accelerator input |
2 | Once the camera target is below vehicle speed and actual deceleration has begun, a new accelerator press overrides the current event and keeps the highest speed reached during the override as its lower bound |
3 | Suspend vehicle-received camera deceleration while the accelerator is pressed and resume it after release |
In mode 2, an accelerator held from before actual deceleration begins does not pre-arm a floor. A new press during actual deceleration is treated as a request to ignore the current event, and the floor rises to the highest speed reached while accelerating. Releasing the pedal does not permit further slowing below that floor during the same event. Braking, stopping, a speed-limit or deceleration-source change, or the end of the event clears it.
On the Kia PV5, a matched camera distance remains active through brief notification pulses only while fresh stock-navigation messages continue to report the same enforcement limit. When enforcement ends, the limit changes, or either message is lost for more than one second, the current and queued camera distances are cleared.
A queued distance alone cannot trigger deceleration, including after the current camera's distance is exhausted. A new valid warning without a newly received matching distance uses the virtual distance below; an unchanged warning for a completed camera cannot restart it. PV5 route departure is not detected independently: cancellation relies on stock navigation ending or changing its enforcement state.
VehicleSpeedCameraDistanceTime
When the vehicle supplies only an enforcement speed without an exact camera distance, this setting creates a virtual deceleration distance. At a 50 km/h camera, 6.0 s produces about 300 m and 6.2 s about 310 m. A live change is applied within about one second.
On supported CAN-FD vehicles, this also applies when no nearby camera distance matches the current warning. A new warning or a limit change starts a fresh virtual distance, which decreases with travel. Once the distance is exhausted, the cap remains while the warning is active; the virtual distance does not repeatedly restart at its full length.
AutoNaviRearCameraHoldDistance
When external navigation reports a rear speed or rear signal-and-speed camera (TMAP types 75/76), keep the target-speed cap beyond the camera position. The default is 100 m, the range is 0–300 m, and the step is 10 m. 0 disables the extra hold. Increasing the value holds farther beyond the camera; decreasing it releases sooner.
The camera position is captured within the final 50 m and then tracked by traveled distance. The hold survives guidance removal or a switch to the next camera or bump. A lower speed required by another control still takes precedence. Stopping does not consume the hold distance. The display shows the rear-camera hold and remaining distance; the countdown ends at the original camera position.
External disconnection, off-route status, a new navigation session, a traveled-distance reset, or disabling camera deceleration clears the hold. Stock CAN does not identify rear-camera types, so it uses its active warning to retain the cap without this extra distance. The configured distance does not guarantee that measurement by the actual camera has ended.
AutoNaviSpeedSafetyFactor
camera target = received limit × safety factor / 100
| Limit | Factor | Target |
|---|---|---|
| 60 km/h | 100% | 60 km/h |
| 60 km/h | 105% | 63 km/h |
| 100 km/h | 95% | 95 km/h |
This does not guarantee speedometer error or any legal tolerance. A wrong input limit produces a wrong target.
AutoNaviSpeedCtrlEnd
This is not time spent decelerating after an event. It creates a distance margin at the target speed:
completion margin = target speed (m/s) × completion time (s)
At a 60 km/h target (about 16.7 m/s), 6 seconds is about 100 m and 10 seconds is about 167 m before the camera. Raising the value aims to finish slowing earlier but can hold the lower speed longer.
AutoNaviSpeedDecelRate
The catalog default and initial Params value are both 120, corresponding to 1.20 m/s². Updating the software does not change an existing saved setting.
The stored value is multiplied by 0.01 m/s² to calculate the approach curve for cameras and speed bumps:
| Stored value | Rate used | Perceived direction |
|---|---|---|
| 80 | 0.80 m/s² | Start earlier and more gently |
| 120 | 1.20 m/s² | Default |
| 200 | 2.00 m/s² | Can start closer and slow more strongly |
The important direction is: a lower value starts deceleration earlier. The speed ceiling follows:
allowed_speed² = target_speed² + 2 × rate × (remaining_distance - completion_margin)
If slowing begins too late, lower this value one step. If it begins too early, raise it. Do not change CtrlEnd at the same time.
AutoNaviCountDownMode
| Value | Countdown display |
|---|---|
0 | Off |
1 | Turn points and speed events, excluding bumps |
2 | Turn points, speed events, and bumps |
The countdown uses only external-navigation distances while connected, and stock-navigation distances otherwise. Changing the connection state resets the previous countdown. It estimates seconds from distance and current speed and does not alter the deceleration calculation.
Recommended tuning order: validate event data, set the target with SafetyFactor, set the completion position with CtrlEnd, and finally tune the approach curve with DecelRate.
2. Road speed limit
AutoRoadSpeedLimitOffset
With an active, valid road limit of at least 30 km/h:
road target = road limit + offset
| Value | Meaning as a final-speed candidate |
|---|---|
-1 | Do not use the limit-plus-offset candidate |
0 | Use the limit as received |
5 | Use 5 km/h above the limit |
-1 is not a global off switch. CruiseSpeed1=0 and AutoRoadSpeedAdjust=-1 use a negative offset as the condition for a separate safety-factor calculation.
AutoSpeedUptoRoadSpeedLimit
While following a lead, cruise set speed can rise in 5 km/h steps up to:
automatic ceiling = road limit × setting / 100
All of these must be true: automatic increase is not paused; a lead is within about 60 m; lead speed plus 5 km/h exceeds set speed; and set speed is below the ceiling. 0 disables this feature. SET/- or braking can pause it; RES/+, accelerator input, or a stopped state can release the pause.
AutoRoadSpeedAdjust
IMPORTANT
The current code returns before this setting is evaluated when the ceiling calculated by AutoSpeedUptoRoadSpeedLimit is below 1 km/h. Therefore AutoSpeedUptoRoadSpeedLimit=0 effectively disables AutoRoadSpeedAdjust too.
| Value | Behavior when the road limit changes |
|---|---|
-1 | Immediately synchronize to the new road target on either increase or decrease |
0 | Keep the existing set speed |
1–99 | On a decrease only, move to a weighted value between current set speed and new limit |
100 | On a decrease, move directly to the new limit |
At 50%, a current set speed of 100 and new limit of 60 produces 80 km/h. This 1–100 branch uses the raw road limit, not the offset or safety factor.
For -1, a non-negative offset selects limit + offset; a negative offset selects limit × camera safety factor. Immediate synchronization is especially sensitive to incorrect road-limit input.
3. Speed bumps
Speed-bump control uses AutoNaviSpeedBumpTime, AutoNaviSpeedBumpSpeed, and AutoNaviSpeedBumpEndDistance. It requires AutoNaviSpeedCtrlMode >= 2, a bump event and distance, and a road category that the code does not treat as highway. A stock-navigation CAN bump must also satisfy the route condition selected by VehicleNaviCanControl. With the deceleration cancel request on (VehicleNaviDecelCancel + VehicleNaviDecelCancelBump), + or a gas tap during a bump deceleration cancels the nearest bump.
AutoNaviSpeedBumpSpeed
This is the crossing target in km/h. Raise it to cross faster and lower it to cross more slowly. Vehicle height, suspension, and bump shape matter; an unrecognized bump is unaffected.
AutoNaviSpeedBumpTime
bump completion margin = bump target (m/s) × setting time (s)
At 36 km/h (10 m/s), 1 second aims to reach target about 10 m before the bump; 3 seconds aims for about 30 m. A larger value finishes earlier. The approach curve still uses AutoNaviSpeedDecelRate.
AutoNaviSpeedBumpEndDistance
The speed-bump limit is released when remaining distance is at or below this setting. The stored and displayed unit is cm, so the default 200 releases the limit 2 m before the received bump position. 0 preserves the former behavior through the received point.
This does not move the bump or change its approach curve. Normal longitudinal control restores speed after the bump limit is removed, and the countdown may continue to the received position. Raise the value in 10–50 cm steps when a mapped bump lies behind the physical bump and recovery starts late. Lower it if the vehicle begins accelerating before the actual bump.
As with a camera event, a new accelerator press after a bump signal has begun actual deceleration is treated as a request to ignore that bump. The highest speed reached while accelerating becomes the floor for the rest of the event, and the floor is cleared when the bump event ends. An accelerator held from before deceleration began does not start the override.
If there is no slowing, check mode 2+, event type 22, remaining distance, road category, and the stock-navigation route mode. For late slowing, lower DecelRate or raise BumpTime; for an incorrect crossing speed, adjust only BumpSpeed. If recovery starts late after passing the bump, raise BumpEndDistance; if it starts before the bump, lower it.
4. Curves and turns
There are three distinct sources:
- Vision curve speed from predicted yaw rate and speed
- Route-turn speed from route/turn input
- Applied model driving speed from the model's overall desired velocity
AutoCurveSpeedFactor
The code divides predicted yaw rate by velocity at the same point to obtain curvature. It divides the 1.9 m/s² reference lateral-acceleration budget by the setting ratio, so a higher factor produces a lower curve target. Predicted future velocity is not used directly as a driving-speed target.
The curve target and remaining path distance determine the speed ceiling at the current position. A distant curve permits a higher approach speed; the ceiling decreases toward the curve target as the vehicle approaches. The calculation reserves time for control response and gradual braking buildup. When consecutive fresh model paths confirm that the turn is easing, vTurn recovers promptly to the lowest ceiling from roughly the last 0.25 seconds. A tighter curve limit applies immediately; repeated frames or missing model input do not justify fast release. Actual acceleration still follows the existing acceleration and jerk limits.
Slow or invalid model predictions and isolated yaw-rate spikes are excluded. Late or inaccurate curve predictions can still lead to late deceleration.
The relationship is approximately inverse-square-root: changing 100% to 120% produces about 1 / √1.2, or 91% of the previous calculated speed. Raise it one step if curves are too fast; lower it if they are too slow.
AutoCurveSpeedLowerLimit
This floor applies to vision-curve and route-turn candidates. For vision curves, it applies to the curve target before remaining distance determines the current approach ceiling. Raising it prevents those sources from selecting a lower speed, which can leave insufficient slowing for a sharp curve. It is not an automatically safe minimum.
TurnSpeedControlMode
| Value | Vision curve | Route turn |
|---|---|---|
0 | Off | Off |
1 | On | Off |
2 | On | Near the turn point |
3 | Off | Always included as a candidate |
In mode 2, route-turn speed enters only when turn distance is roughly between -500 m and +500 m. Mode 3 can cause unexpected slowing when route data is inaccurate.
IMPORTANT
Mode 0 does not disable every model-derived speed function. ApplyModelSpeed changes cruise set speed separately.
MapTurnSpeedFactor
route-turn candidate = route speed × factor / 100
80% lowers the received value; 100% keeps it; 120% raises it. AutoCurveSpeedLowerLimit is then applied as the floor. Valid supported route-speed input is required.
ApplyModelSpeed
This is not curve-only. It applies the driving model's desiredVelocity to cruise set speed:
applied model speed = desiredVelocity × abs(setting) / 100
effective ceiling = min(applied model speed, road limit × 110%)
| Value | Current behavior |
|---|---|
0 | Disabled |
| Positive | Raise set speed to the ceiling only when currently below it |
| Negative | Directly overwrite set speed with the calculated ceiling |
WARNING
A negative value is a strong continuous overwrite, not a “deceleration only” switch. Without a valid road limit, the ceiling can become zero. Leave it at 0 unless you fully understand the input path and behavior.
For isolated tuning, start with mode 1 and ApplyModelSpeed=0; adjust the curve factor, then the floor, and then check route-turn control. Test ApplyModelSpeed separately because it changes cruise set speed.
5. Traffic-light detection
This uses the model's predicted path end and future speed changes, together with incoming signal events. It is not a simple direct camera color reader.
TrafficLightDetectMode
| Value | Intended behavior | Current-code note |
|---|---|---|
0 | Disabled | Detection state forced off |
1 | Detect stops only | Blocks automatic departure from a complete stop |
2 | Detect stop and go | May transition to departure on a green decision |
IMPORTANT
While decelerating, mode 1 still has a branch that can cancel the stop plan after a green decision. It cannot be interpreted as “never use any departure judgment.”
Detection is disabled or limited in high-speed driving mode (MyDrivingMode=4), above roughly 20 degrees of steering angle, when the model lacks stop-path confidence, during selected strong-deceleration conditions, or when a lead is ahead of the stop target.
TrafficStopDistanceAdjust
The stored value is divided by 100 and added to the stop-obstacle position in meters:
| Stored value | Adjustment | Direction |
|---|---|---|
-200 | -2.0 m | Stop earlier/farther from the line |
-150 | -1.5 m | Initial Params value |
0 | 0 m | Model position |
100 | +1.0 m | Stop later/closer to the line |
Near a complete stop, the current code uses a fixed -2.0 m instead of the user value, so the final position may not exactly match the setting.
There is one vehicle-relative exception. During an E2E stop with no active leadOne, a high-probability, low-speed camera-model vehicle must remain 0–3 m ahead of the planned stop endpoint for five frames (about 0.25 s). For that stop only, the planner uses a +2.0 m virtual-obstacle offset instead of the signal adjustment, allowing the MPC to preserve StopDistanceCarrot from the inferred vehicle position. It does not create an SCC/radar object or promote leadOne; if confirmation fails, the existing signal-stop and fixed -2.0 m behavior remain unchanged.
Adjust by 100 (1 m) at a time under comparable no-lead signal stops, because the automatic vehicle-relative correction can take priority when a stopped vehicle is present. If false signal detection is the problem, diagnose the mode/model decision instead of the distance offset.
Quick troubleshooting
| Symptom | Check first |
|---|---|
| Slowing starts too late for a camera | Event distance → lower DecelRate → raise CtrlEnd |
| Camera target is unexpected | Received limit, SafetyFactor, other lower candidates |
| No response to a changed road limit | Valid limit, auto-increase setting, adjust dependency |
| No speed-bump slowing | Mode 2+, event type, road category |
| Curve slowing on a straight road | Which of vision, route, or model selected the minimum |
| Slowing with turn mode 0 | Future-model speed, applied-model speed, separate ATC |
| Unwanted traffic-light stop/go | Detection mode, driving mode, model decision |
Automatic CAN diagnostic logs are generated only when currently received vehicle or radar state from the present onroad session reports an actual error. CAN timeouts from the previous drive's shutdown are not used, and capture occurs five seconds after detection to include the immediate aftermath. When investigating a speed or deceleration issue, upload the affected drive from Carrot Web even if no automatic diagnostic log was generated.
Code references
- Event/limit/bump/turn candidate selection:
openpilot/selfdrive/carrot/carrot_serv.py - Vision-curve speed:
openpilot/selfdrive/carrot/carrot_man.py - Future-model speed:
openpilot/selfdrive/controls/lib/desire_helper.py - Automatic road/model set speed:
openpilot/selfdrive/car/cruise.py - Traffic-stop state and adjustment:
openpilot/selfdrive/carrot/carrot_functions.py - Traffic-stop MPC:
openpilot/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py - Setting ranges/defaults:
openpilot/selfdrive/carrot_settings.json,openpilot/common/params_keys.h
Back to Understanding Settings
Source reference
Reference checked 2026-10-30 · carrot-wip · 10bf0a56.
docs/user/ko/speed-deceleration.md · openpilot/selfdrive/carrot_settings.json
The development branch continues to change. Check your device’s branch, commit and current settings together.