Society of Robots - Robot Forum
Software => Software => Topic started by: lcab on March 23, 2010, 07:21:29 PM
-
i am trying to write a subroutine for a line follower sensor called tracker 3.0 made by lynx motion. my problems is that i cant get it to go in a straight line if it goes to one side a little bit more then the other. i added a delay to avoid the blind spot but i can't make it go in straight line
this is the code so far
#include "sys/axon.h"
#include "a2d.h"
#include "servos.h"
// Define two motors
SERVO m2a = MAKE_SERVO(FALSE, E5,1499,453); //left side
SERVO m1a = MAKE_SERVO(TRUE, E4,1500,503); //right side
SERVO arm = MAKE_SERVO(TRUE, H4,1500,500); //gripper arm
// Create the list - remember to place an & at the start of each servo name
SERVO_LIST servos[] = {&m1a,&m2a,&arm};
// Create a driver for the list of servos
SERVO_DRIVER bank1 = MAKE_SERVO_DRIVER(servos);
// Global variable that indicates the current state
uint8_t state;
// Initialise the servos
void appInitHardware(void){
servoPWMInit(&bank1);
}
TICK_COUNT appInitSoftware(TICK_COUNT loopStart){
return 0;
}
TICK_COUNT appControl(LOOP_COUNT loopCount, TICK_COUNT loopStart){
// A3 Left
// A4
-
The LynxMotion Tracker has only 3 sensors on it, meaning the resolution is very poor. Poor resolution leads to robot oscillation, in other words, your robot will have trouble going straight.
Two solutions . . . get more sensors, or . . .
Program your robot to go straight more than it turns.
For example, in pseudocode . . .
if(line is on left)
left_wheel=slow
right_wheel=fast
if(line is on right)
left_wheel=fast
right_wheel=slow
else(line is in center)
left_wheel=right_wheel=fast
Your robot will always go forward, because all wheels are going forward always, but your bot will turn just a little when the line goes off center.