{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from numpy import sin,cos,pi\n", "from scipy.linalg import *\n", "from scipy.optimize import fsolve,root\n", "import matplotlib.pyplot as plt\n", "plt.style.use('fivethirtyeight')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo('-A1w46iqUlE')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Homework #7 Kinematics\n", "\n", "**Kinematics** is the study of the geometry of motion e.g. definitions of position, velocity, and acceleration\n", "\n", "In this notebook we will explore kinematically-driven systems where the system degrees of freedom, $n_{d}=0 = 3\\times n_b -n_c$, for planar problems. $n_b$ bodies moving in a plane have $3\\times n_b$ degrees of freedom and the number of constraints is $n_c$.\n", "\n", "![Coordinate system of rigid body, https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0303.png](https://i.imgur.com/KXR6Cjp.png)\n", "https://learning.oreilly.com/api/v2/epubs/urn:orm:book:9780470686157/files/figs/0303.png\n", "\n", "In the figure above, there are three position vectors, $\\mathbf{r}^{i}$, $\\mathbf{R}^{i}$, and $\\mathbf{u}^{i}$ and two coordinate systems, $X$-$Y$ and $X^{i}$-$Y^{i}$.\n", "\n", "The $X^{i}$-$Y^{i}$ coordinate system moves with the rigid body and the point P is always in a fixed position $\\mathbf{\\bar{u}}^{i}_{P}=\\bar{x}^{i}_{P}\\hat{i}^{i}+\\bar{y}^{i}_{P}\\hat{j}^{i}$ in this coordinate system. \n", "\n", "$\\mathbf{u}^{i}_{P} = \\left[ \\begin{array}{cc}\n", "\\cos \\theta^i & -\\sin \\theta^i \\\\\n", "\\sin \\theta^i & \\cos \\theta^i \\\\\n", "\\end{array} \\right]\n", "\\left[\\begin{array}{c} \n", "\\bar{x}^{i}_{P} \\\\ \n", "\\bar{y}^{i}_{P}\\end{array}\\right]$\n", "\n", "or\n", "\n", "$\\mathbf{u}_{P}^{i}=\\mathbf{A}^{i}\\mathbf{\\bar{u}}^{i}_{P}$" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def rotA(theta):\n", " '''This function returns a 2x2 rotation matrix to convert the \n", " rotated coordinate to the global coordinate system\n", " input is angle in radians\n", " \n", " Parameters\n", " ----------\n", " theta : angle in radians\n", " \n", " Returns\n", " -------\n", " A : 2x2 array to rotate a coordinate system at angle theta to global x-y\n", " '''\n", " A=np.zeros((2,2))\n", " A=np.array([[np.cos(theta), -np.sin(theta)],\n", " [np.sin(theta), np.cos(theta)]])\n", " \n", " return A" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.5 , -0.8660254],\n", " [ 0.8660254, 0.5 ]])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rotA(np.pi/3)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![Slider crank 3-body mechanism](../images/slider-crank.svg)\n", "\n", "Figs. Slider crank mechanism and body coordinate systems." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computational Kinematics of Slider crank\n", "\n", "Here you will create the computational kinematics of the slider crank in Fig. 3.35-3.36 above.\n", "\n", "The first kinematic problem will drive the slider crank with a constraint \n", "$$\\theta^{1} = \\omega t +\\theta_0$$ \n", "\n", "where $\\omega = 150~rad/s$ and $\\theta_0=\\pi/6~rad$. \n", "\n", "Below you set up the function to return the constraint equations, \n", "\n", "$\\mathbf{C}(\\mathbf{q},t)$ = `C_slidercrank(q,t)`" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def links(l1 = 0.075*2, l2 = 0.175*2):\n", " '''function to define lengths of links for bodies 2 and 3 \n", " in Fig. 3.35-3.36\n", " \n", " Parameters\n", " ----------\n", " l1 : length of body one, default 0.150 m\n", " l2 : lenght of body two, default 0.250 m\n", " Returns\n", " -------\n", " l1, l2 : link lengths for bodies 1 and 2 \n", " '''\n", " \n", " return l1,l2" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "def C_slidercrank(q,t):\n", " '''9 constraint equations for 9 generalized coords\n", " q=[R1x,R1y,a1,R2x,R2y,a2,R3x,R3y,a3]\n", " q=[R1, a1, R2, ,a2, R3, ,a3]\n", " [0,1 2 3,4 5 6,7 8 ]\n", " \n", " 1/\\2\n", " / \\ slider-crank mechanism\n", " O |3| \n", " ^^^-------------\n", " \n", " Parameters\n", " ----------\n", " q : numpy array for 9 generalized coordinates for bodies 1-3 in the slider crank\n", " q = [q1, q2, q3]\n", " t : current time\n", " \n", " Returns\n", " -------\n", " C : 9 constraint equation evaluations\n", " '''\n", " l1,l2=links()\n", " q1 = q[0:3]\n", " q2 = q[3:6]\n", " q3 = q[6:9]\n", "\n", " C=np.zeros(9)\n", " C[0:2] = q1[0:2]+rotA(q1[2])@np.array([-l1/2, 0])\n", " C[2:4] = q1[0:2]-q2[0:2]+rotA(q1[2])@np.array([l1/2, 0])-rotA(q2[2])@np.array([-l2/2, 0])\n", " C[4:6] = q2[0:2]-q3[0:2]+rotA(q2[2])@np.array([l2/2, 0])-rotA(q3[2])@np.array([0, 0])\n", " C[6] = q3[1]\n", " C[7] = q3[2]\n", " C[8] = q1[2] - pi/6 - 150*t\n", " return C" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 1\n", "\n", "Solve for $\\mathbf{q}(t=0) = [R_x^1,~R_y^1, \\theta^1,~R_x^2,~R_y^2, \\theta^2,~R_x^3,~R_y^3, \\theta^3]$ using the given system definitions:\n", "\n", "- $l_1 = 0.15~m$\n", "- $l_2 = 0.25~m$\n", "- $\\theta^1(t) = 150t+\\frac{\\pi}{6}$\n", "\n", "Show that `C_slidercrank(q0, 0)` $=\\mathbf{0}$. \n" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "## your work here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set up solution for $\\mathbf{C}(\\mathbf{q},~t)$\n", "Next, set up the $9\\times 9$ Jacobian of \n", "\n", "1. Set up the $\\mathbf{A}_\\theta$ function as `A_theta`\n", "1. each pin $\\mathbf{C_{q,~pin}}=\\frac{\\partial\\mathbf{C_{pin}}}{\\partial\\mathbf{q}}$=`Cq_pin`\n", "2. the total system: $\\mathbf{C_{q}}=\\frac{\\partial\\mathbf{C}}{\\partial\\mathbf{q}}$=`Cq_slidercrank`" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def A_theta(theta):\n", " '''This function returns a 2x2 rotation matrix derivative \n", " input is angle in radians\n", " \n", " Parameters\n", " ----------\n", " theta : angle in radians\n", " \n", " Returns\n", " -------\n", " dAda : 2x2 array derivative of `rotA`\n", " '''\n", " dAda=np.array([[-np.sin(theta), -np.cos(theta)],\n", " [np.cos(theta), -np.sin(theta)]])\n", " return dAda" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def Cq_pin(qi, qj, ui, uj):\n", " '''Jacobian of a pinned constraint for planar motion\n", "\n", " Parameters\n", " ----------\n", " qi : generalized coordinates of the first body, i [Rxi, Ryi, thetai]\n", " qj : generalized coordinates of the 2nd body, i [Rxj, Ryj, thetaj]\n", " ui : position of the pin the body-i coordinate system\n", " uj : position of the pin the body-j coordinate system\n", " \n", " Returns\n", " -------\n", " Cq_pin : 2 rows x 6 columns Jacobian of pin constraint Cpin\n", " '''\n", " \n", " Cq_1=np.block([np.eye(2), A_theta(qi[2])@ui[:,np.newaxis] ])\n", " Cq_2=np.block([-np.eye(2), -A_theta(qj[2])@uj[:,np.newaxis] ])\n", " Cq_pin=np.block([Cq_1, Cq_2])\n", " return Cq_pin" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def Cq_slidercrank(q,t):\n", " '''return Jacobian of C_slidercrank(q,t) = dC/dq_i\n", " |dC1/dR1x dC1/dR1y ... dC9/da3 |\n", " |dC2/dR1x dC2/dR1y ... dC9/da3 |\n", " |... .. . ... |\n", " | . |\n", " | . |\n", " |dC9/dR1x ... dC9/da3 |\n", " Parameters\n", " ----------\n", " q : numpy array for 9 generalized coordinates for bodies 1-3 in the slider crank\n", " q = [q1, q2, q3]\n", " t : current time\n", " Returns\n", " -------\n", " Cq : 9 rows x 9 columns Jacobian of constraints `C_slidercrank` \n", " '''\n", " l1, l2 = links()\n", " q1 = q[0:3]\n", " q2 = q[3:6]\n", " q3 = q[6:9]\n", " \n", " Cq=np.zeros((9,9))\n", " Cq[0:2, 0:3] = Cq_pin(q1, np.array([0, 0, 0]),np.array([-l1/2, 0]),np.array([0, 0]))[0:2, 0:3]\n", " Cq[2:4, 0:6] = Cq_pin(q1, q2, np.array([l1/2, 0]), np.array([-l2/2, 0]))\n", " Cq[4:6, 3:10] = Cq_pin(q2, q3, np.array([l2/2, 0]), np.array([0, 0]))\n", " Cq[6:8, 7:10] = np.eye(2)\n", " Cq[8, 2]=1\n", " return Cq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Solve for $\\mathbf{q(t)}$\n", "\n", "Now, you solve for 1 full rotation of the driven crank. \n", "\n", "t= 0-360$^o$ = 0-2$\\pi$/150\n", "\n", "The solution requires an initial guess for the generalized coordinates, $\\mathbf{q}$, set as `q0`. It is updated at each timestep to find the next solution. Here, you use the Jacobian of $\\mathbf{C}$, $\\mathbf{C_q}$, by specifying the `fprime = lambda q: Cq_slidercrank`. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "t = np.linspace(0, 2*pi/150)\n", "q0 = np.array([0, 0.5, pi/6, 0, 0.5, pi/3, 0.5, 0, 0])\n", "q = np.zeros((len(q0), len(t)))\n", "q[:, 0] = q0\n", "for i,tt in enumerate(t):\n", " q[:,i]=fsolve(lambda q: C_slidercrank(q,tt),q0,\\\n", " fprime= lambda q: Cq_slidercrank(q,tt)) # <-- use the Jacobian to speed up solution\n", " q0=q[:,i]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, you can create the same figures as Shabana ch 3\n", "\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0337a.png](https://i.imgur.com/YyrcJF0.png)\n", "\n", "Fig. 3.37. Orientation of the connecting rod\n", "\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0337b.png](https://i.imgur.com/BpCgybm.png)\n", "\n", "Fig. 3.37. Displacement of the slider block" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(q[2,:],q[6,:])\n", "#plt.plot(t,q[5,:]/pi*180)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 2\n", "\n", "Recreate the displacement of the slider block graph in Fig. 3.38 from your solution." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "## your work here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Animate the motion for constant $\\dot{\\theta}^1$\n", "\n", "Next, you animate the motion of the system. Below, you create \n", "\n", "1. `plot_shape` to create lines and markers to represent links and the sliding base\n", "2. a figure that shows the path of the two link centers of mass\n", "3.`init` to initialize the animation\n", "4. `animate` to update the two links and sliding base\n", "5. `FuncAnimation` to display the motion of the slidercrank system" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def plot_shape(shape,dims,q):\n", " '''\n", " function to plot a shape based upon the shape dimensions and coordinates\n", " arguments:\n", " ----------\n", " shape: either 'link' or 'base',\n", " - the link returns two points to plot as a line\n", " - the base returns one point to plot as a marker\n", " - if neither 'link' or 'base' are chosen, then 0 is returned and warning printed \n", " `choose a \\'link\\' or \\'base\\' please`\n", " dims: the dimensions of the shape\n", " - the link uses the first value as the length\n", " - the base ignores the `dims`\n", " q: generalized coordinates in the form [Rx, Ry, theta]\n", " - the link returns the center of the link at (Rx, Ry) and oriented at theta\n", " - the base returns the center at (Rx, Ry) and ignores theta\n", " returns:\n", " --------\n", " datax: coordinates to plot the x-positions\n", " datay: coordinates to plot the y-positions\n", " - the link returns array of length 2\n", " - the base returns array of length 1\n", " \n", " '''\n", "\n", " if shape=='link':\n", " left = rotA(q[2])@np.array([-dims[0]/2, 0])\n", " right = rotA(q[2])@np.array([dims[0]/2, 0])\n", " Px=q[0]+np.array([left[0], right[0]])\n", " Py=q[1]+np.array([left[1], right[1]])\n", " datax = Px\n", " datay = Py\n", " #l,= plt.plot(Px,Py,'o-')\n", " return datax, datay\n", " elif shape=='base':\n", " Px=q[0]\n", " Py=q[1]\n", " data = [Px, Py]\n", " #l,=plt.plot(Px,Py,'s',markersize=20)\n", " return data\n", " else:\n", " print('choose a \\'link\\' or \\'base\\' please')\n", " return 0\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. initialize the lines and coordinate system" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "tags": [ "hide-output" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Slider crank motion and paths')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "q1 = q[0:3, :]\n", "q2 = q[3:6, :]\n", "q3 = q[6:9, :]\n", "l1, l2 = links()\n", "\n", "fig, ax = plt.subplots()\n", "link1, = ax.plot([], [], linewidth = 10)\n", "link2, = ax.plot([], [], linewidth = 10)\n", "body3, = ax.plot([], [], 's', markersize = 20)\n", "path1, = ax.plot(q1[0, :], q1[1, :])\n", "path2, = ax.plot(q2[0, :], q2[1, :])\n", "ax.set_xlim((-0.25, 0.5))\n", "ax.set_ylim((-0.25, 0.25))\n", "ax.set_xlabel('X-axis (m)')\n", "ax.set_ylabel('Y-axis (m)')\n", "ax.set_title('Slider crank motion and paths')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. and 4. create your `init` and `animation` functions to update the lines on the plot\n", "Create an initializing (`init`) function that clears the previous lines and markers\n", "\n", "Create an animating (`animate`) function that updates the link, base, and path" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def init():\n", " link1.set_data([], [])\n", " link2.set_data([], [])\n", " body3.set_data([], [])\n", " return (link1, link2, body3)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def animate(i):\n", " '''function that updates the line and marker data\n", " arguments:\n", " ----------\n", " i: index of timestep\n", " outputs:\n", " --------\n", " link1: the line object plotted in the above ax.plot(...)\n", " link2: the line object plotted in the above ax.plot(...)\n", " body3: the marker for the piston in the slider-crank\n", " '''\n", " l1, l2 = links()\n", " datax, datay = plot_shape('link', np.array([l1]), q1[:, i])\n", " link1.set_data(datax, datay)\n", " datax, datay = plot_shape('link', np.array([l2]), q2[:, i])\n", " link2.set_data(datax, datay)\n", " pinx, piny = plot_shape('base', [], q3[:,i])\n", " body3.set_data(pinx, piny)\n", " return (link1, link2, body3, )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4. display the result in an HTML video\n", "\n", "Import the `animation` and `HTML` functions. Then, create an animation (`anim`) variable using the `animation.FuncAnimation`" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "from matplotlib import animation\n", "from IPython.display import HTML" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "anim = animation.FuncAnimation(fig, animate, init_func=init,\n", " frames=range(0,len(t)), interval=50, \n", " blit=True)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HTML(anim.to_html5_video())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Velocity and Acceleration\n", "\n", "Differentiating the constraint equations, $\\mathbf{Cq}=\\mathbf{0}$, \n", "\n", "$\\mathbf{C_q \\dot{q}}+\\mathbf{C}_t=\\mathbf{0}$ (3.119)\n", "\n", "where \n", "\n", "$\\mathbf{C}_t = \\left[\\frac{\\partial C_1}{\\partial t} \\frac{\\partial C_2}{\\partial t}\n", "... \\frac{\\partial C_n}{\\partial t}\\right]^T$ (3.120)\n", "\n", "Solve for velocity $\\mathbf{\\dot{q}_i}$ as such\n", "\n", "$\\mathbf{C_q \\dot{q}}=-\\mathbf{C}_t$ (3.121)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Differentiating $\\mathbf{Cq}=\\mathbf{0}$ twice leads to the acceleration equation\n", "\n", "$\\mathbf{C_q \\ddot{q}}+\n", "\\left(\\mathbf{C_q \\dot{q}}\\right)_{\\mathbf{q}}\\mathbf{\\dot{q}}+\n", "2\\mathbf{C}_{\\mathbf{q}t}\\mathbf{\\dot{q}}+\n", "\\mathbf{C}_{tt}=\\mathbf{0}$ (3.123)\n", "\n", "Solve for acceleration $\\mathbf{\\ddot{q}}$ as such\n", "\n", "$\\mathbf{C_q \\ddot{q}}=\\mathbf{Q}_d$\n", "\n", "where \n", "\n", "$\\mathbf{Q}_d=-\\left(\\mathbf{C_q \\dot{q}}\\right)_{\\mathbf{q}}\\mathbf{\\dot{q}}-\n", "2\\mathbf{C}_{\\mathbf{q}t}\\mathbf{\\dot{q}}-\n", "\\mathbf{C}_{tt}$\n", "\n", "For the current slider crank system, \n", "\n", "$\\mathbf{Q}_d=\n", "\\left[\\begin{array}\n", "~(\\dot{\\theta}^1)^2\\mathbf{A}^1\\mathbf{\\bar{u}}^{1}_{A}\\\\\n", "(\\dot{\\theta}^1)^2\\mathbf{A}^1\\mathbf{\\bar{u}}^{1}_{B}-(\\dot{\\theta}^2)^2\\mathbf{A}^2\\mathbf{\\bar{u}}^{2}_{B}\\\\\n", "(\\dot{\\theta}^2)^2\\mathbf{A}^2\\mathbf{\\bar{u}}^{i}_{C}\\\\\n", "0\\\\\n", "0\\\\\n", "0\\end{array}\\right]$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, you set up `vel_acc(q,t)` to return velocity and acceleration of $\\mathbf{q_{i}}$ components as $\\frac{d\\mathbf{q}}{dt}$ and $\\frac{d^2\\mathbf{q}}{dt^2}$ (`dq` and `ddq`, respectively)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "def Qd_slidercrank(q, dq, t):\n", " '''return slidercrank Qd = Cq@ddq\n", "\n", " Parameters\n", " ----------\n", " q : numpy array for 9 generalized coordinates for bodies 1-3 in the slider crank\n", " q = [q1, q2, q3]\n", " t : current time\n", " Returns\n", " -------\n", " Qd : 1D array with length 9 \n", " '''\n", " l1, l2 = links()\n", " q1 = q[0:3]\n", " q2 = q[3:6]\n", " q3 = q[6:9]\n", " dq1 = dq[0:3]\n", " dq2 = dq[3:6]\n", " dq3 = dq[6:9]\n", " \n", " Qd=np.zeros(9)\n", " Qd[0:2] = dq1[2]**2*rotA(q1[2])@np.array([-l1/2, 0])\n", " Qd[2:4] = dq1[2]**2*rotA(q1[2])@np.array([l1/2, 0]) -\\\n", " dq2[2]**2*rotA(q2[2])@np.array([-l2/2, 0])\n", " Qd[4:6] = dq2[2]**2*rotA(q2[2])@np.array([l2/2, 0])\n", " Qd[6:9] = 0\n", " return Qd \n", "\n", "def Ct_slidercrank(q, t):\n", " '''return slidercrank partial derivative of constraints dC/dt\n", "\n", " Parameters\n", " ----------\n", " q : numpy array for 9 generalized coordinates for bodies 1-3 in the slider crank\n", " q = [q1, q2, q3]\n", " t : current time\n", " Returns\n", " -------\n", " Ct : 1D array with length 9\n", " '''\n", " Ct = np.zeros(9)\n", " Ct[8] = -150\n", " return Ct" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "\n", "t = np.linspace(0, 2*pi/150)\n", "q0 = np.array([0, 0.5, pi/6, 0, 0.5, pi/3, 0.5, 0, 0])\n", "q = np.zeros((len(q0), len(t)))\n", "dq = np.zeros(q.shape)\n", "ddq = np.zeros(q.shape)\n", "q[:, 0] = q0\n", "for i, ti in enumerate(t):\n", " q[:, i] = fsolve(lambda q: C_slidercrank(q, ti),q0,\\\n", " fprime= lambda q: Cq_slidercrank(q, ti)) # <-- use the Jacobian to speed up solution\n", " dq[:, i] = np.linalg.solve(Cq_slidercrank(q[:,i], ti), -Ct_slidercrank(q[:, i], ti))\n", " Qd = Qd_slidercrank(q[:, i], dq[:, i], ti)\n", " ddq[:, i] = np.linalg.solve(Cq_slidercrank(q[:,i], ti), Qd)\n", " q0=q[:, i]\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0338a.png](https://i.imgur.com/OAYSFvP.png)\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0338b.png](https://i.imgur.com/bntk5qH.png)\n", "\n", "Fig. 3.38 velocity components \n", "\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0339a.png](https://i.imgur.com/rwaWUTT.png)\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0339b.png](https://i.imgur.com/RKHgBSF.png)\n", "\n", "Fig. 3.39 acceleration components \n", "\n", "### Recreate the plots with your solution\n", "\n", "Here, you can plot the terms $\\dot{\\mathbf{q}}$ and $\\ddot{\\mathbf{q}}$ to compare to the Shabana solutions shown above in Figs 3.38-39. __Try plotting $\\dot{\\theta}^2,~\\ddot{\\theta}^2,~\\dot{R}^3_x,~and~\\ddot{R}^3_x$__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 3\n", "\n", "Change the constraints for the slidercrank such that \n", "\n", "$R^4_x-f(t)=0$\n", "\n", "where\n", "\n", "$f(t)=0.35-0.8l^2\\sin150t$\n", "\n", "Recreate Figs. 3.43-3.48 for the slidercrank.\n", "\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0340a.png](https://i.imgur.com/qMLFflG.png)\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0340b.png](https://i.imgur.com/TrcECmw.png)\n", "\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0341a.png](https://i.imgur.com/FDmueEx.png)\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0341b.png](https://i.imgur.com/Bl2Gciy.png)\n", "\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0342a.png](https://i.imgur.com/udqlLdg.png)\n", "![https://learning.oreilly.com/library/view/computational-dynamics-3rd/9780470686157/figs/0342b.png](https://i.imgur.com/rx6paso.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }