NAO Hardware Overview & Capabilities

NAO is a 58cm (23-inch) humanoid robot with impressive capabilities for education. Understanding its hardware helps you program effectively.

Sensors

  • Cameras: Two cameras (front and bottom) for vision and object recognition
  • Microphone array: Four microphones for sound localization and voice recognition
  • Touchpads: Head, hands, and feet for input detection and interaction
  • IMU (Inertial Measurement Unit): Accelerometers and gyroscopes for balance and movement detection
  • Sonar: Distance sensors in the chest for obstacle avoidance

Actuators (Motors)

  • 25 motors: Distributed across head (2), arms (4 per arm), torso (1), and legs (6 per leg)
  • Movement capability: NAO can walk, stand on one leg, perform gestures, and maintain balance
  • Speaking: Integrated text-to-speech synthesis in 19+ languages

Processing

NAO runs Linux on a dual-core Intel Atom processor. This gives you real processing power—unlike simpler robots, NAO can run fairly complex algorithms onboard.

25 Actuated Motors
6+ Sensor Types
19 Languages Supported

Choregraphe: Visual Programming for Everyone

Choregraphe is the standard way to program NAO without coding. It's a visual, drag-and-drop environment perfect for beginners and creating animations.

Getting Started with Choregraphe

After installing Choregraphe and connecting to a NAO robot (or simulator), you'll see the main interface:

  • Timeline: Horizontal bar at the top showing animation frames
  • Behavior tree: Left panel showing your program structure (what runs when)
  • Diagram editor: Central area where you'll arrange boxes and connect them
  • 3D preview: Right side showing how the robot moves in real-time

Building a Simple Animation

Goal: Make NAO wave its hand.

  1. Create a new behavior (File → New Behavior)
  2. Drag the Timeline box to the Timeline (left side panel)
  3. Double-click the Timeline box to edit it
  4. In the 3D view on the right, move NAO's arm to a wave position at frame 0
  5. Move the timeline slider to frame 30 (about 1 second)
  6. Move NAO's arm back to rest position
  7. Click play to preview the animation
  8. Adjust frames and positions until the wave looks natural

That's the core Choregraphe workflow: define positions at key frames, and Choregraphe creates smooth transitions between them.

Python SDK Basics & Your First Program

For more control and complex behaviors, you'll move to Python programming. NAO's Python SDK lets you control every aspect of the robot.

Setting Up Python Development

Download the NAO Python SDK from Softbank Robotics' community portal. The SDK includes documentation and example code. Your development machine needs:

  • Python 2.7 or 3.x (NAO supports both)
  • NAO Python SDK (naoqi-python)
  • A text editor or IDE (VS Code, PyCharm, etc.)
  • Network connection to NAO robot (or run the simulator)

Your First Python Program: Connect to NAO

Here's minimal code to connect and make NAO speak:

from naoqi import ALProxy

# Connect to NAO
robot_ip = "192.168.1.100" # Replace with your NAO's IP
port = 9559
session = ALProxy("ALTextToSpeech", robot_ip, port)

# Make NAO speak
session.say("Hello, I am NAO!")

Key points:

  • ALProxy objects represent robot systems (speech, motion, vision, etc.)
  • You need the robot's IP address (find it through the robot's interface or network scan)
  • Port 9559 is the standard NAOqi port
  • Method calls are synchronous by default—your code waits for the action to complete

First Programs: Walk, Talk, Dance, Respond to Voice

Make NAO Walk

The motion API handles walking. Here's basic movement:

from naoqi import ALProxy

motionProxy = ALProxy("ALMotion", "192.168.1.100", 9559)
postureProxy = ALProxy("ALRobotPosture", "192.168.1.100", 9559)

# Stand up first
postureProxy.goToPosture("Stand", 0.5)

# Walk forward 0.5 meters
motionProxy.moveTo(0.5, 0, 0)

Make NAO Dance

Combine Choregraphe animations with Python logic. In Choregraphe, create animation behaviors. From Python, trigger them with:

# Assuming you created an animation called "my_dance.crg"
behaviorProxy = ALProxy("ALBehaviorManager", robot_ip, port)
behaviorProxy.startBehavior("my_dance")

Respond to Voice Commands

NAO's speech recognition is context-aware. Teach it words to recognize:

speechProxy = ALProxy("ALSpeechRecognition", robot_ip, port)

# Set vocabulary
vocabulary = ["hello", "goodbye", "dance", "walk"]
speechProxy.setVocabulary(vocabulary, False)

# Listen and get result
result = speechProxy.getWordListAsString()
if "dance" in result:
    motionProxy.moveTo(0.5, 0, 0)

Classroom Project Ideas & Curriculum Alignment

NAO works well in K-12 and university settings. Here are proven project ideas:

Grade Level Project Idea Skills Developed
K-2 (Elementary) NAO tells stories; students create animations with Choregraphe Sequencing, cause-and-effect, storytelling
3-5 (Elementary) Program NAO to respond to voice; build a "smart classroom assistant" Logic, simple programming, problem-solving
6-8 (Middle) Create a dance routine with sensor input; build a quiz game Algorithmic thinking, conditional logic, sensor integration
9-12 (High School) Image recognition robot (identify objects); autonomous navigation Computer vision, machine learning basics, advanced algorithms
University Research projects: HRI, AI, motion control; contribute to RoboCup Research methodology, advanced programming, systems engineering

Curriculum Alignment

NAO projects naturally align with Common Core standards (math and ELA), Next Generation Science Standards (engineering practices), and state CS standards. The robot serves as a context for teaching programming, algorithms, sensors, and system design.

Debugging Tips & Troubleshooting

Common Issues & Solutions

  • Connection refused: Check robot IP address, ensure both machines are on same network, verify port 9559 is open
  • Robot doesn't move after command: Make sure the robot is first put in "Stand" posture; some commands require this
  • Speech recognition not working: Check microphone levels (touch NAO's head to check battery), speak clearly, ensure vocabulary is set
  • Program hangs: Most NAO operations are blocking; if something takes too long, set timeouts or use threading
  • Animation looks jerky: Increase the number of frames; NAO's 25 motors need time to move smoothly between poses

Using Logs for Debugging

NAO logs diagnostic information. Enable logging in your Python code to see what's happening:

import logging
logging.basicConfig(level=logging.DEBUG)

# Now all ALProxy calls will log their actions

Teacher Resources & Community Support

NAO has an excellent community and existing resources:

  • Softbank Robotics Community Portal: Official tutorials, code examples, and documentation
  • RoboCup: NAO competes in RoboCup Standard Platform League. Attending competitions or watching matches helps you understand what's possible
  • Choregraphe documentation: Built into the application—right-click any box to access help
  • NAO Academy: Online courses specifically for educators using NAO in classrooms
  • Open-source projects: Search GitHub for NAO projects; lots of students and researchers share code

When you get stuck, the NAO community is responsive. Post on the official forums or check Stack Overflow—chances are your question has been asked before.

Next Steps: Advanced Programming

Once you master basic programs, explore advanced topics:

  • Computer Vision: NAO's cameras can detect faces, recognize objects, and read QR codes. The vision API is powerful for advanced applications.
  • Machine Learning: Train classifiers to recognize gestures, emotions, or objects. NAO can run inference onboard.
  • Human-Robot Interaction (HRI): Use speech, gestures, and facial expressions to create more natural robot behavior.
  • Motion Planning: Move NAO through complex paths while avoiding obstacles using sophisticated motion planning algorithms.
  • Multi-robot coordination: Control multiple robots to work together on shared tasks.

The NAO platform is deep—you can spend years exploring its capabilities. Start simple, master the basics, then expand into areas that interest you and your students.