Exploration API¶
Overview | API Navigation | API Exploration
Namespace : AL
#include <alproxies/alnavigationproxy.h>
Experimental methods list¶
Warning
This is still a work in progress, and API may change in the future.
Pepper only¶
With Pepper, you can use exploration methods:
ALNavigationProxy::explore
ALNavigationProxy::stopExploration
ALNavigationProxy::saveExploration
ALNavigationProxy::getMetricalMap
ALNavigationProxy::navigateToInMap
ALNavigationProxy::getRobotPositionInMap
ALNavigationProxy::loadExploration
ALNavigationProxy::relocalizeInMap
ALNavigationProxy::startLocalization
ALNavigationProxy::stopLocalization
Experimental Methods¶
Warning
This is still a work in progress, and API may change in the future.
Makes Pepper explore autonomously its surrounding environment in the limit of the radius passed as parameter.
Parameters: - radius – distance max to explore in meters.
Returns: a future holding the Error code corresponding to the final status of the exploration.
Warning
This is still a work in progress, and API may change in the future.
Stops any ongoing exploration or localization. No-op if nothing is running.
Warning
This is still a work in progress, and API may change in the future.
Saves the current exploration data on disk for a later use.
Returns: a string indicating the path of the created .explo file.
Warning
This is still a work in progress, and API may change in the future.
Returns the map based on the currently loaded exploration. The map is formatted as follow: [mpp, width, height, [originOffsetX, originOffsetY], [pxlVal, ...]]
where:
- mpp is the resolution of the map in meters per pixel,
- width and height are the size of the image in pixels,
- originOffset is the metrical offset of the pixel (0, 0) of the map,
- and [pxlVal, ...] is the buffer of pixel floating point values between 0 (occupied space) and 100 (free space).
Throws if no exploration is loaded or if the localization is not running.
Returns: an ALValue containing the map formatted as explained.
Warning
This is still a work in progress, and API may change in the future.
Makes Pepper navigate to a desired target by using the explored map.
Throws if no exploration is loaded or if the localization is not running.
Note: for now, Pepper does NOT use final theta target, but only XY position. For final orientation, you can use a ALMotion.moveTo of the desired angle.
Parameters: - target – [x, y, theta] of the target in explorated map frame.
Returns: a future holding an error code representing the status of the execution.
Warning
This is still a work in progress, and API may change in the future.
Retrieves the localized position of the robot in the current explored map frame.
Throws if no exploration is loaded or if the localization is not running.
Returns: an ALValue containing a Localized Pose.
Warning
This is still a work in progress, and API may change in the future.
Loads the .explo from the location on the disk.
Returns: a future holding the success of the exploration loading.
Warning
This is still a work in progress, and API may change in the future.
Requests the localizer to relocalize around an estimated pose.
Throws if no exploration is loaded.
Parameters: - estimation – [x, y, theta] of the estimated pose of the robot in map frame.
Returns: a Future holding the resulting localized pose formatted as follow.
Warning
This is still a work in progress, and API may change in the future.
Starts the exploration loop that computes the robot localization.
Throws if no exploration is loaded.
Warning
This is still a work in progress, and API may change in the future.
Stops the exploration loop that computes the robot localization. No-op if localization loop is not running.
Custom types¶
Localized Pose¶
Localized pose is formatted as following:
[Pose, Uncertainty]
where:
- Pose is the position [X, Y, theta] computed by the localizer
- Uncertainty is the ellipse with parameters [radiusX, radiusY, orientation] defining the uncertainty ellipse of the localized pose
Error code¶
Value | Meaning |
---|---|
0 | OK |
1 | KO |
2 | Canceled |
3 | TargetReached |
4 | TargetNotReached |
5 | TargetOutOfMap |
Code samples¶
Python script for exploring¶
The following script makes the robot explore a 2 m radius zone, and if everything went OK, saves the exploration on disk, comes back to his starting point, and displays the result map.
#! /usr/bin/env python
# -*- encoding: UTF-8 -*-
"""Example: Use explore method."""
import qi
import argparse
import sys
import numpy
import Image
def main(session):
"""
This example uses the explore method.
"""
# Get the services ALNavigation and ALMotion.
navigation_service = session.service("ALNavigation")
motion_service = session.service("ALMotion")
# Wake up robot
motion_service.wakeUp()
# Explore the environement, in a radius of 2 m.
radius = 2.0
error_code = navigation_service.explore(radius)
if error_code != 0:
print "Exploration failed."
return
# Saves the exploration on disk
path = navigation_service.saveExploration()
print "Exploration saved at path: \"" + path + "\""
# Start localization to navigate in map
navigation_service.startLocalization()
# Come back to initial position
navigation_service.navigateToInMap([0., 0., 0.])
# Stop localization
navigation_service.stopLocalization()
# Retrieve and display the map built by the robot
result_map = navigation_service.getMetricalMap()
map_width = result_map[1]
map_height = result_map[2]
img = numpy.array(result_map[4]).reshape(map_width, map_height)
img = (100 - img) * 2.55 # from 0..100 to 255..0
img = numpy.array(img, numpy.uint8)
Image.frombuffer('L', (map_width, map_height), img, 'raw', 'L', 0, 1).show()
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)
Python script for localizing¶
The following script loads a map given in argument, relocalizes Pepper inside this map, and navigates to a position in the map.
#! /usr/bin/env python
# -*- encoding: UTF-8 -*-
"""Example: Use localization methods"""
import qi
import argparse
import sys
def main(session, exploration_file):
"""
This example uses localization methods.
"""
# Get the services ALNavigation and ALMotion.
navigation_service = session.service("ALNavigation")
motion_service = session.service("ALMotion")
# Wake up robot
motion_service.wakeUp()
# Load a previously saved exploration
navigation_service.loadExploration(exploration_file)
# Relocalize the robot and start the localization process.
guess = [0., 0.] # assuming the robot is not far from the place where
# he started the loaded exploration.
navigation_service.relocalizeInMap(guess)
navigation_service.startLocalization()
# Navigate to another place in the map
navigation_service.navigateToInMap([2., 0., 0.])
# Check where the robot arrived
print "I reached: " + str(navigation_service.getRobotPositionInMap()[0])
# Stop localization
navigation_service.stopLocalization()
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("--explo", type=str, help="Path to .explo file.")
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.explo)