From 8628abfe132908de6f6232f68deabe880d37ab93 Mon Sep 17 00:00:00 2001 From: Philippe Pastor <philippe.pastor@isae.fr> Date: Tue, 1 Oct 2024 15:47:49 +0200 Subject: [PATCH] version 1.0 --- .../__pycache__/mavion_model.cpython-311.pyc | Bin 0 -> 11520 bytes mavion/main.py | 2 +- mavion/mavion_env.py | 2 +- mavion/{mavion.py => mavion_model.py} | 0 mavion/quaternion.py | 86 ------------------ 5 files changed, 2 insertions(+), 88 deletions(-) create mode 100644 mavion/__pycache__/mavion_model.cpython-311.pyc rename mavion/{mavion.py => mavion_model.py} (100%) delete mode 100644 mavion/quaternion.py diff --git a/mavion/__pycache__/mavion_model.cpython-311.pyc b/mavion/__pycache__/mavion_model.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36b589965e84da4a609c7f9fc9026c6e1ee8bafd GIT binary patch literal 11520 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 UZ&4%+Ze#kLod3s7O67k3FK)wn+yDRo literal 0 HcmV?d00001 diff --git a/mavion/main.py b/mavion/main.py index 5942126..69944de 100644 --- a/mavion/main.py +++ b/mavion/main.py @@ -1,7 +1,7 @@ import numpy as np from rotation import * import matplotlib.pyplot as plt -from mavion import Mavion +from mavion_model import Mavion def upulse(t, t0, tf): u = 0 if (t<t0 or t>=tf) else 1 diff --git a/mavion/mavion_env.py b/mavion/mavion_env.py index 10cc9d1..45996ce 100644 --- a/mavion/mavion_env.py +++ b/mavion/mavion_env.py @@ -1,7 +1,7 @@ import numpy as np import gymnasium as gym from gymnasium.envs.classic_control import utils -from mavion import Mavion +from mavion_model import Mavion class MavionEnv(gym.Env): diff --git a/mavion/mavion.py b/mavion/mavion_model.py similarity index 100% rename from mavion/mavion.py rename to mavion/mavion_model.py diff --git a/mavion/quaternion.py b/mavion/quaternion.py deleted file mode 100644 index 92121f6..0000000 --- a/mavion/quaternion.py +++ /dev/null @@ -1,86 +0,0 @@ - -import numpy as np - -def quatmul(p, q): - m = np.array( - [ - [p[0], -p[1], -p[2], -p[3]], - [p[1], p[0], -p[3], p[2]], - [p[2], p[3], p[0], -p[1]], - [p[3], -p[2], p[1], p[0]] - ] - ) - return m@q - -def quatmul(p, q): - r = np.zeros(4) - r[0] = p[0]*q[0] - np.dot(p[1:4],q[1:4]) - r[1:4] = p[0]*q[1:4] + q[0]*p[1:4] + np.cross(p[1:4],q[1:4]) - return r - -def quatnorm(q): - return np.dot(q, q) - -def quatinv(q): - r = np.zeros(4) - r[0] = q[0] - r[1:4] = -q[1:4] - r = r / quatnorm(q) - return r - -def quat2dcm(q): - dcm = np.array( - [ - [q[0] ** 2 + q[1] ** 2 - q[2] ** 2 - q[3] ** 2, 2 * (q[1] * q[2] + q[0] * q[3]), 2 * (q[1] * q[3] - q[0] * q[2])], - [2 * (q[1] * q[2] - q[0] * q[3]), q[0] ** 2 - q[1] ** 2 + q[2] ** 2 - q[3] ** 2, 2 * (q[2] * q[3] - q[0] * q[1])], - [2 * (q[1] * q[3] + q[0] * q[2]), 2 * (q[2] * q[3] - q[0] * q[1]), q[0] ** 2 - q[1] ** 2 - q[2] ** 2 + q[3] ** 2] - ] - ) - return dcm - -def dcm2quat(d): - q = np.zeros(4) - q[0] = np.sqrt() - -def eul2quat(a): - phi, tet, psi = a - q_phi = np.array([np.cos(phi/2), np.sin(phi/2), 0, 0]) - q_tet = np.array([np.cos(tet/2), 0, np.sin(tet/2), 0]) - q_psi = np.array([np.cos(psi/2), 0, 0, np.sin(psi/2)]) - q = quatprod(q_psi, quatprod(q_tet, q_phi)) - return q - -def eul2quat2(a): - c = np.cos(a/2) - s = np.sin(a/2) - q = np.array( - [ - c[0] * c[1] * c[2] + s[0] * s[1] * s[2], - s[0] * c[1] * c[2] - c[0] * s[1] * s[2], - c[0] * s[1] * c[2] + s[0] * c[1] * s[2], - c[0] * c[1] * s[2] - s[0] * s[1] * c[2], - ] - ) - return q - -def quat2eul(q): - phi = np.arctan2(2 * (q[0] * q[1] + q[2] * q[3]), 1 - 2 * (q[1] * q[1] + q[2] * q[2])) - theta = np.arcsin(2 * (q[0] * q[2] - q[1] * q[3])) - psi = np.arctan2(2 * (q[0] * q[3] + q[1] * q[2]), 1 - 2 * (q[3] * q[3] + q[2] * q[2])) - return np.array([phi, theta, psi]) - -def eul2dcm(a): - Rx = np.array([[1, 0, 0], - [0, np.cos(a[0]), np.sin(a[0])], - [0, -np.sin(a[0]), np.cos(a[0])]]) - - Ry = np.array([[np.cos(a[1]), 0, -np.sin(a[1])], - [0, 1, 0], - [np.sin(a[1]), 0, np.cos(a[1])]]) - - Rz = np.array([[np.cos(a[2]), np.sin(a[2]), 0], - [-np.sin(a[2]), np.cos(a[2]), 0], - [0, 0, 1]]) - - return Rx @ Ry @ Rz - -- GitLab