NAO - Versions and Body Type

NAO - Version | NAO - Body type | Programmatic access to version and body type


NAO - Version

Many upgrade of NAO body type exist.
They can be differentiated with the head’s back design.
Version Back design
V5 ../_images/head_back_large_zoom_v50.png
V4 ../_images/head_back_large_zoom_v40.png
V3.3 ../_images/head_back_large_zoom_v33.png
V3+, V3.2 ../_images/head_back_large_zoom_v32.png

NAO - Body type

NAO H25

../_images/nao_h25_pres.png

NAO H21

../_images/nao_h21_pres.png

NAO T14

../_images/nao_t14_schema.png

NAO T2

../_images/nao_t2_schema.png

Programmatic access to version and body type

To retrieve dynamically the body type and version of the robot, use: ALMotionProxy::getRobotConfig() method.

almotion_getrobotconfig.py

# -*- encoding: UTF-8 -*-

import argparse
from naoqi import ALProxy

def main(robotIP, PORT=9559):
    motionProxy = ALProxy("ALMotion", robotIP, PORT)

    # Example showing how to get the robot config
    robotConfig = motionProxy.getRobotConfig()
    for i in range(len(robotConfig[0])):
        print robotConfig[0][i], ": ", robotConfig[1][i]

    # "Model Type"   : "naoH25", "naoH21", "naoT14" or "naoT2".
    # "Head Version" : "VERSION_32" or "VERSION_33" or "VERSION_40".
    # "Body Version" : "VERSION_32" or "VERSION_33" or "VERSION_40".
    # "Laser"        : True or False.
    # "Legs"         : True or False.
    # "Arms"         : True or False.
    # "Extended Arms": True or False.
    # "Hands"        : True or False.
    # "Arm Version"  : "VERSION_32" or "VERSION_33" or "VERSION_40".
    # Number of Legs : 0 or 2
    # Number of Arms : 0 or 2
    # Number of Hands: 0 or 2


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", type=str, default="127.0.0.1",
                        help="Robot ip address")
    parser.add_argument("--port", type=int, default=9559,
                        help="Robot port number")

    args = parser.parse_args()
    main(args.ip, args.port)