Seite 1 von 1

Hokuyo URG-04LX mit Python auslesen

Verfasst: Donnerstag 1. Dezember 2016, 01:32
von RootGrapefruit
Moin,
ich möchte mit Python einen Hokuyo URG-04LX Laser ansteuern. Hierzu habe ich mir diese Library runtergeladen und installiert:
https://github.com/SuderPawel/hokuyo-python-lib
Soweit ich das verstanden habe kann ich den Laser aber damit nur über den Serial Port ansprechen, meiner ist aber per USB angeschlossen.

Hat jmd von euch schon Erfahrungen mit dem Laser und Python gemacht oder eine bessere Idee wie ich das angehen soll?

Liebe Grüße,
RootGrapefruit

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Donnerstag 1. Dezember 2016, 09:14
von BlackJack
@RootGrapefruit: Also laut dem verlinkten PDF mit der Protokollbeschreibung, Abschnitt 4 „Interface and Setting“, macht das für Programme keinen Unterschied ob ”serielles Kabel”, also RS232, oder USB verwendet wird. Man braucht den entsprechenden Treiber um das als serielle Schnittstelle ansprechen zu können.

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Donnerstag 1. Dezember 2016, 18:46
von RootGrapefruit
Den Treiber habe ich installiert, Python sagt beim Compilieren aber:
raise SerialException("could not open port {!r}: {!r}".format(self.portstr, ctypes.WinError()))
serial.serialutil.SerialException: could not open port '/dev/ttyACM0': FileNotFoundError(2, 'Das System kann den angegebenen Pfad nicht finden.', None, 3)

Wenn ich '/dev/ttyACM0' zu '/dev/ttyUSB0' ändere das gleiche :(

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Donnerstag 1. Dezember 2016, 18:53
von BlackJack
@RootGrapefruit: Beim Compilieren‽

Etwas komisch ist auch `ctypes.WinError()` und dann Linux-Pfade‽

*Gibt* es denn `/dev/ttyACM0` oder `/dev/ttyUSB0`? Wie hast Du den Treiber installiert? Hat Linux den ACM-Treiber nicht schon dabei? Muss man das Kernelmodul eventuell aktivieren/laden?

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Donnerstag 1. Dezember 2016, 19:09
von RootGrapefruit
Ich benutze Windows 7, den Treiber habe ich auch über Windows installiert (also Rechtsklick auf der Gerät und dann Treiber aktualisieren).

Mein Quellcode ist bis jetzt:

Code: Alles auswählen

import hokuyo
import serial

uart_port = '/dev/ttyACM0'
uart_speed = 19200
laser_serial = serial.Serial(port=uart_port, baudrate=uart_speed, timeout=0.5)

port = serial_port.SerialPort(laser_serial)

laser = hokuyo.Hokuyo(port)
Habe ich da vielleicht schon was falsch gemacht?

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Donnerstag 1. Dezember 2016, 19:26
von Sirius3
@RootGrapefruit: unter Windows heißen die Ports auch COM1, COM2, etc.

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Donnerstag 1. Dezember 2016, 19:38
von RootGrapefruit
Daran lag es :)
Wieder was dazugelernt, vielen Dank an euch beide!

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Sonntag 4. Dezember 2016, 19:56
von RootGrapefruit
Das Installieren hat geklappt, ansprechen kann ich den Laser aber immer noch nicht, weil er anscheinend nicht antwortet :(
Das hokuyo Objekt kann ich erstellen und initialisieren, aber sobald ich den Laser anspreche kommt folgende Exception:

Code: Alles auswählen

RESULT: ""Traceback (most recent call last):
  File "..\AppData\Local\Programs\Python\Python35-32\lib\site-packages\hokuyo_python_lib-1.3-py3.5.egg\hokuyo\driver\hokuyo.py", line 97, in __sho
rt_command
    result += self.__execute_command(command)
  File "..\AppData\Local\Programs\Python\Python35-32\lib\site-packages\hokuyo_python_lib-1.3-py3.5.egg\hokuyo\driver\hokuyo.py", line 87, in __exe
cute_command
    assert result == command
AssertionError
READ 2 EXTRA BYTES: ""
None
Der Fehler ist in dieser Funktion:

Code: Alles auswählen

    def __execute_command(self, command):
        self.__port_lock.acquire()
        try:
            self.__port.write(command)
            result = self.__port.read(len(command))
            assert result == command
        finally:
            self.__port_lock.release()
        return result
Dort bekommt er jedes mal ein leeres 'result' zurück, weswegen er beim assert natürlich abbricht. Weiß da jemand weiter? :K

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Sonntag 4. Dezember 2016, 22:56
von BlackJack
@RootGrapefruit: Der Autor von dem Code hat eine sehr eigenwillige Interpretation von sinnvoller Ausnahmebehandlung und/oder der Bedeutung von ``assert``. Er benutzt ``assert``\s behandelt die dann aber durch ``except BaseException`` wo der Traceback ausgegeben wird und dann läuft das Programm weiter als wäre nichts passiert. :?

Spricht das Gerät denn auch das Protokoll das diese Bibliothek erwartet? Ich glaube in der Anleitung stand was davon das man zwischen Version 1 und 2 umschalten kann oder so.

Re: Hokuyo URG-04LX mit Python auslesen

Verfasst: Montag 5. Dezember 2016, 01:46
von RootGrapefruit
@BlackJack: Ich hatte es mittlerweile schon selbst rausgefunden, aber du hattest mit dem Protokoll Recht :D
Das (offizielle) Data Viewing Tool des Lasers hat mir angezeigt, dass er auf SCIP 2.0 eingestellt war, in Wirklichkeit war es aber noch 1.1.
Nachdem ich das umgestellt habe ging es :D