|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
IR Sensor-tracker.zip
We have a question regarding the IR Sensing system using tracker.zip. We are experiencing no servo motion to find the IR Beacon. Our current set-up is as follows:
Left joystick is in port 1, right joystick in port 2. Our left servo is in PWM 1, right servo in PWM 2. Left motor is in PWM 3 through a Victor 884 Speed Controller, right motor is in PWM 4 through a Victor 884 Speed Controller. Our IR Sensors for left to right go as follows: Left most sensor is in Digital I/O 3, the other left sensor is in Digital In/Out 4, the right sensor is in Digital In/Out 5, and the right most sensor is in Digital In/Out 6. We have read about the robot doing a spin to find the beacon, and our robot seems to move but the servos show no motion. We’ve also read about a beacon type selector switch. Is this something we make???? Little to nothing is known about this switch. We saw it referred to in the tracker.c file. |
|
#2
|
||||
|
||||
|
Re: IR Sensor-tracker.zip
Do you have the 7.2v backup battery connected to the robot controller? The servos won't operate without it.
|
|
#3
|
|||||
|
|||||
|
Re: IR Sensor-tracker.zip
Quote:
Dave's note on the 7.2v battery sounds like the most likely explanation of your problem. The servos (on PWM01 & 02) should "search" even if the IR sensors aren't connected at all. The beacon switch is something you'll need to have eventually, like the left/right field switch. It might be easier to think of it and implement it as a Blue/Red alliance switch. (There is a way to automate this, but I wouldn't suggest you try it.) For now you can hardcode it to the type-0 beacon on the EDU controller PWM1 output. In tracker.h you'll find the line: Code:
#define DESIRED_BEACON_TYPE rc_dig_in07 // this assumes that rc_dig_in07 is a digital input Code:
#define DESIRED_BEACON_TYPE 0 // hardcode beacon to type-0 (PWM1 on EDU) Last edited by Mark McLeod : 02-02-2004 at 11:52. |
|
#4
|
|||
|
|||
|
Re: IR Sensor-tracker.zip
Quote:
|
|
#5
|
|||
|
|||
|
Re: IR Sensor-tracker.zip
We were able to get the system working great - IR sensors tracking the beacon.
Now the question is, how do we get the tracker code integrated with the default code so that all systems (drive, pneumatics, other motors) can operate simultaneously with IR? Are there certain files from tracker code (*.c, *.h) that need to be placed into the FRCcode to allow them to be compiled and linked? Thanks for everyones help, couldn't have done it without you. ![]() |
|
#6
|
|||||
|
|||||
|
Re: IR Sensor-tracker.zip
Quote:
tracker.c tracker.h Use the routines in the tracker s/w as a guide to changes in the rest of the code. Add in user_routines.c: Code:
#include "receiver.h" #include "tracker.h" Code:
Initialize_Receiver(); /* not required as it's also called by Initialize_Tracker() */ Initialize_Tracker(); Code:
else if (INTCONbits.RBIF) // external interrupts 3 through 6
{
Port_B = PORTB; // remove the "mismatch condition" by reading port b
INTCONbits.RBIF = 0; // clear the interrupt flag
Port_B_Delta = Port_B ^ Old_Port_B; // determine which bits have changed
Old_Port_B = Port_B; // save a copy of port b for next time around
if(Port_B_Delta & 0x10) // did external interrupt 3 change state? - IR sensor 1
{
Int_3_Handler(Port_B & 0x10 ? 1 : 0); // call the interrupt 3 handler (in receiver.c)
}
if(Port_B_Delta & 0x20) // did external interrupt 4 change state? - IR sensor 2
{
Int_4_Handler(Port_B & 0x20 ? 1 : 0); // call the interrupt 4 handler (in receiver.c)
}
if(Port_B_Delta & 0x40) // did external interrupt 5 change state? - IR sensor 3
{
Int_5_Handler(Port_B & 0x40 ? 1 : 0); // call the interrupt 5 handler (in receiver.c)
}
if(Port_B_Delta & 0x80) // did external interrupt 6 change state? - IR sensor 4
{
Int_6_Handler(Port_B & 0x80 ? 1 : 0); // call the interrupt 6 handler (in receiver.c)
}
}
Code:
static unsigned int Old_Clock = 0;
if (Clock > Old_Clock) // stay synchronized to beacon data updates (this is important)
{
Track_Beacon(LEFT); // allow the left beacon tracker state machine to run
Track_Beacon(RIGHT); // allow the right beacon tracker state machine to run
if ((Tracker_Data[left].Status == BOTH_IN_VIEW) &&
(Tracker_Data[right].Status == BOTH_IN_VIEW))
{
// both trackers have an angular solution; calculate beacon vector
// here using the known baseline distance between the trackers and
// angles derived from the two Tracker_Data[].Position variables
// calculate new drive motor PWM values here
}
// finally, update the servo motor positions
LEFT_TRACKER_SERVO = Tracker_Data[left].Position;
RIGHT_TRACKER_SERVO = Tracker_Data[right].Position;
Old_Clock = Clock; // take a snapshot of the clock
}
Last edited by Mark McLeod : 03-02-2004 at 14:31. |
|
#7
|
||||
|
||||
|
Re: IR Sensor-tracker.zip
Quote:
-Kevin |
|
#8
|
|||||
|
|||||
|
Re: IR Sensor-tracker.zip
Quote:
I guess it's hard to #include files you forgot to add in. Thanks Kevin! |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|