# SoftBank Robotics documentation What's new in NAOqi 2.8?

# Logging data - Head angles

Recording the values of various sensors of the robot is easy.

Here is a simple example:

`data_recording.py`

    #! /usr/bin/env python
    # -*- encoding: UTF-8 -*-

    """Example: Record some sensors values and write them into a file."""

    import qi
    import argparse
    import sys
    import os
    import time

    # MEMORY_VALUE_NAMES is the list of ALMemory values names you want to save.
    ALMEMORY_KEY_NAMES = ["Device/SubDeviceList/HeadYaw/Position/Sensor/Value",
                          "Device/SubDeviceList/HeadYaw/Position/Actuator/Value"]

    def recordData(memory_service):
        """ Record the data from ALMemory.
        Returns a matrix of values

        """
        print "Recording data ..."
        data = list()
        for range_counter in range (1, 100):
            line = list()
            for key in ALMEMORY_KEY_NAMES:
                value = memory_service.getData(key)
                line.append(value)
            data.append(line)
            time.sleep(0.05)
        return data

    def main(session):
        """ Parse command line arguments, run recordData
        and write the results into a csv file.
        """
        # Get the services ALMemory and ALMotion.

        memory_service = session.service("ALMemory")
        motion_service = session.service("ALMotion")

        # Set stiffness on for Head motors
        motion_service.setStiffnesses("Head", 1.0)
        # Will go to 1.0 then 0 radian  in two seconds
        motion_service.angleInterpolation(
            ["HeadYaw"],
            [1.0, 0.0],
            [1  , 2],
            False,
            _async=True
        )
        data = recordData(memory_service)
        # Gently set stiff off for Head motors
        motion_service.setStiffnesses("Head", 0.0)

        output = os.path.abspath("record.csv")

        with open(output, "w") as fp:
            for line in data:
                fp.write("; ".join(str(x) for x in line))
                fp.write("\n")

        print "Results written to", output

    if __name__ == "__main__":
        parser = argparse.ArgumentParser()
        parser.add_argument("--ip", type=str, default="127.0.0.1",
                            help="Robot IP address. On robot or Local Naoqi: use '127.0.0.1'.")
        parser.add_argument("--port", type=int, default=9559,
                            help="Naoqi port number")

        args = parser.parse_args()
        session = qi.Session()
        try:
            session.connect("tcp://" + args.ip + ":" + str(args.port))
        except RuntimeError:
            print ("Can't connect to Naoqi at ip \"" + args.ip + "\" on port " + str(args.port) +".\n"
                   "Please check your script arguments. Run with -h option for help.")
            sys.exit(1)
        main(session)

We simply have to call `ALMemoryProxy::getData` every 50 ms, store the values in a matrix, and then write the matrix to a file.

Warning

This method is fairly slow. Do not try to get data at a higher frequency, it may take too much CPU on the robot.

Glossary Site map Index Support Contact Legal Notices