Sensoren auslesen (Bumper)

  • Hallo,

    ich hab seit längerer Zeit einen Xiaomi Vacuum Generation 1 mit gerooteter Firmware. Kurz gefragt: Kann man den Status der verschiedenen Sensoren, insbesondere der vorderen "Bumper", ohne viel Aufwand auslesen?


    Darauf gekommen bin ich durch dieses Video, und dachte mir mit einem gerooteten Gerät könnte man das schöner lösen ^^


    Was ich bisher probiert hab:

    Logs angeschaut beim Reinigungsvorgang, und während ich den Bumper berühre

    - Logs in /mnt/data/rockrobo/rrlog

    - Logs in /tmp/shm

    Konnte dort keinen Ausschlag bei den geloggten Werten feststellen, gibt dort auch keine gesonderten Logeinträge für den Sensor (aber viel zu Positionsdaten, IR und Sonar, wobei mir die Parameter nicht viel sagen außer beim IR (Entfernung(?) zu dem "Loch" vor der rotierenden Bürste an der Seite))


    Desweiteren hab ich mir im Ghidra Decompiler ein paar Anwendungen angeschaut, muss dazu sagen dass ich leider wenig Ahnung vom Decompilieren habe, konnte aber einen kleinen Überblick gewinnen:

    - uart_test (uart_test-3.2.1-20190220) (Issue auf Github, welches zeigt was damit alles geht, u.a. Auslesen aller Sensoren)

    - player

    - RoboController

    Hier taucht beim Durchsuchen die Bezeichnung "bumper" einige Male auf, leider werd ich nicht wirklich schlau, wie die Werte jetzt zustande kommen. Beim Testen der LED wird bspw. "1" in eine Datei in /sys gepipet, bei den Sensoren scheint das nicht so einfach zu sein.

    Es gibt weiterhin sehr viele Log-Anweisungen in diesen Anwendungen, aber wo landet die Ausgabe? Ich hab es nicht gefunden.


    Vielleicht weiß jemand mehr,

    Danke!

  • Henne78

    Approved the thread.
  • Es gibt weiterhin sehr viele Log-Anweisungen in diesen Anwendungen, aber wo landet die Ausgabe? Ich hab es nicht gefunden.

    Glaube das landet alles in /dev/null ^^


    Ich vermute uart_test verbindet sich mit der MCU über eine Serielle Schnittstelle. Und darüber kommen die Daten.

  • Ich habs nun irgendwie geschafft, dass der Bumper Status geloggt wird :D Funktioniert aber nur, während der Staubsauger im Saug-Modus ist, aber das reicht mir erstmal.


    Hab mir nochmal die Folien von Dennis durchgeschaut und da hab ich gesehen, dass die "player" Komponente open source und halbwegs gut dokumentiert ist! Falls es jemanden interessiert, zum nachblättern:

    http://playerstage.sourceforge…iting_configuration_files

    http://playerstage.sourceforge.net/wiki/Data_logging


    In der /opt/rockrobo/cleaner/conf/ruby_chassis.cfg hab ich die letzten beiden Driver "writelog" und "ruby_support" auskommentiert und meinen eigenen druntergesetzt:


    Code: ruby_chassis.cfg
    1. driver
    2. (
    3. name "writelog"
    4. log_directory "/run/shm/derp"
    5. filename "test.log"
    6. requires ["bumper:0"]
    7. provides ["log:0"]
    8. alwayson 1
    9. autorecord 1
    10. )

    Dann Roboter neugestartet.


    Die /run/shm/derp/test.log wird erstellt, hat aber 0 byte. Dafür wird es nun in die /dev/shm/PLAYER_fprintf.log geschrieben (keine Ahnung warum). Es geht also :)

  • Ja das ganze Teil basiert eigentlich auf Player xD