self-test checks and unit tests — logic and mocked tests, not vehicle runs —
CI
45 / 45
simulated catalog cases met the criteria; the weather matrix still fails one case —
reports
60
unseen drivers in the drowsiness evaluation —
result
0.87
eye-state balanced accuracy on 13 unseen people (parked car) —
report
Selected work
CARLA ADAS — active safety and a simulated L3-style fallback
2026
An end-to-end driving stack in the CARLA simulator: multi-sensor perception, a
geometry-first emergency braking corridor swept through LiDAR rather than gated on a detector, a committed
safety arbiter, and a reinforcement-learned cruise controller that only proposes a speed, clamped under a
safety cap. Simulation only — nothing here has run on a vehicle.
The stack driving itself in Town02. Left: the swept braking
corridor and tracked objects. Right: live speed, the arbiter state, the L3 mode and
time-to-collision — here dropping into EMERGENCY_BRAKE at 0.2 s TTC.
Scenario suite
45 / 45
15 scenarios × 3 seeds, Town02, CPU inference, one run per case (2026-09-27, on the
fixed harness). Smallest surface-to-surface clearance 0.88 m; no collision recorded.
Weather matrix
29 / 30
Core scenarios × 5 weather profiles. The gate failed: the pedestrian-crossing
case reacted in 1.225 s in storm against a 1.0 s budget.
Offline tests
210 · 410
Self-test checks and unit tests (307 of them in CI), plus lint and static typing.
They test logic with fixed inputs; they are not a coverage figure and not vehicle runs.
The history behind these numbers: an early run also reported 45/45, but with the
reaction-delay criterion effectively switched off — the harness had no hazard origin to time from, so it
could not fail. Once that was fixed, the 2026-09-19 run gave 43/45 and a failed gate. A later review of my
own harness found more places where a missing or invalid measurement could count as a pass; after fixing
them, the 2026-09-27 re-run gave the 45/45 above. That does not mean the late reaction is fixed: the same
pedestrian case took between 0.5 and 1.225 s across runs and still fails in storm, and one run per case
cannot separate a fix from luck. It stays an open finding.
A decision I made: braking triggers on a LiDAR/radar corridor check, not on detector
confidence, so with the same geometry, path and sensor data a missed bounding box does not by itself remove a
brake request. It still depends on valid range data and on the selected lane, and on a sensing envelope of
about 30 m ahead. The learned cruise controller only proposes a speed under that envelope.
geometry-first AEBsimulated ODD → TOR → MRMDQN under a safety capYOLO · LiDAR · radarfail-closed teardown
A driver-state layer that sits above the ADAS and reads the person as well as the road:
eyelid closure over a rolling window, the longest unbroken closure, and jaw opening — then explains every
intervention in one sentence. Runs locally in Python; it has not been measured on embedded hardware.
Every predictor, scored on drivers it never saw, against the
same predictor scored on the rows it was fitted to. Gradient boosting reaches 1.00 in
sample and 0.51 held out — the dashed span is everything that memorising bought it.
The honest range for this problem is the left cluster.
60 unseen drivers
0.53
Held-out macro-F1, recurrent model, subject-disjoint 5-fold. The hand-written rule
scores 0.51 on the same split.
Overfit gap
+0.20
In-sample minus held-out. A gradient-boosted baseline scores 1.00 in sample and
0.51 held out — a gap of +0.49.
Cross-dataset control
0.99 → 0.49
An image classifier trained with a random frame split, then tested on a different
dataset. It lands on chance.
Read the first column as the real result: on drivers the model has never seen, this problem
is hard, and the honest score is near the low end. The control experiment in the third column is the
reason the numbers are reported this way — the same pipeline evaluated carelessly would have produced 99%,
and that 99% would have meant nothing.
A decision I made: validation folds are split by driver, not by frame. Splitting by
frame puts the same person on both sides and turns a memorised face into an apparent result.
Eye-state stage on strangers: on 13 people from the DMD dataset, leave-one-person-out,
the eye open/closing/closed/opening classifier reaches 0.87 balanced accuracy, and the PERCLOS it produces is
within 0.023 of the annotated value on average. Every recording is a parked car, and DMD has no
drowsiness label, so this says nothing yet about drowsiness accuracy on the road.
The rule engine's demo on 6 labelled drives (3,600 frames at 20 fps) flags
2,083 of 2,100 impaired frames and 147 of 1,500 clear frames. Those thresholds were not tuned on held-out
drivers, and neighbouring frames are not independent, so these are demo figures for six people — not a
population rate, and not a measure of how often a driver would get a false alert per hour.
Wheel-mounted electrostatic capture for tyre and road-wear particles, with an ESP32 → MQTT → Supabase
pipeline and a Flutter app for fleet operators. My part: the ESP32 code that reads the sensors.
Neural Voice Console
Speech-to-text and translation running fully offline, so no audio leaves the device: Whisper with a
LoRA adapter and NLLB for translation. No accuracy figure is claimed here.
What I work on
01
Autonomous driving & ADAS
Perception, sensor fusion and committed active-safety arbitration, validated in simulation.
02
Computer vision & perception
Detection, tracking and lane estimation — resolved into metric range, not just boxes.
03
Embedded & IoT
ESP32 sensor reading inside a telemetry pipeline (MQTT, time-series backend). Growing this area next.
04
Applied machine learning
On-device models, and the evaluation discipline that tells you whether they actually work.
Experience
Nov 2025 – May 2026
Logistics & Finance Manager
Career Fair 2026 — Vietnamese-German University
Ran logistics and finance for a 1,000+ student event with 30+ companies including SAP,
MiTek and Wanek — a budget over 300 million ₫ and a team of 8, across seven months.
Oct – Dec 2025
Student Volunteer
VGU Math Open Day · Germany–Vietnam Green Science Conference
Guided 200+ school students through hands-on mathematics, and supported a
bilateral international science conference.
2019 – 2022
Class Representative & Competitor
Dinh Thien Ly High School
Class representative for three years; competed in city-level academic olympiads,
the 30/4 Olympiad and chess.
Background
Recognition
Top 30 — Asian Hackathon for Green Future2026
Top 20 — Digiport Logistics Hackathon2025
Education
2025 – 2029
Vietnamese-German University
B.Sc. Smart Mobility Engineering — dual degree with HAW Hamburg, full tuition
scholarship. Currently in the first year.
Contact
Looking for a 6-month full-time internship in Vietnam — ADAS, embedded software or
computer vision. Start date flexible; happy to align with your team's schedule.
Happy to walk through any number on this page and show you where it came from,
including the ones that got worse.