Introducing the Open Source Driver Station

Hey Chief Delphi!

I would like to share with you what the Second Law Enforcers (Team 178) have been working on for the Summer of FIRST project in the last two months. We’ve replicated the current FRC Driver Station and created a version that will be functional without platform-based dependencies. In other words, this Driver Station will work on OS X and Linux as well as Windows.

At the current state, the only thing you really can do is enable and disable the robot. Joystick support is coming up soon. The main issue with adding this feature is that I don’t have one to test with, and won’t until our next team meeting. :frowning:

Anyway, this is just a beta test. I’m working on creating a version for iOS, which I hope to have out within the next month. I do realize this has been done in the past, but the app is no longer up, so I’m recreating it with 2013 and hopefully 2014 season support. :slight_smile:

Download links are on the GitHub page. https://github.com/Summer-of-FIRST/DriverStation.js

Note: This is not legal for usage during a competition match. I will most likely add a kill switch if it detects FMS in the future.

2 Likes

Saw this on github earlier. Is this legal for competition? Also, how is performance of packets and UI? Any enhancements available?

:open_mouth:

This is awesome, I cant wait till I can look at this code after school settles down…

EDIT: Uh, what happened to separate lines in “jquery-2.0.3.min.js”?

This is pretty neat. I like this user interface more than I like the provided driver station’s interface. Just out of curiosity, do you know why the file is so big? Also, why does it come with ffmpeg?

A jquery.min.js will be a minimized version of jquery. It’s a pretty common thing to do with javascript to really squeeze down on filesize. If you have 1000 lines of code, there’s a hidden "
" on every line taking up a byte, so by getting rid of those, it reduces the file size by about a kB. But it doesn’t just stop with
, a minimized version will also rename your functions to typically single letter names, so each reference to them will be reduced down to a single letter. This isn’t anything you worry about in a compiled language, but since js is interpreted, it can matter.

I don’t see it ever being legal for competition. The driver station enables/disables the robot. So it will be always a controlled bit of software.

For the work on this application, I wanted to focus more on the protocol parts, as that was more uncertain. This was basically just a test for the later iOS and possibly Android version. As a result, I used a GUI setup that I was already familiar with and could code quickly. This ended up being node-webkit. The entire interface is written in web technologies (HTML, CSS, and JavaScript).

The file you’re downloading is my code bundled with a special version of the webkit engine. I realized that the file size would be in the 60 MB range when making this decision, and modern computers don’t really have an issue with storage, so I went with it.

Writing this in web technologies also gave me a very large amount of control over how I wanted this to look, which was huge bonus for me.

This is great! One thought I have is that this would be even better with a similar homebrew FMS solution. Is this on your roadmap?

I have heard of others who have tried to replicate FMS (https://github.com/itguy51/FRC-OpenFMS, for example), but these haven’t been documented very well yet, and look like they’re the work of single people, not the FRC community.

If there is a desire for this, sure. I’ll probably end up contacting existing open FMS maintainers to see who’s interested in a collaborative effort.

I’d be interested in getting something going to develop a full open source FMS.

Here is some of the stuff I worked on a while ago, mainly as a proof of concept: GitHub - 4ndr3w/Java-FRC-FMS: An unofficial FRC FMS written in Java

FMS -> DS is fully implemented. Robot mode(auto/tele), state, alliance, and station setting all work with the 2013 DS.
Since the DS->FMS stuff is not yet implemented, the FMS will just blindly send packets to the team’s DS IP without gathering status info, but it works.

For anyone interested, I used this whitepaper as a reference for the protocol. Despite this being for the old Kiwibyte 2009 DS, it still works with the 2013 DS.
http://www.chiefdelphi.com/media/papers/2266

How much need is there for this type of FMS lite program? I have been working with my team to create an FMS Lite solution and just a few weeks ago we ran nearly 10 full matches with 3 different robots and no apparent issues. If there is a need for this we would be happy to prep it for release(as open source) :smiley:

Any idea when the OSX version will be released?

Need? None. We already have the FIRST-sanctioned FMS Lite, and the practice button on the real Driver Station.

It’s definitely more of a want. For example, FMS Lite hasn’t been updated since 2009, can’t be implemented very well at teams’ practice fields, and the underlying logic is not accessible to the of the community (minus NI and FIRST, of course). It stands as a decent (but old) solution for some offseason or preseason events. There really isn’t any way a team can set up an instance of FMS (homebrew or official) easily for their own purposes.

Plus, after Einstein 2012, I would personally prefer my team’s drivers practicing under some sort of FMS to more accurately approximate a real match – and not just driving with the Driver Station set to practice mode.

While I don’t know much about node-webkit, I have worked with node.js before. It should be cross-platform, and while there isn’t a nice installer or executable, you should be able to download the source and try it from there, I believe – assuming you have node.js installed, of course. It wouldn’t be a nice, clean .dmg or installer that you’d be used to, but it would be functional. I’m sure you could PM me or gluxon if you have any questions, or you could just wait until the next release.

All I have to do is package the OS X version into a nice .app. I’ll do it tonight when I get home. :slight_smile:

I really appreciate this open source driver station. I’m not a fan of installing LabVIEW on our programming teams personal laptops just so that they can play with our test cRIO setup (we only have one driver station).

I’d really love the ability to use a joystick with it.

Thanks a lot for this!

So the binary links in your GitHub page all lead to Ubuntu One file storage, which was taken offline about a month or two ago. Can you reupload the files to something like MEGA or MediaFire or something? Thanks~

Hello my fellow frustrated USFIRST Driver Station users, or am I the only one? :ahh:

I have forked the work done by Gluxon, added Joystick Support, Bound the F1, Enter, and Space keys to Enable, Disable, and Estop, and Added a Joystick Setup section to the Setup tab to select Joystick order.

I have a problem however, NONE OF IT IS TESTED… I am a college student and do not have access to an FRC robot for actual testing. I do not have the resources (a Windows and Mac machine) to put together packages for use other than on Linux, but anyone who knows a little about Node and Node-Webkit (I managed to learn in the 5 days I worked on this) should be able to get this running fairly easily.

I am reaching out to you guys in search of people willing to test and give feedback on what needs to be done to get the Open Source Cross Platform Driver Station in a usable state, preferably before January so it can be used for testing actual robots during the season.

Github: DriverStation.js

Hey gixxy,

When I saw that node-gamepad had came out, integrating it in DriverStation.js was one of my priorities for the year. However, with the new protocol in 2015, I pushed this off until January.

Are you interested in submitting a pull request to my original repository? Forks are good, so there’s no hard feelings either way.

Brandon

I was thinking of putting in a pull request, but not until the joystick code is actually tested with bots.

Im on a mac and I was wondering, how to load code and use the smart dashboard with this?