Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Project-2/02_Analyze-data_project.ipynb
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
454 lines (454 sloc)
64.3 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Computational Mechanics Project #02 - Create specifications for a projectile robot\n", | |
"\n", | |
"On the first day of class, we threw $2\"\\times~2\"$ dampened paper (spitballs) at a target on the whiteboard. Now, we are going to analyze the accuracy of the class with some cool Python tools and design a robot that has the same accuracy and precision as the class, but we will have the robot move farther away from the target and use a simpler projectile i.e. a tennis ball so we don't need to worry about knuckle-ball physics. \n", | |
"\n", | |
"The goal of this project is to determine the precision of necessary components for a robot that can reproduce the class throwing distibution. We have generated pseudo random numbers using `numpy.random`, but the class target practice is an example of truly random distributions. If we repeated the exercise, there is a vanishingly small probability that we would hit the same points on the target, and there are no deterministic models that could take into account all of the factors that affected each hit on the board. \n", | |
"\n", | |
"<img src=\"../images/robot_design.png\" style=\"height: 250px;\"/>\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now, we ask ourselves some questions:\n", | |
"\n", | |
"1. How do we quantify the class accuracy and precision?\n", | |
"\n", | |
"2. If we design a robot, what design components can we control?\n", | |
"\n", | |
"3. How can we relate the controlled components to the class accuracy, and specify the component precision?\n", | |
"\n", | |
"The first question, we have some experience from our work in [02_Seeing_Stats](../notebooks/02_Seeing_Stats.ipynb). We can define the mean, standard deviation, measure the first, second, and third quartiles, etc. \n", | |
"\n", | |
"The second question is a physical question. We cannot control the placement of the robot or the target those are chosen for us. We cannot control temperature, mechanical vibrations, etc. We *can* control the desired initial velocity. The initial velocity will have some speed and direction, and both will be subject to random noise. Once the speed and direction are set, the location on the target is determined by kinematic equations for an object in freefall, as such\n", | |
"\n", | |
"$x_{impact} = \\frac{v_x}{v_y}d + x(0)~~~~~~~~~~~~~~~~~~~~(1.a)$\n", | |
"\n", | |
"$z_{impact} = d\\left(\\frac{v_z(0)}{v_y}-\\frac{g}{2v_y^2}d\\right)+ z(0)~~~~~(1.b)$.\n", | |
"\n", | |
"Where the location of impact is at a $y$-distance of $d$ at a point on the target with coordinates $(x_{impact},~z_{impact})$, and the initial velocity is $\\bar{v}=v_x\\hat{i}+v_y\\hat{j}+v_z(0)\\hat{k}$, the object is released at an initial location $\\bar{r}(0)=x(0)\\hat{i}+0\\hat{j}+z(0)\\hat{k}$, and the only acceleration is due to gravity, $\\bar{a}=-g\\hat{k}$. Equation (1) becomes much easier to evaluate if we assume that $v_x=0$, resulting in an evalution of the accuracy of the height of the impact, $z_{impact}$, as such\n", | |
"\n", | |
"$x_{impact} = x(0)~~~~~~~~~~~~~~~~~~~~(2.a)$\n", | |
"\n", | |
"$z_{impact} = \\frac{d}{\\cos{\\theta}}\\left(\\sin{\\theta}-\\frac{g}{2v_0^2\\cos{\\theta}}d\\right)+ z(0)~~~~~(2.b)$.\n", | |
"\n", | |
"Where $\\theta$ is the angle of the initial velocity and $v_0$ is the initial speed. Equation (2) restricts the analysis to height accuracy. You can incorporate the 2D impact analysis if you finish the 1D analysis. " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The third question, is how we can relate equation (2) to the measured points of impact? For this, we can use Monte Carlo methods *(There are other methods, but Monte Carlo is one of the most straight-forward)*. Our Monte Carlo approach is as such, if we have a desired initial speed, $v_0$, and desired angle, $\\theta$, we can propagate the uncertainty of our actual speeds and angles into the $z_{impact}$ locations. Then, we can choose distributions in speed and angles that match the distributions in $z_{impact}$ locations. Here are the steps:\n", | |
"\n", | |
"1. Generate random $\\theta_i$ and $v_{0~i}$ variables\n", | |
"\n", | |
"2. Plug into eqn 2 for random $z_{impact~i}$ locations\n", | |
"\n", | |
"3. Compare to our measured $z_{impact}$ location statistics\n", | |
"\n", | |
"4. Repeat 1-3 until the predicted uncertainty matches the desired uncertainty, we can use a number of comparison metrics:\n", | |
" \n", | |
" - standard deviation\n", | |
" \n", | |
" - first, second, and third quartiles\n", | |
" \n", | |
" - visually, with box plots and histograms" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Project Deliverables\n", | |
"\n", | |
"1. Statistical analysis of class accuracy and precision (x- and z-locations) data is in the csv file [../data/target_data.csv](../data/target_data.csv) _Note: if you want to see how I turned the images into data check out the jupyter notebook [process_target_practice](./process_target_practice.ipynb)\n", | |
"\n", | |
"2. A Monte Carlo model to generate impact heights based upon uncertainty in $\\theta_0$ and $v_0$. \n", | |
"\n", | |
"3. The precision required to recreate the class accuracy and precision with a robot. \n", | |
"**You must show some validation of your work**\n", | |
"\n", | |
"4. [BONUS] Repeat 2-3 taking into account the variation in $x_{impact}$ due to misalignment. \n", | |
"\n", | |
"Given constants and constraints:\n", | |
"\n", | |
"- $d=$3 m, distance to target\n", | |
"\n", | |
"- $g=$9.81 m/s$^2$, acceleration due to gravity\n", | |
"\n", | |
"- $z(0)=$0.3 m, the initial height is 0.3 m above the bull's eye\n", | |
"\n", | |
"- 4 m/s$<v_0<$12 m/s, the initial velocity is always higher than 9 mph and less than 27 mph" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"\n", | |
"#Import rcParams to set font styles\n", | |
"from matplotlib import rcParams\n", | |
"\n", | |
"#Set font style and size \n", | |
"rcParams['font.family'] = 'sans'\n", | |
"rcParams['font.size'] = 16\n", | |
"rcParams['lines.linewidth'] = 3\n", | |
"\n", | |
"target_data = pd.read_csv(\"../data/target_data.csv\")\n", | |
"d = 3\n", | |
"g = 9.81\n", | |
"y_0 = .3\n", | |
"v_0 = np.linspace(4, 12, 100)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"The mean value of the x direction is 0.01208 +/- 0.25716\n", | |
"The mean value of the z direction is -0.0474 +/- 0.25486\n", | |
" \n", | |
"The first quartile for x is -0.16854422326722185\n", | |
"The second quartile for x is 0.028452517775170515\n", | |
"The third quartile for x is 0.1670894539891312\n", | |
" \n", | |
"The first quartile for z is -0.21785495681409592\n", | |
"The second quartile for z is -0.070851135369002\n", | |
"The third quartile for z is 0.13222390283592378\n" | |
] | |
} | |
], | |
"source": [ | |
"x = target_data[' x position (m)']\n", | |
"z = target_data[' y position (m)']\n", | |
"\n", | |
"\n", | |
"x_mean = np.mean(x)\n", | |
"z_mean = np.mean(z)\n", | |
"\n", | |
"x_std = np.std(x)\n", | |
"z_std = np.std(z)\n", | |
"\n", | |
"print(\"The mean value of the x direction is\", x_mean.round(5), \"+/-\", x_std.round(5))\n", | |
"print(\"The mean value of the z direction is\", z_mean.round(5), \"+/-\", z_std.round(5))\n", | |
"\n", | |
"Q1_x = np.percentile(x, q=25)\n", | |
"Q2_x = np.percentile(x, q=50)\n", | |
"Q3_x = np.percentile(x, q=75)\n", | |
"print(' ')\n", | |
"print('The first quartile for x is {}'.format(Q1_x))\n", | |
"print('The second quartile for x is {}'.format(Q2_x))\n", | |
"print('The third quartile for x is {}'.format(Q3_x))\n", | |
"\n", | |
"Q1_z = np.percentile(z, q=25)\n", | |
"Q2_z = np.percentile(z, q=50)\n", | |
"Q3_z = np.percentile(z, q=75)\n", | |
"print(' ')\n", | |
"print('The first quartile for z is {}'.format(Q1_z))\n", | |
"print('The second quartile for z is {}'.format(Q2_z))\n", | |
"print('The third quartile for z is {}'.format(Q3_z))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def robot_z(theta_min, velocity_min, theta_max, velocity_max):\n", | |
" '''Inputs \n", | |
" theta_min = the minimum angle \n", | |
" velocity_min = the minimum velocity\n", | |
" theta_max = the maximum angle\n", | |
" velocity_max = the maximum velocity\n", | |
" '''\n", | |
" theta = np.linspace(theta_min, theta_max, 100)\n", | |
" velocity = np.linspace(velocity_min, velocity_max, 100)\n", | |
" z_impact = 3/np.cos(theta)*(np.sin(theta)-(9.81/(2*velocity**2*np.cos(theta)))*3)+.3\n", | |
" return z_impact" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def z_impact(velocity, theta):\n", | |
" z_impact = 3/np.cos(theta)*(np.sin(theta)-(9.81/(2*velocity**2*np.cos(theta)))*3)+.3\n", | |
" return z_impact" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.colorbar.Colorbar at 0x7fad6fc1f278>" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 2 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"velocity, theta = np.meshgrid(np.linspace(6,8, 1000), np.linspace(0, .25, 1000))\n", | |
"z_plot = z_impact(velocity, theta)\n", | |
"plt.contourf(velocity, theta, z_plot)\n", | |
"plt.ylabel(\"theta (radians)\")\n", | |
"plt.xlabel(\"velocity (m/s)\")\n", | |
"plt.colorbar()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This contour plot gives a visual representation of the impact. The impact should be in the color between 0 and -0.2 because the class mean is about -0.05. This helps to inform the guesses made when deciding the range for the Monte Carlo model. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"mean -0.05333488031674223\n", | |
"std 0.25456389642669747\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"z = target_data[' y position (m)']\n", | |
"random_theta = np.random.normal(.25, 0.01, 1000)\n", | |
"random_velocity = np.random.normal(6.6, .7, 1000)\n", | |
"impacts = z_impact(random_velocity, random_theta)\n", | |
"\n", | |
"print(\"mean\", np.mean(impacts))\n", | |
"print(\"std\", np.std(impacts))\n", | |
"\n", | |
"hits = [z, impacts]\n", | |
"plt.boxplot(hits);\n", | |
"\n", | |
"#Trying to get the mean and standard devaition to match the class data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"1 is the class data and 2 is the robot data. The mean and standard devaition are similar enough visually on this plot and again is illustrated below in a histogram. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.legend.Legend at 0x7fad6fb10588>" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAD9CAYAAAC2l2x5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAb30lEQVR4nO3de5hU1Znv8e/LNNdGlEtDEGwbgveDtzQGRQEFBXGAITqGySNI1IDmGB090XMQjzaJwHHOqHhkvHSMYKJHHJVEjJqog0FnbDR4icqgjiOgYESgBVFutrzzx9601dXV3XXZVdW9+X2ep57qXnvtvdeqVf32qrXXXmXujoiIxE+7YhdARETyQwFeRCSmFOBFRGJKAV5EJKYU4EVEYqqk2AXYp1evXl5RUVHsYoiItCmvvvrqZncvS7Wt1QT4iooKVq5cWexiiIi0KWa2rqltGqIREYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EZGYajXTJEWksLZt28bmzZvZs2dPsYsiKXTo0IFevXpx4IEHZn0MBXiR/dCuXbvYuHEj/fv3p3PnzphZsYskCdydnTt3sn79ejp27EinTp2yOo6GaET2Q5s2baKsrIwuXboouLdCZkaXLl3o1asXmzZtyvo46sGLADa78EHObyzel+3s2rWLb33rW0U7v6TngAMOYMuWLVnvrx68yH6orq6OkhL171q7kpIS6urqst5fAV5kP6WhmdYv1zZqMcCb2Xlm9piZrTOznWb2rpnNM7MDEvJUmJk38TgopxKKiEhW0vmM9lPgQ+A6YD1wAlAFnG5mp7j73oS884ClSftvj6CcIiKSoXQC/Hh3T7yMu9zMaoH7gZHAsoRtH7j7igjLJyIFVowLzomKdfHZzJg1axY33XRTzsfaunUr8+fPZ8KECZx44okRlC47LQ7RJAX3ff4UPveLtjgiIm3f1q1bmT17Nq+99lpRy5HtRdYR4fPqpPR5ZlZnZtvMbKmZDc6hbCIiOdm9e3exi1BUGQd4M+sH/Ax4zt33fQXTbuAeYAZwOsG4/WDgJTM7qpljTTezlWa2MpfJ/CIiVVVVmBlvv/02Y8aMoWvXrpx//vm4O7fddhtHHHEEHTp0oG/fvlx++eV8/vnnjY7h7syZM6f+Dt/hw4fzxhtvNMrT3PHWrl3LgAEDAPjRj36EmWFmLFq0KO+vQbKMAryZdQUeB+qAH+5Ld/e/uPul7r7E3V90918AwwEHZjV1PHevdvdKd68sK0v5lYIiIhmZOHEiI0aMYOnSpVx11VXMmjWLq6++mjPPPJMnnniCa6+9lkWLFnHOOeewd+/eBvv+6le/4qmnnmLBggUsWrSIjRs3MmrUKGpra+vztHS8vn37smTJEgBmzpxJTU0NNTU1nHPOOQV9HSCDO1nNrBPBDJmBwAh3X99cfnf/yMz+FRiSWxFFRNJ3xRVXcOWVVwJQW1vL2LFjufDCC1mwYAEAY8aMoaysjClTpvC73/2OCRMm1O+7c+dOnnnmGUpLSwH47ne/y2GHHcZtt93Gz3/+c2pra7n11ltbPN4JJ5wAwMCBAxk6dGghq99AWj14M2sPPAacBIxz97fSPL4R9OJFRApi0qRJ9T+vWLGC3bt3c8EFFzTIM3nyZEpKSli+fHmD9HHjxtUHd4CKigqGDh1KTU1NVscrtnRudGoHPAiMAiamOw3SzMqBYcDLOZVQRCQDffv2rf9539BKYhoESwD07NmzwdALQJ8+fRodr0+fPmzYsCGr4xVbOkM0/wT8LTAH+NLMEj9vrHf39WZ2C8E/ixpgE3AEMBPYC8yNtsgiIk1LvL2/R48eAHzyySccc8wx9el1dXVs2bKFnj17Nth348aNjY63ceNG+vXrl9Xxii2dIZqzw+dZBAE88XFJuG0VcCrBTJpnCe50/Tfgu+7+boTlFRFJ29ChQ+nYsSOLFy9ukP7www9TV1fHiBEjGqQ/9dRTfPnll/W/r127lhUrVnDyySdndLyOHTsCwZh+MbXYg3f3ijTy3AfcF0WBRESi0qNHD66++mrmzZtHaWkp48aNY/Xq1Vx//fWceuqpjWa2dO7cmbPOOotrrrmG3bt3c+ONN9KtWzeuuuqqjI7Xp08fevbsyeLFizn22GMpLS1lwIABBe/ha71QEWmgmOvU58OcOXMoKyvj7rvv5s4776Rnz55MnTqVefPm0a5dw0GMqVOnUlpayuWXX87mzZsZMmQIixcvrh+aSfd47dq149577+W6665j9OjR1NXVsXDhQqZNm1bIqmPuraMxKysrfeXKlS1nFMmD/e0LP1avXs1RRzV5D6K0Ii21lZm96u6VqbZpPXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EZGYUoAXEYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EWnArLiPYquqqmLZsmUFOY/lucIK8CIiCWbPnl2QAF8ICvAiIjGlAC8ibd7777/PlClTGDBgAJ07d2bgwIFcdtllfPbZZ43yLl++nDPPPJMDDzyQ0tJSjjvuOH75y18C33wb1Jw5czAzzIyqqioARo4cyciRIxsdr6KiosEywJs2bWLGjBkcfvjhdOnShUMOOYQf/OAH9V/7V0haD15E2ryPP/6Y/v37M3/+fLp3784HH3zA3LlzGTduXP0XZgM8/vjjnHvuuQwbNox77rmHXr16sWrVKtatWwdATU0NJ598MtOmTWPGjBkA9O/fP6Oy1NbW0qlTJ+bNm0dZWRkff/wxt9xyC8OGDeOdd96hU6dO0VW8BQrwItLmDR8+nOHDh9f/fsoppzBo0CBOO+00Xn/9dU444QTcnSuvvJLjjz+e559/vv7LOUaPHl2/39ChwVdO9+vXr/7nTB1xxBHcfvvt9b9//fXXDBs2jPLycp5++mkmTZqU1XGzoSEaEWnz9uzZw9y5cznyyCPp3Lkz7du357TTTgPg3XffrX9et24dl1xySaNvcoraXXfdxXHHHUfXrl0pKSmhvLy8QVkKRQFeRNq8mTNnUlVVxQUXXMCTTz7JK6+8wpIlSwDYtWsXAFu2bAEyH3LJ1B133MGPf/xjRo8ezZIlS3jllVdYsWJFg7IUioZoRKTNW7x4MVOnTuX666+vT/viiy8a5OnVqxdA1hc7O3XqxOeff94ovba2tlFZRo0axS233FKftmbNmqzOmSv14EWkzduxYwft27dvkLZw4cIGvx9++OFUVFRw77330tx3UXfo0IGdO3c2Sj/00EN577332LNnT33aCy+8wPbt2zMuS6GoBy8ibd7YsWO5//77GTx4MIMGDWLJkiW89NJLDfKYGfPnz+d73/seZ5xxBpdeeillZWWsXr2aTz/9lNmzZwNw9NFH8+STTzJ27Fi6d+/OwQcfzMEHH8zkyZOprq7moosuYtq0aaxZs4Zbb72VAw88sFFZbr75ZubOnctJJ53EsmXLePTRRwv2WiRSD15EGnAv7iMbd9xxBxMmTGDWrFl8//vfZ/v27Tz00EON8k2cOJFnn30WgIsvvpgJEyZQXV1NRUVFfZ4FCxZQWlrK+PHjGTJkCNXV1QCcfvrp3H333bz88suMHz+ehQsX8sADD3DQQQc1OMcNN9zAjBkzuO2225g0aRJvvvkmf/jDH7KrWI6suY8qhVRZWekrV64sdjFkP2WzC78Iit9YvL+91atXc9RRRxXt/JK+ltrKzF5198pU29SDFxGJqRYDvJmdZ2aPmdk6M9tpZu+a2TwzOyApX3czu9fMNpvZl2b2nJkNzl/RRUSkOen04H8KfA1cB4wF7gIuA541s3YAFizgsDTc/hPgXKA98LyZ5XfSqYiIpJTOLJrx7r4p4fflZlYL3A+MBJYBE4BTgTPc/XkAM6sB1gDXAldEWWgREWlZiz34pOC+z5/C537h8wTg433BPdxvG/AEMDHXQopI9FrLBAtpWq5tlO1F1hHh8+rw+Rjg7RT5VgHlZtY1y/OISB60b98+5c080rrs3Lmz0U1Tmcg4wJtZP+BnwHPuvm9eYw+g8cLLsO8e3u7ZFU9E8qF3795s2LCBHTt2qCffCrk7O3bsYMOGDfTu3Tvr42R0J2vYE38cqAN+mLgJSPUuaXZysZlNB6YD9autiUj+devWDQjWUf/qq6+KXBpJpX379vTp06e+rbKRdoA3s04EM2UGAiPcfX3C5lqCXnyyfT33VL173L0aqIbgRqd0yyIiuevWrVtOwUNav7SGaMysPfAYcBIwzt3fSsqyimAcPtnRwIfu/kWKbSIikkfp3OjUDngQGAVMdPcVKbItBfqZ2YiE/boB48NtIiJSYOkM0fwT8LfAHOBLM0v8Hqv14VDNUqAGeMDMriEYkplJMAb/D9EWWURE0pHOEM3Z4fMsgiCe+LgEwN33An8NPAvcCfyG4O7X0939o4jLLCIiaWixB+/uFekcyN1rgYvCh4iIFJlWkxQRiSkFeBGRmFKAFxGJKQV4EZGYUoAXEYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EZGYUoAXEYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EZGYUoAXEYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EZGYUoAXEYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJqbQCvJn1N7M7zKzGzHaYmZtZRVKeijA91eOgfBReRESaVpJmvkHA+cCrwIvAWc3knQcsTUrbnnnRREQkF+kG+BfcvQ+AmV1C8wH+A3dfkXPJREQkJ2kN0bj73nwXREREopWPi6zzzKzOzLaZ2VIzG5yHc4iISAvSHaJJx27gHuAZYBNwJHAd8JKZneTuq5N3MLPpwHSA8vLyCIsiUbLZVtDz+Y1e0POJxFVkPXh3/4u7X+ruS9z9RXf/BTAccGBWE/tUu3ulu1eWlZVFVRQRESHP8+Dd/SPgX4Eh+TyPiIg0VogbnYygFy8iIgWU1wBvZuXAMODlfJ5HREQaS/siq5mdF/74nfD5bDPbBGxy9+VmdgvBP4wagousRwAzgb3A3OiKLCIi6chkFs0jSb/fGT4vB0YCq4DLgGnAAcBmYBkw293fzamUIiKSsbQDvLs3O1fO3e8D7su5RCIiEoko58GLRKLQ8+6pcgo2D6CqwHVLUvDXFt3XUExaLlhEJKYU4EVEYkoBXkQkphTgRURiSgFeRCSmFOBFRGJKAV5EJKYU4EVEYkoBXkQkphTgRURiSgFeRCSmFOBFRGJKAV5EJKYU4EVEYkoBXkQkphTgRURiSgFeRCSmFOBFRGJKAV5EJKYU4EVEYkoBXkQkphTgRURiSgFeRCSmFOBFRGJKAV5EJKYU4EVEYiqtAG9m/c3sDjOrMbMdZuZmVpEiX3czu9fMNpvZl2b2nJkNjrrQIiLSsnR78IOA84HPgBdTZTAzA5YCY4GfAOcC7YHnzax/7kUVEZFMpBvgX3D3Pu4+DnikiTwTgFOBKe7+kLv/PkxrB1ybe1FFRCQTaQV4d9+bRrYJwMfu/nzCftuAJ4CJ2RVPRESyFeVF1mOAt1OkrwLKzaxrhOcSEZEWlER4rB7A2hTpteFzd+CLxA1mNh2YDlBeXh5hUURaP5ttxS6CxFyUPXgDvIn0lNy92t0r3b2yrKwswqKIiEiUAb6WoBefrHv4/FmE5xIRkRZEGeBXEYzDJzsa+NDdv0ixTURE8iTKAL8U6GdmI/YlmFk3YHy4TURECijti6xmdl7443fC57PNbBOwyd2XEwTxGuABM7uGYEhmJsEY/D9EV2QREUlHJrNokm9wujN8Xg6MdPe9ZvbXwD+G2zoRBPzT3f2jnEsqIiIZSTvAu3uLc7rcvRa4KHyIiEgRaTVJEZGYUoAXEYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EZGYUoAXEYmpKNeDF4lOVaqVp0UkE+rBi4jElAK8iEhMKcCLiMSUAryISEwpwIuIxJQCvIhITCnAi4jElObBS/o0N12kTVEPXkQkphTgRURiSgFeRCSmFOBFRGJKAV5EJKYU4EVEYkoBXkQkpjQPvo2x2VbsIkhbUMh7Fqqaf09G+p4tYL08Brd9qAcvIhJTCvAiIjEVaYA3s5Fm5ikeW6M8j4iItCxfY/BXAH9K+L0uT+cREZEm5CvAr3b3FXk6toiIpEFj8CIiMZWvAP+gmX1tZlvM7P+bWXmeziMiIk2IeohmG3ALsBz4HDgBuA6oMbMT3P3TxMxmNh2YDlBerv8Bsh/QmvpSQJEGeHd/HXg9IWm5mb0AvEJw4fX6pPzVQDVAZWWl3vkiIhHK+xi8u78GvAcMyfe5RETkG4W6yGqAeugiIgWU9wBvZpXA4cDL+T6XiIh8I9IxeDN7EFgDvAZsJbjIOhPYANwR5blERKR5Uc+ieRv4O+AnQBfgE2AJcKO7b474XCIi0oyoZ9HMA+ZFeUwREclObNaDL8Y66X6jrhuLSOulpQpERGJKAV5EJKYU4EVEYkoBXkQkphTgRURiSgFeRCSmFOBFRGIqNvPg91taX1xEmqAevIhITCnAi4jElAK8iEhMKcCLiMSUAryISEwpwIuIxJQCvIhITGkefB5YXpem17x3aWV0L0arpR68iEhMKcCLiMSUAryISEwpwIuIxJQCvIhITCnAi4jElAK8iEhMaR58Dmx2UxPeNS9YpK3L7/0sDXmeQoZ68CIiMaUALyISU5EGeDM7xMweNbNtZva5mS0xs/IozyEiIumJLMCbWRdgGXAkcCEwBTgMeN7MSqM6j4iIpCfKi6w/AgYCR7j7+wBm9ibwH8AM4NYIzyUiIi2IcohmArBiX3AHcPc1wL8BEyM8j4iIpCHKAH8M8HaK9FXA0RGeR0RE0hDlEE0P4LMU6bVA91Q7mNl0YHr46xdm9m4O5+8FbM5h/wjldQJtK6pn3uwPdQTVM26yrmeOc+4PbWpD1Dc6pZqu32TR3b0aqI7ixGa20t0rozhWa7Y/1HN/qCOonnHTGusZ5RDNZwS9+GTdSd2zFxGRPIoywK8iGIdPdjTw7xGeR0RE0hBlgF8KDDWzgfsSzKwCGBZuy7dIhnragP2hnvtDHUH1jJtWV0/ziFa5CW9m+jOwE7ieYDz+58ABwLHu/kUkJxIRkbRE1oN39y+BM4D3gF8DDwJrgDMU3EVECi+yHryIiLQurX41STNrZ2YzzWytme0ysz+b2blp7FdhZt7MY3JC3qom8vw2v7VrUN6s6hnuu6iJ8s9PkfdUM3vJzHaa2SdmdquZdY6+Rk2WNdv27GZmN4Rl32JmW8Of/yZF3oK1Zy4L7JlZJzP7v2b2l7A9asxseIp8Wb83opJtPc2s0syqzewdM9thZh+a2YNmNiBF3rVNtFujNs6HHNuyqThzfFK+wralu7fqBzAH2A38FDgduAfYC4xrYb+OwNAUj+eAXUCPhLxVBNcMhiXlPby11zPcdxHwaYq6HpqU71iCayS/BUYBlxBMYX24tdcT+G/AJ8A84GxgTFhvB/57Ut6CtCfQhWCtpbeBvyFYkuMt4D+B0jT2fxDYSrCO0yhgSdg+x0f13ih2PYF/JFiu5MfACOAHwGpgC3BIUt61wO9TvI+7t+Y6hvs7sDBF2bsUsy3z/ubI8UXvHb4Ys5PS/wV4M8tG/Bx4JCl9X0AoaYv1DAPd+jTy/SZ8E7dPSJsa1v3E1lxPoDT5jyVh3w+L0Z7AlcDXwKCEtAFAHXB1C/seF5bxhwlpJcC7wNKo3hutoJ5lKdIODYPaz5LS1wIPFKJOUdYxzOvATS3kKXhbtvYhmjFAB+CBpPQHgMGpPua14HsEs3ruj6BsUYq6no2YWXtgLPDP7v5VwqZ/BvZQmAXhsq6nu3/p7jtSbFoJHBxdETOSywJ7E4CvgIcT9q0DFgNjzKxjmJz390Yasq6nu29KkbYO2AT0i7icuSjEYokFb8vWHuCPIfiP935S+qrwOdNFzC4kGMr4fRPbPzKzr81snZndXMCx6Sjq2dvMNptZnZm9Z2b/08z+KmH7t4FOJC0I5+67CD6GFmJBuKjbE2A48E4T2/LdnrkssHcMsCbFP61VBEFgUEK+qF+zTEW6kKCZHUXQm12dYvP4cKx+t5mtKNT4O9HU8bKw3DvMbJmZnZbiHAVty9b+pds9gK0efo5JUJuwPS1m1o9gGuftYU8p0fvA/wJeJ/iodRZwFXAicGYW5c5UrvV8A3iV4I3SCZhEMFZ9GME4e+IxmloQLu3XMgeRtSfUL1Y3FLggaVOh2jPjBfbS3Hff9n3Pkb1mWcqlng2YWQlwN0EP/pdJm58A/kQwvboPcDnwGzOb4u7Jvd6o5VrHB4DfAR8TDEFdAywzszPd/Y8J5yhoWxY0wJvZaODZNLIud/eRBAuVZbSAWTOmEHxiaTQ8k+LN86yZrQfmm9lod38ukxMVup7unjxb5ikz+wL4ezO72d3/I+FYUb2eRW1PMxsJ/D/g1+7+YOK2qNuzBdnWJ93XIsq/gVxEVYYFwCnAOe7eIKC6+08aHNzsN8AKgs5KvgM85PY3OCXh1xfN7HGCTwQ3AacmHKugbVnoHvxLwFFp5Nv3sbUW6G5mlvRfr3vC9nRNBd5w9z+nmf8hYD4whGDmTSaKWc99HgL+HqgkuLDaXC+hO998TMxEUeppZkMIlr9YBlycZllzac+m5LLAXi2Qagpe8muRj/dGpiJZSNDM5hEsD36huz/TUn53/9rMHgFuNrO+7v6XdM+VhUgXS3T37Wb2JA3fnwVvy4IG+HC8sanx0lRWEUx3/DYNx632jVWltYhZGBCOIviYnqmM7wQrVj2TJPfY/5Ng/K/BgnBm1ongqxYfyfQExainmQ0G/kAwLHVu0gXjdER5Z18uC+ytAiaZWZekcfijCS56v5+QL+r3RqZyXkjQzGYRDJtd4e6/zuDczX3yjFI+FktM7rEXvi3zPf0olwffTCu6MSn9OeCtDI6zgGDGQu8M9rkqbJzT20o9k/a9nWAq2rcT0n5LsJRESULaBWE9v9Pa60lwTeETgpkz3TI8d+TtSfAJqQ4YmJBWEb7X/kcL+x4flufChLQSgguPT+TzvVHIeoZ5rwjrel2G5y0J23pda69jiuN1Az4kGJ4sWlvm/c0RwQv/fwhuTLoaGAncFQau8Un5/gV4P8X+7Qm+ZWVpM+d4PQwA4whuork1bNinW3s9CS7ovEBwI8lZwHjgvnDfu5L2PZ7gRpolBDfWXEzwsfCRfNcvgnr2JpgnXQucQ+MbSjoWuj0J5ua/T3BDzESCqXZ/Bj4Auia1UR1wQ9L+iwk+/l8Stsej4WtzYlK+tF6zPLZZ1vUEJodlfTpFmx2dkO/vwtdjKsENQJOBFwn+MUxu5XX8KfALgpu4RhLM1nuL4JPYacVsy4L8Uef4wv8VweqU6wj++70JnJci3x+BtSnSJ4VvknObOcdigiGMHeE5/h3434lBo7XWk2Dc8LfhfrsIAvhrBDMQ2qXYfzhQE+bdSDAu3egGolZYz5FhOzb1qChGexKMoz9GcAPd9rAtKpLyVIRlrEpK70zwz+eTsD1eBkZm+5rlud2yqiff3G2c6vHHhHxDCa6pbCT4Z7yNoGc7pg3UcTzBfPnNYdm3EFwjOqnYbanFxkREYqq13+gkIiJZUoAXEYkpBXgRkZhSgBcRiSkFeBGRmFKAFxGJKQV4EZGYUoAXEYmp/wLlsU9GrXa0fwAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"z = target_data[' y position (m)']\n", | |
"random_theta = np.random.normal(.25, 0.01, 100)\n", | |
"random_velocity = np.random.normal(6.6, .7, 100)\n", | |
"impacts = z_impact(random_velocity, random_theta)\n", | |
"\n", | |
"plt.hist(impacts, color = \"green\", label = \"robot\", range=[-0.75, 0.5])\n", | |
"plt.hist(z, color = \"blue\", label = \"actual\")\n", | |
"\n", | |
"plt.legend(loc=\"best\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The histogram above shows the comparision of the actual data to the robot data. (A hundred values are used for the histogram because when there a 1000 the comparision is too hard to see.) The mean of the data is the same and the standard deviation is similar. So the precision required of the robot is .7 m/s for velocity and 0.01 radians for the angle. " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**BONUS** Considering x_impact varience" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"x_mean = 0.01207963411779779\n", | |
"x_mean_robot = 0.03864333323075643\n", | |
"\n", | |
"x_std = 0.25716367278418045\n", | |
"x_std_robot = 0.2496580566397733\n", | |
"\n", | |
"z_mean = -0.047397370492807414\n", | |
"z_mean_robot = -0.07555733148113282\n", | |
"\n", | |
"z_std = 0.2548611138551949\n", | |
"z_std_robot = 0.1944179493168654\n" | |
] | |
} | |
], | |
"source": [ | |
"v_x = np.random.normal(.05, .45, 100) \n", | |
"v_y = np.random.normal(5.55, .54, 100) #Should be the largest\n", | |
"v_z = np.random.normal(1.98, .01, 100)\n", | |
"\n", | |
"x_impact2 = (v_x/v_y)*3 \n", | |
"z_impact2 = (3*((v_z/v_y)-((g/(2*v_y**2))*3)))+0.3\n", | |
"\n", | |
"print(\"x_mean =\", np.mean(x))\n", | |
"print(\"x_mean_robot =\", np.mean(x_impact2))\n", | |
"print('')\n", | |
"print(\"x_std =\", np.std(x))\n", | |
"print(\"x_std_robot =\", np.std(x_impact2))\n", | |
"print('')\n", | |
"print(\"z_mean =\", np.mean(z))\n", | |
"print(\"z_mean_robot =\", np.mean(z_impact2))\n", | |
"print('')\n", | |
"print(\"z_std =\", np.std(z))\n", | |
"print(\"z_std_robot =\", np.std(z_impact2))\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7fad6fa45908>]" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.plot(x,z, 'o', label= \"actual\")\n", | |
"plt.plot(x_impact2, z_impact2, 'o', label=\"robot\")" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"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.7.3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |