2010-11-21 13 views
0

Ich versuche, die Sensoren eines iRobot Create mit Pyserial zu streamen. Ich importiere openinterface.py, Setup den Bot Variable mit der CreateBot Funktion, und rufen Sie dannWie stream bot Sensoren mit Pyserial?

bot.stream_sensors (6)

Dann erhalte ich diesen Fehler - "Streaming Thread Fehler Tupelindex out of range" Die Der einzige Grund, warum ich die Funktion mit 6 anrufe, ist, dass das, was ich anschaue, verwendet wird. Ich habe auch stream_sensors (0), stream_sensors (1), bis zu 6 probiert. Mit einer Zahl kleiner als 6, bekomme ich den gleichen Fehler plus "Illegal Sensor ID!". Worauf basiert der Parameter? Ist es der spezifische Sensor, den ich streamen möchte (und wenn ja, wie bekomme ich die Nummer)? Jede Hilfe wäre willkommen.

+1

Können Sie Ihre Frage so bearbeiten, dass sie den von Ihnen verwendeten Code enthält? – spade78

Antwort

1

Wenn Sie durch die Quelle openinterface.py schauen, sieht es so aus, als ob Sie den Fehler "Illegale Sensor-ID" erhalten, weil der angegebene ID-Wert beim Aufruf von stream_sensors() nicht mit einem Wörterbuch mit bekannten Sensor-IDs übereinstimmt. Der Sensor-ID-Wörterbuch wird in der Klasse angegeben SensorPacketDecoderAPI:

class SensorPacketDecoderApi: 
""" 
Transform sensor data in the form of bytes (from a serial stream) 
into a dictionary of sensor values. 
""" 

names = {'left-velocity' : 42, 
     'right-velocity' : 41, 
     'radius' : 40, 
     'velocity' : 39, 
     'n-stream-packets' : 38, 
     'song-playing' : 37, 
     'song-number' : 36, 
     'oi-mode' : 35, 
     'home-base?'  : 34, 
     'internal-charger?' : 34, 
     'user-analog-in-0' : 33, 
     'baud-rate-change?' : 32, 
     'user-digital-in-3' : 32, 
     'user-digital-in-2' : 32, 
     'user-digital-in-1' : 32, 
     'user-digital-in-0' : 32, 
     'cliff-right-signal' : 31, 
     'cliff-right-front-signal' : 30, 
     'cliff-left-front-signal' : 29, 
     'cliff-left-signal' : 28, 
     'wall-signal' : 27, 
     'capacity' : 26, 
     'charge' : 25, 
     'temperature' : 24, 
     'current' : 23, 
     'voltage' : 22, 
     'charging-state' : 21, 
     'angle' : 20, 
     'distance' : 19, 
     'advance?' : 18, 
     'play?' : 18, 
     'infrared-byte' : 17, 
     'left-wheel-overcurrent?'  : 14, 
     'right-wheel-overcurrent?'  : 14, 
     'low-side-driver-2-overcurent?' : 14, 
     'low-side-driver-0-overcurent?' : 14, 
     'low-side-driver-1-overcurent?' : 14, 
     'virtual-wall?' : 13, 
     'cliff-right?' : 12, 
     'cliff-front-right?' : 11, 
     'cliff-front-left?' : 10, 
     'cliff-left?' : 9, 
     'wall?' : 8, 
     'wheel-drop-caster?' : 7, 
     'wheel-drop-left?' : 7, 
     'wheel-drop-right?' : 7, 
     'bump-left?'   : 7, 
     'bump-right?'  : 7, 
     'all' : 6} 

Was den Grund, warum Sie die sind immer „! Streaming-Thread-Fehler ...“, ich bin nicht sicher, ich kann nur sagen, Von meinem Blick durch den Code ist, dass es in einer Funktion namens _stream_sensors_worker in der CreateBot-Klasse stammt. Es gibt auch eine Funktion namens _test_sensor_streaming, die Sie auch versuchen könnten, einige Debug-Informationen von _stream_sensors_worker zu bekommen.