Python SDK入门(4)—— 记录数据
对于NAO来说,记录下它众多传感器的数据是很容易的。让我们来看一个简单的例子吧:
代码语言:javascript复制# -*- 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 os
import sys
import time
from naoqi import ALProxy
def 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)
# 将会在两秒钟内从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", output
if __name__ = "__main__":
main()
接下来我们将会没50ms调用一次ALMemoryProxy::getData()
来将值存进一个矩阵中,然后将这个矩阵写入一个文件。
注意: 这个方法相当的慢!但是不要尝试更高的频率去获取数据,这会给NAO的CPU带来很大的负担!