我正在尝试使用 pyserial 传输 iRobot Create 的传感器。我导入
openinterface.py
,使用 CreateBot 函数设置 bot 变量,然后调用
bot.stream_sensors(6)
然后我收到此错误 - “流线程错误!元组索引超出范围”我用 6 调用该函数的唯一原因是因为这就是我正在查看的示例所使用的内容。我还尝试过
stream_sensors(0)
、stream_sensors(1)
,一直到 6。对于任何小于 6 的数字,我都会得到相同的错误加上“Illegal sensor id!
”。参数是基于什么?这是我想要传输的特定传感器(如果是,我如何获取该号码)?任何帮助将不胜感激。
查看 openinterface.py 源代码,您似乎收到了“非法传感器 id”错误,因为调用 stream_sensors() 时使用的给定 ID 值与具有已知传感器 ID 的字典不匹配。传感器 ID 字典在类 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 的函数。创建机器人类。还有一个名为 _test_sensor_streaming 的函数,您也可以尝试从 _stream_sensors_worker 获取一些调试信息。