After almost a year of development, Team 111 WildStang is proud to announce our electronic scouting system: WildRank.
The WildRank system is composed of two apps: an Android app and a desktop application. The Android app provides a means to collect match data, pit data, notes, as well as view all the collected data and the form a pick list. The desktop app creates configuration files for the tablets that contain the teams and matches for a given event. It also helps to compile notes collected by the different tablets and can output collected data in CSV form for more sophisticated analysis.
WildRank is a bit different than most scouting systems we’ve seen. Some of its key features are outlined below.
Functions totally offline:
after event data is initially downloaded to the desktop from The Blue Alliance, the system can function without any internet connection. Data is synced between the different tablets and the computer using a USB flash drive with an OTG adapter for the tablets. - Distributed, robust data:
each device in the system (desktop and tablets) maintains a complete copy of all the data, making it almost impossible to lose it. The desktop also backs up all its current data and the flash drive’s data before syncing, allowing you to restore any part of the system to a known good state should something go catastrophically wrong. - Easy to configure:
the system is designed to stay largely the same from year to year. The things that have to change (the forms for collecting match and pit data, as well as how that data is displayed in team summaries) are defined via XML layout files with custom attributes for the tablet app and a special “config” file for the desktop. - Easy to modify:
WildRank stores its data in JSON objects instead of something highly and rigidly structured, like an SQL database. Want to add a new piece of data to collect? Simply add a new view to the appropriate layout file, set its appropriate attributes, and update the desktop config file. Done! - Easy to extend:
if none of the existing widgets collect the kind of data you want, you can easily define your own widget to output your data via JSON (string, number, boolean, or arbitrary JSON object).
We hope that other teams will be able to use our code as the basis of their own scouting systems, or at least a model of how to design a scouting system. If you want to check out our work, the GitHub links for each application, which include the code and a brief overview of how it works, are below. Note that documentation is a work in progress.
Screenshots of the app in operation can be found in this imgur album.
Note: the Android app was only ever tested and run on Motorola Xooms running an AOSP 4.2.2 ROM. It should work on other devices, with one exception: the device must support USB OTG in order for syncing via the flash drive to work. Because OTG support is not a standardized feature, your device may mount the flash drive in a place other than the one that the app expects. In that case, you can modify the code to point to the right place; instructions for how to do that are provided in the Android repo’s readme.
That’s the beauty of this, your team should be able to easily adapt the system to fit your needs without us having to do anything. Check out the “Configuring WildRank for your team” and “Configuring games” sections of the Android and desktop READMEs, respectively, for the basics of how you would go about it. If you have any questions, reach out to me!
Thank you! All we ask is that if your software team makes any improvements, that they submit a pull request back to the main repo. We’re sort of hoping this can become a collaborative community project that can be used and contributed to by many teams.
Hi My team and I got the android app working but we can’t see any of the built in match questions on the tables (that is if there are any), and we got them synced to a flash drive that is synced the the main computer (with your desk top app), and are testing it with last years game (2014)… so instead of scouring the code to see how it works we decided to ask this question. do the questions only appear when there is a game happening (or match) or is there a bug in the system, and how does it store its data?
Hi! Thanks for testing our app!
This problem sounds a little weird but our data management could use some work. Try this:
If you have clicked “Begin Scouting Match”
Send us the data from the flash drive there should be a file called events/eventname probably with a .json extension (I’m a little rusty), if you manage to find that send us a link with pastebin.com otherwise send us a dropbox link or something to a copy of the data you put on the flashdrive
Other wise
Do you see a whole bunch of matches on the left side of the screen?
If yes when you click on one of them one the right side of the screen there should be a match and team number at the very bottom of the right side there should be a “Begin Scouting Match” button if you click that it should open the questions.
Otherwise send us the data as mentioned above.
Nice Job - I will pass this to our programming team so they can get familiar with it. Do you suggest any particular tablet to use? We don’t have any yet but want to invest in some for this season. We would prefer a 7" table for cost savings.
We’ve had success with our Xooms, a cursory glance says that you can get them on Ebay for about $100 a pop. You also can’t go wrong with a 2nd gen Nexus 7 ($180 from Amazon, you can probably find them cheaper elsewhere). In general, a bigger screen is better for scouting (bigger screen = bigger touch targets = easier to hit buttons quickly in the middle of hectic matches). If you want to use our software, an important thing to remember is that the tablet must have USB OTG support so that the flash drive works. A quick glance at the manufacturer specs should confirm this, otherwise you could check out the XDA forums or a similar place. Let us know if you have any additional questions!
My apologizes for not knowing much about this subject.
I am interested in giving WildRank a try, but frankly I am lost on how to compile the code into an android app and an exe. can someone point me in the right direction please?
For compiling the Android app, you’ll need to download and install Android Studio. Once you’ve done that, use your Git method of choice (IDE integrated, the Github app, command-line git, etc.) to clone the project on your machine. Then just open the project in Android Studio and run it; once it’s compiled it will prompt you to install it on your device. Make sure your device is connected via USB and that you’ve enabled developer options and debugging over USB. You should be all set on the tablet end.
For the desktop app, we used Eclipse, though you could compile the code in your Java IDE of choice. Just run the project as a Java application and you’re good to go.
I think the Github Readmes do a pretty good job of explaining how to configure both components, but if you need more help, please ask.
Thanks, I’ll give that all a whirl, this app sounds exactly like what we are looking for. Once I get it working I may have a few ideas on features. Thanks again.
[Edit] This is a very nice program, while I haven’t had time to go through it expensively I have to give you guys credit, very nice. I have encountered a few minor bugs, but that may be due to my tablet not being set up fully. (among any of several other things I am probably doing wrong). Solid none the less.
Hey everyone, I am having some difficulty on figuring out what I need to replace in this case structure to make a build work on my device. I know the mount location of the USB. “/mnt/usbhost1/WildRank_Working/” inside that directory there is the synced and uninitiated folders. What do I need to change?
I am just a a loss here as I do not work with java that often, any help you could give me would be greatly appreciated. Thanks for any help in advance.
…
case DIRECTORY_SYNCED:
return getSyncedDirectory(context);
case DIRECTORY_FLASH_UNINTEGRATED:
return getFlashDriveUnintegratedDirectory();
case DIRECTORY_FLASH_SYNCED:
return getFlashDriveSyncedDirectory();
case DIRECTORY_FLASH_ROOT:
return new File("/storage/usbdisk0/");
The code in question is found on line 280 of the source code under the file path android/SRC/main/java/org/wildstang/wild rank/android/data/datamanager.java
I should have coded this better so that each of the directories references the root directory… but no matter. Basically every method that is called from the switch-case in getDirectory(…) that references the flash drive, you have to change to reference your root location. So FLASH_SYNCED and FLASH_UNINTEGRATED have to be changed to point to your location. I can push an update later today so that it references the root flash drive directory everywhere. Hope that made sense.
Unfortunately not, that was an oversight while I was programming the app last year. The root is hardcoded elsewhere. I’ll push a fix soon to make that work as expected.
I’ve changed the app to use a constant called USB_FLASH_DRIVE_ROOT_PATH in org.wildstang.wildrank.android.utils as the root path of the flash drive. This was a quick fix that I haven’t been able to test yet but it should be functional.
Thank you so much. I’ll give it a test on two different android tablets shortly. An ASUS memo pad 7 and a MSI primo 73. Thanks again.
[Edit] I am still having some minor issues. I think this is because I have the mount path for the USB wrong. uggh. I will try it on another tablet.
And thank you for the variable in one location. It’s awesome.
I got the app working, I don’t know what the problem was with my other tablet, but no matter. My next question, what is the password? Or how does one set the password? I really don’t want to go through the 6561 different possibilities for the pass code. Thanks for all your help.