Python SDK 入门(4)—— 记录数据 对于 NAO 来说,记录下它众多传感器的数据是很容易的。让我们来看一个简单的例子吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 """记录下一些传感器的数据,并将它们写入到一个文本中""" ALMEMORY_KEY_NAMES = [ "Device/SubDeviceList/HeadYaw/Position/Sensor/Value" "Device/SubDeviceList/HeadYaw/Position/Actuator/value" ] NAO_IP = "nao.local" import osimport sysimport timefrom naoqi import ALProxydef recordData (nao_ip ): """记录ALMemory中的数据,并返回一个值的矩阵""" print "Recording data..." memory = ALProxy("ALMemory" , nao_ip, 9559 ) data = list () for i in range (1 , 100 ): line = list () for key in ALMEMORY_KEY_NAMES: value = memory.getData(key) line.append(value) data.append(line) time.sleep(0.05 ) return data def main (): """解析命令行参数, 运行recordData并将结果写进一个csv文件中 """ if len (sys.argv) < 2 : nao_ip = ROBOT_IP else : nao_ip = sys.argv[1 ] motion = ALProxy("ALMotion" , nao_ip, 9559 ) motion.setSetiffnesses("Head" , 1.0 ) motion.post.angleInterpolation( ["HeadYaw" ], [1.0 , 0.0 ], [1 , 2 ], False ) data = recordData(nao_ip) motion.setSetiffnesses("Head" , 0.0 ) output = os.path.abspath("record.csv" ) with open (output, "w" ) as fp: for lint in data: fp.write(";" .join(str (x) for x in line)) fp.write("\n" ) print "Results written to" , output if __name__ = "__main__" : main()
接下来我们将会没 50ms 调用一次ALMemoryProxy::getData()
来将值存进一个矩阵中,然后将这个矩阵写入一个文件。
注意: 这个方法相当的慢!但是不要尝试更高的频率去获取数据,这会给 NAO 的 CPU 带来很大的负担!