User:Head/HaptoRender
This page documents my attempt to create a haptical, Braille-labeled map with a laser cutter. Once we have exchanged experiences, this page will be joined with the HaptoRender project.
Maperitive
As a proof-of-concept, I tried to create a map of downtown Aachen.
First step was to create Maperitive rendering rules for a map. We need a grayscale map in which black represents graved areas, gray represents less graved areas, and white represents untouched areas. My basic idea was to make streets and paths black, houses and objects white (with hatched filling), and to use textures for things like grass. I have not yet spoken to a blind person, so I don't know whether this approach makes any sense.
- Yes, that is the typical approach to have streets deeper to allow embossed braille inside. --Lulu-Ann 20:23, 15 May 2011 (BST)
Rendering waterways is difficult. The usual representation - a straight blue line - cannot be used for obvious reasons. I tried to let Maperitive draw a sinus-like wave along the waterway. It works for straight rivers, but looks terrible for winded ones. Adding textures to ocean is completely unsupported by Maperitive.
- Sinus waves or parallel lines are a often used for water. It is pretty uninteresting how it looks. Important is, how it feels. When you have a usable scale of 1:1000 there should be enough room for several sinus waves. --Lulu-Ann 20:23, 15 May 2011 (BST)
Maperitive SVG export has several bugs, some of which were reported to Maperitive Idea Informer. The developer is actively fixing them, but it will take him some time. For now, I'm using the PNG export (but SVG would make it easier to scale the map before laser-cutting).
- My approach was with Osmarender. I did not check for coastlines. --Lulu-Ann 20:23, 15 May 2011 (BST)
Braille labels
There should be Braille labels for important roads and points of interests (in the case of Aachen: cathedral and city hall). A little Python script is responsible for abbreviating things like Straße -> Str., Platz -> Pl. etc.
- Points of interest for blind persons have different priorities. It is common to have a Braille abbreviation on the map to save space, and have a folder with the legend in Braille go with it. First things that should be on the map are public transportation stops. Next priority are all objects listed in Category:Visual Impairment --Lulu-Ann 20:23, 15 May 2011 (BST)
As braille labels clutter the map, not everything should get a label. To create the Aachen map, I added a few Maperitive rules to filter out roads etc. that should not get a label. This definitely needs improvement so that it works worldwide. Still, I think that it will always be required to do a manual filtering of labels before producing the map.
Even though filtering took out several labels, they still clutter the map quite a bit. One way to improve this would be to only add single-letter markers on the map, and to add a legend next to the map. I don't know whether a blind person would prefer complete labels on the map or small labels with a legend next to the map. Furthermore, I don't know how to automate the creation of the legend. Probably it cannot be done in Maperitive, so one would have to export to SVG in Maperitive, then feed the SVG file into a special application that is responsible for the legend.
Braille font
We need a font that contains Braille characters. There are lots of fonts in which standard letters are replaced with Braille letters. The cleaner solution, however, is to use the Unicode block for Braille characters. I wrote a Python script for this. I chose Python because it can be integrated in Maperitive. It is easy to map A to P1 (in unicode, that is U+2801 or ⠁), B to P12 (U+2803 or ⠃), etc. Additionally, there are language-specific shortcuts such as P156 (U+2831 or ⠱) for SCH in German, and Braille characters for special characters such as ÄÖÜß. My script can also correctly convert numbers. As of yet, I have only defined shortcuts and special characters for German Braille. It wouldn't be hard to define shortcuts for English etc. However: how is the renderer supposed to know in which language to render?
- There is a Braille font available at Blistec for free download.
- The renderer will have to be told in which language to render. If you make a map of Beijing for German students, you won't want to have Chinese Bralle on it. Labels with language postfix will be used ( name:de=Peking ) --Lulu-Ann 20:38, 15 May 2011 (BST)
Instead of defining rules for every language, it might make sense to use the liblouis library which does exactly this. However, it is unclear how to link this library to Maperitive/Python.
- It should accept a commandline parameters. --Lulu-Ann 20:38, 15 May 2011 (BST)
Windows 7 ships with the font "Segoe UI Symbol" which contains normal characters as well as the complete Braille Unicode block. On other operating systems, one might use the free "Braille" font available at Yudit, however that one doesn't contain normal characters. This might be limiting in the future, as we might want to create maps that are useful for blind and seeing people.
- If you want to support sighted persons, too, there are two common methods: First ist to have the tactile map on a transparend foil (Tiefziehen) and put a colored map in the backround on paper. Second method is to use color 3D Printers. --Lulu-Ann 20:38, 15 May 2011 (BST)
A rectangle with black background was drawn for each label, with white Braille dots on it. Braille fonts produce all-white dots. According to these guidelines, dots should be hemispheres, not cylinders. This is hard to achieve with fonts.
- Maybe we can use a standard shading function for the font? --Lulu-Ann 20:38, 15 May 2011 (BST)
http://www.braille.ch/blista-d.htm http://www.blista.de/download/index.php#druckerei --Lulu-Ann
- Yes, I read parts of this PDF, really interesting. About the Blista font: I prefer to use the Braille Unicode block because I don't want to change fonts for each language. With Unicode, I can use the same font, just change the mapping.
- I tried to get liblouis running. There are no Windows binaries, but I installed it on Linux. Unfortunately I haven't yet found a way to make it map normal text to braille dots, and the documentation is really bad. But I know that it has the capabilities to do what I want. Will look at it again someday. --Head 00:21, 19 May 2011 (BST)
Laser cutting
As this is a non-commercial project, laser cutting is kindly provided for free at the Fab Lab of RWTH Aachen University. The most limiting factor is time: when lasering flamable materials, the process has to be supervised all the time. Furthermore, we cannot block the laser cutter for several hours, as other projects depend on it as well.
For the proof-of-concept map, we cut the Aachen map on a 22.5 cm x 17 cm area (a bit larger than DIN A5/letter C). I wanted to scale it up to DIN A4, but we couldn't scale it because it was a PNG file. The laser cutter can fit boards of up to ca. DIN A3. We used de:Finnpappe (a very hard type of cardboard). The cardboard is 3 mm thick, and it was graved up to 1 mm deep. Cutting took about 40 minutes.
Conclusion and future work
- It is easy to feel streets and places (black on gray). However, it is near impossible to feel houses (white on gray). Graving deeper than 1 mm would be possible, but production time would increase accordingly. We need to play around with colors and settings, I'm sure that it is possible to achieve a map with three different heights (black/gray/white as 1 mm / 0.5 mm / 0 mm deep).
- A house is not an information of value to blind persons. Only the entry with the house number is if interest. Lulu-Ann
- 1 pixel wide lines are to be avoided. The grass texture (1x4 px areas) can be felt, but the "blades of grass" break extremely fast when you touch them. The same is true for 1 px borders. I have changed rendering rules and textures accordingly.
- Finnpappe is not a perfect material for tactile maps. It feels a bit sticky, and I guess this is hindering when trying to feel details. I need confirmation from a blind person, though. PMMA (plexiglas) might be more suitable; the laser cutter can handle it, too.
- I don't know Finnpappe, but Braille reads better when the material is not too polished I was told. Lulu-Ann
- I tried to get closer to hemisphere dots in Braille text by adding a text-halo rule in Maperitive. This didn't work well, because it made the dots wider, thereby putting them closer together to each other. This probably makes them hard/impossible to read. I don't have any other idea how to achieve hemispheres. I need info from a blind person: is it much harder to read Braille when the dots are cylinders instead of hemispheres?
- Have you thought about pyramids or cones? Hemispheres are easy to emboss, not necessarily easy to read, I guess. Lulu-Ann
- Not necessarily harder to read, but slower: Fingers do not glide over hemispheres as fast as they to over cylinders.
- Fast gliding also means easy missing... Lulu-Ann
- The map contains no Points of Interests (e.g. phone booths, toilets, ...), and no representations of things like tactile paving, vibrating traffic signals etc. We need to find out whether there are standardized ways of representing them.
- My research so far is: There are undocumented best practices, but no standards for tactile maps in general.
- There are esperically no common icons or textures for objects only OSM knows and commercial maps do not offer, like acoustic traffic signals or tactile paving. Lulu-Ann
- As we now know that we have the technical ability to create maps with a laser cutter, it is time to involve a visually impaired person in the design process. I'll try to get in contact with one via RWTH Aachen University or the blind school in Aachen-Laurensberg.
- You also might want to get in contact with a trainer for blind persons who teaches with tactile maps (Mobilitätstrainer) . Contact your local Krankenkasse or Blindenverband to find one. --Lulu-Ann 20:47, 15 May 2011 (BST)
- Are there plans to render the braille street name in the street (with curves, like Osmarender does? Lulu-Ann
Download
You can download the current version of the Maperitive rendering rules here. In Maperitive, enable them with the command: use-ruleset location=YOUR_DIRECTORY/braille.mrules as-alias=braille