2024-06-28 15:47:27 -07:00
|
|
|
# Jankboard
|
2024-02-21 14:19:36 -08:00
|
|
|
|
2024-06-28 15:47:27 -07:00
|
|
|
![build](https://github.com/couscousdude/jankboard/actions/workflows/main.yml/badge.svg)
|
2024-03-11 00:59:03 -07:00
|
|
|
[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation)
|
2024-03-10 00:36:19 -08:00
|
|
|
|
2024-06-28 15:47:27 -07:00
|
|
|
This repository hosts the last version of the source code for the Jankboard
|
|
|
|
worked on by [me](https://github.com/youwen5).
|
|
|
|
|
|
|
|
Jankboard is the fully custom control interface designed in-house by Team 1280
|
|
|
|
for the 2024 season of the
|
|
|
|
[FIRST Robotics Competition](https://en.wikipedia.org/wiki/FIRST_Robotics_Competition).
|
|
|
|
The FIRST Robotics Competition is an international high-school robotics
|
|
|
|
competition which runs annually. Teams spend six weeks designing, prototyping,
|
|
|
|
and building a robot to compete in each year's game. The goals for each game
|
|
|
|
vary by year.
|
|
|
|
|
|
|
|
Though this is a Team 1280 project, it's hosted on my GitHub account as I wrote
|
|
|
|
the vast majority of the code and retain rights to it via the
|
|
|
|
[license](./LICENSE). A small portion of this codebase was contributed by
|
|
|
|
@quantum9innovation. I've released it as free and open source software,
|
|
|
|
compliant with Team 1280's policies for post-competition software stewardship.
|
|
|
|
|
|
|
|
The Jankboard is a fully functional control interface designed to be used with
|
|
|
|
our 2024 robot. It is intended to work alongside the FRC Game Tools application,
|
|
|
|
which is required by the rules to handle processing robot control inputs. The
|
|
|
|
Jankboard is a dashboard which receives the telemetry data from the robot and
|
|
|
|
displays it for the driver. It also processes it to provide useful features. It
|
|
|
|
replaces the standard "Shuffleboard" dashboard program provided by FIRST, and
|
|
|
|
has a much cleaner and purpose-built UI.
|
|
|
|
|
|
|
|
Jankboard is built with [Tauri](https://tauri.app/), which is a framework for
|
|
|
|
building desktop application with Rust and webviews. Unlike Electron, it
|
|
|
|
leverages the platforms built-in web technologies (Chromium on Windows, WebKit
|
|
|
|
on Linux and MacOS) to avoid shipping a massive bloated binary with a bundled
|
|
|
|
browser. Our (my) choice of web framework is [Svelte](https://svelte.dev/), a
|
|
|
|
modern framework with a compiler. To interface with and collect telemetry from
|
|
|
|
the robot, a Rust backend implements the low-level networking and communication
|
|
|
|
details and streams the received data back to the frontend UI. As soon as new
|
|
|
|
data is received, the frontend is updated immediately. We found that this
|
|
|
|
provided more than enough speed for our purposes, since the robot sends new
|
|
|
|
telemetry at a rate of 10 Hz. We chose this tech stack because building
|
|
|
|
beautiful and functional UIs is easiest with the Web, and it allowed us to
|
|
|
|
rapidly build the application during our 6-week development period.
|
|
|
|
|
|
|
|
<!-- prettier-ignore -->
|
|
|
|
> [!IMPORTANT]
|
|
|
|
> If you are interested in forking this project or utilizing portions of it for
|
|
|
|
> your (personal or on behalf of your organization) use, please see
|
|
|
|
> [the licensing section](#licensing) for a detailed explanation of what this
|
|
|
|
> project's status as free software entails.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
<table>
|
|
|
|
<tr><td><b>Table of Contents:</b></td></tr>
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
<td><!--toc:start-->
|
|
|
|
|
|
|
|
- [Jankboard 2](#jankboard-2)
|
|
|
|
- [Installation guide](#installation-guide)
|
|
|
|
- [A brief footnote on the name "Jankboard 2"](#a-brief-footnote-on-the-name-jankboard-2)
|
|
|
|
- [For developers](#for-developers)
|
|
|
|
- [Prerequisites](#prerequisites)
|
|
|
|
- [Installation steps](#installation-steps)
|
|
|
|
- [Troubleshooting common issues](#troubleshooting-common-issues)
|
|
|
|
- [Current progress and improvements over (original) Jankboard](#current-progress-and-improvements-over-original-jankboard)
|
|
|
|
- [TODO](#todo)
|
|
|
|
<!--toc:end-->
|
|
|
|
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
---
|
2024-02-22 01:00:32 -08:00
|
|
|
|
2024-02-27 13:06:26 -08:00
|
|
|
## Installation guide
|
|
|
|
|
2024-03-10 00:36:19 -08:00
|
|
|
We recommend installing the latest stable release binaries from
|
|
|
|
[our release page](https://github.com/Team-1280/Jankboard-2/releases/), if
|
|
|
|
you're just looking to run the Jankboard. Alternatively, if you can't find
|
|
|
|
release binaries for your system, follow the directions below in the
|
|
|
|
[For developers](#for-developers) section to build it from source. We will
|
|
|
|
periodically update the releases with new builds when we come out with stable
|
|
|
|
versions, and we follow [semantic versioning](https://semver.org/).
|
|
|
|
|
|
|
|
## A brief footnote on the name "Jankboard 2"
|
|
|
|
|
|
|
|
The name "Jankboard" comes from Team 1280's original attempt at creating a
|
|
|
|
custom dashboard. Though it looked and functioned superficially similar to
|
|
|
|
Jankboard 2, it was not designed with maintainability in mind and became
|
|
|
|
exceptionally difficult to extend and develop as the codebase became bloated.
|
|
|
|
Jankboard 2 is a version redesigned from the ground up with the goal of easy
|
|
|
|
maintainability and richer features. It contains both a completely rewritten
|
|
|
|
frontend and backend, which have been improved in almost every possible way. You
|
|
|
|
can view the original version at
|
|
|
|
[its archived repository.](https://github.com/Team-1280/Jankboard-Super-Jank/tree/f42715f5ae1897e95ef15103b16ba6e764d2c0be)
|
2024-02-27 13:06:26 -08:00
|
|
|
|
|
|
|
## For developers
|
|
|
|
|
2024-03-10 00:36:19 -08:00
|
|
|
If you would like to contribute to Jankboard 2, there's only a few simple steps
|
|
|
|
to get the development build up and running.
|
2024-02-27 13:06:26 -08:00
|
|
|
|
2024-02-28 18:40:41 -08:00
|
|
|
### Prerequisites
|
2024-02-28 17:09:53 -08:00
|
|
|
|
2024-03-10 00:36:19 -08:00
|
|
|
- Rust and `cargo`. Check the [Rust docs](https://www.rust-lang.org/learn) for
|
|
|
|
more information. We recommend you install Rust using `rustup`. Keep in mind
|
|
|
|
that this is ONLY necessary for development, release binaries do not require
|
|
|
|
Rust.
|
|
|
|
- `pnpm`, for installing dependencies and the `vite` development server.
|
|
|
|
- Ideally, NodeJS, but it's technically not required as `pnpm` brings its own
|
|
|
|
node binary.
|
2024-02-27 13:06:26 -08:00
|
|
|
|
2024-03-06 09:14:30 -08:00
|
|
|
### Installation steps
|
|
|
|
|
2024-03-11 01:12:34 -07:00
|
|
|
1. Clone the repository. The `client` directory contains the vast majority of
|
|
|
|
the source code for the desktop app, while the `splash-screen` directory
|
|
|
|
contains the source code for the splash screen displayed before the app
|
|
|
|
loads. You don't have to touch anything in `splash-screen` unless you want to
|
|
|
|
modify it, in which case check the README in `splash-screen` for more
|
|
|
|
information.
|
2024-03-10 00:36:19 -08:00
|
|
|
2. `cd` into the `client` folder. The configuration files and `package.json`,
|
|
|
|
This is where stuff like `package.json` and configuration files for our
|
|
|
|
various tooling are housed. The `client/src-tauri` directory contains the
|
|
|
|
Rust source code and `cargo` configuration files for the backend that
|
|
|
|
interfaces with the robot via Network Tables.
|
|
|
|
3. Run `pnpm install` to install dependencies.
|
|
|
|
4. To run the desktop app in developer mode (with automatic hot stateful reload
|
|
|
|
and other useful features like error reporting), make sure you're in the
|
|
|
|
`client` directory and run `pnpm run tauri dev`. This will install and build
|
|
|
|
the Rust dependencies via `cargo` and initialize the `vite` development
|
|
|
|
server for the frontend. Note that since this is basically just running the
|
|
|
|
`vite` development server and then connecting the Tauri webview to it, there
|
|
|
|
may be slightly inconsistent behavior in dev mode versus production mode.
|
2024-03-10 00:45:44 -08:00
|
|
|
5. To create a production binary, run `pnpm run tauri build`. Tauri
|
2024-03-10 00:51:45 -08:00
|
|
|
6. To create a production binary, run `pnpm run tauri build`. Tauri
|
2024-03-10 00:36:19 -08:00
|
|
|
cross-compilation is still in beta, so you should generally try to build
|
|
|
|
targeting the same OS you're currently running. Check
|
|
|
|
[the Tauri docs](https://tauri.app/v1/guides/building/) for more information.
|
|
|
|
We also have some Github Actions set up to automatically compile a production
|
|
|
|
build for all platforms, but this is expensive (uses over 30 minutes of our
|
|
|
|
quota), and should only be used for publishing new major releases.
|
2024-02-27 13:06:26 -08:00
|
|
|
|
|
|
|
## Troubleshooting common issues
|
|
|
|
|
2024-03-10 00:36:19 -08:00
|
|
|
- If you're experiencing issues with TypeScript type checking or dependency
|
|
|
|
resolution, try opening your editor directly in the `client` directory so it
|
|
|
|
picks up the `tsconfig.json` and uses the project's own TypeScript language
|
|
|
|
server.
|
|
|
|
- If you don't have access to a development environment that supports running
|
|
|
|
standalone executables (eg. Github Codespaces), you can try running
|
2024-03-10 00:45:44 -08:00
|
|
|
`pnpm run dev` instead of `pnpm run tauri dev`, which will open a development
|
2024-03-10 00:36:19 -08:00
|
|
|
server at `localhost:5173` with the frontend running in the web. However, app
|
|
|
|
behavior may be inconsistent and you will not get any features from the Rust
|
|
|
|
backend.
|
2024-02-27 13:06:26 -08:00
|
|
|
|
2024-06-28 15:47:27 -07:00
|
|
|
## Licensing
|
|
|
|
|
|
|
|
This project is released as free software under the
|
|
|
|
[GNU General Public License](./LICENSE). What that entails for a developer
|
|
|
|
seeking to use portions of this codebase, or even the entirety of the codebase,
|
|
|
|
for your own purposes, is the following:
|
|
|
|
|
|
|
|
You are given the right to copy, modify, and distribute this software, in its
|
|
|
|
entirety or just a portion of it, with or without modification, provided you
|
|
|
|
meet the following requirements:
|
|
|
|
|
|
|
|
- If you do make modifications to the software, you are required to release
|
|
|
|
them, also under the terms of the GPL v3, **if you are planning to distribute
|
|
|
|
the software**. However, this is not required if you are not planning to
|
|
|
|
distribute it. See below.
|
|
|
|
- You may modify or use it however you'd like personally or internally (within
|
|
|
|
an organization, like your robotics team), without releasing your changes or
|
|
|
|
code under the GPL. This means that if you make a custom dashboard based on
|
|
|
|
this code for your own robotics team, you do not have to release the code as
|
|
|
|
long as you are not planning to distribute your custom dashboard to other
|
|
|
|
robotics teams or publish it publicly on the internet. If you do intend to
|
|
|
|
distribute it, then you must release the modified source under the terms of
|
|
|
|
the GPL v3.
|
|
|
|
- We think that this is fair - if you intend to keep an internal private tool,
|
|
|
|
we should not stop you from doing so. However, if you intend to publish your
|
|
|
|
tool or share it with others, then you should also publish or share the
|
|
|
|
source code for the benefit of other developers and robotics teams, as we
|
|
|
|
have done here.
|
|
|
|
|
|
|
|
See the full license text of the [GPL](./LICENSE) if you need further
|
|
|
|
clarification. The above is simply an explanation of the license, if any
|
|
|
|
conflicts between the above text and the license text arise, then the original
|
|
|
|
license text takes precedence.
|