In the earlier parts of this series, I wrote about how I entered robotics, began teaching at the Robotics Club of BRAC University, and gradually became known among younger students. In The Fear of Losing, I also wrote about why repeated failures in local robotics competitions eventually made me afraid of entering them.

This story happened much later, near the end of 2018. I was close to finishing my graduation at BRAC University and had already travelled to Singapore for the Singapore Autonomous Underwater Vehicle Challenge, usually called SAUVC, with our underwater robotics team.

By then, robotics was no longer something I was trying to understand from the outside. I had spent years teaching workshops, building projects, helping juniors, and working with teams. But inside Bangladesh, I had still never become a champion in a robotics competition.

One more Basics of Robotics workshop

At ROBU, our regular beginner workshop was called Basics of Robotics. We conducted it both at BRAC University’s Mohakhali campus and during the Residential Semester, usually called RS. The workshop introduced students to electronics, Arduino, sensors, motors, and the basic ideas behind building a robot.

When a line-follower competition was announced at Dhaka University of Engineering and Technology, usually called DUET, several juniors asked whether we would arrange another workshop focused on that competition. I rarely said no to a workshop.

When I say “I,” I do not mean that I worked alone. By then, Sakib, Arko, and I had become a team working on larger robotics projects together. Hirok and Narjis had already graduated and entered the industry, so the structure around us had changed.

We also had a close group of juniors, including Adil, Shemanto, Elham, Anik, and Fahim. Some were working with us on BRACU Duburi and other projects. Many others had learned robotics through our workshops.

They did not only want us to teach them how to prepare for DUET. They wanted Sakib and me to enter the competition with them.

We were hesitant. We had attended enough local competitions to know that robots could fail for reasons that made no sense until after the event. A loose connection, a weak battery, a small change in track height, or one badly timed turn could destroy weeks of preparation.

Then Sakib said we should go. We would give this one our best effort. We should not finish university without becoming champions in at least one local robotics competition.

That was difficult to argue with. Arko did not join the competition. He did not enjoy local competitions much, but he was interested in joining the party afterward.

Two teams, one goal

By this point, Sakib and I had become good at different parts of robotics. I was strongest in software and control algorithms. Sakib was extremely good at electronics, hardware, and PCB design. He was already designing boards at a level far beyond the improvised circuits we had used in our earlier competitions.

We decided to enter as two main teams. I would lead one, and Sakib would lead the other. Several other BRAC University teams would also join after attending the workshop.

Our goal was not modest. We wanted first and second place.

Sakib started designing the PCB and physical structure. I started working on the software.

Years earlier, I had used PID control without properly understanding it. I changed values repeatedly and hoped the robot would stop behaving badly. This time was different. I understood what the controller was doing, how each value affected movement, and how to tune it for a specific robot.

PID was very good at keeping the robot centred on a line. But a competition track was not always one continuous path. It could contain sharp angles, crossings, T-junctions, and sections where the robot had to choose a direction. Some competitions also reversed the colours, changing from a dark line on a light background to a light line on a dark background.

PID could follow the line. It could not decide where to go.

Memorizing the track

For the robot, every sharp angle, crossing, or T-junction was simply a decision point. It would recognize that it had reached one and effectively say: hold on, I need to choose a direction now.

The track-memorizing algorithm kept count of those decision points. Once the organizers revealed the track, we only needed to inspect it and write down the directions in order. We did not hard-code separate logic for every angle or intersection.

The input looked something like [1, 2, 3, 1, 2, 2]. One value could mean turn right, another could mean continue straight, and another could mean turn left. The exact numbers were less important than their order.

When the robot reached the first decision point, it read the first value. At the second point, it read the second value, and continued through the list until it completed the track.

This was also the fastest part of our final preparation. Once we had identified the intersections and entered their directions, the core software did not need to change. PID handled movement between decision points. The track-memory algorithm handled the route.

The same system handled colour changes in the track. As long as the robot detected each decision point correctly and our direction list matched the route, it continued without losing its place.

While writing this post, I searched for the original code because I wanted to share it. I could not find it.

At that time, I did not understand Git particularly well. I often used repositories like online storage and uploaded complete versions of projects without maintaining a useful history. So no, I was not a prodigy who understood every modern tool. I was an average engineering student who spent extra time on the parts of robotics I enjoyed.

Building two different robots

Sakib designed the robots to sit very low, almost like small sports cars. A lower centre of gravity helped them remain stable while turning. We also removed as much unnecessary weight as possible.

Even the battery was chosen carefully. It only needed enough capacity for a few competition runs. Carrying a larger battery would have added weight without giving us any real advantage.

We built two versions. One was longer, with more distance between the front sensors and rear wheels. This gave the controller more time to react before the wheels reached a turn. The other was shorter and could change direction more quickly.

Both were good enough that either could beat the other on the right track. That was intentional. We did not want the entire competition to depend on one robot behaving perfectly.

Two versions of Team LazyBot's line-follower robot side by side, 2018.
The two versions of Team LazyBot's line-follower robot.

The motors and most of the other parts came from the local market. We were still using geared DC motors, not the high-speed brushless systems seen in some international line-follower competitions. Our robots were not built to compete with the fastest machines in the world. They were built to be extremely good at the type of local robotics competition we were entering at DUET.

Arriving at DUET

On competition day, the BRAC University teams arrived together at DUET. Everyone was excited, but Sakib and I also felt a different kind of pressure. The juniors were watching us. They had attended our workshops, worked with us on projects, and believed our teams would win.

All the teams were testing their robots on the practice track when a member of the organizing committee approached us and said Sakib’s team and mine could not participate.

The rules required teams to build their own robots. Standard parts such as line sensors were allowed, but aftermarket control boards were not. Our PCB looked too polished, so the organizer assumed we had bought it.

We laughed and showed him the board more carefully. It had been designed by Sakib and carried the ROBU and RGB logos.

Our competition teams were called LazyBot 1 and LazyBot 2. Our wider team name was RGB, connected to Robogears BD, Hirok’s robotics-components business.

Once the organizer understood that the board was our own work, he laughed too and allowed us to continue. For Sakib, that misunderstanding was probably one of the best compliments he could receive. His student-built PCB looked like a commercial product.

The qualifying round

Sakib’s robot went first. Even though we had built two strong robots, we had learned never to trust robots completely. A machine that worked perfectly for hours could suddenly fail during the one run that mattered.

We ran both robots at roughly half their maximum speed. They could move much faster, but speed created momentum. On a sharp turn, the robot could overshoot the line and travel too far to recover.

That happened during one of Sakib’s early runs. The robot reached a sharp section, moved beyond the point where it should have turned, and went in the wrong direction. After a few attempts, it completed the track successfully, but only LazyBot 2 qualified for the final.

Then it was my turn with the longer robot. Because of the greater distance between the sensors and wheels, the controller had more time to prepare for each turn. Even at a higher speed, it remained stable.

The run felt almost effortless. The robot moved through the track smoothly and completed it with the lowest recorded time. The next team that successfully finished needed roughly twice as long, and our robot was still running at only around half of what it could do.

That was only the qualifying round. The real pressure came later.

Three minutes to understand the final track

The final round began around four hours later, on a stage in front of a large audience. The organizers still had not revealed the track.

That created pressure, but not because we needed to rewrite the algorithm. Our software was already ready. We only needed to inspect the track, count every decision point, and prepare the direction list. The coding part took very little time.

The dangerous part was human error. If we missed one intersection, counted the same point twice, or entered one wrong direction, every instruction after it would become misaligned. The robot might turn correctly several times and then suddenly follow the wrong path.

When the organizers finally revealed the track, the entire team began checking it. The same juniors who had pushed us to compete stood around the track with us, listing every angle and intersection in order, converting them into our numbered directions, and checking the sequence before we entered it.

Then we checked it again. And again.

I trusted the algorithm. The question was whether we had read the track correctly under pressure. Fortunately, the team made no mistake.

One last local competition

The first run was deliberately slower. The robot followed the line, recognized each section, made every decision, and reached the end smoothly.

We still had time, so we increased the speed and ran it again. The competition allowed multiple attempts within the allocated period, with the fastest successful time counting as the final result.

The second run was faster. Again, the robot moved through the track without missing a decision.

We won.

After years of entering local robotics competitions without becoming champion, Sakib and I finally finished university life with the result we had wanted.

Adnan's team holding their winning prize at the DUET line-follower competition, 2018.
My team and me holding the prize after winning the DUET line-follower robotics competition in 2018.

The juniors who had pushed us to compete had been right to believe in us. Earlier, being watched had made me afraid of losing. At DUET, the same people who created that pressure also gave me the confidence to return.

And as promised, Arko joined us for the after party.