🪇 Adds early return for kinematics to reduce calc
This commit is contained in:
+1
-1
@@ -7,7 +7,7 @@ build_flags =
|
|||||||
-D FT_UPLOAD_FIRMWARE=0
|
-D FT_UPLOAD_FIRMWARE=0
|
||||||
-D FT_DOWNLOAD_FIRMWARE=0
|
-D FT_DOWNLOAD_FIRMWARE=0
|
||||||
-D FT_ANALYTICS=1
|
-D FT_ANALYTICS=1
|
||||||
-D FT_MOTION=0
|
-D FT_MOTION=1
|
||||||
|
|
||||||
; Hardware specific
|
; Hardware specific
|
||||||
-D FT_IMU=0
|
-D FT_IMU=0
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#define RAD2DEG 57.295779513082321 // 180 / PI
|
#define RAD2DEG 57.295779513082321 // 180 / PI
|
||||||
#define DEG2RAD 0.017453292519943
|
#define DEG2RAD 0.017453292519943
|
||||||
|
|
||||||
typedef struct {
|
struct body_state_t {
|
||||||
float omega, phi, psi, xm, ym, zm;
|
float omega, phi, psi, xm, ym, zm;
|
||||||
float feet[4][4];
|
float feet[4][4];
|
||||||
|
|
||||||
@@ -18,17 +18,24 @@ typedef struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} body_state_t;
|
|
||||||
|
|
||||||
class Kinematics
|
bool isEqual(const body_state_t &other) const {
|
||||||
{
|
if (omega != other.omega || phi != other.phi || psi != other.psi ||
|
||||||
private:
|
xm != other.xm || ym != other.ym || zm != other.zm) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return memcmp(feet, other.feet, sizeof(feet)) == 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Kinematics {
|
||||||
|
private:
|
||||||
float Trb[4][4] = {0,};
|
float Trb[4][4] = {0,};
|
||||||
float Trf[4][4] = {0,};
|
float Trf[4][4] = {0,};
|
||||||
float Tlb[4][4] = {0,};
|
float Tlb[4][4] = {0,};
|
||||||
float Tlf[4][4] = {0,};
|
float Tlf[4][4] = {0,};
|
||||||
|
|
||||||
const float Ix[4][4] = {{-1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
|
const float Ix[4][4] = {{-1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};
|
||||||
float inv[4][4];
|
float inv[4][4];
|
||||||
float point[4];
|
float point[4];
|
||||||
float Q1[4][4];
|
float Q1[4][4];
|
||||||
@@ -38,6 +45,8 @@ private:
|
|||||||
|
|
||||||
float point_lf[4][4];
|
float point_lf[4][4];
|
||||||
|
|
||||||
|
body_state_t currentState;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
float l1, l2, l3, l4;
|
float l1, l2, l3, l4;
|
||||||
float L, W;
|
float L, W;
|
||||||
@@ -53,10 +62,13 @@ private:
|
|||||||
}
|
}
|
||||||
~Kinematics() {}
|
~Kinematics() {}
|
||||||
|
|
||||||
esp_err_t calculate_inverse_kinematics(body_state_t body_state, float result[12]) {
|
esp_err_t calculate_inverse_kinematics(const body_state_t body_state, float result[12]) {
|
||||||
esp_err_t ret = ESP_OK;
|
esp_err_t ret = ESP_OK;
|
||||||
|
|
||||||
|
if (currentState.isEqual(body_state)) return ESP_OK;
|
||||||
|
|
||||||
ret = bodyIK(body_state);
|
ret = bodyIK(body_state);
|
||||||
|
currentState = body_state;
|
||||||
|
|
||||||
ret += inverse(Tlf, inv);
|
ret += inverse(Tlf, inv);
|
||||||
dspm_mult_f32_ae32((float*) inv, (float*) body_state.feet[0], (float*) point, 4, 4, 1);
|
dspm_mult_f32_ae32((float*) inv, (float*) body_state.feet[0], (float*) point, 4, 4, 1);
|
||||||
@@ -79,7 +91,7 @@ private:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t bodyIK(body_state_t p) {
|
esp_err_t bodyIK(const body_state_t p) {
|
||||||
float cos_omega = cos(p.omega * DEG2RAD);
|
float cos_omega = cos(p.omega * DEG2RAD);
|
||||||
float sin_omega = sin(p.omega * DEG2RAD);
|
float sin_omega = sin(p.omega * DEG2RAD);
|
||||||
float cos_phi = cos(p.phi * DEG2RAD);
|
float cos_phi = cos(p.phi * DEG2RAD);
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ class MotionService
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool updateMotion() {
|
bool updateMotion() {
|
||||||
float new_angles[12] = {0,};
|
|
||||||
switch (motionState) {
|
switch (motionState) {
|
||||||
case MOTION_STATE::IDLE:
|
case MOTION_STATE::IDLE:
|
||||||
return false;
|
return false;
|
||||||
@@ -160,6 +159,7 @@ class MotionService
|
|||||||
constexpr static int MotionInterval = 100;
|
constexpr static int MotionInterval = 100;
|
||||||
|
|
||||||
body_state_t body_state = {0,};
|
body_state_t body_state = {0,};
|
||||||
|
float new_angles[12] = {0,};
|
||||||
|
|
||||||
float dir[12] = {-1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1};
|
float dir[12] = {-1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1};
|
||||||
float default_feet_positions[4][4] = {
|
float default_feet_positions[4][4] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user