Skip to main content

Automatic Computation for Robot Design (ACRoD)

Project description

Automatic Computation for Robot Design (ACRoD)

Description

This repository is dedicated to develop functions for automatic computations for designing robotic manipulators.

Currently available functions

  • Jacobian formulation for planar and spatial manipulators around a given end-effector point. (This is useful in performing optimisation of Jacobian-based performance parameters of any non-redundant robot directly from its robot-topology matrix)
    • Statement of need: Jacobian formulation is highly used in dimensional synthesis of robotic manipulators, which deals with optimal design of robot's dimensional parameters (link-lengths and joint-orientations). For a given topological structure, formulating Jacobian around a given end-effector point for designing optimal dimensional parameters would require only the topological information, as every other step can be automated. Formulating Jacobian for serial manipulators is easy but for parallel manipulators and serial-parallel hybrid manipulators it is more complicated and often tedious. ACRoD automates this task of formulating Jacobian for a given end-effector point by running all the required steps in the background. The targetted audience includes researchers and engineers working on performing dimensional synthesis of manipulators (especially for multiple manipultors in bulk for comparison) to compute optimal dimensions for operation around a single end-effector point, and those needing to verify the DOF of a topological structure (especially for those special cases of kinematic mechanisms where Chebychev–Grübler–Kutzbach criterion fails to accurately determine the DOF) by analysing the Jacobian. Even though this does not include scripts for implementing optimisation or computing performance metrics for dimensional synthesis or for computing the validity of DOF, it does include scripts for computation of Jacobian which is an essential part for these analyses.

Installation

The package can be installed from PyPI by using the following command via terminal.

pip install acrod

Usage

Jacobian for robotic manipulators

2R Planar Serial Robot (as an example)

2R planar serial robot

The topological information of a robot is to be specified by using its robot-topology matrix, as defined here. For a planar 2R serial manipulator (as shown in the above figure), the robot topology matrix is given by

$$\left[\begin{matrix} 9 & 1 & 0 \\ 1 & 9 & 1 \\ 0 & 1 & 9 \end{matrix}\right]$$

The corresponding Jacobian function can be formulated as follows.

Firstly, the required functions are imported as shown below.

from acrod.jacobian import Jacobian
from numpy import array

The robot-topology matrix for 3R planar serial manipulator is defined and jacobian information is processed via the imported jacobian class as follows.

M = array(
        [[9, 1, 0],
         [1, 9, 1],
         [0, 1, 9]]
    )
jac = Jacobian(M, robot_type = 'planar')

Jacobian function is generated as shown below.

jacobian_function = jac.get_jacobian_function()

In the process of generating the above jacobian function, other attributes of the jacobian object also are updated. Symbolic Jacobian matrices can be extracted from the attributes. Since this is a serial robot, the matrix $J_a$ itself would be the Jacobian matrix of the manipulator. The matrix $J_a$ is extracted from Ja attribute of the jacobian object as follows.

symbolic_jacobian = jac.Ja
symbolic_jacobian

In an ipynb file of JupyterLab, the above code would produce the following output.

$$\left[\begin{matrix}- a_{y} + r_{(1,2)y} & - a_{y} + r_{(2,3)y} \\ a_{x} - r_{(1,2)x} & a_{x} - r_{(2,3)x} \\ 1 & 1\end{matrix}\right]$$

The above Jacobian is based on the notations defined and described here.

Active joint velocities, in the corresponding order, can be viewed by running the following lines.

active_joint_velocities = jac.active_joint_velocities_symbolic
active_joint_velocities

In an ipynb file of JupyterLab, the above code would produce the following output.

$$\left[\begin{matrix}\dot{\theta}_{(1,2)} \\ \dot{\theta}_{(2,3)}\end{matrix}\right]$$

Robot dimensional parameters can be viewed by running the below line.

robot_dimensional_parameters = jac.parameters_symbolic
robot_dimensional_parameters

In an ipynb file of JupyterLab, the above code would produce the following output.

$$\left[\begin{matrix}r_{(1,2)x} \\ r_{(1,2)y} \\ r_{(2,3)x} \\ r_{(2,3)y}\end{matrix}\right]$$

Robot end-effector parameters can be viewed by running the below line.

robot_endeffector_parameters = jac.endeffector_variables_symbolic
robot_endeffector_parameters

In an ipynb file of JupyterLab, the above code would produce the following output.

$$\left[\begin{matrix}a_{x} \\ a_{y}\end{matrix}\right]$$

Sample computation of Jacobian for the configuration corresponding to the parameters shown below:

  • End-effector point: $\textbf{a}=\hat{i}+2\hat{j}$
  • Locations of joints: $\textbf{r}_{(1,2)}=3\hat{i}+4\hat{j}$ and $\textbf{r}_{(2,3)}=5\hat{i}+6\hat{j}$

For the given set of dimensional parameters of the robot, the numerical Jacobian can be computed as follows. Firstly, we need to gather the configuration parameters in Python list format, in a particular order. The robot dimensional parameters from jac.parameters_symbolic are found (as shown earlier) to be in the order of $r_{(1,2)x}$, $r_{(1,2)y}$, $r_{(2,3)x}$ and $r_{(2,3)y}$. Hence the configuration parameters are to be supplied in the same order, as a list. Thus, the computation can be performed as shown below.

end_effector_point = [1,2]
configuration_parameters = [3,4,5,6]
jacobian_at_the_given_configuration = jacobian_function(end_effector_point, configuration_parameters)
jacobian_at_the_given_configuration

The output produced by running the above code, is shown below.

array([[ 2,  4],
       [-2, -4],
       [ 1,  1]])

Mathematical concepts behind formulating the Jacobian can be found here.

Dimensional Synthesis

For dimensional synthesis, at least a performance parameter is required. One commonly used performance parameter in dimensional synthesis is the condition number. From the above Jacobian function, the condition number can be found by computing the ratio of maximum singular value and minimum singular value. This condition number has the bounds $(1,\infty)$. When the condition number is 1, that signifies the best performance in the context of condition number. The computation of condition number from a given Jacobian can be achieved by the code shown below:

from numpy.linalg import svd

def condition_number_func(jacobian_matrix):
    _, singular_values, _ = svd(jacobian_matrix)
    condition_number =  singular_values.max()/singular_values.min()
    return condition_number

For reference if we take the joint at the fixed link to be at the origin, the dimensional synthesis for optimal performance around the end-effector point $\textbf{a}=\hat{i}+2\hat{j}$ can be performed by the code shown below:

from scipy.optimize import minimize
from numpy import hstack, ones

end_effector_point = [1,2]
base_reference_point = [0,0]
r12 = base_reference_point
jac_fun = lambda y: jacobian_function(end_effector_point, hstack((base_reference_point,y)))
condition_number = lambda z: condition_number_func(jac_fun(z))
initial_guess = ones(len(jac.parameters)-len(base_reference_point))
res = minimize(condition_number, initial_guess)
r23 = res.x

The link lengths $l_2$ and $l_3$ are given by $l_2 = \lVert \textbf{r}_{12}-\textbf{r}_{23} \rVert$ and $l_3 = \lVert\textbf{r}_{23}-\textbf{a}\rVert$. By using the code below, the link lengths of 2R robot can be computed.

from numpy.linalg import norm

l2 = norm(r23-r12)
l3 = norm(r23-end_effector_point)
print(l2,l3,res.fun)

Output:

3.4641016153289317 2.236067976155377 1.0000000007904777

The above output shows that for $l_2=3.464$ and $l_3=2.236$, the robot has the condition number approximately equal to $1.0$, which signifies optimal performance.

Examples

Some examples (along with their mathematical derivations) can be found here.

Full Documentation

For full documentation, visit the documentation page here.

Community Guidelines

  • For contribution to the software:
  • For reporting issues with the software:
    • For reporting issues or problems, please use issues.
  • For support:
    • For any further support (including installation, usage, etc.), feel free to contact via suneeshjacob-at-gmail-dot-com.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

acrod-1.2.0.tar.gz (72.6 kB view details)

Uploaded Source

Built Distribution

acrod-1.2.0-py3-none-any.whl (38.5 kB view details)

Uploaded Python 3

File details

Details for the file acrod-1.2.0.tar.gz.

File metadata

  • Download URL: acrod-1.2.0.tar.gz
  • Upload date:
  • Size: 72.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for acrod-1.2.0.tar.gz
Algorithm Hash digest
SHA256 9450e0571d802624dea9cae88575d579a08e0636a0e6060012ba5e16ca992bc3
MD5 5d39455d44f384c10fb121edefa28c22
BLAKE2b-256 f14b69733a28fe8fc917506b7a00f7c213c7f90a96b1d21a586f46b9979e7f6c

See more details on using hashes here.

File details

Details for the file acrod-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: acrod-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 38.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for acrod-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 326bcf5a44361563e9ff004d870dfb331eefa4ef2065ce0fd4d32240a140af88
MD5 0305afa6f96d26d5e3a2db46b512f4ea
BLAKE2b-256 fe5142c9fa6fcbd46ab3f885c6bff4e2341dccd69149a3f0b8db46ba67bd9d5c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page