The best thing about making a list of things to do is crossing out the items on that list. I got a bunch of random stuff done today, but the majority of my list of things I need to do in the next week is now done.
- Added a zoom visualizer to the pan and tilt visualizers. Basically the width of the pan/tilt indicator is scaled by the angular field of view, so that as you zoom in, in gets narrower. This (hopefully) indicates to the user that they’re seeing a smaller fraction of the world
- I significantly sped up the video framerate by dumping zoomSurface(). This means that all of my visualizers are stuck at their native sizes, and the distinction between viewport and visualizer is blurred further. In a future version, I’ll probably just collapse the two data structures together. For now, things work.
- I added magnification to the camera image visualizer, at the byte array level, so both 160×120 and 320×240 images come out as 640×480. Doubling is a lot faster than any sort of interpolation, which I think is what zoomSurface() was doing.
- I significantly tweaked the joystick calibration, so there shouldn’t be any motion weirdness coming out of that.
- I fixed the way that widgets (program objects that respond to user interaction events) are handled slightly. Basically I can refer to them by name instead of number, which while slightly slower, makes the code more readable.
- I fixed assorted bugs with the way joystick control configurations were being read from the XML config file.
- I got my ground-plane drawing code working. It turns out that my math was just fine, I was giving it garbage input. Like expressing everything in meters or radians, except for the robot radius, which was in millimeters. That and duplicating the x and y output values.
- I added the ability to change the color, size, and quality of the images being transmitted by the robot. The next step is to make this automatic based on what the robot is currently doing.
Despite this progress, there is still a lot to do. We were waylaid today by a hard drive death on gollum, and assorted wireless network problems related to our new base station. Basically, the base station was talking faster than the wireless bridges on the robots could handle.
A few random things:
- SDL surface transparency, so I can translucently superimpose the HUD on the camera image.
- Track down a mysterious crash that cropped up since changing the image type. I think it lies in the new not-zoomed display code that I added, but I get to spend some quality time with GDB. The problem is that it doesn’t come up all the time.
- Track down a small memory leak. I think the culprit lies with my quick-and-dirty zooming code; it needs some cleaning. I don’t know why there’s a leak, since it’s a single allocation before the program starts requesting images, but you never know.
- Add automatic image quality adjustment based on robot motion.
- Add a quick-and-dirty map display, once Fritz rewrites SMMD to interface with the nav module.
I broke 6,000 lines of code today! The biggest growth has been in widget.c, the file containing almost all of my user interface event handling code.
This project has been long, and it’s been a lot of work, but it is so worth it. I think Fritz may have gone insane several times over, but at least that’s sort of entertaining ;o). Yay for the robots very nearly mostly working!!!
Maybe soon I’ll talk about all of the neat stuff I’d like to add but won’t be able to change, at least not for this competition which is in only one week!