Both of us had some, but not a lot of, programming experience, and even less so in C. This caused some trouble in our implementation of PID control, threading and locks in JoyOS, but we got around this with assistance from the organizers and also the use of simpler methods to achieve the desired outcomes.
We seemed to face trouble with the electrical connections (read: soldering) for the encoder, which failed on us twice (once midway during the month and again just before the competition), and also once for the motor. This taught us the importance to test our components regularly (and to have redundant components if possible), and also to have good soldering from the beginning. (Surprisingly, the portion of the code that used data from the faulty encoder did not trip up the robot. This remains a mystery to date.)
At some point in time during the course, our robot was unable to drive straight and rotate satisfactorily. Our robot is designed to rotate slower than it drives straight because a fast rotation saturates the data collected by the gyroscope. Unfortunately, we messed up the velocity bounds of rotation and straight motion (motor velocities have to be between -255 and 255 arbitrary units on the HappyBoard), costing us some time and also setting us back slightly for Mock Competition 1. In addition, we mixed up the orientation of the motors, causing the robot to oscillate as it moved forward regardless of the gain.
At some point in the competition, we were slightly disorganized and did not plan our time well, causing some inefficiencies in the way we used our time. One of the consequences was that by the time we wanted to test our robot using the VPS, too many teams were in the queue for testing, and we were unable to debug efficiently. In the end, our robot managed to get up and running only after the navigation Mock Competition.
Our code experienced several bugs along the way that wasted an afternoon or two, including:
Dealing with the trigonometric function in C in degrees instead of radians as should be the case
Declaring "int" when the quantity should be a float, and vice versa (especially during printfs)
Forgetting to copy_objects() when using VPS data
Compiling the wrong file in Makefile