Project Showcase

Zile Liao — robotics software, Freiburg.

Source for the algorithms is not public; recordings and analyses are. Interviewers: ask for the internals repo.

Projects below are from a competition robot I develop.

The robot code is not open source: the showcase repository holds short, annotated excerpts of my own work, simplified to show how each piece works.

Vision: AprilTag localizer + field EKF

Replay of a recorded match

Open EKF in viewer Open localizer in viewer
Clip: 20 s of a recorded match, the localizer’s debug image beside the estimated field pose and each tag fix.Open the MP4 file · Download the EKF replay (.mcap, 5.7 MB) · Download the localizer replay (.mcap, 4.5 MB)

The field EKF fuses tag fixes from the localizer with the camera’s visual-inertial odometry (VIO).

The EKF predicts from the VIO odometry at about 400 Hz and corrects with each tag fix. Each fix is weighted by the covariance the localizer computed.

I wrote the EKF in Python first, then ported it to C++ to cut CPU load.

Details: state-estimation, perception-sqpnp

Analysis: python state-estimation/replay/analyze_field_ekf.py → 130 tag updates over 20 s at 400 Hz; logged innovation median 1.0 cm. Post-fit residual median 0.3 cm, 7 of 130 above the 95 % line (not a consistency test: the residual is pulled toward the fix).

Analysis: python perception-sqpnp/replay/analyze_localizer.py → 183 frames, 110 pooled multi-tag solves; chosen-tag reprojection error median 0.035 px as logged; σx from the logged covariance median 7.5 mm.

Point cloud over the field

Open in viewer
Clip: the camera driver’s SLAM point cloud over the field layout, with the localizer’s tag fixes, from a recorded shop session.Open the MP4 file · Download the point-cloud replay (.mcap, 25.9 MB)

The AprilTag localizer turns a camera image into the camera’s pose on the field, plus a 6x6 covariance.

If the geometry is not observable, the pose is withheld instead of inventing a covariance.

The point cloud is the camera driver’s own output; the localizer started from a teammate’s port, and its pooled multi-tag solve and covariance are mine.

Details: perception-sqpnp

The viewer buttons open the clip with its panel layout in Lichtblick, an open-source build of Foxglove Studio; no sign-in.

Shoot on the move

Clip: the competition robot shooting while it drives.Open the MP4 file

A turret that keeps aiming while the robot drives, with shot compensation for the robot’s velocity.

A ball fired from a moving robot keeps the robot’s velocity. The compensation looks ahead and splits the velocity into the part toward the target and the part across it.

I wrote the turret’s aiming cascade and its shot compensation, with contributions from teammates.

Details: control/turret-2026

Analysis: python control/turret-2026/replay/analyze_turret.py → Compensation was off in this clip. Tracking RMS 0.90° over 30 s of TRACKING while driving up to 3.0 m/s.

Whole-body control

Whole-body arm control

Open in viewer
Clip: the robot driving to its staging pose, then the arm reaching its goal.Open the MP4 file · Download the replay (.mcap, 1.2 MB)

Replay in the viewer

Clip: the 10 s whole-body cycle replayed in the browser viewer: joint references against measurements, the phase, the arm and the robot on the field.Open the MP4 file

A solver on the coprocessor decides how the whole robot moves.

A phase state machine runs DRIVE, APPROACH, TASK and RETRACT. On entering TASK, the goal is converted into the solver’s frame and frozen, so it stays at one field point.

The goal freeze and the QP moving the chassis were simulation-only.

Details: control/wholebody-2026

Reaching a field-fixed goal from AprilTag localization

Clip: the arm following an AprilTag held at the end of a stick.Open the MP4 file

AprilTag fixes tell the robot where it stands, so the arm’s goal can be fixed on the field.

The arm’s goals are poses fixed on the field, while the whole-body solver works in the robot’s own frame. Before TASK, APPROACH requires the field pose to be fresh.

This demo mode is not excerpted in the showcase repository.

Details: control/wholebody-2026, perception-sqpnp, state-estimation

Auto-tuning

Clip: the auto-tuning routine moving the robot’s arm.Open the MP4 file

A PID tuning bench for an arm joint, steered by a coding agent inside hard limits.

The agent decides which gain to sweep next, over what range, and when to stop. The deterministic sweep stays in code that enforces the limits.

I wrote a ROS 2 node that runs the experiments, and the procedure a coding agent (Claude Code) follows.

Details: llm-tuning-agent