Skip to content

Filter, cluster, and track radar and lidar points

Compare an attributed RadarScenes frame with a synthetic lidar room scan, then retain errors and licence boundaries in the result.

Radio Remi: I want you to predict the result, inspect each intermediate value, and keep the final claim inside the evidence., your practice guide

Radio Remi: I want you to predict the result, inspect each intermediate value, and keep the final claim inside the evidence.
Predict the reading, then compare it with the measurement.

Python 3 in your browser (JupyterLite)

Python · no install

Tier 2 · Web · paste-in setup · No account

Version tested: Python 3.12.7 / Pyodide 0.27.6 in JupyterLite 0.6.4; Chromium 148.0.7778.96; captureSource playwright:jupyterlite. Date: 2026-09-10.

Open the notebook in your browser and run each Python cell; no install or account is needed.

Three ways to run: use JupyterLite here with no install; run main.py locally from the downloadable lab folder; or open the same notebook in Google Colab.

Open in your browser (new tab)

Steps

Screens captured against Python 3 in your browser (JupyterLite) Python 3.12.7 / Pyodide 0.27.6 in JupyterLite 0.6.4; Chromium 148.0.7778.96; captureSource playwright:jupyterlite on 2026-09-10; the tool may have moved on — the text steps are the contract.

  1. 1 Step 1

    Do
    In the JupyterLite notebook, run the Step 1 cell to inspect the two data contracts.
    You will see
    Input: execute notebook step 1 with the record’s unchanged fixture, seed, and parameters. Observed: radar: car frame; x/y m; RCS dBsm; compensated radial velocity m/s Observed: lidar: synthetic room frame; x/y m; unitless intensity Observed: RadarScenes licence=CC BY-NC-SA 4.0; lidar source=generated in notebook
    Why it matters
    Expected: STEP 1 complete from this deterministic notebook step. Interpretation: Coordinates are meaningless without a frame and unit. Action: Inspect the two data contracts. Boundary: this local fixture is not a live device, network, or site measurement.
    JupyterLite step 1 for Filter, cluster, and track radar and lidar points, showing the printed evidence for this step.
    Step 1 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  2. 2 Step 2

    Do
    In the JupyterLite notebook, run the Step 2 cell (run_step(2)) to load the RadarScenes sample.
    You will see
    Input: execute notebook step 2 with the record’s unchanged fixture, seed, and parameters. Observed: source=RadarScenes v1.0 sequence_158 first timestamp Observed: rows=96; sensor_id=4; timestamp_us=48716743544766 Observed: dynamic_labels=4; static_labels=92
    Why it matters
    Expected: STEP 2 complete from this deterministic notebook step. Interpretation: The lab includes a small derived sample from RadarScenes sequence 158. Action: Load the RadarScenes sample. Boundary: this local fixture is not a live device, network, or site measurement.
    JupyterLite step 2 for Filter, cluster, and track radar and lidar points, showing the printed evidence for this step.
    Step 2 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  3. 3 Step 3

    Do
    In the JupyterLite notebook, run the Step 3 cell (run_step(3)) to generate the synthetic lidar room.
    You will see
    Input: execute notebook step 3 with the record’s unchanged fixture, seed, and parameters. Observed: points=84; walls=56; circular object=28 Observed: frame=room; x/y metres; intensity is a fixture value Observed: No public lidar scan is represented.
    Why it matters
    Expected: STEP 3 complete from this deterministic notebook step. Interpretation: The lidar room scan is synthetic because no compatible small public scan was selected for this wave. Action: Generate the synthetic lidar room. Boundary: this local fixture is not a live device, network, or site measurement.
    JupyterLite step 3 for Filter, cluster, and track radar and lidar points, showing the printed evidence for this step.
    Step 3 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  4. 4 Step 4

    Do
    In the JupyterLite notebook, run the Step 4 cell (run_step(4)) to apply bounded filters.
    You will see
    Input: execute notebook step 4 with the record’s unchanged fixture, seed, and parameters. Observed: radar 96 18 78 Observed: lidar 84 56 28 Observed: Bounded filters
    Why it matters
    Expected: STEP 4 complete from this deterministic notebook step. Interpretation: Filtering removes only points that fail stated rules; clustering proposes objects; tracking links proposals over time with uncertainty. Action: Apply bounded filters. Boundary: this local fixture is not a live device, network, or site measurement.
    JupyterLite step 4 for Filter, cluster, and track radar and lidar points, showing the printed evidence for this step.
    Step 4 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  5. 5 Step 5

    Do
    In the JupyterLite notebook, run the Step 5 cell (run_step(5)) to cluster connected neighbours.
    You will see
    Input: execute notebook step 5 with the record’s unchanged fixture, seed, and parameters. Observed: radar 2.20 2 4 Observed: lidar 0.55 3 2 Observed: radar centroid=(1.54,2.84) n=2
    Why it matters
    Expected: STEP 5 complete from this deterministic notebook step. Interpretation: A connected-neighbour cluster joins points within a chosen distance and minimum count. Action: Cluster connected neighbours. Boundary: this local fixture is not a live device, network, or site measurement.
    JupyterLite step 5 for Filter, cluster, and track radar and lidar points, showing the printed evidence for this step.
    Step 5 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  6. 6 Step 6

    Do
    In the JupyterLite notebook, run the Step 6 cell (run_step(6)) to associate a moved cluster.
    You will see
    Input: execute notebook step 6 with the record’s unchanged fixture, seed, and parameters. Observed: prior_centroid=(1.54,2.84) Observed: new_centroid=(1.89,2.74) Observed: displacement=0.364 m; gate=1.0 m; association=MATCH
    Why it matters
    Expected: STEP 6 complete from this deterministic notebook step. Interpretation: A simple tracker predicts a cluster position, finds a compatible new cluster, and updates the track. Action: Associate a moved cluster. Boundary: this local fixture is not a live device, network, or site measurement.
    JupyterLite step 6 for Filter, cluster, and track radar and lidar points, showing the printed evidence for this step.
    Step 6 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  7. 7 Step 7

    Do
    In the JupyterLite notebook, run the Step 7 cell (run_step(7)) to write the result and licence card.
    You will see
    Input: execute notebook step 7 with the record’s unchanged fixture, seed, and parameters. Observed: radar accepted=18/96; clusters=4 Observed: synthetic lidar accepted=56/84; clusters=2 Observed: RadarScenes: Schumann et al., v1.0, doi:10.5281/zenodo.4559821
    Why it matters
    Expected: STEP 7 complete from this deterministic notebook step. Interpretation: Both files are for teaching the pipeline; neither validates a product or a new environment. Action: Write the result and licence card. Boundary: this local fixture is not a live device, network, or site measurement.
    JupyterLite step 7 for Filter, cluster, and track radar and lidar points, showing the printed evidence for this step.
    Step 7 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)

Chapter checks

These questions refer to the chapter’s examples. Use the return links to review their answers.

  1. What must accompany point coordinates before sensors can be compared?

    Return to the chapter’s knowledge check
  2. Why tune clustering on training scenes and score a held-out scene?

    Return to the chapter’s knowledge check

Caution

The supplied data and simulation verify the calculation path only. Reopen the prepared notebook if screens change, and validate any field claim with measured hardware and site evidence.

Return to Point Clouds from Radar and Lidar · Browse Labs