![]() |
Camera without servos
Hey all,
If I were to mount the camera without servos and just use the drive base to allign the camera to center.... what should i do? I've been looking through the code and I saw that it was checking if the target pixels are within center of the camera view.. I just don't know what i should do to make the bot track without the servos.. please help :( Thanks |
Re: Camera without servos
First you need to find how far the camera is off from target using the same method you would when using the camera servos.
Relevent code: Code:
pan_error = (int)T_Packet_Data.mx - PAN_TARGET_PIXEL_DEFAULT; |
Re: Camera without servos
Do you also mean without a tilt servo? I think its simpler with servos, have the camera parallel to the side of your bot, and just turn until the pan angle on your camera is 0, or within 1 to -1 degrees. Otherwise, the pan error method would work. As for tilt you would have to decide how close you want your bot, if you have your camera tilted at 19-20 degrees, your bot will be centered at around 25 feet from the net. Just put the bot however close you want it to the net, point the camera's tilt at the light, fasten it tight. Then just use the pan error method with the tilt_error instead.
|
Re: Camera without servos
I actually mean without BOTH servos... our mentors dont want them because something could potentially happen :-/ who knows. Any way, im thinking now to run a little loop thats similar to a pid that just compares the error in certain directions, if its towards the right, move the left motor, if its toward the left, move the right motor... hopefully that would work..
Please put some suggestions :) Thanks! |
Re: Camera without servos
Okay, I have something mocked up now.. How does this look??
if (swt_camera) { // If the image is not center, check with the allowable error range if (pan_error > PAN_ALLOWABLE_ERROR_DEFAULT) { // Attempt to turn left pwm_rightDrive_cim = pwm_rightDrive_cim = 200; pwm_leftDrive_cim = pwm_leftDrive_fp = 120; } else if(pan_error < -1 * PAN_ALLOWABLE_ERROR_DEFAULT) { // Attempt to turn right pwm_rightDrive_cim = pwm_rightDrive_cim = 120; pwm_leftDrive_cim = pwm_leftDrive_fp = 200; } else { // Set drive motors to neutral pwm_rightDrive_cim = pwm_rightDrive_cim = 127; pwm_leftDrive_cim = pwm_leftDrive_fp = 127; // Tell the controller that it is now on target :D Tracking_State += STATE_PAN_ON_TARGET; } } Should this work? |
Re: Camera without servos
Oops.. I just realized that we need to set what color to track with Track_color(????????).. What has your team been using for these values? And where should track_color go? Should it be where the switch is turned on? Or is this already pre set? *IM USING THE STREAMLINED VERSION :D*
|
Re: Camera without servos
Quote:
It should track out of the box. And it would send the values to the pwm outs, you would just not have anything connected to those outs. |
Re: Camera without servos
I just commented out the parts where it sent data to the pwm outs so that my code that I wrote earlier today -^ should have the camera control the bot instead of servos.. It sounds risky to me :confused:
|
Re: Camera without servos
Quote:
P = error * gain; Error is the pan_error, gain is the factor at which the motor responds, the higher, the more the motor responds. The problem is as you get close, the error decreases, meaning motor output decreases. Eventually the power level will get low enough that you stop moving. This is called "Steady state error" you can only get so close before the power output is insufficient to move. You can turn up the gain, but that will very likely make it oscillate again. You should look in to PID control, or even PI, if you search around here and on google I'll bet you can find some nice references. Also, if by experimenting you determine you need a minimum PWM value of Z to keep moving, you can do a check that if the error is past the deadband and the PWM is below Z, set it to Z, that's a crude PI, with a fixed I output. That should work but it won't be as precise as PI. Does this reply make any sense? :) |
Re: Camera without servos
I kind of understand it, but how would i impelement it into the code?
|
Re: Camera without servos
Quote:
Although that is probably too complex for your use, it should give you a good idea of how PID loops work and how you can make yours. Good luck and feel free to ask more questions. |
Re: Camera without servos
:-/ I don't really understand the pid code.. It seems a tad bit complex :( I think i might have to hope the bot doesnt over shoot, or i can just move the values by a little bit or make a different if and then loop that compares the values of the pan error and the allowable error that just changes the values of the motors instead of being high speed or low speed..
|
Re: Camera without servos
During user mode, you can just pulse the button that alligns the robot, and have a feedback that shows whether the bot is within the allowable deadband....and thus lessening the overshoot.
|
Re: Camera without servos
So you mean something like this?
Code:
if (swt_camera)Thanks for the help! |
Re: Camera without servos
Quote:
|
Re: Camera without servos
Quote:
|
Re: Camera without servos
1 Attachment(s)
Here is a more complex PID version. I won't claim its perfect, but it works fairly well. This uses integer math, and it divides by the constants to make them less than 1.0. The "JERK" part is a kludge that we needed to get past the problem of too much friction in out drive train.
|
Re: Camera without servos
I've just posted a whitepaper on PID Control Theory that might be of some help to you and others, it can be found here:
http://www.chiefdelphi.com/media/papers/1823 Good luck! |
| All times are GMT -5. The time now is 21:13. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi