A brief technical introduction to Anoto technology

This page is intended to provide a brief technical introduction to how the Anoto system works. It is intended for people with at least moderate technical and mathematics knowledge. I hope that it is clear; please let me know if there are any parts of this that are unclear or require further clarification.

I am working with Anoto technology as part of my research for the Integrated Systems Laboratory at Karlsruhe University. All of the code here has been released under the GNU GPL. It is reasearch code, not end-user code. It is intended to assist people wishing to understand this technology, and is not intended for any other purpose. It is minimally documented, and may have bugs. I am releasing it so that those reading this document may understand in more detail how this system works. If you want any more information, or have any comments, etc. then please feel free to contact me:

gf2e+NOSPAM(at)andrew.cmu.edu

SourceForge.net Logo

Important Disclaimer:

Various parts of the Anoto system are, presumably, covered by patents in various jurisdictions. I am not an attorney. I can not advise you on legal matters. All of the information contained in this document has been gathered from public sources. Your use of this information may require a patent liccense from Anoto. Please consult an attorney to determine if that is the case or not.

What is it?

A pen using Anoto technology is a pen that uses standard ink, but writes on paper with a special pattern of tiny dots that allow the pen to know where it is on the page, and to do various things, such as:

You can take a look at a raster version of a page, or the SVG vector XML version of the same thing.

You can get various pens with Anoto technology:

Who Made It?

Anoto is the original designer of the system, and all the current products that use the system use a core engine designed by Anoto. There is little, if any, significant customization on the part of the pen vendors. While there are definitely differences between pens from the various vendors, the differences are primarily a question of whether they included a specific feature or not - they choose to drop features they think are too expensive or unnecessary, rather than innovating themselves.

So, really, what is it?

At its simplest level, the pen contains an optical sensor that analyzes the paper while you write. You must use special paper for this to work. The paper has a non-repeating dot pattern on it. This means that:

When you touch the pen to the paper, it can do one of two things, based on where on the page you're writing:

Magic boxes can do various things:

Differences between the various pens

With few exceptions, all the Anoto pens are fundamentally the same. What I mean by that is, the only reason one pen won't do something another pen can do is that it doesn't have that hardware - some pens have Bluetooth, some pens have USB, one of them has both. If you check the "send GIF via bluetooth" box on a USB-only pen, it can't do that. Similarly, if you have a Bluetooth-only pen, and you have paper without a "send via Bluetooth" magic box, the pen will keep storing the strokes, waiting for something to do with them - but you have no way of telling the pen what to do with them.

What does the Magic Box do?

Most notebooks are a collection of pages, each of which has the same set of magic boxes on them. Magic boxes can do various things:

How the dot pattern works

Every dot on an Anoto page is in one of four positions: up, down, left or right. The pen is capable of determining its absolute position from a 6x6 grid of these dots. The size of the patternspace is extremely large - literally larger than Europe and Asia combined. Each dot encodes an X and a Y bit - these two bits are independant.

The dots in a particular axis are what is known as a cyclic single-track gray code. There is a 52 bit long sequence. If you look at six bits in a row from this sequence, you know precisely where you are in the sequence - in other words, no 6 bit pattern appears more than once. This means that when you look at a 6x6 grid of Anoto dots, you don't need any special alignment markers to tell you where you are - there's no "this way up" marking.

What this means is that if you know where the sequence starts at one end, you can keep repeating it across the entire page. For example, at the upper left edge of the page, the first row might begin with bit 5. The second row might begin with bit 23 of the sequence. Since the sequence repeats across the entire page, I can just keep repeating it. The same property is true vertically as well.

The effect of this is that if you know the top and the left edge, you can regenerate an entire page perfectly. This is useful for analyzing how well the pen handles errors in dots, scaling, dot size variations, etc. Virtually all of the pre-printed Anoto pages have lines or grids of some kind on them; personally, I prefer different line and grid types than the pages on offer, so regenerating a page is useful.

What these tools do

NOTE: These tools are incomplete. They are not end-user tools. The source here demonstrates some concepts, and elaborates upon the text, rather than being a useful system to work with.

Dot Analysis

Analyze the dot pattern from a scanned page:

This two-stage tool consists of a C++ application that takes a PNG, and outputs a Python module containing the dots that were recognized on the page. Specifically, it looks at an MxM sized square, and analyzes what the X and Y positions are. It then move down D dots, and repeats. It does this in the X and Y axes. As long as there is some overlap somewhere, this contains enough information to re-create the page.

The next component of the tool is a python script that takes each of these blocks, and figures out where it belongs on the page. It places one block in the middle of the page, then goes through each block in sequence and checks where it fits, if it fits. It doing this over and over until it finds no more that fit. Then it goes to the next scanned image, and repeats itself.

The output of the second tool is a pair of arrays, one for the left, one for the top. These arrays represent the start coordinates for the appropriate row or column. The python code also looks at probabilities - specifically, every extra dot is used to increase the probability that a particular row or column starts at a certain point. This means that if you have errors, you can scan more sections and thus decrease the error rate. I've been working with a 2400x4800 dpi optical resolution scanner. I didn't have such good results with a 1200dpi scanner, but I believe that better algorithms and image processing would fix that.

Dot Regeneration

There's python code that takes a pair of arrays for the left and the top, and produces Postscript code that generates those dots. It actually creates a Postscript Type 3 font with four characters: an up dot, a left dot, a right dot and a down dot. Then, for each horizontal row, it draws a long string.  This takes under a minute per page to print on many printers. It is much faster than the initial technique of drawing a circle for each point - the printer rasterizes each dot a single time when you select the font, rather than creating a bézier curve for every single dot on the page.

Stroke storage and rasterization

Once the pen sends your strokes out, you need to do something with them. This code will read your e-mail inbox over POP3, and download any Anoto attachments, and then do something with them. It will join strokes together into a single page - in other words, if you write, send the strokes, and repeat, i'll know that both sets of strokes belong to the same page, and will merge them together. It'll send the strokes to a piece of software as appropriate - the idea is that somebody can subscribe to a page and then get the strokes from that appage. A program can request a sequence of Anoto pages, use them for awhile, then give them back to the system so that another program can have them.

Download the Free Dot Toolkit from its Sourceforge project page