KPCA Gesture Identifier is a ROS package for recognizing and matching gestures and trajectories with training data. It uses Kernel Principal Component Analysis to separate the training data, and a simple K-nearest neighbors algorithm to perform classification on this space.
The package is comprised of a number of generic source files that do not
depend on ROS, located in src/
. ROS nodes live in nodes/
. Several
launch files exist in launch/
— these can be used directly to
interface with the training data, or modified to use a different data
set.
It may be useful to run the command rostopic echo /trajectory_shape
for debugging purposes — this is the topic that the matched
gesture will be published on.
Support is included for recognizing mouse movement with in a dedicated window, although this serves primarily as a demo. It is likely desirable to replace this front end with a custom one suited for your application.
Front End/Utility Nodes | Back End Nodes |
---|---|
MouseTrackerNode | TrajectoryNormalizerNode |
TrajectorySaverNode | NormalizedTrajectoryMatcherNode |
BlobTrackerNode |
As part of matching trajectories, both the training data as well as the test data must be normalized. Built in normalization methods include:
Name | Description |
---|---|
default |
Alias for linear_time_invariant , may change. |
linear |
Points are resampled uniformly by time — linear interpolation is used between points. Each axis of the input data is scaled independently. |
linear_time_invariant |
Points are resampled uniformly by distance — linear interpolation is used between points. Each axis of the input data is scaled independently. |
cubic_spline |
Points are resampled uniformly by time — cubic splines are used to interpolate between points. Each axis of the input_data is scaled independently. |
linear_scale_uniform |
Like linear , except axes are not scaled independently. |
linear_time_invariant_scale_uniform |
Like linear_time_invariant , except axes are not scaled independently. |
cubic_spline_scale_uniform |
Like cubic_spline , except axes are not scaled independently. |
none |
Indicates you will handle interpolation yourself. See below. |
If a built in normalization method is sufficient, launching a
TrajectoryNormalizerNode
and specifying an interpolation_strategy
on
the parameter server will automatically normalize and convert
TrajectoryStamped
messages into the Trajectory
message accepted by
NormalizedTrajectoryMatcherNode
.
In the case that you want to handle normalization yourself, you must
specify none
as the interpolation_strategy
and additionally ensure
all training data has been normalized prior to being saved to disk.