Electronic – Determine the position of a ball joint by image processing

encoder

I am wondering if it is possible to sense the position of a ball joint using:

  • A photodiode array from an optical mouse, embedded in the socket
  • A specific pattern deposited onto the ball
  • A processor that can use the exposed part of the pattern to identify which part of the ball it is looking at and how it is oriented.

I imagine something similar to a de Bruijn Torus, that can be projected onto a spherical surface rather than a torus or plane, would do the trick.

Is there a known algorithm for generating and/or decoding such an image?

Best Answer

finding absolute position on a sphere

finding absolute position on a plane

Yes, there are several such patterns used to determine absolute position on a plane:

When a digital pen is used on digital paper, two key steps in the algorithm are (a) decoding the part of the pattern visible from the pen into bits, and (b) decoding those bits into an absolute location, which indicates which page in the notebook and a coarse position on that page. Or in other words, when designing the system and deciding where the ink goes on the paper, the system designer first (b) chooses some pattern of bits on a grid, perhaps the cyclic single-track gray code used in the Anoto address carpet or a de Bruijn torus or a variety of other patterns of bits-on-a-grid. Then the system designer (a) chooses one of a variety of ways to represent each bit as ink on paper.

Aboufadel, Smietana, and Armstrong; "Position Coding" give a detailed description of a few of the possible choices for (a) and (b). If I understand correctly, the Anoto address carpet uses a sequence closely related to a de Bruijn sequence, but it is technically not a a de Bruijn torus.

Hecht; "Printed Embedded Data Graphical User Interfaces" give a detailed description of DataGlyphs, which he uses for (a), and the "carpet code" he uses for (b). Jeff Breidenbach and I use the phrase "a DataGlyph address carpet" for that particular combination of (a) and (b).

adapting a flat pattern to a sphere

There's several ways of projecting such "flat" patterns onto a sphere; perhaps using a projection such as the quadrilateralized spherical cube or some other geodesic grid technique for pixelizing the sphere. All such projections have one kind of distortion (lots of seams) or another (a lot of stretching in some regions compared to others) or some sort of compromise (a few seams, and somewhat less stretching); hopefully you can find one that works OK with your hardware.

Native spherical patterns

  • As Nick T mentioned, a "random dot pattern" will almost certainly show many unique patterns that, after "calibrating" by memorizing the particular patterns on this particular ball and their exact position on this ball, can be used to determine absolute position. This completely avoids the "projection distortion" problem.

De Bruijn torus

I don't quite see why the de Bruijn torus wouldn't work

It almost works.

A de Bruijn torus works fine as the grid of bits in an address carpet for finding absolute position on a plane. The most popular address carpet systems use other bit patterns that are easier to decode than a de Bruijn torus, even though they require the sensor to view slightly more modules.

A de Bruijn torus would also work fine as the grid of bits in an address carpet for finding absolute position on a torus or a section of a cylinder -- with careful design, the pattern could be designed to "match up properly" traveling the full circle around the circumference of a cylinder, and to "match up properly" traveling both full circles around both circumferences of a torus.

Starting near (for example) the city of Accra, with careful design one could design a pattern based on a de Bruijn torus that completely covered a narrow band near the equator and "matched up properly" traveling the full circle around the equator (but left the poles uncovered). Alternatively, starting near the same city, with careful design one could use print exactly the same pattern near the city of Accra, but extend it along the the prime meridian and the international date line, covering both poles. Those two approaches would print exactly the same pattern on the globe near Accra, but alas, a de Bruijn torus gives conflicting patterns at Accra's antipode on the international date line near the equator.

Is there some other pattern similar to a de Bruijn torus that "matches up properly" in both directions at the same time, when printed to completely cover a sphere or even a cube? So far no one seems to be able to find one, and so we are forced to use systems that can tolerate "seams" in the pattern, in the same way that mapmakers are forced to cut at least one seam in a globe in order to project a whole globe on to a flat piece of paper.

Once you allow seams, then again patterns based on the de Bruijn torus would work fine -- cut one or more large chunks out of that pattern, and use the chunk(s) as "adapting a flat pattern to a sphere", trimming off overlap; even though the pattern won't "match up properly" at the seams.