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
Hokuyo URG-04LX mit Python auslesen
@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.
-
- User
- Beiträge: 8
- Registriert: Donnerstag 1. Dezember 2016, 00:27
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
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

@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?
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?
-
- User
- Beiträge: 8
- Registriert: Donnerstag 1. Dezember 2016, 00:27
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:
Habe ich da vielleicht schon was falsch gemacht?
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)
-
- User
- Beiträge: 8
- Registriert: Donnerstag 1. Dezember 2016, 00:27
Daran lag es 
Wieder was dazugelernt, vielen Dank an euch beide!

Wieder was dazugelernt, vielen Dank an euch beide!
-
- User
- Beiträge: 8
- Registriert: Donnerstag 1. Dezember 2016, 00:27
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:
Der Fehler ist in dieser Funktion:
Dort bekommt er jedes mal ein leeres 'result' zurück, weswegen er beim assert natürlich abbricht. Weiß da jemand weiter? :K

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
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
@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.

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.
-
- User
- Beiträge: 8
- Registriert: Donnerstag 1. Dezember 2016, 00:27
@BlackJack: Ich hatte es mittlerweile schon selbst rausgefunden, aber du hattest mit dem Protokoll Recht
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

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
