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

# Idle

NAOqi Motion - Overview | API

## What it does

These API are dedicated to define ALMotion behavior when the robot is idle, that is, when no user command is sent.

## How it works

### Idle control modes

There are three idle control modes:

- No idle control: in this mode, when no user command is sent to the robot, it does not move.
- Idle posture control: in this mode, the robot automatically comes back to a reference posture, then stays at that posture until a user command is sent.
- Breathing control: in this mode, the robot plays a breathing animation in loop.

### Body chain idle control

The idle behavior of the robot is defined body chain per body chain.

The idle control of any body chain can be activated or deactivated at any moment, with `ALMotionProxy::setIdlePostureEnabled` and `ALMotionProxy::setBreathEnabled`. The last call to either of these functions defines a body chain idle control mode.

Any other user command overrides an idle task.

Transitions to and from idle task are automatic and smooth.

## Getting started

This example shows how to start an idle task on a robot, in breathing mode, and how to change the parameters of the breathing dynamically.

`almotion_breath.py`

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

    """Example: Use case of breath API"""

    import qi
    import argparse
    import sys
    import time

    def main(session):
        """
        Use case of breath API
        """
        # Get the services ALMotion & ALRobotPosture.

        motion_service = session.service("ALMotion")
        posture_service = session.service("ALRobotPosture")

        # Wake up robot
        motion_service.wakeUp()

        # Send robot to Stand Init
        posture_service.goToPosture("StandInit", 0.5)

        # Start breathing
        motion_service.setBreathEnabled('Body', True)

        # Let the robot breath
        time.sleep(10)

        # Stop breathing
        motion_service.setBreathEnabled('Body', False)

        # Go to rest position
        print 'rest'
        motion_service.rest()

    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)

Glossary Site map Index Support Contact Legal Notices