对于 NAO 来说,记录下它众多传感器的数据是很容易的。让我们来看一个简单的例子吧:
# -*- UTF-8 -*-"""记录下一些传感器的数据,并将它们写入到一个文本中"""# MEMORY_VALUE_NAMES 是我们想要存储的ALMemory的值的列表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 datadef main():"""解析命令行参数,运行recordData并将结果写进一个csv文件中"""if len(sys.argv) < 2:nao_ip = ROBOT_IPelse:nao_ip = sys.argv[1]motion = ALProxy("ALMotion", nao_ip, 9559)# 设置头部马达的刚化motion.setSetiffnesses("Head", 1.0)# 将会在两秒钟内从1.0弧度到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", outputif __name__ = "__main__":main()
接下来我们将会没 50ms 调用一次ALMemoryProxy::getData() 来将值存进一个矩阵中,然后将这个矩阵写入一个文件。
注意: 这个方法相当的慢!但是不要尝试更高的频率去获取数据,这会给 NAO 的 CPU 带来很大的负担!
