AXIS213PTZ System plugin
Overview
This site describes the plugin for an AXIS(tm) System. The plugin has been developed as a wrapper plugin for the
AxisCameraPlugin. Both are plugins to run in a 52°North
SensorPlanningService (SPS).
Introduction
Based on the application scenario a sensor could be considered as autonomous or the contrary: as part of an application system (e.g. a mobile sensor platform). The idea of an autonomous sensor and a sensor which is part of a more complex system does not bar from the fact that these sensors can be the same. Considering the intended context the sensor is applied to a user maybe wants to task the sensor in a different way, than in an other context.
The
AxisCameraPlugin was developed as an autonomous plugin. Its InputParameters are pan/tilt/zoom values, which the client have to submit to task the camera. The plugin then »talks« directly to the AXIS213PTZ network camera, which updates its gimbal to point at where the user wants to.
The
AxisSystem is a wrapper plugin to the
AxisCameraPlugin. As part of a more complex application system, the
AxisSystem plugin offers a new taskable input interface to the user which is more adaptable to the application scenario. The conversions are done via sensorML processing which is described below in detail.
Application scenario
On a mobile sensor platform (e.g. the
MobileSensorPlatform2) several sensors are installed, including the AXIS213PTZ network camera. The camera is connected to a network via WLAN router on the platform. An SPS runs in the background with both installed and registered, the
AxisCameraPlugin and the
AxisSystem.
The sensor platform is free to move at any point where necessary, so a GPS sensor is installed to retrieve the current position of the platform. In addition to the position, an other sensor measures the azimuth angle, elevation angle and roll angle of the platform. Position coordinates and measured variance values will be written into a SOS continuesly.
Via SPS the
AxisSystem plugin receives Submit commands from a user client to task the camera where to look at. The plugin then processes the input parameters (having regard to the current position and correction parameters which can be accessed from the SOS) to task the
AxisCameraPlugin accordingly.
Current development
The current development do not deal with communication between the MSP2 or similar mobile platform for now. The camera is fixed to a position and therefore it is not moveable. There is no MSP2 which wirtes new parameters into a SOS. The scenario is not fully realized, however. Nevertheless, the principle of parameter processing is the same, as if the camera were movable.
The system plugin
As mentioned above the plugin serves as wrapper plugin for the
AxisCameraPlugin. Nevertheless, the
AxisSystem is a full plugin itself with the camera plugin as sensor backend instead of a real sensor. Both plugins implement the
SPSSensor
interface of the 52°North
SensorPlanningService.
The systems logic primarily bears on to convert the input parameter vales into absolute gimbal values and send a new
Submit
request to the SPS where the
AxisCameraPlugin is installed at.
SensorML description
The SensorML description used for the camera and the system is located at
http://ifgi.uni-muenster.de/~h_bred01/SwSl/AXIS-SML. For reusability reasons you will find several files each describing a part of the camera and its context (main file is
ifgicam_Axis213PTZ.xml).
To read and parse the sensorML description, the plugin uses the [[http://code.google.com/p/sensorml-data-processing/][sensorml-data-processing API] and
swe-common-data-framework API. Both projects were initiated by the
VAST Team at the University of Huntsville, Alabama (UAH).
Process models
Currently, the Axis system offers the user an interface a user can submit two parameters to:
- A position where the camera shall look at.
- An angle which defines the horizontal field of view.
These two parameters must be converted to absolute pan, tilt and zoom values to set the gimbal of the camera. A
ProcessModel
describes a method to process a given input to a defined output and the parameters needed to do that.
The sensorML document describes some more processes like an
AxisVideoConverter
, but these are not implemented, yet.
AxisAOVToZoomCalculator
The
angle of view (AOV) describes the recorded extent of the camera. Here, we mean the horizontal AOV. It is a value to express zoom levels. In collaboration with University of Huntsville, Alabama, the zooming capabilities of the Axis PTZ213 camera were surveyed to describe a value array to do further interpolation operations (the measured values are given as parameter in the
process model of the zoomCalculator to calibrate the process).
Fig. 1: Illustrates the horizontal angle of view (as well as diagonal and vertical AOV).
However, the process itself reads the calibration values and interpolates a cubic spline function to calculate an absolute zoom value from a given AOV angle.
The plugin uses the
CubicSpline
function of
Dr. Michael Thomas Flanagan's Java Scientific Library. You can download it from
http://www.ee.ucl.ac.uk/~mflanaga/java/CubicSpline.html. The complete library can be downloaded, too (check
license before downloading).
The process model can be reviewed at
AxisAOVToZoomCalculator.xml.
|
Name |
sweType |
UOM |
Limits |
Description |
Input |
horizontalAngleOfView |
QuantityRange |
deg |
2.7--56.3 |
The horizontal angle of view that the camera records with. |
Output |
absoluteZoom |
Quantity |
Steps |
1--9999 |
Zooms the camera to a designated level. |
Parameters |
calibration |
DataArray |
NA |
NA |
Maps predefined AOV values to their corresponding absZoom values. |
axisPositionToGimbalConverter
The cameras reference system is a left rotated engineering coordinate system with the cameras gimbal position as origin. The user inputs a geodetic WGS84 coordinate (described in EPSG 4979 CRF, that is (lat,lon,alt) on WGS84 ellipsoid -- for more details query the
http://www.epsg-registry.org/ with EPSG code 4979) where the camera shall look at.
Fig. 2:
Compares EPSG4978 (left) and EPSG4879 (right) .
The sensorML document describes the coordinate reference frames (CRF) we have to consider in more detail:
- The CRF of the camera (left rotated). See Axis213PTZ.xml#AXIS_SYSTEM_CRS
- The CRF of the cameras gimbal (coincident with 1., but Gimbal origin is slightly higher than of the whole camera system). See Axis213PTZ_gimbal.xml#GIMBAL_CRS and the
positions
section in Axis213PTZ.xml#AXIS_SYSTEM_CRS for the relationship. Recheck, if description is covering complete description, referring to a camera which is hanging upside-down.
- The CRF of the world (right rotated), wherein the target points are referenced in. See
positions
list of ifgicam_Axis213PTZ.xml to get the relationship between the CRFs in detail.
Fig. 3: The relationship of camera CRF and its gimbal CRF.
The gimbal values must be calculated with respect to the gimbals coordinate system: The target coordinate will be transformed into the gimbals reference frame. With the cameras position as origin and the orientation of the local CRF within the WGS84 CRF the gimbal angles can be processed.
Fig. 4: Position and orientation of the local frame within the WGS84 CRF.
|
Name |
sweType |
UOM |
Limits |
Description |
Input |
positionToPointAt |
Position |
WGS84 coordinate (EPSG:4979) |
NA |
Position (location) the camera shall be pointed at. |
Output |
absolutePan |
Quantity |
deg |
-160--169 |
Pans the device relative to the (0,0) position. |
|
absoluteTilt |
Quantity |
deg |
-10--90 |
Tilts the device relative to the (0,0) position. |
Parameters |
cameraSystemPosition |
Position |
WGS84 coordinate (EPSG:4979) + orientation |
NA |
Position (location + orientation) of the station the camera is attached to. |
Download and SVN
Currently the
AxisSystem is only available from scratch together with the
AxisCameraPlugin. Check out the code from
svn co https://svn.52north.org/svn/swe/main/SPS/Plugins/Axis/trunk/SPS-AxisSystem/
Install instructions
Note that the
AxisSystem has not a release status yet. So you have to check out the project in your eclipse workspace side by side with an SPS. To let them run together, add the plugin project as webapplication module so the SPS can use the plugin without having it as jar file in its library folder. In addition to that, the plugin project must offer the libraries it needs to be run (`Offer and export' in `Java Build Path' -- these libraries have to be added to the `J2EE Module Dependencies' of the SPS, too).
Install both
AxisCameraPlugin and
AxisSystem at the SPS: Open AM administration interface and copy/paste the
updateAMConfiguration.xml
documents laying in
xml/examples/axis-{camera,system}
and send each to the SPS. Both plugins are known to the SPS now.
Now install an AXIS camera sensor instance by sending the
registerAxisCamera.xml
to the SPS (Adapt it to your camera .. there is a detailed documentation on doing this in the
doc
folder). Note the responded
sensorId
and put it into the
registerAxisSystem.xml
(at the moment the
AxisSystem delegates the Submit request with processed parameters). Send it to the SPS.
Test the plugin by submitting the
submit.xml
example request. Observe the cameras movement where you can access your camera stream.
Planned development
- Merge functionality into one AXIS system plugin (no plugin chaining)
- Create release
--
HenningBredel - 12 Oct 2008