Tuesday, June 30, 2009
Electronics123.com
Another vendor who carriers some interesting parts, including serial camera modules and pyroelectric IR sensors.
Monday, June 29, 2009
Wet Robots
AUVSI Surface Vehicle Competition
On another note, I was curious about the legal issues surrounding operating autonomous underwater vehicles and I found this pdf which considers the current regulatory issues. The majority of the operational permit issues seem to involve harassment or accidental injury to aquatic wildlife, often due to the use of sonar.
This information may not be up to date but it was the best I could find, IANAL.
On another note, I was curious about the legal issues surrounding operating autonomous underwater vehicles and I found this pdf which considers the current regulatory issues. The majority of the operational permit issues seem to involve harassment or accidental injury to aquatic wildlife, often due to the use of sonar.
This information may not be up to date but it was the best I could find, IANAL.
Labels:
AUV,
IANAL,
Surface Vehicle,
underwater,
video
Saturday, June 27, 2009
Autonomous Indoor Helicopters
Some interesting research from ETH Zurich where their muFly project has produced some interesting research including the micro-helicopter shown above.
Researchers there also recently won best conference paper at ICRA 2009 for its paper "Towards a Navigation System for Autonomous Indoor Flying".
I like how they setup a mirror to use the Hokuyo laser as an altimeter, though in an indoor environment I would probably also reflect it up to check the distance to the ceiling.
This video shows their quadrotor helicopter flying indoors along with a 2D SLAM (Simultaneous Localization and Mapping) visualization.
Friday, June 26, 2009
Recharging Framework
PR2 from Willow Garage has been busy learning how to recharge itself.
The robotics framework ROS, that it uses for control, seems to be coming along fairly well and it interfaces to Gazebo which I suppose is nice. I should probably update my Gazebo install to see how much less it crashes now.
ROS seems to have reasonable hardware support but it does not support the Xsens MTx so it doesn't support everything I use. Much less every sensor you might use. Hopefully writing drivers for it is not as annoying as writing them for Player.
I'll probably try to get ROS to run on the Netbot when it is finished.
It seems like an interesting alternative to Player/Stage/Gazebo,
Carmen and the robot framework that will not be named unless they give me an Xbox and Natal controller. They really need to come up with a better name...
PR2 from Willow Garage has been busy learning how to recharge itself.
The robotics framework ROS, that it uses for control, seems to be coming along fairly well and it interfaces to Gazebo which I suppose is nice. I should probably update my Gazebo install to see how much less it crashes now.
ROS seems to have reasonable hardware support but it does not support the Xsens MTx so it doesn't support everything I use. Much less every sensor you might use. Hopefully writing drivers for it is not as annoying as writing them for Player.
I'll probably try to get ROS to run on the Netbot when it is finished.
It seems like an interesting alternative to Player/Stage/Gazebo,
Carmen and the robot framework that will not be named unless they give me an Xbox and Natal controller. They really need to come up with a better name...
Labels:
robotics framework
3D Computer Vision
The Engadget hands-on demo of the project Natal controller shows why it will be hard waiting for it to ship.
The Wii managed to package what was originally a $250 to $500 MEMs inertial sensor into a $35 video game controller. The Swiss Ranger 4000 time-of-flight camera from Mesa Imaging is currently down to $9095 and gets you 176 x 144 pixel resolution with depth from 0.3m to 5m +/-1cm. Canesta, on the other hand, supposedly has development kits and their sensor has been integrated into actual shipping consumer electronics where they have been integrated into a laser keyboard for $149.99.
I am a bit curious how Microsoft plans on bringing the cost down if the project Natal controller is indeed a time-of-flight camera. However, Microsoft has recently stated that the ZCam Time of flight camera from 3DV did not contribute to project Natal. So perhaps the controller is something more like this project but using parallax and infrared shadows to pull out the 3D geometry.
I don't care how it works, I just want one of these sensors now.
Labels:
3d sensor,
awesomeness,
computer vision
Wednesday, June 24, 2009
Stewart Platform
Here is an interesting offshore crane simulator made with a Stewart platform. The platform is a type of parallel manipulator that provides six degrees of freedom through a limited range.
I always wondered if you mathematically end up with a half of a degree of freedom if you have a robot that can only move forward or that can only rotate clockwise.
Labels:
mechanical,
robotics
International Aerial Robotics Competition
The competition for the 5th IARC mission starts in 26 days. The competition runs from July 20th to 24th at the University of Puerto Rico at Mayagüez.
Labels:
aerial,
competition,
robotics
Saturday, June 20, 2009
QR Code Decoder
$ ./sample/simple/simpletest ~/Desktop/0004.jpg
libdecodeqr version 0.9.3 ($Rev: 42 $)
STATUS=2080
this is a test
Hit any key to end.
It looks like libdecodeqr works for decoding QR Codes from images however it does not appear to perform reliably on small images or highly distorted images such as the one below. It is however very fast and uses opencv for image processing.
My beverage retrieval robot will require more advanced techniques to reliably locate the correct container.
Labels:
computer vision,
QR Code
Friday, June 19, 2009
Camera Calibration Toolbox for MATLAB
Trying to find out the focal length of your QuickCam 9000 Pro may be a little hard since Logitech will probably claim that it is confidential.
The Camera Calibration Toolbox for MATLAB will help determine this and other camera parameters based on a series of images of a checkerboard. This can also be used to compensate for distortion in the camera optics.
Labels:
calibration,
computer vision,
sensor
3D Anaglyph Python Code
If you have two cameras plugged in and everything installed and supported then this code might work to provide a 3D Red/Cyan video stream.
The extensive comments and documentation are provided as part of outsourcing the development of this code.
I broke the wires on one of the cameras so there is no video today.
The extensive comments and documentation are provided as part of outsourcing the development of this code.
from opencv import cv
from opencv import highgui
from time import sleep
def makeMagic(left, right, out):
chans=[]
for i in range(6):
chans.append(cv.cvCreateImage(cv.cvGetSize(left),8,1))
cv.cvSplit(left, chans[0], chans[1], chans[2], None);
cv.cvSplit(right, chans[3], chans[4], chans[5], None);
cv.cvMerge(chans[3],chans[4],chans[2], None, out);
#cv.cvMerge(None,chans[1],None, None, out);
cam=[]
def main():
cam.append(highgui.cvCreateCameraCapture(0))
cam.append(highgui.cvCreateCameraCapture(1))
highgui.cvNamedWindow ("carrots", highgui.CV_WINDOW_AUTOSIZE)
uno=highgui.cvQueryFrame(cam[0]);
dos=highgui.cvQueryFrame(cam[1]);
highgui.cvShowImage("carrots",uno);
highgui.cvWaitKey(0);
highgui.cvShowImage("carrots",dos);
highgui.cvWaitKey(0);
merge=cv.cvCreateImage(cv.cvGetSize(uno),8,3)
makeMagic(uno, dos, merge)
highgui.cvShowImage("carrots",merge);
highgui.cvWaitKey(0);
while True :
uno=highgui.cvQueryFrame(cam[0]);
dos=highgui.cvQueryFrame(cam[1]);
makeMagic(uno, dos, merge);
highgui.cvShowImage("carrots",merge);
if highgui.cvWaitKey(1)=="s":
cam.append(cam.pop(0))
print "tick"
if __name__=="__main__":
main()
I broke the wires on one of the cameras so there is no video today.
Labels:
anaglyph,
computer vision
2D Barcodes
A robot must be able to correctly identify objects to complete many day to day household tasks such as beverage retrieval. These tasks can be made easier by using 2D bar codes to identify objects at a lower cost than RFID tagging.
Zebra Crossing is a "Multi-format 1D/2D barcode image processing library with clients for Android, Java, and iPhone"
The Zebra Crossing online decoder tool can decode the above image correctly.
However, it has some problems decoding real world images.
Even when they are cropped.
This decodes correctly, so it looks like the problem is once again non-euclidean geometry.
After adjusting the perspective manually with GIMP the image is finally decoded and recognized.
Based on the papers on IEEE Xplore it looks like there are a few solutions for inverse perspective mapping to compensate for distortions caused by projective geometry.
The paper "A General Scheme for Extracting QR Code from a non-uniform background in Camera Phones and Applications" by Yu-Hsuan Chang, Chung-Hua Chu and Ming-Syan Chen, looks like a good approach for these problems.
A different approach is used by Aldebaran Robotics' Nao which uses a 2D polar barcode similar to ShotCode. This was probably chosen for easy recognition and robustness. Unfortunately during the demo I saw, Nao had trouble recognizing the images reliably. This was likely due to the same problems discussed above. The main advantage would be that this type of bar code most likely requires a lower camera resolution than a QR Code would.
Zebra Crossing is a "Multi-format 1D/2D barcode image processing library with clients for Android, Java, and iPhone"
The Zebra Crossing online decoder tool can decode the above image correctly.
However, it has some problems decoding real world images.
Even when they are cropped.
This decodes correctly, so it looks like the problem is once again non-euclidean geometry.
After adjusting the perspective manually with GIMP the image is finally decoded and recognized.
Based on the papers on IEEE Xplore it looks like there are a few solutions for inverse perspective mapping to compensate for distortions caused by projective geometry.
The paper "A General Scheme for Extracting QR Code from a non-uniform background in Camera Phones and Applications" by Yu-Hsuan Chang, Chung-Hua Chu and Ming-Syan Chen, looks like a good approach for these problems.
A different approach is used by Aldebaran Robotics' Nao which uses a 2D polar barcode similar to ShotCode. This was probably chosen for easy recognition and robustness. Unfortunately during the demo I saw, Nao had trouble recognizing the images reliably. This was likely due to the same problems discussed above. The main advantage would be that this type of bar code most likely requires a lower camera resolution than a QR Code would.
Labels:
barcode,
computer vision,
robotics
Saturday, June 13, 2009
Infravision: Illuminator + Stereo Camera
Here is the test setup for the infrared illuminator and a stereo camera system with the IR filters removed.
The Testors green spray paint #1601 makes the boards look like they have a solder mask but it is not the same as a real solder mask. Also, the paint really does take 48 hours to dry. The Cool-Amp Plating powder also worked well at improving solderability.
If you ever need to make circuit boards go buy this now from Pulsar Professional FX.
For drilling all of the holes I found that a hand drill seemed to work well since I was using a #70 drill bit for the holes for the LED leads and it didn't fit in the drill press. Hand drilling this many holes is annoying but for making one or two boards it seems to be faster then setting up the CNC machine.
I need to try out some of the new techniques listed on Pulsar Pro FX's website. Plated or riveted vias will make my life so much easier. Also I need to see if I can make a board with more then two layers by gluing them together.
IR Glare on a camera with an IR Filter
The Illuminator is little bright if you look at it with a camera without an IR filter. The human eye can not see any light being emitted by the LEDs.
The IR Illuminator consumes about 5 Watts of power at the maximum brightness that could be achieved with this power supply.
Here is another stereo cross test image that does not quite work. It is getting really close.
I managed to remember the technical term for the distance between the two cameras so this should be resolved soon. Here is the software for calculating the stereo base.
This is the same image as a red/cyan anaglyph.
Labels:
anaglyph,
computer vision,
electrical,
infrared,
projects,
stereoscopic
Friday, June 12, 2009
Cool Tool: Round Gauge
Here is a quick tool I made to measure the roundness of a part for reverse engineering dimensions.
You can download it from Thingiverse.
Labels:
cool tool,
mechanical,
plastic
Thursday, June 11, 2009
Infravision: Illuminator Testing
Here is the circuit board and parts for the infrared illuminator for that will allow the robots to have stereo vision in the dark.
These boards were made with the PCB 'Fab-In-A-Box' which is awesome.
The first illuminator being assembled with white LEDs for testing and use as headlights.
The light output is roughly 195,000 millicandella with the white LEDs. I think I may try to make a lamp out of this.
This images looks a little more diffuse then it appears to the human eye, but the semi-opaque white panel seems to work well as a diffuser.
Labels:
electrical,
infrared,
projects
Cool Tool: Dollar Store Calipers
This vernier caliper was purchased for $1 and has been surprisingly accurate and useful. It makes a great loaner tool since for some reason it always seems to come back.
Labels:
cool tool,
mechanical
Infravision: Design Revision
Need to finish soldering together the infrared illuminator tomorrow and get 3D video streaming working in opencv.
Labels:
computer vision,
progress,
projects
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
"I mention his talk about angles because it suggests something Wilcox had told me of his awful dreams. He said that the geometry of the dream-place he saw was abnormal, non-Euclidean, and loathsomely redolent of spheres and dimensions apart from ours. Now an unlettered seaman felt the same thing whilst gazing at the terrible reality."
-Francis Wayland Thurston
Labels:
math math math
Wednesday, June 10, 2009
Infravision: Functional Results
Since the last version didn't work I redesigned the mounting system for the infrared stereo vision system.
This is the front view of adjustable stereo mounting system based off of the Creative Labs VF0220 Webcam. The infrared filters were removed allowing the robot to see in the dark.
Here is the view from the back. One of the issues with this setup is the lack of stiffness for testing and calibration. I had to shim one of the cameras to make it coplanar with the other one.
This is the left/right stereo pair, which if you install the Schillr Firefox plugin can be converted to your preferred stereoscopic format.
A red/cyan stereo test image which is almost correctly aligned. Does not work at all with red/blue glasses.
This is the new stereo mounting system. If the image alignment and matching is good I'll probably just build a case around it and call it a day.
Maybe I should go look for the maths to determine the spacing between cameras since I will need to determine the camera's focal length, distortion and other assorted parameters anyways for future experiments.
This is the front view of adjustable stereo mounting system based off of the Creative Labs VF0220 Webcam. The infrared filters were removed allowing the robot to see in the dark.
Here is the view from the back. One of the issues with this setup is the lack of stiffness for testing and calibration. I had to shim one of the cameras to make it coplanar with the other one.
This is the left/right stereo pair, which if you install the Schillr Firefox plugin can be converted to your preferred stereoscopic format.
A red/cyan stereo test image which is almost correctly aligned. Does not work at all with red/blue glasses.
This is the new stereo mounting system. If the image alignment and matching is good I'll probably just build a case around it and call it a day.
Maybe I should go look for the maths to determine the spacing between cameras since I will need to determine the camera's focal length, distortion and other assorted parameters anyways for future experiments.
Labels:
anaglyph,
computer vision,
infrared,
mechanical,
projects,
stereoscopic
Hokuyo URG-04LX Laser Rangefinder
The Hokuyo URG-04LX laser range finder is pretty popular, and today I noticed someone was wondering where the optical center is. Well it turns out that there are actually two optical planes, one for transmit and one for receive. Since the alternative is probably dealing with non-euclidean geometry, for my robots I generally use the average between the two as the optical center and then this assumption gets wrapped up in the error term. I found this information somewhere on Hokuyo's website in their password protected customer area.
As an added bonus here is a 3D cad model (right click save as) of the Hokuyo URG-04LX Laser ranger in STEP Format. The CAD model and other measures is not guaranteed to be accurate.
Caveat Emptor.
Labels:
cad,
laser,
mechanical,
projects,
SLAM
Tuesday, June 9, 2009
Another Tool Needed
The tool to broach the splined hole in the aluminum servo horn is going to be a little bit trickier to make.
If anyone is interested in buying 24 tooth splined broaches for HiTec servos please post in the comments or email @ gmail and if there is enough interest I may start selling them. I should be able to get them hardened enough so that they can be used to cut plastic and aluminum.
Labels:
mechanical,
projects
How To: Make a Wrench
Sometimes you need a small wrench or spanner like tool with a funny shape to take apart something. Perhaps something like the lens module of a QuickCam Pro 9000. Building your own tools is easier then you may think.
I started with some scrap aluminum that I had let over from another project. This is why I never throw out scrap metal. I think this particular piece is 0.08 inches thick.
Then I used a hacksaw to remove the bits that were not shaped like a wrench.
Cutting off more non-wrench bits.
Once I had it roughly cut to size I used a Dremel tool with cut-off wheel to give it a bit of shape.
I wear safety glasses and so can you!
Now it is starting to look vaguely like a wrench.
Use files and the grinding wheel to further shape the tool.
Drill the center hole if you are making a lens adjustment tool.
You can use a reamer to enlarge holes.
The deburring tool is really effective at preventing metal splinters, which are much worse then wooden splinters.
Use needle files to cut notches 120 degrees apart for the rotation pegs.
Finished Logitech QuickCam Lens Adjustment Tool.
I started with some scrap aluminum that I had let over from another project. This is why I never throw out scrap metal. I think this particular piece is 0.08 inches thick.
Then I used a hacksaw to remove the bits that were not shaped like a wrench.
Cutting off more non-wrench bits.
Once I had it roughly cut to size I used a Dremel tool with cut-off wheel to give it a bit of shape.
I wear safety glasses and so can you!
Now it is starting to look vaguely like a wrench.
Use files and the grinding wheel to further shape the tool.
Drill the center hole if you are making a lens adjustment tool.
You can use a reamer to enlarge holes.
The deburring tool is really effective at preventing metal splinters, which are much worse then wooden splinters.
Use needle files to cut notches 120 degrees apart for the rotation pegs.
Finished Logitech QuickCam Lens Adjustment Tool.
Logitech QuickCam Pro 9000 Dissection Part 2
On last Thursday's episode of I Heart Robotics a QuickCam Pro 9000 was vivisected. However my attempts to learn how exactly the auto focus system worked were thwarted by screws that were glued in.
If you really want to remove those screws you can get them out by heating them gently with a clean soldering iron without solder on it. The heat should release the glue that holds them in. I suggest avoiding this if possible.
Finally got the screws out.
Then I figure out you can not take it apart from this direction.
This is where I realize I will need a special tool to remove the lens since its glued in.
Voila! Lens removed using custom Logitech Lens Adjustment Tool.
Why does this cover have latches and glue?! The permanent magnets for the auto focus motor hold it on just fine by itself.
Here is the linear drive motor exposed. It looks like they are using M8 threading for the lens mount, and the motor's displacement seems linearly proportional to the input voltage with a maximum of 3.3V. I think the auto focus uses contrast measurement so in theory you might be able to replace the lens with some sort of c-mount system and breakout the auto focus wires to drive the focus of an external lens.
Attempted to use "Component Cooler" to cool the CCD which in theory should improve its sensitivity.
I will admit that I did not really think this through. I couldn't really get it to work, and I quickly realized that I forgot what happens when you make something really cold in a room that has humidity. The entire circuit board ended up covered in condensation while it was running. Fortunately nothing fried and I had canned air to blow the water off.
If you look closely you can see where I lifted the trace for the auto focus connection.
Here is a photo taken from the web cam after the camera has been fully reassembled. The focus is a smidgen off but the camera is working again so it's time to build a high resolution stereovision system with it.
Also this means it should be possible to replace the lens with a wide angle or fisheye lens.
If you really want to remove those screws you can get them out by heating them gently with a clean soldering iron without solder on it. The heat should release the glue that holds them in. I suggest avoiding this if possible.
Finally got the screws out.
Then I figure out you can not take it apart from this direction.
This is where I realize I will need a special tool to remove the lens since its glued in.
Voila! Lens removed using custom Logitech Lens Adjustment Tool.
Why does this cover have latches and glue?! The permanent magnets for the auto focus motor hold it on just fine by itself.
Here is the linear drive motor exposed. It looks like they are using M8 threading for the lens mount, and the motor's displacement seems linearly proportional to the input voltage with a maximum of 3.3V. I think the auto focus uses contrast measurement so in theory you might be able to replace the lens with some sort of c-mount system and breakout the auto focus wires to drive the focus of an external lens.
Attempted to use "Component Cooler" to cool the CCD which in theory should improve its sensitivity.
I will admit that I did not really think this through. I couldn't really get it to work, and I quickly realized that I forgot what happens when you make something really cold in a room that has humidity. The entire circuit board ended up covered in condensation while it was running. Fortunately nothing fried and I had canned air to blow the water off.
If you look closely you can see where I lifted the trace for the auto focus connection.
Here is a photo taken from the web cam after the camera has been fully reassembled. The focus is a smidgen off but the camera is working again so it's time to build a high resolution stereovision system with it.
Also this means it should be possible to replace the lens with a wide angle or fisheye lens.
Labels:
computer vision,
dissection,
projects,
video
Subscribe to:
Posts (Atom)