A few days ago I attended a talk by the winner of the Heritage Health Prize, and it reminded me that I should document the outcome of my team’s efforts.
My team-mate and I competed under the name Planet Melbourne. We submitted entries up until the first milestone at six months and didn’t make any submissions after that.
This apparently made us a useful reference point during the following milestones. Because the milestone rankings didn’t show scores, movements in a team’s ranking relative to our position gave a rough-and-ready indication of the improvement in their score.
Anyway, our rankings were as follows …
Milestone 1 (6 months): 5th
Milestone 2 (12 months): 5th
Milestone 3 (18 months): 14th
Finish (24 months): 25th
After the initial announcement of the winners, there were a whole bunch of disqualifications. Probably from people competing using multiple accounts. As a result, our final official ranking improved to 17th.
I actually got the new head-up display manufactured a few months ago, but haven’t had time to blog about it until now.
Here it is, modelled by my co-worker Scott. Notice the HTC Tatoo held in place with a rubber band. The information appearing on its screen is reflected back off the visor to fill your field of view at a virtual distance of about a metre.
At first glance it looks pretty good, but there are two problems. First, it’s too reflective. I requested aluminium coating on the inside surface at a thickness that would let through 20% of external light, similar to a pair of sunglasses. Unfortunately they coated both sides, so it’s only letting through about 4%. You can sort of see my couch in the background, but it’s faint, so the effect is more virtual reality than augmented reality. Still, that’s easy to fix in the next version.
More serious is the image distortion. I designed the visor using the optics I learned in high school, namely how a parabola can magnify an object and make it appear further away. Well, they lied to me. It turns out parabolic reflectors only work when viewed along the axis, and when they’re viewed off-axis, e.g. from your left and right eyes, the image gets distorted, especially at the edges.
You can see in the picture above how the “22:31″ text is sloping down, and that’s viewed from a camera that was fairly close to the axis. Viewed from your eyes the slope is worse, and, more important, the distortions are different for each eye so the images don’t line up. That makes it impossible to read text.
There’s no good solution to this. I’m writing some ray-tracing software to generate a curved surface that will show a separate image to each eye, but it has drawbacks. Each eye won’t see the entire image, and I suspect it’s going to be fairly sensitive to the position of the eyes relative to the visor.
At least this time I’ve learned a new trick for evaluating a design cheaply. I save the design in STL format, load it into Blender, make it a mirrored surface, and render it with ray tracing. If the reflected checker pattern is undistorted from the two eye positions then I’ve got something that works.
I’ve been having trouble 3D printing the transparent visor needed for my head-up display. The part sent to me by Shapeways was seriously warped and not at all transparent. So I complained about the warping, and they gave me a credit which I spent on printing the visor in white polished plastic.
The white version let me test the form factor (which seems OK), and I’ll glue some reflective film to the inside to check the optics.
If it passes that test I’ll get it manufactured properly. I’ve found a local prototyping firm who can make the visor using CNC and mirror-coat it using vapour deposition. Not cheap – we’re talking several hundred dollars – but it’ll be done properly.
Seeing this video made me realize that quadcopters are more advanced than I thought, which got me thinking about potential applications. One that came to mind was human-computer interactions.
To interact with someone as an equal we expect them to be at eye level (which is a huge problem for people in wheelchairs), and I assume the same will apply if we ever deal with intelligent machines.
In science fiction the usual solution is to put the intelligence in human-sized robots, such as C-3PO and Robbie the Robot. Smaller robots, such as R2-D2 and Wall-E, are generally portrayed as being child-like and inferior.
However, in his Culture novels, science fiction author Iain M Banks has another approach – small robots that float at eye level. These robots, called drones, range in size from hockey pucks up to rubbish bins, and are usually far more intelligent than the humans they deal with. And I suspect we could build a half-decent drone using existing quadcopter technology.
The intelligence behind the ‘copter would be housed remotely, and the only extra features you’d need on-board would be wireless comms, a decent speaker, a camera, a glowing component to show “emotion”, and centimetre-accuracy navigation. Apart from the centimetre accuracy, that’s mostly stuff you’d find in a cheap smartphone. I’d also like it to carry out “nodding” and “head shaking” manoeuvres, but I assume that’s already possible with quadcopters.
I’d be really interested to see how people interact with a talking quadcopter. Would they actually engage as though it were alive, or would they treat it as just another computer, like a flying automatic teller machine? If they do engage, I could imagine quadcopter drones being used as tour guides and customer service reps.
On an unrelated note, does anyone know why the quadcopter is the dominant design? Surely a tri-copter would be just as stable, and cheaper to manufacture?
Update: I don’t why I ask speculative questions when I can just look up Wikipedia. According to this page four rotors make sense because two of them can be counter-rotating, providing more stability. And they give you three axes of rotational motion, so “nodding” and “head shaking” are definitely possible.
It’s always amazing what obscure products you can buy on eBay. It this case, a 10-pack of assorted sandpaper.
Time to start sanding the visor.
The transparent visor part arrived yesterday from Shapeways.
It’s not very transparent, but apparently with sanding and polishing it becomes clear. It’s also very fragile – a piece broke off when I tried to attach it to the first part and it had to be glued back on.
Now that I’ve got my hands on the part I can see a few things that need improving.
- The visor needs to be thicker. It’s currently 1.2mm thick, and will be difficult to sand and polish without breaking. At least 1.5mm next time.
- It needs a shorter focal length. The visor sits too far forward on the brim of the cap and doesn’t really provide fully field-of-view coverage. Shortening the focal length will move it back and increase its curvature, hopefully solving both problems.
- The attachment mechanism needs rethinking. The tolerances are too tight – this can be fixed with sanding, but that’s not suitable for mass production. It can fail when the visor material is too fragile. It’s too complex for injection moulding. And it partly obscures the phone’s screen.
Still, I’ll proceed with what I’ve got. Get the visor sanded and polished, then hopefully mirror coated, and see if it works.
The first part has come back from Shapeways. I actually ordered this a week after the visor component, but there has been a backlog on the machine that prints transparent materials, so it won’t be in until early next week.
Not bad. Near as I can tell it’s exactly to specifications and it feels pretty tough.
Two related observations …
- Shapeways, when you send me a part that fits in a 12 x 8 x 3cm baggie, please don’t pack it in a 20 x 15 x 12cm box and charge me $20 shipping. Use a smaller, cheaper, box.
- I got home to find a UPS card in my letterbox. Oh no, I thought, another game of courier tag. But no, they’d left it at a nearby 7-Eleven for pickup. Brilliant, UPS you guys rock! Fedex, please do something similar.
Once you get the hang of FreeCAD’s features you can make some nice-looking designs.
The STL file for the dark green attachment mechanism has been sent to Shapeways, and should be returning in physical form in a few weeks. Then we’ll see if the pieces fit together.
FreeCAD has a few rough edges, but it delivered the goods in the end.
This is the parabolic visor, with integrated attachment points. Let’s submit it to Shapeways and see how it comes out in transparent plastic.
Last year I posted an article about a baseball cap head-up display. I’ve been looking to improve on it, and have decided to use CAD and 3D printing to do it properly. So the first step was to learn a CAD package, preferably something free and available under Linux.
I thought I’d try FreeCAD. I don’t know whether this is common among CAD packages, but I really enjoyed the way its Sketcher tool uses constraint-based rules to specify the design. Instead of specifying (x,y) coordinates for each point, you first draw approximate lines and then start imposing constraints. For example, you might specify that a line is 15mm long, or that two lines must be angled 60 degrees from each other, or that two points must have a horizontal separation of 20mm.
Every time a constraint is added the degrees-of-freedom counter goes down, and when it hits zero you have a fully-constrained design, ready for export.
At least, that’s the theory. In practice, FreeCAD is still in beta, and I ran into a few problems …
- Crashes. Frequent crashes. They’re not hard to reproduce, and crash bugs are pretty easy to catch and fix, so I’m surprised they’re still around. Or maybe they’re not easy to fix, in which case an auto-save feature is needed urgently.
- Performance. I was sketching the cross-section of a 75mm radius parabolic dish at 1mm intervals, and as I was getting to 150 points it was taking over 10 seconds to re-calculate after adding each new point. Given that a basic PC can do over a billion floating point operations per second, that’s really poor, especially since half the points were locked with explicit (x,y) coordinates and didn’t need re-calculating.
- Lack of feedback. After entering all the points it becomes a game of tracking down and removing all the degrees of freedom. But the interface doesn’t show which points are unconstrained, so a lot of guesswork is required. That’s a pain when there are 150 points and when you’ve accidentally put two points in the same location and one of them is unconstrained.
- Needs another constraint type. When designing 3D objects it’s fairly common to construct a “wall” around a complex shape, for example when designing a hollow object. So it would be really nice to be able to constrain two lines to be parallel and separated by a certain distance. FreeCAD lets you set two lines to be parallel, and you can constrain a point to be a certain distance from a line, and if you use both of these simultaneously you can achieve the desired result. But it’s easy to make mistakes and the rules are difficult to maintain, so a single constraint would be much better.
- Needs B-splines. I realize it can be difficult to calculate constraints for polynomial curves, but if you’re making a 3D object odds are it needs a curved surface of some sort. My parabolic dish certainly does. How about constraining the points based on the straight line segments, but rendering them as B-splines?
Anyway, I’ve now finished drawing the parabolic curve. Luckily I realized that you only need half a parabola to create a 3D dish, since it gets rotated around its Y axis. It remains to be seen whether the 3D editing tools in FreeCAD are up to scratch.