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

📄 wbr914.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: wbr914.h,v 1.1.2.3 2006/09/22 23:58:35 gerkey Exp $ * *   the P2OS device.  it's the parent device for all the P2 'sub-devices', *   like gripper, position, sonar, etc.  there's a thread here that *   actually interacts with P2OS via the serial line.  the other *   "devices" communicate with this thread by putting into and getting *   data out of shared buffers. */#ifndef _WBR914_H#define _WBR914_H#include <pthread.h>#include <sys/time.h>#include <libplayercore/playercore.h>#include <replace/replace.h>// Default max speeds#define MOTOR_DEF_MAX_SPEED 0.5#define MOTOR_DEF_MAX_TURNSPEED DTOR(100)#define ACCELERATION_DEFAULT 2#define DECELERATION_DEFAULT 10/* PMD3410 command codes */#define NOOP                0x00#define SETPOS              0x10#define SETVEL              0x11#define UPDATE              0x1A#define GETCMDPOS           0x1D#define GETEVENTSTATUS      0x31#define RESETEVENTSTATUS    0x34#define GETACTUALPOS        0x37#define RESET               0x39#define SETACTUALPOS        0x4D#define GETSAMPLETIME       0x61#define SETPHASECOUNTS      0x75#define SETMOTORCMD         0x77#define SETLIMITSWITCHMODE  0x80#define WRITEDIGITAL        0x82#define READDIGITAL         0x83#define GETVERSION          0x8F#define SETACCEL            0x90#define SETDECEL            0x91#define SETPROFILEMODE      0xA0#define GETACTUALVEL        0xAD#define SETSTOPMODE         0xD0#define SETMOTORMODE        0xDC#define SETOUTPUTMODE       0xE0#define READANALOG          0xEF#define MOTOR_0             ((unsigned char)0x00)#define MOTOR_1             ((unsigned char)0x01)/* Robot configuration */#define LEFT_MOTOR          MOTOR_1#define RIGHT_MOTOR         MOTOR_0/* Connection stuff */#define DEFAULT_M3_PORT "/dev/ttyUSB0"#define DELAY_US 10000typedef enum {  TrapezoidalProfile = 0,  VelocityContouringProfile,  SCurveProfile,} ProfileMode_t;typedef enum {  NoStopMode = 0,  AbruptStopMode,  SmoothStopMode} StopMode;/* robot-specific info */#define DEFAULT_MOTOR_0_DIR             -1#define DEFAULT_MOTOR_1_DIR             1#define DEFAULT_AXLE_LENGTH             .301#define MAX_TICKS               48000#define WHEEL_DIAMETER          0.125#define WHEEL_RADIUS            (WHEEL_DIAMETER/2.0)#define WHEEL_CIRC              (M_PI*WHEEL_DIAMETER)#define MOTOR_STEP              (1.8/MOTOR_TICKS_PER_STEP)#define GEAR_RATIO              4.8#define WHEEL_STEP              (MOTOR_STEP/GEAR_RATIO)#define M_PER_TICK              (WHEEL_RADIUS/WHEEL_STEP)#define MOTOR_TICKS_PER_STEP    64.0#define MOTOR_TICKS_PER_REV     200.0*MOTOR_TICKS_PER_STEP#define NUM_IR_SENSORS          8/* for safety */#define MAX_WHEELSPEED          8000#define MPS_PER_TICK            1              // TODO: what is this?#define FULL_STOP       0#define STOP            1#define DEFAULT_PERCENT_TORQUE  75typedef struct{  player_position2d_data_t position;  player_ir_data_t         ir;  player_aio_data_t        aio;  player_dio_data_t        dio;} __attribute__ ((packed)) player_data_t;class wbr914 : public Driver {  public:    wbr914(ConfigFile* cf, int section);    virtual ~wbr914();    virtual int  Subscribe(player_devaddr_t id);    virtual int  Unsubscribe(player_devaddr_t id);    /* the main thread */    virtual void Main();    virtual int  Setup();    virtual int  Shutdown();    // MessageHandler    virtual int  ProcessMessage(MessageQueue * resp_queue, 				player_msghdr * hdr, 				void * data);  // Private Member Functions  private:    int  ReadBuf(unsigned char* s, size_t len);    int  WriteBuf(unsigned char* s, size_t len);    int  sendCmdCom( unsigned char address, unsigned char c, 		     int cmd_num, unsigned char* arg, 		     int ret_num, unsigned char * ret );    int  sendCmd0( unsigned char address, unsigned char c, 		   int ret_num, unsigned char * ret );    int  sendCmd16( unsigned char address, unsigned char c, 		    int16_t arg, int ret_num, unsigned char * ret );    int  sendCmd32( unsigned char address, unsigned char c, 		    int32_t arg, int ret_num, unsigned char * ret );    int32_t BytesToInt32( unsigned char *ptr );    int16_t BytesToInt16( unsigned char *ptr );    int  ResetRawPositions();    int  HandleConfig(MessageQueue* resp_queue,			      player_msghdr * hdr,			      void* data);    // Command handlers    int  HandleCommand(player_msghdr * hdr, void * data);    void HandleVelocityCommand(player_position2d_cmd_vel_t* cmd );    void HandleDigitalOutCommand( player_dio_cmd_t* doutCmd );    void SetDigitalData( player_dio_cmd_t * d );    // Robot data retrievers    void GetAllData( void );    void GetPositionData( player_position2d_data_t* d );    void GetIRData( player_ir_data_t * d );    void GetAnalogData( player_aio_data_t * d );    void GetDigitalData( player_dio_data_t * d );    void PublishData(void);    /* Robot commands */    const char* GetPMDErrorString( int rc );    int  InitRobot();    void UpdateM3();    void Stop( int StopMode );    bool EnableMotors( bool enable );    void SetVelocity( uint8_t chan, float mps );    void SetVelocity( float mpsL, float mpsR );    void SetVelocityInTicks( int32_t left, int32_t right );    void GetVelocityInTicks( int32_t* left, int32_t* right );    void Move( uint8_t chan, float meters );    void Move( float metersL, float metersR );    void SetPosition( uint8_t chan, float meters );    void SetPosition( float metersL, float metersR );    void SetActualPositionInTicks( int32_t left, int32_t right );    void SetActualPosition( float left, float right );    void GetPositionInTicks( int32_t* left, int32_t* right );    void SetAccelerationProfile();    void StopRobot();    int  GetAnalogSensor(int s, short * val );    void GetDigitalIn( unsigned short* digIn );    void SetDigitalOut( unsigned short digOut );    void SetOdometry( player_position2d_set_odom_req_t* od );    void SetContourMode( ProfileMode_t prof );    void SetMicrosteps();          /* Conversions */    int32_t Meters2Ticks( float meters );    float Ticks2Meters( int32_t ticks );    int32_t MPS2Vel( float mps );    float Vel2MPS( int32_t vel ); // Private Data members private:    // Comm info for connection to M3 controller    int                _fd;    bool               _fd_blocking;    const char*        _serial_port; // name of serial port device    player_data_t    _data;    player_devaddr_t position_id;    player_devaddr_t ir_id;    player_devaddr_t aio_id;    player_devaddr_t dio_id;    // bookkeeping to track whether an interface has been subscribed    int position_subscriptions;    int ir_subscriptions;    int aio_subscriptions;    int dio_subscriptions;    int param_idx;  // index in the RobotParams table for this robot    int direct_wheel_vel_control; // false -> separate trans and rot vel    player_position2d_cmd_vel_t last_position_cmd;    // Max motor speeds (mm/sec,deg/sec)    int motor_max_speed;    int motor_max_turnspeed;    // Max motor accel/decel (mm/sec/sec, deg/sec/sec)    short motor_max_trans_accel, motor_max_trans_decel;    short motor_max_rot_accel, motor_max_rot_decel;    // Geometry    // Robot Geometry    player_position2d_geom_t  _robot2d_geom;    player_position3d_geom_t  _robot3d_geom;    player_ir_pose_t          _ir_geom;    // Odometry stuff    int32_t last_lpos;    int32_t last_rpos;    double  x;    double  y;    double  yaw;    // State    bool    _stopped;    bool    _motorsEnabled;    int     _debug;    int     _usCycleTime;    double  _velocityK;    double  _positionK;    int     _percentTorque;    uint16_t _lastDigOut;};#endif

⌨️ 快捷键说明

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