Picture Pages of the new robot
Here are some PRO/E Wildfire rendered pictures of the robot. The robot is first designed in Pro/E mainly to make sure all of the components could fit together and then to get the dimensions of the parts to make is easier to fabricate them.
Here are some pictures of the exterior.
Here are some pictures with the frame and suspension hidden so its easier to see the interior.
Here is a close up of the suspension.
Here is a picture of the PCB panel that PCB Express made for me
Here is two pictures of the test setup before the PCBs are placed into the robot, four of the board I made (1 watt speaker amp board, 12-5volt with 6 drivers board, dual h-bridge board, IO board), with the 167 Kiton board purchased from Phytech.
One of the goals of the project is to have hardware vision processing. As a good learning project I decided to implement the sobel filter in hardware. To do this I used the Altera Nios2 platform mainly because it has Ethernet built right in. Here is a picture of the test setup and the video. In the video the top left window is directly from the web cam. The top right is doing software sobel filtering. The bottom right filter is having it done in hardware. The software and hardware look identical that is good. Although the hardware could run at 500 times a second on a 50mhz processor (it takes around 100000 clocks to process a 320x240 image, the Ethernet only allows up to around 700 Kbytes/sec to be transferred, even less when the laptop is loaded down. However it is visible from the video that although the frame rate of the hardware is less it looks identical.
Quicktime file of the sobel filter in action, low quality though.mov
ICP (Iterative closest point) Simulation
Here is some video of my latest simulation
EM Algorithm Simulation
I first made a nice little test bench that generates random planes and places points randomly in them. I got the basics of the EM algorithm to work, the red is the generated plane and the blue is the matched plane.
So I tried some more representative planes and profiled it and I got it working at a pretty fast speed. I also tested it with noise planes and it seemed to mostly work. The noise introduced a few issues such as when two planes where close to each other or touching they would often steal points from each other.
Now that the algorithm works in the test bench I converted the code to a plug in, and placed it into the simulation
I needed to change some of the simulation constants such as the maximum plane distance error and how far a point could be from the current bounds of a plane so it could join it. After changing a few of these values it did work well. One thing is the point density really mattered in terms of the performance. The floor plane has a lower density and it is often missed. To make it worse its edge points are often stolen by the other planes. It shows how density alters the performance of the algorithm.
There are two versions of the video, one with no noise and one with noise. The with without noise still has a few plane errors mostly due to the initial guesses heavily influence the results of the algorithm. The one with noise, the noise regularly splits up planes because using 2 even though it is wrong would mathematically be a better fit. Note that sometimes a plane isn't quite rendered correctly, in particular the floor plane when the robot is rotating. This is just a rendering flaw because it uses axis aligned bounding boxes so depending how a plane is rotated sometimes errors occur.
My conclusion is that EM does a decent job but it is somewhat dependant on high point density and the preset constants.
Special thanks goes out to PCB Express for making the PCBs for me