Polishing, PRs, and a Lot of Code Review
This week felt different from the last few. Not a lot of new things being built — more like going back over everything that exists and making it actually good. Testing, tuning, and getting the work review-ready across all four repositories.
Making the chase actually look like a chase
The algorithm already worked, but “works” and “looks good in a demo” are two different things. I spent time tuning the guidance so the cat closes in smoothly instead of overshooting and wobbling around the mouse. Small adjustments, but the exercise now reads like a real excersice.
Cameras: the cat only
Reworked the camera setup so the student only gets access to the cat’s own cameras — frontal and ventral views, showing up on the GUI. There’s deliberately no way to peek through the mouse’s cameras. The cat has to work with what it can see and where the mouse actually is — not the mouse’s point of view. Felt like the right call for an exercise.
Reference solution
Updated the reference solution to match the current ROS 2 version of the exercise. The old one was written for the ROS 1 vision pipeline — it referenced APIs and a camera setup that no longer exist. The new one uses the predictive-intercept guidance law and displays the cat’s cameras exactly like a student’s solution would, so it’s actually usable as a reference.
The PR round
The biggest chunk of the week was pull requests and code review. The work spans four repositories — RoboticsApplicationManager, RoboticsAcademy, RoboticsInfrastructure, and RoboticsAcademy-solutions — so I split the changes into focused PRs for each, one concern at a time.
Then came the review. Javier left a lot of detailed feedback, and I worked through every comment:
- Reverting exercise-specific logic out of the generic manager — the manager should stay reusable, exercise quirks belong in the exercise layer
- Fixing how robot configs and launchers are tracked — a world without a robot sends a dummy config that has no launcher, and that case now gets handled cleanly instead of silently
- Moving entity-uniquifying logic into the right layer, applied only when names actually clash
- A lot of smaller cleanups — removing defensive code that should just fail loudly, inlining tiny functions that didn’t earn their own abstraction.
Honestly this review round taught me more than I expected. The push toward keeping the core generic and letting things fail loudly instead of silently patching over them — that’s the kind of feedback that actually changes how you write code going forward, not just for this PR.
Enjoy Reading This Article?
Here are some more articles you might like to read next: