Skip to content

Commit

Permalink
get PerimeterMax while STATE_PERI_FIND only
Browse files Browse the repository at this point in the history
  • Loading branch information
Holoratte committed Jun 5, 2017
1 parent 401a5d8 commit 548941f
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
2 changes: 1 addition & 1 deletion code/ardumower/motor.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ void Robot::motorControlPerimeter(){
}
return;
}
perimeterPID.x = 5*((double(perimeterMag)/double(perimeterMagMedian.getHighest())));
perimeterPID.x = 5*((double(perimeterMag)/double(perimeterMagMax)));
if (perimeterInside){
perimeterPID.w = -1;
if (!lastPerimeterTrackInside) perimeterPID.reset();
Expand Down
6 changes: 4 additions & 2 deletions code/ardumower/robot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -387,9 +387,10 @@ void Robot::readSensors(){


if ((perimeterUse) && (millis() >= nextTimePerimeter)){
nextTimePerimeter = millis() + 30; // 50
if (stateCurr == STATE_PERI_TRACK) nextTimePerimeter = millis() + 30; // 50
else nextTimePerimeter = millis() + 50;
perimeterMag = readSensor(SEN_PERIM_LEFT);
perimeterMagMedian.add(abs(perimeterMag));
if (stateCurr == STATE_PERI_FIND)perimeterMagMedian.add(abs(perimeterMag));
if ((perimeter.isInside(0) != perimeterInside)){
perimeterCounter++;
perimeterLastTransitionTime = millis();
Expand Down Expand Up @@ -1168,6 +1169,7 @@ void Robot::setNextState(byte stateNew, byte dir){
}
if (stateNew == STATE_PERI_TRACK){
//motorMowEnable = false; // FIXME: should be an option?
perimeterMagMax = perimeterMagMedian.getHighest()*1.1;
setActuator(ACT_CHGRELAY, 0);
perimeterPID.reset();
//beep(6);
Expand Down
11 changes: 11 additions & 0 deletions code/ardumower/robot.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ enum {
SEN_PERIM_RIGHT_EXTRA, // 0..MAX_PERIMETER
SEN_LAWN_FRONT,
SEN_LAWN_BACK,

SEN_BAT_VOLTAGE, // Volt * 100
SEN_CHG_CURRENT, // Ampere * 100
SEN_CHG_VOLTAGE, // Volt * 100
Expand Down Expand Up @@ -269,6 +270,8 @@ class Robot
int motorRollTimeMin ; // min. roll time (ms)
int motorReverseTime ; // max. reverse time (ms)
long motorForwTimeMax; // max. forward time (ms) / timeout


float motorBiDirSpeedRatio1 ; // bidir mow pattern speed ratio 1
float motorBiDirSpeedRatio2 ; // bidir mow pattern speed ratio 2
bool motorRightSwapDir ; // inverse right motor direction?
Expand All @@ -289,6 +292,7 @@ class Robot
int motorRightSenseCounter ;
unsigned long nextTimeMotorSense ;
unsigned long lastSetMotorSpeedTime;

unsigned long motorLeftZeroTimeout;
unsigned long motorRightZeroTimeout;
boolean rotateLeft;
Expand All @@ -299,6 +303,7 @@ class Robot
float motorMowAccel ; // motor mower acceleration (warning: do not set too high)
int motorMowSpeedMaxPwm ; // motor mower max PWM
float motorMowPowerMax ; // motor mower max power (Watt)

char motorMowModulate ; // motor mower cutter modulation?
int motorMowRPMSet ; // motor mower RPM (only for cutter modulation)
float motorMowSenseScale ; // motor mower sense scale (mA=(ADC-zero)/scale)
Expand Down Expand Up @@ -363,6 +368,7 @@ class Robot
PID perimeterPID ; // perimeter PID controller
int perimeterMag ; // perimeter magnitude
RunningMedian perimeterMagMedian = RunningMedian(300);
int perimeterMagMax; //maximum perimeter magnitude detected while perimeter find
boolean lastPerimeterTrackInside; // was inside or outside
boolean perimeterInside ; // is inside perimeter?
unsigned long perimeterTriggerTime; // time to trigger perimeter transition (timeout)
Expand Down Expand Up @@ -399,6 +405,9 @@ class Robot
unsigned int sonarDistCenter ;
unsigned int sonarDistRight ;
unsigned int sonarDistLeft ;



unsigned int sonarDistCounter ;
unsigned int tempSonarDistCounter ;
unsigned long sonarObstacleTimeout ;
Expand Down Expand Up @@ -426,11 +435,13 @@ class Robot
float startChargingIfBelow; // start charging if battery Voltage is below
unsigned long chargingTimeout; // safety timer for charging
int batADC;

float chgSenseZero ; // charge current sense zero point
float chgFactor ; // charge current conversion factor
float chgSense ; // mV/A empfindlichkeit des Ladestromsensors in mV/A (Für ACS712 5A = 185)
char chgChange ; // messwertumkehr von - nach + 1oder 0
float batVoltage ; // battery voltage (Volt)

byte chgSelection ; // Senor Auswahl
float batRefFactor ;
float batCapacity ; // battery capacity (mAh)
Expand Down

0 comments on commit 548941f

Please sign in to comment.