#ifndef ODOMETRY_H
#define ODOMETRY_H
+typedef struct {
+ union {
+ struct {
+ float right;
+ float left;
+ } setpoint;
+ float setpoints[2];
+ struct {
+ float right;
+ float left;
+ } velocity;
+ float velocites[2];
+ };
+
+ float linear_velocity;
+ float angular_velocity;
+ float baseline;
+} Odometry;
+
+void odometry_setpoint_from_cmdvel(Odometry *odom, float linear_vel,
+ float angular_vel) {
+ odom->setpoint.left = linear_vel - (odom->baseline * angular_vel) / 2;
+ odom->setpoint.right = linear_vel + (odom->baseline * angular_vel) / 2;
+}
+
+#if 0
class Odometry {
- private:
-
- float left_setpoint_;
- float right_setpoint_;
- float linear_velocity_;
- float angular_velocity_;
- float baseline_;
-
- public:
- Odometry() {
- left_setpoint_ = 0;
- right_setpoint_ = 0;
- baseline_ = 0;
- }
-
- Odometry(float baseline) {
- left_setpoint_ = 0;
- right_setpoint_ = 0;
- baseline_ = baseline;
- }
-
- void FromCmdVelToSetpoint(float linear_vel, float angular_vel) {
- left_setpoint_ = linear_vel - (baseline_ * angular_vel) / 2;
- right_setpoint_ = linear_vel + (baseline_ * angular_vel) / 2;
- }
-
+ // NOTE(lb): can i delete this?
void FromWheelVelToOdom(float left_wheel_vel, float right_wheel_vel){
linear_velocity_ = (left_wheel_vel + right_wheel_vel)/2;
angular_velocity_ = (right_wheel_vel - left_wheel_vel)/baseline_;
}
-
- float GetLeftVelocity() {
- return left_setpoint_;
- }
- float GetRightVelocity() {
- return right_setpoint_;
- }
- float GetLinearVelocity(){
- return linear_velocity_;
- }
- float GetAngularVelocity(){
- return angular_velocity_;
- }
-
};
+#endif
#endif
Encoder *encoder_right = &encoders[0];\r
Encoder *encoder_left = &encoders[1];\r
\r
-Odometry odom;\r
+Odometry odom = {0};\r
\r
//PID\r
Pid left_pid;\r
encoder_right->wheel_circumference = config_msg.right_wheel_circumference;\r
encoder_right->ticks_per_revolution = config_msg.ticks_per_revolution;\r
\r
- odom = Odometry(config_msg.baseline);\r
+ odom.baseline = config_msg.baseline;\r
\r
encoder_init(encoders);\r
motorcontroller_init(motors);\r
motorcontroller_speed_set(motor_right, right_dutycycle);\r
}\r
\r
-uint8_t porcoddio = 0;\r
+uint8_t porcoddio = 0; // NOTE(lb): LOL\r
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) {\r
/*\r
* Manage received message\r
otto_status = 3;\r
}\r
\r
- odom.FromCmdVelToSetpoint(linear_velocity, angular_velocity);\r
-\r
- float left_setpoint = odom.GetLeftVelocity();\r
- float right_setpoint = odom.GetRightVelocity();\r
+ odometry_setpoint_from_cmdvel(&odom, linear_velocity, angular_velocity);\r
+ float left_setpoint = odom.velocity.left;\r
+ float right_setpoint = odom.velocity.right;\r
\r
left_pid.Set(left_setpoint);\r
right_pid.Set(right_setpoint);\r