Initial push
This commit is contained in:
+153
@@ -0,0 +1,153 @@
|
||||
# Robot
|
||||
|
||||
## Cam-stream
|
||||
|
||||
Files:
|
||||
- cam_stream.py
|
||||
|
||||
### Ziel
|
||||
|
||||
Kamera läuft und schickt Bilder via seriell an den ESP.
|
||||
|
||||
### Voraussetzung
|
||||
|
||||
- Die Kamera 🤡
|
||||
- ESP am Serial-Port `/dev/ttyACM1` (115200 Baud)
|
||||
|
||||
### Umsetzung
|
||||
|
||||
In Endlosschleife wird ein 640x480-Graustufen-Frame von der Kamera gelesen und als JPEG komprimiert bis die Größe unter 1200 Bytes liegt.\
|
||||
Danach wird der Frame in JSON-Format über seriell an den ESP gesendet.\
|
||||
Sollte es zu einem Verbindungsabbruch zwischen Pi und ESP kommen wird automatisch so lange eine Neuverbindung versucht, bis diese Verbindung wieder steht.
|
||||
|
||||
### Probleme während der Bearbeitung und ihre Lösungen
|
||||
|
||||
Die Kamera wurde nicht konstant erkannt (beim Suchen der Kamera wurde sie manchmal gefunden und manchmal nicht, meistens nicht).\
|
||||
Eine Neuinstallation von Raspbian hat das Problem gelöst, allerdings wurde diesmal die full-version installiert.
|
||||
|
||||
-----------------------
|
||||
|
||||
## Line follow
|
||||
|
||||
Files:
|
||||
- AlphaBot2.py
|
||||
- TRSensors.py
|
||||
- line_follow.py
|
||||
|
||||
### Ziel
|
||||
|
||||
Roboter soll in der Lage sein einer Linie auf dem Boden zu folgen,
|
||||
ohne diesen zu verlieren
|
||||
|
||||
### Voraussetzung
|
||||
|
||||
Linienbreite deckt 3 der 5 Sensoren ab (die mittleren), äußeren Sensoren müssen den boden sehen.
|
||||
|
||||
### Umsetzung
|
||||
|
||||
#### erste Idee: (Verworfen)
|
||||
|
||||
Von 5 Sensoren müssen die mittleren 3 immer die Linie sehen.\
|
||||
Mithilfe der äußeren Sensoren werden Korrekturen durchgeführt, damit der Roboter auf der Linie bleibt.
|
||||
|
||||
#### zweite Idee:
|
||||
|
||||
Es müssen wieder die mittleren 3 Sensoren auf der Linie sein.\
|
||||
Diesmal wird die Korrektur aber von Sensor 1 und Sensor 3 durchgeführt (Index beginnt bei 0).\
|
||||
Mithilfe der äußeren Sensoren, soll entschieden werden, ob eine Abzweigung existiert und falls sie existiert wird eine stärkere Korrektur durchgeführt damit der Roboter sich richtig dreht.
|
||||
|
||||
### Probleme während der Bearbeitung und ihre Lösungen
|
||||
|
||||
#### erste Idee:
|
||||
|
||||
Der Roboter hat zu sehr gezappelt und es war schwer zu unterscheiden ob nur leicht korrigiert werden musste oder ob die Linie die Richtung gewechselt hat.
|
||||
Das Problem sollte durch die zweite Idee gelöst werden.
|
||||
|
||||
#### zweite Idee: (Idee wurde vereinfacht auf nur starke Kurven = Roboter muss eine 90° Drehung machen um zu folgen)
|
||||
|
||||
Der Roboter interpretiert, je nach Untergrund, Kurven falsch.\
|
||||
Obwohl keine Kurve vorhanden ist biegt er doch ab.\
|
||||
Wenn eine Kurve vorhanden ist nimmt er diese nicht korrekt war und bleibt am Ende der Linie stehen.
|
||||
|
||||
-------------------
|
||||
|
||||
## remote steering
|
||||
|
||||
Files:
|
||||
- AlphaBot2.py
|
||||
- IRremote.py
|
||||
|
||||
### Ziel
|
||||
|
||||
Steuerung des kompletten Roboters über Fernbedienung.
|
||||
Möglich machen:
|
||||
- Roboter bewegen
|
||||
- Linienfolgen starten und stoppen + Kalibrierung manuell starten
|
||||
- (Kameraausrichtung ermöglichen)
|
||||
|
||||
### Voraussetzung
|
||||
|
||||
Die Fernbedienung 🤡
|
||||
|
||||
### Umsetzung Buttons
|
||||
|
||||
- play/pause = starten bzw. stoppen des line follows
|
||||
- 2 = geradeaus fahren
|
||||
- 4 = nach links drehen um die eigene Achse
|
||||
- 6 = nach rechts drehen um die eigene Achse
|
||||
- 8 = rückwärts fahren
|
||||
|
||||
### Probleme während der Bearbeitung und ihre Lösungen
|
||||
Keine Probleme
|
||||
|
||||
-------------------
|
||||
|
||||
## Daemon
|
||||
|
||||
Files: Kein
|
||||
|
||||
### Ziel
|
||||
|
||||
Automatisches starten des Kamerastreams,
|
||||
sowie die Steuerung über eine Fernbedienung.
|
||||
|
||||
### Umsetzung
|
||||
|
||||
1. **Service-Datei anlegen**
|
||||
|
||||
Erstelle unter `/etc/systemd/system/` eine Datei namens `<service_name>.service` mit folgendem Inhalt:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=<Kurzbeschreibung des Dienstes>
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=<system_user>
|
||||
WorkingDirectory=<Arbeitsverzeichnis>
|
||||
ExecStart=<Pfad zu Interpreter> <Pfad zum Skript>
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
2. **Systemd neu einlesen**
|
||||
|
||||
``sudo systemctl daemon-reload``
|
||||
3. **Dienst aktivierten (Boot-Start)**
|
||||
|
||||
``sudo systemctl enable <service_name>.service``
|
||||
4. **Dienst sofort starten**
|
||||
|
||||
``sudo systemctl start <service_name>.service``
|
||||
5. **Status und Logs prüfen**
|
||||
- Status anzeigen:
|
||||
|
||||
``sudo systemctl status <service_name>.service``
|
||||
- Live-Logs:
|
||||
|
||||
``sudo journalctl -u <service_name>.service -f``
|
||||
|
||||
### Probleme während der Bearbeitung und ihre Lösungen
|
||||
Reference in New Issue
Block a user