Fareed Ahmed
Namit Setia
Ian Smith
Abdulrahman Tarbzouni
At long last, the design is submitted. Fareed returned, and after his 18.02A final was heavily disposed working on the mechanical problems. Namit and Ian pulled two all-nighters starting Tuesday, working for roughly forty-eight straight hours. Our original code design, which was reasonably powerful, had to be abandoned due to technical problems, inaccurate algorithms, and a lack of testing which heavily manifested. Unfortunately, our new code, while significantly less buggy is also much weaker, and certain hardware problems, like a wandering gyro, a malfunctioning infrared sensor, and a stripped gear on a high-torque motor seem to have all but incapacitated our robot's ability to accomplish its objective. It's very saddening to see a problem whose solution you have been unable to find cripple a month of hard work.
Work progressed somewhat over the past two days, but the mock contest was highly disappointing. The code was not yet successfully implemented, and without a competant drive and wander program, there was little the bot could do. Namit, who's primary programming objective is image processing, was forced to work on Ian's main objective, the drive algorithms. In any case, our robot right now does very little, which hopefully will change over the next forty-eight hours. Namit pulled an all-nighter on Monday.
Namit and Ian, working in solitude, spent the weekend designing some critical program architecture; unfortunately, much of the design is still not yet implemented. The chassis, while almost complete, requires some fine tuning and attention from Fareed - attention Ian and Namit have no time to allocate to, and so with an incomplete design and totally new code, testing time is going to be difficult to come by. Hopefully the week ahead will yield productive and encouraging results. The mock contest on Tuesday looks grim; Fareed returns Tuesday night, and hopefully our bot will be equipped to at least collect a few balls.
Ian was unavailable much of Sunday; he is employed as a tutor for 8.01L and taught a review session ere their final exam.
Fareed, the primary impetus behind mechanical progress and design, left Cambridge on Thursday for a weekend at home, leaving the structure of our robot in the somewhat uncertain hands of Namit and Ian. We all but finished construction, but unfortunately, little progress was made on code during this period. The second and third tiers are not all but completed; the Eden, battery and Orcboard now are mounted. We encountered a certain amount of difficulty trying to install the high-torque motor for our rotating arm (which lifts the balls from the first tier of the bot after they get pulled in up to the third); the motor is currently attached to the arm with a screw that pinches the axle. However, the entire mechanism tends to come loose, which is a critical obstacle for a component of such importance.
In any case, the chassis and three mechanisms are almost completed; we still lack a design for how to keep balls on the third tier ramp once they are installed, and the third tier ramp needs proper alignment and calibration before we screw it down such that the end is higher than the edge of the wall. Namit and Ian will likely spend the bulk of the coming week programming; the tasks ahead are enormous.
We encountered some major structural obstacles today; our bot was too long: it exceeded the length of our storage bin and so violated one of the conditions of the competition. Fareed, much to his chagrin, then led an effort to cut about four centimeters of wood from the midsection of the chassis. This process involved some extensive disassembly of the bot, but our design, which is fairly modular, made this a comparatively simple task. Our bot consists of three horizontal platforms supported by vertical columns; the first two platforms are in place. Most of our hardware is positioned on the middle platform, and that has yet to be installed, but the structural foundation and framework exists. I suspect that by the end of the day, the third tier will be completed.
Our code is similarly continuing; Namit and I have completed several classes we deemed necessary which have so far facilitated operation. We have experienced a large spurt of code output over the past few days, which suggests that we have a similar spurt of bugs. As soon as we finish the functions and classes we created, we will spend a day or two debugging and calibrating.
Problems in the communication between our Eden and Orcpad have resumed; at times like this the inadequacy of my Linux preparation is evident. Our orcpad and Eden compy are not interfacing properly; the orcshell isn't loading, /dev/orc doesn't exist, and the eden seems to be configured to connect to the orcpad through a non-existant serial port. In earnest, I'm not entirely certain what the various problems are; they have recurred in the past but were intermittent at best. Many of the LAs are not in the lab because today is a holiday, so we will likely have to wait for resolution to the problem until the morrow. All our code is backed up, however; the mechanical components and design of the robot are greatly occupying most of the team's attention, and Ian, who is working only on the code right now, has sufficient material to work with and sufficiently many new functions which must be designed, to occupy him.
Our robot is in pieces right now; in order to expedite the completion of the chassis of the bot, all the material and electronic peripherals were removed from the Eden. Our problematic computer and its interface now sit alone on a table while the construction team assembles the hardware. I suppose then that lack of a brain is conveniently irrelevant because of our similar lack of a body. We have nine days until competition; hopefully our physical construction will be completed by tomorrow or the day after, leaving subsequent time for calibration and modification. I am enthused about incorporating all our new hardware tolerances into the code, but we're adding many new mechanisms, so no doubt getting our bot to do what we intend and have designed will occupy an enormous amount of time.
Regarding the software, we're working on improving the efficiency of our image processing code - hopefully we will only need to analyze an image once rather than the disparate blue-line, red ball, yellow goal, and obstacle recognition functions we had first coded for evaluation purposes. One advantage to our design (I hope) is that we never intended to have fully real-time image processing, so if we can even improve our efficiency slightly, the wealth of data will greatly increase the accuracy of our design. Much troubleshooting remains to be done with all our sensor data, and Ian hasn't completely decided how to react to the sensor data with our output and in what order everything should run. That's his task for the day. Our locomotive code seems to work pretty well, but methods of verification - odometry, the gyroscope, camera 'feedback' as to our trajectory - require synchronization. Also, collection code - when and where our lifting mechanism runs - must be designed. These small functions can then be coagulated into the much larger and more demanding requirements, like when to return to the goal, what search patterns to take, etc. Ian is also working on the virtual map of the playing field, which could take time.
Construction continues on our chassis; our image processing and locomotive functions are in working order; the next programming phase is incorporating threading and building a behavioral loop function to dictate higher-order actions in the bot. Structurally, our robot design is beginning to take shape; while it is mechanically primitive, we believe it will be more than sufficient for the task at hand. The code requires much attention still, and Ian and Namit may have many sleepless nights next week working out new modes and means of operation. Much remains yet to be done, but we are optimistic.
In the mechanical department, we recently decided to a rod which will rotate in the y-z plane (if x is defined as the forward facing axis with respect to the bot) to lift the balls from the back of the bot to an elevated reservoir. We consulted one of our dormmates from Wisconsin for detailed descriptions of how "bailers" work; our design is likely to incorporate a gathering mechanism not unlike the familiar farm implement.
All right, so far today we haven't touched a computer (which is good that we've been arduously working on finishing the construction of our robot). We don't think it's plausible to finish today, so we're aiming on finishing tomorrow. So far, we've completed constructing the base (with the guidelines for the ball to flow along). We're also working on the front end and just got two servo's to help take care of that. Considering none of us have machine experience, it's been interesting to learn how things are going. (hopefully we'll update this later tonight when we're done with more things)
An updating on the coding front: a problem in Ian's turning and locomotive algorithms that had up to this point eluded him has at last been revealed; the locomotion algorithms in their basic fundamental state (turning, moving forward, synchronizing movements so as to recognize an image or direction and then move in that direction) are now completed. Unfortunately, our Eden seems to have a critical malfunction that has for the moment incapacitated attempts at progress. On the other hand, the hardware team is busy working on the chasis and new implement for the foundation of the robot. We expect to have a fully functional physical component system ready for the Friday test - ideally, a prototype will be ready for tomorrow so we can practice implementation. Namit and Ian seriously need to finish and revise code for Checkpoint Two on Friday. Our group hasn't passed Checkpoint one yet, but after our eden problem is resolved, that is merely a formality; we have much algorithm progress beyond the scope of Checkpoint One that merely hadn't been implemented because of the initial locomotion problem and drift in our gyroscope.
To get into specifics, the problem emerged in the way Ian compensated for the discontinuity in gyroscope readings from pi to -pi; consider, for instance, a left turn: the absolute distance to turn is positive; the final direction should be greater than the initial direction. If, then, the current direction dropped below the initial direction, Ian presumed that the current direction had passed the discontinuity; to compensate, he then decremented the initial direction by 2*pi. The problem emerged with drift at the very beginning of the turn; if the gyro drifted such that the current direction was less than the original direction, the program would decrement the original direction, and the new difference between the directions would be slightly less than 2* pi - well in excess of any conceivable turn input into the system. Thus, the turn would conclude after the logical check that the difference was in excess of the requisite turn. It was an astonishingly simple coding error that cost Ian several hours of effort to ameliorate.
Update: Yuran and Anders from Team 3 solved our file system problem (thanks to you both - Anders in particular for taking time out of his work to give us a hand); I hope to have sufficient mastery of the Linux operating system and inherent computer file structure to be able to solve similar problems. It certainly is humbling to see an error or exception whose meaning utter exceeds my knowledge solved by a peer of mine as easily as I might write a simple algorithm or solve a simple differential equation. In any case...
After two long days of working with image processing, we are now designing and constructing our actual bot. We have broken it down into three basic problems: capturing the ball, lifting the ball, and putting it in the field goal. For capturing the balls, we've decided on a "gaping hole" desinged to contrain the ball to a certain area. We are going to force it onto a platform via a turning mechanism (like a hay collecting machine-->we don't know the word for it-->found it was balerwe think?). Then, after confining it, we'll get it to fall into a shaft that's attached to a long stick that rotates in 360 degrees and brings the ball up to the top our device. From there, we'll either use a cannon or drop the ball into the field goal. Since we've just come up with the ideas, we'll see if we still think they're reasonable tomorrow.
As far as coding goes, we've yet to completed image processing of balls but need to work on processing multiple balls. It has a hard time driving towards the ball too---but that's kind of just a minor problem with our turnning mechanism.
We had a very productive weekend, but much remains to be accomplished. We rewrote HSVtoRGB functions using the java api rgbtohsb and finished implementing our own blueline filtering, find red ball, and bar code information. Unfortunately, there seems to be some discrepency between what colors translate to when they are converted in real time and when they are converted from a file. Besides that, we need to calibrate everything in lab since we were working in our dorm...
Our day did not go as well as we had hoped and expected; we failed to pass Checkpoint one. With the interim goal in mind of passing the checkpoint, we elected to use the given image processing code; unfortunately, the code did not function either as we expected or within any sort of reasonable expectation. Unfortunately, this means we will be spending much of our time over the weekend rewriting our image processing code. Concurrent with the goal of visually locating a red ball is processing a barcode.
Today started off very badly for our team. When we arrived we found out that we were missing a battery, our orcpad wasn't working and we didn't have the mounts for the encoders. With a little bit of luck and a lot of help from the TAs we were able to find the missing mounts, get a new battery, and replace a chip in our Orcpads. Aside from those problems, the day went relatively well. Great strides were made in Odometry and Image finding. Tomorrow, we will try to pass the first checkpoint and seek out the colors on the barcodes.
Today was a day of programming. We finally had all four members in the lab. We prorammed Botclient and got streaming text and video. We also started work on the encoders. Slow and steady, we continue to make progress everyday.
We were first in the lab and among the last to leave. A lot of work was done today; we started and finished construction of orcpads, gyro sensors, and the pegbot. After a brief food run, the team (minus one member whose location is still unknown) began work on the infrared sensor and programming. At the end of the the day, we were able to get the robot to autonomously move forward and come to a complete stop when confronted with an obstacle. Tomorrow morning, or tonight, we will try to program it to restart after the obstacle is removed. But first, there's a class on Java we all need to attend . . .
Tutorials done. Work on the Orcpad will resume tomorrow.