Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Mathematics Visualization

여러 수학 이론들을 시각화해서 이해하기 쉽도록 만든 프로젝트입니다.
C++와 Python으로 구현된 수학 알고리즘들과 시각화 그래프를 포함합니다.


📊 Contents


🔄 Quaternion

Quaternion Normalization (쿼터니언 정규화)

Q_raw = [q_x, q_y, q_z, q_w]가 주어질 때, 쿼터니언의 크기를 1로 정규화하기 위해 쿼터니언의 norm을 계산하고 각 요소를 norm으로 나눕니다.

$$ Q = \sqrt{(q_x^2+q_y^2+q_z^2+q_w^2)} $$

$$ \quad q_x' = \frac{q_x}{|Q|}, \quad q_y' = \frac{q_y}{|Q|}, \quad q_z' = \frac{q_z}{|Q|}, \quad q_w' = \frac{q_w}{|Q|} $$

Quaternion to Euler XYZ

정규화된 쿼터니언(q_x,q_y,q_z,q_w)을 오일러 각으로 변환합니다. arctan2(y,x)는 두 점 사이의 상대좌표를 받아 절대각을 나타냅니다.

$$ t_x = arctan2(2(q_w_q_x - q_y_q_z), q_w^2-q_x^2-q_y^2+q_z^2) $$

$$ t_y = arcsin(2(q_w_q_y+ q_x_q_z)) $$

$$ t_z = arctan2(2(q_w_q_z - q_x_q_y), q_w^2+q_x^2-q_y^2-q_z^2) $$

Euler XYZ to Quaternion

오일러 각(t_x,t_y,t_z)을 쿼터니언으로 변환합니다.

$$ s_x = sin(t_x / 2), c_x = cos(t_x / 2) $$

$$ s_y = sin(t_y / 2), c_y = cos(t_y / 2) $$

$$ s_z = sin(t_z / 2), c_z = cos(t_z / 2) $$

$$ q_x = s_x_c_y_c_z + c_x_s_y_s_z $$

$$ q_y = -s_x_c_y_s_z + c_x_s_y_c_z $$

$$ q_z = s_x_s_y_c_z + c_x_c_y_s_z $$

$$ q_w = -s_x_s_y_s_z + c_x_c_y_c_z $$


🤖 Kinematics

3DOF Forward Kinematics

3자유도 로봇 매니퓰레이터의 순기구학을 구현합니다. DH 파라미터를 사용하여 각 관절 각도로부터 엔드 이펙터의 위치를 계산합니다.

DH 변환 행렬

$$ T_i = \begin{bmatrix} \cos(\theta_i) & -\sin(\theta_i)\cos(\alpha_i) & \sin(\theta_i)\sin(\alpha_i) & a_i\cos(\theta_i) \\ \sin(\theta_i) & \cos(\theta_i)\cos(\alpha_i) & -\cos(\theta_i)\sin(\alpha_i) & a_i\sin(\theta_i) \\ 0 & \sin(\alpha_i) & \cos(\alpha_i) & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix} $$

전체 변환 행렬

$$ T_{total} = T_1 \cdot T_2 \cdot T_3 $$

3DOF Inverse Kinematics

3자유도 로봇의 역기구학을 구현합니다. 엔드 이펙터의 목표 위치로부터 관절 각도를 계산합니다.

관절 1 (Base Rotation)

$$ \theta_1 = \arctan2(y, x) $$

관절 2, 3 (Arm Configuration)

$$ r = \sqrt{x^2 + y^2} $$ $$ h = z - d_1 $$ $$ D = \frac{r^2 + h^2 - L_1^2 - L_2^2}{2L_1L_2} $$ $$ \theta_3 = \arctan2(\sqrt{1-D^2}, D) $$ $$ \phi = \arctan2(h, r) $$ $$ \psi = \arctan2(L_2\sin(\theta_3), L_1 + L_2\cos(\theta_3)) $$ $$ \theta_2 = \phi - \psi $$

Differential Kinematics

차동 구동 로봇의 운동학을 구현합니다. 선속도와 각속도로부터 좌우 바퀴의 RPM을 계산합니다.

선속도/각속도 → 바퀴 RPM

$$ \omega_L = \frac{60}{2\pi r_w} \left(v - \frac{d_w}{2}\omega\right) \cdot \text{gear_ratio} $$ $$ \omega_R = \frac{60}{2\pi r_w} \left(v + \frac{d_w}{2}\omega\right) \cdot \text{gear_ratio} $$

바퀴 RPM → 선속도/각속도

$$ v = \frac{\pi r_w}{60} \cdot \frac{\omega_L + \omega_R}{\text{gear_ratio}} $$ $$ \omega = \frac{\pi r_w}{30d_w} \cdot \frac{\omega_R - \omega_L}{\text{gear_ratio}} $$

여기서:

  • $r_w$: 바퀴 반지름
  • $d_w$: 바퀴 간 거리
  • $v$: 선속도
  • $\omega$: 각속도
  • $\omega_L, \omega_R$: 좌우 바퀴 RPM

🗺️ Path Planning

Voronoi Diagram

기본 Voronoi 다이어그램을 구현합니다. 점들의 집합으로부터 각 점에 가장 가까운 영역을 구분합니다.

Voronoi 셀 정의

$p_i$의 Voronoi 셀 $V(p_i)$는 다음과 같이 정의됩니다:

$$ V(p_i) = {x \in \mathbb{R}^2 : |x - p_i| \leq |x - p_j|, \forall j \neq i} $$

Generalized Voronoi Diagram (GVD)

장애물이 있는 환경에서의 일반화된 Voronoi 다이어그램을 구현합니다. 장애물로부터의 거리 맵을 기반으로 GVD를 추출하고, A* 알고리즘을 사용하여 경로 계획을 수행합니다.

거리 변환 (Distance Transform)

$$ D(x) = \min_{o \in O} |x - o| $$

여기서 $O$는 장애물 집합입니다.

GVD 추출

$x$가 GVD에 속하는 조건: $$ x \in \text{GVD} \Leftrightarrow \exists o_1, o_2 \in O : |x - o_1| = |x - o_2| = D(x) $$

A* 알고리즘 비용 함수

$$ f(n) = g(n) + h(n) $$

여기서:

  • $g(n)$: 시작점에서 노드 $n$까지의 실제 비용
  • $h(n)$: 노드 $n$에서 목표점까지의 휴리스틱 비용 (유클리드 거리)

🧠 Activation Functions

Sigmoid Function

$$ \sigma(x) = \frac{1}{1 + e^{-x}} $$

도함수

$$ \sigma'(x) = \sigma(x)(1 - \sigma(x)) $$

Hyperbolic Tangent (Tanh)

$$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$

도함수

$$ \tanh'(x) = 1 - \tanh^2(x) $$


🚀 Usage

C++ 실행

cd c++
mkdir build && cd build
cmake ..
make
./mathmatics_demo

Python 실행

cd python

# 기본 수학 함수들
python quaternion.py
python sigmoid.py
python tanh_graph.py

# 기구학
python 3dof_forwardkinematic.py
python 3dof_inverse_kinematic.py
python kinematics.py

# 경로 계획
python basic_voronoi_diagram.py
python generalized_voronoi_diagram.py
python gvd_path_planning.py

📚 References


Happy Mathematics! 🧮

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages