Where should we
look next?
Start with the angles you have. Compare the viewpoints you could add. Let the geometry show which observation is expected to help.
2 supplied tracks · 22 angular samples.
No target truth is sent to the planner.
What is drawn — and what is not
Coordinates use equal kilometre scales in a local Earth-fixed frame. The spherical reference surface is not a terrain map. Sensor models are enlarged. Sight lines use the supplied angles; their drawn lengths do not measure range. Replay advances recorded sample indices without generating or aligning new observations.
Same horizon.
Different viewpoints.
Explicit model: independent new angular errors, exact stations and clocks, constant velocity in spherical ECEF. Visibility is geometric only.
Original angles and complete request
This synthetic fixture is supplied explicitly. Candidate series contain times and expected precision, never invented measured angles.
{
"observations": {
"observers": [
{
"lat": 48.85,
"lon": 2.35,
"elevation_m": 35,
"clock_offset_s": 0,
"sigma_az_deg": 0.2,
"sigma_el_deg": 0.2,
"samples": [
{
"t_s": 0,
"azimuth_deg": 101.991260935,
"elevation_deg": 14.447682585
},
{
"t_s": 10,
"azimuth_deg": 93.467590277,
"elevation_deg": 14.732612639
},
{
"t_s": 20,
"azimuth_deg": 84.786897815,
"elevation_deg": 14.70245413
},
{
"t_s": 30,
"azimuth_deg": 76.336410848,
"elevation_deg": 14.362974947
},
{
"t_s": 40,
"azimuth_deg": 68.446289854,
"elevation_deg": 13.773863939
},
{
"t_s": 50,
"azimuth_deg": 61.324990456,
"elevation_deg": 13.022637731
},
{
"t_s": 60,
"azimuth_deg": 55.051414611,
"elevation_deg": 12.194843666
},
{
"t_s": 70,
"azimuth_deg": 49.607028444,
"elevation_deg": 11.356342386
},
{
"t_s": 80,
"azimuth_deg": 44.917906873,
"elevation_deg": 10.549458666
},
{
"t_s": 90,
"azimuth_deg": 40.888140057,
"elevation_deg": 9.79700007
},
{
"t_s": 100,
"azimuth_deg": 37.420214884,
"elevation_deg": 9.108372913
}
]
},
{
"lat": 48.85,
"lon": 2.45,
"elevation_m": 35,
"clock_offset_s": 0,
"sigma_az_deg": 0.2,
"sigma_el_deg": 0.2,
"samples": [
{
"t_s": 0,
"azimuth_deg": 258.008739065,
"elevation_deg": 14.447682585
},
{
"t_s": 10,
"azimuth_deg": 266.532409723,
"elevation_deg": 14.732612639
},
{
"t_s": 20,
"azimuth_deg": 275.213102185,
"elevation_deg": 14.70245413
},
{
"t_s": 30,
"azimuth_deg": 283.663589152,
"elevation_deg": 14.362974947
},
{
"t_s": 40,
"azimuth_deg": 291.553710146,
"elevation_deg": 13.773863939
},
{
"t_s": 50,
"azimuth_deg": 298.675009544,
"elevation_deg": 13.022637731
},
{
"t_s": 60,
"azimuth_deg": 304.948585389,
"elevation_deg": 12.194843666
},
{
"t_s": 70,
"azimuth_deg": 310.392971556,
"elevation_deg": 11.356342386
},
{
"t_s": 80,
"azimuth_deg": 315.082093127,
"elevation_deg": 10.549458666
},
{
"t_s": 90,
"azimuth_deg": 319.111859943,
"elevation_deg": 9.79700007
},
{
"t_s": 100,
"azimuth_deg": 322.579785116,
"elevation_deg": 9.108372913
}
]
}
]
},
"candidates": [
{
"id": "extend-west",
"station": {
"id": "observer_1",
"lat": 48.85,
"lon": 2.35,
"elevation_m": 35
},
"sample_times_s": [
110,
120,
130
],
"sigma_az_deg": 0.2,
"sigma_el_deg": 0.2,
"cost_units": 1
},
{
"id": "new-north",
"station": {
"id": "north",
"lat": 48.92,
"lon": 2.4,
"elevation_m": 35
},
"sample_times_s": [
110,
120,
130
],
"sigma_az_deg": 0.2,
"sigma_el_deg": 0.2,
"cost_units": 2
},
{
"id": "over-budget",
"station": {
"id": "east",
"lat": 48.85,
"lon": 2.5,
"elevation_m": 35
},
"sample_times_s": [
110,
120,
130
],
"sigma_az_deg": 0.2,
"sigma_el_deg": 0.2,
"cost_units": 6
}
],
"objective": {
"horizon_s": 140
},
"constraints": {
"max_cost_units": 3,
"min_elevation_deg": -2
},
"assumptions": {
"independent_new_errors": true,
"exact_stations_and_clocks": true,
"constant_velocity": true
}
}Now add observations.
Does the forecast hold up?
The prediction did not contain new angles. This next call adds three fixed synthetic readings and fits all supplied observations again. They were generated independently, before any candidate was evaluated.
This demonstration does not activate a real sensor. The new readings are explicitly marked synthetic; the server does not authenticate their origin.
A prediction earns a comparison.
Keep before, predicted and refitted uncertainty separate. New data can help, disagree, or make the estimate less certain.
What if one track
is slightly wrong?
Apply a fixed set of hypothetical angle and clock changes to the east observer, then fit each case again. A counterexample challenges your stated stability limit; it does not explain the cause of a real observation.
Six explicit cases: unchanged control, ±azimuth bias, +elevation bias and ±clock correction. Same original tracks, same motion model, evaluation at 140 s. No new evidence is acquired.
A claim needs a boundary.
Declare a position-shift limit, run the six cases, and inspect the returned counterexamples.
What would make
this plan work?
Keep the essential work. Explore an extra few minutes or one optional task. Check the smallest supported change against a fresh simulation.
One extra minute costs 1 unit. Removing the preview costs 15 units of lost value. Building and checking are always required.
Bar lengths show nominal minutes. The experiment applies the declared variation independently to each retained task.
Search, then check again.
All permitted changes are declared before sampling. One finalist receives a separately seeded confirmation.
The model stays visible.
- Conditional local linear forecast under a spherical constant-velocity model.
- The original observations are fitted once; candidates add predicted information without invented angles.
- Independent errors, exact clocks and station positions are explicit assumptions.
- Terrain, weather, access and actual sensor availability are not established.