RobotHardware-UESTC/Hardware/银星机器人底盘/PiRobot-YH_Firmware v1.0/STM32/Lib/KinematicModels/model.h

45 lines
1.2 KiB
C
Raw Normal View History

2024-01-20 13:19:09 +08:00
#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(){}
2024-01-24 22:08:32 +08:00
Model(float _wheel_radius, float _body_radius): wheelRadius(_wheel_radius), bodyRadius(_body_radius){}
2024-01-20 13:19:09 +08:00
// 参数更新接口
void set(float _wheel_radius, float _body_radius) {
2024-01-24 22:08:32 +08:00
wheelRadius = _wheel_radius;
bodyRadius = _body_radius;
2024-01-20 13:19:09 +08:00
}
// 析构函数
~Model(){}
2024-01-24 22:08:32 +08:00
// robot speed -> motor speed 运动解算 把给到机器人的速度分解为各个轮子速度
2024-01-23 15:06:39 +08:00
virtual void motionSolver(float* robot_speed, float* motor_speed) = 0;
2024-01-20 13:19:09 +08:00
2024-01-24 22:08:32 +08:00
// motor speed -> robot speed 反解算, 把各个轮子的速度转为机器人的速度,
// 这里通过固定时间间隔转为里程
2024-01-20 13:19:09 +08:00
//interval ms
virtual void get_odom(struct Odom* odom, float* motor_dis, unsigned long interval) = 0;
protected:
2024-01-24 22:08:32 +08:00
float wheelRadius; // 轮子半径
float bodyRadius; // 机器人半径(泛指), 对于差分机器人模型bodyRadius就是轮距
2024-01-20 13:19:09 +08:00
};
#endif