#ifndef ROBOT_H
#define ROBOT_H

#include "mobilitygeometry_i.h"
#include "mobilityactuator_i.h"
#include "mobilityutil.h"
#include "mobilityimage_i.h"

class Robot {
 public:

  Robot(int argc, char *argv[], bool verbose=false);

  void setVelocity(float v, float w);

  void forward(float dist, float v=0.1);
  void turn(float theta);
  void setMaxVelocity(float v);
  void setAcceleration(float a);
  float getMaxVelocity();
  float getAcceleration();

  void getOdometry(float &x,float &y,float &theta);
  MobilityGeometry::SegmentData_var getSonar();
  MobilityGeometry::SegmentData_var getIR();

  void initVision();
  unsigned char *getImage();
  void copyImage(unsigned char *im);

 private:
  float trans_correct;
  float r_turn_correct;
  float l_turn_correct;
  float maxVelocity;
  float accel;

  mbyClientHelper *pHelper;

  MobilityCore::ObjectDescriptor_var pDescriptor;
	
  MobilityGeometry::SegmentState_var pIRSeg;
  MobilityGeometry::SegmentState_var pSonarSeg;


  MobilityActuator::ActuatorState_var pDriveCommand;
  MobilityActuator::ActuatorData      OurCommand;

  MobilityGeometry::TransformState_var pOdoTrans;
  MobilityGeometry::TransformData_var pOdoData;

  bool visionInitialized;
  MobilityImage::ImageState_var pImage;
  MobilityImage::ImageData_var  pImageData;
};

#endif
