Как транслировать датчики ботов с помощью pyserial? - PullRequest
0 голосов
/ 22 ноября 2010

Я пытаюсь транслировать датчики iRobot Create с помощью pyserial.Я импортирую openinterface.py, устанавливаю переменную бота с помощью функции CreateBot, а затем вызываю

bot.stream_sensors (6)

Затем я получаю эту ошибку - «Ошибка потокового потока!диапазона «Единственная причина, по которой я вызываю функцию с помощью 6, заключается в том, что именно этот пример я рассмотрел.Я также пробовал stream_sensors (0), stream_sensors (1), вплоть до 6. При любом числе меньше 6 я получаю ту же ошибку плюс «Недопустимый идентификатор датчика!».На чем основан параметр?Это конкретный датчик, который я хочу передать (и если да, то как мне получить номер)?Любая помощь будет оценена.

1 Ответ

1 голос
/ 16 декабря 2010

Просматривая источник openinterface.py, похоже, что вы получаете ошибку «Недопустимый идентификатор датчика», потому что заданное значение идентификатора, которое вы используете при вызове stream_sensors (), не соответствует словарю с известными идентификаторами датчика.Словарь идентификатора датчика указан в классе 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}

Что касается причины, по которой вы получаете сообщение «Ошибка потокового потока! ...», я неконечно, все, что я могу сказать по своему взгляду через код, это то, что он происходит из функции с именем _stream_sensors_worker внутри класса CreateBot.Также есть функция с именем _test_sensor_streaming , которую вы также можете попробовать получить отладочную информацию от _stream_sensors_worker .

...