RIT VEXU Core API
Loading...
Searching...
No Matches
tank_kinematics.h
1#pragma once
2
3#include "core/math/kinematics/chassis_accelerations.h"
4#include "core/math/kinematics/chassis_velocities.h"
5#include "core/math/kinematics/tank_wheel_accelerations.h"
6#include "core/math/kinematics/tank_wheel_velocities.h"
7#include "core/math/units.h"
8
9using namespace units::literals;
10
20 public:
22 units::Length track_width;
23
28 explicit TankKinematics(units::Length track_width) : track_width(track_width) {}
29
37 units::Velocity vx = (wheel_velocities.left + wheel_velocities.right) / 2.0;
38
39 // omega = (right - left) / track_width
40 units::AngularVelocity omega =
41 ((wheel_velocities.right.to(units::inps) - wheel_velocities.left.to(units::inps)) /
42 track_width.to(units::in)) *
43 units::radps;
44
45 return ChassisVelocities(vx, 0_inps, omega);
46 }
47
56 // v_L = vx - (track_width / 2) * omega
57 // v_R = vx + (track_width / 2) * omega
58 units::Velocity omega_linear =
59 (chassis_velocities.omega.to(units::radps) * (track_width.to(units::in) / 2.0)) *
60 units::inps;
61
62 return TankWheelVelocities(chassis_velocities.vx - omega_linear,
63 chassis_velocities.vx + omega_linear);
64 }
65
73 units::Acceleration ax = (wheel_accels.left + wheel_accels.right) / 2.0;
74
75 // alpha = (right - left) / track_width
76 units::AngularAcceleration alpha =
77 ((wheel_accels.right.to(units::inps2) - wheel_accels.left.to(units::inps2)) /
78 track_width.to(units::in)) *
79 units::radps2;
80
81 return ChassisAccelerations(ax, 0_inps2, alpha);
82 }
83
92 // a_L = ax - (track_width / 2) * alpha
93 // a_R = ax + (track_width / 2) * alpha
94 units::Acceleration alpha_linear =
95 (chassis_accels.alpha.to(units::radps2) * (track_width.to(units::in) / 2.0)) * units::inps2;
96
97 return TankWheelAccelerations(chassis_accels.ax - alpha_linear,
98 chassis_accels.ax + alpha_linear);
99 }
100};
TankKinematics(units::Length track_width)
Constructs a tank drive kinematics object.
Definition tank_kinematics.h:28
TankWheelAccelerations to_wheel_accelerations(const ChassisAccelerations &chassis_accels) const
Returns left and right component accelerations from a chassis acceleration using inverse kinematics.
Definition tank_kinematics.h:91
ChassisVelocities to_chassis_velocities(const TankWheelVelocities &wheel_velocities) const
Returns a chassis velocity from left and right component velocities using forward kinematics.
Definition tank_kinematics.h:36
TankWheelVelocities to_wheel_velocities(const ChassisVelocities &chassis_velocities) const
Returns left and right component velocities from a chassis velocity using inverse kinematics.
Definition tank_kinematics.h:55
units::Length track_width
Distance between the left and right wheels (often tuned empirically).
Definition tank_kinematics.h:22
ChassisAccelerations to_chassis_accelerations(const TankWheelAccelerations &wheel_accels) const
Returns a chassis acceleration from left and right component accelerations using forward kinematics.
Definition tank_kinematics.h:72
Represents robot chassis accelerations.
Definition chassis_accelerations.h:12
units::Acceleration ax
Acceleration along the x-axis. (Forward is positive).
Definition chassis_accelerations.h:14
units::AngularAcceleration alpha
Angular acceleration of the robot frame. (Counter-Clockwise is positive).
Definition chassis_accelerations.h:20
Represents robot chassis velocities.
Definition chassis_velocities.h:14
units::AngularVelocity omega
Angular velocity of the robot frame. (Counter-Clockwise is positive).
Definition chassis_velocities.h:22
units::Velocity vx
Velocity along the x-axis. (Forward is positive).
Definition chassis_velocities.h:16
Represents the left and right accelerations of a tank drive.
Definition tank_wheel_accelerations.h:9
units::Acceleration left
Left wheel acceleration.
Definition tank_wheel_accelerations.h:11
units::Acceleration right
Right wheel acceleration.
Definition tank_wheel_accelerations.h:13
Represents the left and right velocities of a tank drive.
Definition tank_wheel_velocities.h:9
units::Velocity right
Right wheel velocity.
Definition tank_wheel_velocities.h:13
units::Velocity left
Left wheel velocity.
Definition tank_wheel_velocities.h:11