|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
Vision Stops Returning Numbers
So we are using a USB camera with GRIP generated code in Java in order to find retro-reflective tape targets. We are able to see these targets, and return their X positions, but sometimes when we run our robot, the numbers that are returned simply stop changing. This prevents us from getting new values from the camera until we redeploy code, and this only fixes the issue until the bug randomly occurs again. The issue can be replicated by using visionThread.stop(), it has the exact same effect. If we try to use visionThread.start() in TeleopPeriodic to restart the vision program, it crashes: we lose code and comms for a second or two before it returns.
The code is a slightly modified version of the code found in the WPILIB documentation for vision processing, in addition to some NavX stuff. The class that it is calling, VisionPipelinew(), is just the code generated from GRIP. Code here: https://github.com/NeutralIntel/3826...aster/2017COAD |
|
#2
|
||||
|
||||
|
Re: Vision Stops Returning Numbers
You're getting an IndexOutOfBoundsException on this line.
When working with lists and arrays, you need to check that it contains an item at a given index before trying to access it. This is very important to remember for FRC, because an exception will crash your code and cause your robot to not move for the entirety of the match. I cannot stress this enough: check the list size before trying to access anything You also need to set centerRX and centerQX in the same synchronized block, otherwise the main thread can read one new value and one old value when it updates and you'll have junk data. |
|
#3
|
|||
|
|||
|
Re: Vision Stops Returning Numbers
Thanks, I think I understand what you mean, but I cannot deploy new code and test it right now due to windows updates on our driverstation laptop, I will reply back if/when I get a chance to test some changes.
|
|
#4
|
|||
|
|||
|
Re: Vision Stops Returning Numbers
The issue has been resolved! By switching '!pipeline.filterContoursOutput().isEmpty()' to 'pipeline.filterContoursOutput().size >= 2', the program does stop when only one target is visible, but the numbers resume updating when both targets are back in view. The updated code has been committed directly to the code on GitHub which I linked earlier. This code could be further modified to allow values to update when one target is visible.
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|