LEGO NXT(V1) mit dem Raspberry 3 via Bluetooth steuern (kein BrickPi)

  • Moin allerseits,


    bin komplett neu hier im Forum und relativ neu mit dem Raspberry unterwegs.


    Folgendes Projekt würde ich gerne realisieren:

    • Raspberry steuert LEGO NXT(ja ich habe noch den ganz alten) mit aktueller Firmware (1.3.1)
    • am Raspberry ist das Cameramodul angeschlossen (DONE)
    • mittels OpenCV wird eine Szene analysiert und in Steuersignale für den NXT "umgewandelt" (DONE)
    • Die Signale werden via Bluetooth an den NXT gesendet
    • da die Bluetoothverbindung jetzt hoffentlich steht, kann man alle Sensorwerte als zusätzliches Feedback an den Raspberry senden

    Was bisher geschah:

    Ich habe auf meinem Raspberry Raspbian Stretch laufen, openCV erfolgreich installiert und getestet. Ich lasse das ganze in der virtualenv laufen.

    https://www.pyimagesearch.com/…hon-on-your-raspberry-pi/:thumbup:



    nxt-python, welches eigentlich meine Lösung sein müsste funktioniert meines erachtens nicht auf stretch und python3, jedenfalls kommen beim installieren etliche Syntax fehler

    -habe es mit python2.7 und python3 probiert

    -auch schon diverse Versionen von nxt-python probiert. Die aktuellste ist laut Website jedoch von 2015!! :(

    --> https://pypi.python.org/pypi/nxt-python/2.2.2

    --> http://www.raspberry-pi-geek.c…ol-stuff-with-Lego-and-Pi

    ==> HELP!!! hat da wer Erfahrungen machen können und das ganze zum laufen gebracht? Gibt es alternativen zu nxt-python?


    Leider konnte den NXT nicht dauerhaft mit dem Raspberry via Bluetooth verbinden:

    Er wird nämlich zunächst nicht gefunden. Ok, da der NXT-Bluetoot-Adapter eh bissel zickig ist, habe ich mir einen USB-Bluetooth-Adapter geholt, der definitiv für den NXT geeignet ist (schon mit dem PC getestet)

    -USB-Dongle wird im Raspberry erkannt.

    -sudo apt-get install bluetooth bluez blueman installiert

    -hcitool scan -->NXT gefunden

    -Gerät erkannt, und verbunden :) :love:

    -NXT neustarten, Raspi Bluetooth menu, NXT->connect: Connection failed, No usable services on this device

    -hcitool scan : Inquiry failed: Connection timed out :cursing:

    ==>HELP!!!


    OK das wars erstmal von mir. Bin gespannt auf eure Hilfe und auf das Feedback von euch und vom NXT :)

    Greets Age:danke_ATDE:

  • Würde mich auch interressieren, allerdings das ganze mit dem EV3.
    Raspberry und EV3 sollten Daten, bzw. Befehle austauschen und miteinander arbeiten können, würde diese beiden gerne kombinieren. Soll quasi so funktioneieren, dass ich vom Raspberry ein Befehl an den EV3 schicke, dass er eine abfolge ausführt, oder einen sensorwert zurückgibt. Andersrum sollte es auch gehen, dass wenn sich ein Sensorwert z.B. ändert, dass sich der EV3 beim Raspberry bemerkbar macht.


    Kann man denn auch den Raspberry gleichzeitig über Bluetooth mit dem EV3 und einem Bluetooth Audio empfänger verbinden? Der EV3 hat keinen Audio Ausgang und die Onboard Soundkarte des Raspberry hat mir zu viele Störgeräusche.

  • Hello Again :)

    Also nachdem ich gestern mal wieder eine schlaflose Nacht hatte, da mich Mini-Fortschritte davon abhielten ins Bett zu gehen kann ich tatsächlich Erfolge verbuchen!!!

    Tatsächlich kann ich nicht wirklich sagen welches der entscheidende Schritt war aber folgendes habe ich gestern Nacht gemacht: (soweit ich mich erinnere)


    nxt-python:

    vorher habe ich immer folgende Befehle verwendet:

    Code
    1. wget http://code.google.com/p/nxt-python/downloads/detail?name=nxt-python-2.2.2.tar.gz&can=2&q=
    2. tar xzf nxt-python-2.2.2.tar.gz
    3. cd nxt-python
    4. sudo python setup.py install

    Gestern Nacht dann folgendes:

    Code
    1. sudo apt-get install python-nxt

    Bluetooth:

    das ist der komplexere Teil. Nachdem ich mich ewig mit dem hcitool und hciconfig rumgeplagt habe waren glaube ich folgende Schritte (oder einige oder keiner) zielführend:

    1. Anpassen der bluez-einstellungen:

    Code
    1. sudo nano /etc/systemd/system/dbus-org.bluez.service

    unter [Service]

    [...]

    ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=sap

    ExefStartPost=/usr/bin/sdptool add SP

    [...]


    2. deaktivieren des ON-Board-BT:

    Code
    1. sudo nano /boot/config.txt

    ganz unten folgendes anfügen:

    dtoverlay=pi3-disable-bt


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


    3. mac adresse und pin in Datei "pincodes" schreiben:

    gksudo

    dann "pcmanfm" eingeben und mit OK bestätigen ............

    hab gerade gesehen, dass die erstellte Datei wohl gelöscht wurde und es anscheinend ohne funktioniert. :)


    3. Raspberry 3 BT-fix anwenden: ich hab kein Plan ob das zur Lösung beigetragen hat

    https://www.pi-supply.com/make…ry-pi-3-bluetooth-issues/

    Code
    1. sudo apt-get update
    2. sudo apt-get updgrade -y
    3. sudo apt-get dist-upgrade -y
    4. sudo apt-get install pi-bluetooth

    sudo apt-get install bluez bluez-firmware

    sudo apt-get install blueman

    sudo usermod -G bluetooth -a pi

    cat /etc/group | grep bluetooth


    Der letzte Aufruf liefert vor dem FIX

    bluetooth: x:111:

    und danach

    bluetooth:x:111:pi


    4. bluetoothctl benutzen

    bluetoothctl

    wichtig ist hierbei, dass der NXT auf Sichtbar eingestellt ist.

    der Controller eures BT-Dongles sollte als Standard eingestellt sein.

    Da ihr ja den OnBoard-BT-Controller deaktiviert habt sollte

    list nur einen Controller anzeigen: Controller XX:XX:XX:XX:XX:XX raspberrypi [default]

    devicesliefert euch dann: Device YY:YY:YY:YY:YY:YY NXT

    trust YY:YY:YY:YY:YY:YY vertraut dem NXT und mittels

    agent onschaltet ihr den pincode-modus an. Jetzt nurnoch

    pair YY:YY:YY:YY:YY:YYim Terminal eingeben, auf dem NXT die 1234 bestätigen und im Terminal ebenfalls die 1234 eingeben.

    info YY:YY:YY:YY:YY:YYsollte in etwa folgendes ausspucken:


    Device YY:YY:YY:YY:YY:YY

    Name: NXT

    Alias: NXT

    Class: 0x000804

    Paired: yes

    Trusted: yes

    Blocked: no

    Connected: no

    LegacyPairing: no

    UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb)



    Jetzt kamen bei mir immer sehr verwirrende anzeigen, was die connection angeht. NICHT VERWIRREN LASSEN!!!

    NXT->connect: Connection failed, No usable services on this device

    Kein Grund zur Sorge.

    Startet man jetzt die Testprogramme von der nxt-python Seite wird die Connection mit dem gepairten NXT automatisch auf- und danach wieder abgebaut.


    Falls ihr zufällig dazu Fragen habt, her damit :)


    Auf geht's in die nächste Nachtrunde :)


    Greets Age


    EDIT:

    Was folgt als nächstes? Da die grundsätzliche Machbarkeit geklärt und getestet ist, geht es jetzt an die Innereien der EVA.

    Als E will ich eine Bildauswertung mit openCV und dem Camera-Modul. Lane-Tracking, Farb-/Symbol-Erkennung, etc.

    Fürs V würde ich gerne n Regler aufsetzen, zum Testen ein P-Regler, später dann einen PID einstellen und ganz ganz später Richtung Fuzzy und Adaptiv.

    Das A steht im Sinne der NXT Kommunikation: hier muss ich mich erstmal reinarbeiten. Die NXT-Sensoren will ich ganz nebenbei auch für die Eingabe nutzen.

    Vermutlich werde ich um Multithreading nicht herumkommen.


    Vielleicht pack ich zwischendurch noch bissel Hardware drauf. Ich halte euch auf dem laufenden.

  • Moin EinzellerXD, da ich keine Lust habe, dein Zitat zu zerpflücken sieht die Antwort so aus:

    Greets Age

  • Ich habe doch tatsächlich etwas dazu im Internet gefunden, besonders viel ist das zwar nicht, aber es hat mich ein großes Stück voran gebracht.

    Ich habe es jetzt geschafft, mit meinem EV3 Text an den Raspberry zu senden, das ganze funktioniert auch in die Andere richtung problemlos. Auch mein wunsch, die beiden "selbstständig" arbeiten zu lassen, und nicht jeden schritt zu senden oder ständig die Sensoran abzufragen zu müssen, ist in erfüllung gegangen. Natürlich werde ich dazu dann Multithreading anwenden müssen, aber damit habe ich mich schonmal auseinander gesetzt. Nur das mit dem Bluetooth und dem Audio will nicht, scheinbar nimmt der Raspberry immer nur ein Gerät gleichzeitig.

    Ich versuche den code eingermaßen verständlich zu gestalten, und dann hier zu veröffentlichen. Was code angeht bin ich noch ein Anfänger und kopier deshalb dementsprechend viel aus dem Internet, aber es ist brauchbar :S