{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cinématique & espace de travail d'un manipulateur 2 axes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "source : https://sajidnisar.github.io/posts/python_kinematics_dh" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objectif\n", "\n", "Ce document fournit une base pour dériver et analyser la cinématique de manipulateurs robotiques séries en utilisant Python. L'objectif est de fournir un programme d’apprentissage, de calcul et de compréhension de la cinématique de robots série de manière agréable et interactive.\n", "\n", "Nous utilisons l’environnement Jupyter Notebook \\ Matplotlib qui offre un moyen flexible d’interagir avec le code et d’afficher des tracés en ligne. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prérequis\n", "\n", "**Côté technique**: la connaissance de la cinématique robot est recommandée. Pour une utilisation avancée, par exemple pour étendre cet exemple à des conceptions plus complexes, il est nécessaire de connaître la notation DH (Denavit Hartenberg classique). \n", "\n", "**Côté programmation** : des compétences de niveau débutant à intermédiaire avec Python et Jupyter notebook sont souhaitables. Les bibliothèques python utilisées sont:\n", "\n", " Sympy (pour le calcul symbolique)\n", " Numpy (pour la calcul numérique)\n", " Matplotlib (pour les tracés)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Configuration de l'environnement\n", "\n", "Nous importons ici la bibliothèque Sympy qui nous permettra de développer et de manipuler des expressions symboliques." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sympy as sp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dans SymPy, nous initialisons l'impression afin que toutes les expressions mathématiques puissent être rendues en notation mathématique standard." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from sympy.physics.vector import init_vprinting\n", "init_vprinting(use_latex='mathjax', pretty_print=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Le manipulateur plan 2 axes " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 3, "metadata": { "image/png": { "width": 300 } }, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image('fig/2rp_new.png', width=300)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pourquoi le manipulateur 2RP ?\n", "\n", "Presque tous les manuels de robotique commencent à enseigner la cinématique des robots à l'aide d'un exemple simple et fondamental : le *manipulateur plan à 2 axes* (2RP, R pour les liaisons *revolute* (-> rotoïde) et P le plan). Par souci de simplicité et comme point de départ, nous commençons également par l’exemple de ce manipulateur, qui devrait être facile à suivre et à comprendre.\n", "\n", "Maintenant, nous déclarons les symboles (longueur des liens, variables articulaire etc.) qui seront utilisés par la suite." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from sympy.physics.mechanics import dynamicsymbols" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left ( \\theta_{1}, \\quad \\theta_{2}, \\quad l_{1}, \\quad l_{2}, \\quad \\theta, \\quad \\alpha, \\quad a, \\quad d\\right )$$" ], "text/plain": [ "(theta1, theta2, l1, l2, theta, alpha, a, d)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta1, theta2, l1, l2, theta, alpha, a, d = dynamicsymbols('theta1 theta2 l1 l2 theta alpha a d')\n", "theta1, theta2, l1, l2, theta, alpha, a, d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cinématique utilisant la méthode DH\n", "\n", "Nous définissons les repères (*frame*) de notre manipulateur conformément à la convention classique DH. La méthode DH offre un moyen pratique d’exprimer la position et l’orienation d’un corps rigide sous forme de matrice en utilisant les longueurs de liaison, les angles de liaison, les angles de torsion et les décalages de liaison appropriés.\n", "\n", "### Table DH\n", "\n", "La table DH pour la manipulateur plan 2 axes décrit par la figure ci-dessous\n", "\n", "\"2rp_DH_table.png\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$i$: numéro corps , $\\alpha_i$: angle de torsion, $a_i$: longeur de la liaison $i$, $d_i$: offset liaison et $\\theta_i$: angle de la liaison." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transformation Homogène" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La matrice de transformation homogène standard est représentée par :
\n", "(cf https://en.wikipedia.org/wiki/Denavit-Hartenberg_parameters)\n", "\"DH_matrix.png\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "soit, avec les notations adoptées :" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\operatorname{cos}\\left(\\theta\\right) & - \\operatorname{sin}\\left(\\theta\\right) \\operatorname{cos}\\left(\\alpha\\right) & \\operatorname{sin}\\left(\\alpha\\right) \\operatorname{sin}\\left(\\theta\\right)\\\\\\operatorname{sin}\\left(\\theta\\right) & \\operatorname{cos}\\left(\\alpha\\right) \\operatorname{cos}\\left(\\theta\\right) & - \\operatorname{sin}\\left(\\alpha\\right) \\operatorname{cos}\\left(\\theta\\right)\\\\0 & \\operatorname{sin}\\left(\\alpha\\right) & \\operatorname{cos}\\left(\\alpha\\right)\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([\n", "[cos(theta), -sin(theta)*cos(alpha), sin(alpha)*sin(theta)],\n", "[sin(theta), cos(alpha)*cos(theta), -sin(alpha)*cos(theta)],\n", "[ 0, sin(alpha), cos(alpha)]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R = sp.Matrix([[sp.cos(theta), -sp.sin(theta)*sp.cos(alpha), sp.sin(theta)*sp.sin(alpha)],\n", " [sp.sin(theta), sp.cos(theta)*sp.cos(alpha), -sp.cos(theta)*sp.sin(alpha)],\n", " [0, sp.sin(alpha), sp.cos(alpha)]])\n", "R" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}a \\operatorname{cos}\\left(\\theta\\right)\\\\a \\operatorname{sin}\\left(\\theta\\right)\\\\d\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([\n", "[a*cos(theta)],\n", "[a*sin(theta)],\n", "[ d]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T = sp.Matrix([a*sp.cos(theta),a*sp.sin(theta),d])\n", "T" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}0 & 0 & 0 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([[0, 0, 0, 1]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "last_row = sp.Matrix([[0, 0, 0, 1]])\n", "last_row" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\operatorname{cos}\\left(\\theta\\right) & - \\operatorname{sin}\\left(\\theta\\right) \\operatorname{cos}\\left(\\alpha\\right) & \\operatorname{sin}\\left(\\alpha\\right) \\operatorname{sin}\\left(\\theta\\right) & a \\operatorname{cos}\\left(\\theta\\right)\\\\\\operatorname{sin}\\left(\\theta\\right) & \\operatorname{cos}\\left(\\alpha\\right) \\operatorname{cos}\\left(\\theta\\right) & - \\operatorname{sin}\\left(\\alpha\\right) \\operatorname{cos}\\left(\\theta\\right) & a \\operatorname{sin}\\left(\\theta\\right)\\\\0 & \\operatorname{sin}\\left(\\alpha\\right) & \\operatorname{cos}\\left(\\alpha\\right) & d\\\\0 & 0 & 0 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([\n", "[cos(theta), -sin(theta)*cos(alpha), sin(alpha)*sin(theta), a*cos(theta)],\n", "[sin(theta), cos(alpha)*cos(theta), -sin(alpha)*cos(theta), a*sin(theta)],\n", "[ 0, sin(alpha), cos(alpha), d],\n", "[ 0, 0, 0, 1]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = sp.Matrix.vstack(sp.Matrix.hstack(R, T), last_row)\n", "M" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transformation du repère $R_0$ au repère $R_1$\n", "\n", "En déduire $M_{01}$, la transformation du repère $R_0$ au repère $R_1$ :
\n", "*indication* : substituer respectivement *alpha*, *a*, *theta* et *d* dans M par *0*, *l1*, *theta1* et *0*" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\operatorname{cos}\\left(\\theta_{1}\\right) & - \\operatorname{sin}\\left(\\theta_{1}\\right) & 0 & l_{1} \\operatorname{cos}\\left(\\theta_{1}\\right)\\\\\\operatorname{sin}\\left(\\theta_{1}\\right) & \\operatorname{cos}\\left(\\theta_{1}\\right) & 0 & l_{1} \\operatorname{sin}\\left(\\theta_{1}\\right)\\\\0 & 0 & 1 & 0\\\\0 & 0 & 0 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([\n", "[cos(theta1), -sin(theta1), 0, l1*cos(theta1)],\n", "[sin(theta1), cos(theta1), 0, l1*sin(theta1)],\n", "[ 0, 0, 1, 0],\n", "[ 0, 0, 0, 1]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M01 = M.subs({alpha:0, a:l1, theta:theta1, d:0})\n", "M01" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Transformation du repère $R_1$ au repère $R_2$\n", "\n", "En déduire $M_{12}$, la matrice de transformation homogène du repère $R_1$ au repère $R_2$ :" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\operatorname{cos}\\left(\\theta_{2}\\right) & - \\operatorname{sin}\\left(\\theta_{2}\\right) & 0 & l_{2} \\operatorname{cos}\\left(\\theta_{2}\\right)\\\\\\operatorname{sin}\\left(\\theta_{2}\\right) & \\operatorname{cos}\\left(\\theta_{2}\\right) & 0 & l_{2} \\operatorname{sin}\\left(\\theta_{2}\\right)\\\\0 & 0 & 1 & 0\\\\0 & 0 & 0 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([\n", "[cos(theta2), -sin(theta2), 0, l2*cos(theta2)],\n", "[sin(theta2), cos(theta2), 0, l2*sin(theta2)],\n", "[ 0, 0, 1, 0],\n", "[ 0, 0, 0, 1]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M12 = M.subs({alpha:0, a:l2, theta:theta2, d:0})\n", "M12" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matrice de transformation homogène du repère $R_0$ au repère $R_2$\n", "\n", "En déduire la matrice $M_{02}$ de transformation homogène du repère $R_0$ au repère $R_2$ :" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}- \\operatorname{sin}\\left(\\theta_{1}\\right) \\operatorname{sin}\\left(\\theta_{2}\\right) + \\operatorname{cos}\\left(\\theta_{1}\\right) \\operatorname{cos}\\left(\\theta_{2}\\right) & - \\operatorname{sin}\\left(\\theta_{1}\\right) \\operatorname{cos}\\left(\\theta_{2}\\right) - \\operatorname{sin}\\left(\\theta_{2}\\right) \\operatorname{cos}\\left(\\theta_{1}\\right) & 0 & l_{1} \\operatorname{cos}\\left(\\theta_{1}\\right) - l_{2} \\operatorname{sin}\\left(\\theta_{1}\\right) \\operatorname{sin}\\left(\\theta_{2}\\right) + l_{2} \\operatorname{cos}\\left(\\theta_{1}\\right) \\operatorname{cos}\\left(\\theta_{2}\\right)\\\\\\operatorname{sin}\\left(\\theta_{1}\\right) \\operatorname{cos}\\left(\\theta_{2}\\right) + \\operatorname{sin}\\left(\\theta_{2}\\right) \\operatorname{cos}\\left(\\theta_{1}\\right) & - \\operatorname{sin}\\left(\\theta_{1}\\right) \\operatorname{sin}\\left(\\theta_{2}\\right) + \\operatorname{cos}\\left(\\theta_{1}\\right) \\operatorname{cos}\\left(\\theta_{2}\\right) & 0 & l_{1} \\operatorname{sin}\\left(\\theta_{1}\\right) + l_{2} \\operatorname{sin}\\left(\\theta_{1}\\right) \\operatorname{cos}\\left(\\theta_{2}\\right) + l_{2} \\operatorname{sin}\\left(\\theta_{2}\\right) \\operatorname{cos}\\left(\\theta_{1}\\right)\\\\0 & 0 & 1 & 0\\\\0 & 0 & 0 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([\n", "[-sin(theta1)*sin(theta2) + cos(theta1)*cos(theta2), -sin(theta1)*cos(theta2) - sin(theta2)*cos(theta1), 0, l1*cos(theta1) - l2*sin(theta1)*sin(theta2) + l2*cos(theta1)*cos(theta2)],\n", "[ sin(theta1)*cos(theta2) + sin(theta2)*cos(theta1), -sin(theta1)*sin(theta2) + cos(theta1)*cos(theta2), 0, l1*sin(theta1) + l2*sin(theta1)*cos(theta2) + l2*sin(theta2)*cos(theta1)],\n", "[ 0, 0, 1, 0],\n", "[ 0, 0, 0, 1]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M02 = M01*M12\n", "M02" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simplifier la matrice $M_{02}$ avec `sp.simplify` :" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\operatorname{cos}\\left(\\theta_{1} + \\theta_{2}\\right) & - \\operatorname{sin}\\left(\\theta_{1} + \\theta_{2}\\right) & 0 & l_{1} \\operatorname{cos}\\left(\\theta_{1}\\right) + l_{2} \\operatorname{cos}\\left(\\theta_{1} + \\theta_{2}\\right)\\\\\\operatorname{sin}\\left(\\theta_{1} + \\theta_{2}\\right) & \\operatorname{cos}\\left(\\theta_{1} + \\theta_{2}\\right) & 0 & l_{1} \\operatorname{sin}\\left(\\theta_{1}\\right) + l_{2} \\operatorname{sin}\\left(\\theta_{1} + \\theta_{2}\\right)\\\\0 & 0 & 1 & 0\\\\0 & 0 & 0 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "Matrix([\n", "[cos(theta1 + theta2), -sin(theta1 + theta2), 0, l1*cos(theta1) + l2*cos(theta1 + theta2)],\n", "[sin(theta1 + theta2), cos(theta1 + theta2), 0, l1*sin(theta1) + l2*sin(theta1 + theta2)],\n", "[ 0, 0, 1, 0],\n", "[ 0, 0, 0, 1]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M02 = sp.simplify(M02)\n", "M02" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Évaluation de la position de l'outil" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Déduire la position du poignet dans la direction x :" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$l_{1} \\operatorname{cos}\\left(\\theta_{1}\\right) + l_{2} \\operatorname{cos}\\left(\\theta_{1} + \\theta_{2}\\right)$$" ], "text/plain": [ "l1*cos(theta1) + l2*cos(theta1 + theta2)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "px = M02[0,3]\n", "px" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Déduire la position du poignet dans la direction y :" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$l_{1} \\operatorname{sin}\\left(\\theta_{1}\\right) + l_{2} \\operatorname{sin}\\left(\\theta_{1} + \\theta_{2}\\right)$$" ], "text/plain": [ "l1*sin(theta1) + l2*sin(theta1 + theta2)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "py = M02[1,3]\n", "py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour évaluer numériquement la position de la pointe, utiliser la fonction `lambdify` de Sympy avec les arguments *l1*, *l2*, *theta1* et *thetat2* :" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "fx = sp.lambdify((l1, l2, theta1, theta2), px)\n", "fy = sp.lambdify((l1, l2, theta1, theta2), py)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Espace de travail du manipulateur" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En prenant $l_1 = 50\\ mm$ et $l_2 = 20\\ mm$ tracer les courbes des fonctions `fx` et `fy` pour *theta1* et *theta2* variant de 0 à $2\\,\\pi$ :" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "import numpy as np\n", "d2r = np.deg2rad\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "theta11 = np.linspace(d2r(0),d2r(360),100)\n", "theta22 = np.linspace(d2r(0), d2r(360),100)\n", "theta1, theta2 = np.meshgrid(theta11, theta22)\n", "\n", "l1, l2 = 50, 20\n", "X = np.array(fx(l1, l2, theta1, theta2))\n", "Y = np.array(fy(l1, l2, theta1, theta2))\n", "\n", "ax.plot(X, Y, 'b')\n", "plt.grid()\n", "plt.axis('equal')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('