⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 movementtricks.h

📁 该文件是包含了机器人足球比赛中的整个系统的代码
💻 H
字号:
#ifndef MOVEMENTTRICKS_H
#define MOVEMENTTRICKS_H

// Bag of primarily movement tricks

#include "../Common/LocomotionCommand.h"
#include "../Common/HeadCommand.h"
#include "Trick.h"

class MovementTricks {
public :

  class ChaseBall : public Trick {
  public: 
    enum {
      CB_RAM,
      CB_SLAP,
      CB_GRAB,
    };

    ChaseBall() {Init(false, CB_GRAB);}
    ChaseBall(bool _getAroundBall) {Init(_getAroundBall, CB_GRAB);}
    ChaseBall(int _chaseMode) {Init(false,_chaseMode);}
    ChaseBall(bool _getAroundBall, int _chaseMode) {Init(_getAroundBall,_chaseMode);}
    void Init(bool _getAroundBall, int _chaseMode);

    void SetChaseMode(int m);
    int GetChaseMode() { return chaseMode; }

    bool CheckUnderChin7(bool slapping);

    virtual ~ChaseBall();
    virtual int Start();
    virtual int Abort();
    virtual int Continue();
    int Continue210();
    int Continue7();

    virtual bool IsUsingHead();
    virtual char* GetErrorMsg(int);
    virtual char* GetName();

  private :
    double PushBallDownWallHeadingModifier();
    double VeerAroundBallHeadingModifier(long,double);
    double RamBall(int);


    bool CheckStealthDog(double* leftObstacle, double* rightObstacle);
    double StealthDog();
    int previousStealthDirection;
    double previousVeerDirection;

    Utilities utils;
    Trick* headTrick;
    double underChinAngle;

    int chaseMode; // 0 = run into side of ball, 1 = slap, 2 = grab

    bool getAroundBall;
    bool pushBallRightWall;
    bool pushBallLeftWall;
    long lastPushBallDetect;

    double maxWalkAroundDistance;
    double timeBallUnderChin;

    bool GetAroundBallOnWall();

    // This is a 'temp' internal variable that is reset every time Continue() executes
    LocomotionCommand nLC;
  };

  class MoveToPoint : public Trick {
  public: 
    enum {
      MTP_DYNAMIC,
      MTP_FORWARDS,
      MTP_BACKWARDS,
      MTP_MANHATTAN,
      MTP_DYNAMIC_FACE_BALL,
      MTP_DYNAMIC_NO_HEADING
    };
    MoveToPoint(double,double,double, int);
    MoveToPoint(double,double,double, int, bool , double, double, double);
    virtual ~MoveToPoint();
    virtual int Start();
    virtual int Abort();
    virtual int Continue();
    virtual bool IsUsingHead();
    virtual char* GetErrorMsg(int);
    virtual char* GetName();
    void ResetHome(double x_, double y_) {x=x_; y=y_;}
    void SetType(int type_) { lcq_.Clear(); type = type_; }
    int GetType() { return type; }
    void SetRange(double xR_, double yR_, double hR_) { xRange = xR_; yRange = yR_; hRange = hR_; }
    void SetExit(bool exit_) { canExit = exit_; }
    double GetX() {return x;}
    double GetY() {return y;}
    double GetHeading() {return heading;}
    void SetKeeper(bool k) {isKeeper = k;}
    bool GetKeeper() {return isKeeper;}

  private :
    Utilities utils;
    double x;
    double y;
    double heading;
    int type;
    double xRange;
    double yRange;
    double hRange;
    bool isKeeper; 
    bool canExit;  // This will allow 
  };

  class SearchForBall : public Trick {
  public:
    SearchForBall(bool _turnRight, double _degreesToTurn);
    SearchForBall(double _degreesToTurn);
    virtual ~SearchForBall();
    virtual int Start();
    virtual int Abort();
    virtual int Continue();
    virtual bool IsUsingHead();
    virtual char* GetErrorMsg(int);
    virtual char* GetName();
  private:
    bool turnRight;
    double degreesTurned;
    double degreesToTurn;
    long startFrame;
    Trick* headTrick;
    Utilities utils;
    int frameDelay;
    long frameDelayStart;
  };

  class CheckLocalisation : public Trick {
  public:
    CheckLocalisation(double _degreesToTurn, int _turnIncrement);
    virtual ~CheckLocalisation();
    virtual int Start();
    virtual int Abort();
    virtual int Continue();
    virtual bool IsUsingHead();
    virtual char* GetErrorMsg(int);
    virtual char* GetName();
  private:
    bool startedHead;
    int turnIncrement;
    bool lookAroundFirst;
    bool turnRight;
    double degreesTurned;
    double degreesToTurn;
    long startFrame;
    Trick* headTrick;
    Utilities utils;
  };

  class ChaseBeacon : public Trick {
  public: 
    ChaseBeacon(VisionObject**); 
    virtual ~ChaseBeacon();
    virtual int Start();
    virtual int Abort();
    virtual int Continue();
    virtual bool IsUsingHead();
    virtual char* GetErrorMsg(int);
    virtual char* GetName();
    void Set(double,double,double,double,double,double,double,double,double,double,double);
  private :
    Utilities utils;
    Trick* headTrick;
    
    double stepFreq,maxForward,maxBack,fsh,ffo,fso,fh,bsh,bfo,bso,bh;
    VisionObject** targetBeaconReference;
    double timeObjectInRange;
  };

  class FaceBeacon : public Trick {
  public:
    FaceBeacon(VisionObject**,bool);
    virtual ~FaceBeacon();
    virtual int Start();
    virtual int Abort();
    virtual int Continue();
    virtual bool IsUsingHead();
    virtual char* GetErrorMsg(int);
    virtual char* GetName();
  private:
    Trick* headTrick;
    VisionObject** targetBeaconReference;
    bool turnRight;
    bool doneNull;
    Utilities utils;
  };
};
#endif // MOVEMENTTRICKS_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -