RIT VEXU Core API
Loading...
Searching...
No Matches
odometry_tank.h
1#pragma once
2
3#include "../core/include/subsystems/custom_encoder.h"
4#include "../core/include/subsystems/odometry/odometry_base.h"
5#include "../core/include/utils/geometry.h"
6#include "../core/include/utils/moving_average.h"
7#include "../core/include/utils/vector2d.h"
8
9#include "../core/include/robot_specs.h"
10
11static int background_task(void *odom_obj);
12
19class OdometryTank : public OdometryBase {
20public:
31 OdometryTank(vex::motor_group &left_side, vex::motor_group &right_side, robot_specs_t &config,
32 vex::inertial *imu = NULL, bool is_async = true);
33
45 OdometryTank(CustomEncoder &left_custom_enc, CustomEncoder &right_custom_enc, robot_specs_t &config,
46 vex::inertial *imu = NULL, bool is_async = true);
47
59 OdometryTank(vex::encoder &left_vex_enc, vex::encoder &right_vex_enc, robot_specs_t &config,
60 vex::inertial *imu = NULL, bool is_async = true);
61
66 pose_t update() override;
67
72 void set_position(const pose_t &newpos = zero_pos) override;
73
74private:
78 static pose_t calculate_new_pos(robot_specs_t &config, pose_t &stored_info, double lside_diff, double rside_diff,
79 double angle_deg);
80
81 vex::motor_group *left_side, *right_side;
82 CustomEncoder *left_custom_enc, *right_custom_enc;
83 vex::encoder *left_vex_enc, *right_vex_enc;
84 vex::inertial *imu;
85 robot_specs_t &config;
86
87 double rotation_offset = 0;
89};
Definition custom_encoder.h:8
Definition moving_average.h:87
Definition odometry_base.h:24
static constexpr pose_t zero_pos
Definition odometry_base.h:124
Definition odometry_tank.h:19
pose_t update() override
Definition odometry_tank.cpp:64
void set_position(const pose_t &newpos=zero_pos) override
Definition odometry_tank.cpp:52
OdometryTank(vex::motor_group &left_side, vex::motor_group &right_side, robot_specs_t &config, vex::inertial *imu=NULL, bool is_async=true)
Definition odometry_tank.cpp:13
Definition geometry.h:52
Definition robot_specs.h:11