Research · May 2026 – present
LiDAR phenotyping pipelines
Research pipelines that turn field LiDAR scans into validated plant-trait data researchers can reproduce.
- Role
- Software Engineering Research Assistant, UW–Madison / USDA collaboration
- Status
- Ongoing research engineering
- Stack
- Python, Bash, Linux, FastAPI, pytest, Redis
- Source
- Research code is not public. This page stays at the level of detail on my resume.
- scans processed
- 1,950+
- about 1 TB across 50+ projects
- pipeline runtime
- 60–90 → 20–35 min
- before → after
- anomalous scans flagged
- 90–110
- checked against manual review
- pytest tests
- 360+
- configuration app
The problem
A field phenotyping platform drives LiDAR over crop plots and records encoder and IMU streams alongside it. Researchers need plant traits per plot and per genotype, not raw point clouds.
The engineering problem is trust: a pipeline that is slow, needs hand-edited YAML, or quietly mislabels a plot produces research nobody can rely on.
Architecture
From field scan to research delivery
Field scans combine LiDAR with encoder and IMU streams. The processing pipeline fuses them into 3D point clouds and extracts plant traits. Researchers set algorithm parameters through a FastAPI configuration app that validates them against a schema. Automated quality checks flag anomalous scans, and a validated, snapshotted plot-to-genotype map ties traits to genotypes for the ranking plots delivered to researchers.
- Field scans to Fusion pipeline
- Fusion pipeline to Trait extraction
- Trait extraction to Research delivery
- Config app to Fusion pipeline (parameters)
- Trait extraction to Quality checks (check)
- Plot-to-genotype map to Research delivery (join)
- Map snapshots are byte-identical, so a rerun months later uses exactly the same plot assignments.
- Redis caching avoids recomputing intermediate results that have not changed.
- The configuration app enforces locked fields and previews validation results before a run starts.
Decisions and trade-offs
A configuration app instead of hand-edited YAML
Researchers change parameters through a FastAPI app that introspects the schema and previews validation.
Trade-off: More code to maintain than a config file, and far fewer broken runs from a typo.
Quality checks measured like a classifier
The anomaly checks were evaluated against manual review with precision and recall.
Trade-off: It needs a manually reviewed sample; in return the checks' reliability is measured, not assumed.
How it is tested
- 360+ pytest tests cover the configuration app.
- Anomaly flags were validated against manual review using precision and recall.
- Pipeline documentation was merged into the main branch through a GitHub pull request.
Outcomes
- Runtime fell from 60–90 minutes to 20–35 minutes.
- Researchers at UW and external collaborators receive auto-generated genotype-ranking plots.
Scope: Published research findings belong to the research group; this page describes the engineering only.