bachfeld.com

Dies ist eine private, werbefreie und trackingfreie Webseite ohne Kommentierungs- und Loggingfunktionen, die der Dokumentation eigener, nicht kommerzieller Experimente mit Soft- und Hardware dient.

Diese Seite ist nach §5 Telemediengesetz nicht Impressumspflichtig. Diese Seite entspricht Erwägungsgrund 18 der DSGVO und bedarf keiner umfassenden Datenschutzerklärung.

Bitte gehen Sie weiter, es gibt hier nichts zu sehen!

logo

Gesammelte Werke

unsortierte Liste von Lösungen, Abläufen, Hinweisen, Ideen

ESP32-CAM    

newbench    

PAL9000    linorobot     ROS    Android    Docker

Websockets    Digital Fabrication    Benchmarks

Boards    git    make & cmake

Anki Vector    Video Acceleration    



Eintrag 1

Aufgabe: Raspberry Pi von USB-Stick booten

Lösung: How to boot from a USB Mass Storage Device



Eintrag 2

Aufgabe: Ethernet und USB teilen sich beim Raspberry Pi eine Leitung. Deshalb wird bei Filetransfers übers LAN der USB-Channel zum Flaschenhals

Lösung: SD-Karte für Massenspeiche nutzen oder WLAN für LAN. Beide sind über separate IOs angebunden.



Eintrag 3

Aufgabe: Auf Ubuntu 16.04 lässt sich ROS nur als Kinetic installieren. Ab Kinetic ist jedoch OpenCV 3 die bevorzugte Version, in der sich diverse APIs verändert haben. Manche älteren ROS-Pakete funktionieren allerdings nur mit OpenCV 2 und lassen sich nicht mehr installieren. Abhilfe bringt das manuelle Übersetzen. Standardmäßig nimmt CMake jedoch die OpenCV3-Libs.

Lösung: Mit der Angabe findpackage (OpenCV 2) in CMake.txt bindet CMake die Version 2 ein.



Eintrag 4

Aufgabe: Feature Tracking mit OpenCV. Zwei Bilder auf Ähnlichkeiten vergleichen, um Orte im Haus wiederzuerkennen und zuordnen zu können

Lösung:

import numpy as np
import cv2
from matplotlib import pyplot as plt
MIN_MATCH_COUNT = 10
img1 = cv2.imread('Webcam1.png',0)          # queryImage
img2 = cv2.imread('Webcam2.png',0) # trainImage
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1,des2,k=2)
# store all the good matches as per Lowe's ratio test.
good = []
for m,n in matches:
    if m.distance < 0.7*n.distance:
        good.append(m)
if len(good)>MIN_MATCH_COUNT:
    src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
    dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2)
    M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
    matchesMask = mask.ravel().tolist()
    h,w = img1.shape
    pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
    dst = cv2.perspectiveTransform(pts,M)
    img2 = cv2.polylines(img2,[np.int32(dst)],True,255,3, cv2.LINE_AA)
else:
    print( "Not enough matches are found - {}/{}".format(len(good), MIN_MATCH_COUNT) )
    matchesMask = None
draw_params = dict(matchColor = (0,255,0), # draw matches in green color
                   singlePointColor = None,
                   matchesMask = matchesMask, # draw only inliers
                   flags = 2)
img3 = cv2.drawMatches(img1,kp1,img2,kp2,good,None,**draw_params)
plt.imshow(img3, 'gray'),plt.show()

Im linken Bild hängt ein Handtuch über dem Stuhl, im rechten Bild nicht:

opencv



Eintrag 5

Aufgabe: Ubuntu bootet nach dem Versuch, auf einem externen USB-Stick ein Ubuntu 14.04 zu installieren, nur noch sehr langsam. Offenbar hat der Installer auf der SSD an der Partition etwas verändert. Erster Hinweis: fdisk meldet “wrong disk order” zweiter Hinweis: Beim Booten ohne Splash Screen (ESC drücken) meldet Ubuntu “A start job is running for dev-disk-by [komische UUID] 1:30min”

Das entspricht genau der Zeit, die es jetzt länger dauert.

ls -Al /dev/disk/by-uuid/
sudo blkid

bringen keine Resultate bzw eine nicht-konforme UUID Es scheint, als fände Ubuntu die Swap-Partition nicht mehr.

Lösung: Die Swap-Partition hat keine UUID mehr. Also UUID vergeben

sudo mkswap /dev/sda5

Anschließend trägt man die ausgegebene UUID in fstab ein

sudo nano /etc/fstab

# swap was on /dev/sda5 during installation
UUID=b622ec5c-750c-4147-8dbc-6d8197b92890 none            swap    sw           $



Eintrag 6

Aufgabe: Unter Ubuntu benötigt die Arduino-IDE Zugriff auf die seriellen Schnittstellen. Das lässt sich im einfachsten Fall lösen, indem man die Arduino-IDE mit

sudo ./arduino

startet. Das Problem ist, dass dann das Sketchbook und hinzugefügte Bibliotheken unter /root und nicht unter /home/user liegen. Das kann mitunter zu Verwirrung führen.

Lösung: Besser ist es, den aktuellen User mit

sudo adduser <user> dialout

zur Gruppe dialout hinzuzufügen, mit der alle von “user” gestarteten Programm Zugriff auf die seriellen Schnittstellen haben

#include <stdio.h>

int main(void) {
  printf("Hello world!\n");
}



Eintrag 7

Aufgabe: Eine Excel-Liste mit Teilnehmern einer Umfrage enthalten Dubletten, weil die Umfrage in Wellen erfolgt ist. Teilweise haben einige dreimal an der Umfrage teilgenommen. Wie filtert man die Dubletten in LibreOffice Calc aus?

Lösung: Unter Daten/Weitere Filter ruft man “Standardfilter” auf.

filter

Dort stellt man die Kriterien wie folgt ein. Wichtig ist, die Checkbox “Keine Duplikate” zu setzen.

filter

Anschließend “OK” klicken und LibreOffice blendet alle Dubletten aus – sie sind aber noch da. Danach ist einige manuelle Nacharbeit erforderlich, wenn Teilnehmer ihre Namen von Welle zu Welle leicht verändert haben.

Kopiert man di Liste in eine Text-Datei, werden die ausgeblendeten Zeilen nicht mitkopiert.



Eintrag 8

Aufgabe: Nach einem Logout aus dem Raspberry-Pi-Desktop (nicht zu verwechslen mit Herunterfahren) ist kein Login mehr möglich - trotz richtigem Passwort. Der Bildschirm wird für einige Sekunden schwarz und zeigt dann wieder den Login-Prompt. Das Problem tritt aber offenbar nur dann auf, wenn der TightVNC-Server aktiviert wurde.

Lösung: Mit Strg+Alt+F2 eine Shell öffnen, einloggen und folgendes eingeben:

1
sudo chown pi:pi .Xauthority



Eintrag 9

Aufgabe: Ich möchte in meinem Honda Civic Car Entertainement Musik von einer 1 TByte großen Festplatte abspielen. Das System unterstützt jedoch nur FAT32, was seinerseits mit Windows-Bordmitteln nur bis 32 GByte funktioniert.

Lösung: Mit dem FAT32Formatter lässt sich die gesamte Festplatte mit FAT32 formatieren.

formatterr

Leider kann das Honda-System nur 699 Ordner einblenden, was nur rund ein Fünftel meiner Musiksammlung entspricht.



Eintrag 10

Aufgabe: Altes Android-Tablet oder Smartphone als Steuergerät einsetzen

Lösung: Android mit Python oder Basic programmieren und Daten über die serielle Schnittstelle oder Bluetooth senden.

Anleitung hier

How to



Eintrag 11

Aufgabe: Screenshot mit Acer500 ICS 4.0.3 machen

Lösung: To take a screenshot in landscape mode:

Hold the volume down button and the power button at the same time for a couple of seconds.

To take a screenshot in portrait mode:

Hold the volume up button and the power button at the same time for a couple of seconds.

### Eintrag 12 Aufgabe: SSH unter Termux aktivieren

Lösung

apt install openssh
ssh-keygen -b 4096 -t rsa
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys2
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/*

Denn privaten Schlüssel auf den Remote-Rechner kopieren Achtung: Der private Schlüssel dar nur die Rechte 700 haben, sonst meckert der SSH-Client, die Rechte seien zu “offen” und bricht den Start ab.

Ähnlich sieht es auf Server-Seite aus. Wenn die Rechte zu großzüguig angelegt sind, bricht er die Authentifizierung ab. BTW: Aus irgendeinem Grund suchte der Server die Keys in authorized_keys2 und nicht in authorized_keys.

Debugging mit

sshd -d

Verbindung unter Linux mit

ssh 192.168.2.x -p 8022 -i ~/.ssh/id_rsa



Eintrag 14

Aufgabe: Unter Linux ist manchmal das Fenster zu groß, um komplett auf dem Desktop dargestellt zu werden. Manche Bedienelemente sind dann außerhalb des Desktops und nicht erreichbar.

Lösung Fenster verschieben: Irgendwo den Mauszeiger platzieren und ALT-Taste plus linke Maus-Taste drücken und halten. Bei der Rapoo-Tastatur mit Touchpad: ALT-Taste plus “Doppelklick mit Halten”.



Eintrag 15

Aufgabe Ein Markdown Editor auf dem Raspberry Pi 3

Lösung gedit mit folgendem Plugin https://github.com/GeorgesStavracas/gedit-markdown

Dazu sind noch ein paar wichtige Pakete zu installieren

sudo apt-get install gir1.2-webkit2-4.0 m4 python-webkit python3-markdown

dann make && make install und über “Preferences/Plug-ins!” das Modul aktivieren. Unter Tools kann man dann den Markdown-Preview einschalten.



Eintrag 16

Neuer Webserver

Nach dem Umstieg von Windows (und mit Mongoose als Webserver) auf Linux sollte mal Wordpress als CMS dienen. Zusammen mit Docker waren schnell je eine Container für nginx, Wordpress und MSQL aufgesetzt. Allerdings ist das Befüllen doch unflexibler als gedacht. Mongoose als Server zusammen mit einem aus MarkDown erzeugten HTML-File ist schlanker und flexibler. Und auch was das einfärben von Code angeht, ist Workdpress auch mit Plugins eher frickelig.

Praktischerweise gibt es einen freien Fork auch für Linux:

https://github.com/civetweb/civetweb/blob/master/docs/Installing.md

Die Installation ist mit

make 
sudo make install

schnell erledigt

nano /usr/local/etc/civetweb.conf

In Kombination mit dem Webbasierten Editor stackedit.io kann ich nun wieder leicht “Reminder” schreiben. Als Ergänzung versuche ich künftig “Reminder” als einzelne Snippets zu erstellen und per HTML-Include einzubinden. Dann muss ich nicht mehr ein große Datei editieren. Beispiel_

 <!DOCTYPE html>
<html>
<script src="http://www.w3schools.com/lib/w3data.js"></script>

<body>

<div w3-include-html="index.html"></div>
<div w3-include-html="sweep.html"></div>

<script>
w3IncludeHTML();
</script>

</body>
</html>



Spracherkennung mit Zamia auf dem Pi

    echo "deb http://goofy.zamia.org/repo-ai/raspbian/stretch/armhf/ ./" >/etc/apt/sources.list.d/zamia-ai.list
    wget -qO - http://goofy.zamia.org/repo-ai/raspbian/stretch/armhf/bofh.asc | sudo apt-key add -
    apt-get update
    apt-get install kaldi-chain-zamia-speech-de kaldi-chain-zamia-speech-en python-kaldiasr python-nltools pulseaudio-utils pulseaudio
Mikrofon finden:
    pactl list sources
Source #0
    State: SUSPENDED
    Name: alsa_input.usb-046d_0825_D9402460-02.analog-mono
    Description: Webcam C270 Analog Mono

Demo-Skript laden und starten:

wget 'http://goofy.zamia.org/zamia-speech/misc/kaldi_decode_live.py'

$ python kaldi_decode_live.py -s 'Webcam'
Kaldi live demo V0.2
Loading model from /opt/kaldi/model/kaldi-generic-en-tdnn_250 ...

Please speak.



Updating OTA-Image von Hand

OTA Images https://developers.google.com/android/ota Factory Images https://developers.google.com/android/images#razor Factory images gingen leider nicht

Zum Booten in den Recovery Mode PowerDown und Volume Down dann Recovery Mode auswählen gab bei mir einen Fehler: Android-Männchen auf dem Rücken mit roten Warndreieck und dem Hinweis “Kein Befehl” mit PowerDown und Volume Up ging es dann doch ins Recovery Menü

adb-Tools installieren und Image übertragen

sudo apt-get install android-tools-adb
adb sideload razorg-ota-mmb29x-f97b2025.zip



Automatischen Start von Docker-Containern verhindern

dab@oasis:~$ sudo docker ps -l
[sudo] Passwort für dab: 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
e977a3d9f929        nginx:latest        "nginx -g 'daemon of…"   6 months ago        Exited (0) 15 hours ago                       wordpresscompose_nginx_1

dab@oasis:~$ sudo docker update --restart=no e977a3d9f929

hier die docker-compose.yaml

nginx:
    image: nginx:latest
    ports:
        - '80:80'
    volumes:
        - ./nginx:/etc/nginx/conf.d
        - ./logs/nginx:/var/log/nginx
        - ./wordpress:/var/www/html
    links:
        - wordpress
    restart: always

mysql:
    image: mariadb
    ports:
        - '3306:3306'
    volumes:
        - ./db-data:/var/lib/mysql
    environment:
        - MYSQL_ROOT_PASSWORD=geheim
    restart: always



wordpress:
    image: wordpress:4.7.1-php7.0-fpm
    ports:
        - '9000:9000'
    volumes:
        - ./wordpress:/var/www/html
    environment:
        - WORDPRESS_DB_NAME=wpdb
        - WORDPRESS_TABLE_PREFIX=wp_
        - WORDPRESS_DB_HOST=mysql
        - WORDPRESS_DB_PASSWORD=geheim
    links:
        - mysql
    restart: always



Verwaiste Windows-Laufwerke löschen

net use <Laufwerksbuchstabe:> /n



Charger, Battery Manager, Power Path Management

Understanding battery charger features and charging topologies

Primer on PowerPath Controllers, Ideal Diodes & Prioritizers

The FET-OR Connection for Power Supplies

P-Channel PowerPath Controllers & Ideal Diodes Frequently Asked Questions

!!! simple battery back-up power path design idea

TP4056 BMS, Higher output alternative?



asciinema

shell recording mit asciinema Installation per

pip3 install asciinema

Aufnehmen mit

asciinema rec anki.cast

in Webseiten einbetten mit dem asciinema-player https://github.com/asciinema/asciinema-player/

Dann einfach unter Stackedit in Seite die HTML-Tags eintragen

    <asciinema-player src="/anki.cast" autoplay="True"></asciinema-player>
    <script src="/asciinema-player.js"></script>

Editieren der Records mit asciinema-edit

asciinema-edit quantize --range 0.5 ./cast (for every delay between 0.5 and up, cut the delay down to 0.5).

Tile Tabs WE

Arbeiten mit parallelen Tabs in Firefox

https://addons.mozilla.org/de/firefox/addon/tile-tabs-we/?src=search

Die beiden aktuellsten Tabs werden separat in Fenster geöffnet und nebeneinander geschoben

http://www.theconstructsim.com/blog/

about ARM boards

https://bootlin.com/blog/allwinner-vpu-main-goals-delivery/

https://www.cnx-software.com/2016/03/16/3d-accelerated-graphics-hardware-video-decoding-and-network-performance-on-orange-pi-one-board-video/

http://linux-sunxi.org/Cedrus

https://forum.armbian.com/topic/1129-h265/

https://blog.cloudflare.com/arm-takes-wing/

https://blog.minio.io/accelerating-sha256-by-100x-in-golang-on-arm-1517225f5ff4?gi=5f6e4cdd1db

https://www.raspberrypi.org/forums/viewtopic.php?t=207888