How can i use GRIP to make the robot auto allign with a usb or axis camera?
Sample code?
How can i use GRIP to make the robot auto allign with a usb or axis camera?
Sample code?
The quick and easy way to align is to just turn until the target is in the center of the frame.
I’m not familiar with GRIP, but there should be a function that gives you the center of the object you are looking at.
Initially we tried using PID for alignment but the inherent issues with our robot’s large drive dead zone and the lag in vision processing drove us to ditch pid and do our own two-phase constant rate turn.
First, we turn quickly until the target is within 20% around the center. Then, we turn slowly until we just pass the target and immediately stop there. This results in pretty decent alignment.
Here’s some psuedocode for you
slow_zone = 0.2
slow_speed = 0.5
fast_speed = 1
repeat until (error = abs(target_center - image_width / 2)) < acceptable_error
sign = target_center > image_width / 2 ? -1 : 1 // which direction to turn
if error < slow_zone
arcadedrive(0, slow_speed * sign)
else
arcadedrive(0, fast_speed * sign)
end
Good luck implementing this!
Here is a grip file to help you get started.
It does a half decent job of detecting targets. You might want to play around with contour areas and rgb stuff.
I also uploaded some sample picture that you might want to play around with it.
Use network tables to use it in the java code
Robotics.zip (4.67 MB)
Robotics.zip (4.67 MB)
I found that using the vision to directly control a motor was too slow. By using a gyro, I calculated (roughly) the angle needed to rotate so that the center of the target was on the center of the camera’s vision.
The calculation was:
arctan([Distance of center target to center vision] / [Constant])
The constant is just a value that I found through experimentation (around 300, may be different for you). This method only works if you have a gyroscope because I then took that calculated angle and plugged it into a PID loop to rotate the robot based on a gyro reading.
I had some success with this in autonomous by performing this operation twice.