# Нотация Денавита-Хартенберга


```python
from sympy import *
def rz(a):
    return Matrix([
        [cos(a), -sin(a), 0, 0],
        [sin(a), cos(a), 0, 0],
        [0, 0, 1, 0],
        [0, 0, 0, 1]
    ])

def ry(a):
    return Matrix([
        [cos(a), 0, sin(a), 0],
        [0, 1, 0, 0],
        [-sin(a), 0, cos(a), 0],
        [0, 0, 0, 1]
    ])

def rx(a):
    return Matrix([
        [1, 0, 0, 0],
        [0, cos(a), -sin(a), 0],
        [0, sin(a), cos(a), 0],
        [0, 0, 0, 1]
    ])

def trs(x, y, z):
    return Matrix([
        [1, 0, 0, x],
        [0, 1, 0, y],
        [0, 0, 1, z],
        [0, 0, 0, 1]
    ])

def vec(x, y, z):
    return Matrix([
        [x],
        [y],
        [z],
        [1]
    ])
```

Если соединить матрицы и винтовое исчисление, одним из результатов будет нотация Денавита-Хартенберга.
Она подразумевает четыре последовательных преобразовния:
$$
DH(\theta, d, \alpha, a) =
R_z(\theta) T_z(d) R_x(\alpha) T_z(a)
$$


```python
def dh(theta, d, alpha, a):
    return rz(theta) * trs(0, 0, d) * rx(alpha) * trs(a, 0, 0)
```


```python
theta, d, alpha, a = symbols("theta_i, d_i, alpha_i, a_i")
simplify(dh(theta, d, alpha, a))
```

DH-параметры описывают последовательные
- поворот вокруг оси $Z$ - $\theta$
- смещение вдоль оси $Z$ - $d$
- поворот вокруг новой оси $X$ - $\alpha$
- смещение вдоль новой оси $X$ - $r$

Обобщенные координаты выбираются так, чтобы попадать на вращение вокруг / смещение вдоль оси $Z$.



35dff3d0c15a3fd12a87713c721c51843dc68a5b
ipynb
Jupyter Notebook
3 - DH notation.ipynb
red-hara/jupyter-dh-notation
0ffd305b3e67ce7dd3c20f2d1c719b53251dbf58
MIT
3 - DH notation.ipynb
red-hara/jupyter-dh-notation
0ffd305b3e67ce7dd3c20f2d1c719b53251dbf58
MIT
3 - DH notation.ipynb
red-hara/jupyter-dh-notation
0ffd305b3e67ce7dd3c20f2d1c719b53251dbf58
MIT
Qwen/Qwen-72B
1. YES
2. YES