Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   Camera for turning (http://www.chiefdelphi.com/forums/showthread.php?t=52769)

Ianuser 16-02-2007 21:32

Re: Camera for turning
 
Please help me, I can't figure out how to use the camera to actually MOVE the robot. I have the camera code working along with the camera itself, but how do I move pwm01 (left drive wheel) and pwm02 (right drive wheel) individually according to the pan of the camera? I have no idea where to begin with this code. (I just got the code to work for the camera and I've been trying for weeks. Now I only have 2 days, Please help if you can)



Code:

               
int I_Want_To_Search = 1;
int pwm01_On_Off = 1;
int pwm02_On_Off = 1;
int pwm03_On_Off = 1; //these are all at the top of user_routines.c Everything else is in Processfrom master UP (except TARGETRANGE[] and FIND_DISTANCE())



                          if(I_Want_To_Search == 1)
        {
                Servo_Track();
        }


                          if((Get_Tracking_State() == CAMERA_ON_TARGET) || (Get_Tracking_State() == TARGET_IN_VIEW))
                {
                        pwm01_On_Off = 0;
                        pwm02_On_Off = 0;
                        pwm01 = 230; //Desired Forward Velocity
                        pwm02 = 230;
                        Switch3_LED = 1;
                       
                        //printf("2"); //these statements are just to see if it worked
                }
                else
                {
                        Switch3_LED = 0;
                        pwm01_On_Off = 1;
                        pwm02_On_Off = 1;
                        //printf("4"); //these statements are just to see if it worked
                }
                /*
                if(Find_Distance() <= 50) //THIS DOESN"T WORK!! WHY NOT?
                {
                        pwm01 = 127;
                        pwm02 = 127;
                        pwm01_On_Off = 1;
                        pwm02_On_Off = 1;
                        I_Want_To_Search = 0; //Stops calling Servo_Track(). THEN CALL ANOTHER THING
                        Switch3_LED = 0;
                        //printf("3"); //these statements are just to see if it worked
                }
                */

                if(p1_y > 129 || p2_y > 129)
                {
                        pwm01_On_Off = 1;
                        pwm02_On_Off = 1;
                }
                else if(p1_y < 125 || p2_y < 125)
                {
                        pwm01_On_Off = 1;
                        pwm02_On_Off = 1;
                }The Find_Distance() function is this:

Code:

unsigned int Find_Distance(void)
{       
        return(targetRange[pwm07-144]);
}and target range is this:

Code:

const rom unsigned int targetRange[] =
        {
3355,
1676,
1116,
835,
666,
553,
472,
411,
363,
325, //place 10
293,
267,
244,
225,
208,
193,
179,
167,
156,
146, //place 20
137,
128,
121,
113,
107,
100,
94,
89,
83,
78, //place 30
73,
68,
64,
60,
56,
51,
48,
44,
40,
36, //place 40
33,
29,
26,
23,
19,
16,
13,
10,
6,
3, //place 50
0, //place 51
};

So I would like to know why my distance thing isn't working (Max tilt is 194 and min is 94, center at 144. My degree per pwm step was 1.7647 (50/90? is that right?) Then I multiplied that by the pwm index up to 51 and found the radian value and plugged it into TAN(x) and then did 116-12.625(my height)/tan(the radian value from before)) Assuming that's correct, what's wrong with the rest of the code? It's not working properly. Camera looks away from the light when I comment in the Find_Distance code (less than 50 or whatever). ALSO, how do I program the robot to move forward???

ebowla 17-02-2007 12:48

Re: Camera for turning
 
it may be a little off, but to fix the motors going the wrong way, you can either switch up some wires (not sure which though, im only programming) or put

pwmXX=255-pwmXX;

putting the number of the reversed motors in the "XX" at the end of the code. Then you can put all of your code as 255 forward and 0 back. Instead of the odd backwards motor.

Ianuser 17-02-2007 13:44

Re: Camera for turning
 
Ok, I got that. But about making the bot go in the direction of the light, would this work?
Code:

if((Get_Tracking_State() == CAMERA_ON_TARGET) || (Get_Tracking_State() == TARGET_IN_VIEW))
                {
                        pwm01_On_Off = 0;
                        pwm02_On_Off = 0;
                        Switch3_LED = 1;
                                      if(PAN_SERVO > PAN_CENTER_PWM_DEFAULT)
                                      {
                                          pwm01 = 180;

                                      }
                                      else if(PAN_SERVO < PAN_CENTER_PWM_DEFAULT)
                                      {
                                          pwm02 = 180;
                                      }
                                      else
                                      {
                                          pwm01 = 180;
                                          pwm02 = 180;
                                      }                   
                          }

(pwm01_On_Off and pwm02_On_Off are just to map the joystick to the pwm. if 1, then joystick works, if its not 1 (usually 0), then joysticsk dont work and the motors can be set to specific speeds.)

gnirts 17-02-2007 21:00

Re: Camera for turning
 
Quote:

Originally Posted by Ianuser (Post 580166)
Ok, I got that. But about making the bot go in the direction of the light, would this work?

Yes, this looks right to me. Note that you will want to set pwm01 and pwm02 to 127 when they aren't supposed to be moving or else they will stay at their old value (and thus always be 180). Also, the
Code:

else
{
    pwm01 = 180;
    pwm02 = 180;
}

would probably never happen without at least proportional control (search CD for posts about it, but basically error * a constant = motor speed). Give the code a deadband where it will go straight even if off by a little. Also consider doing a differential turn (where you turn while moving forward by driving one side faster than the other).

Good luck,
Robinson Levin


All times are GMT -5. The time now is 23:53.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi