Skip to content
Permalink
master
Switch branches/tags

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?
Go to file
 
 
Cannot retrieve contributors at this time
{
"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": 359,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.18031177 0.062429 0.30367765 0.15812724 0.12260135 -0.25306526\n",
" -0.15587544 0.38754071 -0.14240104 -0.14101059 -0.50548968 -0.01383176\n",
" -0.02339399 -0.34207992 0.49327021 0.10059057 0.05323261 -0.14844383\n",
" -0.28597981 0.43300113 -0.26983244 -0.27276515 0.06954583 -0.38871061\n",
" -0.4601371 -0.20673234 0.27439518 -0.01004235 0.33819715 -0.21311798\n",
" 0.20225833 0.1435592 -0.26030212 0.15031871 0.39115244 -0.2314917\n",
" 0.07605636 -0.17154839 0.17731786 -0.15640621 -0.42359454 0.00891441\n",
" -0.36703991 -0.1420244 0.43270682 0.02015643 0.05252714 -0.52257463\n",
" 0.30521108 0.05773216 -0.36922583 -0.36358543 -0.62430491] \n",
"\n",
"z_mean = -0.05341131259475714\n",
"z_std = 0.2751342116268382\n",
"class mean = -0.047397370492807414\n",
"class std = 0.2572542284595757\n"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"import math\n",
"\n",
"def z_coordinate(theta,v_0):\n",
" z = ((3/math.cos(theta))*(math.sin(theta)-((9.81*3)/(2*v_0**2*math.cos(theta))))+.3)\n",
" return z\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",
"#1. generate random theta_i and v_0i variables:\n",
"pi = np.pi\n",
"theta_i = (pi/36)+((pi/12)-(pi/36))*np.random.rand(53) #assuming 10 degree (pi/18 rad) spread for a sample size of 53 (with a lower bound of 5 degrees (pi/36 rads) and an upper bound of 15 degrees pi/12 rads)\n",
"v_0i = 6+(9-6)*np.random.rand(53) # assuming 6 - 9 m/s variance in v0 for sample size of 53\n",
"\n",
"#2. plug into equation 2:\n",
"z_impact = np.zeros(53)\n",
"for i in range (0,53):\n",
" z_impact[i] = z_coordinate (theta_i[i],v_0i[i])\n",
"z_mean = np.mean(z_impact)\n",
"z_std = np.std(z_impact)\n",
"\n",
"#print our data\n",
"print (z_impact, \"\\n\")\n",
"print (\"z_mean =\", z_mean)\n",
"print (\"z_std =\", z_std)\n",
"\n",
"#3. Compare with class data:\n",
"class_data = pd.read_csv(\"../data/target_data.csv\")\n",
"class_y = class_data[\" y position (m)\"]\n",
"print (\"class mean =\", class_y.mean())\n",
"print (\"class std =\", class_y.std())"
]
},
{
"cell_type": "code",
"execution_count": 360,
"metadata": {},
"outputs": [
{
"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": [
"#4. Adjust box plot of the robot's data until it is similar to the class data\n",
"plt.boxplot (z_impact, labels = [\"robot data\"]);"
]
},
{
"cell_type": "code",
"execution_count": 361,
"metadata": {},
"outputs": [
{
"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": [
"#box plot of the class data\n",
"plt.boxplot (class_y, labels = [\"class data\"]);"
]
},
{
"cell_type": "code",
"execution_count": 377,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "'int' object is not callable",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-377-7fdfc6b1cf4d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0mx_impact\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m53\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m53\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m \u001b[0mz_impact2\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mz_coordinate2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv_z\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mv_y\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 30\u001b[0m \u001b[0mx_impact\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx_coordinate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv_x\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mv_y\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[0mz_mean2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mz_impact2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-377-7fdfc6b1cf4d>\u001b[0m in \u001b[0;36mz_coordinate2\u001b[0;34m(v_z0, v_y)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mz_coordinate2\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv_z0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv_y\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv_z0\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mv_y\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m9.81\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mv_y\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m0.3\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mz\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: 'int' object is not callable"
]
}
],
"source": [
"#Bonus with x variation (x(0) = 0)\n",
"\n",
"def x_cordinate(v_x, v_y):\n",
" x = (v_x*3)/v_y \n",
" return x\n",
"\n",
"def z_coordinate2(v_z0, v_y):\n",
" z = 3((v_z0/v_y)-(9.81/(2*v_y**2))*3)+0.3\n",
" return z\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",
"#1. generate random v_x, v_y, and v_z variables:\n",
"\n",
"v_x = np.random.rand(53)*0.5 #v_x and v_z should be small relative to v_y, so they will be scaled by 0.5\n",
"v_z = np.random.rand(53)*0.5\n",
"v_y = 6+(9-6)*np.random.rand(53) #again assuming 6 - 9 m/s variance for v_y\n",
"\n",
"#2. plug into equations 1.a and 1.b\n",
"z_impact2 = np.zeros(53)\n",
"x_impact = np.zeros(53)\n",
"for i in range (0,53):\n",
" z_impact2[i] = z_coordinate2(v_z[i],v_y[i])\n",
" x_impact[i] = x_coordinate(v_x[i],v_y[i])\n",
"z_mean2 = np.mean(z_impact2)\n",
"z_std2 = np.std (z_impact2)\n",
"x_mean = np.mean (x_impact)\n",
"x_std = np.std (x_impact)\n",
"print (z_mean2,z_std2,x_mean,x_std)\n",
"\n",
"#I can not for the life of me figure out what I'm doing wrong here"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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
}