|turning your Android device into
a precise electronic agility course timer
a fanatic dog agility nerd myself, I had
been racking my brains about ways to better tim
e my agility course runs
and those of my fellow club mates, and to easily keep record
of result times. For most trainers and modestly sized clubs, a
handheld stopwatch has always been the most straightforward way to go.
It's a cheap solution, although prone to human lapses and, in some
way or another, times must be manually written down after each run if
you choose to keep record of them.
and expensive electronic timing gates can readily be encountered at
most official trials nowadays, but these are way out of reach of most
amateur agility clubs and backyard jumpers. Such gates are based on the
breaking of a
reflective light beam and run times can be remotely recorded and
With smartphones getting more powerful and versatile
every day, I was convinced that through a few hours of Android
programming it would be feasible to create an App capable of similar
functionalities, making use of the phone's built-in camera. That's how
JumpStart was conceived. Those 'few hours' eventually turned into
several weekends of fun programming and field tests. During the last
two months the App has been made available to a selected group of
▀-testers all over the globe, who have greatly helped me
making the App better and contributed with valuable ideas. I wish to
thank all of you who have participated in this first phase. The App has
now been tested in the real world and works pretty
well in way over 75% of all setups. Of course, the
final goal would be to get that success rate up to a good 90%. I have
improvements in mind and I'm pretty confident we'll eventually reach
that goal. It's now time to roll out a first production version to the
larger public through the Google Play Store. I'm sure the App
will still show many
shortcomings. Keep in mind this is a typical
that needs thorough testing on multiple device models and android API
levels. That's why I really need your feedback and suggestions.
What's it all about?
few words, JumpStart turns your Android smartphone into a sensor to be
on the start (and necessarily also end) gate of the agility
detects the dog jumping over the hurdle and measures the
precise time between the start jump and the finish jump. It maintains a
very simple database of dogs, handlers and result times. The
device is to be fixed on one of the two uprights, just above the hurdle
bar, with its camera facing the opposite stanchion. On the picture on
the right: motion is detected over the opposite stanchion by comparing
two consecutive frames (the red area is the difference with the next
frame) (courtesy Gerard BarberÓ, Club Agility Neo, Reus, Spain
The fact that on
most Android devices the rear camera is to be used, has some important
- the touch screen will most of the time be covered by the
gate pole and hence will be useless. For that reason, I
haven't spent too much time on designing a fancy user interface that
wouldn't be visible anyway.
- as the touch screen isn't accessible, the sensor needs to
activated through the device's side hardware button (volume button).
- to keep informed of what's going on from a distance,
JumpStart uses audible
signals and spoken voice instructions.
- JumpStart is compatible with any device running Android 2.2.x ("Froyo") or higher.
At least a camera should be available and hardware side
- The App is intended for amateur use: dog agility training
sessions, internal club leagues and club trials, and simple backyard fun
- The App is available in English, Spanish, Catalan and Dutch.
- The lite
App version JumpStart
runs on a single device, hence the
course start gate is to be
necessarily also the finish gate.
- The App should run on any version of Android above 2.2 with two notable exceptions: the Samsung Galaxy Ace (GT-S5830) and Gallaxy Y (GT-S5360) running certain releases of Gingerbread (mostly Android 2.3.6). There
is an issue reported by several android developers that these two
combinations aren't able to display the camera preview in portrait
orientation. Until now, no workarounds are known. If you own one of
these devices, your only option would be to upgrade to Jelly Bean,
since the issue apparently doesn't effect the newer Android releases.
are reported camera hardware issues on Asus EEE Transformer Pads. No
workarounds are known. Please tell me if this affects both front and
back facing cameras.
latter limitation is eliminated in the pro
App version JumpStart Pro
Two devices running
JumpStart Pro wirelessly communicate so that separate devices can be
placed on start gate and
finish gate. There is also a JumpStart
in the make, ideal for tablets, which will communicate with the
sensor App and allow remote activation, reset and centralized database
management, including the possibility to mark faults and refusals,
scoring systems and trial rankings.
Release NotesPlease consult the latest versions release notes in the "What's new" section at the Play Store.
On starting the App, the main screen shows a camera
window and the text "Place
device and press side button…". Nevertheless,
before proceeding to place the device on the start gate, it needs to be
carefully configured for optimal performance. This is extremely
important. Not tuning the device
setup, will inevitably result in bad performance and failure. To
configure the device, tap the
menu button (or overflow
button on the
on Android 3.0 or higher) and select "Settings"
the menu. An extensive settings screen will appear. We'll briefly
explain every menu item as they are listed:
to Whistle: indicates
how many seconds the App will wait after pressing the side
(volume) button and subsequent calibration, and before the camera
sensor actually starts detection. As soon as this preparation time has
elapsed, a referee whistle will sound
indicating the dog is allowed to jump and start the course. The default
is 10 seconds.
this is the maximum time the motion detection sensor will be
operative and wait for a start jump. Once elapsed, the sensor will be
deactivated and the course aborted. The default is 1 minute.
is an absolute minimum for the course time.
I.e. no team is expected to finish the course in a shorter time. This
parameter is necessary to be able to distinguish between start and
finish. As soon
as the sensor detects the start jump motion, it pauses detection for a
short time to avoid taking the dog's hind legs moving past for the
jump. It is recommended to set the value as high as possible
(e.g. 20 secs) considering the actual length of the course. In this way
one avoids false positive detections due to background motion (see
below) or sudden changes in sun light. It also gives the course staff
the necessary time to reposition the bar in case the dog would knock it
down on the start jump. On the other hand, if you're just experimenting
with the App, leave it at the default value of 5 secs, in order not to
have to wait too long before making a finish jump.
Time: this is the absolute maximum course time for the
present course. Runs longer than this time will automatically be
aborted (an air horn will be heard). Note: not necessarily this time is
to be interpreted as the strict MCT for elimination.
Cam if available: several
Android devices have both
camera and rear camera. If you own such a device, you can try
the front camera for detection. In this way, the touch screen will be
visible and elapsed time can be clearly observed during a run.
should also ease exact positioning of the device on the stanchion as
the camera preview is visible. On the other hand, as front
quality tends to be inferior, this could influence sensor performance.
On the right: a Samsung Galaxy Note with front cam firmly
strapped to a gate using a twist tie (courtesy Lynn Busse,
CleverK9s, WI, USA)
Airplane Mode: during trial runs you might want to put
your phone in Airplane Mode. Disconnecting radio
communication (cell phone), you avoid the App being
unexpectedly interrupted by an incoming call. Note that WiFi and
Bluetooth will not
be disconnected as they are used for communication with JumpStart
Remote. Note: as of
Android 4.2 ("Jelly
Bean") it is no more allowed to modify programmatically the global
device settings, for which you would need to manually enter Airplane
Mode before executing JumpStart.
Calibration: this feature is the brain of the JumpStart
App. It employs techniques from Computer
Vision and Artificial
Intelligence to actively recognize the opposite gate
so that none of the background would be included in the sensed
the right, a camera preview with
stanchion detection outlined in green.
everytime: this option instructs the App to recalibrate
the algorithm after each side button press. If your device is firmly
attached to the stanchion so that it can't be accidentally moved when
pressing the side button, this option can be unchecked.
Flash light: this option allows using the camera's flash
light to create better contrast and lighting which should improve
automatic detection in certain cases. Since front cameras don't usually
have a flash light, this feature only applies to rear cameras.
Top Cropping: in the case "Automatic Calibration" is
unselected or has failed due to
poor visual recognition,
JumpStart assumes by default that the opposite
situated exactly in the middle of the camera view and motion will be
detected in a narrow strip ranging from top to bottom of the view. This
means that in the case of short stanchions, it is not unlikely to
detect motion in the background above the
stanchion. Such false positives could erroneously fire the stopwatch.
To minimize the chances that this could happen, you can set the
percentage of the screen top that can be cropped and excluded from the
detection area. The default is 0% (no cropping). The image on the right
depicts a camera view with default detection strip cropped 20% from the
top. Notice that the amount of cropping in this case is insufficient.
Moreover, the device
is badly centered on the gate, constituting a risk of false positive
detections of people in the background or even the dog running over the
selecting this option will silence the App. If unselected,
the App will produce audible signals and optionally voice instructions
next). Keep in mind that all audio will be reproduced at maximum volume
in order to be at least hearable on a typically noisy agility field.
Also, remember that the volume buttons on the device have a completely
new meaning, that of activating the sensor. While the App is
running they can't be used for adjusting volume.
Instructions: if selected, the application will use spoken
voice to instruct the handler to get ready, and after a run the result
time in seconds and hundreds will be be spoken out, together with the
name of the dog. The Text-to-Speech (TTS) engine is a standard
component of the Android system. However, depending on your selected
language, your device might need to download additional language files.
In this case, the App will pause and give control to Google Play Store.
Once the necessary language files are downloaded and as long as they
remain on your device, the App will be able to locate them and won't
need to download them anymore.
The following two parameters refer to the dimensions of the jump gate
on which the device is to be placed. It is extremely important to
specify them correctly. These dimensions are used, together with the
your camera's focal length and sensor size, to calculate the expected
size in pixels of the
stanchion in the camera view. If the dimensions are incorrect,
calibration and subsequent detection are due to fail.
this is the distance between the two gate uprights. Typically around
1200mm. Here, one might subtract the thickness of your
smartphone for even
stanchion width: this is the broadness of the
opposite upright, visible as a vertical rectangular strip as seen
camera. Typically of the order of 40mm.
through this configuration item, one specifies the wireless technology
that will be used to communicate with other devices, either another JumpStart Pro App on
another hurdle, or the application "JumpStart
Remote". Communication can be either over Bluetooth, or via p2p WiFi Direct.
The latter option is only available on devices running Android 4.1 ("Jelly Bean")
or higher. Keep in mind that, logically, both devices must use the same
communication technology, so for using WiFi Direct one would need two Jelly Bean devices. Note: as of v1.4 a third connection type, AllJoyn,
has been added, allowing establishing connections in a transparent way
by means of whatever transport technology available. More details on
the JumpStart Pro page.
Control: this option indicates the App will be remotely
controlled by the
"JumpStart Remote" App (unreleased) on a remote
device, typically a tablet.
Role: in the case of JumpStart Pro, one
can indicate the role of the device: standalone
operation (both start and finish jumps on the same hurdle), start jump
or finish jump sensor (Slave).
In the lite App version JumpStart, this option is greyed out and the
device role is always both start & finish sensor (standalone).
Menu item only visible in ▀ versions.
maintains a very simple database of teams, consisting of dogs and
handlers. The teams database in the yet-unreleased handheld
Remote will be
much more complete, but for the present sensor App, dog and handler
all that is needed. The App cannot be activated without having created
at least one team. So, if you're still on the settings screen tap the back button to go
back to the main screen and then tap the menu button (or overflow
button). From the menu
to go to the corresponding screen, which contains a table of existing
teams. The first column is the team
number, the second one the dog's name and the
rightmost one the handler's
If your table is still empty ("no
data" is displayed), tap the menu
button and select "New
Team". A small dialog window will pop up asking for dog
If you'd like to delete/edit an existing team, just select it in the
and hold your finger on it. A small menu will pop up, allowing the
to be deleted/edited.
The Teams database can be written and read back to/from a .CSV file (a standard format editable in e.g. MS Excel).
the Device on the gate
you've got at least one team to work with, you're ready to place the
device on the gate. When positioning your smartphone on a hurdle, keep
in mind the following
- Choose the side of the gate facing the stanchion with less
probability of background motion behind it.
higher the contrast between stanchion and background, the better
calibration will work (you might consider paint or cardboard to improve
your setup). Also, the more uniform the stanchion colour the better.
Shiny metallic posts as in the photo, are not always easy to recognize.
Striped may not be used at all.
if calibration fails repeatedly in your setup, try holding a
differently coloured (e.g. white)
sheet behind the stanchion at the moment you click the side button.
That should produce perfect calibration.
- Use some means of fixation like a rubber band, a
velcro strap or a twist tie to
firmly position the device (Don't do as in the picture on the right,
device would be knocked down together with the bar; the frontcam
picture higher up is a better example).
- Put the device just above the jump bar, the camera facing
- If the camera lens is not situated on the centre line of
the device (as
is the case for the HTC Wildfire S in the picture), try to align the lens
with the centre axis of the jumping bar.
- Take utmost care to place the device perfectly
vertical. If not, the opposite stanchion would appear
inclined in the camera view which could cause calibration and detection
Using Android's proximity sensor, JumpStart knows when it's in place
against the stanchion, and will deactivate all front hardware buttons
so they won't be tapped by accident.
the Side Button
We're ready to go now. Press the hardware side button (the volume
rocker), taking care not to cover the lens with your hand. In general,
JumpStart will rotate through the teams in the database. The Volume Up
button corresponds to 'Next Team', while the Volume Down button to the
'Previous Team'. In case the sensor is already activated, a Volume
Down press resets to the same current team.
On pressing the side button the sensor gets activated, initiating the
following course of events:
- A short blip will be heard to acknowledge a
correct button press
- The App does automatic
calibration (if configured for it). This may take up to 30 seconds or
more. During calibration a continuous tic-toc is heard.
- If calibration was successful an bright acknowledgement
be heard; if not, a negative jingle indicating the App falls
back on default calibration.
- The TTS engine anounces the next team, naming the dog and "Get set! Ready?". A
countdown timer starts running (see 'Prep.
to Whistle' under Configuration). The countdown is displayed
on the screen, but would only be visible in case of using a front
- A referee-like whistle sound is heard, indicating the
present team is allowed to start the run.
- When the App detects the start jump, a loud sports air horn
- The stopwatch start running (again, only visible in
case of a front cam) and the sensor goes sleeping for a specified
amount of time (see 'Minimum Run Interval').
- Once elapsed the above minimum interval, the sensor wakes
again and tries to detect a finish jump.
- When the App detects the finish jump, the air horn sounds
- The resulting time is displayed on the screen (visible or
not), and pronounced by the TTS engine, preceded by the dog's name. The
results are stored in the database.
- The device is ready for another side button press.
the Results Database
you've had enough of running, you can remove the device from the gate
and consult the results database. For this, tap the menu button en
to go to the corresponding screen, which contains a table of run times.
The first column contains the date
at which the run was started, the
second one the dog's
, and the last one the actual run time
individual entry can be deleted by holding your finger on it and
The results database can be exported to a standard .CSV
(comma-separated values, readable e.g. by Excel) file through the menu
button or action bar
For the time being the results database, as the teams database, is very
simple, and more functionalities can be expected in future versions, as
well as in the handheld remote App. I'm open to your suggestions.
During ▀-testing I have
received numerous positive reactions from the Flyball community. At the
moment the App can be used perfectly for timing Flyball runs for
individual dogs. It can also be used to get the overall time of a 4-dog
team, adjusting the Minimum Run Interval
accordingly. For a 4-dog team, however, it isn't possible to get the 4
individual times separately, since the sensor wouldn't be able to
distinguish between the finish jump of one dog and the start jump of
the next one. Who knows, maybe in a future version, the algorithm could
be sophisticated to distinguish the direction of a jump. Until then,
I'm open to suggestions from the Flyball community or about any other
imaginable, alternative uses of the App.
till now, the App has been available to a limited number
of ▀-testers. From now on, a stable production version will be
freely available on the Google Play Store to all Android owners.
Nevertheless, if you still want to take part in future beta-testing JumpStart
and receive experimental ▀-versions,
you'll need a Google+ account and send me an e-mail from that account
Please, mention at least your name
your Android device
and the version
of Android you're running (Settings
About phone -> Software information
). I will then
add you to the
Google+ Community JumpStart
, where you can opt-in
have ▀ versions downloaded to your device from the Google Play
(this opt-in link won't work unless you're part of the
appreciate all comments, suggestions for new features, bug and crash
reports through the Google+ Community page, where I will also post my
feedback on your questions. Also, feel free to send me photographs or
videos of your particular setup or use, so we can share them with the
Finally, to keep up with the latest developments, follow us on Facebook
Play requires me to disclose that JumpStart as well as JumpStart Pro
will record camera sensor data, which is used for taking consecutive
photo frames for the sole pupose of their comparison for motion
detection. Frames are overwritten every time the app is used.