Well before I post a video, here's a quick demonstration of software:
In order to get the hexapod to learn to walk, I need to actually get it to walk under my own hard coded algorithms first, to make sure the hardware works. Here, I have Matlab running a inverse kinematic engine to map out a simple trajectory for each leg. I have it make a quick plot every time the hexapod gets updated. Here is a quick shot of the simulation:

The servo angles are calculated and sent to the hexapod, and the hexapod gives button feedback from each leg. If the plot shows blue, it means that the leg is within its possible range, but the button is not in contact with anything. If a part of the leg is red, it means the corresponding servo is out of range for the desired X,Y,Z position. Here you can see that the one leg has the femur as red, meaning that the femur servo (the RX-28 in this case) is beyond the physical range. If the tibia is green, then the button is making contact with the ground. This plot shows the hex walking in the positive y direction.
In terms of other feedback, I have optical flow running, which doesn't work with Matlab as of now but will soon:

So this image is the program getting video back from the Quickcam with the hexapod walking forward. The program essentially takes a snapshot, finds good features in the image, then takes another snapshot and does its best to find the exact same features in the second image. The program then draws the corresponding vectors on the second image. I have the program also draw three other vectors:
1.) In the black part of the image, there is a tiny line to the right of the image, pointing up and to the left. This is a vector that is the negative sum of all the vectors, then is normalized by dividing the sum by the total number of vectors (in other words the average vector in the opposite direction). This vector gives translation information from the image. In the bottom right of the image, you see an object that moved relatively fast in the field of view, creating larger vectors, which results in this tiny vector pointing in the opposite direction. This means the hexapod moved the camera up and to the left a little bit.
2.) Below and between the image and the above translation vector, there are two vectors. The vector pointing up and down averages the dot product of all of the vectors with the location of the vector from the center of the image. The dot product results in a scalar value, not a vector, so I simply build a vector that points upward that has the magnitude of the dot product. If the robot moves straight forward, then the vectors of the image will all point outward from the center of the image. This results in a higher value for the dot product, resulting in a higher positive numerical "forward movement" value. If the hexapod were to move straight backward, then the vector field would point more towards the center of the image, resulting in a lower negative numerical "backward movement" value.
3.) The vector that is located at the same initial position as the above vector, but pointing horizontally is the average cross product value. Obviously I cannot point a vector out of or into the screen which would be the true cross product result, so I simply have it point the magnitude horizontally. Again, the cross product is calculated for every optic flow vector crossed with its vectorial location with respect to the center of the image. The more perpendicular the two vectors are, the higher the value of the cross product. If the hexapod is to roll slightly left or right, then the average cross product would result in positive or negative values. This one is difficult to see from this image, but since there is a clear value of the average cross product, the hexapod did roll a little bit when moving forward.
There are some dislikes about the optical flow code. Though I like that the code finds the best features in the image for optical flow accuracy, I would prefer that the code find features of the image more evenly distributed in the image. Since the program gets more vectors in a localized area, this greatly throws off the balance of the image, and can therefore heavily distort the data. I am not an expert at this stuff, so I will ask the main coder of the optic flow code to see if I can make a quick solution...