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