From 9af10c2b7851e74f0f67fbbbcb2c299f566285f9 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Thu, 5 May 2022 12:39:34 +0200 Subject: remove map sketches and added technical operation summary + discussion notes --- maps/map1.map | Bin 84 -> 0 bytes maps/map1.pdf | Bin 78962 -> 0 bytes maps/map1.svg | 1558 ------------------------------------------------------ maps/map1.txt | 16 - maps/map2.map | Bin 17 -> 0 bytes maps/map2.txt | 5 - maps/mapgen.py | 31 -- maps/mappdf.py | 56 -- maps/mapprint.py | 24 - maps/readme.md | 45 -- maps/tiles/0.svg | 3 - maps/tiles/1.svg | 11 - maps/tiles/2.svg | 11 - maps/tiles/3.svg | 11 - maps/tiles/4.svg | 11 - maps/tiles/5.svg | 11 - maps/tiles/6.svg | 11 - maps/tiles/7.svg | 11 - maps/tiles/8.svg | 11 - maps/tiles/9.svg | 11 - maps/tiles/a.svg | 11 - maps/tiles/b.svg | 11 - maps/tiles/c.svg | 11 - maps/tiles/d.svg | 11 - maps/tiles/e.svg | 11 - maps/tiles/f.svg | 11 - readme.md | 49 ++ 27 files changed, 49 insertions(+), 1903 deletions(-) delete mode 100644 maps/map1.map delete mode 100644 maps/map1.pdf delete mode 100644 maps/map1.svg delete mode 100644 maps/map1.txt delete mode 100644 maps/map2.map delete mode 100644 maps/map2.txt delete mode 100755 maps/mapgen.py delete mode 100755 maps/mappdf.py delete mode 100755 maps/mapprint.py delete mode 100644 maps/readme.md delete mode 100644 maps/tiles/0.svg delete mode 100644 maps/tiles/1.svg delete mode 100644 maps/tiles/2.svg delete mode 100644 maps/tiles/3.svg delete mode 100644 maps/tiles/4.svg delete mode 100644 maps/tiles/5.svg delete mode 100644 maps/tiles/6.svg delete mode 100644 maps/tiles/7.svg delete mode 100644 maps/tiles/8.svg delete mode 100644 maps/tiles/9.svg delete mode 100644 maps/tiles/a.svg delete mode 100644 maps/tiles/b.svg delete mode 100644 maps/tiles/c.svg delete mode 100644 maps/tiles/d.svg delete mode 100644 maps/tiles/e.svg delete mode 100644 maps/tiles/f.svg diff --git a/maps/map1.map b/maps/map1.map deleted file mode 100644 index 980c069..0000000 Binary files a/maps/map1.map and /dev/null differ diff --git a/maps/map1.pdf b/maps/map1.pdf deleted file mode 100644 index a87deef..0000000 Binary files a/maps/map1.pdf and /dev/null differ diff --git a/maps/map1.svg b/maps/map1.svg deleted file mode 100644 index 4b6e46b..0000000 --- a/maps/map1.svg +++ /dev/null @@ -1,1558 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/maps/map1.txt b/maps/map1.txt deleted file mode 100644 index 37ab452..0000000 --- a/maps/map1.txt +++ /dev/null @@ -1,16 +0,0 @@ -c559e59c98 -ac16f163aa -aac92c553a -6ba6969c9a -c369ac7be3 -69cba2c3e9 -c3aae9ac3a -2c3a26361a -c38a8c559a -6d3673c532 -cfddddf988 -efff777baa -eff3000aaa -eff9000efb -efffdddbaa -6777777322 diff --git a/maps/map2.map b/maps/map2.map deleted file mode 100644 index c7777c9..0000000 Binary files a/maps/map2.map and /dev/null differ diff --git a/maps/map2.txt b/maps/map2.txt deleted file mode 100644 index 6465c5a..0000000 --- a/maps/map2.txt +++ /dev/null @@ -1,5 +0,0 @@ -c5559 -ac59a -aa8aa -a63aa -6553a diff --git a/maps/mapgen.py b/maps/mapgen.py deleted file mode 100755 index a7e6817..0000000 --- a/maps/mapgen.py +++ /dev/null @@ -1,31 +0,0 @@ -import sys -from struct import pack - -def mapgen(filename): - file = open(filename, 'r') - target = open(filename + '.map', 'wb') - contents = file.read() - - lines = contents.strip().split("\n") - target.write(pack('>H', len(lines[0]))) - target.write(pack('>H', len(lines))) - - first_nibble = False - temp_byte = 0 - for char in contents.replace('\n', '').strip(): - first_nibble = not first_nibble - num = int(char, 16) - temp_byte |= num << (4 * first_nibble) - if not first_nibble: - target.write(pack('B', temp_byte)) - temp_byte = 0 - if first_nibble: target.write(pack('B', temp_byte)) - - file.close() - target.close() - -if __name__ == "__main__": - if len(sys.argv) > 1: - mapgen(sys.argv[1]) - else: - exit(1) diff --git a/maps/mappdf.py b/maps/mappdf.py deleted file mode 100755 index 4f4a45d..0000000 --- a/maps/mappdf.py +++ /dev/null @@ -1,56 +0,0 @@ -import sys -from struct import unpack -import svgutils.transform as sg -import svgutils.compose as sc - -SVG_TILE_SIZE = 24 -DPI = 96 -INCH = 2.54 -ROBOT_SIZE = 9.5 -ROBOT_SIZE_UNIT = "cm" - -RESIZE_FACTOR = ROBOT_SIZE / (SVG_TILE_SIZE / DPI * INCH) - -def read_tiles(): - tiles = [] - for x in range(16): - tile = open(f"./tiles/{x:x}.svg", "r") - tiles.append(tile.read()) - tile.close() - return tiles - -def mappdf(filename): - file = open(filename, 'rb') - contents = file.read() - file.close() - tiles = read_tiles() - - width, height = unpack('>HH', contents[0:4]) - - target = sg.SVGFigure() - target.set_size((f"{width * SVG_TILE_SIZE}px", f"{height * SVG_TILE_SIZE}px")) - - for y in range(height): - for x in range(width): - nibble = x + y * width - byte = int(nibble / 2) - shift = byte * 2 - nibble + 1 - num = (contents[4 + byte] & (0xf << 4 * shift)) >> 4 * shift - - tile = sg.fromstring(tiles[num]).getroot() - tile.moveto(x * SVG_TILE_SIZE, y * SVG_TILE_SIZE) - target.append(tile) - - target.save(f"{filename}.svg") - target_scaled = sc.SVG(f"{filename}.svg") - target_scaled.scale(RESIZE_FACTOR) - target = sc.Figure(width * SVG_TILE_SIZE * RESIZE_FACTOR, height * SVG_TILE_SIZE * RESIZE_FACTOR, target_scaled) - target.save(f"{filename}.svg") - print(f"inkscape --export-pdf={filename}.pdf {filename}.svg") - - -if __name__ == "__main__": - if len(sys.argv) > 1: - mappdf(sys.argv[1]) - else: - exit(1) diff --git a/maps/mapprint.py b/maps/mapprint.py deleted file mode 100755 index 4b56db6..0000000 --- a/maps/mapprint.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys -from struct import unpack - -def mapprint(filename): - file = open(filename, 'rb') - contents = file.read() - file.close() - - width, height = unpack('>HH', contents[0:4]) - - for y in range(height): - for x in range(width): - nibble = x + y * width - byte = int(nibble / 2) - shift = byte * 2 - nibble + 1 - num = (contents[4 + byte] & (0xf << 4 * shift)) >> 4 * shift - print(" ─│┘──└┴│┐│┤┌┬├┼"[num], end='') - print("\n", end='') - -if __name__ == "__main__": - if len(sys.argv) > 1: - mapprint(sys.argv[1]) - else: - exit(1) diff --git a/maps/readme.md b/maps/readme.md deleted file mode 100644 index 2629b4a..0000000 --- a/maps/readme.md +++ /dev/null @@ -1,45 +0,0 @@ -# maps - -this directory contains map files. a .map file contains a binary representation -of a maze, and can be sent to the robot over the wireless serial connection. -map files have the following structure: first the width of the map as an -unsigned 16-bit integer, then the height of the map also as an unsigned 16-bit -integer. the rest of the file is the map content in reading order, where each -byte contains two (nibble) map tiles. tiles are stored in the most significant -portion of the byte first, so the last byte of a map file containing an uneven -amount of tiles would look like `0x?0`. - -example tile: - -``` -┌───────┐ ┌───┬───┐ -│ b │ │ │ │ -│ a c │ │ └───┤ -│ d │ │ │ -└───────┘ └───────┘ - 0bDCBA 0b0110 (0x6) -``` - -garbage python scripts for generating and viewing these maps are included. -[this](https://www.figma.com/file/GUKV1am9sqWpPoes9h8Ram/robotrun?node-id=0%3A1) -figma file can be used to create a map, and then read out the hexadecimal -notation for the map. google drive ocr works well enough to read out the red -characters if you turn off path visibility in the figma document. figma also -allows pdf export so you can print the maps, but the tiles are 24x24 pixels, -not robot-sized (one tile is supposed to have about the same width and height -as the robot's diameter). - -## exporting maps as pdf or svg - -```sh -# generate svg file -python3 mappdf.py [file] - -# render svg as pdf -inkscape --export-pdf=map.pdf [file].svg - -# (optional) convert to tiles for printing at home -# loop up map size using pdfinfo on map.pdf file -pdfposter map.pdf tiles.pdf -m a4 -p [map size] -``` - diff --git a/maps/tiles/0.svg b/maps/tiles/0.svg deleted file mode 100644 index fcdfaaa..0000000 --- a/maps/tiles/0.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/maps/tiles/1.svg b/maps/tiles/1.svg deleted file mode 100644 index 171df35..0000000 --- a/maps/tiles/1.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/2.svg b/maps/tiles/2.svg deleted file mode 100644 index e3eb06b..0000000 --- a/maps/tiles/2.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/3.svg b/maps/tiles/3.svg deleted file mode 100644 index 1e0dbad..0000000 --- a/maps/tiles/3.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/4.svg b/maps/tiles/4.svg deleted file mode 100644 index a85e022..0000000 --- a/maps/tiles/4.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/5.svg b/maps/tiles/5.svg deleted file mode 100644 index fdbcd25..0000000 --- a/maps/tiles/5.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/6.svg b/maps/tiles/6.svg deleted file mode 100644 index 181d7e2..0000000 --- a/maps/tiles/6.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/7.svg b/maps/tiles/7.svg deleted file mode 100644 index ca8166b..0000000 --- a/maps/tiles/7.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/8.svg b/maps/tiles/8.svg deleted file mode 100644 index 9da7e0d..0000000 --- a/maps/tiles/8.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/9.svg b/maps/tiles/9.svg deleted file mode 100644 index d499439..0000000 --- a/maps/tiles/9.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/a.svg b/maps/tiles/a.svg deleted file mode 100644 index e787a43..0000000 --- a/maps/tiles/a.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/b.svg b/maps/tiles/b.svg deleted file mode 100644 index 9cd38e6..0000000 --- a/maps/tiles/b.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/c.svg b/maps/tiles/c.svg deleted file mode 100644 index 2f5d16b..0000000 --- a/maps/tiles/c.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/d.svg b/maps/tiles/d.svg deleted file mode 100644 index 1ad64ea..0000000 --- a/maps/tiles/d.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/e.svg b/maps/tiles/e.svg deleted file mode 100644 index 9c9759a..0000000 --- a/maps/tiles/e.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/maps/tiles/f.svg b/maps/tiles/f.svg deleted file mode 100644 index a13b768..0000000 --- a/maps/tiles/f.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/readme.md b/readme.md index 7e3946b..9f96a8a 100644 --- a/readme.md +++ b/readme.md @@ -14,6 +14,55 @@ gebruikte externe libraries: |-|-| |[yan9a/serial](https://github.com/yan9a/serial)|cross-compatibiliteit voor seriële poorten lezen/schrijven voor windows en linux| +## samenvatting werking + +Globaal gezien draait de robot altijd in een van twee 'standen'. De eerste +stand is voor het doolhof-gedeelte van de kaart, en de tweede is voor het +warenhuis-gedeelte. Tijdens de assessment kan het zijn dat de robot opgetild +wordt en ergens anders wordt neergezet in het doolhof gedeelte, en hier moet de +robot tegen kunnen. Om het doolhof op te lossen wordt of de rechterhandregel of +de linkerhandregel gebruikt, zodat de robot altijd een uitgang van het doolhof +kan vinden, zonder dat de robot zijn eigen positie binnen het doolhof hoeft te +weten, of überhaupt bewust hoeft te zijn van de lay-out van het doolhof zelf. +De overgang tussen het doolhof en het warenhuis wordt aangegeven met een soort +zebrapad die dezelfde breedte als de rest van de lijnen heeft. Vooraf wordt via +de client aangegeven aan de robot hoe groot het warenhuis is, en waar de in- en +uitgangen van het warenhuis zitten, zodat de robot zelfstandig naar het +afleverpunt en het oplaadstation kan rijden zodra alle bestellingen opgehaald +zijn. De volgende specificaties moeten nog exact afgesproken worden voordat er +een kaart gemaakt kan worden: + +- breedte van de lijn +- tegelgrootte (binnen warenhuis) +- exacte afmetingen van, en de hoeveelheid van de strepen in het zebrapad + +De lijnen van het doolhof hoeven niet te voldoen aan de tegelgrootte, maar de +in- en uitgangen moeten wel een rechte overloop hebben op het +warenhuis-gedeelte. + +## te bespreken + +- Consequent snake case gebruiken inplaats van camel case +- Hoe wordt de controle over de robot 'overhandigd' tussen verschillende + standen? +- Hoe weet de robot via welke in-/uitgang hij het warenhuis in/uit rijdt? + (barcode-scanner implementeren?) +- Globale status met alle sensor data en andere diagnostische info in een + struct zetten en toeganklijk maken vanuit aansturingsstanden? +- Middleware maken zodat er een soort pseudo-supervisor draait die het + overschakelen tussen standen kan beheren, en alle sensordata update in de + globale status struct? +- Misschien een globaal software diagram maken? +- Is het slim om de test stand voor de natte vloer (spinnen) ook een losse + 'stand' te maken? + - Noodstop ook een stand maken? +- Welke software wordt er gebruikt om de kaart te maken? + (moet met exacte afstanden kunnen werken, lieft in centimeters; als het kan + ook fijn om in samen te werken) + - Figma? + - Adobe Illustrator? + - MS Visio? + ## noob hoek hier wat korte uitleg over dingen die niet zijn uitgelegd in vorige blokken van -- cgit v1.2.3