Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
254 views
1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
% Journal Article
3
% LaTeX Template
4
% Version 1.3 (9/9/13)
5
%
6
% This template has been downloaded from:
7
% http://www.LaTeXTemplates.com
8
%
9
% Original author:
10
% Frits Wenneker (http://www.howtotex.com)
11
%
12
% License:
13
% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)
14
%
15
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
16
17
%----------------------------------------------------------------------------------------
18
% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
19
%----------------------------------------------------------------------------------------
20
21
\documentclass[twoside]{article}
22
23
24
\usepackage[utf8]{inputenc} % Permite el uso de acentos directamente
25
\usepackage[sc]{mathpazo} % Use the Palatino font
26
\usepackage[T1]{fontenc} % Use 8-bit encoding that has 256 glyphs
27
\linespread{1.05} % Line spacing - Palatino needs more space between lines
28
\usepackage{microtype} % Slightly tweak font spacing for aesthetics
29
\usepackage{adjustbox}
30
\usepackage{amsmath} % Equations
31
\usepackage{amssymb} % Equations
32
\usepackage{color} % Allow colors to be defined
33
\usepackage{enumerate} % Needed for markdown enumerations to work
34
\usepackage{fancyvrb} % verbatim replacement that allows latex
35
\usepackage[hmarginratio=1:1,top=32mm,columnsep=20pt]{geometry} % Document margins
36
\usepackage{multicol} % Used for the two-column layout of the document
37
\usepackage[hang, small,labelfont=bf,up,textfont=it,up]{caption} % Custom captions under/above floats in tables or figures
38
\usepackage{booktabs} % Horizontal rules in tables
39
\usepackage{float} % Required for tables and figures in the multi-column environment - they need to be placed in specific locations with the [H] (e.g. \begin{table}[H])
40
\usepackage{hyperref} % For hyperlinks in the PDF
41
\usepackage{multirow} % para las tablas
42
\usepackage{lettrine} % The lettrine is the first enlarged letter at the beginning of the text
43
\usepackage{paralist} % Used for the compactitem environment which makes bullet points with less space between them
44
45
\usepackage{abstract} % Allows abstract customization
46
\renewcommand{\abstractnamefont}{\normalfont\bfseries} % Set the "Abstract" text to bold
47
\renewcommand{\abstracttextfont}{\normalfont\small\itshape} % Set the abstract itself to small italic text
48
49
\usepackage{titlesec} % Allows customization of titles
50
\renewcommand\thesection{\Roman{section}} % Roman numerals for the sections
51
\renewcommand\thesubsection{\Roman{subsection}} % Roman numerals for subsections
52
\titleformat{\section}[block]{\large\scshape\centering}{\thesection.}{1em}{} % Change the look of the section titles
53
\titleformat{\subsection}[block]{\large}{\thesubsection.}{1em}{} % Change the look of the section titles
54
55
\usepackage{fancyhdr} % Headers and footers
56
\pagestyle{fancy} % All pages have headers and footers
57
\fancyhead{} % Blank out the default header
58
\fancyfoot{} % Blank out the default footer
59
\fancyhead[C]{ESTUDIO DE LA CINEMÁTICA DIRECTA Y CINEMÁTICA INVERSA DE UN MANIPULADOR PLANO DE 3 GRADOS DE LIBERTAD $\bullet$ Junio 2015 $\bullet$} % Custom header text
60
\fancyfoot[RO,LE]{\thepage} % Custom footer text
61
\usepackage{graphicx}
62
\definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
63
\definecolor{darkorange}{rgb}{.71,0.21,0.01}
64
\definecolor{darkgreen}{rgb}{.12,.54,.11}
65
\definecolor{myteal}{rgb}{.26, .44, .56}
66
\definecolor{gray}{gray}{0.45}
67
\definecolor{lightgray}{gray}{.95}
68
\definecolor{mediumgray}{gray}{.8}
69
\definecolor{inputbackground}{rgb}{.95, .95, .85}
70
\definecolor{outputbackground}{rgb}{.95, .95, .95}
71
\definecolor{traceback}{rgb}{1, .95, .95}
72
% ansi colors
73
\definecolor{red}{rgb}{.6,0,0}
74
\definecolor{green}{rgb}{0,.65,0}
75
\definecolor{brown}{rgb}{0.6,0.6,0}
76
\definecolor{blue}{rgb}{0,.145,.698}
77
\definecolor{purple}{rgb}{.698,.145,.698}
78
\definecolor{cyan}{rgb}{0,.698,.698}
79
\definecolor{lightgray}{gray}{0.5}
80
81
% bright ansi colors
82
\definecolor{darkgray}{gray}{0.25}
83
\definecolor{lightred}{rgb}{1.0,0.39,0.28}
84
\definecolor{lightgreen}{rgb}{0.48,0.99,0.0}
85
\definecolor{lightblue}{rgb}{0.53,0.81,0.92}
86
\definecolor{lightpurple}{rgb}{0.87,0.63,0.87}
87
\definecolor{lightcyan}{rgb}{0.5,1.0,0.83}
88
89
% commands and environments needed by pandoc snippets
90
% extracted from the output of `pandoc -s`
91
\providecommand{\tightlist}{%
92
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
93
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
94
% Add ',fontsize=\small' for more characters per line
95
\newenvironment{Shaded}{}{}
96
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}}
97
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}}
98
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
99
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
100
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}}
101
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
102
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}}
103
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}}
104
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}}
105
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
106
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}}
107
\newcommand{\RegionMarkerTok}[1]{{#1}}
108
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}}
109
\newcommand{\NormalTok}[1]{{#1}}
110
111
% Define a nice break command that doesn't care if a line doesn't already
112
% exist.
113
\def\br{\hspace*{\fill} \\* }
114
% Math Jax compatability definitions
115
\def\gt{>}
116
\def\lt{<}
117
% Document parameters
118
\title{C?digo\_Proyecto\_2\_de\_robotica}
119
120
121
122
123
% Pygments definitions
124
125
\makeatletter
126
\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax%
127
\let\PY@ul=\relax \let\PY@tc=\relax%
128
\let\PY@bc=\relax \let\PY@ff=\relax}
129
\def\PY@tok#1{\csname PY@tok@#1\endcsname}
130
\def\PY@toks#1+{\ifx\relax#1\empty\else%
131
\PY@tok{#1}\expandafter\PY@toks\fi}
132
\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{%
133
\PY@it{\PY@bf{\PY@ff{#1}}}}}}}
134
\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}}
135
136
\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
137
\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
138
\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}}
139
\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf}
140
\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
141
\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
142
\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
143
\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
144
\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
145
\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}}
146
\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit}
147
\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
148
\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
149
\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
150
\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}}
151
\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
152
\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
153
\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}}
154
\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}}
155
\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
156
\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}}
157
\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}}
158
\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
159
\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
160
\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
161
\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}}
162
\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}}
163
\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
164
\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
165
\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
166
\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
167
\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
168
\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
169
\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
170
\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
171
\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
172
\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
173
\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
174
\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
175
\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
176
\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}}
177
\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
178
\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}
179
\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
180
\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}}
181
\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}}
182
\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
183
\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
184
\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
185
\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
186
\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
187
\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
188
\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
189
\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
190
\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
191
\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}}
192
\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}}
193
\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
194
\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}}
195
\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}}
196
\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}}
197
198
\def\PYZbs{\char`\\}
199
\def\PYZus{\char`\_}
200
\def\PYZob{\char`\{}
201
\def\PYZcb{\char`\}}
202
\def\PYZca{\char`\^}
203
\def\PYZam{\char`\&}
204
\def\PYZlt{\char`\<}
205
\def\PYZgt{\char`\>}
206
\def\PYZsh{\char`\#}
207
\def\PYZpc{\char`\%}
208
\def\PYZdl{\char`\$}
209
\def\PYZhy{\char`\-}
210
\def\PYZsq{\char`\'}
211
\def\PYZdq{\char`\"}
212
\def\PYZti{\char`\~}
213
% for compatibility with earlier versions
214
\def\PYZat{@}
215
\def\PYZlb{[}
216
\def\PYZrb{]}
217
\makeatother
218
219
220
% Exact colors from NB
221
\definecolor{incolor}{rgb}{0.0, 0.0, 0.5}
222
\definecolor{outcolor}{rgb}{0.545, 0.0, 0.0}
223
224
225
226
227
% Prevent overflowing lines due to hard-to-break entities
228
\sloppy
229
% Setup hyperref package
230
\hypersetup{
231
breaklinks=true, % so long urls are correctly broken across lines
232
colorlinks=true,
233
urlcolor=blue,
234
linkcolor=darkorange,
235
citecolor=darkgreen,
236
}
237
% Slightly bigger margins than the latex defaults
238
239
\geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in}
240
241
242
%----------------------------------------------------------------------------------------
243
% TITLE SECTION
244
%----------------------------------------------------------------------------------------
245
246
\title{\vspace{-15mm}\fontsize{24pt}{10pt}\selectfont\textbf{ESTUDIO DE LA CINEMÁTICA DIRECTA Y CINEMÁTICA INVERSA DE UN MANIPULADOR PLANO DE 3 GRADOS DE LIBERTAD}} % Article title
247
248
\author{
249
\large
250
\textsc{Eduardo Vieira}\\% Your name
251
\normalsize Universidad Central de Venezuela \\ % Your institution
252
\normalsize Facultad de Ingeniería \\
253
\normalsize Escuela de Ingeniería Mecánica \\
254
\normalsize eduardo.vieira@ucv.ve \\ % Your email address
255
\normalsize Profesor: Arturo Gil \\
256
\vspace{-5mm}
257
}
258
\date{}
259
260
%----------------------------------------------------------------------------------------
261
262
\begin{document}
263
264
\maketitle % Insert title
265
266
\thispagestyle{fancy} % All pages have headers and footers
267
268
%----------------------------------------------------------------------------------------
269
% ABSTRACT
270
%----------------------------------------------------------------------------------------
271
272
%\begin{abstract}
273
274
%\noindent \lipsum[1] % Dummy abstract text
275
276
%\end{abstract}
277
278
%----------------------------------------------------------------------------------------
279
% ARTICLE CONTENTS
280
%----------------------------------------------------------------------------------------
281
282
\begin{multicols}{2} % Two-column layout throughout the main article text
283
284
\section{Introducción}
285
286
\lettrine[nindent=0em,lines=3]{L} a cinemática del robot estudia el movimiento del mismo con respecto a un sistema de referencia sin considerar las fuerzas que intervienen. Así, la cinemática se interesa por la descripción analítica del movimiento espacial del robot como una función del tiempo, y en particular por las relaciones entre la posición y la orientación del extremo final del robot con los valores que toman sus coordenadas articulares. \\
287
Existen dos problemas fundamentales a resolver en la cinemática del robot, el primero de ellos se conoce como el problema cinemático directo, y consiste en determinar cuál es la posición y orientación del extremo final del robot, con respecto a un sistema de coordenadas que se toma como referencia, conocidos los valores de las articulaciones y los parámetros geométricos de los elementos del robot; el segundo, denominado problema cinemático inverso, resuelve la configuración que debe adoptar el robot para una posición y orientación en su extremo conocidas. \\
288
En el presente trabajo se estudiará el problema cinemático directo e inverso para un manipulador plano de 3 grados de libertad. Además de desarrollará un algoritmo en python para la solución interactiva del problema.
289
290
%------------------------------------------------
291
292
\section{El Problema}
293
\subsection{Se tiene}
294
\textbf{Se tiene:} El siguiente manipulador plano \\
295
\begin{center}
296
\includegraphics[width=200pt,keepaspectratio=true]{./Robot.png}
297
% P&ID_anti-suge.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
298
\textit{Figura 1: Manipulador plano de 3 grados de libertad}
299
\end{center}
300
301
302
\subsection{Se pide}
303
\begin{enumerate}
304
\def\labelenumi{\arabic{enumi}.}
305
\itemsep1pt\parskip0pt\parsep0pt
306
\item
307
Definir la matriz de Denvit-Hatenberg.
308
309
\def\labelenumii{\arabic{enumii}.}
310
\setcounter{enumii}{1}
311
\itemsep1pt\parskip0pt\parsep0pt
312
\item
313
Estudiar la cinématica directa.
314
315
\def\labelenumiii{\arabic{enumiii}.}
316
\setcounter{enumiii}{2}
317
\itemsep1pt\parskip0pt\parsep0pt
318
\item
319
Estudiar la cinématica inversa.
320
321
\end{enumerate}
322
323
324
\subsection{Cinemática Directa}
325
\subsubsection{Algoritmo de Denavit-Hartenberg}
326
\begin{enumerate}
327
\def\labelenumi{\arabic{enumi}.}
328
\itemsep1pt\parskip0pt\parsep0pt
329
\item
330
Numerar los eslabones comenzando con \(1\) (primer eslabón móvil dela
331
cadena) y acabando con \(n\) (último eslabón móvil). Se numerará como
332
eslabón \(0\) a la base fija del robot.
333
\end{enumerate}
334
335
\begin{enumerate}
336
\def\labelenumi{\arabic{enumi}.}
337
\setcounter{enumi}{1}
338
\itemsep1pt\parskip0pt\parsep0pt
339
\item
340
Numerar cada articulación comenzando por \(1\) (la correspondiente al
341
primer grado de libertad) y acabando en \(n\).
342
\end{enumerate}
343
344
\begin{enumerate}
345
\def\labelenumi{\arabic{enumi}.}
346
\setcounter{enumi}{2}
347
\itemsep1pt\parskip0pt\parsep0pt
348
\item
349
Localizar el eje de cada articulación. Si esta es rotativa, el eje
350
será su propio eje de giro. Si es prismática, será el eje a lo largo
351
del cual se produce el desplazamiento.
352
\end{enumerate}
353
354
\begin{enumerate}
355
\def\labelenumi{\arabic{enumi}.}
356
\setcounter{enumi}{3}
357
\itemsep1pt\parskip0pt\parsep0pt
358
\item
359
Para \(i\) de \(0\) a \(n-1\), situar el eje \(Z_i\), sobre el eje de
360
la articulación \(i+1\).
361
\end{enumerate}
362
363
\begin{enumerate}
364
\def\labelenumi{\arabic{enumi}.}
365
\setcounter{enumi}{4}
366
\itemsep1pt\parskip0pt\parsep0pt
367
\item
368
Situar el origen del sistema de la base (\(S_0\)) en cualquier punto
369
del eje \(Z_0\). Los ejes \(X_0\) e \(Y_0\) se situaran dé modo que
370
formen un sistema dextrógiro con \(Z_0\).
371
\end{enumerate}
372
373
\begin{enumerate}
374
\def\labelenumi{\arabic{enumi}.}
375
\setcounter{enumi}{5}
376
\itemsep1pt\parskip0pt\parsep0pt
377
\item
378
Para \(i\) de \(1\) a \(n-1\), situar el sistema (\(S_i\)) (solidario
379
al eslabón \(i\)) en la intersección del eje \(Z_i\) con la línea
380
normal común a \(Z_{i-1}\) y \(Z_i\). Si ambos ejes se cortasen se
381
situaría (\(S_i\)) en el punto de corte. Si fuesen paralelos (\(S_i\))
382
se situaría en la articulación \(i+1\).
383
\end{enumerate}
384
385
\begin{enumerate}
386
\def\labelenumi{\arabic{enumi}.}
387
\setcounter{enumi}{6}
388
\itemsep1pt\parskip0pt\parsep0pt
389
\item
390
Situar $X_i$ en la línea normal común a $Z_{i-1}$ y $Z_{i}$.
391
\end{enumerate}
392
393
\begin{enumerate}
394
\def\labelenumi{\arabic{enumi}.}
395
\setcounter{enumi}{7}
396
\itemsep1pt\parskip0pt\parsep0pt
397
\item
398
Situar $Y_i$ de modo que forme un sistema dextrógiro con $X_i$ y $Z_i$.
399
\end{enumerate}
400
401
\begin{enumerate}
402
\def\labelenumi{\arabic{enumi}.}
403
\setcounter{enumi}{8}
404
\itemsep1pt\parskip0pt\parsep0pt
405
\item
406
Situar el sistema ($S_n$) en el extremo del robot de modo que $Z_n$ coincida
407
con la dirección de $Z_{n-1}$ y $X_n$ sea normal a $Z_{n-1}$ y $Z_n$.
408
\end{enumerate}
409
410
\begin{enumerate}
411
\def\labelenumi{\arabic{enumi}.}
412
\setcounter{enumi}{9}
413
\itemsep1pt\parskip0pt\parsep0pt
414
\item
415
Obtener $\theta_i$ como el ángulo que hay que girar en torno a $Z_{i-1}$ para que
416
$X_{i-1}$ y $X_i$ queden paralelos.
417
\end{enumerate}
418
419
\begin{enumerate}
420
\def\labelenumi{\arabic{enumi}.}
421
\setcounter{enumi}{10}
422
\itemsep1pt\parskip0pt\parsep0pt
423
\item
424
Obtener $D_i$ como la distancia, medida a lo largo de $Z_{i-1}$, que habría
425
que desplazar ($S_{i-1}$) para que $X_i$ y $X_{i-1}$ quedasen alineados.
426
\end{enumerate}
427
428
\begin{enumerate}
429
\def\labelenumi{\arabic{enumi}.}
430
\setcounter{enumi}{11}
431
\itemsep1pt\parskip0pt\parsep0pt
432
\item
433
Obtener $A_i$ como la distancia medida a lo largo de $X_i$ (que ahora
434
coincidiría con $X_{i-1}$) que habría que desplazar el nuevo ($S_{i-1}$) para
435
que su origen coincidiese con ($S_i$).
436
\end{enumerate}
437
438
\begin{enumerate}
439
\def\labelenumi{\arabic{enumi}.}
440
\setcounter{enumi}{12}
441
\itemsep1pt\parskip0pt\parsep0pt
442
\item
443
Obtener $\alpha_i$ como el ángulo que habría que girar entorno a $X_i$ (que ahora
444
coincidiría con $X_{i-1}$), para que el nuevo ($S_{i-1}$) coincidiese totalmente
445
con ($S_i$).
446
\end{enumerate}
447
448
\begin{enumerate}
449
\def\labelenumi{\arabic{enumi}.}
450
\setcounter{enumi}{13}
451
\itemsep1pt\parskip0pt\parsep0pt
452
\item
453
Obtener las matrices de transformación $^{i-1}A_i$.
454
\end{enumerate}
455
456
\begin{enumerate}
457
\def\labelenumi{\arabic{enumi}.}
458
\setcounter{enumi}{14}
459
\itemsep1pt\parskip0pt\parsep0pt
460
\item
461
Obtener la matriz de transformación que relaciona el sistema de la
462
base con el del extremo del robot $T = ^0A_i ^1A_2\ldots{} ^{n-1}A_n$.
463
\end{enumerate}
464
465
\begin{enumerate}
466
\def\labelenumi{\arabic{enumi}.}
467
\setcounter{enumi}{15}
468
\itemsep1pt\parskip0pt\parsep0pt
469
\item
470
La matriz $T$ define la orientación (submatriz de rotación) y posición
471
(submatriz de traslación) del extremo referido ala base en función de
472
las n coordenadas articulares.
473
\end{enumerate}
474
475
Al aplicar el algorítmo quedaría
476
\begin{center}
477
\includegraphics[width=200pt,keepaspectratio=true]{./RobotDH5.png}
478
% P&ID_anti-suge.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
479
\textit{Figura 2: Algoritmo de Denavit-Hartenberg aplicado al manipulador}
480
\end{center}
481
Los paŕametros para cada articulación son
482
483
\begin{center}
484
\includegraphics[width=240pt,keepaspectratio=true]{./Tabla_DH.png}
485
% P&ID_anti-suge.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
486
\textit{Tabla 1: Parámetros de Denavit-Hartenberg}
487
\end{center}
488
489
La matriz de transformación \(^{0}T_{1}\) será
490
\begin{equation}
491
\left[\begin{matrix}\cos{\left (q_{1} \right )} & - \sin{\left (q_{1} \right )} & 0 & 4 \cos{\left (q_{1} \right )}\\\sin{\left (q_{1} \right )} & \cos{\left (q_{1} \right )} & 0 & 4 \sin{\left (q_{1} \right )}\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]
492
\end{equation}
493
494
$^{1}T_{2}$
495
\begin{equation}
496
\left[\begin{matrix}- \cos{\left (q_{2} \right )} & \sin{\left (q_{2} \right )} & 0 & - 3 \cos{\left (q_{2} \right )}\\- \sin{\left (q_{2} \right )} & - \cos{\left (q_{2} \right )} & 0 & - 3 \sin{\left (q_{2} \right )}\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]
497
\end{equation}
498
499
Y finalmente $^{2}T_{3}$
500
\begin{equation}
501
\left[\begin{matrix}- \cos{\left (q_{3} \right )} & \sin{\left (q_{3} \right )} & 0 & - 2 \cos{\left (q_{3} \right )}\\- \sin{\left (q_{3} \right )} & - \cos{\left (q_{3} \right )} & 0 & - 2 \sin{\left (q_{3} \right )}\\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]
502
\end{equation}
503
504
La matriz de transformación que relaciona el extremo de la herramienta del robot con el sistema definido en la base $T$ será $T = ^{0}T_{1} \cdot ^{1}T_{2} \cdot ^{2}T_{3}$
505
506
\begin{equation}
507
\left[\begin{matrix}\alpha & \beta & 0 & \gamma\\\ \delta & \epsilon & 0 & \kappa \\0 & 0 & 1 & 0\\0 & 0 & 0 & 1\end{matrix}\right]
508
\end{equation}
509
Donde $\alpha=- \left(\sin{\left (q_{1} \right )} \sin{\left (q_{2} \right )} - \cos{\left (q_{1} \right )} \cos{\left (q_{2} \right )}\right) \cos{\left (q_{3} \right )} - \left(\sin{\left (q_{1} \right )} \cos{\left (q_{2} \right )} + \sin{\left (q_{2} \right )} \cos{\left (q_{1} \right )}\right) \sin{\left (q_{3} \right )}$ \\
510
511
\vspace*{1\baselineskip}
512
$\beta=\left(\sin{\left (q_{1} \right )} \sin{\left (q_{2} \right )} - \cos{\left (q_{1} \right )} \cos{\left (q_{2} \right )}\right) \sin{\left (q_{3} \right )} - \left(\sin{\left (q_{1} \right )} \cos{\left (q_{2} \right )} + \sin{\left (q_{2} \right )} \cos{\left (q_{1} \right )}\right) \cos{\left (q_{3} \right )}$ \\
513
514
\vspace*{1\baselineskip}
515
$\gamma=- 2 \left(\sin{\left (q_{1} \right )} \sin{\left (q_{2} \right )} - \cos{\left (q_{1} \right )} \cos{\left (q_{2} \right )}\right) \cos{\left (q_{3} \right )} - 2 \left(\sin{\left (q_{1} \right )} \cos{\left (q_{2} \right )} + \sin{\left (q_{2} \right )} \cos{\left (q_{1} \right )}\right) \sin{\left (q_{3} \right )} + 3 \sin{\left (q_{1} \right )} \sin{\left (q_{2} \right )} - 3 \cos{\left (q_{1} \right )} \cos{\left (q_{2} \right )} + 4 \cos{\left (q_{1} \right )}$\\
516
517
\vspace*{1\baselineskip}
518
$\delta=- \left(\sin{\left (q_{1} \right )} \sin{\left (q_{2} \right )} - \cos{\left (q_{1} \right )} \cos{\left (q_{2} \right )}\right) \sin{\left (q_{3} \right )} - \left(- \sin{\left (q_{1} \right )} \cos{\left (q_{2} \right )} - \sin{\left (q_{2} \right )} \cos{\left (q_{1} \right )}\right) \cos{\left (q_{3} \right )} $\\
519
520
\vspace*{1\baselineskip}
521
$\epsilon=- \left(\sin{\left (q_{1} \right )} \sin{\left (q_{2} \right )} - \cos{\left (q_{1} \right )} \cos{\left (q_{2} \right )}\right) \cos{\left (q_{3} \right )} + \left(- \sin{\left (q_{1} \right )} \cos{\left (q_{2} \right )} - \sin{\left (q_{2} \right )} \cos{\left (q_{1} \right )}\right) \sin{\left (q_{3} \right )} $\\
522
523
\vspace*{1\baselineskip}
524
$\kappa=- 2 \left(\sin{\left (q_{1} \right )} \sin{\left (q_{2} \right )} - \cos{\left (q_{1} \right )} \cos{\left (q_{2} \right )}\right) \sin{\left (q_{3} \right )} - 2 \left(- \sin{\left (q_{1} \right )} \cos{\left (q_{2} \right )} - \sin{\left (q_{2} \right )} \cos{\left (q_{1} \right )}\right) \cos{\left (q_{3} \right )} - 3 \sin{\left (q_{1} \right )} \cos{\left (q_{2} \right )} + 4 \sin{\left (q_{1} \right )} - 3 \sin{\left (q_{2} \right )} \cos{\left (q_{1} \right )}$
525
\vspace*{1\baselineskip}
526
Sean $x_r$, $y_r$ y $z_r$ las coordenadas de un punto medidas desde el sistema de referencia ubicado en el extremo del robot.
527
\begin{equation}
528
P_r = \left[\begin{matrix}x_{r}\\y_{r}\\z_{r}\\1\end{matrix}\right]
529
\end{equation}
530
Entonces, el mismo punto medido en el sistema de referencia de la base será $T \cdot P_r$
531
532
533
$x = x_{r} (- (\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \cos{ (q_{3} )} \\ - (\sin{ (q_{1} )} \cos{ (q_{2} )} + \sin{ (q_{2} )} \cos{ (q_{1} )}) \sin{ (q_{3} )}) + y_{r} ((\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \sin{ (q_{3} )} - (\sin{ (q_{1} )} \cos{ (q_{2} )} + \sin{ (q_{2} )} \cos{ (q_{1} )}) \cos{ (q_{3} )}) - 2 (\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \cos{ (q_{3} )} - 2 (\sin{ (q_{1} )} \cos{ (q_{2} )} + \sin{ (q_{2} )} \cos{ (q_{1} )}) \sin{ (q_{3} )} + 3 \sin{ (q_{1} )} \sin{ (q_{2} )} - 3 \cos{ (q_{1} )} \cos{ (q_{2} )} + 4 \cos{ (q_{1} )}$\\
534
535
\vspace*{1\baselineskip}
536
$y = x_{r} (- (\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \sin{ (q_{3} )} - (- \sin{ (q_{1} )} \cos{ (q_{2} )} - \sin{ (q_{2} )} \cos{ (q_{1} )}) \cos{ (q_{3} )}) + y_{r} (- (\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \cos{ (q_{3} )} + (- \sin{ (q_{1} )} \cos{ (q_{2} )} - \sin{ (q_{2} )} \cos{ (q_{1} )}) \sin{ (q_{3} )}) - 2 (\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \sin{ (q_{3} )} - 2 (- \sin{ (q_{1} )} \cos{ (q_{2} )} - \sin{ (q_{2} )} \cos{ (q_{1} )}) \cos{ (q_{3} )} - 3 \sin{ (q_{1} )} \cos{ (q_{2} )} + 4 \sin{ (q_{1} )} - 3 \sin{ (q_{2} )} \cos{ (q_{1} )}$
537
\vspace*{1\baselineskip}
538
539
Si colocamos el sistema de referencia en la base ($x_r$ y $y_r$ iguales a cero) el punto que determina la ubicación de la
540
herramienta se obtiene de la siguiente manera \\
541
$x=- 2 (\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \cos{ (q_{3} )} - 2 (\sin{ (q_{1} )} \cos{ (q_{2} )} + \sin{ (q_{2} )} \cos{ (q_{1} )}) \sin{ (q_{3} )} + 3 \sin{ (q_{1} )} \sin{ (q_{2} )} - 3 \cos{ (q_{1} )} \cos{ (q_{2} )} + 4 \cos{ (q_{1} )}$
542
543
\vspace*{1\baselineskip}
544
$y=- 2 (\sin{ (q_{1} )} \sin{ (q_{2} )} - \cos{ (q_{1} )} \cos{ (q_{2} )}) \sin{ (q_{3} )} - 2 (- \sin{ (q_{1} )} \cos{ (q_{2} )} - \sin{ (q_{2} )} \cos{ (q_{1} )}) \cos{ (q_{3} )} - 3 \sin{ (q_{1} )} \cos{ (q_{2} )} + 4 \sin{ (q_{1} )} - 3 \sin{ (q_{2} )} \cos{ (q_{1} )}$
545
546
\end{multicols}
547
\subsubsection{Código en python}
548
En la siguiente entrada determinaremos la posición de la herramienta modificando los valores de
549
$q_1$, $q_2$ y $q_3$ en los widgets interactivos
550
551
\begin{Verbatim}[commandchars=\\\{\}]
552
{\color{incolor}In [{\color{incolor}1}]:} \PY{k+kn}{import} \PY{n+nn}{matplotlib.pyplot} \PY{k+kn}{as} \PY{n+nn}{plt}
553
\PY{c}{\PYZsh{}plt.style.use(\PYZsq{}bmh\PYZsq{})}
554
\PY{k+kn}{from} \PY{n+nn}{numpy} \PY{k+kn}{import} \PY{n}{sin}\PY{p}{,} \PY{n}{cos}\PY{p}{,} \PY{n}{pi}\PY{p}{,} \PY{n}{arctan2}
555
\PY{k+kn}{from} \PY{n+nn}{IPython.html.widgets} \PY{k+kn}{import} \PY{n}{interact}\PY{p}{,} \PY{n}{FloatSlider}\PY{p}{,} \PY{n}{interactive}
556
\PY{k+kn}{from} \PY{n+nn}{IPython.display} \PY{k+kn}{import} \PY{n}{display}
557
\PY{o}{\PYZpc{}}\PY{k}{matplotlib} inline
558
\PY{n}{fact} \PY{o}{=} \PY{l+m+mi}{180} \PY{o}{/} \PY{n}{pi}
559
\PY{k}{def} \PY{n+nf}{punto}\PY{p}{(}\PY{n}{q1}\PY{p}{,}\PY{n}{q2}\PY{p}{,}\PY{n}{q3}\PY{p}{)}\PY{p}{:}
560
\PY{n}{x} \PY{o}{=} \PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{p}{(}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q3}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{l+m+mi}{2} \PY{o}{*} \PYZbs{}
561
\PY{p}{(}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)} \PY{o}{+} \PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{p}{)}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q3}\PY{p}{)} \PY{o}{+} \PY{l+m+mi}{3}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)} \PY{o}{\PYZhy{}} \PYZbs{}
562
\PY{l+m+mi}{3}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)} \PY{o}{+} \PY{l+m+mi}{4}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}
563
564
\PY{n}{y} \PY{o}{=} \PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{p}{(}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{p}{)}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q3}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{l+m+mi}{2} \PY{o}{*} \PYZbs{}
565
\PY{p}{(}\PY{o}{\PYZhy{}}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q3}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{l+m+mi}{3}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)} \PY{o}{+} \PYZbs{}
566
\PY{l+m+mi}{4}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{l+m+mi}{3}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}
567
568
\PY{n}{x1} \PY{o}{=} \PY{l+m+mi}{4}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}
569
\PY{n}{y1} \PY{o}{=} \PY{l+m+mi}{4}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}
570
\PY{n}{x2} \PY{o}{=} \PY{l+m+mi}{3}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{l+m+mi}{3}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{o}{+}\PY{l+m+mi}{4}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}
571
\PY{n}{y2} \PY{o}{=} \PY{o}{\PYZhy{}}\PY{l+m+mi}{3}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{o}{+}\PY{l+m+mi}{4}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q1}\PY{p}{)}\PY{o}{\PYZhy{}}\PY{l+m+mi}{3}\PY{o}{*}\PY{n}{sin}\PY{p}{(}\PY{n}{q2}\PY{p}{)}\PY{o}{*}\PY{n}{cos}\PY{p}{(}\PY{n}{q1}\PY{p}{)}
572
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{r+}\PY{l+s}{\PYZsq{}}\PY{p}{)}
573
\PY{n}{plt}\PY{o}{.}\PY{n}{ylim}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m+mf}{9.5}\PY{p}{,}\PY{l+m+mf}{9.5}\PY{p}{)}
574
\PY{n}{plt}\PY{o}{.}\PY{n}{xlim}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m+mf}{9.5}\PY{p}{,}\PY{l+m+mf}{9.5}\PY{p}{)}
575
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{n}{x1}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{n}{y1}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{k\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
576
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{n}{x1}\PY{p}{,}\PY{n}{x2}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{n}{y1}\PY{p}{,}\PY{n}{y2}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{r\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
577
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{n}{x2}\PY{p}{,}\PY{n}{x}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{n}{y2}\PY{p}{,}\PY{n}{y}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{b\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
578
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{k\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
579
\PY{n}{plt}\PY{o}{.}\PY{n}{grid}\PY{p}{(}\PY{n+nb+bp}{True}\PY{p}{)}
580
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{x [m] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{x}
581
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{y [m] = }\PY{l+s}{\PYZdq{}}\PY{p}{,}\PY{n}{y}
582
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{Ángulo [deg] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{fact} \PY{o}{*} \PY{n}{arctan2}\PY{p}{(}\PY{p}{(}\PY{n}{y}\PY{o}{\PYZhy{}}\PY{n}{y2}\PY{p}{)}\PY{p}{,}\PY{p}{(}\PY{n}{x}\PY{o}{\PYZhy{}}\PY{n}{x2}\PY{p}{)}\PY{p}{)}
583
\PY{n}{q1\PYZus{}slider} \PY{o}{=} \PY{n}{FloatSlider}\PY{p}{(}\PY{n+nb}{min}\PY{o}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,} \PY{n+nb}{max}\PY{o}{=}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,} \PY{n}{step}\PY{o}{=}\PY{l+m+mf}{0.1}\PY{p}{,} \PY{n}{value}\PY{o}{=}\PY{l+m+mi}{3}\PY{o}{*}\PY{n}{pi}\PY{o}{/}\PY{l+m+mi}{4}\PY{p}{,} \PYZbs{}
584
\PY{n}{description}\PY{o}{=}\PY{l+s}{\PYZsq{}}\PY{l+s}{Angulo \PYZdl{}q\PYZus{}1\PYZdl{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
585
\PY{n}{q2\PYZus{}slider} \PY{o}{=} \PY{n}{FloatSlider}\PY{p}{(}\PY{n+nb}{min}\PY{o}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,} \PY{n+nb}{max}\PY{o}{=}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,} \PY{n}{step}\PY{o}{=}\PY{l+m+mf}{0.1}\PY{p}{,} \PY{n}{value}\PY{o}{=}\PY{n}{pi}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{,} \PYZbs{}
586
\PY{n}{description}\PY{o}{=}\PY{l+s}{\PYZsq{}}\PY{l+s}{Angulo \PYZdl{}q\PYZus{}2\PYZdl{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
587
\PY{n}{q3\PYZus{}slider} \PY{o}{=} \PY{n}{FloatSlider}\PY{p}{(}\PY{n+nb}{min}\PY{o}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,} \PY{n+nb}{max}\PY{o}{=}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{,} \PY{n}{step}\PY{o}{=}\PY{l+m+mf}{0.1}\PY{p}{,} \PY{n}{value}\PY{o}{=}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{o}{/}\PY{l+m+mi}{3}\PY{p}{,} \PYZbs{}
588
\PY{n}{description}\PY{o}{=}\PY{l+s}{\PYZsq{}}\PY{l+s}{Angulo \PYZdl{}q\PYZus{}3\PYZdl{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
589
\PY{n}{w}\PY{o}{=}\PY{n}{interactive}\PY{p}{(}\PY{n}{punto}\PY{p}{,}\PY{n}{q1}\PY{o}{=}\PY{n}{q1\PYZus{}slider}\PY{p}{,}\PY{n}{q2}\PY{o}{=}\PY{n}{q2\PYZus{}slider}\PY{p}{,}\PY{n}{q3}\PY{o}{=}\PY{n}{q3\PYZus{}slider}\PY{p}{)}
590
\PY{n}{display}\PY{p}{(}\PY{n}{w}\PY{p}{)}
591
\end{Verbatim}
592
593
594
\begin{center}
595
\includegraphics[width=500pt,keepaspectratio=True]{./cap_cin_dir.png}
596
% P&ID_anti-suge.png: 0x0 pixel, 300dpi, 0.00x0.00 cm, bb=
597
\textit{Figura 3: Captura de la ejecución del código en un Notebook de IPython}
598
\end{center}
599
600
601
602
\begin{multicols}{2}
603
604
\subsection{Cinemática Inversa}
605
Realizaremos la cinemática inversa mediate métodos geométricos. Sea Pher el punto desado de la herramienta con coordenadas
606
$x_h$ y $y_h$ ($z_h=0$ al tratarse de un robot plano) y formando un ángulo $\theta_h$ con la horizontal. \\
607
Por trigonometría las coordenadas de la articulación 3 serán
608
\(x_3 = x_h - l_3 * cos(\theta)\) y \(y_3 = y_h - l_3 * sin(\theta)\).
609
Podemos obtener \(q_1\) y \(q_2\) con
610
\(q_2 = arctg({{\pm \sqrt{1-cos^2 (q_2)}} \over {cos (q_2)}})\) donde
611
\(cos (q_2) = {{x_3^2 + y_3^2 - l_1^2 - l_2^2} \over {2 l_1 l_2}}\) y
612
\(q_1 = arctg({{y_3}\over{\pm x_3}})-arctg({{l_2 sin(q_2)} \over {l_1 + l_2 cos(q_2)}})\)
613
(Barrientos, Fundamentos de Robótica, 2007).
614
615
\end{multicols}
616
\subsubsection{Código en python}
617
618
\begin{Verbatim}[commandchars=\\\{\}]
619
{\color{incolor}In [{\color{incolor}2}]:} \PY{k+kn}{from} \PY{n+nn}{numpy} \PY{k+kn}{import} \PY{n}{sqrt}\PY{p}{,} \PY{n}{arcsin}
620
\PY{k}{def} \PY{n+nf}{cin\PYZus{}inv}\PY{p}{(}\PY{n}{x}\PY{p}{,}\PY{n}{y}\PY{p}{,}\PY{n}{theta}\PY{p}{)}\PY{p}{:}
621
\PY{n}{theta} \PY{o}{=} \PY{n}{theta} \PY{o}{/} \PY{n}{fact}
622
\PY{n}{x\PYZus{}3} \PY{o}{=} \PY{n}{x} \PY{o}{\PYZhy{}} \PY{n}{l\PYZus{}3} \PY{o}{*} \PY{n}{cos}\PY{p}{(}\PY{n}{theta}\PY{p}{)}
623
\PY{n}{y\PYZus{}3} \PY{o}{=} \PY{n}{y} \PY{o}{\PYZhy{}} \PY{n}{l\PYZus{}3} \PY{o}{*} \PY{n}{sin}\PY{p}{(}\PY{n}{theta}\PY{p}{)}
624
\PY{n}{cos\PYZus{}q\PYZus{}2} \PY{o}{=} \PY{p}{(}\PY{n}{x\PYZus{}3}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2} \PY{o}{+} \PY{n}{y\PYZus{}3}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}} \PY{n}{l\PYZus{}1}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}} \PY{n}{l\PYZus{}2}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)} \PY{o}{/} \PY{p}{(}\PY{l+m+mi}{2} \PY{o}{*} \PY{n}{l\PYZus{}1} \PY{o}{*} \PY{n}{l\PYZus{}2}\PY{p}{)}
625
\PY{n}{q\PYZus{}2} \PY{o}{=} \PY{n}{arctan2}\PY{p}{(}\PY{n}{sqrt}\PY{p}{(}\PY{l+m+mi}{1} \PY{o}{\PYZhy{}} \PY{p}{(}\PY{n}{cos\PYZus{}q\PYZus{}2}\PY{p}{)}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{,}\PY{n}{cos\PYZus{}q\PYZus{}2}\PY{p}{)}
626
\PY{n}{q\PYZus{}1} \PY{o}{=} \PY{n}{arctan2}\PY{p}{(}\PY{n}{y\PYZus{}3}\PY{p}{,}\PY{n}{x\PYZus{}3}\PY{p}{)} \PY{o}{\PYZhy{}} \PY{n}{arctan2}\PY{p}{(}\PY{p}{(}\PY{n}{l\PYZus{}2} \PY{o}{*} \PY{n}{sin}\PY{p}{(}\PY{n}{q\PYZus{}2}\PY{p}{)}\PY{p}{)}\PY{p}{,}\PY{p}{(}\PY{n}{l\PYZus{}1} \PY{o}{+} \PY{n}{l\PYZus{}2} \PY{o}{*} \PY{n}{cos\PYZus{}q\PYZus{}2}\PY{p}{)}\PY{p}{)}
627
\PY{n}{l} \PY{o}{=} \PY{n}{sqrt}\PY{p}{(}\PY{n}{l\PYZus{}1}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2} \PY{o}{+} \PY{n}{l\PYZus{}2}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2} \PY{o}{\PYZhy{}} \PY{l+m+mi}{2} \PY{o}{*} \PY{n}{l\PYZus{}1} \PY{o}{*} \PY{n}{l\PYZus{}2} \PY{o}{*} \PY{n}{cos\PYZus{}q\PYZus{}2}\PY{p}{)}
628
\PY{n}{alpha} \PY{o}{=} \PY{n}{arcsin}\PY{p}{(}\PY{n}{l\PYZus{}1} \PY{o}{*} \PY{n}{sin}\PY{p}{(}\PY{n}{q\PYZus{}2}\PY{p}{)} \PY{o}{/} \PY{n}{l}\PY{p}{)}
629
\PY{n}{beta} \PY{o}{=} \PY{n}{arctan2}\PY{p}{(}\PY{n}{y\PYZus{}3}\PY{p}{,}\PY{n}{x\PYZus{}3}\PY{p}{)}
630
\PY{n}{k} \PY{o}{=} \PY{n}{pi} \PY{o}{\PYZhy{}} \PY{n}{theta}
631
\PY{n}{q\PYZus{}3} \PY{o}{=} \PY{p}{(}\PY{n}{alpha} \PY{o}{+} \PY{n}{k} \PY{o}{+} \PY{n}{beta}\PY{p}{)}
632
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{l+s}{\PYZsq{}}\PY{l+s}{r+}\PY{l+s}{\PYZsq{}}\PY{p}{)}
633
\PY{n}{plt}\PY{o}{.}\PY{n}{ylim}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m+mf}{9.5}\PY{p}{,} \PY{l+m+mf}{9.5}\PY{p}{)}
634
\PY{n}{plt}\PY{o}{.}\PY{n}{xlim}\PY{p}{(}\PY{o}{\PYZhy{}}\PY{l+m+mf}{9.5}\PY{p}{,} \PY{l+m+mf}{9.5}\PY{p}{)}
635
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{k\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
636
\PY{n}{x\PYZus{}2} \PY{o}{=} \PY{n}{l\PYZus{}1} \PY{o}{*} \PY{n}{cos}\PY{p}{(}\PY{n}{q\PYZus{}1}\PY{p}{)}
637
\PY{n}{y\PYZus{}2} \PY{o}{=} \PY{n}{l\PYZus{}1} \PY{o}{*} \PY{n}{sin}\PY{p}{(}\PY{n}{q\PYZus{}1}\PY{p}{)}
638
\PY{n}{x\PYZus{}1} \PY{o}{=} \PY{l+m+mi}{0}
639
\PY{n}{y\PYZus{}1} \PY{o}{=} \PY{l+m+mi}{0}
640
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{n}{x\PYZus{}1}\PY{p}{,}\PY{n}{x\PYZus{}2}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{n}{y\PYZus{}1}\PY{p}{,}\PY{n}{y\PYZus{}2}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{r\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
641
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{n}{x\PYZus{}2}\PY{p}{,}\PY{n}{x\PYZus{}3}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{n}{y\PYZus{}2}\PY{p}{,}\PY{n}{y\PYZus{}3}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{b\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
642
\PY{n}{plt}\PY{o}{.}\PY{n}{plot}\PY{p}{(}\PY{p}{[}\PY{n}{x\PYZus{}3}\PY{p}{,}\PY{n}{x}\PY{p}{]}\PY{p}{,}\PY{p}{[}\PY{n}{y\PYZus{}3}\PY{p}{,}\PY{n}{y}\PY{p}{]}\PY{p}{,}\PY{l+s}{\PYZsq{}}\PY{l+s}{k\PYZhy{}}\PY{l+s}{\PYZsq{}}\PY{p}{)}
643
\PY{n}{plt}\PY{o}{.}\PY{n}{grid}\PY{p}{(}\PY{n+nb+bp}{True}\PY{p}{)}
644
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{q1 [deg] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{q\PYZus{}1} \PY{o}{*} \PY{n}{fact}
645
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{q2 [deg] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{q\PYZus{}2} \PY{o}{*} \PY{n}{fact}
646
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{q3 [deg] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{q\PYZus{}3} \PY{o}{*} \PY{n}{fact}
647
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{l1 [m] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{sqrt}\PY{p}{(}\PY{p}{(}\PY{n}{x\PYZus{}2}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{+}\PY{p}{(}\PY{n}{y\PYZus{}2}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{p}{,} \PY{n}{l\PYZus{}1}
648
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{l2 [m] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{sqrt}\PY{p}{(}\PY{p}{(}\PY{p}{(}\PY{n}{x\PYZus{}2}\PY{o}{\PYZhy{}}\PY{n}{x\PYZus{}3}\PY{p}{)}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{+}\PY{p}{(}\PY{p}{(}\PY{n}{y\PYZus{}2}\PY{o}{\PYZhy{}}\PY{n}{y\PYZus{}3}\PY{p}{)}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{p}{,} \PY{n}{l\PYZus{}2}
649
\PY{k}{print} \PY{l+s}{\PYZdq{}}\PY{l+s}{l3 [m] = }\PY{l+s}{\PYZdq{}}\PY{p}{,} \PY{n}{sqrt}\PY{p}{(}\PY{p}{(}\PY{p}{(}\PY{n}{x\PYZus{}3}\PY{o}{\PYZhy{}}\PY{n}{x}\PY{p}{)}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)}\PY{o}{+}\PY{p}{(}\PY{p}{(}\PY{n}{y\PYZus{}3}\PY{o}{\PYZhy{}}\PY{n}{y}\PY{p}{)}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2}\PY{p}{)}\PY{p}{)}\PY{p}{,} \PY{n}{l\PYZus{}3}
650
\PY{n}{x\PYZus{}slider} \PY{o}{=} \PY{n}{FloatSlider}\PY{p}{(}\PY{n+nb}{min}\PY{o}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{9}\PY{p}{,} \PY{n+nb}{max}\PY{o}{=}\PY{l+m+mi}{9}\PY{p}{,} \PY{n}{step}\PY{o}{=}\PY{l+m+mf}{0.1}\PY{p}{,} \PY{n}{value}\PY{o}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{1}\PY{p}{,} \PY{n}{description}\PY{o}{=}\PY{l+s}{\PYZsq{}}\PY{l+s}{X}\PY{l+s}{\PYZsq{}}\PY{p}{)}
651
\PY{n}{y\PYZus{}slider} \PY{o}{=} \PY{n}{FloatSlider}\PY{p}{(}\PY{n+nb}{min}\PY{o}{=}\PY{o}{\PYZhy{}}\PY{l+m+mi}{9}\PY{p}{,} \PY{n+nb}{max}\PY{o}{=}\PY{l+m+mi}{9}\PY{p}{,} \PY{n}{step}\PY{o}{=}\PY{l+m+mf}{0.1}\PY{p}{,} \PY{n}{value}\PY{o}{=}\PY{l+m+mi}{4}\PY{p}{,} \PY{n}{description}\PY{o}{=}\PY{l+s}{\PYZsq{}}\PY{l+s}{Y}\PY{l+s}{\PYZsq{}}\PY{p}{)}
652
\PY{n}{theta\PYZus{}slider} \PY{o}{=} \PY{n}{FloatSlider}\PY{p}{(}\PY{n+nb}{min}\PY{o}{=}\PY{l+m+mi}{0}\PY{p}{,} \PY{n+nb}{max}\PY{o}{=}\PY{l+m+mi}{360}\PY{p}{,} \PY{n}{step}\PY{o}{=}\PY{l+m+mf}{0.1}\PY{p}{,} \PY{n}{value}\PY{o}{=}\PY{l+m+mi}{200}\PY{p}{,} \PY{n}{description}\PY{o}{=}\PY{l+s}{\PYZsq{}}\PY{l+s}{Theta}\PY{l+s}{\PYZsq{}}\PY{p}{)}
653
\PY{n}{w}\PY{o}{=}\PY{n}{interactive}\PY{p}{(}\PY{n}{cin\PYZus{}inv}\PY{p}{,}\PY{n}{x}\PY{o}{=}\PY{n}{x\PYZus{}slider}\PY{p}{,}\PY{n}{y}\PY{o}{=}\PY{n}{y\PYZus{}slider}\PY{p}{,}\PY{n}{theta}\PY{o}{=}\PY{n}{theta\PYZus{}slider}\PY{p}{)}
654
\PY{n}{display}\PY{p}{(}\PY{n}{w}\PY{p}{)}
655
\end{Verbatim}
656
657
\begin{center}
658
\includegraphics[width=480pt,keepaspectratio=True]{./cap_cin_inv.png}
659
\textit{Figura 4: Captura de la ejecución del código en un Notebook de IPython}
660
\end{center}
661
662
663
\end{document}
664
665