Xin and I have figured out how to control and program the Roombas, so that is good. What is not good is that our programs seem to be inaccurate. The inputs that the Roomba reads are linear and angular velocity, in M/s and Rad/s. We wrote a program to simply create a spiral, which is a popular and simple CCPP implementation. However, there is a large variance in the exact linear and angular displacements the Roomba travels. These errors would propagate further if we were following trajectories with nonzero curvature. We need to further investigate the sources of these errors.
Another problem arises we use formulae of differential drive robot control. We calculate values for inputs do execute certain actions from the Roomba (e.g. spin one drive wheel and not the other), yet these inputs do not yield such results. In practice, far different values actually yield these results. If we take these actual inputs as a priori knowledge, then we calculate values for the physical dimensions of the Roomba that do not match reality. We need to further investigate the sources of these errors as well.
Below is a video of our attempted spiral pattern. Note that many of the turns are less than 90 degrees.