IOT-Labor
Versuch 1: Bash
- Alle Aufgaben sind als Skripte implementiert
Versuch 2: Python
-
Aufgaben a bis c als Skripte implementiert
-
sshfs pi@172.23.90.43:/home/pi ~/test
d)
- Laden des Servo Daemon
/home/pi/PiBits/ServoBlaster/user/servod
- Konfigurieren von zwei Servos auf den P1 Pins 11 und 12.
- Pin in P1 Header: 11 ist GPIO Pin: 17 ist Servo: 1
- Pin in P1 Header: 12 ist GPIO Pin: 18 ist Servo: 2
- Pulsbreite ist die Periodendauer: T =
\frac{1}{f} - 100Hz sind 0.01s, also 10000
\mu s\frac{1}{100Hz} = 0.01s = 10000\mu s
- Servos und Pulsbreite in
/dev/servoblastereintragen
sudo /home/pi/src/PiBits/ServoBlaster/user/servod --cycle-time 1000
echo 1=wert > /dev/servoblaster
echo 2=wert > /dev/servoblaster
e)
-
Oszilloskop an GPIO Pin 17 anschließen
-
Minimale Pulsbreite ermitteln?
-
25% sind 60
-
50% sind ~120
-
75% sind ~190
-
100% sind 250
f)
- in der servoblaster_ctl.py
g)
- Als Skript implementiert
Versuch 3: Steuerung Keyboard
4d)
Motor
- Pulsbreite von 100 bis 200
150 + \frac{v}{v_{max}} * 50
| v [m/s] | PWM (gemessen) | PWM (soll) |
|---|---|---|
| 0 | 1.5ms | 1.5ms |
| -12.3 | 2ms | 2ms |
| 0.9 | 1.54ms | 1.5409ms |
| 10.5 | 1.54ms | 1.5ms |
| -7.4 | 1.16ms | 11.636ms |
Steuerung
- Pulsbreite von 100 bis 200
150 + \frac{\alpha}{\alpha_{max}} * 50
\alpha [°] |
PWM (gemessen) | PWM (soll) |
|---|---|---|
| -3 | 1.46ms | 14.66ms |
| 18 | 1.3ms | 17ms |
| 51.7 | 2ms | 2ms |
| 0 | 1.5ms | 1.5ms |
| -44.2 | 1ms | 1ms |
Veruch 4: Wiimote
- Wiimote mit dem hcitool finden
hcitool scan
-
Grundgerüst ist implementiert
-
Accelerometer Steuerung
- TODO
- Anlog zur Maussteuerung
- Werte MAX, MIN anpassen
Versuch 5
- Verbinden mit WLAN
- ESSID: group20n oder iot_lab_wlan_bgn_03?
- Kein Passwort und kein DHCP
sudo ifconfig wlan0 192.168.1.42 netmask 255.255.255.0 up
sudo iwconfig wlan0 essid off
sudo iwconfig wlan0 essid iot_lab_wlan_bgn_2
- dann Routen prüfen
Delays und Offset messen
- Zeit synkronisieren
ntpq -pn time1.rrzn.uni-hannover.de
> peers
- Für dratgebunden
- 8.962 0.071
| Dealy [ms] | Offset [ms] | |
|---|---|---|
| Laptop | 1.991 | 0.023 |
| Pi | 0.508 | 0.321 |
- Für dratlos
| Dealy [ms] | Offset [ms] | |
|---|---|---|
| Pi | 0.425 | 0.157 |
- Default Route wieder auf ethernet stellen
- NTP Service konfigurieren#
- in
/etc/ntp.conf server time1.rrzn.uni-hannover.deeintragensudo service ntp stop|start
- in
Streaming über das drahtgebundene Netz
- PI Kamera konfigurieren
- Kamera anstellen
sudo raspi-config
- Segmentation offloading ausschalten
- Für beide Interfaces
ethtool -K <interface> tso off
- tcpdump starten auf Client und Server
- als root
- Auf dem Client
tcpdump -i <interface> tcp and port 1337 and dst <server-ip> -w <file-name.pcap>
- Auf dem Server
tcpdump -i <interface> tcp and port 1337 and src <client-ip> -w <file-name.pcap>
- simple-server.py und simple-client.py verwenden
- Client auf dem PI
- Server auf dem Laptop
./simple-server.py -a <IP> --tcp
./simple-client.py -s <Server-IP> --tcp
- Commulative arrival function für Server und Client berechnen und ploten
- Für später schon Bitraten notieren
./plot-pcap.py --client <pcap> --server <pcap>
- OWDs berechnen
./calc-owd.py --client <pcap> --server <pcap>
-
Mittelwert: 0.395ms
-
Standardabweichung: 0.213ms
-
Eingestellte Bitrate: 2Mbit/s
-
Tatsächlich gesendete Bitrate: 0.26Mbit/s
Streaming über WLAN
- default route über WLan einrichten
Plot TCP
-
Stream für 60s mitschneiden und auswerten
- Wie vorher schon nur über WLan
- Plot der Pakete
- OWDS
-
Mittelwert: 13.78ms
-
Standardabweichung: 8.11ms
Plot UDP
- Mittelwert: 4.68ms
- Standardabweichung: 2.87ms
- Was ist besser?
- UDP
Mittelwert und Standardabweichung der OWDs
-
TCP:
- Mittelwert: 13.78ms
- Standardabweichung: 8.11ms
-
UDP:
- Mittelwert: 4.68ms
- Standardabweichung: 2.87ms
-
Um OWDs mit UDP genauer zu berechnen müsste die Reihenfolge der Pakete beachtet werden und die Uhren von Client und Server genaustens synkronisiert werden.
Verschiedene Bitraten
| LAN | \mu_{OWD} |
\sigma_{OWD} |
Wertung |
|---|---|---|---|
| 0.2 Mbits/s | -0.01 | 0 | + - |
| 2 Mbit/s | -0.007 | 0 | + + |
| WLAN | \mu_{OWD} |
\sigma_{OWD} |
Wertung |
|---|---|---|---|
| 0.2 Mbits/s | 53.03 | 29.76 | - - |
| 2 Mbit/s | 5.17 | 3.03 | + - |
Verschiedene Parameter raspivid
- 1280 x 720, 20fps, 2Mbit/s ,
-t 0 -fps 20 -w 1280 -h 720 -b 2000000 -o
- 1280 x 720, 10fps, 2Mbit/s
-t 0 -fps 10 -w 1280 -h 720 -b 2000000 -o
- 1280 x 720, 5fps, 2Mbit/s
-t 0 -fps 5 -w 1280 -h 720 -b 2000000 -o
- 640 x 360, 40fps, 2Mbit/s
-t 0 -fps 40 -w 640 -h 360 -b 2000000 -o
- 640 x 360, 20fps, 2Mbit/s
-t 0 -fps 20 -w 640 -h 360 -b 2000000 -o
| Parameterset | \mu_{OWD} |
\sigma_{OWD} |
Wertung |
|---|---|---|---|
-t 0 -fps 20 -w 1280 -h 720 -b 2000000 -o |
5.17ms | 3.02ms | + - |
-t 0 -fps 10 -w 1280 -h 720 -b 2000000 -o |
5.69ms | 3.38ms | - - |
-t 0 -fps 5 -w 1280 -h 720 -b 2000000 -o |
5.64ms | 3.40ms | - - |
-t 0 -fps 40 -w 640 -h 360 -b 2000000 -o |
6.2ms | 3.91ms | + + |
-t 0 -fps 20 -w 640 -h 360 -b 2000000 -o |
8.86ms | 5.03ms | + + |
Verschiedene Puffergrößen
-
WLAN
-
Puffergröße: 10B, nichts zu sehen
-
Puffergröße: 1400B
\mu_{OWD}: 5.17ms\sigma_{OWD}: 3.02ms- Wertung: +-
-
Was passiert, wenn die Puffergröße größer als die MTU
- Fragmentierung, mehr Overhead
-
Mit 4000B Puffergröße versuchen
- Mit Wireshark angucken
- Fragmentierung ist zu sehen
Streaming am Fahrzeug
- Ploten der Pakete in einer Abbildung (wie vorher)
- Wenn das Modellauto sich stetig vom Router entfernt.
- Wenn das Modellauto den Raum verlässt.
Versuch 6
-
Sensoten für diesen Versuch:
- Infrarot: GP2D12
- Kompas: CMPS03
- Radencoder: Hat Reflexoptokoppler CNY70
- Ultraschall-Modul: SRF08
-
Überprüfen ob Sensoren angeschlossen sind
- y-Flag gibt den Bus an
sudo i2cdetect -l
sudo i2cdetect -y 1
-
Adressen der Sensoren:
- Infrarot: 0x4f in V
- Kompas: 0x60
- Radencoder: On pin 21
- Ultraschall-Modul: 0x70, 0x71
-
Kernelmodule laden i2c-bcm2708
- Überprüfen mit
lsmod
- Überprüfen mit
-
Adressen in die
ikt_car_sensorik.pyeintragen- Unten in der Main








