Contents — find the section you need
Change parameters and verify
Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.
Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.
Compare regulation with adaptive lookahead alone
Run Tight curve · regulated and save the result as A. Then run Adaptive lookahead only. Path, initial pose, vehicle and desired speed stay the same while curvature and approach slowdown are disabled. Read actual speed and endpoint passage time alongside cross-track error: a slower run should not be ranked by error alone.
Lookahead and speed regulation have separate control groups. Fixed lookahead + regulation disables only adaptation. No curvature regulation and No approach slowdown isolate each speed rule. Higher regulation floor demonstrates how a floor can raise a reduced candidate. Presets restore all conditions, so check the A/B parameter differences.
Lookahead selects steering; regulation selects speed
With adaptation on, Ld=clamp(vT,Lmin,Lmax), using current model speed v. With it off, Ld is fixed. PP/APP target geometry is reused: κ=2yb/(xb²+yb²) for target (xb,yb) in the vehicle frame; steering δ=atan(Lκ). If no circle intersection exists, advance Ld along the projected path and clamp to the endpoint, always using actual target distance. Behind or coincident targets before completion end the run with a reason.
Speed is computed in this order:
- Curvature regulation multiplies desired speed by min(1,R/Rmin), where R=1/|κ|. Zero curvature leaves desired speed unchanged.
- Raise that candidate to the regulation speed floor. This floor can weaken the reduction; it is not a safety bound.
- Once remaining path length is strictly below approach distance D, scale by Euclidean endpoint distance/D. Apply the approach floor, but never raise speed above its pre-approach value.
- Clamp to [0, desired speed]. The common servo a=2(request−actual speed) and plant acceleration bounds determine actual speed.
For desired=4 m/s, κ=0.25 /m and Rmin=8 m, the curvature candidate is 2 m/s. A 0.25 m/s regulation floor leaves it unchanged. With remaining length=1.5 m, endpoint distance=1.5 m and D=3 m, approach gives 1 m/s above a 0.1 m/s approach floor. At remaining length exactly 3 m, approach scaling has not begun.
Inspect the speed stages during playback
Play, pause, step or scrub. The selected-time display separates desired → curvature candidate → floor → final request from actual speed. On the speed plot, gray dotted is desired, green is regulated request and blue/orange is actual; A is dashed and B solid. Path, vehicle pose, lookahead circle and target accompany error, steering and lookahead plots. The numerical table and JSON are generated from the simulation data.
The three active-duration metrics sum interval dt independently and can overlap. Time curvature candidate is below desired includes periods where the floor overrides that candidate; it is not the duration of actual vehicle slowdown.
Reference version and model differences
The scalar speed rules follow pinned Nav2 Jazzy commit f4108e5b1c2bce804a1aa0c7be6673a8eb4a1501. Their arithmetic/order is checked against the C++ reference, but this is not a Nav2 execution result. Duskcoil uses a shared rear-axle model and global nearest-path projection: remaining length is path length minus projected arclength. Nav2 receives a transformed/pruned local path, so its inputs can differ. Regulation uses requested pursuit curvature before actuator limits.
The common model uses 0.05 s intervals for at most 30 s. Limits are 8 m/s speed, ±2 m/s² acceleration, ±0.6 rad steering and 0.8 rad/s steering change. Motion is integrated on each held-curvature arc. Actual speed does not instantly reach the request. There is no inertia, tyre slip, obstacle/costmap model, collision prediction, reversing, rotate-to-heading or separate curvature lookahead. This is not a hardware-performance or safety evaluation.
Completion is sampled endpoint passage: remaining arclength and endpoint distance both ≤0.25 m, heading within 0.15 rad of the final tangent. It does not guarantee stopping; positive approach-floor speed does not mean parking. Path distance over 10 m ends the run as off-path; 30 s is the time limit. Incomplete passage time is “—”. CTE and heading RMS use trapezoidal integration of squared samples over elapsed time. Avoid ranking partial runs or differing durations by error alone.
Parameter names depend on the release
| Browser meaning | Jazzy | Rolling, checked 2026-09-21 |
|---|---|---|
| Desired speed | desired_linear_vel | max_linear_vel |
| Velocity-scaled lookahead | use_velocity_scaled_lookahead_dist | same |
| Lookahead time | lookahead_time | same |
| Curvature regulation | use_regulated_linear_velocity_scaling | same |
| Turn radius threshold | regulated_linear_scaling_min_radius | same |
| Regulation floor | regulated_linear_scaling_min_speed | same |
| Approach distance / floor | approach_velocity_scaling_dist / min_approach_linear_velocity | same |
The approach on/off switch is an educational ablation, not a Jazzy ROS parameter. Rolling's dynamic-window features are not implemented here. Lab defaults are educational values, not recommended Nav2 configuration.
Examples generated from the same code
Native Python results below use the default radius-5 m curve, initial and desired speed 4 m/s, lateral offset 1 m and wheelbase 2.5 m.
| Setting | Status | Elapsed [s] | CTE RMS [m] |
|---|---|---|---|
| regulated | completed | 4.10 | 0.37348 |
| adaptive only | completed | 1.80 | 0.52087 |
| no approach | completed | 3.00 | 0.43649 |
References and related Labs
- Pinned Jazzy speed functions
- Jazzy controller and constraint order
- Jazzy parameter guide
- Rolling parameter guide
- APP Lab / PP Lab
Browser execution needs no local Python installation. Source download is optional. Source and model notes.
Comments
Please log in to post a comment
No comments yet.