sampling_locations.svelte + SampleField.svelte — Sampling Locations
The main data collection interface for the Science task. Manages a list of Sample objects stored in the samples Svelte store.
Sample card
Each sample in the list is rendered as a card with an editable location name field and a set of SampleField sub-components. The location name field updates location_name_check automatically as the operator types.
SampleField.svelte
A reusable row sub-component used inside each sample card. Renders a checkbox (bound to a checked prop), a label, the current value, and a + button that opens the relevant modal. Used for: Coordinates, Size, Weight, Image Before, Image After.
Modals
Coordinates — a single button that calls invoke("request_coordinates"), receives a [lat, lon] tuple from the rover, formats it as a string, and saves it to the sample.
Measurement — shows two camera feeds (arm + front) in measure mode. The operator clicks two corresponding points on the two feeds to trigger a stereo measurement via invoke("request_measurement"). The returned value is saved to the sample.
Weight — a single button that calls invoke("request_weight") and saves the returned gram value to the sample.
Image Before / Image After — shows all three camera feeds. Clicking any feed calls invoke("save_snapshot") which captures a JPEG frame from that stream and saves it to the images/ directory. The filename is {sample.label}_{before|after}.
Pick up Rock
This section is work in progress
A separate overlay accessible from a button at the bottom of the component. Shows all three camera feeds in pick mode. The pick() function is currently a stub for the rover arm pick-up command.