View Full Version : Open Source Cross Platform Driver Station; Ready for Testing
Have you ever been frustrated because the FRC Driver Station only runs on Windows? That is, unless you want to put lots of effort into configuring Wine or visualizing Windows in some fashion. Or, perhaps you run Windows but hate the time it takes to install the LabVIEW runtime, how bulky it is, and the boot time of the DriverStation itself. Well, hello my fellow frustrated FRC Driver Station user, I seek to alleviate these problems.
Introducing the improved Open Source Driver Station:
http://i.imgur.com/2KVvVkO.png
http://i.imgur.com/G8l5MR5.png
I have forked the project created 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 realize this sounds as if it is ready to go, except that I have a problem, NONE OF IT IS TESTED... I am a college student and do not have access to an FRC robot for actual testing. This is where the Chief Delphi (and FRC in general) community comes in. While I do not currently have the resources (a Windows or Mac machine) to put together packages for use other than on Linux, 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 the running fairly easily. Packages will be made eventually though, it will just take some time...
So, 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 (https://github.com/gixxy/DriverStation.js)
EDIT: As Seen on the Nation Wide Local Hack Day Live Stream! @ 5:23:50 https://www.youtube.com/watch?v=BSFfR7O-Z3I (https://www.youtube.com/watch?v=BSFfR7O-Z3I&t=5h23m50s)
x86_4819
07-12-2014, 09:11
I am in the same boat as you, despising the current restrictions placed on official frc software, and this seems like a good step in the right direction. One thing that you might want to look into is that the DS protocol is changing for 2015, rendering current implementations incompatible. See http://www.chiefdelphi.com/forums/showthread.php?t=131048
Yeah, I did realize that the changes to the 2015 Control System would lead to changes being required in the Node Driverstation API. Despite that, I'm confident that the old CRios and Control System will still be used for testing purposes and so the current DS protocol is still a useful thing to have implemented. If it changes alot I will probably still maintain both versions (since the difference likely won't be with the front end, but the back end Node Module.
Regardless of ANYTHING that happens though, I still want to see if I can get some teams to help test this since I cannot do it myself. (well at least not until the Winter break in 2 weeks time at the earliest). Even if the backend changes, I need to know what works and what doesn't with the Joystick System, and I can only do so much using Netcat to capture packets.
x86_4819
07-12-2014, 10:18
I think that the LabVIEW simulator environment actually uses the DS protocol directly. I could probably get a windows VM setup with that environent to do some testing with.
I think that the LabVIEW simulator environment actually uses the DS protocol directly. I could probably get a windows VM setup with that environent to do some testing with.
Oh x86_4819, I like you :D
Yeah, anything you can get to me about it will help. Here is the current Driverstation API, written in Javascript (Well, the whole project is actually in Javascript): node-driverstation (https://github.com/gixxy/node-driverstation)
I plan to setup a VM soon, but I am not sure how soon I will have the time, or a license key, to do it....
x86_4819
08-12-2014, 07:35
I have been trying to run it, but I get an error when trying to run it.
Error: Cannot find module '/tmp/.org.chromium.Chromium.yCnfi2/node_modules/gamepad/build/gamepad/v1.0.2/Release/node-webkit-v0.10.5-linux-x64/gamepad.node'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:273:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (/tmp/.org.chromium.Chromium.yCnfi2/node_modules/gamepad/gamepad.js:4:15)
at Module._compile (module.js:454:26)
at Object.Module._extensions..js (module.js:472:10)
at Module.load (module.js:354:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:362:17)
I thought that this might indicate that I needed to build and install the node-gamepad referenced in the README, but following the instructions for it results in the following error:
[christian@C-Arch gamepad]$ ./node_modules/node-pre-gyp/bin/node-pre-gyp build --runtime=node-webkit --target=0.8.6
node-pre-gyp info it worked if it ends with ok
node-pre-gyp info using node-pre-gyp@0.5.31
node-pre-gyp info using node@0.10.33 | linux | x64
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute 'nw-gyp configure build --name=gamepad --configuration=Release --module_name=gamepad --version=1.0.2 --major=1 --patch=2 --runtime=node-webkit --node_abi=node-webkit-v0.8.6 --target=0.8.6 --platform=linux --target_platform=linux --arch=x64 --target_arch=x64 --module_main=gamepad.js --host=https://node-gamepad.s3.amazonaws.com/ --module_path=/home/christian/OSDS/DriverStation.js/node_modules/gamepad/build/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64 --module=/home/christian/OSDS/DriverStation.js/node_modules/gamepad/build/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64/gamepad.node --remote_path=./gamepad/v1.0.2/Release/ --package_name=node-webkit-v0.8.6-linux-x64.tar.gz --staged_tarball=build/stage/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64.tar.gz --hosted_path=https://node-gamepad.s3.amazonaws.com/gamepad/v1.0.2/Release/ --hosted_tarball=https://node-gamepad.s3.amazonaws.com/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64.tar.gz' (Error: spawn ENOENT)
node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/home/christian/OSDS/DriverStation.js/node_modules/gamepad/node_modules/node-pre-gyp/lib/util/compile.js:70:29)
node-pre-gyp ERR! stack at ChildProcess.emit (events.js:95:17)
node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:808:12)
node-pre-gyp ERR! System Linux 3.17.1-1-ARCH
node-pre-gyp ERR! command "node" "/home/christian/OSDS/DriverStation.js/node_modules/gamepad/node_modules/node-pre-gyp/bin/node-pre-gyp" "build" "--runtime=node-webkit" "--target=0.8.6"
node-pre-gyp ERR! cwd /home/christian/OSDS/DriverStation.js/node_modules/gamepad
node-pre-gyp ERR! node -v v0.10.33
node-pre-gyp ERR! node-pre-gyp -v v0.5.31
node-pre-gyp ERR! not ok
Failed to execute 'nw-gyp configure build --name=gamepad --configuration=Release --module_name=gamepad --version=1.0.2 --major=1 --patch=2 --runtime=node-webkit --node_abi=node-webkit-v0.8.6 --target=0.8.6 --platform=linux --target_platform=linux --arch=x64 --target_arch=x64 --module_main=gamepad.js --host=https://node-gamepad.s3.amazonaws.com/ --module_path=/home/christian/OSDS/DriverStation.js/node_modules/gamepad/build/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64 --module=/home/christian/OSDS/DriverStation.js/node_modules/gamepad/build/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64/gamepad.node --remote_path=./gamepad/v1.0.2/Release/ --package_name=node-webkit-v0.8.6-linux-x64.tar.gz --staged_tarball=build/stage/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64.tar.gz --hosted_path=https://node-gamepad.s3.amazonaws.com/gamepad/v1.0.2/Release/ --hosted_tarball=https://node-gamepad.s3.amazonaws.com/gamepad/v1.0.2/Release/node-webkit-v0.8.6-linux-x64.tar.gz' (Error: spawn ENOENT)
Is there anything I am missing here? Other dependencies? This was done on Arch Linux, with node-webkit compiled from the AUR.
Yeah I haven't pushed the update readme yet, sorry.
You need to run these two commands first:
sudo npm install -g node-gyp
sudo npm install -g nw-gyp
Then some Arch Specific issues (I also use Arch, took me three days to get this all working... GAH)
1) The gamepad module is only compatible with up to Node 0.10, the version of Node-Webkit in the AUR is 0.10, but Node-Webkit 0.10 uses Node 0.11. So you need to downgrade Node-Webkit to 0.8.6 which, if you have run the npm install command you have installed in DriverStation.js/node_modules/nodewebkit/ and the executable is DriverStation.js/node_modules/nodewebkit/nodewebkit/nw which will need to be patched with sed -i 's/udev\.so\.0/udev.so.1/g' nw you work with libudev.so.1 which Arch has.
2) You will need to specify the --python switch for 2.7 --python=python2.7 at the end of the node-pre-gyp command since the Arch python executable is Python 3.
Hope that Helps, I am avalible until ~10:30 CDT (it is currently 7:11) if you still have problems.
x86_4819
08-12-2014, 08:57
Running
npm install
In a freshly cloned repo results in a node_modules/nodewebkit dir, but not a node_modules/nodewebkit/nodewebkit dir
What I ran, copy and pasted out of my terminal
git clone https://github.com/gixxy/DriverStation.js.git
cd DriverStation.js/
npm install
cd node_modules/nodewebkit/nodewebkit/
ls
My final output:
credits.html libffmpegsumo.so nw nw.pak nwsnapshot
That nw file is the executable.
x86_4819
08-12-2014, 09:20
I see the problem, npm install is failing with a subtle "read ECONNRESET" that doesn't stop anything, it just keeps on going. Probably due to my terrible internet at the moment, but I can try again tomorrow morning when I get decent speeds.
Copy pasted from my terminal:
[christian@C-Arch OpenSourceDriverStation]$ git clone https://github.com/gixxy/DriverStation.js.git
Cloning into 'DriverStation.js'...
remote: Counting objects: 417, done.
remote: Compressing objects: 100% (232/232), done.
remote: Total 417 (delta 233), reused 318 (delta 164)
Receiving objects: 100% (417/417), 164.11 KiB | 40.00 KiB/s, done.
Resolving deltas: 100% (233/233), done.
Checking connectivity... done.
[christian@C-Arch OpenSourceDriverStation]$ cd DriverStation.js/
[christian@C-Arch DriverStation.js]$ npm install
> gamepad@1.0.2 install /home/christian/OpenSourceDriverStation/DriverStation.js/node_modules/gamepad
> node-pre-gyp install --fallback-to-build
[gamepad] Success: "/home/christian/OpenSourceDriverStation/DriverStation.js/node_modules/gamepad/build/gamepad/v1.0.2/Release/node-v11-linux-x64/gamepad.node" is installed via remote
\
> nodewebkit@0.8.6 postinstall /home/christian/OpenSourceDriverStation/DriverStation.js/node_modules/nodewebkit
> node scripts/install.js
read ECONNRESET
keypress@0.2.1 node_modules/keypress
gamepad@1.0.2 node_modules/gamepad
└── node-pre-gyp@0.5.31
frc-driverstation@0.6.2 node_modules/frc-driverstation
└── buffer-crc32@0.2.5
nodewebkit@0.8.6 node_modules/nodewebkit
├── rimraf@2.2.8
├── yargs@1.3.3
├── multimeter@0.1.1 (charm@0.1.2)
└── download@0.1.19 (get-stdin@0.1.0, each-async@0.1.3, get-urls@0.1.2, mkdirp@0.3.5, nopt@2.2.1, through2@0.4.2, request@2.49.0, decompress@0.2.5)
[christian@C-Arch DriverStation.js]$ cd node_modules/nodewebkit/nodewebkit
bash: cd: node_modules/nodewebkit/nodewebkit: No such file or directory
[christian@C-Arch DriverStation.js]$ ls node_modules/nodewebkit/
bin lib node_modules package.json README.md scripts
I posted a Package for 64-bit Linux requiring the Libudev.so.1 patch, and sent you the link via Private Message.
Here is my npm install output
-
> nodewebkit@0.8.6 postinstall /home/gixxy/Desktop/DriverStation.js/node_modules/nodewebkit
> node scripts/install.js
http://dl.node-webkit.org/v0.8.6/node-webkit-v0.8.6-linux-x64.tar.gz [||||||||||] 100 %
Extracting...
> gamepad@1.0.2 install /home/gixxy/Desktop/DriverStation.js/node_modules/gamepad
> node-pre-gyp install --fallback-to-build
[gamepad] Success: "/home/gixxy/Desktop/DriverStation.js/node_modules/gamepad/build/gamepad/v1.0.2/Release/node-v11-linux-x64/gamepad.node" is installed via remote
keypress@0.2.1 node_modules/keypress
frc-driverstation@0.6.2 node_modules/frc-driverstation
└── buffer-crc32@0.2.5
nodewebkit@0.8.6 node_modules/nodewebkit
├── rimraf@2.2.8
├── yargs@1.3.3
├── multimeter@0.1.1 (charm@0.1.2)
└── download@0.1.19 (get-stdin@0.1.0, each-async@0.1.3, get-urls@0.1.2, mkdirp@0.3.5, nopt@2.2.1, through2@0.4.2, request@2.49.0, decompress@0.2.5)
gamepad@1.0.2 node_modules/gamepad
└── node-pre-gyp@0.5.31
x86_4819
08-12-2014, 11:30
Thanks, my internet won't let me download it atm, but I should be able to tomorrow morning. I should be able to send you some results then.
Ben Wolsieffer
08-12-2014, 20:47
I was able to get it to compile and run successfully on Arch Linux!
Here are the commands I used:
sudo pacman -S --needed nodejs # Only necessary if Node.js is not already installed
git clone git@github.com:gixxy/DriverStation.js.git # Use https if you don't have ssh set up
cd DriverStation.js
npm install
sudo npm install -g node-gyp # Install node-gyp globally
sudo npm install -g nw-gyp
cd node_modules/nodewebkit/nodewebkit
sed -i 's/udev\.so\.0/udev.so.1/g' nw
cd ../../gamepad
./node_modules/node-pre-gyp/bin/node-pre-gyp build --runtime=node-webkit --target=0.8.6 --python=python2.7
cd ../..
./node_modules/nodewebkit/nodewebkit/nw ./
This is basically everything in gixxy's CD posts and README, put in one spot.
Everything looks like it is working, but I probably won't be able to test it on a real robot until a few days from now. If I have time, I'll try to see if I can get it to work on windows too.
x86_4819
09-12-2014, 06:41
I got it to compile/run, I just needed to have usable internet to do it. I was able to successfully use it with the LabVIEW simulator, and everything seems to work. All joystick axes and buttons are fully working!
If I have time, I'll try to see if I can get it to work on windows too.
If you can get gamepad to compile on Windows, please send that to me. I have been having a hell of a time compiling it... Thanks.
Ben Wolsieffer
09-12-2014, 18:21
You were right about it being difficult to compile on Windows.
I've tried everything I can atm, but I might be able to figure something out once I can fix my Windows partition to have enough free space to install Visual Studio.
I don't know if you ran into this problem but currently the build (of node-gamepad) is failing with:
C:\Microsoft.Cpp.Default.props" was not found.
which might be due to only having the Windows 8 SDK, not Visual Studio.
This is why I use Linux. :)
You were right about it being difficult to compile on Windows.
I've tried everything I can atm, but I might be able to figure something out once I can fix my Windows partition to have enough free space to install Visual Studio.
I don't know if you ran into this problem but currently the build (of node-gamepad) is failing with:
C:\Microsoft.Cpp.Default.props" was not found.
which might be due to only having the Windows 8 SDK, not Visual Studio.
This is why I use Linux. :)
I am using a Windows 7 VM and it is giving me issues with being unable to find stdbool.h Isn't that just lovely...
Here is what the node-gyp readme has to say:
https://github.com/TooTallNate/node-gyp#installation
On Windows:
Python (v2.7.3 recommended, v3.x.x is not supported)
Windows XP/Vista/7:
Microsoft Visual Studio C++ 2010 (Express version works well)
For 64-bit builds of node and native modules you will also need the Windows 7 64-bit SDK
If the install fails, try uninstalling any C++ 2010 x64&x86 Redistributable that you have installed first.
If you get errors that the 64-bit compilers are not installed you may also need the compiler update for the Windows SDK 7.1
Windows 7/8:
Microsoft Visual Studio C++ 2012/13 for Windows Desktop (Express version works well)
x86_4819
10-12-2014, 17:08
Just ran it with a real-life FRC robot from my laptop running Arch. Works flawlessly, I could find no issues!
Just ran it with a real-life FRC robot from my laptop running Arch. Works flawlessly, I could find no issues!
Here is the verbal component of my reaction:
WHOOOO!!! WHOO HOO! YEAH!!!! It Worked!!!! I'm Awesome!!!! Dude, come read this post!!!!! My DriverStation works, at least on Linux!!!!! OH HELLS YEAH!
I may be a little excited :p
x86_4819
10-12-2014, 19:17
Congradulations! You now have exactly 23 days to benefit from your success!
Congradulations! You now have exactly 23 days to benefit from your success!
Yes, but at least when the 2015 protocol is released we will be ready to utilize it in the front-end. (Pull the latest version of the DS and look at the setup tab!)
Ben Wolsieffer
12-12-2014, 19:27
I just want to let you know that I ran it on robot today and it drove it perfectly.
I found a bug involving the robot code indicator though. When I reboot the cRIO from the DS (that's the only way I've been able to produce it), the robot code indicator does not come back on even though the communication indicator does.
When I reset the robot code status (via the Diagnostics tab) the robot code indicator turns on, but the communication and joystick indicator turn off. The list of joysticks (in the Setup tab) is also cleared. I'm still able to enable and drive the robot when this happens so it seems to just be a UI bug.
I just want to let you know that I ran it on robot today and it drove it perfectly.
I found a bug involving the robot code indicator though. When I reboot the cRIO from the DS (that's the only way I've been able to produce it), the robot code indicator does not come back on even though the communication indicator does.
When I reset the robot code status (via the Diagnostics tab) the robot code indicator turns on, but the communication and joystick indicator turn off. The list of joysticks (in the Setup tab) is also cleared. I'm still able to enable and drive the robot when this happens so it seems to just be a UI bug.
That isn't functionality that I wrote, but it SEEMS to be an issue with the form submission resetting the entire Application. I have written a potential fix and pushed it to the github, please try it out. Thanks.
Ben Wolsieffer
13-12-2014, 12:24
I can't test it on a robot right now, but it doesn't reset the joystick indicator or the list anymore, so it might be fixed.
Understandable. Do test it when you get a chance though.
I am so excited to hear two different fellows say it works! Now we just need it tested on a mac or two, and get it to compile at all on Windows, then test that (which anyone could do since it should be able to run on the clamshell).
Great News, I got the gamepad package to compile in Windows.
I started from a CLEAN install of Windows 7 64-bit.
Installed Node.js, then installed node-gyp, nw-gyp, and node-pre-gyp globally via npm.
Installed: Python 2.7.3 (http://www.python.org/download/releases/2.7.3#download)
Installed: Microsoft Visual Studio C++ 2010 (http://go.microsoft.com/?linkid=9709949)
Installed: Windows 7 64-bit SDK (http://www.microsoft.com/en-us/download/details.aspx?id=8279)
Installed: compiler update for the Windows SDK 7.1 (http://www.microsoft.com/en-us/download/details.aspx?id=4422)
Installed: Microsoft Visual Studio C++ 2012 (http://go.microsoft.com/?linkid=9816758)
Ran Windows updates a couple of time (until the service pack was installed)
Installed: Microsoft Visual Studio C++ 2013 (http://go.microsoft.com/?linkid=9832280&clcid=0x409) (which unfortunately requires you to sign in with a MS Live Account)
Opened my Command Prompt and Navigated to the gamepad directory.
Ran
node-pre-gyp build --runtime=node-webkit --target=0.8.6 --target_arch=ia32 --msvs_version=2013
setting target architecture because I was running a 64-bit system (compiling for 32-bit) and setting which version of Visual Studios I was using. (Note, did not work setting it to 2012 or 2010, or leaving it unset)
Now I just need a 32-bit linux compilation (which I just need to get around to) and I will have all the binaries I need to setup packages.
Whoo that was an all day process. Now to Calculus Homework.
x86_4819
14-12-2014, 18:36
Did you reach your limit for the day? :]
Heh. Considering I am a College Student in Engineering. Yep. More important matters to attend to. This is just my favorite pet project at the moment.
Ok, I have compiled executables for every platform now!
OSX
Windows
Linux 32-bit (NLinux32 has the Missing libudev.so.0 fix)
Linux 64-bit (NLinux64 has the Missing libudev.so.0 fix)
as well as a .nw package without the node-webkit executable included (much smalled file size)
They are all located at: http://gustavemichel.com/OSCPDSPackages/
With basic testing completed. My code has been pulled and merged into Gluxon's main project. Well done to the both of you who helped me with testing!
The Open Source DriverStation has Joystick Support! Next up seems to be to port the 2015 network protocol and mDNS to the OSDS. Please see/reference Gluxon's thread for future OSDS info: http://www.chiefdelphi.com/forums/showthread.php?t=118768
mhaeberli
13-01-2015, 00:34
Thanks!
dumb question number 6: has anyone tried this on a new roboRIO yet?
Best,
Martin
It shouldn't work with the roboRIO because we are still working on reverse engineering the new Network Protocol, and looking into mDNS support, but feel free to give it a shot. Just make sure you are cautious.
vBulletin® v3.6.4, Copyright ©2000-2017, Jelsoft Enterprises Ltd.