Files
PhotonVision/README.md

84 lines
5.0 KiB
Markdown
Raw Normal View History

2024-05-19 17:37:13 -07:00
# PhotonVision
V2.1 (#37) * Toggle mode * RangeSlider able to be disabled * Added another window from the press of the button * removed warning * Major changes to colorpicker page * Major changes to threshold tab * fix for BGR not RGB * Reverted changes of colorpicker.vue * Updated Readme.md Mainly Development Setup * Update readme small changes * updated readme.md Authors credit update * updated readme.md added usb camera to hardware * Updated UI readme added nodejs installation and explanation * Unit test vision (and implement networktable sending) * finished color picker in the ui * bugfix for correct tab * cleanup and commenting * Reveted changes to range slider * bug fix for color picker * Pipeline mat copy fix * Added crosshair pipe * compilation fix * removed unsued comment * moved calibration stuff to static class under 2d pipeline settings * Added debug print commented * Reverted subclass "Calibration" Fixed bug where single point calibration causes crash when no target is found * disable dual point crosshair for now * Proper no target found fix, and snackbar error now showing * Removed java fix for crash bug * fixed problem with clear points in single point calibration * change compatator to sqared values to make caluclation faster (no need for sqare root function) * fixed roated camera too heigh for the UI * Revert "fixed roated camera too heigh for the UI" This reverts commit 50c8ecd34560ac0171b8d7497bec2e2d1d93d43f. * fixed rotated camera too heigh for UI and corrected scalling * updated pom to fix the camera buffer issue * added pom variables * Created new CaptureStaticProperties when rotating cam * File stucture change, moved Pipeline implementation and their settings to /impl folder, refracted imports * ignore auto created iml file * ignore auto created iml file * Fix lack of access problems after moving pipleline impl out of the same package * Removed commented lines * Fixed bug when selecting the same 90 deg rotation twice causes crosshair to move * cleaned up single point calibration and bug fixed isBinary in driverMode * Enum fix for the UI * typo * fixed Stream divisor problems see issue 19 in github issues * fixed compilation error for test class * Fixed problem when rotating camera with stream divisor * Spelling + button style change * Add speed limit to UI Updates * Added runtime arg to fix settings permissions, and on-first-init * Added FileHelper class to manage setting permissions for all files. * Removed unnecessary argument * NT can set pipeline to out on bound indexes * bugfix in platform check * added pipeline popup * Round steam divisor resolution * added regex test for camera name and pipe name * Fix for Renaming pipeline leaves old config file #14 * Version change * adde ( ) - and . to regex * Replace NT timestamp with latency * added back NT flush * Add solvePNP, 3d tab on the UI, and some other misc bug fixes (#35) * Rebase solvePNP on master * added 3D tab minimap and csv reader * More solvePNP * Create draw pipe for pnp data * SolvePNP piping work * Move sorting into solvepnppipe * Create calibration pipeline * Update CalibrateSolvePNPPipeline.java * add camera tilt angle * Add calibration slider and snapshot button to 3D view * Mirror updates in the socket handler * add 3d calibration mode to the pipeline manager * created calibration functions in ui and backend * Start plumbing calibration * Add snapshot and other handling to the RequestHandler * added select resolution before starting calibration * Rename solvePNPPipe to bounding box solve pnp pipe * Update BoundingBoxSolvePNPPipe.java * Add Mat serializer and CameraCalibrationConfig * Begun calibration saving, fixed UI/Backend snapshot count mismatch * Add (unplumbed) option to set checkerboard size This will allow users to change the units their calibration is in * Create chessboard.png * Fix calibration NPE * changed string serialization to a json send * bug fixed cancellation button * Fix spelling of snapshot in 3d.vue * Plumb resolution change * Set resolution during config, start on config serialization * Update .gitignore * Config fixes * Start transition away from cvpipeline3d * fix NPE on uncalibrated cameras * clear list on fail * Fix video mode index error * ignore getters in camera calibration config * Create json constructor for jsonmat * get solvePNP mostly returning sane values * Fix solvePNP bug and add unit test * FIx calibration mat truncation * added capture amount model upload and minimap data * Standardize on meters in calibration and bounding box * fix json out of bounds and handle null calibration more gracefully * don't put text on calibrate image, go back to inches * convert distance to meters this means calibration will need to be in inches * Actually save raw contor * Update GroupContoursPipe.java * Add all calibration return to camera capture * hard code 2019 target * bugfixed draw2d added fail calib popup, merge end and cancel added the res index to the calib start * Clarify error message and draw more fancy rectangles * Cleanup memory in solvepnp * re did minimap component * fix npe if left/right is null * remove references to 2d * try-catch running the current pipeline * Add method to find corners using the harris corner detector * Possibly fix left/right missmatch * Fix 3D Tab error * FIx file permissions, mat serializer adjustments * fixed mini map for field coordinates * mini map changes fov * Update SolvePNPPipe.java * get rid of target corners * some memory leak fixes * fixed mini map location * added position under minimap * changed player fov look * put all targets in the web send * re did target send to ui added target tables, bugfix calibration * fixed y position * Add tilt angle to capture properties * maybe fix y axis in minimap * Add square size to onCalibrationEnding * Possibly add square size to UI * fix NPE with pitch * Fix bug with sending multiple targets * Only instantiate 3d stuff if we are in 3d mode * Fix array list exceptions * Fix bug in sort contors list was truncated too early * added download chess, tilt setting and ordinal tilt, * added square size connection * removed unused code * Update pom version to 2.1-RELEASE * Send camera calibrations to UI * Stream pose list to a LIst * Only stream necessary parts of the aux list entry * Make broadcastMessage synchronized to prevent ConcurrentModificationExceptions * added fps counter changed squaresize steps bug fixes in tables * bugfix camera settings cam wont change Authored-by: oriagranat9 <oriagranat9@gmail.com> * disable pose print * standardize on calibration in inches and add square size as a divisor This should do the same thing as calibrating in the correct units but it doesnt like meeeeee * updated pom for release, 3d calibration change, cosmetic changes * WIP: 3D res filter * bug fix in index parsing * add good features to track point finder * offset found corners by old tl position * Add method to find most extreme per-quadrant points for solvePNP * re did pipeline duplication * Add release method to standard cv pipeline * remove contor from tracked target * Explicitly release all the intermediate results * avoid creating new mats in group contors pipe * removed mat release * updated pom * Actually cache the last target We were trying to but i never hooked this part up * Fix memory leak in sort contros pipe * Fix memory leak in sort contors pipe * Help more with memory usage in speckle reject and draw pipes * minor bugfixes to the ui * Start moving stream into vision process Should probs move into a pipe to be idimatic * justify bug fix * Fix sort left/right bug * Fix target grouping bug * Avoid allocating a new mat in solvePNP, perf. increases in group contors pipe * Event scripts (#36) * Begin scripting work * More scripting work * Finalize scripting system * Begin implementing script events * Finalize script system Co-authored-by: Banks T <btrout.dhrs@gmail.com> Co-authored-by: OmerZ7 <zipory.omer@gmail.com> Co-authored-by: Matt <matthew.morley.ca@gmail.com> Co-authored-by: Banks T <btrout.dhrs@gmail.com>
2020-01-04 11:53:18 -08:00
[![Discord](https://img.shields.io/discord/725836368059826228?color=%23738ADB&label=Join%20our%20Discord&logo=discord&logoColor=white)](https://discord.gg/wYxTwym)
2021-01-09 11:14:14 -08:00
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](https://photonvision.org). You can find our comprehensive documentation [here](https://docs.photonvision.org).
2024-05-19 17:37:13 -07:00
The latest release of platform-specific jars and images is found [here](https://github.com/PhotonVision/photonvision/releases).
V2.1 (#37) * Toggle mode * RangeSlider able to be disabled * Added another window from the press of the button * removed warning * Major changes to colorpicker page * Major changes to threshold tab * fix for BGR not RGB * Reverted changes of colorpicker.vue * Updated Readme.md Mainly Development Setup * Update readme small changes * updated readme.md Authors credit update * updated readme.md added usb camera to hardware * Updated UI readme added nodejs installation and explanation * Unit test vision (and implement networktable sending) * finished color picker in the ui * bugfix for correct tab * cleanup and commenting * Reveted changes to range slider * bug fix for color picker * Pipeline mat copy fix * Added crosshair pipe * compilation fix * removed unsued comment * moved calibration stuff to static class under 2d pipeline settings * Added debug print commented * Reverted subclass "Calibration" Fixed bug where single point calibration causes crash when no target is found * disable dual point crosshair for now * Proper no target found fix, and snackbar error now showing * Removed java fix for crash bug * fixed problem with clear points in single point calibration * change compatator to sqared values to make caluclation faster (no need for sqare root function) * fixed roated camera too heigh for the UI * Revert "fixed roated camera too heigh for the UI" This reverts commit 50c8ecd34560ac0171b8d7497bec2e2d1d93d43f. * fixed rotated camera too heigh for UI and corrected scalling * updated pom to fix the camera buffer issue * added pom variables * Created new CaptureStaticProperties when rotating cam * File stucture change, moved Pipeline implementation and their settings to /impl folder, refracted imports * ignore auto created iml file * ignore auto created iml file * Fix lack of access problems after moving pipleline impl out of the same package * Removed commented lines * Fixed bug when selecting the same 90 deg rotation twice causes crosshair to move * cleaned up single point calibration and bug fixed isBinary in driverMode * Enum fix for the UI * typo * fixed Stream divisor problems see issue 19 in github issues * fixed compilation error for test class * Fixed problem when rotating camera with stream divisor * Spelling + button style change * Add speed limit to UI Updates * Added runtime arg to fix settings permissions, and on-first-init * Added FileHelper class to manage setting permissions for all files. * Removed unnecessary argument * NT can set pipeline to out on bound indexes * bugfix in platform check * added pipeline popup * Round steam divisor resolution * added regex test for camera name and pipe name * Fix for Renaming pipeline leaves old config file #14 * Version change * adde ( ) - and . to regex * Replace NT timestamp with latency * added back NT flush * Add solvePNP, 3d tab on the UI, and some other misc bug fixes (#35) * Rebase solvePNP on master * added 3D tab minimap and csv reader * More solvePNP * Create draw pipe for pnp data * SolvePNP piping work * Move sorting into solvepnppipe * Create calibration pipeline * Update CalibrateSolvePNPPipeline.java * add camera tilt angle * Add calibration slider and snapshot button to 3D view * Mirror updates in the socket handler * add 3d calibration mode to the pipeline manager * created calibration functions in ui and backend * Start plumbing calibration * Add snapshot and other handling to the RequestHandler * added select resolution before starting calibration * Rename solvePNPPipe to bounding box solve pnp pipe * Update BoundingBoxSolvePNPPipe.java * Add Mat serializer and CameraCalibrationConfig * Begun calibration saving, fixed UI/Backend snapshot count mismatch * Add (unplumbed) option to set checkerboard size This will allow users to change the units their calibration is in * Create chessboard.png * Fix calibration NPE * changed string serialization to a json send * bug fixed cancellation button * Fix spelling of snapshot in 3d.vue * Plumb resolution change * Set resolution during config, start on config serialization * Update .gitignore * Config fixes * Start transition away from cvpipeline3d * fix NPE on uncalibrated cameras * clear list on fail * Fix video mode index error * ignore getters in camera calibration config * Create json constructor for jsonmat * get solvePNP mostly returning sane values * Fix solvePNP bug and add unit test * FIx calibration mat truncation * added capture amount model upload and minimap data * Standardize on meters in calibration and bounding box * fix json out of bounds and handle null calibration more gracefully * don't put text on calibrate image, go back to inches * convert distance to meters this means calibration will need to be in inches * Actually save raw contor * Update GroupContoursPipe.java * Add all calibration return to camera capture * hard code 2019 target * bugfixed draw2d added fail calib popup, merge end and cancel added the res index to the calib start * Clarify error message and draw more fancy rectangles * Cleanup memory in solvepnp * re did minimap component * fix npe if left/right is null * remove references to 2d * try-catch running the current pipeline * Add method to find corners using the harris corner detector * Possibly fix left/right missmatch * Fix 3D Tab error * FIx file permissions, mat serializer adjustments * fixed mini map for field coordinates * mini map changes fov * Update SolvePNPPipe.java * get rid of target corners * some memory leak fixes * fixed mini map location * added position under minimap * changed player fov look * put all targets in the web send * re did target send to ui added target tables, bugfix calibration * fixed y position * Add tilt angle to capture properties * maybe fix y axis in minimap * Add square size to onCalibrationEnding * Possibly add square size to UI * fix NPE with pitch * Fix bug with sending multiple targets * Only instantiate 3d stuff if we are in 3d mode * Fix array list exceptions * Fix bug in sort contors list was truncated too early * added download chess, tilt setting and ordinal tilt, * added square size connection * removed unused code * Update pom version to 2.1-RELEASE * Send camera calibrations to UI * Stream pose list to a LIst * Only stream necessary parts of the aux list entry * Make broadcastMessage synchronized to prevent ConcurrentModificationExceptions * added fps counter changed squaresize steps bug fixes in tables * bugfix camera settings cam wont change Authored-by: oriagranat9 <oriagranat9@gmail.com> * disable pose print * standardize on calibration in inches and add square size as a divisor This should do the same thing as calibrating in the correct units but it doesnt like meeeeee * updated pom for release, 3d calibration change, cosmetic changes * WIP: 3D res filter * bug fix in index parsing * add good features to track point finder * offset found corners by old tl position * Add method to find most extreme per-quadrant points for solvePNP * re did pipeline duplication * Add release method to standard cv pipeline * remove contor from tracked target * Explicitly release all the intermediate results * avoid creating new mats in group contors pipe * removed mat release * updated pom * Actually cache the last target We were trying to but i never hooked this part up * Fix memory leak in sort contros pipe * Fix memory leak in sort contors pipe * Help more with memory usage in speckle reject and draw pipes * minor bugfixes to the ui * Start moving stream into vision process Should probs move into a pipe to be idimatic * justify bug fix * Fix sort left/right bug * Fix target grouping bug * Avoid allocating a new mat in solvePNP, perf. increases in group contors pipe * Event scripts (#36) * Begin scripting work * More scripting work * Finalize scripting system * Begin implementing script events * Finalize script system Co-authored-by: Banks T <btrout.dhrs@gmail.com> Co-authored-by: OmerZ7 <zipory.omer@gmail.com> Co-authored-by: Matt <matthew.morley.ca@gmail.com> Co-authored-by: Banks T <btrout.dhrs@gmail.com>
2020-01-04 11:53:18 -08:00
2022-11-14 17:27:29 -08:00
If you are interested in contributing code or documentation to the project, please [read our getting started page for contributors](https://docs.photonvision.org/en/latest/docs/contributing/index.html) and **[join the Discord](https://discord.gg/wYxTwym) to introduce yourself!** We hope to provide a welcoming community to anyone who is interested in helping.
2019-08-29 00:01:40 +03:00
2024-05-19 17:37:13 -07:00
## Documentation
- Our main documentation page: [docs.photonvision.org](https://docs.photonvision.org)
2025-12-05 19:30:50 -08:00
- Photon UI demo: [demo.photonvision.org](https://demo.photonvision.org)
- Javadocs: [javadocs.photonvision.org](https://javadocs.photonvision.org)
2026-01-26 01:25:59 -05:00
- C++ Doxygen: [cppdocs.photonvision.org](https://cppdocs.photonvision.org)
## Authors
<a href="https://github.com/PhotonVision/photonvision/graphs/contributors">
<img src="https://contrib.rocks/image?repo=PhotonVision/photonvision" />
</a>
2024-05-19 17:37:13 -07:00
## 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](https://docs.photonvision.org/en/latest/docs/contributing/building-photon.html#compiling-instructions).
2024-05-19 17:37:13 -07:00
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`](photonlib-java-examples) and [`photonlib-cpp-examples`](photonlib-cpp-examples) subdirectories, respectively. Instructions for running these examples directly from the repo are found [in the docs](https://docs.photonvision.org/en/latest/docs/contributing/building-photon.html#running-examples).
2024-05-19 17:37:13 -07:00
2021-12-18 12:53:08 -05:00
## Gradle Arguments
Note that these are case sensitive!
* `-PArchOverride=foobar`: builds for a target system other than your current architecture. [Valid overrides](https://github.com/wpilibsuite/wpilib-tool-plugin/blob/main/src/main/java/edu/wpi/first/tools/NativePlatforms.java) are:
* winx64
* winarm64
* macx64
* macarm64
* linuxx64
2023-10-30 23:01:33 -04:00
* linuxarm64
* linuxathena
- `-PtgtIP`: Specifies where `./gradlew deploy` should try to copy the fat JAR to
- `-PtgtUser`: Specifies custom username for `./gradlew deploy` to SSH into
- `-PtgtPw`: Specifies custom password for `./gradlew deploy` to SSH into
2021-12-18 12:53:08 -05:00
- `-Pprofile`: enables JVM profiling
- `-PwithSanitizers`: On Linux, enables `-fsanitize=address,undefined,leak`
2019-08-13 23:43:50 +03:00
2025-06-17 19:09:09 -04:00
If you're cross-compiling, you'll need the WPILib toolchain installed. This must be done via Gradle: for example `./gradlew installArm64Toolchain` or `./gradlew installSystemCoreToolchain`
2024-01-03 17:23:59 -07:00
## Out-of-Source Dependencies
PhotonVision uses the following additional out-of-source repositories for building code.
2024-01-03 17:23:59 -07:00
2026-01-26 01:25:59 -05:00
- Base system images for supported coprocessors: https://github.com/PhotonVision/photon-image-modifier
2024-01-03 17:23:59 -07:00
- C++ driver for Raspberry Pi CSI cameras: https://github.com/PhotonVision/photon-libcamera-gl-driver
- JNI code for [mrcal](https://mrcal.secretsauce.net/): https://github.com/PhotonVision/mrcal-java
2026-01-26 01:25:59 -05:00
- JNI code for RKNN: https://github.com/PhotonVision/rknn_jni
- JNI code for Rubik Pi NPU: https://github.com/PhotonVision/rubik_jni
2024-01-03 17:23:59 -07:00
2019-08-13 23:43:50 +03:00
## Acknowledgments
2021-01-09 11:14:14 -08:00
2024-05-19 17:37:13 -07:00
PhotonVision was forked from [Chameleon Vision](https://github.com/Chameleon-Vision/chameleon-vision/). Thank you to everyone who worked on the original project.
2019-08-29 00:01:40 +03:00
2026-01-26 01:25:59 -05:00
* [WPILib](https://github.com/wpilibsuite) - Specifically [allwpilib](https://github.com/wpilibsuite/allwpilib) and [their build of OpenCV](https://github.com/wpilibsuite/thirdparty-opencv).
* [Apache Commons](https://commons.apache.org/) - Specifically [Commons IO](https://commons.apache.org/proper/commons-io/), and [Commons CLI](https://commons.apache.org/proper/commons-cli/)
* [diozero](https://www.diozero.com/)
* [EJML](https://github.com/lessthanoptimal/ejml)
2019-09-24 19:14:52 +00:00
* [Javalin](https://javalin.io/)
* [JSON](https://json.org)
* [FasterXML](https://github.com/FasterXML) - Specifically [jackson](https://github.com/FasterXML/jackson)
2026-01-26 01:25:59 -05:00
* [MessagePack for Java](https://github.com/msgpack/msgpack-java)
* [OSHI](https://github.com/oshi/oshi)
2026-01-26 01:25:59 -05:00
* [QuickBuffers](https://github.com/HebiRobotics/QuickBuffers)
* [SQLite JDBC](https://github.com/xerial/sqlite-jdbc)
* [ZT ZIP](https://github.com/zeroturnaround/zt-zip)
## License
2024-05-19 17:37:13 -07:00
PhotonVision is licensed under the [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.html).
2024-05-19 17:37:13 -07:00
## Meeting Notes
2024-05-19 17:37:13 -07:00
Our [meeting notes](https://github.com/PhotonVision/photonvision/wiki/PhotonVision-Meeting-Notes) can be found in the wiki section of this repository.