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

# Tutorial or samples

Overview | API | Tutorial or samples

## Red Ball Tracker Sample

Python example

`alredballtracker_start.py`

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

    """Example: Use Tracking Module to Track a Red Ball"""

    import qi
    import argparse
    import sys
    import time

    def main(session, ballSize):
        """
        This example shows how to use ALTracker with red ball.
        """
        # Get the services ALTracker, ALMotion and ALRobotPosture.

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

        # First, wake up.
        motion_service.wakeUp()

        fractionMaxSpeed = 0.8
        # Go to posture stand
        posture_service.goToPosture("StandInit", fractionMaxSpeed)

        # Add target to track.
        targetName = "RedBall"
        diameterOfBall = ballSize
        tracker_service.registerTarget(targetName, diameterOfBall)

        # set mode
        mode = "Move"
        tracker_service.setMode(mode)

        # Then, start tracker.
        tracker_service.track(targetName)

        print "ALTracker successfully started, now show a red ball to robot!"
        print "Use Ctrl+c to stop this script."

        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print
            print "Interrupted by user"
            print "Stopping..."

        # Stop tracker, go to posture Sit.
        tracker_service.stopTracker()
        tracker_service.unregisterAllTargets()
        posture_service.goToPosture("Sit", fractionMaxSpeed)
        motion_service.rest()

        print "ALTracker stopped."

    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")
        parser.add_argument("--ballsize", type=float, default=0.06,
                            help="Diameter of ball.")

        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, args.ballsize)

## Face Tracker Sample

Python example

`alfacetracker_start.py`

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

    """Example: Use Tracking Module to Track a Face"""

    import qi
    import argparse
    import sys
    import time

    def main(session, faceSize):
        """
        This example shows how to use ALTracker with face.
        """
        # Get the services ALTracker and ALMotion.

        motion_service = session.service("ALMotion")
        tracker_service = session.service("ALTracker")

        # First, wake up.
        motion_service.wakeUp()

        # Add target to track.
        targetName = "Face"
        faceWidth = faceSize
        tracker_service.registerTarget(targetName, faceWidth)

        # Then, start tracker.
        tracker_service.track(targetName)

        print "ALTracker successfully started, now show your face to robot!"
        print "Use Ctrl+c to stop this script."

        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print
            print "Interrupted by user"
            print "Stopping..."

        # Stop tracker.
        tracker_service.stopTracker()
        tracker_service.unregisterAllTargets()
        motion_service.rest()

        print "ALTracker stopped."

    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")
        parser.add_argument("--facesize", type=float, default=0.1,
                            help="Face width.")

        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, args.facesize)

## LArm Tracker Sample

Python example

`allarmtracker_start.py`

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

    """Example: Use Tracking Module to Track a Red Ball with LArm"""

    import qi
    import argparse
    import sys
    import time

    def main(session, ballSize, effector):
        """
        This example shows how to use ALTracker with red ball and LArm.
        """
        # Get the services ALTracker, ALMotion and ALRobotPosture.

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

        # First, wake up.
        motion_service.wakeUp()

        fractionMaxSpeed = 0.8
        # Go to posture stand
        posture_service.goToPosture("StandInit", fractionMaxSpeed)

        # Add target to track.
        targetName = "RedBall"
        diameterOfBall = ballSize
        tracker_service.registerTarget(targetName, diameterOfBall)

        # set mode
        mode = "Head"
        tracker_service.setMode(mode)

        # set effector
        tracker_service.setEffector(effector)

        # Then, start tracker.
        tracker_service.track(targetName)

        print "ALTracker successfully started, now show a red ball to robot!"
        print "Use Ctrl+c to stop this script."

        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print
            print "Interrupted by user"
            print "Stopping..."

        # Stop tracker, go to posture Sit.
        tracker_service.stopTracker()
        tracker_service.unregisterAllTargets()
        tracker_service.setEffector("None")
        posture_service.goToPosture("Sit", fractionMaxSpeed)
        motion_service.rest()

        print "ALTracker stopped."

    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")
        parser.add_argument("--ballsize", type=float, default=0.06,
                            help="Diameter of ball.")
        parser.add_argument("--effector", type=str, default="LArm",
                            choices=["Arms", "LArm", "RArm"],
                            help="Effector for tracking.")

        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, args.ballsize, args.effector)

## Generic event Tracker Sample

Python example

`aleventtracker_start.py`

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

    """Example: Use Tracking Module to Track an Object"""

    import qi
    import argparse
    import sys
    import time

    def main(session):
        """
        This example shows how to use ALTracker to track an object with trackEvent api.
        This example is only a subscriber. You need to create another script to raise the tracked event.
        Your events should follow this structure :
            EventNameInfo {
              TargetPositionInFrameWorld,
              TimeStamp,
              EffectorId,
              HeadThreshold (optional)
              }
        All details are available in ALTracker API Documentation.
        """
        # Get the services ALTracker, ALMotion and ALRobotPosture.

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

        # First, wake up.
        motion_service.wakeUp()

        fractionMaxSpeed = 0.8

        # Go to posture stand
        posture_service.goToPosture("StandInit", fractionMaxSpeed)

        # Set target to track.
        eventName = "ALTracker/BlobDetected"

        # set mode
        mode = "Move"
        tracker_service.setMode(mode)

        # Set the robot relative position to target
        # The robot stays a 50 centimeters of target with 10 cm precision
        tracker_service.setRelativePosition([-0.5, 0.0, 0.0, 0.1, 0.1, 0.3])

        # Then, start tracker.
        tracker_service.trackEvent(eventName)

        print "ALTracker successfully started."
        print "Use Ctrl+c to stop this script."

        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            print
            print "Interrupted by user"
            print "Stopping..."

        # Stop tracker, go to posture Sit.
        tracker_service.stopTracker()
        tracker_service.unregisterAllTargets()
        posture_service.goToPosture("Sit", fractionMaxSpeed)
        motion_service.rest()

        print "ALTracker stopped."

    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