{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Inverse Kinematics Simulation" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from scipy.optimize import fsolve\n", "import matplotlib.pyplot as plt\n", "import math\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Polar coordinate functions" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def cartesian_to_polar(x, y):\n", " r = np.sqrt(x**2 + y**2)\n", " theta = np.arctan2(y, x)\n", " return r, theta\n", "\n", "def polar_to_cartesian(r, theta):\n", " x = r * np.cos(theta)\n", " y = r * np.sin(theta)\n", " return x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculate end-joint values from xyz position" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "flip\n", "[62.18186071534606, -126.63734509021032, 142.6959710408549, -106.0586259506446]\n" ] } ], "source": [ "def normalize_degree(theta):\n", " # Normalizes degree theta from -1.5pi to 1.5pi\n", " multiplier = 1.5\n", " normalized_theta = theta % (math.pi * multiplier)\n", " \n", " # Maintain the negative sign if the original angle is negative\n", " if theta < 0:\n", " normalized_theta -= math.pi * multiplier\n", "\n", " # Return angle\n", " return normalized_theta\n", "\n", "def get_joints_from_xyz_rel(x, y, z, rx=0, ry=0, rz=0, tool_offset=(0.145, 0, 0.14), initial_guess = (math.pi/2, math.pi/2, 0)):\n", " # Get limbs and offsets\n", " offset_x, offset_y, offset_z = tool_offset\n", " l_bs, l1, l2, l3 = (0.14, .422864, .359041, .15)\n", "\n", " # Calculate base angle and r relative to shoulder joint\n", " def calculate_theta(x, y, a):\n", " # Calculate if we need the + or - in our equations\n", " if (x>-a and y>=0) or (x>a and y<0):\n", " print('no flip')\n", " flip = 1\n", " elif (x<-a and y>=0) or (xa and y>=0) or (x>-a and y<0):\n", " print('no flip')\n", " flip = 1\n", " elif (x=0) or (x<-a and y<0):\n", " print('flip')\n", " flip = -1\n", " else: \n", " print('critical')\n", " # Critical section (x=a, or x=-a). Infinite slope\n", " # Return 0 or 180 depending on sign\n", " return math.atan2(y, 0)\n", " \n", " # Calculate tangent line y = mx + b\n", " m = (x*y + math.sqrt(x*x*y*y-(x*x-a*a)*(y*y-a*a)))/(x*x-a*a)\n", " b = flip * a * math.sqrt(1+m*m)\n", "\n", " # Calculate equivalent tangent point on circle\n", " cx = (-flip*m*b)/(1+m*m)\n", " cy = m*cx + flip*b\n", "\n", " # Calculate base angle\n", " theta = math.atan2(cy, cx) + (-math.pi if flip==1 else 0)\n", "\n", " return theta\n", "\n", "calculate_theta(5,-5,1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simulate arm and joint angles" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "no flip\n", "Target position (x,y,z): 0.3 0.3 0.3\n", "Angles (base, shoulder, elbow, wrist): [-25.7322, 113.4225, 127.6133, -14.1908]\n", "no flip\n", "Robot Angles: [-115.7322, -113.4225, 127.6133, -104.1908]\n", "elbow (x,y): -0.168 0.388\n", "wrist (x,y): 0.18 0.3\n", "tool (x,y): 0.33 0.3\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAGxCAYAAABRB6M1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABV60lEQVR4nO3deVxVBfrH8c8FBNxAFAVRFHet3HIhzFwmEqtfZVOTmpNKlo3t0aLWJDY2YeWUpqblpNlUozWTTqvloNgiLqmMVmpqGmkCboBigsL5/XH14lWWc4HD5V6+79frvCbOfc65z702+eUsz7EZhmEgIiIiIlXKx90NiIiIiHgjhSwRERERCyhkiYiIiFhAIUtERETEAgpZIiIiIhZQyBIRERGxgEKWiIiIiAUUskREREQsoJAlIiIiYgGFLBERERELKGS54Msvv+SGG24gIiICm83G8uXLHa+dPn2aiRMn0rVrV+rXr09ERASjR4/m119/ddSkpKRgs9lKXDZu3Fjme6empvK73/2O+vXrExQUxIABA/jtt98cr//1r3+lX79+1KtXj0aNGpW4jw8//JCOHTvSqVMnPv7440p9FyIiIlI2hSwX5OXl0b17d+bOnXvRaydPnmTz5s08/fTTbN68mQ8++ICdO3dy4403Omr69evHwYMHnZa77rqLNm3a0Lt371LfNzU1laFDhzJkyBA2bNjAxo0buf/++/HxKf7jKygo4A9/+AMTJkwocR/5+fncd999vPrqq8yZM4cJEyZQUFBQiW9DREREymLTA6IrxmazsWzZMoYNG1ZqzcaNG+nbty8///wzrVq1uuj106dP06JFCx544AGefvrpUvdzxRVXcM011zBt2rRy+3rzzTd5+OGHyc7Odlqfm5tLt27d+PbbbwHo06cPW7dupWHDhuXuU0RERFynI1kWysnJwWazlXn67siRI8THx5e6j6ysLNavX0+zZs3o168fYWFhDBw4kK+//tqlXoKCgoiPj6d58+ZEREQwYcIEBSwRERELKWRZ5NSpU0ycOJGRI0cSFBRUYs0bb7xBXFwcLVu2LHU/P/30EwBTp07l7rvvZsWKFVx++eVcffXV7Nq1y6WeEhMTOXz4MEeOHOGJJ55waVsRERFxjUKWBU6fPs1tt92GYRjMmzevxJr9+/fz+eefM27cuDL3VVRUBMA999xDfHw8PXv25OWXX6ZTp04sXLjQ5d6Cg4N1BEtERKQa+Lm7AW9zLmD9/PPPrFq1qtSjWIsWLaJJkyZOF8aXpHnz5gBccsklTuu7dOlCenp61TQtIiIiVU5HsqrQuYC1a9cu/vvf/9KkSZMS6wzDYNGiRYwePZo6deqUuc+oqCgiIiLYuXOn0/off/yR1q1bV1nvIiIiUrV0JMsFJ06cYPfu3Y6f9+7dS1paGo0bN6Z58+bceuutbN68mY8//pjCwkIyMjIAaNy4Mf7+/o7tVq1axd69e7nrrrsueo8DBw5w9dVX89Zbb9G3b19sNhuPP/44iYmJdO/enR49erB48WJ27NjBv/71L8d26enpHD16lPT0dAoLC0lLSwOgffv2NGjQwKJvREREREqjEQ4uSElJYfDgwRetHzNmDFOnTqVNmzYlbrd69WoGDRrk+Pn222/n559/5ptvvrmodt++fbRp0+aibaZPn87cuXM5evQo3bt354UXXqB///6O18eOHcvixYvLfW8RERGpHgpZIiIiIhbQNVkiIiIiFlDIEhEREbGAQpaIiIiIBRSyRERERCygkCUiIiJiAYUsEREREQsoZImIiIhYwCtClmEY5ObmopFfIiIiUlN4Rcg6fvw4wcHBHD9+3N2tiIiIiABeErJEREREahqFrJIUFV60Kh34sPo7EREREQ/l5+4GaqR1YyD7O4ywwWwPG8zzzQbwjn8j6gIHgCB39yciIiI1nlc8IDo3N5fg4GBycnIICqpkBDIMjGUR2E5lOFYVYWNLSE9Whw2mQ9hgbmraH/yDK9m1iIiIeDOFrPNkAP/K2cH9n3Qps86w+WAL6QVhg+1L0yuhTsMKv6+IiIh4H50uPCsN6AvcmZVSbq3NKIKjG+3L9hfA5guN+5wXuvqBX32LOxYREZGaTCHrrG5AK2Bw5mrXNzYK4cg6+/JDEvjUgSZ9odlgCBsEof3Ar24VdywiIiI1mU4XnmeWYTBiWThhp7KqsDvAxx9CrzgvdF0BvoFV+x4iIiJSoyhknedE9vc0+PSyKuysFL6BEBpTHLqaRIOvv/XvKyIiItVGpwvP08DE9VhVovAUZK62L9sA37r2i+fDBkOzQdCkj/2Uo4iIiHgshazzVeR6rKpQ+Btk/Ne+gP2i+ab97YErbDA07gU++qMSERHxJPqb+3zhsXAmj98OfUXdM3nu6+NMHhz83L4A+DWEZlcVh66QnuDj677+REREpFy6JqsEyUWneeroJgZnrmZw5mquPPQN9QtPVkGnVaROMDQbcF7o6g42PSFJRESkJlHIKoEBdAW+P/tzncIC+hzd6Ahd/Q6vpW7hqUq/T5XxD4FmA4tDV6PLFLpERETcTCGrFK8D95Tymn9hPtFH1jtC14DDqfgUFVTJ+1aJgCb2wHUudAVfAjabu7sSERGpVRSySnESaAkcM1F755nfeOPIurN3DKbYh5IWna6SPqpEQFP7qIiwwfaxEUGdFLpEREQsppBVhonACybq6gDpQPi5FWdOwuG154WuDWCcqbK+Ki0w3Dl0NWyv0CUiIlLFFLLKkA60BQpN1CYCU0t78fQJOPQNZJ0NXUe/tT+Kp6ao26I4dIUNhvptFLpEREQqSSGrHH8A/mWirhn2UBZgZqencyHr6+LQdWwzGEWV6LKK1Wt1Qehq7e6OREREPI5CVjm+Bq4yWbsYGF2RNynIhqyv7KcXs1LgWBr2exxriPptnENXvZbu7khERKTGU8gqhwH0BjabqL0c+Bao9Im2/KOQ9aU9cGWuhuytld1j1WrQrjhwNRsE9SLc3ZGIiEiNo5BlwlvAGJO1XwH9q7qBU4cha01x6Mr5vtxNqlXDjs6hq26YuzsSERFxO4UsE/KB1kCmido/AO9VeQcXOJVlv5brXOjK3WH1O7omqMt5oWsgBDZ1d0ciIiLVTiHLpKnAMybqfIG9QKQlXZTit4POoev4rup89/IFX3Ze6BpgH5YqIiLi5RSyTMoAWgFmRoxOBKZb0oVJJw+cDV2r7aHrxE/u7OYCNmjU7bzQdZX9sUAiIiJeRiHLBXcAb5uoCwH2A/Us68RFeenOoSvvZ3d3dB4bhPQ8G7oGQdOrwD/Y3U2JiIhUmkKWC74F+pisfQ0Yb1knlXRirz10Za62B6+T+93dUTGbD4T0Kj7S1fRKqNPQ3V2JiIi4TCHLRVcCa03UXQpsowrGOVjNMODEHufQ9dtBd3dVzOYLjfucd6TrSvCr7+6uREREyqWQ5aL3gOEma1cCsRb2YgnDgOM/nhe6UuCUmfsqq4lPHWjS1/7MxbBBENoP/Oq6uysREZGLKGS56DT25xmaOcH2f8BHlnZTDQzDPiIic3Vx6Mo/7O6uivn4Q+gV54WuK8A30N1diYiIKGRVxHRgsok6G/Aj0N7adqqXUQQ5P5wXutZAwVF3d1XMJwCa9rMPRQ0bDE2iwdff3V2JiEgtpJBVAUewz8H6zUTtg8Asa9txL6MIsrc5h67TOe7uqphvXft1XI7Q1cd+ylFERMRiClkVNB5YYKKuIfZTi9XTVQ1QVAjZ/zsvdH0JZ467u6tifvWhaf/i0NW4F/j4ubsrERHxQgpZFfQd0NVk7SzsR7RqpaIzcGxLceg69BWcyXN3V8X8GtoHop4LXSE9wcfX3V2JiIgXUMiqhFgg2URde2An4GNtO56h6DQc3XRe6PoGCk+6u6tidYKg6YDiOV0h3e2zu0RERFykkFUJHwI3maz9CPvdhnKBwgI4urE4dB1eC4Wn3N1VMf8Q+/MWm50NXY0uU+gSERFTFLIqoRDoCJh5MmAs9rlZUo7CfDiy/mzoSoHDqVCU7+6uigU0gWYDi0NX8CVgq/EjZ0VExA0UsippJvCIydrvsE+CFxec+Q2OrCsOXUfW2U851hQBTe3zucIG24NXUCeFLhERASp4mdDcuXOJiooiMDCQ6OhoNmzYUGrtBx98QO/evWnUqBH169enR48e/OMf/3CqGTt2LDabzWkZOnRoRVqrdvFAA5O1r1jZiLfyq2sPMN3+Atd8Cbdmw+9WwqVP2qe929x8Z2D+IUh/HzbeC590gWUR8M1I2P065O6yD3MVEZFayeUjWUuXLmX06NHMnz+f6OhoZs6cyfvvv8/OnTtp1qzZRfUpKSkcO3aMzp074+/vz8cff8yjjz7KJ598QlxcHGAPWZmZmSxatMixXUBAACEhIaZ6cueRLLDfOTjbRF1d7OMcGlvbTu1y+oT94vmsFPvRrqPfglHo7q6K1W1RfKQrbDDUb6MjXSIitYTLISs6Opo+ffowZ84cAIqKioiMjOSBBx5g0qRJpvZx+eWXc/311zNt2jTAHrKys7NZvny5a92f5e6QtQvoBJj5IqcDE61tp3Y7nQtZX9sfdJ2ZAsc22wem1hT1Wl0Qulq7uyMREbGIS6cLCwoK2LRpE7GxxY899vHxITY2ltTU1HK3NwyD5ORkdu7cyYABA5xeS0lJoVmzZnTq1IkJEyZw5MiRUveTn59Pbm6u0+JOHYDrTNbOBc5Y2EutVycIWlwHPV+EoRvhliMw4EPonGCfgYWbjyKdTIe9b8G6ePhPFPynDay7E/b+A06aeSKmiIh4CpcuaDl8+DCFhYWEhYU5rQ8LC2PHjh2lbpeTk0OLFi3Iz8/H19eXV199lWuuucbx+tChQ/n9739PmzZt2LNnD08++STXXnstqamp+PpePBgyKSmJZ555xpXWLfcQ8ImJul+A5cCtlnYjDv6NoOUN9gUg/6h9Cv2504vZW93ZHeTtg58W2ReABu2Kj3I1GwT1ItzZnYiIVIJLpwt//fVXWrRowdq1a4mJiXGsf+KJJ1izZg3r168vcbuioiJ++uknTpw4QXJyMtOmTWP58uUMGjSoxPqffvqJdu3a8d///perr776otfz8/PJzy++rT83N5fIyEi3nS4E+6nCy4AfTNT2B76yth0x69RhOPRl8ZyunO/d3ZGzhh2dQ1fdsHI3ERGRmsGlI1mhoaH4+vqSmZnptD4zM5Pw8PBSt/Px8aF9+/YA9OjRg+3bt5OUlFRqyGrbti2hoaHs3r27xJAVEBBAQECAK61bzob9Avg/maj9GtgMXG5pR2JKYChE/t6+AJzKsj/k+lzoyi39CG21OP6jfdn9mv3noC7nha6BENjUvf2JiEipXLomy9/fn169epGcXPwwmaKiIpKTk52ObJWnqKjI6UjUhfbv38+RI0do3ry5K+253R+BRiZrZ1nYh1RCYDNo9Qfo8yr833a4+Vfo909oPx4adnB3d5C7HXa9Cl//AT5oBp90hW8fhF+WQX7p1zGKiEj1q9AIhzFjxvDaa6/Rt29fZs6cyXvvvceOHTsICwtj9OjRtGjRgqSkJMB+/VTv3r1p164d+fn5fPrpp0yaNIl58+Zx1113ceLECZ555hluueUWwsPD2bNnD0888QTHjx9n27Ztpo5YufvuwvM9Abxoos4fSAd08sfDnDxgv2sx6+yRrhNm5v1XFxs06nb2SNcg++OA/M2NQRERkarn8iTH4cOHc+jQIaZMmUJGRgY9evRgxYoVjovh09PT8fEpPkCWl5fHvffey/79+6lbty6dO3fm7bffZvjw4QD4+vqydetWFi9eTHZ2NhEREQwZMoRp06bVuFOCZtwH/A0ob2hAATAfSLS8I6lS9VpAm1H2BSAv3Tl05f3sxuYMyP6ffdk5E7DZ76g8F7qaXgX+wW7sT0SkdtFjdSxwK/BvE3VhwM+A50VJKdWJvfbQlbnaHrxq0lgGmw+E9DovdPWHOg3d3ZWIiNdSyLLAV8CAcqvs3gLusLAXcSPDsJ9OPHcRfdZq+O2gu7sqZvOFxn3OC11Xgl99d3clIuI1FLIsYAC9gC0mansBG3H7iEypDoYBx3edF7pS4FRmuZtVG5860KSvfVRE2GD7syH96rq7KxERj6WQZZHFwFiTtV8DV1rXitRUhmEfEXF+6Mo/7O6uivn4Q+gV54WuK8A30N1diYh4DIUsi+QDrYAsE7W3AUutbUc8gVEEOT+cF7rWQMFRd3dVzCcAmvYrDl1N+oKvrigUESmNQpaFEoG/mKjzBfYCkda2I57GKILsbc6h63SOu7sq5lvXfkrx3HDUJn3spxxFRARQyLLUQaA1cNpE7SQgydp2xNMVFdrHMzhC15dw5ri7uyrmVx9CrywOXY17gY/LU2JERLyGQpbF/gi8Y6KuMfaHR9ezth3xJkVn4NiW4tB16Cs4k+furor5NbDP5joXukJ6gs/FD3wXEfFWClkW2wj0NVn7OnC3hb2Ilys6DUc3nQ1dKXDoayg86e6uitUJgqYDzgtd3e2zu0REvJRCVjXoB6SaqLsU2IbGOUgVKSyAoxuLQ9fhb6DwlLu7KuYfYn/0T7OzoavRZQpdIuJVFLKqwVJghMna/wJXW9iL1GKF+XBk/XmhKxWKSn9Qe7ULaALNBhaHruBLwKZfOUTEcylkVYPTQBvggInaG4APrW1HxO7Mb3BkXfFjgI6ss59yrCkCmton0YcNtgevoE4KXSLiUXRsvhrUwf7gaDM+BvZY2IuIg19de4Dp9gxc8yXcmg2/WwmXPmUfzWBz852B+Ycg/X3YeC980gWWRcA3I2H365C7yz7MVarFBx98wJAhQ2jSpAk2m420tLRSaw3D4Nprr8Vms7F8+fJK73fPnj3cfPPNNG3alKCgIG677TYyM52flJCamkqPHj2IiorijTfeqMAnFLGGQlY1GQ+YmZVtALMt7kWkRH71IDwWuj8LQ76BW4/BoBVwySRoEm1/1qE7ncqAn5fAhnvg446wPBLW/hH2vAHH9yh0WSgvL4/+/fvz/PPPl1s7c+ZMbCaPOJa337y8PIYMGYLNZmPVqlV88803FBQUcMMNN1BUVOSoGzduHE8//TTvvvsuSUlJ/PLLL+Y+mIjFNMSmmjTBPs7h7yZqFwLTgIaWdiRSjjoNICLOvgCczoWsr+2P/8lcDcc22wemustvB2DfO/YFoF5k8Z2LYYOhfmv39eZl7rjD/hj7ffv2lVmXlpbG3/72N7799luaN29e6f1+88037Nu3jy1btjguBVm8eDEhISGsWrWK2NhYwB7GLr/8cpo1a0ZISAjHj9eg+XFSqylkVaMHMReyjgNvAg9Y2o2Ii+oEQYvr7AtAQTZkfXVe6ErDfizWTU7+Anvfsi8A9aOKA1ezQVBfz1Sw0smTJ7n99tuZO3cu4eHhVbLP/Px8bDYbAQHFj28KDAzEx8eHr7/+2hGypkyZQpcuXThz5gwTJkzgkksuqZL3F6kshaxq1BX4HbDKRO1s7Ndx6Xyu1Fj+jaDlDfYFIP+ofSDqueGo2Vvd2h55++CnRfYFoEE759BVL8Kd3XmdRx55hH79+nHTTTdV2T6vuOIK6tevz8SJE3nuuecwDINJkyZRWFjIwYMHHXXjxo1jxIgRFBQUEBISUmXvL1JZ+ju8mj1osm4X8JmVjYhUtYDG0PIm6DUTrvsf/P4QXPVv6Hg/BF/q7u7gxB7Y83dYOwqWt4CPOsGGP8G+JfBbhru7qzHeeecdGjRo4Fi++uqrcrf58MMPWbVqFTNnzqzSXpo2bcr777/PRx99RIMGDQgODiY7O5vLL78cHx/nv77q16+vgCU1jo5kVbP/wz7OYa+J2lnA9da2I2KdwFCI/L19ATiVZX/I9bkjXbk73Nvf8R/ty+7X7D8HdTl7pGuQ/UhXYFN3duc2N954I9HR0Y6fW7RoUe42q1atYs+ePTRq1Mhp/S233MJVV11FSkpKhfsZMmQIe/bs4fDhw/j5+dGoUSPCw8Np27ZthfcpUl0UsqqZL/ZrrRJM1K4EfgB0dYF4hcBm0OoP9gXgt4OQuQayzoau47vc21/udvuy61X7z8GXnRe6BtqHpdYCDRs2pGFD1267mTRpEnfddZfTuq5du/Lyyy9zww03VElfoaGhgD3QZWVlceONN1bJfkWspJDlBncCU4ATJmpfAeZb246Ie9RtDlEj7AvAyQP2wajnQteJn9zaHjnf2ZcfZwM2aNTtvNA1wP5YoFri6NGjpKen8+uvvwKwc+dOAMLDw52WC7Vq1Yo2bdo4fu7cuTNJSUncfPPNpvYLsGjRIrp06ULTpk1JTU3loYce4pFHHqFTp07WfWCRKqKQ5QbBwFhgjonat4DngMZWNiRSE9RrAW1G2ReAvHTn0JX3sxubMyD7f/Zl50zABiE9iyfSN70K/IPd2J+1PvzwQ+Lj4x0/jxhhD8aJiYlMnTrV9H527txJTk6OS/vduXMnkydP5ujRo0RFRfHUU0/xyCOPVOLTiFQfPVbHTX4EzP4e9jzwhIW9iHiEE/uKr+fKWg0n97u7o2I2HwjpdV7o6g91NOlOpLZTyHKj64FPTdRFAj+hw44iDoZhP514fuj67WD521UXmy807nNe6LoS/Oq7uysRqWYKWW70BRBnsvZfwC0W9iLi0QzDfuG8I3SlwKnMcjerNj51oElf+12LYYPtz4b0q+vurkTEYgpZbmQAlwLbTdReBXxpbTsi3sMw7CMizg9d+Yfd3VUxH38IveK80HUF+Jp5uqmIeBKFLDebD0wwWbsZ6GlhLyJeyyiCnB+KA1dmChQcdXdXxXwCIDSmeCJ9k77gG1D+diJSoylkuVke0BLINlE7BvszDUWkkowiyN52XuhaA6ez3d1VMd+69lOKjtDVx37KUUQ8ikJWDfA4MMNEnT+QDoRZ245I7VNUaB/PkLnafpTr0JdwOtfdXRXzqw+hVxaHrsa9wEe3wojUdApZNcDPQFugyETtM9gHmYqIhYrOwLEt54Wur+CMmfHB1cSvgX0217nQFdITfHzd3ZWIXEAhq4a4BfjARF049lDmb207InK+otNwdNN5oetrKDzp7q6K1QmCpgOKQ1ejbgpdIjWAQlYN8SUw0GTtP4A/WtiLiJSjsACObiwOXYe/gcJT7u6qmH+I/dE/zc6FrsvsA1NFpFopZNUQBnA5kGaitjewAbBZ2ZCImFeYD0fW2wNX5mo4nApF+e7uqlhAE/tDrs+FruBLwKb/gohYTSGrBnkTiC+v6KxvgH7WtSIilVF4yh60zoWuI+vspxxrioCmxdPomw2CoM4KXSIWUMiqQU4BrYBDJmqHA0usbUdEqsqZk3B47XmhawMYZ9zdVbHAcOfQ1bCDQpdIFahQyJo7dy4vvvgiGRkZdO/endmzZ9O3b98Saz/44AOee+45du/ezenTp+nQoQOPPvood9xxh6PGMAwSExNZsGAB2dnZXHnllcybN48OHTqY6sdbQhbY7xycZqLOF9iHfcaWiHiY0yfOhq6zE+mPfgtGYfX28FfgSCmv2Xzts7rOLZrRVev87sAB0s+U/YtAqwYNWHXsWDV15JlcDllLly5l9OjRzJ8/n+joaGbOnMn777/Pzp07adas2UX1KSkpHDt2jM6dO+Pv78/HH3/Mo48+yieffEJcnP3Jfc8//zxJSUksXryYNm3a8PTTT7Nt2zZ++OEHAgPLf9SEN4Wsg9iPZpn5HXcy8Jy17YhIdTidC4e+KQ5dxzbbB6ZaKQGoQY93lJqlPbCnnJp2fn7sPl2DToPXQC6HrOjoaPr06cOcOXMAKCoqIjIykgceeIBJkyaZ2sfll1/O9ddfz7Rp0zAMg4iICB599FEee+wxAHJycggLC+PNN99kxIgR5e7Pm0IWwCjgXRN1TYBfAD1mVsTLFGTbx0Q4Qlca9ttjqpBClpRBIatquHRPb0FBAZs2bSI2NrZ4Bz4+xMbGkpqaWu72hmGQnJzMzp07GTBgAAB79+4lIyPDaZ/BwcFER0eb2qc3eshk3RHgHSsbERH38G8ELf4PLv8bXLsZbjkMA5ZDp4fsM7BExCO49FyGw4cPU1hYSFiY84NdwsLC2LFjR6nb5eTk0KJFC/Lz8/H19eXVV1/lmmuuASAjI8Oxjwv3ee61C+Xn55OfX3x7dG5uDXr8RRXoC1wBrDNROwsYh8Y5iHi1gMbQ8ib7AnDqsP3RP+eOdOV8797+RKRE1fLwq4YNG5KWlsaJEydITk4mISGBtm3bMmjQoArtLykpiWeeeaZqm6xhHsJcyPoOWA38ztp2RKQmCQyFyN/bF4BTWZC1pjh05Zb+S6+IVB+XQlZoaCi+vr5kZjqfyM/MzCQ8PLzU7Xx8fGjfvj0APXr0YPv27SQlJTFo0CDHdpmZmTRv3txpnz169Chxf5MnTyYhIcHxc25uLpGRka58lBrvFqAFcMBE7SwUskRqtcBm0OoP9gXgtwz7uIiss6Hr+C63tidSW7l0TZa/vz+9evUiOTnZsa6oqIjk5GRiYmJM76eoqMhxuq9NmzaEh4c77TM3N5f169eXus+AgACCgoKcFm9TB7jXZO1HlH+BoojUInXDIWoE9H0NbvgRhu2HmLeh3Tho0M7d3YnUGi6fLkxISGDMmDH07t2bvn37MnPmTPLy8oiPt88qHz16NC1atCApKQmwn9rr3bs37dq1Iz8/n08//ZR//OMfzJs3DwCbzcbDDz/Ms88+S4cOHRwjHCIiIhg2bFjVfVIPNB77zKzynohmAHOAly3vSEQ8Ur0W0GaUfQHIS4fJfYAst7Yl4u1cDlnDhw/n0KFDTJkyhYyMDHr06MGKFSscF66np6fj41N8gCwvL497772X/fv3U7duXTp37szbb7/N8OHDHTVPPPEEeXl5jB8/nuzsbPr378+KFStMzcjyZqHYxzm8YaJ2IfAXoKGlHYmIV6jfCtpdCnXO/hfDOANnfoPC36DwpH0wqs0X6ke5tU1xo59/hnKGkVJHQ2rLo8fq1HDbALM3bM8G7rewFxGpBQwDTvwEJ3+xP2pHaqX27duzZ0/ZF6K0a9eO3bt3V1NHnsmla7Kk+nUFBpusfQWweEa0iHg7mw0atlPAEqkCClke4EGTdbuAFVY2IiIiIqYpZHmAG4A2JmtnWdmIiIiImKaQ5QF8MX+t1RfAdgt7EREREXMUsjzEnUB9k7WvWNmIiIiImKKQ5SEaAWNN1r4FHLOsExERETFDIcuDPGCy7iTwdysbERERkXIpZHmQTsC1JmvnAOWMkRMRERELKWR5mIdM1qUDH1rZiIiIiJRJIcvDDAE6m6zVOAcRERH3UcjyMDbMDyf9EkizrhUREREpg0KWB7oDCDZZq6NZIiIi7qGQ5YEaAHeZrH0XyLKwFxERESmZQpaHuh9zf3gFwGsW9yIiIiIXU8jyUFHATSZrX8UetkRERKT6KGR5MLPjHDKA961sRERERC6ikOXBBgDdTdbOAgwLexERERFnClkezIb5o1kbgXUW9iIiIiLOFLI83EigqcnaV6xsRERERJwoZHm4QOAek7X/Ag5Y2IuIiIgUU8jyAhMAPxN1Z7DfaSgiIiLWU8jyAhHAH0zWvgb8ZmEvIiIiYqeQ5SXMXgB/BPsUeBEREbGWQpaXiD67mKFxDiIiItZTyPIiZo9mbQNSLOxDREREFLK8yq3Yr88yY5aVjYiIiIhCljepA9xrsvZD4CcLexEREantFLK8zHggwESdAcyxuBcREZHaTCHLyzQFRpmsfQM4YWEvIiIitZlClhcyewF8LrDYykZERERqMYUsL9QNGGSy9hWgyLpWREREai2FLC/1oMm6H4HPrWxERESkllLI8lI3AlEmazXOQUREpOopZHkpX+B+k7WfAzss7EVERKQ2UsjyYuOA+iZrX7GyERERkVqoQiFr7ty5REVFERgYSHR0NBs2bCi1dsGCBVx11VWEhIQQEhJCbGzsRfVjx47FZrM5LUOHDq1Ia3KeRsAYk7WLgWPWtSIiIlLruByyli5dSkJCAomJiWzevJnu3bsTFxdHVlZWifUpKSmMHDmS1atXk5qaSmRkJEOGDOHAgQNOdUOHDuXgwYOO5Z///GfFPpE4MXsB/Ensc7NERESkatgMwzBc2SA6Opo+ffowZ459XnhRURGRkZE88MADTJo0qdztCwsLCQkJYc6cOYwePRqwH8nKzs5m+fLlrn8CIDc3l+DgYHJycggKCqrQPrzZtcAKE3WtgT3Yr+cSEZHaq3379uzZs6fMmnbt2rF79+5q6sgzuXQkq6CggE2bNhEbG1u8Ax8fYmNjSU1NNbWPkydPcvr0aRo3buy0PiUlhWbNmtGpUycmTJjAkSNHSt1Hfn4+ubm5TouUzuxw0p+xP9NQREREKs+lkHX48GEKCwsJCwtzWh8WFkZGRoapfUycOJGIiAinoDZ06FDeeustkpOTef7551mzZg3XXnsthYWFJe4jKSmJ4OBgxxIZGenKx6h1hgCdTNZqnIOIiEjV8KvON5s+fTpLliwhJSWFwMBAx/oRI0Y4/rlr165069aNdu3akZKSwtVXX33RfiZPnkxCQoLj59zcXAWtMvhgvzbrPhO1a4A0oIeF/YiIiNQGLh3JCg0NxdfXl8zMTKf1mZmZhIeHl7ntjBkzmD59Ol988QXdunUrs7Zt27aEhoaWeq43ICCAoKAgp0XKNhoINlmrcQ4iIiKV51LI8vf3p1evXiQnJzvWFRUVkZycTExMTKnbvfDCC0ybNo0VK1bQu3fvct9n//79HDlyhObNm7vSnpShAfa5WWa8CxyysBcREZHawOURDgkJCSxYsIDFixezfft2JkyYQF5eHvHx8QCMHj2ayZMnO+qff/55nn76aRYuXEhUVBQZGRlkZGRw4sQJAE6cOMHjjz/OunXr2LdvH8nJydx00020b9+euLi4KvqYAvYJ8Gb+wPOB1yzuRURExNu5fE3W8OHDOXToEFOmTCEjI4MePXqwYsUKx8Xw6enp+PgU/1U+b948CgoKuPXWW532k5iYyNSpU/H19WXr1q0sXryY7OxsIiIiGDJkCNOmTSMgIKCSH0/O1wb7Mw2Xm6h9FXgC8LeyIRERES/m8pysmkhzssxLAQabrH0HuN26VkREpIbSnKyqoWcX1jIDgbJvOyimcQ4iIiIVp5BVy9gwP5x0A7Dewl5ERES8mUJWLXQ7EGqyVkezREREKkYhqxYKBO4xWfs+cKDcKhEREbmQQlYtNQFzt5aeAeZZ3IuIiIg3UsiqpVoAt5ZbZfcacMrCXkRERLyRQlYtZvYC+MPYp8CLiIiIeQpZtdgVQF+TtbMAjx+oJiIiUo0Usmo5s0eztgJrrGxERETEyyhk1XK3AmYfw61xDiIiIuYpZNVy/sC9Jmv/A+y1sBcRERFvopAl3AOYeRS3Acy1uBcRERFvoZAlNMX8g6D/DpywsBcRERFvoZAlgPkL4HOAt6xsRERExEsoZAkA3YGBJmtfAYos7EVERMQbKGSJw4Mm63YCX1jZiIiIiBdQyBKHm4DWJms1zkFERKRsClni4Avcb7J2BbDDwl5EREQ8nUKWOBkH1DNZO9vKRkRERDycQpY4CQHGmKxdDGRb14qIiIhHU8iSi5i9AD4PeMPKRkRERDyYQpZcpDMQZ7J2DlBoYS8iIiKeSiFLSmR2OOk+4CML+xAREfFUCllSojigo8lajXMQERG5mEKWlMgH89dmpQBbrWtFRETEIylkSanGAEEma3U0S0RExJlClpSqAfa5WWa8AxyysBcRERFPo5AlZbofsJmoywdet7gXERERT6KQJWVqC9xosvZV4LSFvYiIiHgShSwpl9lxDr8C/7KyEREREQ+ikCXlGgR0M1mrC+BFRETsFLKkXDbMj3NYf3YRERGp7RSyxJTbgSYma1+xshEREREPoZAlptQF7jFZ+x7267NERERqswqFrLlz5xIVFUVgYCDR0dFs2LCh1NoFCxZw1VVXERISQkhICLGxsRfVG4bBlClTaN68OXXr1iU2NpZdu3ZVpDWx0L2An4m6M8A8i3sRERGp6VwOWUuXLiUhIYHExEQ2b95M9+7diYuLIysrq8T6lJQURo4cyerVq0lNTSUyMpIhQ4Zw4MABR80LL7zAK6+8wvz581m/fj3169cnLi6OU6dOVfyTSZVrAdxqsvY1QH96IiJSm9kMwzBc2SA6Opo+ffowZ84cAIqKioiMjOSBBx5g0qRJ5W5fWFhISEgIc+bMYfTo0RiGQUREBI8++iiPPfYYADk5OYSFhfHmm28yYsSIcveZm5tLcHAwOTk5BAWZfRCMVEQq0M9k7UIg3sJeRETEGu3bt2fPnj1l1rRr147du3dXU0eeyaUjWQUFBWzatInY2NjiHfj4EBsbS2pqqql9nDx5ktOnT9O4cWMA9u7dS0ZGhtM+g4ODiY6OLnWf+fn55ObmOi1SPa4A+pisnQW4lOBFRES8iEsh6/DhwxQWFhIWFua0PiwsjIyMDFP7mDhxIhEREY5QdW47V/aZlJREcHCwY4mMjHTlY0gl2DA/nPR/wJcW9iIiIlKTVevdhdOnT2fJkiUsW7aMwMDACu9n8uTJ5OTkOJZffvmlCruU8vwBaG6yVsNJRUSktnIpZIWGhuLr60tmZqbT+szMTMLDw8vcdsaMGUyfPp0vvviCbt2K54ef286VfQYEBBAUFOS0SPXxByaYrP0PsM+6VkRERGosl0KWv78/vXr1Ijk52bGuqKiI5ORkYmJiSt3uhRdeYNq0aaxYsYLevXs7vdamTRvCw8Od9pmbm8v69evL3Ke41z3Yw1Z5ioC5FvciIiJSE7l8ujAhIYEFCxawePFitm/fzoQJE8jLyyM+3n4f2ejRo5k8ebKj/vnnn+fpp59m4cKFREVFkZGRQUZGBidOnADAZrPx8MMP8+yzz/Lhhx+ybds2Ro8eTUREBMOGDauaTylVrhn2KfBm/B3Is7AXERGRmsjMbEknw4cP59ChQ0yZMoWMjAx69OjBihUrHBeup6en4+NTnN3mzZtHQUEBt97qPGEpMTGRqVOnAvDEE0+Ql5fH+PHjyc7Opn///qxYsaJS122J9R4C3jRRlw28hflTjCIiIt7A5TlZNZHmZLnPQMzdQdgZ+B49x0lExBNoTlbV0N95UilmxznsAFZa2YiIiEgNo5AllXIj0MpkrcY5iIhIbaKQJZXiB9xvsvYzYKeFvYiIiNQkCllSaXcB9UzWzrayERERkRpEIUsqLQQYbbL2Tex3G4qIiHg7hSypEg+arMsDFlrZiIiISA2hkCVVogswxGTtHKDQwl5ERERqAoUsqTJmxznsBT62shEREZEaQCFLqsxQoKPJWo1zEBERb6eQJVXGB3jAZO1qYKuFvYiIiLibQpZUqTGA2QcbvWJlIyIiIm6mkCVVqiFwp8nad4DDFvYiIiLiTgpZUuUeAGwm6k4Br1vci4iIiLsoZEmVawvcYLL2VeC0hb2IiIi4i0KWWMLsOIcDwL+tbERERMRNFLLEEoOBy0zWapyDiIh4I4UssYQN80ez1gEbLOxFRETEHRSyxDKjgCYmazXOQUREvI1CllimLjDeZO17wEELexEREaluClliqXsBXxN1p4F5FvciIiJSnRSyxFItgVtN1s7HPjtLRETEGyhkieUeNFl3CFhiZSMiIiLVSCFLLBcD9DZZOwswLOxFRESkuihkieVcGeeQBnxlXSsiIiLVRiFLqsVtQLjJWg0nFRERb6CQJdXCH5hgsnY5sM+yTkRERKqHQpZUm3uwh63yFGF/cLSIiIgnU8iSahMGjDRZuwDIs7AXERERqylkSbUyewF8NvAPC/sQERGxmkKWVKuewFUma19B4xxERGq7uXPnEhUVRWBgINHR0WzYsKHM+u+//55bbrmFqKgobDYbM2fOrNB+Bw0ahM1mc1r+9Kc/udS7QpZUO7NHs7YDK61sREREarSlS5eSkJBAYmIimzdvpnv37sTFxZGVlVXqNidPnqRt27ZMnz6d8PCS72s3u9+7776bgwcPOpYXXnjBpf4VsqTa3QS0MlmrcQ4iIp5l3759Fx0BstlsDBo0yOV9vfTSS9x9993Ex8dzySWXMH/+fOrVq8fChQtL3aZPnz68+OKLjBgxgoCAgErtt169eoSHhzuWoKAgl/pXyJJq5wfcZ7L2U+BHC3sREZGqFRkZ6XT0Z8uWLTRp0oQBAwaQnp5OgwYNylyee+45AAoKCti0aROxsbGOffv4+BAbG0tqamqF+3Nlv++88w6hoaFcdtllTJ48mZMnT7r0Xn4V7lKkEu4CpgK/maidfXYREZGaz9fX13Ga7tSpUwwbNoyYmBimTp1KUVERaWlpZW7fuHFjAA4fPkxhYSFhYWFOr4eFhbFjx44K92d2v7fffjutW7cmIiKCrVu3MnHiRHbu3MkHH3xg+r0qdCTLlYvQzFyANnXq1IsOK3bu3LkirYmHaAyMNln7JpBjXSsiImKRO++8k+PHj/Puu+/i4+ODn58f7du3L3M5F7Lcbfz48cTFxdG1a1dGjRrFW2+9xbJly9izZ4/pfbgcsly9CM3MBWgAl156qdPhxa+//trV1sTDPGiy7gRQ+tl3ERGpiZ599lk+//xzPvzwQxo2bAjg0unC0NBQfH19yczMdNpvZmZmmXmiPBXdb3R0NAC7d+82/V4uny48/2IxgPnz5/PJJ5+wcOFCJk2adFF9nz596NOnD0CJrzsa8fOr1JcmnucS4BrM3UE4B3so87W0IxERqQr//ve/+ctf/sJnn31Gu3btHOsjIiJMny709/enV69eJCcnM2zYMACKiopITk7m/vvvr3BvFd3vub6bN29u+r1cClnnLhabPHmyY11VXIQGsGvXLiIiIggMDCQmJoakpCRatSr5HrT8/Hzy8/MdP+fm5lbqvcV9HsJcyPoJ+AS40dp2RESkkr777jtGjx7NxIkTufTSS8nIyADs4aZx48a0b9/e9L4SEhIYM2YMvXv3pm/fvsycOZO8vDzHgR6A0aNH06JFC5KSkgB7Vvnhhx8c/3zgwAHS0tJo0KCB473L2++ePXt49913ue6662jSpAlbt27lkUceYcCAAXTr1s38l2G44MCBAwZgrF271mn9448/bvTt27fc7Vu3bm28/PLLF63/9NNPjffee8/43//+Z6xYscKIiYkxWrVqZeTm5pa4n8TERAP7nEqnJScnx5WPIzVAoWEYHQzDwMTyOzf1KCJS27Rr167Ev2fPX9q1a1fitosWLSqxfuDAgRXqZfbs2UarVq0Mf39/o2/fvsa6deucXh84cKAxZswYx8979+419f5l7Tc9Pd0YMGCA0bhxYyMgIMBo37698fjjj7ucM2yGYZgeqv3rr7/SokUL1q5dS0xMjGP9E088wZo1a1i/fn2Z20dFRfHwww/z8MMPl1mXnZ1N69ateemllxg3btxFr5d0JCsyMpKcnByXZ1iI+83G/PVZW4GuFvYiIiLQvn37ci/wbteunUvXJ9VGLl34btVFaBdq1KgRHTt2LPUPLyAggKCgIKdFPNdYoKHJ2lcs7ENERKQquRSyzr9Y7JxzF4udf2Srsk6cOMGePXtcurhMPFdD4E6TtW8Dhy3sRUREpKq4PMIhISGBBQsWsHjxYrZv386ECROcLhYbPXq004XxBQUFpKWlkZaW5nQB2vlHqR577DHWrFnDvn37WLt2LTfffDO+vr6MHDmyCj6ieIIHAJuJulPAAot7ERERqQouj3AYPnw4hw4dYsqUKWRkZNCjRw9WrFjhmJyanp6Oj09xdvv111/p2bOn4+cZM2YwY8YMBg4cSEpKCgD79+9n5MiRHDlyhKZNm9K/f3/WrVtH06ZNK/nxxFO0A/4P+MhE7VzgMaCOpR2JiIhUjksXvtdUubm5BAcH68J3D5cMxJZbZbcEGG5hLyIitZkufK8aekC01Bi/Ay4zWTvLykZERESqgEKW1Bg2zI9ySAU2WtiLiIhIZSlkSY0yCvvDo83QOAcREanJFLKkRqkHjDdZuxQ4aGEvIiIilaGQJTXOvZh7EPRpYL7FvYiIiFSUQpbUOJHALSZr5wP55VaJiIhUP4UsqZHMXgCfhX2cg4iISE2jkCU1Uj+gl8naWdgfsS4iIlKTKGRJjWQDHjJZuwX42sJeREREKkIhS2qs24Awk7UaTioiIjWNQpbUWAHABJO1y4CfLexFRETEVQpZUqP9CfA3UVcEvGpxLyIiIq5QyJIaLQwYYbJ2AZBnYS8iIiKuUMiSGs/sBfDHgLetbERERMQFCllS410O9DdZ+woa5yAiIjWDQpZ4BLNHs34A/mtlIyIiIiYpZIlHGIb9cTtmaJyDiIjUBApZ4hH8gPtM1n4C7LKwFxERETMUssRj3A3UNVk728pGRERETFDIEo/RGLjDZO0iIMfCXkRERMqjkCUe5UGTdSewBy0RERF3UcgSj3IpEGuydjZQaGEvIiIiZVHIEo9jdpzDT8CnVjYiIiJSBoUs8TjXAe1N1mqcg4iIuItClngcH+ABk7XJwHcW9iIiIlIahSzxSGOBhiZrX7GwDxERkdIoZIlHCgLiTdb+AzhiYS8iIiIlUcgSj/UAYDNRdwpYYHEvIiIiF1LIEo/VHrjeZO1c4LSFvYiIiFxIIUs8mtlxDvuBZVY2IiIicgGFLPFoV2MfUGqGxjmIiEh1UsgSj2bD/KN21gLfWtiLiIjI+RSyxOP9EfvDo83QOAcREakuClni8eoBd5usXQJkWNiLiIjIORUKWXPnziUqKorAwECio6PZsGFDqbXff/89t9xyC1FRUdhsNmbOnFnpfYpc6D7A10TdaWC+xb2IiIhABULW0qVLSUhIIDExkc2bN9O9e3fi4uLIysoqsf7kyZO0bduW6dOnEx4eXiX7FLlQJPB7k7XzgHwLexEREYEKhKyXXnqJu+++m/j4eC655BLmz59PvXr1WLhwYYn1ffr04cUXX2TEiBEEBARUyT5FSmL2AvgsYKmVjYiIiOBiyCooKGDTpk3ExsYW78DHh9jYWFJTUyvUgBX7lNrpSuByk7WzAMPCXkRERPxcKT58+DCFhYWEhYU5rQ8LC2PHjh0VaqAi+8zPzyc/v/iET25uboXeW7yLDftw0jEmajcD3wD9Le1IRMQztWrVyvHPhmGwd+9efHx8aN26NTab7aIaKZlH3l2YlJREcHCwY4mMjHR3S1JDDAfCyq2y03BSEZGSrVq1it27d7N7924ee+wxDMOgsLCQBQsWONavWrXK3W3WeC6FrNDQUHx9fcnMzHRan5mZWepF7Vbsc/LkyeTk5DiWX375pULvLd4nAPiTydplQLqFvYiIeLr8/Hyee+45QkNDadKkCVOnTsUwdLGFWS6FLH9/f3r16kVycrJjXVFREcnJycTExFSogYrsMyAggKCgIKdF5Jw/AXVM1BUCr1rci4iIJ1u4cCEHDhygZcuW9OjRg6+++orVq1e7uy2P4fLpwoSEBBYsWMDixYvZvn07EyZMIC8vj/j4eABGjx7N5MmTHfUFBQWkpaWRlpZGQUEBBw4cIC0tjd27d5vep4grwoERJmtfB05a2IuIiKc6dxRr5MiR1KtXj5YtW9KrVy8dzXKFUQGzZ882WrVqZfj7+xt9+/Y11q1b53ht4MCBxpgxYxw/792718B+I5fTMnDgQNP7LE9OTo4BGDk5ORX5OOKFvjUMA5PLa27qUUSkJnvzzTcNm81mbN++3ejXr58xduxY46OPPjIAY+3ate5uzyPYDMPz42hubi7BwcHk5OTo1KE49Md+B2F5LgW2Yb87UURE7LZs2cLmzZsZN24cV155JR07dmThwoXMmDGD4cOH6+5CE1wa4SDiSR7CXMj6HkgGYssrFBGpRXr27EnPnj2d1tlsNh5//HE3deR5PHKEg4gZw4CWJms1zkFERKqaQpZ4rTrYHxxtxifA7nKrREREzFPIEq92N1DXRJ0BzLa4FxERqV0UssSrNQH+aLJ2EaAHNImISFVRyBKv96DJuuPYg5aIiEhVUMgSr3cZcLXJ2tlAkYW9iIhI7aGQJbXCQybr9gCfWtmIiIjUGgpZUitcD7QzWatxDiIiUhUUsqRW8AEeMFn7X+wDSkVERCpDIUtqjXiggcnaV6xsREREagWFLKk1grAHLTP+ARy1sBcREfF+CllSqzyAuQdB/wYssLgXERHxbgpZUqt0AK4zWTsXOGNhLyIi4t0UsqTWMTvO4RdgmZWNiIiIV1PIklonFrjEZK0ugBcRkYpSyJJax4b5R+18DWy2sBcREfFeCllSK90BhJis1XBSERGpCIUsqZXqAXebrF0CZFrYi4iIeCeFLKm17gN8TdQVAPMt7kVERLyPQpbUWq2Am03WzgPyLexFRES8j0KW1GpmL4DPBN6zshEREfE6CllSq/UHepqsnQUYFvYiIiLeRSFLajUb5oeTbgLWWtiLiIh4F4UsqfVGAM1M1mqcg4iImKWQJbVeAPAnk7UfYH/cjoiISHkUskSACUAdE3WFwKsW9yIiIt5BIUsECAeGm6x9HThpYS8iIuIdFLJEzjJ7AfxR4B0rGxEREa+gkCVyVm+gn8lajXMQEZHyKGSJnMfs0azvgVVWNiIiIh5PIUvkPDcDLUzWapyDiIiURSFL5Dx1sD842oyPgT0W9iIiIp5NIUvkAuOBQBN1BjDb4l5ERMRzKWSJXKAJ8EeTtQuBXAt7ERERz1WhkDV37lyioqIIDAwkOjqaDRs2lFn//vvv07lzZwIDA+natSuffvqp0+tjx47FZrM5LUOHDq1IayJV4kGTdceBxVY2IiIiHsvlkLV06VISEhJITExk8+bNdO/enbi4OLKyskqsX7t2LSNHjmTcuHFs2bKFYcOGMWzYML777junuqFDh3Lw4EHH8s9//rNin0ikCnQFfmeydjZQZGEvIiLimVwOWS+99BJ333038fHxXHLJJcyfP5969eqxcOHCEutnzZrF0KFDefzxx+nSpQvTpk3j8ssvZ86cOU51AQEBhIeHO5aQkJCKfSKRKmJ2nMMu4DMrGxEREY/kUsgqKChg06ZNxMbGFu/Ax4fY2FhSU1NL3CY1NdWpHiAuLu6i+pSUFJo1a0anTp2YMGECR44cKbWP/Px8cnNznRaRqnY90NZkrcY5iIjIhVwKWYcPH6awsJCwsDCn9WFhYWRkZJS4TUZGRrn1Q4cO5a233iI5OZnnn3+eNWvWcO2111JYWFjiPpOSkggODnYskZGRrnwMEVN8gQdM1q4EfrCwFxER8Tw14u7CESNGcOONN9K1a1eGDRvGxx9/zMaNG0lJSSmxfvLkyeTk5DiWX375pXobllojHmhgsvYVKxsRERGP41LICg0NxdfXl8zMTKf1mZmZhIeHl7hNeHi4S/UAbdu2JTQ0lN27d5f4ekBAAEFBQU6LiBWCgbEma9/C/vBoERERcDFk+fv706tXL5KTkx3rioqKSE5OJiYmpsRtYmJinOoBVq5cWWo9wP79+zly5AjNmzd3pT0RS5g9Zfgb8HcrGxEREY/i8unChIQEFixYwOLFi9m+fTsTJkwgLy+P+Ph4AEaPHs3kyZMd9Q899BArVqzgb3/7Gzt27GDq1Kl8++233H///QCcOHGCxx9/nHXr1rFv3z6Sk5O56aabaN++PXFxcVX0MUUqriNwncnaOcAZC3sRERHP4efqBsOHD+fQoUNMmTKFjIwMevTowYoVKxwXt6enp+PjU5zd+vXrx7vvvsuf//xnnnzySTp06MDy5cu57LLLAPD19WXr1q0sXryY7OxsIiIiGDJkCNOmTSMgIKCKPqZI5TwEfFpuFfwCLAdutbQbERHxBDbDMAx3N1FZubm5BAcHk5OTo+uzxBIGcCmw3UTtVcCX1rYjIlKtrrzySjp27MiiRYvc3YpHqRF3F4rUdDbMP2rnK2CLhb2IiIhnUMgSMekOoJHJWg0nFRERhSwRk+oDd5us/SeQWW6ViIh4M4UsERfch7n/0xQAr1nci4iI1GwKWSIuaA3cbLJ2HvawJSIitZNCloiLzF4AnwG8Z2UjIiJSoylkibjoKqCHydpZ2Mc/iIhI7aOQJeIiG/bhpGZ8C6Ra2IuIiNRcClkiFTACaGqyVuMcRERqJ4UskQoIBP5ksvbfwH4LexERkZpJIUukgiYAdUzUFQKvmqj78ssvueGGG4iIiMBms7F8+XKn1z/44AOGDBlCkyZNsNlspKWlXbSPe+65h3bt2lG3bl2aNm3KTTfdxI4dO0y8u92f/vQnbDYbM2fOdKzbt28f48aNo02bNtStW5d27dqRmJhIQYHzvZMLFiygdevW9OzZk/Xr15t+TxERb6WQJVJBzYHbTNa+DvxWTk1eXh7du3dn7ty5pb7ev39/nn/++VL30atXLxYtWsT27dv5/PPPMQyDIUOGUFhYWG6Py5YtY926dURERDit37FjB0VFRbz22mt8//33vPzyy8yfP58nn3zSUZOens4LL7zAkiVLeOqpp4iPjy/3/UREvJ2fuxsQ8WQPAe+YqDtytu6uMmquvfZarr322lJfv+OOOwD7kaXSjB8/3vHPUVFRPPvss3Tv3p19+/bRrl27Urc7cOAADzzwAJ9//jnXX3+902tDhw5l6NChjp/btm3Lzp07mTdvHjNmzADsD2lv1KgR3bp1Izw8nN9+Ky9Sioh4P4UskUroA8Rg7g7CWcA47HcnVoe8vDwWLVpEmzZtiIyMLLWuqKiIO+64g8cff5xLL73U1L5zcnJo3Lix4+fLLruMbt26ERwcjL+/PwsWLKh0/yIink6nC0Uqyew4h++A1VY2ctarr75KgwYNaNCgAZ999hkrV67E39+/1Prnn38ePz8/HnzQ3JjV3bt3M3v2bO655x6n9W+88QaZmZkcOXKEUaNGVeoziIh4A4UskUr6PdDCZG11jHMYNWoUW7ZsYc2aNXTs2JHbbruNU6dOlVi7adMmZs2axZtvvonNVv4xtgMHDjB06FD+8Ic/cPfdFz8uu0mTJtStW7fSn0FExBsoZIlUUh3gXpO1HwF7LOwFIDg4mA4dOjBgwAD+9a9/sWPHDpYtW1Zi7VdffUVWVhatWrXCz88PPz8/fv75Zx599FGioqKcan/99VcGDx5Mv379eP311y3+FCIink8hS6QKjMc+O6s8BjDH4l6c3s8wMAyD/Pz8El+/44472Lp1K2lpaY4lIiKCxx9/nM8//9xRd+DAAQYNGuS4e9HHR//pEBEpjy58F6kCocAo4A0TtQuBvwANL1h/4sQJdu/e7fh57969pKWl0bhxY1q1asXRo0dJT0/n119/BWDnzp0AhIeHEx4ezk8//cTSpUsZMmQITZs2Zf/+/UyfPp26dety3XXXOfbbuXNnkpKSuPnmm2nSpAlNmjRx6qNOnTqEh4fTqVMnoDhgtW7dmhkzZnDo0CFHbXh4uMlvSESk9tGvoyJVxOwF8LnA4hLWf/vtt/Ts2ZOePXsCkJCQQM+ePZkyZQoAH374IT179nSMWBgxYgQ9e/Zk/vz5AAQGBvLVV19x3XXX0b59e4YPH07Dhg1Zu3YtzZo1c7zPzp07ycnJMf25Vq5cye7du0lOTqZly5Y0b97csXijrVu3ctVVVxEYGEhkZCQvvPCC6W2PHDlCy5YtsdlsZGdnO9Z/8MEHXHPNNTRt2pSgoCBiYmKcjhReaPr06dhsNh5++GGn9ZUdNisi1ctmGIbh7iYqKzc3l+DgYHJycggKCnJ3O1KL/Q5zdxB2AHag33KsVlBQUOadlRfKzc2lY8eOxMbGMnnyZLZt28add97JzJkznWaQlWbYsGEUFBTw2WefcezYMRo1agTAww8/TEREBIMHD6ZRo0YsWrSIGTNmsH79ekeoPmfjxo3cdtttBAUFMXjwYKfp+6+//jqdO3d2HNmcOnUqaWlp7N27F19fX9OfU8RVV155JR07dmTRokXubsWj6HShSBV6CHMhaxewAriuvEJxyaBBg7jsssvw8/Pj7bffpmvXrqxebX5wxjvvvENBQQELFy7E39+fSy+9lLS0NF566aVyQ9a8efPIzs5mypQpfPbZZ06vnR+UAJ577jn+85//8NFHHzmFrBMnTjBq1CgWLFjAs88+e9F7VHTYrIi4h36RFqlC/we0MVlbHeMcaqPFixfj7+/PN998w/z587n22msdc8NKWs4fwJqamsqAAQOcjn7FxcWxc+dOjh07Vup7/vDDD/zlL3/hrbfeMnVTQFFREcePH3ca6Apw3333cf311xMbG1vuPswOmxUR99GRLJEq5As8ACSYqP0C2A50sbSj2qdDhw5O11H9/e9/L/MxP3XqFD/mOyMjgzZtnGNyWFiY47WQkJCLts/Pz2fkyJG8+OKLtGrVip9++qncHmfMmMGJEye47bbip18uWbKEzZs3s3HjxjK3ffXVV3niiSfIy8ujU6dO5Q6bFRH3UcgSqWJ3AlOAEyZqXwHmWdtOrdOrVy+nn1u0MDsqtmImT55Mly5d+OMf/2iq/t133+WZZ57hP//5j+OGhF9++YWHHnqIlStXEhhY9jCQUaNGcc0113Dw4EFmzJjBbbfdxjfffFPudiJS/XS6UKSKBQNjTda+BZR+Ekoqon79+k4/u3K6MDw8nMzMTKftz/1c2riKVatW8f777zuGuV599dUAhIaGkpiY6FS7ZMkS7rrrLt577z2nU4KbNm0iKyuLyy+/3LGfNWvW8Morr+Dn50dhYaGj1pVhsyLiXjqSJWKB+zE3dPQk8HfgcWvbqdVcOV0YExPDU089xenTpx3rV65cSadOnUo8VQjw73//22n/Gzdu5M477+Srr75yuhj9n//8J3feeSdLlixxjOE45+qrr2bbtm1O6+Lj4+ncuTMTJ04s9c7B8obNioh7KWSJWKATcC3wWXmF2MPYI+j/jFZx5XTh7bffzjPPPMO4ceOYOHEi3333HbNmzeLll1921CxbtozJkyc75lNdeFff4cOHAejSpYtjhMO7777LmDFjmDVrFtHR0WRkZABQt25dgoODadiwIZdddpnTfurXr0+TJk0c680OmxWpKunp6ezdu5eBAwc6rf/444/p16/fRTduyMV0ulDEImaHk6YD/7GyETEtODiYL774gr1799KrVy8effRRpkyZ4jQ6IScnxzFt36zXX3+dM2fOcN999zkNc33oIbP/lpgf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oUbPnj2N9evXG19//bXRoUMHY+TIkY7X9+/fb3Tq1MlYv369Y93BgweNLVu2GAsWLDAA48svvzS2bNliHDlyxB0foUZasmSJERAQYLz55pvGDz/8YIwfP95o1KiRkZGRYRiGYdxxxx3GpEmTHPXffPON4efnZ8yYMcPYvn27kZiYaNSpU8fYtm2buz6Cx3D1u87Pzze2bNlibNmyxWjevLnx2GOPGVu2bDF27drlro/gEVz9nqdPn274+/sb//rXv4yDBw86luPHj7vrI3gMV7/r5557zvjiiy+MPXv2GD/88IMxY8YMw8/Pz1iwYIG7PkKtp5AlhmEYxpEjR4yRI0caDRo0MIKCgoz4+Hin/wju3bvXAIzVq1c71iUmJhrARcuiRYuq/wPUYLNnzzZatWpl+Pv7G3379jXWrVvneG3gwIHGmDFjnOrfe+89o2PHjoa/v79x6aWXGp988kk1d+y5XPmuz/07feEycODA6m/cw7jyPbdu3brE7zkxMbH6G/dArnzXTz31lNG+fXsjMDDQCAkJMWJiYowlS5a4oWs5x2YYhlHth89EREREvJyuyRIRERGxgEKWiIiIiAUUskREREQsoJAlIiIiYgGFLBERERELKGSJiIiIWEAhS0RERMQCClkiIiIiFlDIEhEREbGAQpaIiIiIBRSyRERERCygkCUiIiJigf8H3bEjLSAArhsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def draw_arm(x, y, z):\n", "\n", " # Get joint angles\n", " l1, l2, l3 = (.422864, .359041, .15)\n", " offset_x, offset_y, offset_z = (0.145, 0, 0.195)\n", " r, theta = cartesian_to_polar(x, y)\n", " base, shoulder, elbow, wrist = get_joints_from_xyz_rel(x, y, z)\n", "\n", " # Print angles\n", " print('Target position (x,y,z):', x, y, z)\n", " print('Angles (base, shoulder, elbow, wrist):', [round(math.degrees(i), 4) for i in [base, shoulder, elbow, wrist]])\n", " print('Robot Angles:', [round(math.degrees(i), 4) for i in get_joints_from_xyz_abs(x, y, z)])\n", "\n", " # Calculate each joint's endpoint position\n", " x1, y1 = polar_to_cartesian(l1, shoulder)\n", " x2, y2 = polar_to_cartesian(l2, shoulder-elbow)\n", " x2 += x1\n", " y2 += y1\n", " x3, y3 = polar_to_cartesian(l3, shoulder-elbow-wrist)\n", " x3 += x2\n", " y3 += y2 \n", " \n", " tx = x3\n", " ty = y3 - offset_z\n", "\n", " # Print each joint's endpoint position\n", " print('elbow (x,y):', round(x1,3), round(y1,3))\n", " print('wrist (x,y):', round(x2,3), round(y2,3))\n", " print('tool (x,y):', round(x3,3), round(y3,3))\n", "\n", " # Draw limbs\n", " plt.plot([0, x1], [0, y1], color='cyan', linewidth=7)\n", " plt.plot([x1, x2], [y1, y2], color='orange', linewidth=7)\n", " plt.plot([x2, x2+l3], [y2, y2], color='red', linewidth=7)\n", " plt.plot()\n", "\n", " # Draw toolpoint\n", " plt.plot([x3, tx], [y3, ty], color='black', linewidth=7)\n", "\n", " # Display angles\n", " plt.text(0, 0.02, f'{round(math.degrees(shoulder), 2)}°')\n", " plt.text(x1, y1+0.02, f'{round(math.degrees(elbow), 2)}°')\n", " plt.text(x2, y2+0.02, f'{round(math.degrees(wrist), 2)}°')\n", "\n", " # Display r arrow\n", " plt.annotate(f'', xy=(0, 0), xycoords='data', xytext=(x3, 0), textcoords='data', arrowprops={'arrowstyle': '<->'})\n", " plt.annotate(f'r={round(r,4)}', xy=(x2/2, 0.01), xycoords='data', xytext=(x2/2, 0), textcoords='offset points')\n", "\n", " # Display z arrow\n", " plt.annotate(f'', xy=(x3, 0), xycoords='data', xytext=(tx, ty), textcoords='data', arrowprops={'arrowstyle': '<->'})\n", " plt.annotate(f'z={round(ty,4)}', xy=(x3+0.01, y2/2), xycoords='data', xytext=(x3/2, 0), textcoords='offset points')\n", " \n", " # Display plot\n", " ax = plt.subplot(111)\n", " ax.spines[['right', 'top']].set_visible(False)\n", " plt.axis('equal')\n", " plt.show()\n", "\n", "draw_arm(0.3, 0.3, 0.3)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Target position (x,y,z): 0.3 0.3 0.3\n", "Angles (base, shoulder, elbow, wrist): [33.9862, 85.2162, 73.3858, 11.8304]\n", "Robot Angles: [33.9862, -85.2162, 73.3858, -78.1696]\n", "elbow (x,y): 0.035 0.421\n", "wrist (x,y): 0.387 0.495\n", "tool (x,y): 0.537 0.495\n" ] }, { "data": { "image/png": "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AAA3IIyYAPvSAAD8GWHExxliXxoAgH8jjPi4Wkk/ONGOwasAALMijPg4Bq8CAPwdYcTHMa0XAODvCCM+jp4RAIC/I4z4uEbDSH299Mgj0mWXSZGRUmqq/jV3rgzDsDf55S9/qaCgIIfX9ddff8HPKiws1MCBAxUdHa327dtr/Pjx2r59u/3nR44c0X333acePXooMjJSXbt21W9/+1tVV1c7XOf999/XFVdcoR49euiDDz64lK8PAAgAod4uABfW6GOaJ56QFi+WXn1V6tNH+vJLrc7L059jY/Xb3/7W3uz666/XsmXL7O/Dw8Mv+Fn/+Mc/NGXKFA0cOFCnT5/Wgw8+qBEjRmjr1q1q06aNvv/+e33//fdasGCBevfurT179ujXv/61vv/+e7399tuSJKvVqilTpmjZsmUyDEN33nmnRowYobCwsJa4HQAAP0QY8XGN9oysXy+NGyeNGdPwPiVF2W+8oZKSEodm4eHh6tChg9OftXr1aof3r7zyitq3b6/S0lINGTJEffv21V/+8hf7z1NTU/XYY4/p9ttv1+nTpxUaGiqr1aqQkBClp6dLkv0YYQQA0BQe0/i4RntGBg2Sioqk//yn4f2//63Nn32mUaNGOTRbt26d2rdvrx49eujee+/V4cOHXfrsHx+/JCQkXLBNTEyMQkMbcm1MTIzy8vLUsWNHderUSffee6+io6Nd+lwAQGChZ8THNdozMmOGZLFIPXtKISFSfb3ue+wx3XbbbfYm119/vf77v/9bl112mXbu3KkHH3xQo0aNUnFxsUJCQi76uTabTdOnT9fVV1+tvn37Ntrm0KFDmjt3ru6++26H4wUFBZo+fbqCg4MJIgCAiyKM+LhGe0befFP6f/9PWr5c6tNHYeXl+r/p05XSqZMmTZokSbr55pvtza+88kr169dPqampWrduna677rqLfu6UKVP01Vdf6bPPPmv05xaLRWPGjFHv3r01e/bs834eGxvrzNcDAIDHNL6u0Z6R++9v6B25+WbpyivV8Y479Lvf/U6FhYVNXqd79+5KTEzUjh07LvqZU6dO1QcffKBPPvlEXbp0Oe/nNTU1uv766xUdHa133nlHrVq1cuEbAQDgiDDiw5rcl+bECSn47C9dO0khISGy2WxNXmvv3r06fPiwOnbs2PTnGYamTp2qd955R3//+9912WWXndfGYrHY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Target position (x,y,z): -0.3 -0.3 0.7\n", "Angles (base, shoulder, elbow, wrist): [-117.3239, 78.0693, 0.0255, 79.0945]\n", "Robot Angles: [-117.3239, -78.0693, 0.0255, -10.9055]\n", "elbow (x,y): 0.087 0.414\n", "wrist (x,y): 0.162 0.765\n", "tool (x,y): 0.312 0.762\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\nadee\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\scipy\\optimize\\_minpack_py.py:178: RuntimeWarning: The iteration is not making good progress, as measured by the \n", " improvement from the last ten iterations.\n", " warnings.warn(msg, RuntimeWarning)\n" ] }, { "data": { "image/png": "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WnUICQkJYsaMGYafdTqdCA8P73AC63/9138ZrUtKSuIEVhMsPb5CCPHmm28KX19fUVpaao0WHZolx/fatWttPmcnTJggHnzwQXH48GHR1NRkzdYdgqV/f7OyskS/fv2ETqczrMvLyxNhYWGy92ptdh9GhGi99PTuu+8We/bsETt37hSDBg0yuvT0p59+EkOGDBF79uwxuQ/wahqTLD2+Wq1WJCYmirvuukucOnVKXLx40bDcuHHDVm/DLqxdu1ao1Wrx0UcfiWPHjokXXnhB+Pv7C41GI4QQYurUqWL27NmG+l27dgk3NzexdOlScfz4cZGTk8NLeztg6fFdsmSJ8PDwEJ988onR39P6+npbvQW7Zunx/TVeTdMxS49veXm56Nmzp5gxY4Y4efKk+OKLL0RwcLBYuHChrd6CbBwijFy+fFlMmTJF+Pj4CF9fX5Genm70YXL27FkBQHz99dcm98EwYpqlx/frr78WANpdzp49a5s3YUdWrFgh+vbtKzw8PERCQoL49ttvDb8bOXKkSEtLM6r/+OOPxeDBg4WHh4e44447xKZNm6zcsWOx5Pj269ev3b+nOTk51m/cQVj69/eXGEbMs/T47t69WyQmJgq1Wi369+8vFi1a5JRf+hRCCGHtU0NEREREN9n9fUaIiIjIuTGMEBERkU0xjBAREZFNMYwQERGRTTGMEBERkU0xjBAREZFNMYwQERGRTTGMEBERkU0xjBAREZFNMYwQERGRTTGMEBERkU0xjBAREZFN/X/QN2IC9dzhWwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Target position (x,y,z): -0.3 0.4 0.2\n", "Angles (base, shoulder, elbow, wrist): [111.1813, 100.8341, 104.0795, -3.2455]\n", "Robot Angles: [111.1813, -100.8341, 104.0795, -93.2455]\n", "elbow (x,y): -0.079 0.415\n", "wrist (x,y): 0.279 0.395\n", "tool (x,y): 0.429 0.395\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGnCAYAAACZ9nwoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7Y0lEQVR4nO3dfXQU9b3H8c9uQhIgDxAiCdAAStSoCOESEuMtiDU13nqxVHuLlCM0ctBW4Lbm2ipFQS0YiqhUpXJF1KpQ0Fq0UkUxwFVsGhATeZJUKBhENjw1CQRIQnbuHyurK3mYTTLZ2d3365w5sLPf2f3OiOHD/H4z4zAMwxAAAIANOQPdAAAAQHMIKgAAwLYIKgAAwLYIKgAAwLYIKgAAwLYIKgAAwLYIKgAAwLYIKgAAwLYIKgAAwLYIKgAAwLYIKhZ57733NGbMGPXt21cOh0Ovvfaaz/uGYWjWrFnq06ePunbtqtzcXH366adNflZdXZ0yMjLkcDhUVlbW4veePn1aU6dOVa9evRQbG6ubbrpJlZWVPjWbN2/WNddcox49eqhnz57Ky8vTxx9/7FOzZMkSDRgwQMOGDVNJSYnf+w8AQEcgqFiktrZWQ4cO1aJFi5p8f/78+Xr88ce1ePFilZSUqHv37srLy9Pp06fPqf3Vr36lvn37mvreO++8U2+88YZeeeUV/d///Z+++OIL3Xjjjd73T5w4oeuuu079+/dXSUmJNm7cqLi4OOXl5amhoUGSVFFRofnz52vFihWaOXOm8vPz23AEAADoAAYsJ8lYtWqV97Xb7TZSUlKMhx9+2LuuqqrKiI6ONv74xz/6bPvmm28a6enpxo4dOwxJRmlpabPfU1VVZXTp0sV45ZVXvOs++eQTQ5JRXFxsGIZhbN682ZBkVFRUeGu2bt1qSDI+/fRTwzAMY9u2bUZmZqZx4sQJ45///KcxcODA9uw+AABtxhmVANi7d69cLpdyc3O96xISEpSdna3i4mLvusrKSk2ZMkUvvviiunXr1urnbtmyRQ0NDT6fm56erv79+3s/9+KLL1avXr20dOlS1dfX69SpU1q6dKkuueQSDRw4UJI0ePBgDRkyRAkJCbrssss0Z86cDtpzAAD8Q1AJAJfLJUlKTk72WZ+cnOx9zzAM/eQnP9FPf/pTZWZmmv7cqKgo9ejRo9nPjYuL04YNG/TSSy+pa9euio2N1Zo1a/TWW28pMjLSu83SpUtVWVmpo0ePasKECW3dVQAA2oWgYlNPPPGEjh8/rhkzZnTo5546dUqTJ0/Wv//7v+vvf/+7PvjgAw0ePFjXX3+9Tp065VPbq1cvde3atUO/HwAAfxBUAiAlJUWSzrkap7Ky0vveunXrVFxcrOjoaEVGRiotLU2SlJmZqUmTJjX7ufX19aqqqmr2c5cvX659+/bpueee04gRI3TFFVdo+fLl2rt3r15//fWO3E0AANqNoBIA559/vlJSUlRUVORdV1NTo5KSEuXk5EiSHn/8cX388ccqKytTWVmZ3nzzTUnSypUrNXfu3CY/d/jw4erSpYvP55aXl6uiosL7uSdPnpTT6ZTD4fDWnH3tdrs7fF8BAGiPyNZLAs8wDB0/flxxcXE+f8Ha2YkTJ7R7927v671796qsrEyJiYnq37+/fvGLX2jOnDm68MILdf755+u+++5T3759NXbsWElS//79fT4vNjZWkjRo0CB961vfkiQdOHBA11xzjV544QVlZWUpISFBkydPVkFBgRITExUfH6/p06crJydHV1xxhSTpu9/9rn75y19q6tSpmj59utxut+bNm6fIyEhdffXVnXBkAAAwLyiCyvHjx5WQkKDq6mrFx8cHuh1TPvzwQ5+/+AsKCiRJkyZN0vPPP69f/epXqq2t1W233aaqqip9+9vf1po1axQTE2P6OxoaGlReXq6TJ0961z322GNyOp266aabVFdXp7y8PP3+97/3vp+enq433nhDDzzwgHJycuR0OjVs2DCtWbNGffr06YA9BwCg4zgMwzAC3URrampqgi6oAACA9mOOCgAAsC2CCgAAsC2CCgAAsC2CCgAAsC2CCgAAsC2CCgCEifvvv1/p6enq3r27evbsqdzcXJWUlLS4TWFhoUaMGKG4uDj17t1bY8eOVXl5uU/N6NGj5XA4fJaf/vSnPjV/+ctfdNFFF+niiy/W6tWrO3zfELq4PBkAwsTy5cvVu3dvXXDBBTp16pQee+wxvfLKK9q9e7fOO++8Jre57rrrdPPNN2vEiBE6c+aMfv3rX2v79u3auXOnunfvLskTVC666CI9+OCD3u26devm/XldV1entLQ0PffcczIMQ7feeqv27NmjqKgo63caQS8obvgGAGi/H//4xz6vH330US1dulRbt27VNddc0+Q2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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "draw_arm(0.3, 0.3, 0.3)\n", "draw_arm(-0.3, -0.3, 0.7)\n", "draw_arm(-0.3, 0.4, 0.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interactive Arm" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "30dd696bcdc14aec9a1d4c17fb4787d4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.3, description='x', max=1.0, step=0.01), FloatSlider(value=0.3, desc…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ipywidgets import interact, FloatSlider\n", "\n", "# Interactive slider for z coordinate\n", "interact(draw_arm, x=FloatSlider(min=0, max=1, step=0.01, value=0.3),\n", " y=FloatSlider(min=0, max=1, step=0.01, value=0.3),\n", " z=FloatSlider(min=0, max=1, step=0.01, value=0.3))\n" ] }, { "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.10.4" } }, "nbformat": 4, "nbformat_minor": 2 }