From da9860f9a414d8ab403496ac74a51afc5ad3e48b Mon Sep 17 00:00:00 2001 From: sicarius Date: Sun, 18 Feb 2007 17:57:03 +0000 Subject: [PATCH] +++ Additional Codework --- Information/Hardware/Portbelegung.ods | Bin 14493 -> 14582 bytes source/Concept/Framework/RoboCode.aps | 2 +- source/Concept/Framework/default/Makefile | 7 +- source/Concept/Framework/main.c | 53 +++- .../Framework/modules/executor/navigator.c | 231 ++++++++++++------ .../Framework/modules/executor/navigator.h | 14 +- source/Concept/Framework/tools.h | 9 + 7 files changed, 222 insertions(+), 94 deletions(-) diff --git a/Information/Hardware/Portbelegung.ods b/Information/Hardware/Portbelegung.ods index 331cb2932b6e54a1a95c06b58b09e58d591c4398..13e4baeddf2b7be8e4225e9078d81671dd6513a3 100644 GIT binary patch delta 11171 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 15:16:4617-Feb-2007 21:48:40241016-Feb-2007 15:16:4644, 12, 0, 462AVR GCCdefault\RoboCode.elfY:\Concept\Framework\falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31000modules\io_module.catmega128io.cmain.crobot.ctools.cmodules\input\distance_sensor.cmodules\input\ir_sensor.cmodules\input\keyboard.cmodules\input\mouse_sensor.cmodules\input\sensor.cmodules\interpreter\position_tracker.cmodules\output\display.cmodules\output\dribbler.cmodules\output\engine.cmodules\output\kicker.cmodules\output\led.cmodules\interpreter\ball_tracker.cmodules\executor\navigator.cstdafx.htools.hatmega128io.hdefines.hrobot.hmodules\input\distance_sensor.hmodules\input\ir_sensor.hmodules\input\keyboard.hmodules\input\mouse_sensor.hmodules\input\sensor.hmodules\output\display.hmodules\output\dribbler.hmodules\output\engine.hmodules\output\kicker.hmodules\output\led.hmodules\interpreter\position_tracker.hmodules\io_module.hmodules\interpreter\ball_tracker.hmodules\executor\navigator.hdefaultNOatmega128100RoboCode.elfdefault\1modules\modules\executor\modules\input\modules\interpreter\modules\logic\modules\output\-Wall -gdwarf-2 -O3 -fsigned-char default0C:\WinAVR\bin\avr-g++.exeC:\WinAVR\utils\bin\make.exeY:\Concept\Framework\stdafx.hY:\Concept\Framework\tools.hY:\Concept\Framework\atmega128io.hY:\Concept\Framework\defines.hY:\Concept\Framework\robot.hY:\Concept\Framework\modules\input\distance_sensor.hY:\Concept\Framework\modules\input\ir_sensor.hY:\Concept\Framework\modules\input\keyboard.hY:\Concept\Framework\modules\input\mouse_sensor.hY:\Concept\Framework\modules\input\sensor.hY:\Concept\Framework\modules\output\display.hY:\Concept\Framework\modules\output\dribbler.hY:\Concept\Framework\modules\output\engine.hY:\Concept\Framework\modules\output\kicker.hY:\Concept\Framework\modules\output\led.hY:\Concept\Framework\modules\interpreter\position_tracker.hY:\Concept\Framework\modules\io_module.hY:\Concept\Framework\modules\interpreter\ball_tracker.hY:\Concept\Framework\modules\executor\navigator.hY:\Concept\Framework\modules\io_module.cY:\Concept\Framework\atmega128io.cY:\Concept\Framework\main.cY:\Concept\Framework\robot.cY:\Concept\Framework\tools.cY:\Concept\Framework\modules\input\distance_sensor.cY:\Concept\Framework\modules\input\ir_sensor.cY:\Concept\Framework\modules\input\keyboard.cY:\Concept\Framework\modules\input\mouse_sensor.cY:\Concept\Framework\modules\input\sensor.cY:\Concept\Framework\modules\interpreter\position_tracker.cY:\Concept\Framework\modules\output\display.cY:\Concept\Framework\modules\output\dribbler.cY:\Concept\Framework\modules\output\engine.cY:\Concept\Framework\modules\output\kicker.cY:\Concept\Framework\modules\output\led.cY:\Concept\Framework\modules\interpreter\ball_tracker.cY:\Concept\Framework\modules\executor\navigator.c00000stdafx.h100001defines.h100002robot.h100003robot.cpp100004atmega128io.h100005main.cpp100006tools.cpp100007tools.h100008atmega128io.cpp100009modules\interpreter\position_tracker.cpp100010modules\interpreter\position_tracker.h100011modules\io_module.h100012modules\output\display.h100013modules\input\ir_sensor.h100014modules\output\engine.h100015modules\input\sensor.h100016modules\input\keyboard.h100017modules\io_module.c100018robot.c100019modules\input\ir_sensor.c100020modules\output\dribbler.h100021modules\output\kicker.h100022modules\output\led.h100023modules\input\distance_sensor.h100024modules\input\mouse_sensor.h100025modules\input\sensor.c100026main.c100027modules\interpreter\ball_tracker.h100028modules\interpreter\ball_tracker.c100029modules\interpreter\position_tracker.c100030modules\input\distance_sensor.c100031modules\output\engine.c100032modules\output\dribbler.c100033modules\executor\navigator.h100034modules\executor\navigator.c1310 73 1036 52822 2232650 32233 33250 32479155 1932672 32255 33272 3250145 032694 32277 33294 3252316 032716 32299 33316 3254519 032606 32189 33206 3243597 032650 32233 33250 3247917 032602 32168 33328 326234 1732694 32277 33294 325232 0399 216 1025 5174 0311 100 941 40531 2336 131 966 4366 0358 160 988 46542 16380 189 1010 49417 2402 218 1032 52322 12314 102 944 4073 16336 131 966 43618 9358 160 988 4651 0380 189 1010 49491 34402 218 1032 5230 0314 102 944 40724 13336 131 966 4363 16358 160 988 4653 16380 189 1010 49447 30402 218 1032 523187 20314 102 944 4071 0336 131 966 436125 14358 160 988 46519 25380 189 1010 49467 38402 218 1032 5237 0314 102 944 40727 0336 131 966 4360 0358 160 988 4650 0402 218 1021 52335 15310 72 1025 52778 34Maximized +RoboCode16-Feb-2007 15:16:4618-Feb-2007 18:45:02241016-Feb-2007 15:16:4644, 12, 0, 462AVR GCCdefault\RoboCode.elfY:\Concept\Framework\falseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31000modules\io_module.catmega128io.cmain.crobot.ctools.cmodules\input\distance_sensor.cmodules\input\ir_sensor.cmodules\input\keyboard.cmodules\input\mouse_sensor.cmodules\input\sensor.cmodules\interpreter\position_tracker.cmodules\output\display.cmodules\output\dribbler.cmodules\output\engine.cmodules\output\kicker.cmodules\output\led.cmodules\interpreter\ball_tracker.cmodules\executor\navigator.cstdafx.htools.hatmega128io.hdefines.hrobot.hmodules\input\distance_sensor.hmodules\input\ir_sensor.hmodules\input\keyboard.hmodules\input\mouse_sensor.hmodules\input\sensor.hmodules\output\display.hmodules\output\dribbler.hmodules\output\engine.hmodules\output\kicker.hmodules\output\led.hmodules\interpreter\position_tracker.hmodules\io_module.hmodules\interpreter\ball_tracker.hmodules\executor\navigator.hdefaultNOatmega128100RoboCode.elfdefault\0modules\modules\executor\modules\input\modules\interpreter\modules\logic\modules\output\libm.a-Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-char -lm default0C:\WinAVR\bin\avr-g++.exeC:\WinAVR\utils\bin\make.exeY:\Concept\Framework\stdafx.hY:\Concept\Framework\tools.hY:\Concept\Framework\atmega128io.hY:\Concept\Framework\defines.hY:\Concept\Framework\robot.hY:\Concept\Framework\modules\input\distance_sensor.hY:\Concept\Framework\modules\input\ir_sensor.hY:\Concept\Framework\modules\input\keyboard.hY:\Concept\Framework\modules\input\mouse_sensor.hY:\Concept\Framework\modules\input\sensor.hY:\Concept\Framework\modules\output\display.hY:\Concept\Framework\modules\output\dribbler.hY:\Concept\Framework\modules\output\engine.hY:\Concept\Framework\modules\output\kicker.hY:\Concept\Framework\modules\output\led.hY:\Concept\Framework\modules\interpreter\position_tracker.hY:\Concept\Framework\modules\io_module.hY:\Concept\Framework\modules\interpreter\ball_tracker.hY:\Concept\Framework\modules\executor\navigator.hY:\Concept\Framework\modules\io_module.cY:\Concept\Framework\atmega128io.cY:\Concept\Framework\main.cY:\Concept\Framework\robot.cY:\Concept\Framework\tools.cY:\Concept\Framework\modules\input\distance_sensor.cY:\Concept\Framework\modules\input\ir_sensor.cY:\Concept\Framework\modules\input\keyboard.cY:\Concept\Framework\modules\input\mouse_sensor.cY:\Concept\Framework\modules\input\sensor.cY:\Concept\Framework\modules\interpreter\position_tracker.cY:\Concept\Framework\modules\output\display.cY:\Concept\Framework\modules\output\dribbler.cY:\Concept\Framework\modules\output\engine.cY:\Concept\Framework\modules\output\kicker.cY:\Concept\Framework\modules\output\led.cY:\Concept\Framework\modules\interpreter\ball_tracker.cY:\Concept\Framework\modules\executor\navigator.c00000stdafx.h100001defines.h100002robot.h100003atmega128io.h100004tools.h100005modules\interpreter\position_tracker.h100006modules\io_module.h100007modules\output\display.h100008modules\input\ir_sensor.h100009modules\output\engine.h100010modules\input\sensor.h100011modules\input\keyboard.h100012modules\io_module.c100013robot.c100014modules\input\ir_sensor.c100015modules\output\dribbler.h100016modules\output\kicker.h100017modules\output\led.h100018modules\input\distance_sensor.h100019modules\input\mouse_sensor.h100020modules\input\sensor.c100021main.c100022modules\interpreter\ball_tracker.h100023modules\interpreter\ball_tracker.c100024modules\interpreter\position_tracker.c100025modules\input\distance_sensor.c100026modules\output\engine.c100027modules\output\dribbler.c100028modules\executor\navigator.h100029modules\executor\navigator.c1299 73 1025 5546 033064 32865 33664 33111155 033064 32865 33664 3311145 033064 32865 33664 3311116 033064 32865 33664 3311111 033064 32865 33664 331115 032293 32095 33019 325508 033064 32865 33790 33320102 033064 32865 33664 331112 032390 32237 33016 3253855 032302 32121 32932 3242627 032327 32152 32957 324576 032349 32181 32979 324861 032371 32210 33001 3251517 032393 32239 33023 325449 032305 32123 32935 324283 032327 32152 32957 3245718 032349 32181 32979 324861 032371 32210 33001 3251571 032393 32239 33023 3254416 032305 32123 32935 324281 0299 72 1025 527177 4Maximized32349 32181 32979 324863 0293 68 1019 52352 032393 32239 33023 325447 032305 32123 32935 324281 032327 32152 32957 324571 032349 32181 32979 324861 032371 32210 33001 325151 032393 32239 33023 32544241 3 diff --git a/source/Concept/Framework/default/Makefile b/source/Concept/Framework/default/Makefile index d0fbfb0..fc917c5 100644 --- a/source/Concept/Framework/default/Makefile +++ b/source/Concept/Framework/default/Makefile @@ -13,7 +13,7 @@ COMMON = -mmcu=$(MCU) ## Compile options common for all C compilation units. CFLAGS = $(COMMON) -CFLAGS += -Wall -gdwarf-2 -O3 -fsigned-char +CFLAGS += -Wall -gdwarf-2 -DF_CPU=16000000ULUL -O3 -fsigned-char CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d ## Assembly specific flags @@ -22,7 +22,7 @@ ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 ## Linker flags LDFLAGS = $(COMMON) -LDFLAGS += +LDFLAGS += -lm ## Intel Hex file production flags @@ -36,6 +36,9 @@ HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 ## Include Directories INCLUDES = -I"Y:\Concept\Framework\modules" -I"Y:\Concept\Framework\modules\executor" -I"Y:\Concept\Framework\modules\input" -I"Y:\Concept\Framework\modules\interpreter" -I"Y:\Concept\Framework\modules\logic" -I"Y:\Concept\Framework\modules\output" +## Libraries +LIBS = -lm + ## Objects that must be built in order to link OBJECTS = io_module.o atmega128io.o main.o robot.o tools.o distance_sensor.o ir_sensor.o keyboard.o mouse_sensor.o sensor.o position_tracker.o display.o dribbler.o engine.o kicker.o led.o ball_tracker.o navigator.o diff --git a/source/Concept/Framework/main.c b/source/Concept/Framework/main.c index fa6d718..7822933 100755 --- a/source/Concept/Framework/main.c +++ b/source/Concept/Framework/main.c @@ -132,13 +132,54 @@ int main() uint16 value = 0; int8 value2 = 0; Display* ourDisplay = localRobot->GetModule(IO_DISPLAY_MAIN); + Keyboard* ourKeyboard = localRobot->GetModule(IO_KEYBOARD_MAIN); uint32 i = 1; - Ball_Tracker* ourBallTracker = localRobot->GetModule(IO_BALL_TRACKER_MAIN); + Navigator* ourNavigator = localRobot->GetModule(IO_NAVIGATOR_MAIN); + float rotation = 0; + + ourDisplay->Print("Starting...", 1, 1); //Run while(true) { - msleep(500); + uint8 someInput = ourKeyboard->GetInput(); + switch(someInput) + { + case 1: + ourNavigator->Drive(225.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 2: + ourNavigator->Drive(180.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 3: + ourNavigator->Drive(135.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 4: + ourNavigator->Drive(270.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 5: + ourNavigator->Stop(); + break; + case 6: + ourNavigator->Drive(90.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 7: + ourNavigator->Drive(315.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 8: + ourNavigator->Drive(0.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 9: + ourNavigator->Drive(45.0f * PI / 180.0f, rotation, 200, rotation); + break; + case 10: + rotation -= 10; + break; + case 12: + rotation += 10; + break; + } + msleep(50);/* ourDisplay->Clear(); ourDisplay->Print(i++); ourSensor = localRobot->GetModule(IO_SENSOR_IR_0_DEG); @@ -172,15 +213,11 @@ int main() ourSensor = localRobot->GetModule(IO_SENSOR_IR_330_DEG); value = ourSensor->GetIRIntensity(); ourDisplay->Print(value); - ourDisplay->Print(";"); - value2 = (localRobot->GetModule(IO_SENSOR_MOUSE_LEFT))->GetXMovement(); - ourDisplay->Print(value2, 10, 4); - value2 = (localRobot->GetModule(IO_SENSOR_MOUSE_LEFT))->GetYMovement(); - ourDisplay->Print(value2, 15, 4); + ourDisplay->Print(";");*/ localRobot->Update(); - ourDisplay->PrintFloat(ourBallTracker->GetBallDirection(), 1, 4); + //ourDisplay->PrintFloat(ourBallTracker->GetBallDirection(), 1, 4); } //Cleanup diff --git a/source/Concept/Framework/modules/executor/navigator.c b/source/Concept/Framework/modules/executor/navigator.c index 459d4c1..691b1d0 100755 --- a/source/Concept/Framework/modules/executor/navigator.c +++ b/source/Concept/Framework/modules/executor/navigator.c @@ -7,7 +7,7 @@ void Navigator::Stop() this->targetAngle = -1.0f; this->targetX = -1.0f; this->targetY = -1.0f; - this->speed = 0; + this->robotSpeed = 0; this->rotationSpeed = 0; for(uint8 i = IO_ENGINE_START; i < IO_ENGINE_END; i++) @@ -20,12 +20,12 @@ void Navigator::Stop() //----------------------------------------------------------------------------- void Navigator::Rotate(float rotationSpeed) { - this->rotationSpeed = rotationSpeed; + this->rotationSpeed = min(rotationSpeed, 255.0f);; this->direction = -1.0f; this->targetAngle = -1.0f; this->targetX = -1.0f; this->targetY = -1.0f; - this->speed = 0; + this->robotSpeed = 0; for(uint8 i = IO_ENGINE_START; i < IO_ENGINE_END; i++) { @@ -34,6 +34,66 @@ void Navigator::Rotate(float rotationSpeed) } } +//----------------------------------------------------------------------------- +void Navigator::Drive(float newDirection, float newAngle, float newSpeed, float rotationSpeed) +{ + this->rotationSpeed = min(rotationSpeed, 255.0f); + this->direction = newDirection; + this->targetAngle = newAngle; + this->targetX = -1.0f; + this->targetY = -1.0f; + this->robotSpeed = newSpeed; + + if(targetAngle - (parent->GetModule(IO_POSITION_TRACKER_MAIN))->GetOrientation() > PI) + { + if(rotationSpeed > 0) + { + rotationSpeed = -rotationSpeed; + } + } + else + { + if(rotationSpeed < 0) + { + rotationSpeed = -rotationSpeed; + } + } + + Update(); +} + +//----------------------------------------------------------------------------- +void Navigator::DriveTo(float newX, float newY, float newAngle, float newSpeed, float rotationSpeed) +{ + if(newX < 0 || newY < 0) return; + + Position_Tracker* locationeer = parent->GetModule(IO_POSITION_TRACKER_MAIN); + + this->rotationSpeed = min(rotationSpeed, 255.0f); + this->targetX = newX; + this->targetY = newY; + this->direction = direction2d(locationeer->GetPositionX(), locationeer->GetPositionY(), targetX, targetY);; + this->targetAngle = newAngle; + this->robotSpeed = newSpeed; + + if(targetAngle - locationeer->GetOrientation() > PI) + { + if(rotationSpeed > 0) + { + rotationSpeed = -rotationSpeed; + } + } + else + { + if(rotationSpeed < 0) + { + rotationSpeed = -rotationSpeed; + } + } + + Update(); +} + //----------------------------------------------------------------------------- void Navigator::Update() { @@ -103,97 +163,110 @@ void Navigator::Update() //Calculate directional/rotational engine speed if(hasDistanceToDrive) { + float relativeDirection = this->direction - locationeer->GetOrientation(); - - float maxRobotSpeed = 255.0f * sqrt(2) / 2.0f; - - if(speed > maxRobotSpeed) + if(targetX >= 0 && targetY >= 0) { - speed = maxRobotSpeed; + float directionToTarget = direction2d(locationeer->GetPositionX(), locationeer->GetPositionY(), targetX, targetY); + relativeDirection = directionToTarget - locationeer->GetOrientation(); } - maxMotorSpeed = speed / (sqrt(2) / 2); + float xDrive = cos(relativeDirection); + float yDrive = sin(relativeDirection); + float vLeft = (-yDrive + sqrt(3) * xDrive) / 2.0f; + float vBack = yDrive; + float vRight = (-yDrive - sqrt(3) * xDrive)/2; + float speedCorrection = 1.0f; - relAngel = direction - orientation + float maxEngineSpeed = 255.0f; + float minEngineSpeed = -255.0f; + + float maxSingleSpeed = max(max(vLeft, vBack), vRight); + + float calcSpeed = sqrt(vLeft * vLeft - vLeft * vRight + vRight * vRight + + vBack * (vBack + vLeft + vRight)); + + if(calcSpeed != 1.0f) + { + speedCorrection = 1.0f / calcSpeed; + } + + float maxOverallSpeed = robotSpeed * maxSingleSpeed * speedCorrection; + if(maxOverallSpeed > maxEngineSpeed) + { + robotSpeed = maxEngineSpeed / (maxSingleSpeed * speedCorrection); + } - robotSpeed = sin(45) * maxMotorSpeed - maxMotorSpeed = robotSpeed / sin(45) - if(relAngel > 45) - { - sin(relAngel) * (speed / sin(45)) * sin(relAngel + 45); + vLeft = vLeft * this->robotSpeed * speedCorrection; + vBack = vBack * this->robotSpeed * speedCorrection; + vRight = vRight * this->robotSpeed * speedCorrection; - back = speed / sin(relAngel); - } - else + maxSingleSpeed = max(max(vLeft, vBack), vRight); + float minSingleSpeed = min(min(vLeft, vBack), vRight); + + if(hasOrientationToAdjust) { - + if(this->rotationSpeed > 0) + { + if(maxEngineSpeed - maxSingleSpeed < this->rotationSpeed) + { + vLeft += maxEngineSpeed - maxSingleSpeed; + vBack += maxEngineSpeed - maxSingleSpeed; + vRight += maxEngineSpeed - maxSingleSpeed; + } + else + { + vLeft += this->rotationSpeed; + vBack += this->rotationSpeed; + vRight += this->rotationSpeed; + } + } + else + { + if((minEngineSpeed - minSingleSpeed) < this->rotationSpeed) + { + vLeft -= minEngineSpeed - minSingleSpeed; + vBack -= minEngineSpeed - minSingleSpeed; + vRight -= minEngineSpeed - minSingleSpeed; + } + else + { + vLeft -= this->rotationSpeed; + vBack -= this->rotationSpeed; + vRight -= this->rotationSpeed; + } + } } - left = - back = sin(relAngel) * speed - - - direction = 0: - orientation = 0: - left = speed - right = -speed - back = 0 - - direction = 0: - orientation = 90: - left = speed - right = speed - back = (sinVcos)(45) * speed - - direction = 0: - orientation = 45: - left = speed - right = 0 - back = -speed - - direction = 0: - orientation = 180: - left = -speed - right = speed - back = 0 - + Engine* curEngine = parent->GetModule(IO_ENGINE_DRIVE_LEFT); + curEngine->SetSpeed(vLeft); + curEngine->SetEnabled(true); + curEngine = parent->GetModule(IO_ENGINE_DRIVE_BACK); + curEngine->SetSpeed(vBack); + curEngine->SetEnabled(true); + curEngine = parent->GetModule(IO_ENGINE_DRIVE_RIGHT); + curEngine->SetSpeed(vRight); + curEngine->SetEnabled(true); + curEngine = NULL; } - else if(!hasOrientationToAdjust) + else if(hasOrientationToAdjust) + { + Engine* curEngine = parent->GetModule(IO_ENGINE_DRIVE_LEFT); + curEngine->SetSpeed(this->rotationSpeed); + curEngine->SetEnabled(true); + curEngine = parent->GetModule(IO_ENGINE_DRIVE_BACK); + curEngine->SetSpeed(this->rotationSpeed); + curEngine->SetEnabled(true); + curEngine = parent->GetModule(IO_ENGINE_DRIVE_RIGHT); + curEngine->SetSpeed(this->rotationSpeed); + curEngine->SetEnabled(true); + curEngine = NULL; + } + else { Stop(); } - else - { - } } - -// Aktualieren ohne Parameter -/*void Navigator::Update() { - // Richtung in x und y-Kompontente zerlegen - double y = cos((double)direction*0.01745); // richtung ist winkel - double x = sin((double)direction*0.01745); - - // Abweichung der Ausrichtung ermitteln(als winkel) - int w = sensor.GetAusrichtung() - ausrichtung; - - // Stärke der einzelnen Motoren berechnen - double v0 = (-x+sqrt(3)*y)/2; - double v1 = x; - double v2 = (-x-sqrt(3)*y)/2; - - // Ausgerechnete Stärke an die Motoren übergeben - board.motor(0,(int)((double)v0*speed +w)); - board.motor(1,(int)((double)v1*speed +w)); - board.motor(2,(int)((double)v2*speed +w)); -} - -// Aktualieren mit allen Parametern -void Navigator::Drive(float newDirection, float newAngle, float newSpeed) { - SetDirection(newDirection); - SetAngle(newAngle); - SetSpeed(newSpeed); - Update(); // Und anwenden -}*/ diff --git a/source/Concept/Framework/modules/executor/navigator.h b/source/Concept/Framework/modules/executor/navigator.h index ed8b3c8..8da52f6 100755 --- a/source/Concept/Framework/modules/executor/navigator.h +++ b/source/Concept/Framework/modules/executor/navigator.h @@ -1,6 +1,7 @@ #ifndef _NAVIGATOR_H #define _NAVIGATOR_H +//#include #include "../../stdafx.h" class Navigator : public IO_Module @@ -14,7 +15,7 @@ public: this->targetAngle = -1.0f; this->targetX = -1.0f; this->targetY = -1.0f; - this->speed = 0; + this->robotSpeed = 0; this->rotationSpeed = 0; } @@ -26,7 +27,7 @@ public: this->targetAngle = -1.0f; this->targetX = -1.0f; this->targetY = -1.0f; - this->speed = 0; + this->robotSpeed = 0; this->rotationSpeed = 0; } @@ -35,7 +36,7 @@ protected: float targetAngle; float targetX; float targetY; - float speed; + float robotSpeed; float rotationSpeed; public: @@ -45,9 +46,14 @@ public: void Drive(float newDirection, float newAngle, float newSpeed, float rotationSpeed); - void DriveTo(float newX, float newY, float newAngle); + void DriveTo(float newX, float newY, float newAngle, float newSpeed, float rotationSpeed); void Rotate(float rotationSpeed); + + void SetSpeed(float newSpeed) + { + this->robotSpeed = newSpeed; + } }; #endif diff --git a/source/Concept/Framework/tools.h b/source/Concept/Framework/tools.h index 0ca4dda..ca19993 100644 --- a/source/Concept/Framework/tools.h +++ b/source/Concept/Framework/tools.h @@ -9,6 +9,10 @@ void operator delete(void* p); #endif +#define max(a, b) (((a) > (b)) ? (a) : (b)) +#define min(a, b) (((a) < (b)) ? (a) : (b)) +#define sign(a) (((a) < 0) ? (-1) : (1)) + inline void sleep(int sec) { for (int s=0; s