```python
import sympy as sym
import numpy as np
from IPython.display import display, Markdown, Latex, HTML
import scipy as sp
import scipy.linalg
import matplotlib.pyplot as plt
from matplotlib import animation
from mpl_toolkits.mplot3d.art3d import Poly3DCollection

```


```python
# Angulos de rot
Rx= np.deg2rad(45)
Ry= np.deg2rad(0)
Rz= np.deg2rad(0)

# Vetor gravidade
g = sym.Matrix([[0],
                [0],
                [-9.8]])

# Montando as matrizes de rotação (o plano rotaciona, não o vetor)
# por isso, esta não é a matriz de rotação de um vetor no R3 (ela é equivalente à rotação de um angulo em sentido contrário em um vetor)
# ex.: rotacionar um vetor 45º no eixo x é diferente de rotacionar o plano e manter o vetor estacionário, ou seja, rotarcionar o vetor -45º

#rotação no eixo x
Mx = sym.Matrix([[1,             0,          0],
                 [0,    np.cos(Rx), np.sin(Rx)],
                 [0, -1*np.sin(Rx), np.cos(Rx)]])
#rotação no eixo y
My = sym.Matrix([[np.cos(Ry), 0, -1*np.sin(Ry)],
                 [         0, 1,             0],
                 [np.sin(Ry), 0,    np.cos(Ry)]])
#rotação no eixo z
Mz = sym.Matrix([[   np.cos(Rz), np.sin(Rz), 0],
                 [-1*np.sin(Rz), np.cos(Rz), 0],
                 [            0,          0, 1]])

# Pega a rotação do vetor g no R3
Mx@My@Mz@g

# Só subtrair o vetor resultante da leitura do acelerômetro
# isso irá isolar a gravidade ( teremos somente a projeção dos vetores de aceleração no plano XY) 
```




$\displaystyle \left[\begin{matrix}0\\-6.92964645562817\\-6.92964645562817\end{matrix}\right]$



d14e42d0a7cc691323b830a41a72771461d2d3f8
ipynb
Jupyter Notebook
IMU_Rotation.ipynb
RenanMALV/IMU-gravity-canceller-on-axis-rotations
06fbda42447f2a7a97cf07fd7e6c8c03595b335d
MIT
IMU_Rotation.ipynb
RenanMALV/IMU-gravity-canceller-on-axis-rotations
06fbda42447f2a7a97cf07fd7e6c8c03595b335d
MIT
IMU_Rotation.ipynb
RenanMALV/IMU-gravity-canceller-on-axis-rotations
06fbda42447f2a7a97cf07fd7e6c8c03595b335d
MIT
Qwen/Qwen-72B
1. YES
2. YES