diff --git a/inv_kin_testing.ipynb b/inv_kin_testing.ipynb index 8e75bae..840efc7 100644 --- a/inv_kin_testing.ipynb +++ b/inv_kin_testing.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 81, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -52,15 +52,23 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 83, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[-243.619306486927, -123.2097721836616, 140.34764917140853, -107.13787698774695, -90.0, 90.0]\n" - ] + "data": { + "text/plain": [ + "[-243.619306486927,\n", + " -123.2097721836616,\n", + " 140.34764917140853,\n", + " -107.13787698774695,\n", + " -90.0,\n", + " 90.0]" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -80,7 +88,6 @@ " # Get limbs and offsets\n", " offset_x, offset_y, offset_z = (0, 0, 0.14) # Tool offset\n", " l_bs, l1, l2, l3, l_wt = (0.1333, .425, .39225, .1267, .0997) # Limb lengths\n", - " #l3=0.15\n", " \n", " # Calculate base angle and r relative to shoulder joint\n", " def calculate_theta(x, y, a):\n", @@ -141,120 +148,37 @@ " # Return adjusted joint positions\n", " return [o+j*i for j, o, i in zip(joints, offsets, inverse)]\n", "\n", - "# print([math.degrees(deg) for deg in get_joints_from_xyz_rel(0.3, 0.3, 0.3)])\n", - "print([math.degrees(deg) for deg in get_joints_from_xyz_abs(0, -0.3, 0.1)])" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "flip\n", - "m: -0.9031146536634159\n" - ] - }, - { - "data": { - "text/plain": [ - "47.914345304219715" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "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=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.degrees(math.atan2(y, 0)-math.pi/2)\n", - " \n", - " # Calculate tangent line y = mx + b\n", - " if abs(a) != abs(x): # If there is no division by 0\n", - " m = (x*y + math.sqrt(x*x*y*y-(x*x-a*a)*(y*y-a*a)))/(x*x-a*a)\n", - " else: # Deal with edge case when x^2=a^2\n", - " m = flip*(-a*a+y*y)/(a*y-flip*abs(a*y))\n", - " \n", - " print('m:',m)\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 math.degrees(theta)\n", - "\n", - "calculate_theta(-0.1333,0.3,0.1333)" + "# Print degree rotation for each joint (robot angles)\n", + "[math.degrees(deg) for deg in get_joints_from_xyz_abs(0, -0.3, 0.1)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Simulate arm and joint angles" + "### Simulate Arm and Joint Angles" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 84, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Target position (x,y,z): 0.3 0.3 0.3\n", - "R: 0.4243\n", - "Angles (base, shoulder, elbow, wrist): [-26.688, 105.6932, 101.1834, 4.5098]\n", - "Robot Angles: [-116.688, -105.6932, 101.1834, -85.4902, -90.0, 90.0]\n", - "elbow (x,y): -0.114 0.407\n", - "wrist (x,y): 0.244 0.435\n", - "tool (x,y): 0.394 0.435\n" - ] - }, - { - "data": { - "image/png": "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K0m64447lJmZqQEDBuipp55S7969tWTJEknSpZdeqqVLl+qPf/yj2rZtq9jYWPXs2VMxMTFOV3mkuqtMXMkBgOYh6MBrpJuse19S/RHE2dk5NyUlJU77S0pKGp2Pk5KSourqau3bt6/e17t27SpJ6tevn9P+vn37qri42PHzz3/+c9ntdh04cEBHjhzRQw89pMOHD+viiy820T0AwAyCDrxGD0l9TdSdkvRhk1VSz549FRsbq/z87599Xl5ero0bNyo1NbXB44qKihQQEKAuXbrU+3pCQoLi4uK0a9cup/2ff/65evTocV59TEyM2rVrp+XLlyssLEzXX3+9ie4BAGYQdOBVXL3N/OTJkyoqKlJRUZGkugnIRUVFKi4uls1m029/+1s98sgjeuutt7Rt2zZlZGQoLi5OY8aMkVR3m/iCBQv0ySef6Msvv9Srr76qu+++W7/4xS/UsWNHSdKBAwfUp08fbdq0SZJks9n0hz/8QU8//bT+8Y9/aPfu3XrwwQe1c+dOTZo0ydHjs88+qy1btujzzz/XwoULNX36dOXk5KhDhw4XfqK83H//+18NHTpUYWFhio+P1+OPP2762CNHjqh79+6y2Ww6fvy4Y/8bb7yh66+/Xp07d1ZERIRSU1O1cmXDA525ubmO35EfuuOOO9SrVy+1adNGnTt31s0336ydO3e6+hUBtBbDC5SVlRmSjLKyMne3AjdbaRiGTGyXfVe/Zs0aQ3UPNnfaJk6caBiGYdTW1hoPPvigERMTY4SGhhojRowwdu3a5fi8wsJCIyUlxYiMjDTCwsKMvn37GvPmzTNOnz7tqNm7d68hyVizZo1Trzk5OUb37t2Ntm3bGqmpqcb69eudXp8wYYLRqVMnIyQkxEhKSjJefvnlljtRHqSystKl+rKyMiMmJsYYP368sX37duNvf/ub0aZNG+OFF14wdfzNN99s3HDDDYYk49ixY479M2bMMB577DFj06ZNxueff27MmjXLCA4ONrZs2XLee2zatMlISEgwkpKSjBkzZji99sILLxgffPCBsXfvXqOwsNC46aabjPj4eKO6utql7wnUp23btsaCBQvc3YZPIejAq3xrGEYbw1zY2e+mHv3dsGHDjGnTphkzZswwoqKijOHDh7t0/HPPPWd07NjRKSDNnDnT6N27t6ljhw0bZuTn558XdOrTr18/Y86cOU77Tpw4YVxyySXG6tWrjWHDhp0XdM71ySefGJKM3bt3N9kf0BSCTstj6ApeJUzScJO1LX33FcxbunSpQkJC9NFHH2nRokW64YYb1K5duwa3Sy+91HFsQUGBrrnmGqeFEdPT07Vr1y4dO3aswc/89NNPNXfuXL388svn3blWn9raWp04cUKdOnVy2j9t2jSNHj3aaX2lhlRUVOivf/2revbsqfj4+CbrAbQ+VkaG1xkl6V0TdXmSJjVZBStccsklTvNqXnzxRafnfJ0rODjY8We73a6ePXs6vX52rSO73e6YG/VDlZWVGjdunJ544glddNFFjrWMGjN//nydPHlSt956q2PfsmXLtGXLFm3evLnRY5977jndc889qqioUO/evbV69WpWrAY8FEEHXsfshOTVkqrFL7k7DBw40Onnbt26Wfp5s2bNUt++ffWLX/zCVP1rr72mOXPm6F//+pfj7rn9+/drxowZWr16tcLCwho9fvz48br++ut18OBBzZ8/X7feeqs++uijJo8D6lNTUyNJCgwMdNp/5swZp38EoHkYuoLXuURSzyarpDJJGy3uBfULDw93+tmVoavY2Nh61zY6+1p93n//ff39739XUFCQgoKCNGLECElSdHS0srOznWqXLVumX/3qV3r99dedhqcKCwt16NAhXXHFFY73+eCDD/T0008rKCjI8R8jqW4Rx0suuUTXXHON/vGPf2jnzp168803m3GmgLrh0vHjxzvt27hxo6Kjo51WaUfz8I9deB2b6q7qPG+iNk/SVda2AxNcGbpKTU3V/fff7/Sv2dWrV6t37971DltJ0j//+U+n99+8ebNuv/12rV+/Xr169XLs/9vf/qbbb79dy5Yt0+jRo53eY8SIEdq2bZvTvszMTPXp00czZ84871/bZxnfzX9vaKVsoClXXXWVMjIynB7zkp2dre7duze4XhfMI+jAK6XLfNB52OJe0DRXhq5+/vOfa86cOZo0aZJmzpyp7du3609/+pOeeuopR82bb76pWbNmOdav+WGYkaTS0lJJdatRn12X6LXXXtPEiRP1pz/9SSkpKY5/Kbdp08bxmI3LLrvM6X3Cw8MVFRXl2P/ll19q+fLlGjlypDp37qyvv/5aubm5atOmjW688UbXTgrwnXHjxunhhx/WnDlzJNWt97Vy5UotX77c1MR6NI4zCK90ncyl9EJJhy3uBS0rMjJSq1at0t69ezVw4ED97ne/0+zZszVlyhRHTVlZ2XkrTzflz3/+s6qrqzVt2jR17drVsc2YMcP0e4SFhWn9+vW68cYblZiYqLFjx6p9+/basGED//JGswUFBenBBx/UW2+9pdraWq1cuVL9+vXTz372M3e35hNshmEY7m6iKeXl5YqMjFRZWZkiIiLc3Q48xLWS1pqoe1XSz61tBQAuSHV1tfr166fdu3fLMAwtX77c6Y5ANB9XdOC1XH0cBAB4qrNXdQzDUGxsLFdzWhBBB17LbNBZKanWykYAoAWMGzdOF198se677z7m5rSgZp3JhQsXKiEhQWFhYUpJSXE8zLAhf//739WnTx+FhYXp8ssv1zvvvNOsZoEfSpJU/83Gzg5JKvrBz1VVVXrxxRfVt29fLVmyxJLeAOCHJk6cqOHDh2vNmjVqaMZIUFCQ9uzZozvvvLOVu/NtLged5cuXKysrS9nZ2dqyZYv69++v9PR0HTp0qN76DRs2aNy4cZo0aZK2bt2qMWPGaMyYMdq+ffsFNw//dvY2czPy9H3A6d27t6ZMmaKkpCSNGmX2HQCg+SZPnqyTJ0/quuuuazLwoGW5PBk5JSVFV155pZ599llJdc+LiY+P15133ql77733vPqxY8eqoqJCb7/9tmPfj3/8YyUnJ2vRokX1fkZlZaXTmhTl5eWKj49nMjLOs1zSbU0V1dQofs4cVb/4oux2u6677jrdfvvt592SDABWMgxDH330kV588UXt3LlTAwYM0MyZMzV27Fh3t+bbXHkCaGVlpREYGGi8+eabTvszMjKMn/zkJ/UeEx8fbzz11FNO+2bPnm0kJSU1+DnZ2dmGpPM2nl6Oc5UahhFgNPEk84UL6/19YmNjY/OE7dtvv3Xb36H+wKUFA0tLS1VTU+N4wN5ZMTExjoW7zmW32+utb2xZ61mzZikrK8vx89krOsC5oiQNlvSfxoqmTpUqKxXz7LMq+fJLXX311Zo6daqSkpJap0kAUN0zrVauXKlFixZp7969Gjp0qO677z6ekWYxj1wZOTQ0VKGhoe5uA15ilJoIOjabdPfd+v/uuktpf/+75s6dq/Hjx+uGG27Q888/rx49erRSpwD81Xvvvac777xTO3fu1I033qhly5Zp8ODB7m7LL7g0GTk6OlqBgYH1PnCvoYftNfSAvobqAVeZnU78UWCgbrvtNm3btk1/+9vfdPjwYa1bt87S3gBAqrv7uFevXtq4caP+/e9/E3JaUbMmIw8ePFjPPPOMpLrJyBdddJGmT5/e4GTkU6dO6f/9v//n2DdkyBAlJSU1OBn5XKyMjMbUSOoi6Wg9r12uuiA0SnUP9+Q6IQD4F5eHrrKysjRx4kQNGjRIgwcP1oIFC1RRUaHMzExJUkZGhrp166acnBxJ0owZMzRs2DD98Y9/1OjRo7Vs2TJ9/PHH+vOf/9yy3wR+K1DSSEnLJHX47s/p323mHyUJAPBFLgedsWPH6vDhw5o9e7bsdruSk5OVl5fnmHBcXFzstKLjkCFD9Nprr+mBBx7Qfffdp0suuUQrVqw47ynBwIW4R9Jdkq6Uh048AwC4BQ/1BAAAPouHaQAAAJ9F0AEAAD6LoAMAAHwWQQcAAPgsgg4AAPBZBB0AAOCzCDoAAMBnEXQAAIDP8opFZM+uaVheXu7mTgAAgKvat28vm83mls/2iqBz4sQJSVJ8fLybOwEAAK5y55MNvOIRELW1tfrmm2/cmgjdpby8XPHx8dq/fz+PvzCJc+Y6zpnrOGfNw3lznS+cM67oNCEgIEDdu3d3dxtuFRER4bW/4O7COXMd58x1nLPm4by5jnPWPExGBgAAPougAwAAfBZBx8OFhoYqOztboaGh7m7Fa3DOXMc5cx3nrHk4b67jnF0Yr5iMDAAA0Bxc0QEAAD6LoAMAAHwWQQcAAPgsgg4AAPBZBB0AAOCzCDoe5ujRoxo/frwiIiLUoUMHTZo0SSdPnmz0mD//+c8aPny4IiIiZLPZdPz48dZp1o0WLlyohIQEhYWFKSUlRZs2bWq0/u9//7v69OmjsLAwXX755XrnnXdaqVPP4co527Fjh2655RYlJCTIZrNpwYIFrdeoB3HlnC1evFhDhw5Vx44d1bFjR6WlpTX5e+mLXDlnb7zxhgYNGqQOHTooPDxcycnJeuWVV1qxW8/h6t9pZy1btkw2m01jxoyxtkEvRtDxMOPHj9eOHTu0evVqvf3221q3bp2mTJnS6DGnTp3SqFGjdN9997VSl+61fPlyZWVlKTs7W1u2bFH//v2Vnp6uQ4cO1Vu/YcMGjRs3TpMmTdLWrVs1ZswYjRkzRtu3b2/lzt3H1XN26tQpXXzxxcrNzVVsbGwrd+sZXD1na9eu1bhx47RmzRoVFBQoPj5eI0eO1IEDB1q5c/dx9Zx16tRJ999/vwoKCvTf//5XmZmZyszM1MqVK1u5c/dy9bydtW/fPv3+97/X0KFDW6lTL2XAY3z66aeGJGPz5s2Ofe+++65hs9mMAwcONHn8mjVrDEnGsWPHLOzS/QYPHmxMmzbN8XNNTY0RFxdn5OTk1Ft/6623GqNHj3bal5KSYtxxxx2W9ulJXD1nP9SjRw/jqaeesrA7z3Qh58wwDKO6utpo3769sXTpUqta9DgXes4MwzAGDBhgPPDAA1a057Gac96qq6uNIUOGGC+++KIxceJE4+abb26FTr0TV3Q8SEFBgTp06KBBgwY59qWlpSkgIEAbN250Y2eeo6qqSoWFhUpLS3PsCwgIUFpamgoKCuo9pqCgwKlektLT0xus9zXNOWf+riXO2alTp3TmzBl16tTJqjY9yoWeM8MwlJ+fr127dumaa66xslWP0tzzNnfuXHXp0kWTJk1qjTa9mlc8vdxf2O12denSxWlfUFCQOnXqJLvd7qauPEtpaalqamoUExPjtD8mJkY7d+6s9xi73V5vvb+c0+acM3/XEuds5syZiouLOy9k+6rmnrOysjJ169ZNlZWVCgwM1HPPPafrr7/e6nY9RnPO24cffqi//OUvKioqaoUOvR9XdFrBvffeK5vN1ujGf3AA35Gbm6tly5bpzTffVFhYmLvb8Wjt27dXUVGRNm/erEcffVRZWVlau3atu9vyWCdOnNCECRO0ePFiRUdHu7sdr8AVnVbwu9/9Tr/85S8brbn44osVGxt73uSz6upqHT161G8nhJ4rOjpagYGBKikpcdpfUlLS4DmKjY11qd7XNOec+bsLOWfz589Xbm6u3nvvPSUlJVnZpkdp7jkLCAhQYmKiJCk5OVmfffaZcnJyNHz4cCvb9Riunrc9e/Zo3759uummmxz7amtrJdWNAOzatUu9evWytmkvwxWdVtC5c2f16dOn0S0kJESpqak6fvy4CgsLHce+//77qq2tVUpKihu/gecICQnRwIEDlZ+f79hXW1ur/Px8paam1ntMamqqU70krV69usF6X9Occ+bvmnvOHn/8cT388MPKy8tzmmvnD1rq96y2tlaVlZVWtOiRXD1vffr00bZt21RUVOTYfvKTn+jaa69VUVGR4uPjW7N97+Du2dBwNmrUKGPAgAHGxo0bjQ8//NC45JJLjHHjxjle//rrr43evXsbGzdudOw7ePCgsXXrVmPx4sWGJGPdunXG1q1bjSNHjrjjK1hu2bJlRmhoqPHSSy8Zn376qTFlyhSjQ4cOht1uNwzDMCZMmGDce++9jvqPPvrICAoKMubPn2989tlnRnZ2thEcHGxs27bNXV+h1bl6ziorK42tW7caW7duNbp27Wr8/ve/N7Zu3Wp88cUX7voKrc7Vc5abm2uEhIQY//jHP4yDBw86thMnTrjrK7Q6V8/ZvHnzjFWrVhl79uwxPv30U2P+/PlGUFCQsXjxYnd9Bbdw9bydi7uuGkfQ8TBHjhwxxo0bZ7Rr186IiIgwMjMznf6i3Lt3ryHJWLNmjWNfdna2Iem87a9//Wvrf4FW8swzzxgXXXSRERISYgwePNj4z3/+43ht2LBhxsSJE53qX3/9deNHP/qRERISYlx66aXGv//971bu2P1cOWdnf8/O3YYNG9b6jbuRK+esR48e9Z6z7Ozs1m/cjVw5Z/fff7+RmJhohIWFGR07djRSU1ONZcuWuaFr93P177QfIug0zmYYhtHql5EAAABaAXN0AACAzyLoAAAAn0XQAQAAPougAwAAfBZBBwAA+CyCDgAA8FkEHQAA4LMIOgAAwGcRdAAAgM8i6AAAAJ9F0AEAAD7r/weawCkPbi2F6AAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "def draw_arm(x, y, z):\n", + "def draw_arm_side_view(x, y, z, details=False):\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", + " l1, l2, l3 = .425, .39225, .1267\n", + " offset_x, offset_y, offset_z = (0, 0, 0.14)\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('R: ', round(math.sqrt(x**2+y**2),4))\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", + " if details:\n", + " print('Target position (x,y,z):', x, y, z)\n", + " print('R: ', round(math.sqrt(x**2+y**2),4))\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", @@ -269,9 +193,10 @@ " 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", + " if details:\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", @@ -299,9 +224,7 @@ " 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)" + " plt.show()" ] }, { @@ -310,95 +233,17 @@ "metadata": {}, "outputs": [], "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": null, - "metadata": {}, - "outputs": [], - "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": 66, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Angles: [153.31198894476785, 105.69315886537287, 101.18338602047919, 4.509772844893658, -90.0, 0.0]\n", - "(cx, cy): (-0.11909893611698993, 0.0598693027836566)\n", - "-0.06746836046451549 0.16257881075200548\n", - "-0.24309496877200426 -0.18679793543865197\n", - "-0.29999999999998095 -0.29999999999996196\n" - ] - }, - { - "data": { - "image/png": "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zc7f6tatm2JiYnTnnXd6n2vTpo3i4+PVokULtWjRQsePH5ck/eUvf1GzZs3UrFkz9ejRQ8fOMur+2muvqVmzZmrRooU6duzovfvpsmXLlJCQoNDQUKWkpHj3z8nJUe/evXXjjTfq559/PmuNhw+bAf7zLPwNuIaAsax58+aqW7eu/P561o2vm1NjklT33nynxk6JjQ2s6bJDhgzRhx9+eMbzkydP9i58GhERIUkaOnSoVq9erdWrV6tmzZp65513znhdv379tHr1aq1atUpdunRRcnKyJKlatWoaM2aMevXqlW//mTNnqnXr1ho5cqSGDx9+1hpPXf/ia9PDAYmAsWrp0qXaunWrDh48qKlTp7pdzsXL/FXa+IbZ9oRITc7sXiRzkWUgXfDXpk0b7y0bLuTUaTXHcZSRkXHWc9x5T70dO3bMu89ll12m5s2bKygo//+Oubm5CgoKUkhIiHJzc8/6vgQMfBkBY9Ezzzyj6OholStXTs8884z/djEbX5eyT07yqHefFFnrrLvFxgZWwJxL79691bJlS7322mv5nh88eLCqVaumdevWqX///md97UsvvaRatWrpww8/1FNPPXXe9+nYsaNmzpypBx54QA8//PBZ9znVMRIw8EUEjCVLly7VjBkz1KRJE9WuXVurVq3yzy4m81dzYaUkBYWedezllDp1zLUYgbzw4vjx47V69WrNnTtXU6dO1Weffeb92ptvvqmdO3eqZcuWmjhx4llf/8QTT+jHH3/U/fffr3//+9/nfa/Q0FBNnjxZ8+bN895m4re+/16KifHdC1xRshEwljzzzDNq1KiRatSooXLlyqlt27b+2cVsfPV091L3fimy5jl3veIK8zGQb4BV/eTyxdHR0brrrru0fPnyfF8PCgpSr1699Mknn5z3OHffffcF9ymI1FRzT5iScO8bFL02bdpo7Nix1o5PwFiQmpqqGTNm6Omnn/aeVx86dKhWrVqVb5aQz8s8YBa1lE52L0+ed/c6dcxf04EaMNnZ2dq/f78kKSsrSzNmzPDeZmHz5s3e/aZNm6b4+DNvG513n6lTp551n8JKTZUSEi75MEA+H374oaKiovL9zA4cOFDx8fFnnSF5LgF/R0s3hIWFacCAAbrzzjs1bdo0SdKNN96oxx9/XOXKlXO3uMLY8KqUfcRs1+t33u5FMn9Ft2oVOAHToUMH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2qldu7YjyRk1apSLhQamxx9/3JHktGjRwpkyZYqTm5t71v3S0tIcSU5aWlqBjvvLL784VapUcV544QXvc4sWLXJCQ0Od2bNnX3Ldhw4dckJDQ51JkyZ5n9uwYYMjyVmyZEmBj3Pq+yqKmoDCImBsys11nKuvPh0w//2v4zhnBsudd97prF692uViA9e8efOcdu3anTdoChswjuM4n332mRMaGuosX77cSU9Pd+rWres88sgjjuM4zvz5853IyMjzPsaNG3fOY8+ZM8eR5Bw8eDDf8zVr1nRee+21AtWXmZnpvPzyy050dLSzb9++An9fQFFhmrJNX34pffON2W7SREpM1LfffqvrrrtOx48fV8WKFZWQkKD9+/dr8ODB7tZaArRo0ULbt29Xt27dFBMTo61bt6pcuXIXfbzOnTvrgQceUJ8+fZSQkKDIyEi9+OKLkqSEhAStWrXqvK+vUqXKOb+2Z88ehYWFnVFflSpVtGfPnvMeNyUlRT179tSxY8cUGxurWbNmqWLFigX6noCiRMDYdOpWyJK590tQkKKiohQVFaXjx49LksqUKaOqVavK4/G4VGTJkJubq6ysLOXm5kqSYmJiFFoEdw995ZVX1KRJE02aNEmpqakKDw+XJEVERCguLq5Ax0hOTlZycrL38/Xr119STW3bttWqVau0f/9+vfvuu7rrrru0dOlSVa5c+ZKOCxSa2y1UwFu40HH698839pKbm+vMmDHD+d3vfudIcq699lpn5syZ5xwfwMXLzs52PvroI6dhw4aOJKdTp07ON998c8Z+F3OKzHEcZ82aNU6pUqWc4OBgZ9q0ad7nC3OK7MCBA87mzZu9jxMnThTJKbJT4uLinOTk5EK9BigKBIyLfhs0r7zyitslBZz+/fufN1hOuZiAyczMdJo3b+784Q9/cJKTk53KlSs7e/fudRzHcY4dO5YvNM72SE9PP+exTw3yT5482fvcxo0bCz3I7ziOU7duXWfo0KGFeg1QFLiS3wc4jqP58+erVq1aql27ttvlBJS1a9cqMzNTrVq1Ou9+F3Ml/2OPPabJkyfru+++U1RUlG688UZFR0crJSWlKErXgw8+qM8//1xjx45V2bJl9fDDD0uSFi9e7N0nPj5eL774orp166ajR4/qhRdeUNeuXRUbG6v9+/frrbfe0oQJE5SamqrGjRsXSV1AgbkccIBPKGwH8/XXXzshISHOggULvM9t27bNKVu2rDNixIgiqen48ePOwIEDnZiYGKd06dJOt27dnN27d+fbR5Lz/vvve/fv1q2bU61aNScsLMyJjY11unbt6ixbtqxI6gEKiw4GEGuRATZwJT8AwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBgBQEDALCCgAEAWEHAAACsIGAAAFYQMAAAKwgYAIAVBAwAwAoCBgBghcdxHMftIgC3OY6jw4cPq0yZMvJ4PG6XAwQEAgYAYAWnyAAAVhAwAAArCBgAgBUEDADACgIGAGAFAQMAsIKAAQBY8f+nfkKEagQ73QAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Target position (x,y,z): -0.3 -0.3 0.3\n", - "R: 0.4243\n", - "Angles (base, shoulder, elbow, wrist): [153.312, 105.6932, 101.1834, 4.5098]\n", - "Robot Angles: [63.312, -105.6932, 101.1834, -85.4902, -90.0, 90.0]\n", - "elbow (x,y): -0.114 0.407\n", - "wrist (x,y): 0.244 0.435\n", - "tool (x,y): 0.394 0.435\n" - ] - }, - { - "data": { - "image/png": "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K0m64447lJmZqQEDBuipp55S7969tWTJEknSpZdeqqVLl+qPf/yj2rZtq9jYWPXs2VMxMTFOV3mkuqtMXMkBgOYh6MBrpJuse19S/RHE2dk5NyUlJU77S0pKGp2Pk5KSourqau3bt6/e17t27SpJ6tevn9P+vn37qri42PHzz3/+c9ntdh04cEBHjhzRQw89pMOHD+viiy820T0AwAyCDrxGD0l9TdSdkvRhk1VSz549FRsbq/z87599Xl5ero0bNyo1NbXB44qKihQQEKAuXbrU+3pCQoLi4uK0a9cup/2ff/65evTocV59TEyM2rVrp+XLlyssLEzXX3+9ie4BAGYQdOBVXL3N/OTJkyoqKlJRUZGkugnIRUVFKi4uls1m029/+1s98sgjeuutt7Rt2zZlZGQoLi5OY8aMkVR3m/iCBQv0ySef6Msvv9Srr76qu+++W7/4xS/UsWNHSdKBAwfUp08fbdq0SZJks9n0hz/8QU8//bT+8Y9/aPfu3XrwwQe1c+dOTZo0ydHjs88+qy1btujzzz/XwoULNX36dOXk5KhDhw4XfqK83H//+18NHTpUYWFhio+P1+OPP2762CNHjqh79+6y2Ww6fvy4Y/8bb7yh66+/Xp07d1ZERIRSU1O1cmXDA525ubmO35EfuuOOO9SrVy+1adNGnTt31s0336ydO3e6+hUBtBbDC5SVlRmSjLKyMne3AjdbaRiGTGyXfVe/Zs0aQ3UPNnfaJk6caBiGYdTW1hoPPvigERMTY4SGhhojRowwdu3a5fi8wsJCIyUlxYiMjDTCwsKMvn37GvPmzTNOnz7tqNm7d68hyVizZo1Trzk5OUb37t2Ntm3bGqmpqcb69eudXp8wYYLRqVMnIyQkxEhKSjJefvnlljtRHqSystKl+rKyMiMmJsYYP368sX37duNvf/ub0aZNG+OFF14wdfzNN99s3HDDDYYk49ixY479M2bMMB577DFj06ZNxueff27MmjXLCA4ONrZs2XLee2zatMlISEgwkpKSjBkzZji99sILLxgffPCBsXfvXqOwsNC46aabjPj4eKO6utql7wnUp23btsaCBQvc3YZPIejAq3xrGEYbw1zY2e+mHv3dsGHDjGnTphkzZswwoqKijOHDh7t0/HPPPWd07NjRKSDNnDnT6N27t6ljhw0bZuTn558XdOrTr18/Y86cOU77Tpw4YVxyySXG6tWrjWHDhp0XdM71ySefGJKM3bt3N9kf0BSCTstj6ApeJUzScJO1LX33FcxbunSpQkJC9NFHH2nRokW64YYb1K5duwa3Sy+91HFsQUGBrrnmGqeFEdPT07Vr1y4dO3aswc/89NNPNXfuXL388svn3blWn9raWp04cUKdOnVy2j9t2jSNHj3aaX2lhlRUVOivf/2revbsqfj4+CbrAbQ+VkaG1xkl6V0TdXmSJjVZBStccsklTvNqXnzxRafnfJ0rODjY8We73a6ePXs6vX52rSO73e6YG/VDlZWVGjdunJ544glddNFFjrWMGjN//nydPHlSt956q2PfsmXLtGXLFm3evLnRY5977jndc889qqioUO/evbV69WpWrAY8FEEHXsfshOTVkqrFL7k7DBw40Onnbt26Wfp5s2bNUt++ffWLX/zCVP1rr72mOXPm6F//+pfj7rn9+/drxowZWr16tcLCwho9fvz48br++ut18OBBzZ8/X7feeqs++uijJo8D6lNTUyNJCgwMdNp/5swZp38EoHkYuoLXuURSzyarpDJJGy3uBfULDw93+tmVoavY2Nh61zY6+1p93n//ff39739XUFCQgoKCNGLECElSdHS0srOznWqXLVumX/3qV3r99dedhqcKCwt16NAhXXHFFY73+eCDD/T0008rKCjI8R8jqW4Rx0suuUTXXHON/vGPf2jnzp168803m3GmgLrh0vHjxzvt27hxo6Kjo51WaUfz8I9deB2b6q7qPG+iNk/SVda2AxNcGbpKTU3V/fff7/Sv2dWrV6t37971DltJ0j//+U+n99+8ebNuv/12rV+/Xr169XLs/9vf/qbbb79dy5Yt0+jRo53eY8SIEdq2bZvTvszMTPXp00czZ84871/bZxnfzX9vaKVsoClXXXWVMjIynB7zkp2dre7duze4XhfMI+jAK6XLfNB52OJe0DRXhq5+/vOfa86cOZo0aZJmzpyp7du3609/+pOeeuopR82bb76pWbNmOdav+WGYkaTS0lJJdatRn12X6LXXXtPEiRP1pz/9SSkpKY5/Kbdp08bxmI3LLrvM6X3Cw8MVFRXl2P/ll19q+fLlGjlypDp37qyvv/5aubm5atOmjW688UbXTgrwnXHjxunhhx/WnDlzJNWt97Vy5UotX77c1MR6NI4zCK90ncyl9EJJhy3uBS0rMjJSq1at0t69ezVw4ED97ne/0+zZszVlyhRHTVlZ2XkrTzflz3/+s6qrqzVt2jR17drVsc2YMcP0e4SFhWn9+vW68cYblZiYqLFjx6p9+/basGED//JGswUFBenBBx/UW2+9pdraWq1cuVL9+vXTz372M3e35hNshmEY7m6iKeXl5YqMjFRZWZkiIiLc3Q48xLWS1pqoe1XSz61tBQAuSHV1tfr166fdu3fLMAwtX77c6Y5ANB9XdOC1XH0cBAB4qrNXdQzDUGxsLFdzWhBBB17LbNBZKanWykYAoAWMGzdOF198se677z7m5rSgZp3JhQsXKiEhQWFhYUpJSXE8zLAhf//739WnTx+FhYXp8ssv1zvvvNOsZoEfSpJU/83Gzg5JKvrBz1VVVXrxxRfVt29fLVmyxJLeAOCHJk6cqOHDh2vNmjVqaMZIUFCQ9uzZozvvvLOVu/NtLged5cuXKysrS9nZ2dqyZYv69++v9PR0HTp0qN76DRs2aNy4cZo0aZK2bt2qMWPGaMyYMdq+ffsFNw//dvY2czPy9H3A6d27t6ZMmaKkpCSNGmX2HQCg+SZPnqyTJ0/quuuuazLwoGW5PBk5JSVFV155pZ599llJdc+LiY+P15133ql77733vPqxY8eqoqJCb7/9tmPfj3/8YyUnJ2vRokX1fkZlZaXTmhTl5eWKj49nMjLOs1zSbU0V1dQofs4cVb/4oux2u6677jrdfvvt592SDABWMgxDH330kV588UXt3LlTAwYM0MyZMzV27Fh3t+bbXHkCaGVlpREYGGi8+eabTvszMjKMn/zkJ/UeEx8fbzz11FNO+2bPnm0kJSU1+DnZ2dmGpPM2nl6Oc5UahhFgNPEk84UL6/19YmNjY/OE7dtvv3Xb36H+wKUFA0tLS1VTU+N4wN5ZMTExjoW7zmW32+utb2xZ61mzZikrK8vx89krOsC5oiQNlvSfxoqmTpUqKxXz7LMq+fJLXX311Zo6daqSkpJap0kAUN0zrVauXKlFixZp7969Gjp0qO677z6ekWYxj1wZOTQ0VKGhoe5uA15ilJoIOjabdPfd+v/uuktpf/+75s6dq/Hjx+uGG27Q888/rx49erRSpwD81Xvvvac777xTO3fu1I033qhly5Zp8ODB7m7LL7g0GTk6OlqBgYH1PnCvoYftNfSAvobqAVeZnU78UWCgbrvtNm3btk1/+9vfdPjwYa1bt87S3gBAqrv7uFevXtq4caP+/e9/E3JaUbMmIw8ePFjPPPOMpLrJyBdddJGmT5/e4GTkU6dO6f/9v//n2DdkyBAlJSU1OBn5XKyMjMbUSOoi6Wg9r12uuiA0SnUP9+Q6IQD4F5eHrrKysjRx4kQNGjRIgwcP1oIFC1RRUaHMzExJUkZGhrp166acnBxJ0owZMzRs2DD98Y9/1OjRo7Vs2TJ9/PHH+vOf/9yy3wR+K1DSSEnLJHX47s/p323mHyUJAPBFLgedsWPH6vDhw5o9e7bsdruSk5OVl5fnmHBcXFzstKLjkCFD9Nprr+mBBx7Qfffdp0suuUQrVqw47ynBwIW4R9Jdkq6Uh048AwC4BQ/1BAAAPouHaQAAAJ9F0AEAAD6LoAMAAHwWQQcAAPgsgg4AAPBZBB0AAOCzCDoAAMBnEXQAAIDP8opFZM+uaVheXu7mTgAAgKvat28vm83mls/2iqBz4sQJSVJ8fLybOwEAAK5y55MNvOIRELW1tfrmm2/cmgjdpby8XPHx8dq/fz+PvzCJc+Y6zpnrOGfNw3lznS+cM67oNCEgIEDdu3d3dxtuFRER4bW/4O7COXMd58x1nLPm4by5jnPWPExGBgAAPougAwAAfBZBx8OFhoYqOztboaGh7m7Fa3DOXMc5cx3nrHk4b67jnF0Yr5iMDAAA0Bxc0QEAAD6LoAMAAHwWQQcAAPgsgg4AAPBZBB0AAOCzCDoe5ujRoxo/frwiIiLUoUMHTZo0SSdPnmz0mD//+c8aPny4IiIiZLPZdPz48dZp1o0WLlyohIQEhYWFKSUlRZs2bWq0/u9//7v69OmjsLAwXX755XrnnXdaqVPP4co527Fjh2655RYlJCTIZrNpwYIFrdeoB3HlnC1evFhDhw5Vx44d1bFjR6WlpTX5e+mLXDlnb7zxhgYNGqQOHTooPDxcycnJeuWVV1qxW8/h6t9pZy1btkw2m01jxoyxtkEvRtDxMOPHj9eOHTu0evVqvf3221q3bp2mTJnS6DGnTp3SqFGjdN9997VSl+61fPlyZWVlKTs7W1u2bFH//v2Vnp6uQ4cO1Vu/YcMGjRs3TpMmTdLWrVs1ZswYjRkzRtu3b2/lzt3H1XN26tQpXXzxxcrNzVVsbGwrd+sZXD1na9eu1bhx47RmzRoVFBQoPj5eI0eO1IEDB1q5c/dx9Zx16tRJ999/vwoKCvTf//5XmZmZyszM1MqVK1u5c/dy9bydtW/fPv3+97/X0KFDW6lTL2XAY3z66aeGJGPz5s2Ofe+++65hs9mMAwcONHn8mjVrDEnGsWPHLOzS/QYPHmxMmzbN8XNNTY0RFxdn5OTk1Ft/6623GqNHj3bal5KSYtxxxx2W9ulJXD1nP9SjRw/jqaeesrA7z3Qh58wwDKO6utpo3769sXTpUqta9DgXes4MwzAGDBhgPPDAA1a057Gac96qq6uNIUOGGC+++KIxceJE4+abb26FTr0TV3Q8SEFBgTp06KBBgwY59qWlpSkgIEAbN250Y2eeo6qqSoWFhUpLS3PsCwgIUFpamgoKCuo9pqCgwKlektLT0xus9zXNOWf+riXO2alTp3TmzBl16tTJqjY9yoWeM8MwlJ+fr127dumaa66xslWP0tzzNnfuXHXp0kWTJk1qjTa9mlc8vdxf2O12denSxWlfUFCQOnXqJLvd7qauPEtpaalqamoUExPjtD8mJkY7d+6s9xi73V5vvb+c0+acM3/XEuds5syZiouLOy9k+6rmnrOysjJ169ZNlZWVCgwM1HPPPafrr7/e6nY9RnPO24cffqi//OUvKioqaoUOvR9XdFrBvffeK5vN1ujGf3AA35Gbm6tly5bpzTffVFhYmLvb8Wjt27dXUVGRNm/erEcffVRZWVlau3atu9vyWCdOnNCECRO0ePFiRUdHu7sdr8AVnVbwu9/9Tr/85S8brbn44osVGxt73uSz6upqHT161G8nhJ4rOjpagYGBKikpcdpfUlLS4DmKjY11qd7XNOec+bsLOWfz589Xbm6u3nvvPSUlJVnZpkdp7jkLCAhQYmKiJCk5OVmfffaZcnJyNHz4cCvb9Riunrc9e/Zo3759uummmxz7amtrJdWNAOzatUu9evWytmkvwxWdVtC5c2f16dOn0S0kJESpqak6fvy4CgsLHce+//77qq2tVUpKihu/gecICQnRwIEDlZ+f79hXW1ur/Px8paam1ntMamqqU70krV69usF6X9Occ+bvmnvOHn/8cT388MPKy8tzmmvnD1rq96y2tlaVlZVWtOiRXD1vffr00bZt21RUVOTYfvKTn+jaa69VUVGR4uPjW7N97+Du2dBwNmrUKGPAgAHGxo0bjQ8//NC45JJLjHHjxjle//rrr43evXsbGzdudOw7ePCgsXXrVmPx4sWGJGPdunXG1q1bjSNHjrjjK1hu2bJlRmhoqPHSSy8Zn376qTFlyhSjQ4cOht1uNwzDMCZMmGDce++9jvqPPvrICAoKMubPn2989tlnRnZ2thEcHGxs27bNXV+h1bl6ziorK42tW7caW7duNbp27Wr8/ve/N7Zu3Wp88cUX7voKrc7Vc5abm2uEhIQY//jHP4yDBw86thMnTrjrK7Q6V8/ZvHnzjFWrVhl79uwxPv30U2P+/PlGUFCQsXjxYnd9Bbdw9bydi7uuGkfQ8TBHjhwxxo0bZ7Rr186IiIgwMjMznf6i3Lt3ryHJWLNmjWNfdna2Iem87a9//Wvrf4FW8swzzxgXXXSRERISYgwePNj4z3/+43ht2LBhxsSJE53qX3/9deNHP/qRERISYlx66aXGv//971bu2P1cOWdnf8/O3YYNG9b6jbuRK+esR48e9Z6z7Ozs1m/cjVw5Z/fff7+RmJhohIWFGR07djRSU1ONZcuWuaFr93P177QfIug0zmYYhtHql5EAAABaAXN0AACAzyLoAAAAn0XQAQAAPougAwAAfBZBBwAA+CyCDgAA8FkEHQAA4LMIOgAAwGcRdAAAgM8i6AAAAJ9F0AEAAD7r/weawCkPbi2F6AAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "def display_arm(x, y, z):\n", + "def draw_arm_top_view(x, y, z, details=False):\n", " # Get joint and position information\n", " angles = get_joints_from_xyz_rel(x, y, z)\n", - " print('Angles:', [math.degrees(angle) for angle in angles])\n", - "\n", " offset_x, offset_y, offset_z = (0, 0, 0.14) # Tool offset\n", " l_bs, l1, l2, l3, l_wt = (0.1333, .425, .39225, .1267, .0997) # Limb lengths\n", " cx, cy = l_bs*math.cos(angles[0]), l_bs*math.sin(angles[0]) # Base tangent point\n", " line_angle = math.pi/2+angles[0]\n", - " print(f'(cx, cy): ({cx}, {cy})')\n", + "\n", + " if details:\n", + " print('Angles:', [round(math.degrees(angle),3) for angle in angles])\n", + " print(f'Circle position (cx, cy): ({round(cx, 3)}, {round(cy, 3)})')\n", "\n", "\n", " # Plot coordinate system\n", @@ -425,23 +270,29 @@ " # Shoulder\n", " x1, y1 = polar_to_cartesian(l1*math.cos(angles[1]), line_angle)\n", " x1, y1 = cx+x1, cy+y1\n", - " print(x1, y1)\n", + " z1 = l1*math.sin(angles[1])\n", " plt.plot([cx, x1], [cy, y1], color='cyan', linewidth=3)\n", "\n", " # Elbow\n", " x2, y2 = polar_to_cartesian(l2*math.cos(angles[1]-angles[2]), line_angle)\n", " x2 += x1\n", " y2 += y1\n", - " print(x2, y2)\n", + " z2 = z1 + l2*math.sin(angles[1]-angles[2])\n", " plt.plot([x1, x2], [y1, y2], color='orange', linewidth=2)\n", "\n", " # Wrist\n", " x3, y3 = polar_to_cartesian(l3*math.cos(angles[1]-angles[2]-angles[3]), line_angle)\n", " x3 += x2\n", - " y3 += y2 \n", - " print(x3, y3)\n", + " y3 += y2\n", + " z3 = z2 + l3*math.sin(angles[1]-angles[2]-angles[3]) \n", " plt.plot([x2, x3], [y2, y3], color='red', linewidth=2)\n", "\n", + " # Print joint positions\n", + " if details:\n", + " print(f'Shoulder (x, y, z): ({round(x1,3)}, {round(y1,3)}, {round(z1,3)})')\n", + " print(f'Elbow (x, y, z): ({round(x2,3)}, {round(y2,3)}, {round(z2,3)})')\n", + " print(f'Wrist (x, y, z): ({round(x3,3)}, {round(y3,3)}, {round(z3,3)})')\n", + "\n", " # Display angle\n", " plt.text(0.01, -0.01-cy/abs(cy+0.00001)*0.02, f'{round(math.degrees(angles[0]), 2)}°', fontsize=7)\n", "\n", @@ -465,19 +316,66 @@ " # Adjust the position of axis labels\n", " plt.xlabel('+x', horizontalalignment='right', x=1.05)\n", " plt.ylabel('+y', verticalalignment='top', rotation=0, y=1.05)\n", - " plt.show()\n", - "\n", - " draw_arm(x,y,z)\n", - "\n", - "display_arm(-0.3,-0.3,0.3)" + " plt.show()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 89, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Target position (x,y,z): 0.5 0.5 0.3\n", + "R: 0.7071\n", + "Angles (base, shoulder, elbow, wrist): [-34.1339, 65.0453, 57.0325, 8.0128]\n", + "Robot Angles: [-124.1339, -65.0453, 57.0325, -81.9872, -90.0, 90.0]\n", + "elbow (x,y): 0.179 0.385\n", + "wrist (x,y): 0.568 0.44\n", + "tool (x,y): 0.694 0.44\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAGfCAYAAAC0rWN5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABCx0lEQVR4nO3de1xUdf7H8RcMAiIXNZKLoSiYlqmUJGGm9osi10p3t12r3TAq223VX8WvvJRKFwtvmbvqapqXLutq7c+t3S5Ysflr3ShbL128bZiGmqBWgoCBMuf3BzVGgJyBOTPMzPv5eJxHcOZzznzmRPDunO/5ngDDMAxEREREfFygpxsQERERcQeFHhEREfELCj0iIiLiFxR6RERExC8o9IiIiIhfUOgRERERv6DQIyIiIn5BoUdERET8gkKPiIiI+AWFHhEREfELLQo9ixcvJjExkdDQUNLS0ti8eXOTtatXryYgIKDeEhoa6tT7GYZBeXk5emKGiIiItJTToWfdunXk5OSQm5vL1q1bGTBgAJmZmRw5cqTJbSIjIzl8+LBj+eKLL5x6zxMnThAVFcWJEyecbVdEREQEaEHomT9/PuPGjSM7O5sLL7yQpUuXEhYWxsqVK5vcJiAggNjYWMcSExPTqqZFREREnOVU6KmpqWHLli1kZGSc2UFgIBkZGRQWFja5XUVFBd27dychIYFRo0axY8eOs75PdXU15eXl9RYRERGR1nAq9Bw7doza2toGZ2piYmIoKSlpdJvevXuzcuVKXnnlFV544QXsdjuDBw/m4MGDTb5PXl4eUVFRjiUhIcGZNkVEREQasPzurfT0dLKyskhJSWHYsGGsX7+ec889l6effrrJbaZOnUpZWZljOXDggNVtioiIiI8LcqY4Ojoam81GaWlpvfWlpaXExsaa2ke7du24+OKLKSoqarImJCSEkJAQZ1oTEREROSunzvQEBwczcOBACgoKHOvsdjsFBQWkp6eb2kdtbS2ffPIJcXFxznUqIiIi0gpOnekByMnJYezYsaSmpjJo0CAWLFhAZWUl2dnZAGRlZdG1a1fy8vIAePTRR7nssstITk7m+PHjzJ07ly+++II777zTtZ9ERERE5CycDj1jxozh6NGjzJgxg5KSElJSUsjPz3cMbi4uLiYw8MwJpG+++YZx48ZRUlJCp06dGDhwIO+99x4XXnih6z6FiIiISDMCDC+Y5ri8vJyoqCjKysqIjIz0dDsiIiLihfTsLREREfELCj0iIiLiFxR6RERExC8o9IiIiIhfUOgRERERv6DQIyIiIn5BoUdERET8gkKPiIiI+AWFHhEREfELCj0iIuLVamtrmT59Oj169KB9+/YkJSXx2GOP0dwDBzZu3Mgll1xCSEgIycnJrF69ut7r7777Ltdffz3x8fEEBATw8ssvN9hHSUkJI0aMID4+ngkTJmC32134ycTVFHpERMSrzZ49myVLlrBo0SJ27drF7NmzmTNnDgsXLmxym3379jFy5EiuvPJKtm/fzr333sudd97Jhg0bHDWVlZUMGDCAxYsXN7mf6dOnk5qayhtvvMHnn3/O2rVrXfrZxLWcfuCoiIhIW/Lee+8xatQoRo4cCUBiYiJ//vOf2bx5c5PbLF26lB49evDkk08CcMEFF7Bp0yaeeuopMjMzARgxYgQjRow463t/8803XH311fTr14+ePXty/Phx13wosYTO9IiIiFcbPHgwBQUF/Oc//wHgo48+YtOmTWcNLIWFhWRkZNRbl5mZSWFhoVPvPWXKFCZOnEhISAhbt24lKyvL+Q8gbqMzPSIi4tWmTJlCeXk5ffr0wWazUVtby+OPP86vfvWrJrcpKSkhJiam3rqYmBjKy8s5efIk7du3N/XeqampHDp0iGPHjhEbG9uqzyHWU+gRERGv9uKLL/KnP/2JNWvW0LdvX8cYnfj4eMaOHWv5+wcFBSnweAmFHhER8WoPPPAAU6ZM4aabbgKgX79+fPHFF+Tl5TUZemJjYyktLa23rrS0lMjISNNnecT7aEyPiIh4taqqKgID6/85s9lsZ719PD09nYKCgnrr3nrrLdLT0y3pUdoGnekRERGvdv311/P444/TrVs3+vbty7Zt25g/fz633367o2bq1KkcOnSI5557DoDf/va3LFq0iEmTJnH77bfzj3/8gxdffJHXXnvNsU1FRQVFRUWO7/ft28f27dvp3Lkz3bp1c98HFJcJMJqbvakNKC8vJyoqirKyMiIjIz3djoiItCEnTpxg+vTp/PWvf+XIkSPEx8dz8803M2PGDIKDgwG47bbb2L9/Pxs3bnRst3HjRu677z527tzJeeedx/Tp07ntttvqvX7llVc2eL+xY8c2mMhQvINCj4iIiPgFjekRERERv6DQIyIi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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Angles: [-34.134, 65.045, 57.033, 8.013, -90.0, 0.0]\n", + "Circle position (cx, cy): (0.11, -0.075)\n", + "Shoulder (x, y, z): (0.211, 0.074, 0.385)\n", + "Elbow (x, y, z): (0.429, 0.395, 0.44)\n", + "Wrist (x, y, z): (0.5, 0.5, 0.44)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAGYCAYAAAB/O/RVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAl90lEQVR4nO3deXxU1d3H8e8kIRCWJEZ2hEBQoSAQ1qAWRUARUREFKUUKhaBEcEF4tH1EllbZqoKiCELZKm6tVhBRUR5RRHaIgCiyU9khmCAQhOQ8fxxJDFuzndyZyef9es0r59yZufc3kOSbc5dzfcYYIwAAClmI1wUAAIITAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAg6LVu3VozZ870ugyg2CFgUGy1adNGAwcOzLHs0KFDCg8P16JFizyqCggeBAyKrcTERL3++us6depU1rLXXntN1apVU5s2bTysDAgOBAyKrbvvvluSNHfu3KxlM2fOVO/eveXz+bwqCwgaPu4Hg2AzatQojRo1Kqt/8uRJlShRQmFhYVnLNm3apBo1auiRRx7R5s2b9dFHH2nt2rVq3ry5tm/frtjYWC9KB4IKAYOgk5KSopSUlKx+jx49dM8992SNWCSpZs2aCgsL04YNGxQfH69du3Zp7Nix+u677/TJJ594UTYQdML++0uAwBITE6OYmJisfkREhCpWrKgrr7zyvNc2aNBAzZo109SpU/X666/rpZdeKspSgaBGwKDYS0xM1MCBA1WmTBl17tzZ63KAoMFBfhR73bt3V1hYmLp3765SpUp5XQ4QNDgGg2Jv586dql27tlatWqUmTZp4XQ4QNAgYFFunT5/WkSNHNGTIEO3YsUNLly71uiQgqLCLDMXW0qVLVaVKFa1atUqTJ0/2uhwg6DCCAQA4wQgGAOAEAQMAcIKAASQZY5SWlib2GAOFh4ABJB07dkxRUVE6duyY16UAQYOAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQMAcIKAAQA4QcAAAJwgYAAAThAwAAAnCBgAgBMEDADACQIGAOAEAQO/YYzRsGHDVKVKFUVERKhdu3basmXLJd8zYsQI+Xy+HI+6desWUcUALoWAgd8YN26cXnzxRU2ePFkrVqxQmTJl1L59e6Wnp1/yffXr19e+ffuyHl9++WURVQzgUggY5NuhQ4dUuXJljRo1KmvZV199pfDwcC1atChP6zLGaMKECRo6dKg6deqkhg0bavbs2dq7d6/ee++9S743LCxMlStXznqUL18+Px8HQCEjYJBvFSpU0PTp0zVixAitXr1ax44dU8+ePTVw4EC1bdtWS5YsUdmyZS/5mDNnjiRpx44d2r9/v9q1a5e1/qioKCUkJGjZsmWXrGPLli2qWrWq4uLi1KNHD+3evdvJ5128eLHuu+8+ff/9907Wj4vbt2+ffv/732vBggUyxnhdDnIpzOsCENhuu+029evXTz169FCzZs1UpkwZjR49WpLUrFkzJScnX/L9lSpVkiTt378/R//Xz5997kISEhI0c+ZM1alTR/v27dPIkSPVqlUrbdy4UeXKlSvAJ8v2+eefa8SIEVq8eLEaN26ssmXLFsp6kXsRERHavXu3OnbsqBYtWmjEiBG69dZb5fP5cr4wPV0KDZVKlPCmUORkgAI6ceKEiYuLMyVKlDDr16/P1zqWLl1qJJm9e/fmWN61a1dz77335no9R48eNZGRkWbatGl52n5qaqqRZFJTU7OWLV682LRu3dpIMo0bNzZz5841mZmZeVovCk9mZqb55JNPzHXXXWckmRYtWpgFCxbk/D956CFjmjY1ZuNG7wpFFkYwKLBt27Zp7969yszM1M6dO9WgQQNJ0pIlS9ShQ4dLvnfKlCnq0aOHKleuLEk6cOCAqlSpkvX8gQMHFB8fn+taoqOjdfXVV2vr1q15/yC/cv/992vq1KmSpNDQUG3YsEFdunQp0DpROIwxCg0N1cqVK3Xbbbfp9ttv1/vvvy/93/9JEyfaF7VqJe3aJRXSKBb5Q8CgQH7++Wfdd9996tatm+rUqaPExERt2LBBFStWzNMuslq1aqly5cpatGhRVqCkpaVpxYoVSkpKynU9P/30k7Zt26aePXvm9yNJkpKSkrRq1SolJycrJiZGt956q1q0aKHQ0NACrRcFk5mZqeTkZH3wwQfat2+f6tWrp8cee0xKS5P69Ml+4YgRhIs/8HoIhcA2ZMgQU7NmTZOammoyMjLMb3/7W9OxY8d8rWvMmDEmOjrazJ0716xfv9506tTJ1KpVy5w8eTLrNW3atDETJ07M6g8ePNgsXrzY7NixwyxdutS0a9fOlC9f3hw8eDBP277QLjJjjFm3bp3p3LmzkWRq165tZsyYYTIyMvL1+VAwb7/9tqlfv76RZNq3b2+++uqr7CcTE42R7KN1a2P4P/ILBAzy7bPPPjNhYWFmyZIlWct27NhhIiMjzaRJk/K8vszMTPPUU0+ZSpUqmZIlS5q2bduazZs353hNbGysGT58eFa/W7dupkqVKiY8PNxUq1bNdOvWzWzdujXP275YwJz166D54osv8rx+FMy333574WAxxpgFC7LDpWxZY3bs8KRGnM9nDOf8AWlpaYqKilJqaqoiIyMv+rrDhw8rJiZGISGc4V+UjDE6fPiwKlSokPOJlBTpmmukffskSZ899pie//57zZs37/wzzFDk+CkB8qB8+fKEiwd8Pt/54SJJDz+cFS669VYN+PBDzZ8/Xx9//HHRFogL4icFQGB6913plwt1FR2tr/r317fffivJzlHHzhnvETAAAs+hQ1L//tn9F1/UyEmTVKVKFYWGhmrFihX66KOPvKsPkggYAIHGGBsuhw7Z/l136au4OC1cuFAdO3aUz+fTddddxyjGDxAwAALLG2/Y3WOSdPnl0uTJGvmXv6h+/fqKj4+Xz+fTiBEjtHLlSkYxHiNgAASOvXulgQOz+5Mn61BIiBYuXKgRI0ZknYDRrl07XX/99frHP/7hUaGQuJIfQKAwRurXTzp61Pa7d5e6dFF5Y/Ttt9+qbt26euWVVyTZs87mz5//X+8lBLcIGACBYcYMacEC265cWXrpJUm66F1Mo6Oji7A4XAi7yAD4v127pEcfze5PnSrFxHhWDnKHgAHg3zIz7USWx47Z/h//KN1+u7c1IVcIGAD+7ZVX7FT8klS9ujR+vLf1INcIGAD+a+tW6fHHs/vTp0tRUd7VgzwhYAD4p4wMqXdv6cQJ23/wQaldO09LQt4QMAD80/jx0tKlth0XJ40d6209yDMCBoD/2bRJGjrUtn0+aeZMqWxZT0tC3hEwAPzL6dNSr17SqVO2P2iQ1KqVtzUhXwgYAP5lzBhp9WrbrltXevppb+tBvhEwAPzH6mXSX/5i2yEh0qxZUkSEtzUh3wgYAP7hRJrUtY105ozt//nPUosW3taEAiFgAPiHhztIO3+ZnDKunDRsmLf1oMAIGADeO7xCCl0mlZIUKmnmNCk83OuqUEDMpgzAW2dOSst7STcaqZ6kU12lVvd6XRUKAQEDwFtfPymlbbbtOs2lW173th4UGnaRAfDOwS+kzRNsO6SkdO0sKYS/e4MFAQPAG6d/kpb1lmRsv9EzUtRvvKwIhYyAAeCNdf8jHd9h2xV+K9V51NNyUPgIGABFb99Caetk2w4tLbWcKYWEeloSCh8BA6Bo/fyjtKJvdr/x36RytT0rB+4QMACK1tpB0okfbLtyO+mq/t7WA2cIGABF54d50vaZtl0iUkr4u+Tj11Cw4n8WQNE4dURaeX92v8kEqUwNz8qBewQMgKKxaoCUfsC2q94uxfX2tBy4R8AAcG/X29Lut2w7/DIp4VV7p0oENQIGgFsn90urH8zuN3tZiqjiXT0oMgQMAHeMkVY+YI+/SFL1LlLs77ytCUWGgAHgzo5/SHvm2XbJClLzSewaK0YIGABunPhBWvNwdr/Fq1KpCt7VgyJHwAAofMZIy/tKp1Ntv+Z9UvW7PC0JRY+AAVD4tr4q7V9o2xFVpWYvelsPPEHAAChcP22X1g3O7if83Z6ajGKHgAFQeEymtLyPdOa47dfuJ1W91dua4BkCBkDh2TxROvi5bZepKTV5ztNy4C0CBkDhSNssff2n7H7L6VKJct7VA88RMAAKLvOMtKyXlJFu+1c/LFW6ydua4DkCBkDBffusdGSFbZe7Soof7W098AsEDICC+XGDtGGYbftC7O2Pw0p7WhL8AwEDIP8yfra7xjJP237dIVKF67ytCX6DgAGQf988Ix1dZ9tR9aWGI72tB36FgAGQPylrbMBIki9UunaWFFrK25rgVwgYAHmXkS4t+4NkMmy//lAppqm3NcHvEDAA8m79cCl1k21f1li65klv64FfImAA5M2hr6Rv/2bbIeF211hICW9rgl8iYADk3pnj9qwxGdtvMFKKbuBpSfBfBAyA3Ev+s/TTVtu+vKX0myHe1gO/RsAAyJ0Dn0nfT7Tt0Ihfdo2FeVsT/BoBA+C/O50mLf9jdr/RaCnyau/qQUAgYAD8d2sHS8d32XbFG6U6D3lbDwICAQPg0vZ+KG2bZtthZaWWM+ycY8B/wXcJgIv7+ai0IjG73+Q5qWwt7+pBQCFgAFzc6oelk3ttu0p7ewtkIJcIGAAX9p9/Sztfs+0SUVLCNMnn87YmBBQCBsD50g9JKx/I7jd9USp9hXf1ICARMAByMkZalSSdOmT7V3SSavX0tiYEJAIGQE673pT+845tl7xcaj6FXWPIFwIGQLYTe6XVA7L7zV+RIip5Vw8CGgEDwDJGWnm/PTVZkmp0k2p09bYmBDQCBoC1fYa09wPbLlVJav6yt/Ug4BEwAOw0MGseze63mGqPvwAFQMAAxZ3JlJb3kc4cs/243tIVd3haEoIDAQMUd1tekQ78n22Xri41meBpOQgeBAxQnB3bKq17PLuf8HcpPMq7ehBUCBiguMrMkJb3ljJO2P5VSVKVmz0tCcGFgAGKq80TpENLbbtsnBQ/ztNyEHwIGKA4St0kff3kLx2fvcdLibKeloTgQ8AAxU3mGWlZLynzlO3XeVSqeIOnJSE4ETBAcbNpjJSy2rYj60iNnvG2HgQtAgYoTo4mSxv/Ytu+EKnlLCkswtOSELwIGKC4yPj5l11jp22/3p+k8gne1oSgRsAAkjIzva6gCGz8i/TjetuObiBdM8zbehD0wrwuACgqhw9La9bYx+rV0rp1UkqKdPKkdPqXP+orVZIiIqS4OKlp0+xHgwZSeLi39RfI4ZXSptG27QuTrp0thZb0tiYEPQIGQcsYacUKafJk6bPPpN277fKoKKlJE+mee6QqVaRSpexrH3pIGjlSysiQNm+WvvpKmjbNjm7Cw6WGDaUuXaQ+faQKFbz9bHly5qS0vJedc0ySGgyXLov3tCQUDwQMgs6JE9Lrr0uTJtlRSq1aUteuUrNmdjRSu7YUcs7O4bQ0GzD9+0uRkTnX9fXXdtSzdKk0fLg0bJh0773Sgw9KLVsGwM0e1w+V0r6z7Zhm9tgLUAQ4BoOgcfCgNGiQVLWqdP/9UrVq0oIF0tat0rPPSr/7nXTVVeeHy6WULi1de600cKD0xhvSnj3SM8/Y0c1119mR0OzZdgTklw4ukb4bb9shJaVrZ0kh/F2JokHAICi8/bZUv740a5aUlCRt3y69/77UoUPeAuW/ufxyacgQacsW6cMPpSuukHr1km65Rdq1q/C2UyhO/2TnGtMv6dfoaSmqnpcVoZghYBDQDh60u7+6dZNuvFH67jtp9GipZk232w0JkW691YbYxx/bYzbXXCNNmeJHo5nkx6Wfttt2heulOoO8rQfFDgGDgHV21LJ4sfTWW9K//iVVrFj0ddxyi7Rhg90F17+/n4xm9n1i7/MiSaGlpZYzpZBQT0tC8UPAIOAYIz3xRPao5Ztv7EF3L0VFSVOnSh99ZEdRTZpIK1d6VMzPqdKKPtn9xuOkcld6VAyKMwIGASUjw44Sxo2Txo/3btRyMe3bS+vXS3XrSm3b2tOji9zaQdKJH2y7Uht7nxfAAwQMAkZmptSvn702ZcYM6dFHva7owi67TFq40J5l1qFDEYfMnvnS9hm2HVZOajndzjkGeIDvPAQEY6THHpNmzrSnBffu7XVFl1amjDRvnt2Fd+edRbS77NQRaUW/7H7T8VKZ2CLYMHBhBAwCwvjx0gsvSC+/LPXo4XU1uVOypPTuu3YGgA4d3B74/1DS6dUDpfT9dkHV26S4Ppd8D+AaAQO/98030p//LA0ebK9xCSRlykjz59sLNhMT3ZzCvE7SrN3/VIldb9oF4ZdJLaYGwBQDCHYEDPzamTN2d1hcnPT0015Xkz+XXWaPG336qT3TrDCdkjTo5AG9tCo7ed9o9pJUumrhbgjIBwIGfu3ZZ6W1a+2xl1KlvK4m/9q3l/r2taOwwtxVNlJS9w3DVP7UEUnSv6rfo29juxfeBoACIGDgt775xk4uOWSIlBAE98V67jkpOrrwdpUtlzRW0uPx4zQ97o86WLKCJjV/RUPZNQY/QcDALxljJ6ysXdtOoR8MoqKyd5W99lrB1nVCUi9JmZLSwqPUt+V0xXf8RhNKVVAg37YGwYWAgV9atcrOWDxuXGDvGjtX+/ZSx47S888XbBTzpKTvz1k2sFQFNSxIcUAhI2DglyZNshNWdujgdSWFb8AAKTnZ3gwtPz6X9MI5y1pIerxgZQGFjoCB3zlyRHrzTTslTGgQzs/Yvr29CdqkSXl/7zFJf1TWBPySpFKSZom7B8L/EDDwOzNm2N1HfYL0OsGQEHs9z1tvSYcP5+29/yNpxznLRkmqW0i1BaLMzEwtWbJEmZmZOZbv2bNH339/7o5EFCUCBn4lM1N65RU7O7K/3Pf++eefV8OGDRUfH69bbrlFBw4cyPH8/Pnz5fP5tHHjxvPeu3PnTl1//fUqVaqUXnrppazlrVpt1unTjdWwYbwaNWqkefPmZT03btw4NW3aVIsWLcqxro8lTTln/TdIeqSgHzDApaSk6IYbbtDs2bOzlhljdMcdd+ivf/2rh5WBgIFfSU62d6Ps29frSrIlJiZq/fr1Sk5O1h133KFRo0ZlPZeenq7x48erRYsWF3xvZGSknn/+eQ0ePDjH8vj4WHXpskLVqiVr4cKFSkpKkjFGx44d0/r16/Xll19qypTsOPlR0rn/JGUkzRA/xOXLl1fnzp319NNPKyMjQ5I0b948rVu3TomJiR5XV7wV9+9N+JnVq+1xl4v8vvZEZGRkVvvEiRPy/eo6k3HjxikpKUkREREXfG9MTIwSEhJUokSJHMtLlSqlVq3CtX69lJaWLvPLKWVnv4aEhOTYzqOS9pyz7mclxeX7UwWXYcOGadu2bVq1apWMMRoxYoRuuukm3XjjjV6XVqwRMPAra9ZI9erZubv8yZgxYxQbG6vZs2dr6NChkuzur+XLl6tLly75WmdMzCb9/HMDNWpUX5MmTZLP51NkZKTq1Kmja6+9Nuuv73myB/F/7WZJD+T/4wSd+Ph4de7cWR9++KGMMUpOTtbw4cO9LqvYI2DgV9askZo29bqK8/3pT3/Srl271LdvX02cOFGSNGTIEI0ZMybf6+zcuZ5CQjboySeTNW7cOKWnp0uSnnrqKa1du1Y333yzDku6/5z3RUr6uySu189p2LBhOnTokDIyMhi9+AkCBn7j1Cl7N0h/CJiXX35Z8fHxio+P18mTJ7OW33fffXrnnXckSWvXrtWdd96pmjVravny5Wrfvr02bdqU622ULi395jfSf/5zpaKjoy94ksAASQfOWfaCpOr5+EzB7uz/lyRGL36CgIHf2LhROn3aPwJmwIABSk5OVnJysn744Yes5XPnzlXduvak4O3bt2vnzp3auXOnWrZsqY8//lj16tXL1fp3796tU6dOqVkzadmyvdq4caNq1qyZ4zVvSXr7nPfdITtFDC5s+vTp6tevH6MXP8G1WfAbO365wKNOHW/rONfYsWO1fPlyhYaGqnr16po8efIlX7969WpNnjxZ06ZN09GjR9WgQQOlpaUpNDRUY8aM0Q8//KDk5GQ9+eSTOnIkVAcPhuif/3xB5cuXz1rHfkkPnrPeGEmvil1jl9K4cWO9+uqrXpeBX/iMcXELJCDvXntN6tlTSk+3d4MsSmlpaYqKilJqamqOs8Zce+EF6X//Vzp+PHuZkdRJ0vvnvPZNSd2KrDKg4HI1gjl7fj7gUkqK/Zqebo/HFKVnn02TZIOmKBkjnTghpaZm34DydZ0fLndJ6iCpaKtDMCpXrlyOU+BdytUI5uxfdwCAwFaUo/RcBQwjGBSFOXOkBx+0k12GFfHRwSNH0hQXV10+338UHx+pyZOlukUwwdeUKdKTT9o5yYykzpI+O+c1b0i6zX0pAc8Yo1GjRmnWrFlKTU1VQkKCxo8fr9q1a1/0PaNHjz7vVPOrrrpKq1evdl2uZ4pyBJOrH+OzF4ABLsXE2K/h4VLZst7U8OmnkRowIFI33CD99a/SY4+5ndHZ57OnK0dGSpN1frj8QdLv3G0+qIwdO1ZTpkzRrFmzVKtWLT311FO65557tGnTJpW6yE2FSpYsqfr16+vTTz/NWhYWFsbvu0LCacrwG2cDZt8+72po1kxau1YaOFB64gnphhukrVvdbW//fvu5t0sacs5z1XT+fV+CyezZs3X55Zfr1DkH3O666y717NkzT+syxmjChAkaOnSoOnXqpIYNG2r27Nnau3ev3nvvvUu+NywsTJUrV856/PpsPhQMAQO/0bix/bp2rbd1RERIzz4rff65DYBGjaSXXrIzPRe2NWuk+CZSb0nHz3nu75KiC3+TfqNr167KyMjIMZP0wYMH9cEHH6hPnz5asmSJypYte8nHnDlzJEk7duzQ/v371a5du6x1RUVFKSEhQcuWLbtkHVu2bFHVqlUVFxenHj16aPfu3W4+cDHEdTDwG+XLSzVq2F+63fzgfNxWraSvv7YjmYcekv79b2n6dCk2tnDWn5lpw/S370hLznnuAUntC2czfisiIkK///3vNWPGDHXt2lWS9Nprr6lGjRpq3bq10tPTlZycfMl1VKpUSZK0f//+HP1fP3/2uQtJSEjQzJkzVadOHe3bt08jR45Uq1attHHjRpUrV64Anw4SAQM/07SpnVHZX5QtK738stS5s70BWoMG0vjxtl3Q46Rbt0ppVaRPb8q5vKakvxVs1QGjX79+at68ufbs2aNq1app5syZ6t27t3w+nyIiInTllVc63X6HX92Tu2HDhkpISFBsbKzefvtt9fWne0YEKHaRwa80bWr/qve3y3/btZM2bJC6dJESE6Xbb5f27i3YOleulTRL+vmckwhmSioufzs3btxYjRo10uzZs7VmzRp988036t27tyTlaRdZ5cqVJem8m8EdOHAg67nciI6O1tVXX62tLg+8FSOMYOBXmjWzFx1u3SpddZXX1eQUFWV3kd19t9Svn3TNNfbYTPfu+RvNTImUlJBz2SOSitssWomJiZowYYL27Nmjdu3aqXp1O5Vns2bNcr2LrFatWqpcubIWLVqUNeFlWlqaVqxYoaSkpFzX8tNPP2nbtm15PskgULVu3Vq9e/fOCvVCZwA/cvSoMaVKGTN6dNFuNzU11UgyqampuXr94cPGdO9ujGTM3Xcbc+BA3ra39owxOmWMTPbjamPM8TzWHQx+/PFHU7p0aRMeHm7efPPNfK9nzJgxJjo62sydO9esX7/edOrUydSqVcucPHky6zVt2rQxEydOzOoPHjzYLF682OzYscMsXbrUtGvXzpQvX94cPHiwQJ8pUNx4441mxowZ5y2fNWuWKVOmjPn++++zliUlJZk6deqY48dz/11KwMDv9O5tTGysMWfOFN028xowZ/3zn8aUL29MhQrGvPNO7t5zyhgT92POcAkxxizLW8lBpWfPniYmJsakp6fnex2ZmZnmqaeeMpUqVTIlS5Y0bdu2NZs3b87xmtjYWDN8+PCsfrdu3UyVKlVMeHi4qVatmunWrZvZunVrvmsINBcLGGOM6dq1q2nevLk5ffq0mT9/vilRooRZvXp1ntZPwMDvrFplRwbvv19028xvwBhjzP79xtx1l625Rw9jUlIu/fqnTM5wkTHmT3kvOai0adPGPPTQQ16XUexcKmBSUlLMFVdcYZKSkkylSpXMM888k+f1EzDwS82bG9OhQ9FtryABY4wxmZnG/OMfxkRHG1OlijEffHDh160yxoRm5gyXa4wx+f+7PbClpKSYd99914SEhJjvvvvO63KC3jPPPGPKlCmT9QgJCTElS5bMsWzXrl1Zr//444+NJHPdddeZjIyMPG+Pg/zwSw8+aE8F3rZNusRUUn7D55Puu0+66SZ7llnHjvbrc8/ZaWAkKV126peMX50QECZptqQivjuB32jcuLGOHj2qsWPH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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def draw_arm(x, y, z, details=False):\n", + " draw_arm_side_view(x,y,z, details=details)\n", + " draw_arm_top_view(x,y,z, details=details)\n", + "\n", + "draw_arm(0.5,0.5,0.3, details=True)" + ] } ], "metadata": {