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
# -*- 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带来很大的负担!