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

📄 clodbuster.h

📁 机器人仿真软件
💻 H
字号:
/* *  Player - One Hell of a Robot Server *  Copyright (C) 2000   *     Brian Gerkey, Kasper Stoy, Richard Vaughan, & Andrew Howard *                       * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * *//* * $Id: clodbuster.h,v 1.4.4.1 2006/06/07 16:12:49 gerkey Exp $ * *   the clodbuster device.   there's a thread here that *   actually interacts with grasp board via the serial line.  the other *   "devices" communicate with this thread by putting into and getting *   data out of shared buffers. */#ifndef _CLODBUSTERDEVICE_H#define _CLODBUSTERDEVICE_H#include <pthread.h>#include <sys/time.h>#include <libplayercore/playercore.h>/* data for the clodbuster */#define CLODBUSTER_CYCLETIME_USEC 50000/* Grasp Board Command numbers */#define SYNC 255#define SET_SERVO_THROTTLE 0#define SET_SERVO_FRONTSTEER 1#define SET_SERVO_BACKSTEER 2#define SET_SERVO_PAN 3#define ECHO_SERVO_VALUES 64 // 0x40#define ECHO_MAX_SERVO_LIMITS 65 //0x41#define ECHO_MIN_SERVO_LIMITS 66 //0x42#define ECHO_CEN_SERVO_LIMITS 67 //0x43#define ECHO_ENCODER_COUNTS 112 // 0x70#define ECHO_ENCODER_COUNTS_TS 113 // 0x71#define ECHO_ADC 128 //0x80#define READ_ID 97#define SET_SLEEP_MODE 144 // 0x90#define ECHO_SLEEP_MODE 145 // 0x91#define SLEEP_MODE_ON 1#define SLEEP_MODE_OFF 0#define SERVO_CHANNELS 8// I think this might be useful.. so leaving it in for the time being/* Argument types */#define ARGINT		0x3B	// Positive int (LSB, MSB)#define ARGNINT		0x1B	// Negative int (LSB, MSB)#define ARGSTR		0x2B	// String (Note: 1st byte is length!!)#define CLODBUSTER_CONFIG_BUFFER_SIZE 256#define DEFAULT_CLODBUSTER_PORT "/dev/ttyUSB0" // This has to be USB - serial port.typedef struct clodbuster_encoder_data{   uint32_t time_count;  int32_t left,right;} __attribute__ ((packed)) clodbuster_encoder_data_t;class PIDGains{ private:     float kp, ki, kd, freq, k1, k2, k3;     void findK()	  {	       float T=1.0/freq;	       k1 = kp + .5*T*ki + kd/T;	       k2 = -kp - 2.0*kd/T + .5*ki*T;	       k3 = kd/T;	       printf("Gain constants set to K1 = %f, K2 = %f, K3 = %f\n",k1,k2,k3);	  }; public:     PIDGains(float kp_, float ki_, float kd_, float freq_)	  :kp(kp_), ki(ki_), kd(kd_),freq(freq_)	  {	       findK();	  };     //~PIDGains();     void SetKp(float k)	  {	       kp=k;	       findK();	  };     void SetKi(float k)	  {	       ki=k;	       findK();	  };     void SetKd(float k)	  {	       kd=k;	       findK();	  };     void SetFreq(float f)	  {	       freq=f;	       findK();	  };     float K1(){return(k1);};     float K2(){return(k2);};     float K3(){return(k3);};};class ClodBuster:public Driver {  private:    player_position2d_data_t position_data;    void ResetRawPositions();    clodbuster_encoder_data_t ReadEncoders();    int clodbuster_fd;               // clodbuster device file descriptor        // device used to communicate with GRASP IO Board    char clodbuster_serial_port[MAX_FILENAME_SIZE];        int kp,ki,kd;    // did we initialize the common data segments yet?    bool initdone;    clodbuster_encoder_data_t encoder_offset;    clodbuster_encoder_data_t encoder_measurement;    clodbuster_encoder_data_t old_encoder_measurement;    float EncV, EncOmega, EncVleft, EncVright;    bool direct_command_control;    unsigned char max_limits[SERVO_CHANNELS],center_limits[SERVO_CHANNELS],min_limits[SERVO_CHANNELS];    void GetGraspBoardParams();    // CB geometry parameters    float WheelRadius;    float WheelBase;    float WheelSeparation;    unsigned int CountsPerRev;    float Kenc; // counts --> distance traveled    // control parameters    float LoopFreq;    PIDGains *Kv, *Kw;    void IntegrateEncoders();    void DifferenceEncoders(); protected:    // Max motor speeds    int motor_max_speed;    int motor_max_turnspeed;        // Bound the command velocities    bool use_vel_band;           short speedDemand, turnRateDemand;  bool newmotorspeed, newmotorturn;  public:    ClodBuster( ConfigFile* cf, int section);    virtual ~ClodBuster();    /* the main thread */    virtual void Main();    // Process incoming messages from clients     int ProcessMessage (MessageQueue * resp_queue, player_msghdr * hdr, void * data);    virtual int Setup();    virtual int Shutdown();    unsigned char SetServo(unsigned char chan, int value);    void SetServo(unsigned char chan, unsigned char cmd);    /*    void CMUcamReset();    void CMUcamTrack(int rmin=0, int rmax=0, int gmin=0,                          int gmax=0, int bmin=0, int bmax=0);    void CMUcamStopTracking();    */ // don't want to have this right now.. but maybe eventually.};#endif

⌨️ 快捷键说明

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