roboticsnao-robot

Nao robot IMU data rates


I'm trying to stream data from the Nao's inertial unit in its trunk. However the update rate is quite slow ~ 1Hz. Is there any way to improve it? For reference, I issued the following command using qicli to measure the rates:

qicli call --json ALMemory.getListData "[[\"Device/SubDeviceList/InertialSensor/AngleY/Sensor/Value\"]]"

In this example I retrieve the tilt angle of the trunk around the Y-axis (pitch).

To execute this command, I established an SSH connection to the Nao. I timed it using the linux time command. I also tried to force a faster read rate by issuing the above command in a loop with 5 milliseconds of sleep between each iteration:

for i in {1..100}; do qicli call --json ALMemory.getListData "[[\"Device/SubDeviceList/InertialSensor/AngleY/Sensor/Value\"]]"; sleep 0.005; done

But even in this case I could see that the data was read at about a rate of 1Hz.

I tried it on Nao versions 5 and 6. I also connected both over WiFi and a link-locally using an ethernet cable.


Solution

  • This data is available every 10ms, but a qicli call takes a long time to init the connection.

    Try using the api in python, create a proxy then call the getData in the loop, refer to the API documentation here.

    As a side note, best way to record data or to monitor it efficiently is to process it directly on the NAO. Connect using ssh upload your program and run it, or use choregraphe to create and run it directly on the robot easily.

    # edit: adding simple script to be run directly on NAO (untested)
    import time
    import naoqi
    mem = naoqi.ALProxy("ALMemory","localhost",9559)
    while 1:
        val = mem.getData("Device/SubDeviceList/InertialSensor/AngleY/Sensor/Value")
        print(val)
        time.sleep(0.01)