NAOqi Vision - Overview | API | Tutorial
This tutorial explains how to run the ALBarcodeReader module using Python. Two methods can be used to retrieve the results pushed by the module in ALMemory, query the memory regularly or subscribe to an event.
This is done by calling the ALMemoryProxy::getData() regularly.
vision_barcodeReader_readMemory.py
from naoqi import ALProxy
import time
ROBOT_IP="your.robot.ip.here"
barcode=ALProxy("ALBarcodeReader", ROBOT_IP, 9559)
barcode.subscribe("test_barcode")
memory=ALProxy("ALMemory", ROBOT_IP, 9559)
# Query last data from ALMemory twenty times
for i in range(20):
data = memory.getData("BarcodeReader/BarcodeDetected")
print data
time.sleep(1)
This method requires to write a small module which inherits from ALModule and contains a callback method which will be called each time the event BarcodeReader/BarcodeDetected() is raised.
Unlike the previous method, this one will only print new data.
vision_barcodeReader_subscribeToEvent.py
from naoqi import *
import time
# Get a proxy on ALBarcodeReader
ROBOT_IP="your.robot.ip.here"
barcode=ALProxy("ALBarcodeReader", ROBOT_IP, 9559)
memory=ALProxy("ALMemory", ROBOT_IP, 9559)
broker = ALBroker("pythonBroker","0.0.0.0", 0, ROBOT_IP, 9559)
# Handler class
class myEventHandler(ALModule):
def myCallback(self, key, value, msg):
print "Received \"" + str(key) + "\" event with data: " + str(value)
# Subscribe to the event (this will start the module)
handlerModule = myEventHandler("handlerModule")
memory.subscribeToEvent("BarcodeReader/BarcodeDetected", "handlerModule", "myCallback")
time.sleep(20) # Keep the broker alive for 20 seconds
# Unsubscribe to event
memory.unsubscribeToEvent("BarcodeReader/BarcodeDetected", "handlerModule")
Received "BarcodeReader/BarcodeDetected" event with data: [['test', [[84.0, 14.0], [77.0, 72.0], [132.0, 77.0], [139.0, 22.0]]]]
Received "BarcodeReader/BarcodeDetected" event with data: [['test', [[52.0, 11.0], [49.0, 91.0], [130.0, 100.0], [137.0, 15.0]]]]
Received "BarcodeReader/BarcodeDetected" event with data: [['test', [[62.0, 12.0], [54.0, 92.0], [135.0, 103.0], [148.0, 19.0]]]]
Received "BarcodeReader/BarcodeDetected" event with data: [['test', [[63.0, 13.0], [56.0, 93.0], [137.0, 105.0], [148.0, 20.0]]]]
...