Since reading Snow Crash, I’ve been drawn to the idea of having my own personal Earth. Because I’m stuck in reality and the virtual version of it is always 5 years away, I’m building a physical artifact that approximates the idea: an interactive spherical display. This is of course something that exists and can likely be found at your local science center. The ones they use are typically 30-100″ in diameter and cost enough that they don’t have prices publicly listed. Snow Globe is my 8″ diameter version that costs around $200 to build if you didn’t buy a Microvision SHOWWX for $600 when they launched like I did.
The basic design here is to shoot a picoprojector through a 180° fisheye lens into a frosted glass globe. The projector is a SHOWWX since I already have one, but it likely works better than any of the non-laser alternatives since you avoid having to deal with keeping the surface of the sphere focused. Microvision also publishes some useful specs, and if you ask nicely, they’ll email you a .STL model of their projector. The lens is an Opteka fisheye designed to be attached to handheld camcorders. It is by far the cheapest 180° lens I could find with a large enough opening to project through. The globe, as in my last dome based project is for use on lighting fixtures. This time I bought one from the local hardware store for $6 instead of taking the one in my bathroom.
I’ve had a lot of fun recently copying keys and people, but my objective in building a 3D printer was to make it easier to do projects like this one. Designing a model in OpenSCAD, printing it, tweaking it, and repeating as necessary is much simpler than any other fabrication technique I’m capable of. In this case, I printed a mount that attaches the lens to the correct spot in front of the projector at a 12.15° angle to center the projected image. I also printed brackets to attach the globe to the lens/projector mount. The whole thing is sitting on a GorillaPod until I get around to building something more permanent.
Actually calibrating a projector with slight pincushion through a $25 lens into a bathroom fixture attached together with some guesswork and a 3D printer is well beyond my linear algebra skill, so I simplified the calibration procedure down to four terms. We need to find the radius in pixels of the circle being projected and the x and y position of the center of that circle for starters. The more difficult part, which tested my extremely rusty memory of trigonometry is figuring out how to map the hemisphere coming out of the fisheye lens to the spherical display surface. For that, we have a single number for the distance from the center of the sphere to the lens, in terms of a ratio of the projected radius. The math is all available in the code, but the calibration script I wrote is pretty simple to use. It uses pygame to project longitude lines and latitude color sections as in the image above. You use the arrow keys to line up the longitude lines correctly to arrive at the x and y position, plus and minus keys to adjust the radius size until it fits the full visible area of the sphere, and 9 and 0 to adjust the lens offset until the latitudes look properly aligned. What you end up with is close enough to correct to look good, though as you can see in the images, the projector doesn’t quite fit the lens or fill the sphere. The script saves the calibration information in a pickle file for use elsewhere.
Going back to the initial goal, I wrote a script to turn equirectangular projected maps of the Earth into roughly azimuthal equidistant projected images calibrated for a Snow Globe like the one above. There are plenty of maps of the former projection available freely, like Natural Earth and Blue Marble. Written in python, the script is quite slow, but it serves as a proof of concept. The script, along with the calibration script and the models for the 3D printed mounts are all available on github. I’ve finally fully accepted git and no longer see a point in attaching the files to these posts themselves. I put a Part One in the title to warn you that this blog is going to be all Snow Globe all the time for the foreseeable future. Up next is writing a faster interface to interactively display to it in real time, and if I think of a good way to do it, touch input is coming after that.
Download from github:
93 Replies to “Snow Globe: Part One, Cheap DIY Spherical Projection”
Awesome, I love it.
Whats the best pico projector on the market, I would love a super bright one of these!
Probably the SHOWWX+. It currently costs twice as much as the SHOWWX that I have, but it is 50% brighter.
For $50 the SHOWWX+ you could get Optoma Pico PK301 Projector at 50 lumens it is 35 lumens brighter than the SHOWWX+ it has digital input hdmi check out http://goo.gl/ynkSI
I posted this at Thingiverse, but it is relevant here too. Using a conventional projector may be more difficult:
As far as I’m aware, the SHOWWX is the only consumer laser projector available, so you would have to go for a LCD or DLP projector. This introduces the problem of keeping the entire sphere in focus. Laser projectors are in focus at any distance, but you would need to focal plane of a normal projector to align to the surface of the sphere. This means you couldn’t use a fisheye lens to spread the light, but instead something like a silvered hemisphere centered in the globe.
I think this is absolutely brilliant and I can’t wait to see how it goes for you. I may borrow your idea for an idea I had for constellations.
Woow ! Super results !!!
Your python code could be some 20 times faster if you used numpy methods for computing the maths. You can avoid using loops, for example, to multiply each element of an array by ‘pi’, just do my_array * numpy.pi (as long as type(my_array) is )
I can’t wait to see more of it ! (something like http://www.geophysique.be/2011/02/19/matplotlib-basemap-tutorial-08-shooting-great-circles/) !!!
… type(my_array) is ‘numpy.ndarray’…
This is awesome. What are the chances of hooking up some method of touch sensing?
Hey! Did you figure this out? I’m trying to make a touch-sensing dome at maybe 4 ft in diameter.The best I could come up with is to use the projector with a kinect sensor, but I am not sure how the calibration would be affected, and if I could get the touches to line up at all with the dome.
Thats pretty awesome. We have one of the 72 in. omniglobes from arcscience, and the end cost for that was nearly $250,000.
If you could incorporate realtime cloud maps or satellite weather, that would multiply the awesome factor by 15x at least.
Cool project all around though, good job.
only 15x ? 🙂
add realtime earthquakes and I order one from you !
What would be the resolution on this display?
could u reproduce “http://research.microsoft.com/en-us/um/people/benko/projects/sphere/”?
Pretty low. It’s a 848×480 projector, and I’m getting about 650-750×480 of it onto the globe.
that’s still realty impressive, im thinking of starting this project using ur diagram and the one from the microsoft site, to see what i can get.
The projector you mention advertises that it can project up to 100 inches. Do you think this type of setup would work with an 8 foot sphere? I’m trying to launch a weather balloon with a spherical projection.
At 100 inches, it is extremely dim even in pitch black. 8 inch diameter is usable, 12 would probably be the limit even with the SHOWWX+. 8′ would need a much more powerful projector.
First of all thanks a lot for sharing this – I’ve been wanting to build a dynamic globe for a friend of mine for ages but given a lack of crafting skills and knowledge about optics I never even started doing proper research, so it’s great that you’re sharing all the stuff you’ve already found out!
My ShowWX arrived last week, and since I’m trying to build a portable ‘standalone’ version I’ve also ordered this: http://www.4dsystems.com.au/prod.php?id=149
The chip can still handle the ShowWX’s 848×480 and with the onboard SD reader I should be able to cycle through different maps stored on the SD card as well as do some simple manipulations (e.g. rotation). Truely dynamic maps will be difficult, although you can do some simple painting with the chip and it is in principle capable of displaying videos too.
I’m a bit lost regarding the lens though since the one you used is somewhat difficult to get here and I have absolutely no clue about optics, but would this be an appropriate substitute?
Does the magnification make any difference regarding the projection?
P.S. here’s another 20 lumen laser projector I came across (somewhat pricier, but for those who need the extra brightness): http://www.aaxatech.com/products/l1_laser_pico_projector.htm
Nice. I’ve been considering powering mine off of a Beagleboard to make it standalone, but the VGA out board for those is pretty bad. With the HDMI ShowWX, it would work nicely though.
For a lens, you’re mostly just looking for something that does a 180 degree fisheye. Something that follows the first projection formula on this page: http://wiki.panotools.org/Fisheye_Projection
The lens you linked to looks like it should, and it looks like a much better lens too!
Not so good news regarding the lens unfortunately. With the built-in macro lens on I get a good picture but it’s merely wide angle and not proper fisheye, with the macro lens removed I can fill the whole globe, but the projection becomes extremely blurry (unless I move the projector at least 10-15cm away from the lens, which isn’t really an option). Am I missing something really obvious? I’ll try to get started on the uVGA stuff next week.
A certain amount of blurryness can be expected. If you are filling the entire 8″ globe in width and height of the projected image, you’ll be at a minimum of around 20 pixels per inch on the surface. If you make it fill only the width, and leave empty areas on the globe, your minimum is around 40 pixels per inch. Can you take a picture of what you’re seeing?
the projector is $105.00 shipped at woot.com (today 9/19/2011 only )
Wow, pretty good price for the old one. I’m grabbing one to take apart.
Thanks for the tip! Just ordered one – by the time I get the frame printed and locate a lens and such, the new version will probably be on clearance, but for now, this is awesome!
If the composite video-out from a raspberry pi computer could work, that plus your code and a sub-$150 projector could make a real opportunity…
OK… I have the ShowWX on order, I’ve snarfed the SnowGlobe code from GitHub, and I’m evaluating fisheye lenses. I have a Makerbot Cupcake for a 3D printer at the moment, though I’m building a Mendel. It looks like the mounting bracket needs the bed size of a Mendel. It also looks like your horizontal bolt holes are a cylinder, not the classic RepRap teardrop. Any problems with filaments collapsing into your bolt holes?
The teardrop isn’t really necessary anymore, for that sized hole at least. You may get a strand that falls into the hole, but nothing that effects functionality.
Next topic – software… so far, here’s what I loaded on my Ubuntu box…
sudo apt-get install libsdl-dev
sudo apt-get install cmake
sudo apt-get install libsdl-image1.2-dev
sudo apt-get install libvlc-dev
sudo apt-get install libsdl-net1.2-dev
sudo apt-get install libsdl-gfx1.2-dev
sudo apt-get install libsdl-ttf2.0-dev
sudo apt-get install libsdl-mixer1.2-dev
sudo apt-get install vlc-nox (needed or you get an error about libraries)
Because I didn’t see “libsdl-gfx2.0-dev” in the ordinary repositories, I grabbed v1.2. That version appears not to support thickLineColor() so I commented that one line out and at least got ‘sosg’ to compile.
I grabbed the air_traffic_2048.mp4 from sos.noaa.gov but it wouldn’t play on vlc (“no suitable decoder module for fourdd ‘mp4v'”) but I was able to re-render the file through ffmpeg, and that seems to run. I’m still working out how to make osgsnowglobe – I have no experience with cmake).
The version of libsdl-gfx needed is newer than the one in Ubuntu 11.04.
You may need to install ubuntu-restricted-extras for codecs.
Osgsnowglobe isn’t finished, or really started for that matter.
I figured that I’d have to build libsdl-gfx from source. I’ll check ubuntu-restricted-extras. Thanks for that tip. Good to know that osgsnowglobe isn’t a viable thing to build. I got stuck building osgearth 2.1 (31 Aug 2011) from sources on my machine and I can’t connect to the recommended repository for the pre-built osgearth binaries so I’ll just shelve that effort for now.
It will take me a while to construct the ring and mount (we have Cupcakes galore near me, but no Mendels yet), so perhaps real-time stuff will emerge about the time I have a working display.
Thanks again for everything. This is an awesome project. I’m looking forward to completing it.
OK… got libsdl-gfx2.0 built and installed (and ‘predict’ installed and running locally) and I’m looking at an sosg window with live satellite data and historical tracks. Very cool.
Now it’s all hardware!
Got the projector, got the globe, got the lens. Unfortunately, when I ordered the VGA dock, I was quoted a 4-6 week delivery time. 🙁
If I’m lucky, it’s supposed to arrive before the end of October.
Looks like with the woot! deal on the SHOWWX, I’m going to bring the build cost in just over $180 not including whatever I do about a mount (I’m currently contemplating recycling an Ikea lamp base that was on the freebie pile at our Hackerspace).
Sorry, had an internet outage for a couple of days. My globe is actually 11″, so I might head back to the store to get a smaller one too. I don’t think it’s just the resolution though, here’s the ShowWX default screen projected against a flat wall through the Opteka .43x, with the macro lens attached (left) and removed (right):
The lens wasn’t properly centred on the second one but you get the idea. Projection was from really close up too.
Here’s what the actual globe looks like:
I changed the colors of the calibration script to black and white because I couldn’t properly make out the boundaries in the original red-pink blur. It’s not just the camera failing to get the globe into focus, it does really look like that.
That does look rather blurry. What are your calibration parameters? Radius, most importantly. You can figure out what your expected pixels per inch should be. It is possible though that the lens is just not very good in its fisheye configuration.
Good question, I haven’t actually found really satisfying calibration settings. Whenever the upper half is properly aligned and proportioned, the lowest 45° (which should at least show up as a white rim in my case) are nowhere to be seen, which means there’s a lot of guesswork involved. Doing the +/- stuff first and only then changing the offset isn’t really doing it either.
The parameters used for the two pictures above were 334 radius and 181 offset, does that make any sense? I think Africa is extending way too far down on the picture which probably means that the lower hemisphere isn’t properly proportioned at all. I also had another setting with 486 and 486 that looked reasonable.
I found some good reviews for the lens, and the non-macro mode is actually the normal one. So no idea, if focus shouldn’t be a problem is it maybe something with the magnification that makes it require a minimum distance from projector to lens? It might generally be better to go for a Bloggie plug-and-play type lens rather than one for cameras with proper objectives.
I also have blurry image with these
– SONY MP-CL1
– OPTEKA NINJA FISHEYE(http://opteka.com/ninja.aspx)
Did you finally solved the the blurry problem with the fish lens?
Hey – awesome project!!
why the 14.5 angle?
I’m glad you brought it up. The SHOWWX projects at an angle relative to its base such that the bottom of the projected image is on the same plane as whatever the projector is sitting on. So, the mount needs to be angled upwards at half the angular screen height.
The screen height is 24.3 degrees, which means the angle should actually be 12.15 degrees. Both the post and the mount are incorrect at the moment.
Edit: Committed a fixed model to github.
what would the result of using the 14.5 angle model be?
You end up with a slightly off-center projection. The calibration script corrects for that, but the gap outside of the projection area will be larger on one side than the other.
Nice! Too bad the USPTO granted someone a patent on this approach (7352340).
Do you think ArcScience and PufferSphere are working around this patent somehow or licensing the technology from Global Imagination?
I still only have a CupCake for 3D printing, but I just got a MendelMax owner to print me the full-sized globe mount. I grabbed the OpenSCAD file off of GitHub and figured out that the grooves for the lens mount (in the opteka() module) do *not* match the profile of the Opteka fisheye lens I have. I measured my lens base and tweaked opteka() and with a little bit of filing to remove a few blobs, now have an assembled globe/projector stand.
With that, I seemed to have run into another situation… it looks to me as if the projector mount was designed to center the image when the ShowWX is mounted bare, not in its VGA dock. I can get a good image by sliding the lens down the mount groove away from center, but the edges of the projected image are cloudy (from misalignment) if I try to center the lens. I think I also had to remove the rubber feet from the VGA dock or the image was _really_ misaligned with the lens.
Has anyone else _made_ the printed mount? Did anyone else have to tweak the STL to get satisfactory results? I’m just starting to play with calibration and such, but as built, the axis of the projected globe image is nearly an inch off the top of the center point of the glass globe.
It all looks really cool so far, but I’ve generated some interest with friends who design and build exhibits for the local science museum and I’d like to make this as professional-looking as possible.
I took the VGA dock apart to remove the bottom plate of it. The printed part fits in the area where the bottom plate normally is.
That makes perfect sense. I was thinking of doing something like that. Good to know it will work well. Thanks!
Awesome project Nirav:)
I’m trying to cobble together another cheap version using this projector + fisheye lens combo from these Chinese dudes on ebay:
I tried out a fisheye lens designed for phones, but the entrance pupil was too small for my projectors.
You’ll also run into the issue of focusing the image on the surface of the sphere. The distance from the projector to the surface of the sphere varies from a few centimeters to the diameter of the sphere. Using a laser projector lets you avoid the issue.
I would like to replicate orb kitt (http://play.kendincos.com/171368/Wlptxtxdhnrdhptlp-kitt-3-0-voice-orb-animation-with-dashconsole.html)
The diameter of the sphere is approximately 10 cm (4″).
With that lens and the projector, the image takes up at least half a sphere?
(sorry for my english)
thanks to all
This is awesome. Wish someone sold them commercially. Also wish there was a version conforming to a cube. Keep up the great work.
cool result,and nice project 🙂
we have make this 5 years ago,so you can use also this videos
see the last script on this page
you can freely use the “textures”, for showing planets rotation 🙂
Hello! I really appreciate the sharing of your project.
I’m a design student and I was wondering if a projection would work on a drop-shaped glass sphere.
The projection might be distorted, but do you think the optic of the shape would make it work?
I’d really appreciate your point of view!
Sure, you should have no issue beyond distortion when using a laser projector. If you use a conventional projector, the different depths will be out of focus.
Wow! Amazing project!
I only stumbled upon this today, so I might be two and a half years late to the party when I ask this, but what factors need to be taken into account when purchasing a Fisheye Lens for this project?
I would like to replicate this project myself, but the Opteka Fisheye Lens you used is “currently discontinued”. Other than the importance of ensuring that the lens has a large enough opening (e.g. >30mm) and is 180 degrees, are there any other factors that need to be taken into account?
Is there a specific magnification (e.g. 0.2x), type of fisheye lens (circular or full-frame), and mapping function (Stereographic, Equidistant, Equisolid angle, or Orthographic) required?
Thanks for sharing your project, it’s much appreciated. I am working on an interactive sphere and I’ve purchased a 180 degree fisheye lens to mount on my projector. However, it’s not a pico projector as the lumens is way too low as I plan to make a rather large sphere. I am having trouble with the focus, everything seems to be very blurry. Could you share any insight as to how to fix this problem?
Hi, Can this be done on a 30mm diameter small scale sphere using miniature electronics? Thanks.
If you are in Delhi on work why not convert it into a pleasure trip by arranging the romantic company of gorgeous Delhi Model escorts
At sweety spa, you will find numerous massage rooms along with Jacuzzi.
Beautiful blog thanks for this content.
Great blog thanks for post here.
The Dwarka Escorts call girls are some of the cute in the Dwarka. These women are also very naughty and love to play with their clients. They will do proper efforts to make sure that their clients are happy and satisfied. If you are looking for a call girl for a late-night walk and open sex, then we are always there for you
thanks for this blog i really like it.
Massage can bring you a sense of calm and deep relaxation. Visit full body massage near me
Thank you for your valuable post
Thank you for your valuable post
Whether you are looking to relax after a long day at work, or want to relieve some stress before an important event, body massage spas in Bangalore offer the perfect solution.Visit body massage near me
Hey, you used to write wonderful.
Your creating and conveying expertise are amzing and wonderfull due for sharing these kinds of pleasant website.
We have something for everyone. Contact us today to book a meeting with one.
thanks for this blog i like it
Hey, you used to write wonderful.
Make your night fun with our Aerocity escorts and they will make you fully satisfied.