USING THE PYTHON WRAPPER FOR ARIA
---------------------------------
A "wrapper" library for Python has been provided in the "python" directory.
This wrapper layer provides a Python API which simply makes calls into the
regular Aria C++ library (libAria.so/AriaVC10.dll). In general, the Python API
mirrors the C++ API.
The Aria Python wrapper currently requires Python version 2.4.4 if on Debian 3 or Windows,
Python 2.5 if on Debian 5, or Python 2.7 if on Ubuntu 12. Multiple versions of
Python may be installed on Debian Linux; if so, commands are provided such as
'python2.4' or 'python2.5' or 'python2' to invoke the different versions of
Python.
NOTE: You should use the versions of Python mentioned above, since the wrapper
library code is generally only compatible with the runtime libraries provided
by these versions. To use a different version of Python, you must
rebuild the wrapper library (see below).
You can download Python 2.4.4 from:
http://www.python.org/download/releases/2.4.4
(Python 2.2 is also at python.org.)
On Debian, you can install Python 2.5 by entering the following command
when connected to the Internet:
sudo apt-get install python
Or, you can download Python 2.5.5 from:
http://www.python.org/download/releases/2.5.5
On Ubuntu, you can install Python 2.7 with the following command:
sudo apt-get install python2.7
(NOTE if using Python 2.6 or later: Python 2.6 requires native C++ DLLs to be
named with a ".pyd" file extension, rather than .dll/.so as was
allowed in previous versions. So if Python 2.6 is unable to import the
AriaPy DLL module, rename _AriaPy.dll or _AriaPy.so to _AriaPy.pyd
in the python/ subdirectory.)
Documentation about the Python language and libraries is at:
http://docs.python.org
To use the wrapper library you must create an environment variable called PYTHONPATH
that has the full path to Aria's 'python' directory in it.
On Linux, set it to:
/usr/local/Aria/python
On Windows, set it to:
C:\Program Files\MobileRobots\Aria\python
Environment variables are set in Windows in the Advanced tab of the System control panel.
For an example you can start the simulator, then enter
the pythonExamples directory and run:
python simple.py
On Windows, you can just double-click simple.py.
NOTE: The Python wrapper API is not as well tested as Aria itself. If
you encounter problems, please notify the aria-users mailing list. Furthermore,
some methods have been omitted or renamed, and you have to do a few things
differently (see next section).
USING ACTIONS IN PYTHON
-----------------------
Writing classes in Python that subclass classes from Aria is not as
straightforward as making subclasses of native Python classes. Subclasses
of classes in the wrapper are not direct subclasses of the C++ classes,
they are only subclasses of the Python wrapper classes, which implement the logic
to redirect calls between the C++ and wrapper classes. The practical
consequences of this include the following:
1. You cannot call a virtual method in the parent class which the subclass
overrides -- it will always be directed to the subclass's implementation.
For example, you can override ArAction::setRobot(), which is a virtual
method. But then, any call to setRobot() on the subclass will always
be directed to the subclass's implementation; calling
self.ArAction.setRobot() from you subclass's setRobot() override would
result in an infinite recursion, so Swig throws an exception instead.
There is no workaround for this other than extending each parent class
in wrapper.i ad-hoc to include an additional method with a new name to
invoke the method defined in the parent. We have done this for a few
cases (such as ArAction::setRobot()), but If this ever becomes neccesary
for any others, please let us know and we will add the extension.
2. Swig currently does not make protected methods available to
subclasses, though this may be fixed in the future.
OTHER DIFFERENCES
-----------------
See the C++ API docs for various classes for notes about how they might be
used differently in Python. For example, ArConfigArg and ArFunctor are used
slightly differently (since those classes use features unique to C++).
REBUILDING THE PYTHON WRAPPER
-----------------------------
You must rebuild the Python wrapper if you make any interface changes to
ARIA and want them to be available in Python. You may also need to rebuild
the wrapper if you want to use another version of Python (as distributed, the
wrapper libraries were built with and linked against the 2.4 Python runtime library
on Debian Linux and Windows, and 2.2 on RedHat 7).
If you want to rebuild the Python wrapper you need to install SWIG, you
can get it from http://www.swig.org/download.html (use version 1.3.29 or newer.)
You'll also need Python, which you can get from
http://www.python.org.
On Linux, you may also need to install a Python "Development" package in addition
to the main Python runtime package. e.g. on Debian, install python2.4-dev. On
Windows, if the python24_d.lib library is missing, you can download the
Python 2.4 source code and compile the "python" project in the PCbuild subdirectory.
Set the environment variable PYTHON_INCLUDE to the full path of Python's
include directory. On Linux, this is usually /usr/include/python2.4 for
Python 2.4 or /usr/include/python2.2 for Python 2.2 or /usr/include/python2.7
for Python 2.7. On Windows, it depends
on where you installed Python but a typical value is C:\Python24\include for
Ptyhon 2.4).
On Windows you'll also need to set the environment variables
PYTHON_LIB to the full path of the Python library and PYTHON_LIBDIR to the directory
containing all the Python libs. These depend on where
you installed Python, but a typical value would be "C:\Python24\libs\python24.lib" for
PYTHON_LIB and "C:\Python24\libs" for PYTHON_LIBDIR for Python 2.4.
Set environment variables in the Advanced section of the System control panel.
On Linux Run 'make python' in the Aria directory, and again run 'make python' in
the ArNetworking subdirectory if you also want the wrapper library for
ArNetworking. On Windows, open the AriaPy-vc2010.sln file in the 'python'
directory with Visual Studio 2010 and build AriaPy and, if desired,
ArNetworkingPy in Release configuration. The native ARIAlibrary may be
automatically rebuilt if neccesary.