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.
A copy of the latest Raspberry Pi image is available here. A copy of the latest standalone JAR is available here. If you are a Gloworm user you can find the latest Gloworm image 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.
Note that these are case sensitive!
-PArchOverride=foobar
: builds for a target system other than your current architecture. Valid overrides are:- linuxathena
- linuxarm32
- linuxarm64
- arm32
- arm64
- x86-64
- x86
-PtgtIp
: Specifies where./gradlew deploy
should try to copy the fat JAR to-Pprofile
: enables JVM profiling
Gradle is used for all C++ and Java code, and NPM 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. The projects currently available include:
- photonlib-java-examples:
- aimandrange:simulateJava
- aimattarget:simulateJava
- getinrange:simulateJava
- simaimandrange:simulateJava
- simposeest:simulateJava
- photonlib-cpp-examples:
- aimandrange:simulateNative
- getinrange:simulateNative
To run them, use the commands listed below. Photonlib must first be published to your local maven repository, then the copyPhotonlib
task will copy the generated vendordep json file into each example. After that, the simulateJava/simulateNative task can be used like a normal robot project. Robot simulation with attached debugger is technically possible by using simulateExternalJava and modifying the launch script it exports, though unsupported.
~/photonvision$ ./gradlew publishToMavenLocal
~/photonvision$ cd photonlib-java-examples
~/photonvision/photonlib-java-examples$ ./gradlew copyPhotonlib
~/photonvision/photonlib-java-examples$ ./gradlew <example-name>:simulateJava
~/photonvision$ cd photonlib-cpp-examples
~/photonvision/photonlib-cpp-examples$ ./gradlew copyPhotonlib
~/photonvision/photonlib-cpp-examples$ ./gradlew <example-name>:simulateNative
PhotonVision uses the following additonal 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
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
PhotonVision is licensed under the GNU General Public License
Our meeting notes can be found in the wiki section of this repository.
For now, using mrcal requires installing these additional packages on Linux systems:
sudo apt install libcholmod3 liblapack3 libsuitesparseconfig5
- Our main documentation page: docs.photonvision.org
- Photon UI demo: demo.photonvision.org (or manual link)
- Javadocs: javadocs.photonvision.org (or manual link)
- C++ Doxygen cppdocs.photonvision.org (or manual link)