The very first week I started university, I joined this lab. And I stayed until the very last day I left. For five years, this was where most of my time went — including entire summers. Looking back, it shaped how I think about software more than anything else I did before entering industry.
What MRL was
The Mechatronics Research Laboratory (MRL) is a research organization run under QIAU University, made up of several labs each focused on a different area of robotics. The lab I worked in — NAO Biped Lab — was named after the humanoid robot we used: the Aldebaran NAO. Our goal was to compete in the RoboCup World Championship each year, in the humanoid soccer league. The long-term vision of RoboCup, if you haven't heard of it, is ambitious to the point of being absurd: by 2050, a team of fully autonomous robots should be able to beat the human World Cup winner. Nobody really knows how, exactly. But the goal forces you to solve real, hard problems every year.
The vision work
For most of my time there, I was on the Vision team. The job was to take image input from the robot's camera and produce a reliable world model — where is the ball, where are the other robots, where is the robot itself on the field. All of this had to run in C++, in real time, on hardware with limited processing power. No GPUs, no cloud inference, no shortcuts. You had to be clever about it.
One trick we used: instead of processing the entire frame, we calculated the horizon from the robot's perspective and sampled more densely near it. The bottom of the image — close to the robot's feet — is mostly irrelevant during play, so we sampled it sparsely and spent our compute budget where it mattered. We used YCrCb color space rather than RGB, because the Cr and Cb channels give much better green separation, which is useful when the entire playing field is green. Self-localization used a Monte Carlo Particle Filter, and inter-robot communication let the team maintain a shared belief about the state of the game.
Becoming team leader
After four years, I became team leader for the 2016 season. The transition from contributor to team manager was something I had to figure out as I went. The lab had no agile practices — it was a university environment and people worked how they worked. I adapted Scrum and XP principles to coordinate between the three sub-teams (Vision, Behavior, and Locomotion/Kinematics), and it made a visible difference. Coordination improved, duplicated work decreased, and at some point other MRL labs started doing the same thing.
I also revised how we recruited. The old process relied too heavily on interviewer instinct, which meant we were inconsistent. We introduced a more structured approach to evaluate candidates across dimensions that actually mattered for the role.
RoboCup is a strange experience. You spend a year building something, you fly to a venue somewhere in the world, and then for a few days you find out exactly where your assumptions were wrong. The things that broke were never the things you expected. That's a lesson that applies well beyond robotics.