Unified Coordinate System for String and QCAR

By Bit Barrel Media

Here is a system which enables you to use multiple Augmented Reality markers but only use one coordinate system. It is open source and compatible with Vuforia, String, and PointCloud. It is called Unified Coordinate System or UCS.

Features:
-Stitch markers together for use in one scene, similar to SLAM.
-Set SLAM scene orientation and scale to make physics work correctly.
-Compatible with multiple AR engines.
-Different sized markers in one scene.
-Works with Unity Basic.
-Use multiple movable objects, each with its own single or multiple markers.
-Real world objects participating in occlusion, shadowing, and collision.
-Create objects for occlusion, shadowing and collision on the fly.
-Load pre-made obj files.
-Advanced object alignment system, including camera freeze for precision placement.
-Marker pose filter to enhance tracking quality.
-Real world object warping special effects.
-No programming required.

Download here:
http://pilotpage.monosock.org/fileadmin/files/UCS1.2.rar
Bugfix:
http://pilotpage.monosock.org/fileadmin/files/UCS12bugfix.rar
Replace the two scripts in the Scripts folder.

Video (outdated):

http://www.youtube.com/watch?v=Uef8FFNA-F0

Android App (outdated):
https://play.google.com/store/apps/details?id=org.monosock.ucs

Markers (updated to include StudierStube Tracker markers):
http://pilotpage.monosock.org/fileadmin/files/Markers.rar

Prerequisites:
-Game engine: Unity 4.0 Basic or later. This can be downloaded for free at unity3d.com
-Line drawing: Vectrosity. This is optional but recommended. It can be purchased at starscenesoftware.com
-File browser: UniFileBrowser. This is optional and can be purchased at starscenesoftware.com
-Obj file reader: ObjReader. This is optional and can be purchased at starscenesoftware.com
-AR tracking engine: Vuforia, String, or PointCloud.
-The installation process has changed. Please read it again carefully.

Changelog v1.2:
-Fixed compatibility issue with Vuforia 2.8
-Simplified Vuforia installation.
-Added support for the StudierStube Tracker AR engine.
-Fixed bug which caused a crash if an image target dataset contains more markers then specified.

From the manual:

Introduction
Most Augmented Reality applications draw some 3d content on or around a marker. Using this method, the marker must be in view at all times and camera movement is therefore restricted. UCS stitches multiple markers together and brings them into a single coordinate system. This enables you to point the camera anywhere, as long as there is at least one marker in view. The process is similar to SLAM, except it is using markers for tracking instead of random features.

Another problem with traditional AR is that the scene is not interactive. The software does not know where the physical geometry of the real world is. UCS solves this problem with a geometry creation system.

UCS is also compatible with markerless SLAM tracking using PointCloud from 13th Lab. When using SLAM, no markers need to be stitched together a universal coordinate system is not needed. However, PointCloud does not support scene orientation placement in markerless mode. UCS solves this problem by providing a scene orientation placement system. The geometry creation feature in UCS is also a great addition to SLAM tracking.
UCS uses Unity as the game engine. UCS is a reference framework and is not meant to be a game or useful application on its own although it does contain an example project. UCS is free and open source but it does require paid 3rd party software depending on your needs. See the Prerequisites chapter for more detail.

Hey Mate,

This looks like an amazing system, and I will be trying it asap. I was just wondering though, if I set up a permanent set of markers, can i save the coordinates into a build, or does the user have to re-record every time?

Si.

At the moment you have to record everything again once you shut down the game. I am working on a “save and load scene” system.

And there is much more in the pipeline such as geometry creation which allows you to block out (part of) characters and objects as they move behind “real” geometry, and apply collision detection to it. This way you can have for example a radio controlled car fall of the table you placed the marker on if it drives over the edge.

In any case, the code is provided for free and with no license so you can use it for both commercial and non-commercial projects. If you can’t wait for a feature to be implemented, you can code it yourself. But if you do, I would appreciate some feedback on it so I can implement it and don’t have to re-invent the wheel.

Wow! this looks great! do you have any video showing the result?

Wow! Thanks a lot for this.

Do you think it could work with image markers?
And by that I mean various photos of real outdoor locations converted to image markers.

I want to use such a method for architectural walkthroughs.

I don’t have a video yet. I think it will be more interesting if I show the geometry building process as well, so I am waiting for that to be finished.

It will work with QCAR image targets as well, but it requires a few modifications to the sample project such as removing the frame markers, replacing them with image targets, and setting some properties in the QCAR scripts. I don’t think you have to change anything in my script but I haven’t tried it yet. But i’ll add it to my todo list.

Be careful though converting a real world photo (of a 3d scene presumably) to a marker and then using the real 3d scene as the marker itself. You cannot really do this. This goes for both QCAR, String, or any other AR system. The reason for this is that the image features (corners of pixels etc) are expected to be in a fixed location relating to each other. If you take a picture of a real scene, you can print that picture and use it as a marker. But if you then view the real scene, the image features will not have a fixed relationship between each other due to the fact they do not lay in the same plane, they have a 3d position instead of 2d. Even if you take a photo of a real world 2d scene such as a wall painting, you have to correct it for perspective and lens distortion errors before you can print it out and use it as a marker. So you are best off just taking a picture of something, printing it, and using that picture as the marker. The real scene will most likely never be recognized but the printed markers will.

If you are looking for a true 3d scene “marker”, take a look at PTAM (and the later version PTAMM). But this is very computational intensive and doesn’t run on mobile devices yet.

Thanks for the info elecman!

Hi elecman –

Great tool, thanks. It works well for my needs, where I have a 3D road that covers a real-world space of about 48 inches using 5 markers. There are 5 different 3D models that appear along the road, at each of the markers.

However I’ve found that iTween animations on the various 3D models that are linked to the markers are not working. No errors, just not working. However if I use PixelPlacement’s StringManager in CameraCentricManager mode they work OK.

So given that your approach is also using the CameraCentrainManager, do you have any idea why the animations aren’t running?

Thanks in advance!

Sorry – meant to say I am using the String API (Developer).

A new version is in the works with uses a different camera placement system. This is compatible with physics and particle effects. So maybe that will fix the problem. I never used iTween but I’ll give it a go and see if it works.
Stay tuned.

Edit:
Ok, I just tried it and it works fine with my new version. I tested it with both String and QCAR using the latest iTween with the native Unity editor extension, testing with the "cube.MoveBy() function. I will release it once QCAR is out of beta (1.5) but if you want it before that, let me know. I’ll post you a link then.
Note that with the new version you do not parent the augmented 3d objects to the markers but to either the “averageReferenceObjectRender” game object, or the “fake” marker objects attached to it.

The new version does not use the CameraCentric script and uses custom code instead. You have to remove that script from the project and remove all references to it.

Hi,
It looks pretty awesome! I tried to download the files , but looks that megaupload was shutdown by us government !!! so I could not download to try … :frowning:
Could you post a new link ,and off course I’m interested of trying the new release too :wink:

Tks
@mob

Yeah, no need for SOPA. Just make the law up as you go along. God bless 'merica!
Anyway, I’ll make a new release ASAP and post it on my own site.

Due to some nifty US Federal seizure based on criminal activity on MegaUpload, the site is no longer there.
Please allow these files to stay alive via another source or create a WordPress site for free to host them.

I am looking forward to seeing this awesome placement system.
Thanks.

~AryuLimitless

Ok, I added the new version. It is a vast improvement over the previous one. Give it a try.

Tks man Downloading it ;)!
@mob

Tring it out , but getting a Xcode linking error :

ld: can’t open output file for writing: /Users/XXXXX/Library/Developer/Xcode/DerivedData/Unity-iPhone-fefhiinnkeynjdbzbrkwvsyognfq/Build/Products/qcar.app/qcar, errno=21 for architecture armv7

I followed your pdf, and read it … I’m using :
Unity 3.4.2f3 Pro
QCAR 1.5.3.b1
Vectrocity 1.5
UniFileBrowser 1.4 (bought thru Asset store and is the only version there, and look it might not be the pro version, could be related ?)

Any tip …

Tks
@mob

And Vectrocity was bought in Asst store too.
Tks
@mob

Hm, not sure.
-Does it link ok with a simple scene like only a cube (no 3rd pary software)?
-Does it link ok if you make a project using only QCAR?
-And how about only Vectrosity and UniFileBrowser?
-Can you run it in the editor (FrameMarkersManual scene)?
-What target hardware are you using?

The pro version for Vectrosity or UniFileBrowser is the same as the basic one. The difference is just what you use the software for (commercial), but the software is the same, so that doesn’t make a difference.

Edit:
Googling on this error suggest that the problem is not related to my code but rather has something to do with project settings, Xcode version, etc. Try to get a generic project to work first.

Hi Eric,

Great work on this update! Loading and saving files is a big bonus.
Just one question: can i save the files to a ftp server as well? That way i can manage multiple devices with the same coordinate system?

By the way, I read your name on the manual, are you dutch?

It’s Tjeerd, not Eric :wink:
And yes, I am Dutch.
Yes, you can save the files to an ftp server but as for the networking functionality, you have to build that yourself. Also take note that the files are saved in binary format and therefore a file saved on one platform cannot be exported to another platform. But the code is easily modified to save the float numbers in a string format to a text file instead. I might change that in a future release. Do you require cross platform functionality?

Edit:
I made it is use a text file now so it is cross platform compatible. It will be available in the next release.

Update added. See first page.