#ifndef PIBOT_MODLE_H_
#define PIBOT_MODLE_H_

//用于标识里程信息
struct Odom
{
    float x;
    float y;
    float z;
    float vel_x;
    float vel_y;
    float vel_z;
};

// 运动模型接口， 继承该类实现对应的模型
struct Model
{
    // 构造函数
    Model(){}
    Model(float _wheel_radius, float _body_radius): wheelRadius(_wheel_radius), bodyRadius(_body_radius){}

    // 参数更新接口
    void set(float _wheel_radius, float _body_radius) {
        wheelRadius = _wheel_radius;
        bodyRadius = _body_radius;
    }

    // 析构函数
    ~Model(){}

    // robot speed -> motor speed 运动解算 把给到机器人的速度分解为各个轮子速度
    virtual void motionSolver(float* robot_speed, float* motor_speed) = 0;

    // motor speed -> robot speed 反解算， 把各个轮子的速度转为机器人的速度，
	// 这里通过固定时间间隔转为里程
    //interval  ms
    virtual void get_odom(struct Odom* odom, float* motor_dis, unsigned long interval) = 0;

protected:
    float wheelRadius; // 轮子半径
    float bodyRadius;  // 机器人半径(泛指), 对于差分机器人模型bodyRadius就是轮距
};

#endif
