Warning

This page is located in archive.
Go to the latest version of this course pages.
Go the latest version of this page.

The goal of this task is to solve the inverse kinematic task for a general 6R mechanism using Newton's method.

**a.** Implement function `jac_r(mechanism, joints)`

that returns the rotational Jacobian for the given `mechanism`

and its configuration `joints`

.

I/O specifications for `jac_r`

:

`mechanism`

: dictionary with 4 keys`“theta offset”`

,`“d”`

,`“a”`

,`“alpha”`

.`joints`

: list of 6 float numbers that defines the configuration of the mechanism.**Return value**: 9×6 matrix of type`np.ndarray`

that defines the rotational Jacobian matrix evaluated at the given configuration, i.e.

$$\frac{\partial \mathrm{vec}(\mathbf{R})}{\partial \boldsymbol{\theta}}_{\big|\boldsymbol{\theta}_0}, \quad \text{where} \; \mathrm{vec}(\mathbf{R}) = \begin{bmatrix} r_{11} & r_{21} & r_{31} & r_{12} & r_{22} & r_{32} & r_{13} & r_{23} & r_{33} \end{bmatrix}^\top$$

**b.** Implement function `jac_t(mechanism, joints)`

that returns the positional Jacobian for the given `mechanism`

and its configuration `joints`

.

I/O specifications for `jac_t`

:

`mechanism`

: dictionary with 4 keys`“theta offset”`

,`“d”`

,`“a”`

,`“alpha”`

.`joints`

: list of 6 float numbers that defines the configuration of the mechanism.**Return value**: 3×6 matrix of type`np.ndarray`

that defines the positional Jacobian matrix evaluated at the given configuration, i.e.

$$\frac{\partial \mathbf{t}}{\partial \boldsymbol{\theta}}_{\big|\boldsymbol{\theta}_0}$$

**c.** Implement function `jac(mechanism, joints)`

that returns the full Jacobian for the given `mechanism`

and its configuration `joints`

.

I/O specifications for `jac`

:

`mechanism`

: dictionary with 4 keys`“theta offset”`

,`“d”`

,`“a”`

,`“alpha”`

.`joints`

: list of 6 float numbers that defines the configuration of the mechanism.**Return value**: 12×6 matrix of type`np.ndarray`

that defines the full Jacobian matrix evaluated at the given configuration, i.e.

$$ \begin{bmatrix} \frac{\partial \mathrm{vec}(\mathbf{R})}{\partial \boldsymbol{\theta}} \\ \frac{\partial \mathbf{t}}{\partial \boldsymbol{\theta}} \end{bmatrix}_{\big|\boldsymbol{\theta}_0} $$

**d.** Implement function `solve(mechanism, pose, joints, niter, tol)`

that applies Newton's method to solve IKT.

I/O specifications for `solve`

:

`mechanism`

: dictionary with 4 keys`“theta offset”`

,`“d”`

,`“a”`

,`“alpha”`

`pose`

: dictionary with 2 keys`“q”`

and`“t”`

that defines the desired pose of the mechanism's end effector`joints`

: list of 6 float numbers that defines the initial configuration of the mechanism`niter`

: integer that defines number of iterations`tol`

: positive float tolerance**Return value**: tuple consisting of the state of convergence and a list of 6 float numbers that defines the configuration of the mechanism that generates the given`pose`

with tolerance`tol`

or the algorithm failed to converge in`niter`

steps.

Upload a zip archive `hw07.zip`

containing

`hw07.py`

- python script containing the implemented functions`jac_r`

,`jac_t`

,`jac`

,`solve`

courses/pkr/labs/hw07.txt · Last modified: 2023/12/18 13:23 by korotvik