Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Tools/Actorics/WalkAccelerationRestrictor.cpp

Go to the documentation of this file.
00001 /**
00002 * @file WalkAccelerationRestrictor.cpp
00003 *
00004 * Implementation of class WalkAccelerationRestrictor
00005 *
00006 * @author Martin Lötzsch
00007 */
00008 
00009 #include "WalkAccelerationRestrictor.h"
00010 #include "Platform/SystemCall.h"
00011 
00012 WalkAccelerationRestrictor::WalkAccelerationRestrictor(MotionRequest& motionRequest)
00013 : mr(motionRequest)
00014 {
00015 }
00016 
00017 void WalkAccelerationRestrictor::saveLastWalkParameters()
00018 {
00019   if (mr.motionType != MotionRequest::walk)
00020   {
00021     lastTranslationX = 0;
00022     lastTranslationY = 0;
00023     lastRotation = 0;
00024   }
00025   else
00026   {
00027     lastTranslationX = mr.walkRequest.walkParams.translation.x;
00028     lastTranslationY = mr.walkRequest.walkParams.translation.y;
00029     lastRotation = mr.walkRequest.walkParams.rotation;
00030   }
00031 }
00032 
00033 void WalkAccelerationRestrictor::restrictAccelerations(double maxTranslationXAcceleration,
00034                                                        double maxTranslationYAcceleration,
00035                                                        double maxRotationAcceleration)
00036 {
00037   unsigned long currentTime = SystemCall::getCurrentSystemTime();
00038   if (timeOfLastExecution == 0 || timeOfLastExecution > currentTime + 250)
00039     timeOfLastExecution = currentTime - 50;
00040   unsigned long timeSinceLastExecution = currentTime - timeOfLastExecution;
00041   if (timeSinceLastExecution > 1000) timeSinceLastExecution = 1000;
00042 
00043   double maximumTranslationXChange = 
00044     maxTranslationXAcceleration * timeSinceLastExecution / 1000;
00045 
00046   double maximumTranslationYChange = 
00047     maxTranslationYAcceleration * timeSinceLastExecution / 1000;
00048 
00049   double vMaximumRotationChange =
00050     maxRotationAcceleration * timeSinceLastExecution / 1000;
00051 
00052   double maximumRotationChange;
00053   maximumRotationChange = fromDegrees(vMaximumRotationChange);
00054 
00055   if (mr.walkRequest.walkParams.translation.x - lastTranslationX > maximumTranslationXChange)
00056     mr.walkRequest.walkParams.translation.x = lastTranslationX + maximumTranslationXChange;
00057 
00058   if (mr.walkRequest.walkParams.translation.x - lastTranslationX < -1 * maximumTranslationXChange)
00059     mr.walkRequest.walkParams.translation.x = lastTranslationX - maximumTranslationXChange;
00060 
00061   if (mr.walkRequest.walkParams.translation.y - lastTranslationY > maximumTranslationYChange)
00062     mr.walkRequest.walkParams.translation.y = lastTranslationY + maximumTranslationYChange;
00063 
00064   if (mr.walkRequest.walkParams.translation.y - lastTranslationY < -1 * maximumTranslationYChange)
00065     mr.walkRequest.walkParams.translation.y = lastTranslationY - maximumTranslationYChange;
00066 
00067   if (mr.walkRequest.walkParams.rotation - lastRotation > maximumRotationChange)
00068     mr.walkRequest.walkParams.rotation = lastRotation + maximumRotationChange;
00069 
00070   if (mr.walkRequest.walkParams.rotation - lastRotation < -1 * maximumRotationChange)
00071     mr.walkRequest.walkParams.rotation = lastRotation - maximumRotationChange;
00072 
00073   timeOfLastExecution = SystemCall::getCurrentSystemTime();
00074 }
00075 
00076 
00077 /*
00078 * Change Log:
00079 * 
00080 * $Log: WalkAccelerationRestrictor.cpp,v $
00081 * Revision 1.2  2004/06/02 17:18:24  spranger
00082 * MotionRequest cleanup
00083 *
00084 * Revision 1.1.1.1  2004/05/22 17:36:01  cvsadm
00085 * created new repository GT2004_WM
00086 *
00087 * Revision 1.1  2003/10/07 10:13:21  cvsadm
00088 * Created GT2004 (M.J.)
00089 *
00090 * Revision 1.1  2003/09/26 11:40:40  juengel
00091 * - sorted tools
00092 * - clean-up in DataTypes
00093 *
00094 * Revision 1.1.1.1  2003/07/02 09:40:28  cvsadm
00095 * created new repository for the competitions in Padova from the 
00096 * tamara CVS (Tuesday 2:00 pm)
00097 *
00098 * removed unused solutions
00099 *
00100 * Revision 1.1  2003/06/04 00:43:45  loetzsch
00101 * put the GT2003WalkAccelerationRestrictor into two extra files in /Src/Tools
00102 *
00103 */
00104 

Generated on Thu Sep 23 19:57:37 2004 for GT2004 by doxygen 1.3.6