The old GPIO abstraction was replaced with [`diozero`](https://www.diozero.com), which supports most hardware running Linux due to its use of GPIO character devices provided by the Linux kernel. `diozero` also supports [alternate providers](https://www.diozero.com/concepts/providers.html#providers) if for some reason the character device API is insufficient. Certain capabilities outside of the character device API is also implemented for common hardware. Custom GPIO commands are implemented via a custom `diozero` provider. The configuration for custom GPIO will need manually updated according to the Hardware Config documentation page. The status LED class was also reworked to support additional statuses or LED indication types, although none have been added yet. This was tested on a RPi 5 with LL3 illumination LEDs and an RGB status led attached. All capabilities worked as expected. All 8 status LED colors were tested and functional via modifying the code. Basic functionality of custom GPIO was tested with dummy commands.
PhotonVision
PhotonVision is the free, fast, and easy-to-use computer vision solution for the FIRST Robotics Competition. You can read an overview of our features on our website. You can find our comprehensive documentation here.
The latest release of platform-specific jars and images is found here.
If you are interested in contributing code or documentation to the project, please read our getting started page for contributors and join the Discord to introduce yourself! We hope to provide a welcoming community to anyone who is interested in helping.
Authors
Documentation
- Our main documentation page: docs.photonvision.org
- Photon UI demo: demo.photonvision.org
- Javadocs: javadocs.photonvision.org
- C++ Doxygen cppdocs.photonvision.org
Building
Gradle is used for all C++ and Java code, and pnpm is used for the web UI. Instructions to compile PhotonVision yourself can be found in our docs.
You can run one of the many built in examples straight from the command line, too! They contain a fully featured robot project, and some include simulation support. The projects can be found inside the photonlib-java-examples and photonlib-cpp-examples subdirectories, respectively. Instructions for running these examples directly from the repo are found in the docs.
Gradle Arguments
Note that these are case sensitive!
-PArchOverride=foobar: builds for a target system other than your current architecture. Valid overrides are:- winx32
- winx64
- winarm64
- macx64
- macarm64
- linuxx64
- linuxarm64
- linuxathena
-PtgtIP: Specifies where./gradlew deployshould try to copy the fat JAR to-PtgtUser: Specifies custom username for./gradlew deployto SSH into-PtgtPw: Specifies custom password for./gradlew deployto SSH into-Pprofile: enables JVM profiling-PwithSanitizers: On Linux, enables-fsanitize=address,undefined,leak
If you're cross-compiling, you'll need the wpilib toolchain installed. This can be done via Gradle: for example ./gradlew installArm64Toolchain or ./gradlew installRoboRioToolchain
Out-of-Source Dependencies
PhotonVision uses the following additional out-of-source repositories for building code.
- Base system images for Raspberry Pi & Orange Pi: https://github.com/PhotonVision/photon-image-modifier
- C++ driver for Raspberry Pi CSI cameras: https://github.com/PhotonVision/photon-libcamera-gl-driver
- JNI code for mrcal: https://github.com/PhotonVision/mrcal-java
- Custom build of OpenCV with GStreamer/Protobuf/other custom flags: https://github.com/PhotonVision/thirdparty-opencv
- JNI code for aruco-nano: https://github.com/PhotonVision/aruconano-jni
Acknowledgments
PhotonVision was forked from Chameleon Vision. Thank you to everyone who worked on the original project.
-
WPILib - Specifically cscore, CameraServer, NTCore, and OpenCV.
-
Apache Commons - Specifically Commons Math, and Commons Lang
License
PhotonVision is licensed under the GNU General Public License.
Meeting Notes
Our meeting notes can be found in the wiki section of this repository.