Software
========


.. toctree::
  :hidden:

  requirements
  choregraphe/choregraphe_overview
  monitor/index
  naosim/index
  naoflasher/index
  choregraphe/index

**NAO** comes with:


* :ref:`embedded-software`, running on the motherboard located in the head of NAO, allowing
  autonomous behaviors.
* :ref:`desktop-software`, running on your computer, allowing creation of new behaviors,
  remote control and simulations.
* :ref:`programmer-tools`, allowing remote control of the robot and also the
  expansion of its capabilities.

.. image:: /medias/sofware-overview.png
   :height: 339 px
   :width: 559 px



.. _embedded-software:

Embedded Software
------------------

.. image:: /medias/sofware-embedded-overview.png
   :height: 247 px
   :width: 396 px

**OpenNAO** is an embedded GNU/Linux distribution based on Gentoo, specifically
developed to fit the **NAO** robot needs.

**NAOqi** is the main software that runs on the robot and controls it.
Copies of NAOqi also run on your computer in order to let you test your behaviors on virtual robots.



.. _desktop-software:

Desktop software
------------------

.. image:: /medias/sofware-desktop-overview.png
   :height: 296 px
   :width: 474 px

**Choregraphe** is a visual programming language. It allows you to: create animations
and behaviors for your NAO, test them on a simulated robot before trying them with
your real NAO, and also monitor and control NAO.


**Monitor** is dedicated to give you an elementary feedback from your robot and
a simple access to its camera settings.


**NAOsim** is a simulator where you can test NAO  behaviors and your
algorithms in a virtual world. You can modify the environment by inserting and
modifying objects of various shapes.



.. _programmer-tools:

Tools for programmers
----------------------

Create your own code, using:

* **Choreographe** as a visual programming language and/or,
* one of the available **SDKs**.

.. image:: /medias/sofware-programming-overview.png
   :height: 339 px
   :width: 553 px

Depending on the chosen language, programmer is able to:

* create a code remotely controlling the robot (all SDKs),
* create new **NAOqi modules** and upload them on the robot (C++, Python),
* create code to enrich **Choregraphe box library** (Python).