Giter VIP home page Giter VIP logo

pynetworktables2js's Introduction

RobotPy: Python for FRC cRIO Robot Controller

Author: Peter Johnson, FRC Team 294
Author: Dustin Spicuzza, FRC Team 2423/1418
Copyright: Copyright © 2010, Peter Johnson, Ross Light, Dustin Spicuzza

About RobotPy

RobotPy is a distribution of Python intended to be used for the FIRST Robotics Competition. Teams can use this to write their robot code in Python, a powerful dynamic programming language.

Features

  • Python is simple to learn and easy to maintain.
  • RobotPy lets you reload code without restarting.
  • RobotPy provides access to the WPILib class library.
  • You don't need to use WindRiver (unless you're rebuilding RobotPy itself).

Installation for most people

Download the binary releases from our FIRSTForge site, unpack them, and run install.py. Download from: http://firstforge.wpi.edu/sf/projects/robotpy

Installation from Source using our build VM

Using the provided build virtual machine is the easiest way to build RobotPy from source. See build-vm/README.txt for instructions.

Installation from Source (Advanced Users Only)

Step 1: Install Python

Python 2.7.5 is known to work. Ensure that you add your python installation directory to your PATH variable.

Note: This step is required for SIP installation

Step 2: Install SIP v4.15.3:

The cmake build process currently checks for exact versions of SIP, as the generated code changes from release to release.

http://www.riverbankcomputing.com/static/Docs/sip4/installation.html

Note: Installation of SIP on Windows requires Visual Studio or MinGW installed, see the SIP build instructions for more details.

Step 3: Build the source tree

TODO: Update these instructions for Windows too?

The RobotPy build process uses cmake to build the RobotPy distribution. frcmake is a wrapper around cmake that sets the build environment up to build for the cRio.

RobotPy currently uses the GCC 4.8 compiler distributed at the following URL to build the binary distribution. Wind River may be used, but we haven't built it with Wind River, so you may run into trouble using it with frcmake.

http://firstforge.wpi.edu/sf/projects/c--11_toochain

Create a directory (the 'binary directory') outside of the RobotPy source tree, and run this:

$ frcmake /path/to/robotpy

Once you've done this, you can build the code:

$ make

To copy the build output to the 'dist' directory, run this command from your binary directory:

$ make install

To build a binary release, just run the following command and a zip file will be created in your build directory.

$ make package

Step 4: Robot Installation

From the 'dist' directory inside of your binary directory, run install.py

Alternatively, you can FTP the contents of the 'robot' directory to your cRio directly. However, install.py is easier.

Development tools

See the utilities directory for useful development tools that may make your RobotPy development experience easier.

The pyfrc python package is a recommended development package that provides unit testing and other capabilities for your robot code.

https://github.com/robotpy/pyfrc

Technical Overview

RobotPy is a packaging of a patched Python 3.2 interpreter (found in the RobotPy/Python subdirectory of the source code). All access to the WPILib is generated by a SIP interface, which is found in Packages/wpilib/sip/. When the robot is started, it initializes the Python interpreter and runs the file py/boot.py. From there, all responsibility is given to the boot.py script, which is referred to as the bootloader.

If boot.py ever exits (due to an exception, for example), the C++ code exits. The default boot.py simply exits on any user exception. If this happens, you can reboot easily via NetConsole by simply typing "reboot" followed by hitting the enter key. This is how code reloads are performed. As boot.py is written in Python, this behavior can be customized as desired.

Major Differences from standard Python

  • Several Python modules with large and/or incompatible dependencies removed, namely: curses, dbm, gdbm, tkinter, nis, ossaudiodev, resource, spwd, syslog, termios, audioop, bz2, crypt, grp, ssl, pwd, and mmap.

Licensing

A brief overview of licensing terms:

If you redistribute RobotPy and add other libraries, please include their licensing information here.

RobotPy

Copyright © 2010 Peter Johnson

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

pynetworktables2js's People

Contributors

akainth015 avatar amorygalili avatar auscompgeek avatar computer-whisperer avatar czhao39 avatar virtuald avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

pynetworktables2js's Issues

Merging features from my RoboRIO-webdash

Before this was released, I built something similar as the base for my RoboRIO-Webdash: https://github.com/computer-whisperer/RoboRIO-webdash . Now that this standard is here, I would like to transition to using it instead.

However, there are some useful features that I built into my base, but lack proper representation here; here are some examples:

  • Websocket update buffering, where the server and client send compiled updates at fixed intervals.
  • aiohttp support, in addition to tornado
  • explicit type handling
  • retaining functionality upon NT server disconnect

I was wondering if you would be interested in me merging some of these features into this project?

Support new NT3 features

  • Persistent keys
  • Different types of entry notifications?
  • Change around the connection notifications

There are probably more things I'm forgetting.

Use native Map instead of rolling our own(ish)

Map was added in ES2015. We should probably use that instead of copying the old d3 map implementation.

(Everyone uses Firefox or Chrome instead of IE <11, right? Right everyone…?)

Don't Understand This Issue

Traceback (most recent call last): File "pyinstaller\shim.py", line 6, in <module> File "pynetworktables2js\__main__.py", line 81, in main File "pynetworktables2js\__main__.py", line 37, in init_networktables AttributeError: Values instance has no attribute 'dashboard' Failed to execute script shim

Anyone know what this means?

Fix pyntcore compatibility issues

Works great with pynetworktables, but there's a few missing pieces:

  • NetworkTableInstance.getRemoteAddress missing
  • NetworkTableInstance.addEntryListener/removeEntryListener behaviors have changed

Create single executable to distribute

For the most part, a custom web server script isn't all that useful -- the default python -m pynetworktables provides most of the options one would need. With that in mind, we could use pyinstaller to create a single executable for Windows that could be distributed and make the barrier of entry even lower.

Cannot Connect to Robot

We're trying to connect to the Roborio for the 2016 competition, and we are not connecting to the robot. I am running:
.\tornado_server.py --robot roborio-3322.local
And I am attempting to connect to the robot via:
localhost:8888
The web socket is connected, but the robot isn't connected to the computer.

Add bootstrap-like javascript helpers

Ideally, should be able to assign a class and a data attribute indicating the NetworkTables key, and the HTML object will transmit/respond based on NetworkTables events. For example, something like a toggle button:

<button data-nt="/SmartDashboard/foo" data-type="toggle" />

.. or something like this. A lot of the UI elements should be buildable without requiring any explicit javascript, to make it simpler to add/extend the UI.

Running JS from arbitrary JS

I don't have a ton of robot time to be chasing my tail around this so I just want to see if it is viable...

I'd like to implement the JS network tables in my Qt dashboard because I couldn't compile a DLL if my life was on the line. If I start the generic tornado server on my RIO, can I just drop the networktables.js (with appropriate hacking to fix the IP resolution and WebSocket usage) and it would work fine?

Can't put array

Currently I can't say NetworkTables.putValue('/key', [1,2,3]) Adding arrays isn't that easy because nt wouldn't like NetworkTables.putValue('/key', []) because it needs a type and it can't get a type from an empty array. I think we should have separate methods 'putBooleanArray', 'putNumberArray', 'putStringArray', or require a third parameter 'type' for putValue when adding an array. It would look something like NetworkTables.putValue('/key', [1,2,3], 'Integer')

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.