Python SDK入门(4)—— 记录数据

2019-12-17 17:43:21 浏览数 (1)

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

0 人点赞