aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--.gitmodules27
-rw-r--r--RealTime_pictures/rtCorner.class/00000.jpgbin0 -> 7551 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00001.jpgbin0 -> 7317 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00002.jpgbin0 -> 7301 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00003.jpgbin0 -> 6684 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00004.jpgbin0 -> 6520 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00005.jpgbin0 -> 7521 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00006.jpgbin0 -> 13805 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00007.jpgbin0 -> 13526 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00008.jpgbin0 -> 13310 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00009.jpgbin0 -> 12758 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00010.jpgbin0 -> 12662 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00011.jpgbin0 -> 12478 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00012.jpgbin0 -> 11974 bytes
-rw-r--r--RealTime_pictures/rtCorner.class/00013.jpgbin0 -> 15354 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00000.jpgbin0 -> 8258 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00001.jpgbin0 -> 7678 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00002.jpgbin0 -> 7789 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00003.jpgbin0 -> 12968 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00004.jpgbin0 -> 13341 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00005.jpgbin0 -> 14312 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00006.jpgbin0 -> 14386 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00007.jpgbin0 -> 16976 bytes
-rw-r--r--RealTime_pictures/rtIntersection.class/00008.jpgbin0 -> 14273 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00000.jpgbin0 -> 10879 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00001.jpgbin0 -> 10915 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00002.jpgbin0 -> 10925 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00003.jpgbin0 -> 9124 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00004.jpgbin0 -> 9062 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00005.jpgbin0 -> 10978 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00006.jpgbin0 -> 10785 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00007.jpgbin0 -> 8198 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00008.jpgbin0 -> 7884 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00009.jpgbin0 -> 7560 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00010.jpgbin0 -> 7445 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00011.jpgbin0 -> 18652 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00012.jpgbin0 -> 15328 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00013.jpgbin0 -> 15455 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00014.jpgbin0 -> 11357 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00015.jpgbin0 -> 10951 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00016.jpgbin0 -> 7599 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00017.jpgbin0 -> 7705 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00018.jpgbin0 -> 16231 bytes
-rw-r--r--RealTime_pictures/rtStraightLines.class/00019.jpgbin0 -> 16725 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00000.jpgbin0 -> 12378 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00001.jpgbin0 -> 12925 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00002.jpgbin0 -> 11356 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00003.jpgbin0 -> 8574 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00004.jpgbin0 -> 12059 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00005.jpgbin0 -> 14825 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00006.jpgbin0 -> 13316 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00007.jpgbin0 -> 10868 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00008.jpgbin0 -> 15580 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00009.jpgbin0 -> 12635 bytes
-rw-r--r--RealTime_pictures/rtWrongCorner.class/00010.jpgbin0 -> 12163 bytes
-rw-r--r--RealTime_pictures/rtWrongIntersection.class/00000.jpgbin0 -> 12658 bytes
-rw-r--r--RealTime_pictures/rtWrongIntersection.class/00001.jpgbin0 -> 13233 bytes
-rw-r--r--RealTime_pictures/rtWrongIntersection.class/00002.jpgbin0 -> 11826 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00000.jpgbin0 -> 13483 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00001.jpgbin0 -> 17200 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00002.jpgbin0 -> 13989 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00003.jpgbin0 -> 13768 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00004.jpgbin0 -> 13791 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00005.jpgbin0 -> 13563 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00006.jpgbin0 -> 16160 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00007.jpgbin0 -> 11266 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00008.jpgbin0 -> 12132 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00009.jpgbin0 -> 12170 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00010.jpgbin0 -> 13479 bytes
-rw-r--r--RealTime_pictures/rtWrongStraightLines.class/00011.jpgbin0 -> 11710 bytes
-rw-r--r--assets/.gitignore1
-rw-r--r--assets/LSD_straightLines_Pic_0.bmpbin0 -> 72054 bytes
-rw-r--r--assets/LSD_straightLines_Pic_1.bmpbin0 -> 72054 bytes
-rw-r--r--assets/architecture-level-0.pdfbin0 -> 6094 bytes
-rw-r--r--assets/figs.drawio47
-rw-r--r--assets/hough_straightLines_Pic_0.bmpbin0 -> 76854 bytes
-rw-r--r--assets/hough_straightLines_Pic_1.bmpbin0 -> 76854 bytes
-rw-r--r--doc/.gitignore2
-rw-r--r--doc/base.tex24
-rw-r--r--doc/dui.md314
-rw-r--r--doc/makefile14
-rw-r--r--doc/refs.bib0
-rw-r--r--readme.md (renamed from README.md)0
-rw-r--r--zumo/.gitignore4
m---------zumo/lib/ArduinoCore-avr0
m---------zumo/lib/fastgpio-arduino0
m---------zumo/lib/pololu-buzzer-arduino0
m---------zumo/lib/pololu-hd44780-arduino0
m---------zumo/lib/pololu-menu-arduino0
m---------zumo/lib/pololu-oled-arduino0
m---------zumo/lib/pushbutton-arduino0
m---------zumo/lib/usb-pause-arduino0
m---------zumo/lib/zumo-32u4-arduino-library0
-rw-r--r--zumo/makefile74
-rw-r--r--zumo/zumo.mk73
96 files changed, 387 insertions, 197 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3f4b7ab
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+assets/LSD_straightLines_Pic_0.png
+assets/LSD_straightLines_Pic_1.png
+assets/hough_straightLines_Pic_0.png
+assets/hough_straightLines_Pic_1.png
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index a60d698..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,27 +0,0 @@
-[submodule "zumo/lib/zumo-32u4-arduino-library"]
- path = zumo/lib/zumo-32u4-arduino-library
- url = https://github.com/pololu/zumo-32u4-arduino-library
-[submodule "zumo/lib/fastgpio-arduino"]
- path = zumo/lib/fastgpio-arduino
- url = https://github.com/pololu/fastgpio-arduino
-[submodule "zumo/lib/pushbutton-arduino"]
- path = zumo/lib/pushbutton-arduino
- url = https://github.com/pololu/pushbutton-arduino
-[submodule "zumo/lib/ArduinoCore-avr"]
- path = zumo/lib/ArduinoCore-avr
- url = https://github.com/arduino/ArduinoCore-avr
-[submodule "zumo/lib/usb-pause-arduino"]
- path = zumo/lib/usb-pause-arduino
- url = https://github.com/pololu/usb-pause-arduino
-[submodule "zumo/lib/pololu-buzzer-arduino"]
- path = zumo/lib/pololu-buzzer-arduino
- url = https://github.com/pololu/pololu-buzzer-arduino
-[submodule "zumo/lib/pololu-hd44780-arduino"]
- path = zumo/lib/pololu-hd44780-arduino
- url = https://github.com/pololu/pololu-hd44780-arduino
-[submodule "zumo/lib/pololu-menu-arduino"]
- path = zumo/lib/pololu-menu-arduino
- url = https://github.com/pololu/pololu-menu-arduino
-[submodule "zumo/lib/pololu-oled-arduino"]
- path = zumo/lib/pololu-oled-arduino
- url = https://github.com/pololu/pololu-oled-arduino
diff --git a/RealTime_pictures/rtCorner.class/00000.jpg b/RealTime_pictures/rtCorner.class/00000.jpg
new file mode 100644
index 0000000..884aa69
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00000.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00001.jpg b/RealTime_pictures/rtCorner.class/00001.jpg
new file mode 100644
index 0000000..3398cc4
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00001.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00002.jpg b/RealTime_pictures/rtCorner.class/00002.jpg
new file mode 100644
index 0000000..01662f9
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00002.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00003.jpg b/RealTime_pictures/rtCorner.class/00003.jpg
new file mode 100644
index 0000000..5cee200
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00003.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00004.jpg b/RealTime_pictures/rtCorner.class/00004.jpg
new file mode 100644
index 0000000..4be7be9
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00004.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00005.jpg b/RealTime_pictures/rtCorner.class/00005.jpg
new file mode 100644
index 0000000..2347c3a
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00005.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00006.jpg b/RealTime_pictures/rtCorner.class/00006.jpg
new file mode 100644
index 0000000..6252806
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00006.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00007.jpg b/RealTime_pictures/rtCorner.class/00007.jpg
new file mode 100644
index 0000000..344d5f3
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00007.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00008.jpg b/RealTime_pictures/rtCorner.class/00008.jpg
new file mode 100644
index 0000000..92ecbf0
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00008.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00009.jpg b/RealTime_pictures/rtCorner.class/00009.jpg
new file mode 100644
index 0000000..2956e4a
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00009.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00010.jpg b/RealTime_pictures/rtCorner.class/00010.jpg
new file mode 100644
index 0000000..f62bed6
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00010.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00011.jpg b/RealTime_pictures/rtCorner.class/00011.jpg
new file mode 100644
index 0000000..d09c141
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00011.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00012.jpg b/RealTime_pictures/rtCorner.class/00012.jpg
new file mode 100644
index 0000000..8803827
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00012.jpg
Binary files differ
diff --git a/RealTime_pictures/rtCorner.class/00013.jpg b/RealTime_pictures/rtCorner.class/00013.jpg
new file mode 100644
index 0000000..7ec2692
--- /dev/null
+++ b/RealTime_pictures/rtCorner.class/00013.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00000.jpg b/RealTime_pictures/rtIntersection.class/00000.jpg
new file mode 100644
index 0000000..9492866
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00000.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00001.jpg b/RealTime_pictures/rtIntersection.class/00001.jpg
new file mode 100644
index 0000000..43b0840
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00001.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00002.jpg b/RealTime_pictures/rtIntersection.class/00002.jpg
new file mode 100644
index 0000000..4e47b44
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00002.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00003.jpg b/RealTime_pictures/rtIntersection.class/00003.jpg
new file mode 100644
index 0000000..fab7ba2
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00003.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00004.jpg b/RealTime_pictures/rtIntersection.class/00004.jpg
new file mode 100644
index 0000000..4abc6b5
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00004.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00005.jpg b/RealTime_pictures/rtIntersection.class/00005.jpg
new file mode 100644
index 0000000..9f3b772
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00005.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00006.jpg b/RealTime_pictures/rtIntersection.class/00006.jpg
new file mode 100644
index 0000000..faf18c0
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00006.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00007.jpg b/RealTime_pictures/rtIntersection.class/00007.jpg
new file mode 100644
index 0000000..0bd1a42
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00007.jpg
Binary files differ
diff --git a/RealTime_pictures/rtIntersection.class/00008.jpg b/RealTime_pictures/rtIntersection.class/00008.jpg
new file mode 100644
index 0000000..621b9cb
--- /dev/null
+++ b/RealTime_pictures/rtIntersection.class/00008.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00000.jpg b/RealTime_pictures/rtStraightLines.class/00000.jpg
new file mode 100644
index 0000000..a1dcf45
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00000.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00001.jpg b/RealTime_pictures/rtStraightLines.class/00001.jpg
new file mode 100644
index 0000000..2600e8c
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00001.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00002.jpg b/RealTime_pictures/rtStraightLines.class/00002.jpg
new file mode 100644
index 0000000..3862ec1
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00002.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00003.jpg b/RealTime_pictures/rtStraightLines.class/00003.jpg
new file mode 100644
index 0000000..28e284f
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00003.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00004.jpg b/RealTime_pictures/rtStraightLines.class/00004.jpg
new file mode 100644
index 0000000..dfb5be6
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00004.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00005.jpg b/RealTime_pictures/rtStraightLines.class/00005.jpg
new file mode 100644
index 0000000..8ee04d3
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00005.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00006.jpg b/RealTime_pictures/rtStraightLines.class/00006.jpg
new file mode 100644
index 0000000..6adc035
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00006.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00007.jpg b/RealTime_pictures/rtStraightLines.class/00007.jpg
new file mode 100644
index 0000000..87f223d
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00007.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00008.jpg b/RealTime_pictures/rtStraightLines.class/00008.jpg
new file mode 100644
index 0000000..b14554e
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00008.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00009.jpg b/RealTime_pictures/rtStraightLines.class/00009.jpg
new file mode 100644
index 0000000..c5b474b
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00009.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00010.jpg b/RealTime_pictures/rtStraightLines.class/00010.jpg
new file mode 100644
index 0000000..d3cafcf
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00010.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00011.jpg b/RealTime_pictures/rtStraightLines.class/00011.jpg
new file mode 100644
index 0000000..c1f8fcf
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00011.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00012.jpg b/RealTime_pictures/rtStraightLines.class/00012.jpg
new file mode 100644
index 0000000..7980cf8
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00012.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00013.jpg b/RealTime_pictures/rtStraightLines.class/00013.jpg
new file mode 100644
index 0000000..da59693
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00013.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00014.jpg b/RealTime_pictures/rtStraightLines.class/00014.jpg
new file mode 100644
index 0000000..56f37de
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00014.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00015.jpg b/RealTime_pictures/rtStraightLines.class/00015.jpg
new file mode 100644
index 0000000..9fe7082
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00015.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00016.jpg b/RealTime_pictures/rtStraightLines.class/00016.jpg
new file mode 100644
index 0000000..6c62b59
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00016.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00017.jpg b/RealTime_pictures/rtStraightLines.class/00017.jpg
new file mode 100644
index 0000000..23596e6
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00017.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00018.jpg b/RealTime_pictures/rtStraightLines.class/00018.jpg
new file mode 100644
index 0000000..a66742e
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00018.jpg
Binary files differ
diff --git a/RealTime_pictures/rtStraightLines.class/00019.jpg b/RealTime_pictures/rtStraightLines.class/00019.jpg
new file mode 100644
index 0000000..23af171
--- /dev/null
+++ b/RealTime_pictures/rtStraightLines.class/00019.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00000.jpg b/RealTime_pictures/rtWrongCorner.class/00000.jpg
new file mode 100644
index 0000000..9c1b0e1
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00000.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00001.jpg b/RealTime_pictures/rtWrongCorner.class/00001.jpg
new file mode 100644
index 0000000..2ec349b
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00001.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00002.jpg b/RealTime_pictures/rtWrongCorner.class/00002.jpg
new file mode 100644
index 0000000..c150ac6
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00002.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00003.jpg b/RealTime_pictures/rtWrongCorner.class/00003.jpg
new file mode 100644
index 0000000..419f645
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00003.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00004.jpg b/RealTime_pictures/rtWrongCorner.class/00004.jpg
new file mode 100644
index 0000000..3b37b05
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00004.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00005.jpg b/RealTime_pictures/rtWrongCorner.class/00005.jpg
new file mode 100644
index 0000000..c1a0e63
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00005.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00006.jpg b/RealTime_pictures/rtWrongCorner.class/00006.jpg
new file mode 100644
index 0000000..28964c5
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00006.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00007.jpg b/RealTime_pictures/rtWrongCorner.class/00007.jpg
new file mode 100644
index 0000000..a7fd550
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00007.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00008.jpg b/RealTime_pictures/rtWrongCorner.class/00008.jpg
new file mode 100644
index 0000000..6ea7ffe
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00008.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00009.jpg b/RealTime_pictures/rtWrongCorner.class/00009.jpg
new file mode 100644
index 0000000..44183bf
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00009.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongCorner.class/00010.jpg b/RealTime_pictures/rtWrongCorner.class/00010.jpg
new file mode 100644
index 0000000..ca5786f
--- /dev/null
+++ b/RealTime_pictures/rtWrongCorner.class/00010.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongIntersection.class/00000.jpg b/RealTime_pictures/rtWrongIntersection.class/00000.jpg
new file mode 100644
index 0000000..cb5e29e
--- /dev/null
+++ b/RealTime_pictures/rtWrongIntersection.class/00000.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongIntersection.class/00001.jpg b/RealTime_pictures/rtWrongIntersection.class/00001.jpg
new file mode 100644
index 0000000..a316eb7
--- /dev/null
+++ b/RealTime_pictures/rtWrongIntersection.class/00001.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongIntersection.class/00002.jpg b/RealTime_pictures/rtWrongIntersection.class/00002.jpg
new file mode 100644
index 0000000..f4275fb
--- /dev/null
+++ b/RealTime_pictures/rtWrongIntersection.class/00002.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00000.jpg b/RealTime_pictures/rtWrongStraightLines.class/00000.jpg
new file mode 100644
index 0000000..0ce2ce0
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00000.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00001.jpg b/RealTime_pictures/rtWrongStraightLines.class/00001.jpg
new file mode 100644
index 0000000..457bd03
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00001.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00002.jpg b/RealTime_pictures/rtWrongStraightLines.class/00002.jpg
new file mode 100644
index 0000000..70edd62
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00002.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00003.jpg b/RealTime_pictures/rtWrongStraightLines.class/00003.jpg
new file mode 100644
index 0000000..55cb071
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00003.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00004.jpg b/RealTime_pictures/rtWrongStraightLines.class/00004.jpg
new file mode 100644
index 0000000..ff56176
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00004.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00005.jpg b/RealTime_pictures/rtWrongStraightLines.class/00005.jpg
new file mode 100644
index 0000000..c7a8f8a
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00005.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00006.jpg b/RealTime_pictures/rtWrongStraightLines.class/00006.jpg
new file mode 100644
index 0000000..3b64636
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00006.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00007.jpg b/RealTime_pictures/rtWrongStraightLines.class/00007.jpg
new file mode 100644
index 0000000..3cf1031
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00007.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00008.jpg b/RealTime_pictures/rtWrongStraightLines.class/00008.jpg
new file mode 100644
index 0000000..ec748ba
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00008.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00009.jpg b/RealTime_pictures/rtWrongStraightLines.class/00009.jpg
new file mode 100644
index 0000000..62e4096
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00009.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00010.jpg b/RealTime_pictures/rtWrongStraightLines.class/00010.jpg
new file mode 100644
index 0000000..e75983e
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00010.jpg
Binary files differ
diff --git a/RealTime_pictures/rtWrongStraightLines.class/00011.jpg b/RealTime_pictures/rtWrongStraightLines.class/00011.jpg
new file mode 100644
index 0000000..cf3a53f
--- /dev/null
+++ b/RealTime_pictures/rtWrongStraightLines.class/00011.jpg
Binary files differ
diff --git a/assets/.gitignore b/assets/.gitignore
new file mode 100644
index 0000000..cac82ea
--- /dev/null
+++ b/assets/.gitignore
@@ -0,0 +1 @@
+.$*
diff --git a/assets/LSD_straightLines_Pic_0.bmp b/assets/LSD_straightLines_Pic_0.bmp
new file mode 100644
index 0000000..54018e2
--- /dev/null
+++ b/assets/LSD_straightLines_Pic_0.bmp
Binary files differ
diff --git a/assets/LSD_straightLines_Pic_1.bmp b/assets/LSD_straightLines_Pic_1.bmp
new file mode 100644
index 0000000..6a7832f
--- /dev/null
+++ b/assets/LSD_straightLines_Pic_1.bmp
Binary files differ
diff --git a/assets/architecture-level-0.pdf b/assets/architecture-level-0.pdf
new file mode 100644
index 0000000..48f00a6
--- /dev/null
+++ b/assets/architecture-level-0.pdf
Binary files differ
diff --git a/assets/figs.drawio b/assets/figs.drawio
new file mode 100644
index 0000000..e7c4c8e
--- /dev/null
+++ b/assets/figs.drawio
@@ -0,0 +1,47 @@
+<mxfile host="Electron" modified="2023-05-21T10:31:13.607Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="R9LFAPF_hEjrUPbKqP4R" version="21.2.8" type="device">
+ <diagram name="architecture-level-0" id="JjuOE3DOjDeLsN0qBT10">
+ <mxGraphModel dx="566" dy="347" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-1" value="Arduino Nicla Vision" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="280" y="40" width="80" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="8eRd1MbYxd4dPG-S6lUb-2" target="8eRd1MbYxd4dPG-S6lUb-4">
+ <mxGeometry relative="1" as="geometry">
+ <Array as="points">
+ <mxPoint x="150" y="60" />
+ <mxPoint x="150" y="60" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="8eRd1MbYxd4dPG-S6lUb-2" target="8eRd1MbYxd4dPG-S6lUb-3">
+ <mxGeometry relative="1" as="geometry">
+ <Array as="points">
+ <mxPoint x="150" y="120" />
+ <mxPoint x="150" y="120" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;" edge="1" parent="1" source="8eRd1MbYxd4dPG-S6lUb-2" target="8eRd1MbYxd4dPG-S6lUb-1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-2" value="Pololu Zumo 32U4" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="160" y="40" width="80" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-3" value="Tracks" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="40" y="100" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-4" value="OLED display" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="40" y="40" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="8eRd1MbYxd4dPG-S6lUb-6" target="8eRd1MbYxd4dPG-S6lUb-1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="8eRd1MbYxd4dPG-S6lUb-6" value="2MP Camera" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="380" y="70" width="100" height="40" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+</mxfile>
diff --git a/assets/hough_straightLines_Pic_0.bmp b/assets/hough_straightLines_Pic_0.bmp
new file mode 100644
index 0000000..00a5263
--- /dev/null
+++ b/assets/hough_straightLines_Pic_0.bmp
Binary files differ
diff --git a/assets/hough_straightLines_Pic_1.bmp b/assets/hough_straightLines_Pic_1.bmp
new file mode 100644
index 0000000..d72285d
--- /dev/null
+++ b/assets/hough_straightLines_Pic_1.bmp
Binary files differ
diff --git a/doc/.gitignore b/doc/.gitignore
index 25dcb3b..e5139ef 100644
--- a/doc/.gitignore
+++ b/doc/.gitignore
@@ -12,6 +12,8 @@
*.toc
*.synctex(busy)
*.md.tex
+*.lof
+*.lot
# ignore output files
*.pdf
diff --git a/doc/base.tex b/doc/base.tex
index 9c1c908..edadce3 100644
--- a/doc/base.tex
+++ b/doc/base.tex
@@ -12,10 +12,13 @@
\usepackage{booktabs}
\usepackage{needspace}
\usepackage{hyperref}
-% \usepackage[backend=biber,
-% bibencoding=utf8,
-% style=apa
-% ]{biblatex}
+\usepackage{graphicx}
+\usepackage[toc]{glossaries}
+\usepackage[backend=biber,
+ bibencoding=utf8,
+ style=apa
+]{biblatex}
+\addbibresource{refs.bib}
\setmainfont{TeX Gyre Schola}
\setmathfont{TeX Gyre Schola Math}
@@ -42,6 +45,13 @@
Niels Stunnebrink\\2184532
}
+\newcommand{\req}[1]{$^{\text{\ref{req:#1}}}$}
+\newcommand{\up}[1]{$^{\text{#1}}$}
+\newcommand{\sub}[1]{$_{\text{#1}}$}
+
+\floatplacement{figure}{H}
+\floatplacement{table}{H}
+
\begin{document}
\begin{titlepage}
\maketitle
@@ -52,5 +62,11 @@
\newpage
\input{\jobname.md.tex}
+
+% \printbibliography[heading=bibintoc]
+% \printglossaries
+% \listoftables
+% \listoffigures
+
\end{document}
diff --git a/doc/dui.md b/doc/dui.md
index ede73c8..3f72e1c 100644
--- a/doc/dui.md
+++ b/doc/dui.md
@@ -1,24 +1,287 @@
# Introduction
+\<inleiding iemand?\>
+
# Problem statement
-The following is the original project description (translated to English):
+The following is the original project description (translated to English).
+References have been added in superscript that link to requirements set in
+section \ref{specifications}.
-> I would like to bring to market a vehicle that can drive independently from A
-> to B. The vehicle must take into account traffic rules, road signs, traffic
-> lights, etc. Research is being conducted using a small cart, the Pololu Zumo
-> 32U4, on which a camera module Nicla Vision is mounted. The aim is to
-> investigate the most appropriate method of recognizing the road, traffic
-> signs and traffic lights. This should be demonstrated with a proof of
-> concept. The cart does not need to drive fast, so the image processing does
-> not need to be very fast. Assume one frame per second (or faster).
+> I would like to bring to market a vehicle that can drive
+> independently\req{autonomous} from A to B. The vehicle must take into account
+> traffic rules\req{traffic-rules}, road signs\req{signs}, traffic
+> lights\req{traffic-lights}, etc. Research is being conducted using a small
+> cart, the Pololu Zumo 32U4\req{zumo}, on which a camera module Nicla
+> Vision\req{nicla} is mounted. The aim is to investigate the most appropriate
+> method of recognizing the road, traffic signs and traffic lights. This should
+> be demonstrated with a proof of concept. The cart does not need to drive
+> fast\req{drspeed}, so the image processing\req{mvision} does not need to be
+> very fast. Assume one frame per second (or faster)\req{imspeed}.
# Specifications
+The following is a list of specifications derived from the original project
+description in section \ref{problem-statement}.
+
+\begin{enumerate}
+ \item \label{req:autonomous}
+ The vehicle is autonomous
+ \item
+ The vehicle can detect how its positioned and orientated relative to a road
+ \item \label{req:traffic-rules}
+ The vehicle conforms to the following set of traffic rules
+ \begin{enumerate}
+ \item Driving when not on a road is not allowed
+ \item The vehicle can follow a road by steering itself accordingly
+ \item Driving off the road is only allowed when necessary for the camera to
+ keep seeing the road
+ \end{enumerate}
+ \item \label{req:traffic-lights}
+ The vehicle handles traffic lights in the following way
+ \begin{enumerate}
+ \item Stop at a red traffic light
+ \item Speed up at an orange traffic light
+ \item Continue driving normally at a green traffic light
+ \end{enumerate}
+ \item \label{req:signs}
+ The vehicle acts on traffic signs in the following way
+ \begin{enumerate}
+ \item Stop at a stop sign, and continue driving after a few seconds
+ \item Turn left at a left sign
+ \item Turn right at a right sign
+ \item Slow down at a low speed limit sign
+ \item Speed up to normal speed at a high speed limit sign
+ \end{enumerate}
+ \item \label{req:zumo}
+ The vehicle used is a Pololu Zumo 32U4
+ \item \label{req:nicla}
+ The camera module used is an Arduino Nicla Vision
+ \item \label{req:mvision}
+ Computer vision / image processing is used as the only input
+ \item \label{req:drspeed}
+ There is no minimum speed the car has to drive at
+ \item \label{req:imspeed}
+ The image processing pipeline runs at 1 frame per second or higher
+ \item
+ The Zumo displays the name of the last detected sign on it's OLED display
+\end{enumerate}
+
# Architecture
+## Overview
+
+![Architecture overview (level 0)
+\label{fig:architecture-level-0}](../assets/architecture-level-0.pdf)
+
+Figure \ref{fig:architecture-level-0} shows the hardware used in this project.
+Both the Pololu Zumo 32U4 (referred to as just "Zumo"), and the Arduino Nicla
+Vision ("Nicla") have additional sensors and/or outputs on-board, but are
+unused.
+
+## Distribution of features
+
+Because creating a software architecture that does all machine vision-related
+tasks on the Nicla, and all driving related tasks on the Zumo would create
+significant overhead, and because the microcontroller on the Zumo is
+significantly harder to debug than the Nicla, a monolithic architecture was
+chosen. In this architecture, both the detection of 'traffic objects' and the
+decisionmaking on how to handle each object is done on the Nicla board.
+
+Figure \ref{fig:architecture-level-0} shows that a bidirectional communication
+line exists between the Zumo and Nicla. This line is only used to send control
+commands to the Zumo. Section \ref{niclazumo-communication-protocol} describes
+which commands are sent over these lines.
+
+## Nicla/Zumo communication protocol
+
+The communication protocol used to control the Zumo from the Nicla uses UART to
+send ranged numbers in a single byte. Table \ref{tab:protocol-ranges} shows
+which number ranges correspond to which controls.
+
+\begin{table}
+\centering
+\begin{tabular}{rl}
+\toprule
+\textbf{Description} & \textbf{Range (inclusive)}\\
+\midrule
+(unused) & \texttt{0x00}\\
+Signs & \texttt{0x01} - \texttt{0x0f}\\
+Speed & \texttt{0x10} - \texttt{0x1f}\\
+Steering & \texttt{0x20} - \texttt{0xff}\\
+\bottomrule
+\end{tabular}
+\caption{Protocol command ranges}
+\label{tab:protocol-ranges}
+\end{table}
+
+### Signs
+
+The Zumo stores the last sign received, and displays it's name on the OLED
+display using the lookup table in table \ref{tab:protocol-signs}. The sign ID
+is calculated by subtracting the start offset of the sign command range from
+the command as shown in table \ref{tab:protocol-ranges}.
+
+\begin{table}
+\centering
+\begin{tabular}{ll}
+\toprule
+\textbf{ID} & \textbf{Name}\\
+\midrule
+\texttt{0x00} & (clear sign)\\
+\texttt{0x01} & Stop sign\\
+\texttt{0x02} & Turn left\\
+\texttt{0x03} & Turn right\\
+\texttt{0x04} & Low speed limit\\
+\texttt{0x05} & High speed limit\\
+\texttt{0x06} & Traffic light (red)\\
+\texttt{0x07} & Traffic light (orange)\\
+\texttt{0x08} & Traffic light (green)\\
+\bottomrule
+\end{tabular}
+\caption{Sign lookup table}
+\label{tab:protocol-signs}
+\end{table}
+
+### Speed
+
+The speed value ranges from \num{0} to \num{1}, and is converted from the
+command using the following formula:
+
+$$ v(n) = \frac{n - 16}{15} $$
+
+### Steering
+
+The steering value is similar to the speed value, but ranges from \num{-1}
+(left) to \num{1} (right). The zumo has a built in "influence" value, which
+limits the smallest radius the robot can turn at. The steering value is
+converted using the following formula:
+
+$$ s(n) = \frac{n - 32}{223}\cdot2-1 $$
+
+## Zumo internal motor control functions
+
+The Zumo robot receives a speed and steering value. Because the protocol has a
+limited precision due to the low amount of data sent, the following formula is
+used to control motor speeds $M_1$ and $M_2$ from steering value $s$ and speed
+value $v$. The constant $C_1$ is used to globally limit the speed the robot can
+drive at. $C_2$ represents the amount of influence the steering value has on
+the corner radius, where \num{0} is no steering at all and \num{1} completely
+turns of one motor when steering fully left or right:
+
+$$ M_{1,2} = \frac{v(\pm s C_2 - C_2 + 2)}{2} C_1 $$
+
+By default, $C_1 = \num{96}$ and $C_2 = \num{0.6}$
+
+The Zumo firmware also smooths incoming values for $s$ and $v$ using a PID
+controller. The default constants for the PID controller used are:
+
+\begin{align*}
+K_p &= -0.02\\
+K_i &= +0.13\\
+K_d &= -300.0
+\end{align*}
+
# Research
+## Detecting lines
+
+The Zumo robot needs to drive in a road map-like environment where it needs to act like a car. With the nicla vision camera, there needs to be a way for detecting lines in every frame to make the Zumo robot ride between the lines. Read lines from an image there are different algorithms to make it work. We need to make sure that it works on the OpenMV program if we only choose this one. In this research, two techniques are researched: convolution-based and feature-based.
+
+### Different line detection algorithms.
+
+#### Hough Transform
+
+This is a popular algorithm used to detect straight lines in an image. It works by transforming the image from Cartesian space to Hough space, where lines are represented as points. The algorithm then looks for clusters of points in Hough space, which correspond to lines in Cartesian space.
+
+For more information about Hough Transform algorithms check the below links:
+
+- [Wiki hough](https://en.wikipedia.org/wiki/Hough_transform )
+- [Science article](https://www.sciencedirect.com/topics/computer-science/hough-transforms)
+- [OpenCV Hough](https://docs.opencv.org/3.4/d9/db0/tutorial_hough_lines.html)
+- [OpenMV find_lines](https://docs.openmv.io/library/omv.image.html)
+
+#### EDlines
+
+EDLines, short for Edge Drawing Lines, is a feature-based algorithm that detects straight lines in an image by tracing along the edges of the image. It works by first extracting edges from the image, then building a graph where each edge is represented by a node. The algorithm then uses a greedy strategy to connect the nodes with high edge strength to form line segments. Finally, it merges line segments that are collinear and close to each other to form longer lines. This algorithm does not require a parameter search or optimization and is known for its robustness against noise and partial occlusion.
+
+For more information about EDlines algorithms check the below links:
+
+- [github library](https://github.com/CihanTopal/ED_Lib)
+- [Science article](https://www.sciencedirect.com/science/article/abs/pii/S0167865511001772)
+- [EDLINES: REAL-TIME LINE SEGMENT DETECTION BY EDGE DRAWING (ED)](https://projet.liris.cnrs.fr/imagine/pub/proceedings/ICIP-2011/papers/1569406487.pdf)
+- [OpenCV EDlines doc](https://docs.opencv.org/3.4/d4/d8b/group__ximgproc__edge__drawing.html)
+
+#### Line Segment Detector
+
+LSD (Line Segment Detector) is an algorithm used for detecting line segments in an image. It works by analyzing the gradient information in the image and clustering nearby gradients that form a line segment. The algorithm first computes the gradient information for the image using the Gaussian filter. It then performs a series of operations, such as non-maximum suppression and thresholding, to obtain a binary edge map.
+
+The line segments are detected by applying a series of geometric constraints to the edge map. These constraints include the minimum and maximum length of line segments, the minimum angle between line segments, and the maximum deviation of line segments from a straight line.
+
+Once the line segments are detected, they are refined using a line merging algorithm combining nearby line segments into longer, more continuous lines. The resulting line segments and their endpoints are returned as the output of the algorithm.
+
+For more information about Line Segment Detector algorithms check the below links:
+
+- [LSD: a Line Segment Detector pdf](http://www.ipol.im/pub/art/2012/gjmr-lsd/article.pdf)
+- [Working behind LSD](https://saiwa.ai/blog/line-segment-detection-2/)
+- [OpenCV LSD doc](https://docs.opencv.org/3.4/db/d73/classcv_1_1LineSegmentDetector.html)
+- [OpenMV find_line_segments](https://docs.openmv.io/library/omv.image.html)
+
+#### Radon transform
+
+Radon transform is another popular algorithm used for line detection. It works by computing the line integral of an image along different directions. The algorithm rotates the image at different angles and computes the sum of pixel intensities along each line in the image. The result is a two-dimensional matrix called the Radon transform. Peaks in this matrix correspond to the lines in the original image. The algorithm then applies some post-processing steps to identify and extract the lines from the Radon transform.
+
+For more information about Radon transform algorithms check the below links:
+
+- [Science article](https://www.sciencedirect.com/science/article/abs/pii/0031320396000155)
+- [matlab Radon](https://stackoverflow.com/questions/35412573/radon-transform-line-detection)
+- [Matlab elaboration Radon](https://www.kevinpolisano.com/Doctorat/doc-matlab-exemple/radon_lines_detection.html)
+- [OpenCV Radon doc](https://docs.opencv.org/4.x/d5/d89/radon__transform_8hpp.html)
+
+### Which algorithm is suitable for our project?
+
+We have identified four different types of line detection algorithms that could potentially be used for our project. To decide on the best algorithm, we need to consider various factors such as accuracy, efficiency, and ease of use. While processing time is not a critical factor in our case, we need to ensure that the algorithm we choose meets our requirements and is accessible through the platform we are using, which is currently openMV but may change to openCV in the future. Therefore, our priority is to select an algorithm that is easy to implement, provides accurate results, and is compatible with our platform.
+
+#### OpenMV
+
+The only two algorithms that work with OpenMV are Hough Transform, the function find_lines, and Line Segment Detector, also known as find_line_segments. Both of these have their ups and downs and could be used for our project. find_lines has the most ups whereas find_line_segemtns has the most negative. As the result here below is decently optimized, it is first grayscaled, and then canny edge detection is done to it.
+
+For the test are the straight lines pictures used with different lighting additionality the left lane represents a whitish line and the right lane is drawn with a more darker color. here below are the pictures used:
+
+![picture 1](../RealTime_pictures/rtStraightLines.class/00000.jpg)
+
+![picture 2](../RealTime_pictures/rtStraightLines.class/00018.jpg)
+
+##### find_lines
+
+The find_lines is a very fast function where you can handle straight lines and other lines with at least 45 FPS or more. Also, have a lot of control over the different types of parameters.
+
+This is the outcome of picture 1:
+![outcome_picture_1](../assets/hough_straightLines_Pic_0.png)
+
+This is the outcome of picture 2:
+![outcome_picture_2](../assets/hough_straightLines_Pic_1.png)
+
+As you can see there isn't much of a difference between the two pictures.
+
+##### find_line_segments
+
+The find_line_segments is a very slow function where you can find segments from a line. This is a easier to use function because it only has two parameters but the frame rate drops significantly. Additionally, the size of the image to run the algorithm on needs to be smaller because of memory.
+
+This is the outcome of picture 1:
+
+![outcome_picture_1](../assets/LSD_straightLines_Pic_0.png)
+
+This is the outcome of picture 2:
+
+![outcome_picture_2](../assets/LSD_straightLines_Pic_1.png)
+
+As you can see there is quite a lot of difference between them. This function needs more refinement but I couldn't find the sweet spot. Also, the right line in different pictures was always the problem, so there needs another solution for this function to work better.
+
+#### OpenCV
+
+All the above algorithms could be used with OpenCV, But the Radon transform needs more work than the others with the amount of information in the doc.
+
## Communication between the Nicla and Zumo
In order to make the Zumo robot both detect where it is on a road, and steer to
@@ -75,7 +338,7 @@ values without interpolation would lead to a garbage-in-garbage-out system. The
simplest solution to motion blur is limiting the maximum speed the Zumo robot
can drive at, which is the solution we're going to use as speed is not one of
the criteria of the complete system\footnote{Problem statement
-(\ref{problem-statement})}.
+(section \ref{problem-statement})}.
In the case the Nicla module crashes or fails to detect the road or roadsigns,
it will stop sending commands. If the Zumo robot would naively continue at it's
@@ -86,7 +349,7 @@ module is able to process at about 10 frames per second, so 2 seconds is a
reasonable time-out period.
\def\communicationConclusion{
-The complete protocol will consist of single byte commands. A byte can either
+The complete protocol consists of single byte commands. A byte can either
change the cart speed or steering direction, both will apply gradually. When no
commands have been received for more than 2 seconds, the Zumo robot will
gradually slow down until it is stopped. Exact specifications of commands are
@@ -95,6 +358,35 @@ nog niet}.
}
\communicationConclusion
+## Compiling and linking code for the Zumo
+
+This section tries to answer the question "What are possible debugging options
+for code running on the Zumo robot?".
+
+Debugging running code can usually be done using an on-device debugger, and a
+program that interfaces with the debugger and gcc on a computer. Because gcc
+only gives valuable information when it has access to the executable file
+running on the microcontroller, an attempt at making a makefile-based toolchain
+was made.
+
+Pololu provides C++ libraries for controlling various parts of the Zumo's
+hardware. These libraries make use of functions and classes that are part of
+the Arduino core library. The Arduino libraries are all open source, and can in
+theory be compiled and linked using make, but this would take more effort than
+it's worth, since the Zumo has very little responsibility in the end product.
+
+\def\buildSystemConclusion{
+Because making a custom build system would take too much time, and because the
+Zumo robot's code is very simple, unit tests are used to debug the Zumo's code.
+For compiling and uploading the full Zumo firmware, the Arduino IDE is used in
+combination with the standard Pololu boards and Libraries.
+}
+\buildSystemConclusion
+
# Conclusion
\communicationConclusion
+\buildSystemConclusion
+
+
+
diff --git a/doc/makefile b/doc/makefile
index 9f4dfa0..3446eeb 100644
--- a/doc/makefile
+++ b/doc/makefile
@@ -1,10 +1,15 @@
.PHONY: all clean
-TARGET := $(patsubst %.md,%.pdf, $(wildcard *.md))
+all: dui.pdf
-all: $(TARGET)
+dui.pdf: ../assets/architecture-level-0.pdf
+dui.pdf: ../assets/LSD_straightLines_Pic_0.png
+dui.pdf: ../assets/LSD_straightLines_Pic_1.png
+dui.pdf: ../assets/hough_straightLines_Pic_0.png
+dui.pdf: ../assets/hough_straightLines_Pic_1.png
-garbage = $1.aux $1.bbl $1.bcf $1.blg $1.fdb_latexmk $1.fls $1.log $1.out $1.run.xml $1.synctex.gz $1.toc $1.md.tex
+%.png: %.bmp
+ convert $< $@
%.pdf: %.svg
rsvg-convert -f pdf -o $@ $<
@@ -16,5 +21,6 @@ garbage = $1.aux $1.bbl $1.bcf $1.blg $1.fdb_latexmk $1.fls $1.log $1.out $1.run
pandoc -t latex -o $@ $<
clean:
- $(RM) $(call garbage,research) research.pdf
+ $(RM) dui.aux dui.bbl dui.bcf dui.blg dui.fdb_latexmk dui.fls dui.log dui.out dui.run.xml dui.synctex.gz dui.toc dui.md.tex dui.pdf
+ $(RM) ../assets/LSD_straightLines_Pic_0.png ../assets/LSD_straightLines_Pic_1.png ../assets/hough_straightLines_Pic_0.png ../assets/hough_straightLines_Pic_1.png
diff --git a/doc/refs.bib b/doc/refs.bib
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/doc/refs.bib
diff --git a/README.md b/readme.md
index 4317e32..4317e32 100644
--- a/README.md
+++ b/readme.md
diff --git a/zumo/.gitignore b/zumo/.gitignore
index 888e905..e45f7a2 100644
--- a/zumo/.gitignore
+++ b/zumo/.gitignore
@@ -1,6 +1,2 @@
-main
*.o
-*.hex
-compile_commands.json
-.cache
pidtest
diff --git a/zumo/lib/ArduinoCore-avr b/zumo/lib/ArduinoCore-avr
deleted file mode 160000
-Subproject 42fa4a1ea1b1b11d1cc0a60298e529d37f9d14b
diff --git a/zumo/lib/fastgpio-arduino b/zumo/lib/fastgpio-arduino
deleted file mode 160000
-Subproject 5853c593b07730e632127570279e7dea06de1af
diff --git a/zumo/lib/pololu-buzzer-arduino b/zumo/lib/pololu-buzzer-arduino
deleted file mode 160000
-Subproject 20ef7b734814a7c5e9f02f54a2cdd41729759d5
diff --git a/zumo/lib/pololu-hd44780-arduino b/zumo/lib/pololu-hd44780-arduino
deleted file mode 160000
-Subproject 0a35789a58ca92ca6f69b63fbc269959b2d1858
diff --git a/zumo/lib/pololu-menu-arduino b/zumo/lib/pololu-menu-arduino
deleted file mode 160000
-Subproject 8970b8db6e4e80b1c0e95172a87a35410bf593b
diff --git a/zumo/lib/pololu-oled-arduino b/zumo/lib/pololu-oled-arduino
deleted file mode 160000
-Subproject e6b83b6c181962ffb98f99a4a4c3fd7cbf7e670
diff --git a/zumo/lib/pushbutton-arduino b/zumo/lib/pushbutton-arduino
deleted file mode 160000
-Subproject 442884e004859ff550d5c0cae70033d7d568fc2
diff --git a/zumo/lib/usb-pause-arduino b/zumo/lib/usb-pause-arduino
deleted file mode 160000
-Subproject 3f76e486460bb351f9738c86595f22db2da34c5
diff --git a/zumo/lib/zumo-32u4-arduino-library b/zumo/lib/zumo-32u4-arduino-library
deleted file mode 160000
-Subproject f4dfe054e23176ba445748b4b91f463701e7eb7
diff --git a/zumo/makefile b/zumo/makefile
deleted file mode 100644
index 08c01d7..0000000
--- a/zumo/makefile
+++ /dev/null
@@ -1,74 +0,0 @@
-PORT = /dev/ttyUSB0
-
-C++ = avr-g++
-CC = avr-gcc
-LD = avr-gcc
-RM = rm -f
-
-MCU = atmega32u4
-TARGET = main
-SRCS += main.cpp
-
-C_CPP_FLAGS += -mmcu=$(MCU)
-C_CPP_FLAGS += -Wl,-gc-sections
-SHARED_FLAGS += -Os
-
-C_CPP_FLAGS += -mcall-prologues
-C_CPP_FLAGS += -g
-C_CPP_FLAGS += -Wl,-relax
-C_CPP_FLAGS += -MMD
-C_CPP_FLAGS += -ffunction-sections
-C_CPP_FLAGS += -fdata-sections
-
-LFLAGS += -flto
-LFLAGS += -fuse-linker-plugin
-LFLAGS += -lc -lm
-# LFLAGS += -L/usr/avr/lib/avr5/ -L/usr/lib/gcc/avr/12.2.0/avr5 -lgcc -lm -lc -latmega32u4
-# LFLAGS += -flto -fuse-linker-plugin -mmcu=atmega32u4 -Wl,--gc-sections -Os -lc -lm
-
-
-CFLAGS += -fno-fat-lto-objects
-# CFLAGS += -std=gnu11
-
-CPPFLAGS += -fpermissive
-CPPFLAGS += -fno-exceptions
-CPPFLAGS += -fno-threadsafe-statics
-CPPFLAGS += -fno-devirtualize
-# CPPFLAGS += -std=gnu++11
-
-
-LFLAGS += $(SHARED_FLAGS)
-CFLAGS += $(C_CPP_FLAGS) $(SHARED_FLAGS)
-CPPFLAGS += $(C_CPP_FLAGS) $(SHARED_FLAGS)
-
-include zumo.mk
-
-OBJS := $(patsubst %.c,%.o, $(SRCS))
-OBJS := $(patsubst %.cpp,%.o, $(OBJS))
-
-MAKEFLAGS += -j
-
-.PHONY: all clean flash
-
-all: $(TARGET).hex
-
-%.o: %.cpp
- $(C++) $(CPPFLAGS) -o $@ -c $<
-
-%.o: %.c
- $(CC) $(CFLAGS) -o $@ -c $<
-
-$(TARGET): $(OBJS)
- $(LD) $(LFLAGS) -o $@ $^
-
-$(TARGET).hex: $(TARGET)
- avr-objcopy -R .eeprom -O ihex $< $@
-
-flash: $(TARGET).hex
- avrdude -p $(MCU) -c avr109 -P $(PORT) -U flash:w:$(TARGET).hex
-
-clean:
- $(RM) $(TARGET) $(TARGET).hex $(OBJS)
-
-compile_commands.json: makefile
- compiledb make -Bn
diff --git a/zumo/zumo.mk b/zumo/zumo.mk
deleted file mode 100644
index f5ab84b..0000000
--- a/zumo/zumo.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-C_CPP_FLAGS += -DF_CPU=16000000L
-C_CPP_FLAGS += -D__PROG_TYPES_COMPAT__
-C_CPP_FLAGS += -DARDUINO=1819
-C_CPP_FLAGS += -DARDUINO_AVR_LEONARDO
-C_CPP_FLAGS += -DARDUINO_ARCH_AVR
-C_CPP_FLAGS += -DARDUINO_BOARD='"AVR_LEONARDO"'
-C_CPP_FLAGS += -DARDUINO_VARIANT='"leonardo"'
-C_CPP_FLAGS += -DUSB_VID=0x2341
-C_CPP_FLAGS += -DUSB_PID=0x8036
-C_CPP_FLAGS += -DUSB_PRODUCT='"Arduino Leonardo"'
-C_CPP_FLAGS += -DUSB_MANUFACTURER='"Unknown"'
-
-C_CPP_FLAGS += -I./lib/zumo-32u4-arduino-library/src
-C_CPP_FLAGS += -I./lib/fastgpio-arduino
-C_CPP_FLAGS += -I./lib/pushbutton-arduino
-C_CPP_FLAGS += -I./lib/usb-pause-arduino
-C_CPP_FLAGS += -I./lib/pololu-buzzer-arduino/src
-C_CPP_FLAGS += -I./lib/pololu-hd44780-arduino
-C_CPP_FLAGS += -I./lib/pololu-menu-arduino/src
-C_CPP_FLAGS += -I./lib/pololu-oled-arduino/src
-C_CPP_FLAGS += -I./lib/ArduinoCore-avr/cores/arduino
-C_CPP_FLAGS += -I./lib/ArduinoCore-avr/libraries/HID/src
-C_CPP_FLAGS += -I./lib/ArduinoCore-avr/libraries/SoftwareSerial/src
-C_CPP_FLAGS += -I./lib/ArduinoCore-avr/libraries/SPI/src
-C_CPP_FLAGS += -I./lib/ArduinoCore-avr/libraries/EEPROM/src
-C_CPP_FLAGS += -I./lib/ArduinoCore-avr/libraries/Wire/src
-C_CPP_FLAGS += -I./lib/ArduinoCore-avr/variants/leonardo
-
-# LIBS += lib/ArduinoCore-avr/cores/arduino/PluggableUSB.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/CDC.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/HardwareSerial.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/USBCore.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/HardwareSerial0.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/HardwareSerial1.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/HardwareSerial2.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/HardwareSerial3.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/IPAddress.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/Print.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/Stream.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/WMath.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/WString.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/abi.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/main.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/new.cpp
-# LIBS += lib/ArduinoCore-avr/libraries/HID/src/HID.cpp
-# LIBS += lib/ArduinoCore-avr/libraries/SPI/src/SPI.cpp
-# LIBS += lib/ArduinoCore-avr/libraries/SoftwareSerial/src/SoftwareSerial.cpp
-LIBS += lib/ArduinoCore-avr/libraries/Wire/src/Wire.cpp
-LIBS += lib/ArduinoCore-avr/cores/arduino/WInterrupts.c
-LIBS += lib/ArduinoCore-avr/cores/arduino/hooks.c
-LIBS += lib/ArduinoCore-avr/cores/arduino/wiring_shift.c
-LIBS += lib/ArduinoCore-avr/cores/arduino/wiring_digital.c
-LIBS += lib/ArduinoCore-avr/cores/arduino/wiring_analog.c
-LIBS += lib/ArduinoCore-avr/cores/arduino/wiring_pulse.c
-LIBS += lib/ArduinoCore-avr/cores/arduino/wiring.c
-LIBS += lib/ArduinoCore-avr/cores/arduino/Tone.cpp
-# LIBS += lib/ArduinoCore-avr/libraries/Wire/src/utility/twi.c
-
-LIBS += lib/pololu-buzzer-arduino/src/PololuBuzzer.cpp
-LIBS += lib/pushbutton-arduino/Pushbutton.cpp
-LIBS += lib/zumo-32u4-arduino-library/src/QTRSensors.cpp
-LIBS += lib/zumo-32u4-arduino-library/src/Zumo32U4IRPulses.cpp
-LIBS += lib/zumo-32u4-arduino-library/src/Zumo32U4Encoders.cpp
-LIBS += lib/zumo-32u4-arduino-library/src/Zumo32U4IMU.cpp
-LIBS += lib/zumo-32u4-arduino-library/src/Zumo32U4Motors.cpp
-LIBS += lib/zumo-32u4-arduino-library/src/Zumo32U4ProximitySensors.cpp
-LIBS += lib/usb-pause-arduino/USBPause.cpp
-LIBS += lib/pololu-hd44780-arduino/PololuHD44780.cpp
-LIBS += lib/fastgpio-arduino/FastGPIO.cpp
-LIBS += lib/pololu-oled-arduino/src/font.cpp
-
-SRCS += $(LIBS)
-