Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
bicycle_model.cpp
Go to the documentation of this file.
2
3BicycleModel::BicycleModel(const std::string& config_path) {
4 YAML::Node config = YAML::LoadFile(config_path);
5
6 auto model_config = config["vehicle_model"]["simple_bicycle_model"];
7
8 // Load kinematics parameters
9 lr_ = model_config["kinematics"]["lr"].as<double>();
10 lf_ = model_config["kinematics"]["lf"].as<double>();
11 sf_ = model_config["kinematics"]["sf"].as<double>();
12 sr_ = model_config["kinematics"]["sr"].as<double>();
13 h_cg_ = model_config["kinematics"]["h_cg"].as<double>();
15 model_config["kinematics"]["max_steering_angle"].as<double>() * M_PI / 180.0;
16
17 // Load tire parameters
18 Blat_ = model_config["tire"]["Blat"].as<double>();
19 Clat_ = model_config["tire"]["Clat"].as<double>();
20 Dlat_ = model_config["tire"]["Dlat"].as<double>();
21 Elat_ = model_config["tire"]["Elat"].as<double>();
22
23 // Load aerodynamics
24 cla_ = model_config["aero"]["cla"].as<double>();
25 cda_ = model_config["aero"]["cda"].as<double>();
26 aero_area_ = model_config["aero"]["aeroArea"].as<double>();
27
28 // Load mass and inertia
29 mass_ = model_config["m"].as<double>();
30 Izz_ = model_config["Izz"].as<double>();
31
32 // Load drivetrain parameters
33 wheel_radius_ = model_config["wheelRadius"].as<double>();
34 gear_ratio_ = model_config["gearRatio"].as<double>();
35
36 // Initialize state variables
37 x_ = 0.0;
38 y_ = 0.0;
39 yaw_ = 0.0;
40 vx_ = 0.0;
41 steering_angle_ = 0.0;
42 throttle_ = 0.0;
43}
44
45void BicycleModel::step(double dt) {
46 (void)dt;
47 // Some Logic, Bicycle model class would have a MotorModel, TireModel, etc and it will
48 // call them here or something similar
49}
50
52 x_ = 0.0;
53 y_ = 0.0;
54 yaw_ = 0.0;
55 vx_ = 0.0;
56 steering_angle_ = 0.0;
57 throttle_ = 0.0;
58}
59
60void BicycleModel::set_position(double x, double y, double yaw) {
61 x_ = x;
62 y_ = y;
63 yaw_ = yaw;
64}
65
66void BicycleModel::set_velocity(double vx) { vx_ = vx; }
67
68double BicycleModel::get_position_x() const { return x_; }
69
70double BicycleModel::get_position_y() const { return y_; }
71
72double BicycleModel::get_yaw() const { return yaw_; }
73
74double BicycleModel::get_velocity_x() const { return vx_; }
75
76void BicycleModel::set_steering(double angle) { steering_angle_ = angle; }
77
78void BicycleModel::set_throttle(double throttle) { throttle_ = throttle; }
79
80std::string BicycleModel::get_model_name() const { return "BicycleModel"; }
double max_steering_angle_
std::string get_model_name() const override
void set_velocity(double vx) override
double steering_angle_
void set_position(double x, double y, double yaw) override
void step(double dt) override
double get_yaw() const override
void set_throttle(double throttle) override
BicycleModel(const std::string &config_path)
void reset() override
double get_velocity_x() const override
double get_position_x() const override
void set_steering(double angle) override
double get_position_y() const override