From 2ec7906ee4bdccfbcd58bccb92f1ecb763bd605a Mon Sep 17 00:00:00 2001 From: BlueOceanWave <97416032+BlueOceanWave@users.noreply.github.com> Date: Sat, 23 Mar 2024 15:47:10 -0500 Subject: [PATCH] Basic move restrictions and flip routine --- inv_kin_testing.ipynb | 125 +++++++++++++++++++++++-------- ur5_control.py | 166 ++++++++++++++++++++++++++++-------------- 2 files changed, 207 insertions(+), 84 deletions(-) diff --git a/inv_kin_testing.ipynb b/inv_kin_testing.ipynb index 840efc7..2cdf46e 100644 --- a/inv_kin_testing.ipynb +++ b/inv_kin_testing.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -52,21 +52,21 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[-243.619306486927,\n", - " -123.2097721836616,\n", - " 140.34764917140853,\n", - " -107.13787698774695,\n", + "[82.5301003420473,\n", + " -83.54918182551367,\n", + " 111.24503912126411,\n", + " -117.69585729575046,\n", " -90.0,\n", " 90.0]" ] }, - "execution_count": 83, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -76,7 +76,6 @@ " # 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", @@ -146,10 +145,12 @@ " offsets = [-math.pi/2, 0, 0, -math.pi/2, 0, 0]\n", "\n", " # Return adjusted joint positions\n", - " return [o+j*i for j, o, i in zip(joints, offsets, inverse)]\n", + " robot_angles = [o+j*i for j, o, i in zip(joints, offsets, inverse)]\n", + "\n", + " return robot_angles\n", "\n", "# 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)]" + "[math.degrees(deg) for deg in get_joints_from_xyz_abs(-0.2, -0.5, 0.1)]" ] }, { @@ -161,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -229,7 +230,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -321,25 +322,23 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 6, "metadata": {}, "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" + "Angles: [-53.867, 89.583, 87.39, 2.193, -90.0, 0.0]\n", + "Circle position (cx, cy): (0.079, -0.108)\n", + "Shoulder (x, y, z): (0.081, -0.106, 0.425)\n", + "Elbow (x, y, z): (0.398, 0.125, 0.44)\n", + "Wrist (x, y, z): (0.5, 0.2, 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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", + "image/png": "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", "text/plain": [ "
" ] @@ -351,16 +350,18 @@ "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" + "Target position (x,y,z): 0.5 0.2 0.3\n", + "R: 0.5385\n", + "Angles (base, shoulder, elbow, wrist): [-53.8671, 89.5827, 87.3895, 2.1932]\n", + "Robot Angles: [-143.8671, -89.5827, 87.3895, -87.8068, -90.0, 90.0]\n", + "elbow (x,y): 0.003 0.425\n", + "wrist (x,y): 0.395 0.44\n", + "tool (x,y): 0.522 0.44\n" ] }, { "data": { - "image/png": "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1app5syZ6t27t3w+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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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGmCAYAAACuv4RHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2kElEQVR4nO3df1yV9d3H8Tc/5KeCGgaBCIrd4m8cJGG3P1akOZc/ZstaCyJnLbVl3DU1J1RmWJm5mdNmaaYZ1X1n7UdpRrHNopulUqZl6eb8MUHdChQa6DnX/Ye3J48C5zrIlwP6ej4e5zHPxfe6zve6bH7efK/r+z1+lmVZAgAA8BF/X3cAAABc3AgjAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAIAGFRQU6IorrlCHDh106aWXavz48dq1a1ej++zYsUMTJ05UYmKi/Pz8tHjx4nPaHDt2TDNmzFBCQoJCQ0M1ZMgQ/eUvf3FrU15ertGjRys2NlbTp0+X0+lszlNDK0IYAQA06I9//KOmTZumDz/8UJs2bdKJEyc0cuRIVVdXN7hPTU2NevTooQULFigmJqbeNj/5yU+0adMmrVmzRtu3b9fIkSOVmZmpgwcPutrMnTtXaWlpeuutt/TXv/5VhYWFzX5+aB38+KI8AIBdR44c0aWXXqo//vGPGjZsmMf2iYmJmjFjhmbMmOHa9s0336hDhw564403NGbMGNf21NRUjR49Wo888ogk6YYbbtCNN96oG264QT/72c/Up08fTZ06tdnPCb7HyAgAwLbKykpJUufOnZt8jJMnT8rhcCgkJMRte2hoqDZv3ux6P2vWLN19990KDg7W1q1blZWV1eTPROsW6OsOAADaBqfTqRkzZuiqq65Sv379mnycDh06KCMjQ/PmzVPv3r0VHR2tl156SSUlJerZs6erXVpamg4ePKijR482eLsHFwZGRgAAtkybNk2ffvppszy7sWbNGlmWpbi4OAUHB+tXv/qVbr75Zvn7u5elwMBAgshFgDACAPBo+vTp+v3vf6/33ntPXbt2Pe/jJSUl6Y9//KOOHz+u/fv3q7S0VCdOnFCPHj2aobdoa9pEGLEsS1VVVeJZWwBoWZZlafr06Vq/fr3effddde/evVmPHx4erssuu0xfffWVNm7cqHHjxjXr8dE2tIlnRo4dO6bIyEhVVlYqIiLC190BgIvGtGnTtG7dOr3xxhvq0KGDysvLJUmRkZEKDQ2VJGVlZSkuLk4FBQWSpLq6Ou3cudP154MHD6qsrEzt27d3PROyceNGWZalXr16affu3br//vuVnJysnJwcH5wlfK1NTO2tqqoijACAD/j5+dW7fdWqVbrtttskSSNGjFBiYqKef/55SdLevXvrHUEZPny4iouLJUmvvPKKZs+erQMHDqhz586aOHGi5s+fr8jISBOngVaOMAIAAHyqTTwzciFyOByaO3euunfvrtDQUCUlJWnevHluz8X4+fnV+3riiScaPO6yZcs0YMAARUREKCIiQhkZGXrrrbfc2uzZs0cTJkxQly5dFBERoRtvvFEVFRVubUpKSpSSkqLExEQ999xzzXvyAACcgTDiI4899piWLVump59+Wp999pkee+wxPf7441qyZImrzaFDh9xeK1eulJ+fnyZOnNjgcbt27aoFCxZoy5Yt+uijj3T11Vdr3Lhx2rFjhySpurpaI0eOlJ+fn9599129//77qqur0/XXX+/2vQ+TJ0/W3LlztW7dOhUUFGj//v3mLgYA4KLGbRof+f73v6/o6Gi3UYeJEycqNDRUa9eurXef8ePH69ixYyoqKvLqszp37qwnnnhCkydP1ttvv63Ro0frq6++cl3LyspKderUSW+//bYyMzMlSQkJCSouLtall16qESNGaPXq1erTp08TzxYAgIYxMuIjQ4YMUVFRkb744gtJ0scff6zNmzdr9OjR9bavqKjQH/7wB02ePNn2ZzgcDhUWFqq6uloZGRmSpNraWvn5+Sk4ONjVLiQkRP7+/m7LMOfl5al3796KjIzUlVdeSRABABjTJqb2XohmzZqlqqoqJScnKyAgQA6HQ/Pnz9ctt9xSb/vVq1erQ4cO+sEPfuDx2Nu3b1dGRob+/e9/q3379lq/fr0rTFx55ZUKDw/XzJkz9eijj8qyLM2aNUsOh0OHDh1yHWPy5Mm66aabVFdXp06dOjXPSQMAUA9GRnzklVde0Ysvvqh169Zp69atWr16tRYuXKjVq1fX237lypW65ZZbzvliqfr06tVLZWVl+t///V/dddddys7Ods3579Kli1599VX97ne/U/v27RUZGamvv/5a3/nOd85Zhjk8PJwgAgAwjmdGfCQ+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X1VVpZEjRyozM1PLly/X9u3bdfvtt6tjx4664447Gt131apVbsGgY8eOrj+Hh4dr+vTpGjBggMLDw7V582bdeeedCg8Pdx33scce07Jly7R69Wr17dtXH521/s5p1113nVatWuV6HxwcbPv8ALReflZjT0W2ElVVVYqMjFRlZaUiIiJ83R2P3pV0jY12BZJmGe4LLh4jRoxQv379FBgYqLVr16p///567733bO+/bNkyzZkzR+Xl5a4QM2vWLL3++uv6/PPPG9zPz89P69ev1/jx421/1g9+8AOFh4drzZo1kqTvf//7io6O1nPPPedqM3HiRIWGhmrt2rWSTo2MfP3113r99ddtfw7Qlg0fPlwJCQl64YUXfN0V47hNY4DddMfFR3NbvXq1goKC9P7772v58uUaPXq02rdv3+Dr9MJ6klRSUqJhw4a5jaaMGjVKu3bt0ldffdXo506bNk1RUVEaPHiwVq5c2ejMr23btumDDz7Q8OHDXduGDBmioqIiffHFF5LOXX/ntOLiYl166aXq1auX7rrrLv3zn//06voAaJ24TWMAX5QHX7n88svdnvN49tln9c033zTYvl27dq4/l5eXq3v37m4/j46Odv2sU6dO9R7j4Ycf1tVXX62wsDDXVwwcP37c7faKJHXt2lVHjhzRyZMn9eCDD7qtJjxr1ixVVVUpOTlZAQEBcpy1/o506hbND37wA3Xv3l179uzRAw88oNGjR6ukpEQBAQE2rg6A1oowYgBhBL6Smprq9j4uLs74Z575PNOgQYNUXV2tJ5544pww8uc//1nHjx/Xhx9+qFmzZqlnz566+eabJUmvvPKKXnzxRa1bt059+/ZV2Vnr70jSTTfd5DpW//79NWDAACUlJam4uFjXXGPnxijQ+lmWpZMnT7r9oiB5/wxYW0M9NIAwAl85+4sUvblNExMTo4qKCrf9T79v7DuPzpaenq4DBw64vtrgtO7du6t///6aMmWK7r33Xj344IOun91///2aNWuWbrrpJvXv31+33nqr7r33XhUUFDT4OT169FBUVJRrLR3gQvDss89q4MCBqqurc2375z//qW7duuntt9/2Yc/MYmTEAMIIWgtvbtNkZGRozpw5OnHihGv7pk2b1KtXrwZv0dSnrKxMnTp1anSmi9PpdAsrNTU1Xq+Bc+DAAf3zn/90raUDXAgyMjJ0xx13uD20umjRIh07dkyDBg3yYc/MIowYYDeM+BntBeDdbZof/ehHeuihhzR58mTNnDlTn376qX75y1+6rQmyfv16zZ492zW75ne/+50qKip05ZVXKiQkRJs2bdKjjz6q++67z7XP0qVL1a1bNyUnJ0uS/vSnP2nhwoVut3Guv/56zZ8/X926dVPfvn21bds2LVq0SLfffrukU18C+dBDD2nixImKiYnRnj179POf/1w9e/bkyxxxQenXr59++MMfav78+eratatqa2v1q1/9StOnT7+wv6bDagMqKystSVZlZaWvu2LL65ZlycbraV91EBek4cOHW/fcc895HePjjz+2/vM//9MKDg624uLirAULFrj9fNWqVdaZ/2y89dZbVkpKitW+fXsrPDzcGjhwoLV8+XLL4XC42vzqV7+y+vbta4WFhVkRERHWoEGDrF//+tdubaqqqqx77rnH6tatmxUSEmL16NHDmjNnjlVbW2tZlmXV1NRYI0eOtLp06WK1a9fOSkhIsKZMmWKVl5ef1/kCrdH27dstSdbll19u9evXzwoLC7MOHz7s624ZxTojBrwuyc6apr+WdJfZrgAA2qAbb7xRv/3tb+VwOJSbm6vHHnvM110yiscWDOCZEQDA+cjLy1Ntba0sy3K77Xmh4pkRAwgjAIDz0a9fP11zzTWKi4u7sJ8V+X9NqodLly5VYmKiQkJClJ6ertLS0kbbv/rqq0pOTlZISIj69++vN998s0mdbSuaEka++OILZWVlKTk5WSdPnjTRLQBAK/Dkk09qwIABevHFF+VwOBps984772j16tUt2DPf8TqMvPzyy8rNzVV+fr62bt2qgQMHatSoUTp8+HC97T/44APdfPPNmjx5srZt26bx48dr/Pjx+vTTT8+7862VN2HkdAjp3bu3ioqK9POf/1yBgQxYAcCFasKECUpMTNSPf/xj9enTx2MouRh4/QBrenq6rrjiCj399NOSTq0XEB8fr7vvvluzZp37tW+TJk1SdXW1fv/737u2XXnllUpJSdHy5cvr/Yza2lq3NQiqqqoUHx/fZh5gXSfpFk+NPvpI/fPytGPjRl1yySXKysrS2LFj+RZSALhIfP7553r22We1efNmdevWTXfddZdmzpwpP7+LcOEHb6be1NbWWgEBAdb69evdtmdlZVljx46td5/4+HjrqaeectuWl5dnDRgwoMHPyc/Pt3Tq++bcXm1lau8ay8bU3qioes+RFy9evHhdvK833njDZ7XLl7y6H3D06FE5HA7Xl2edFh0d3eBXjJeXl9fbvry8vMHPmT17tnJzc13vT4+MtBWWnUZ//rPSH3xQW197TeHh4crOztbNN998znLeAIAL01/+8hctW7ZMf/nLX5ScnKwZM2Zo7Nixvu6WT7TKhxOCg4Pb9O0KW8+MJCfrZ4WFGrp/vxYsWKBly5Zp7dq1ys/P19133226iwAAH/n888911113qbi4WCkpKXr99dc1duzYi/P2zP/z6gHWqKgoBQQE1PtlWg19kVZDX77lzRdvtTXePMAaHx+vpUuXavfu3Zo0aZKef/55ZtMAwAVs06ZNqq2t1euvv66tW7dq3LhxF3UQkbwMI0FBQUpNTVVRUZFrm9PpVFFRkTIyMurdJyMjw629dOovoqH2F4KmTO09HUq2bNnCbBoAuIDdfffd+uCDDwghZ/C66uXm5io7O1tpaWkaPHiwFi9erOrqauXk5EiSsrKyFBcX5/rq73vuuUfDhw/Xk08+qTFjxqiwsFAfffSRfvOb3zTvmbQimTq1JLzzrJd11vvBPuofAACtiddhZNKkSTpy5Ijy8vJUXl6ulJQUbdiwwfWQ6r59+9y+CnzIkCFat26dfvGLX+iBBx7Q5Zdfrtdff139+vVrvrNoZRL+/wUAADzji/IAAIBP8fUoAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAADApwgjAADAp9rEl6CcXpetqqrKxz0BAADe6tChQ6Pfw9MmwsixY8cknfoyOQAA0LZ4WkG9TSwH73Q69Y9//MNjsmrNqqqqFB8fr/3797OkvQ1cL+9wvbzHNfMO18s7XC93F8TIiL+/v7p27errbjSLiIgI/sP0AtfLO1wv73HNvMP18g7Xyx4eYAUAAD5FGAEAAD5FGGkhwcHBys/PV3BwsK+70iZwvbzD9fIe18w7XC/vcL280yYeYAUAABcuRkYAAIBPEUYAAIBPEUYAAIBPEUYAAIBPEUYAAIBPEUaaydKlS5WYmKiQkBClp6ertLS00favvvqqkpOTFRISov79++vNN99soZ62Ht5csx07dmjixIlKTEyUn5+fFi9e3HIdbSW8uV4rVqzQ0KFD1alTJ3Xq1EmZmZke/5u8EHlzzV577TWlpaWpY8eOCg8PV0pKitasWdOCvfU9b/8dO62wsFB+fn4aP3682Q62Mt5cr+eff15+fn5ur5CQkBbsbStn4bwVFhZaQUFB1sqVK60dO3ZYU6ZMsTp27GhVVFTU2/7999+3AgICrMcff9zauXOn9Ytf/MJq166dtX379hbuue94e81KS0ut++67z3rppZesmJgY66mnnmrZDvuYt9frRz/6kbV06VJr27Zt1meffWbddtttVmRkpHXgwIEW7rnveHvN3nvvPeu1116zdu7cae3evdtavHixFRAQYG3YsKGFe+4b3l6v0/72t79ZcXFx1tChQ61x48a1TGdbAW+v16pVq6yIiAjr0KFDrld5eXkL97r1Iow0g8GDB1vTpk1zvXc4HFZsbKxVUFBQb/sbb7zRGjNmjNu29PR068477zTaz9bE22t2poSEhIsujJzP9bIsyzp58qTVoUMHa/Xq1aa62Oqc7zWzLMsaNGiQ9Ytf/MJE91qdplyvkydPWkOGDLGeffZZKzs7+6IKI95er1WrVlmRkZEt1Lu2h9s056murk5btmxRZmama5u/v78yMzNVUlJS7z4lJSVu7SVp1KhRDba/0DTlml3MmuN61dTU6MSJE+rcubOpbrYq53vNLMtSUVGRdu3apWHDhpnsaqvQ1Ov18MMP69JLL9XkyZNboputRlOv1/Hjx5WQkKD4+HiNGzdOO3bsaInutgmEkfN09OhRORwORUdHu22Pjo5WeXl5vfuUl5d71f5C05RrdjFrjus1c+ZMxcbGnhOCL1RNvWaVlZVq3769goKCNGbMGC1ZskTXXnut6e76XFOu1+bNm/Xcc89pxYoVLdHFVqUp16tXr15auXKl3njjDa1du1ZOp1NDhgzRgQMHWqLLrV6grzsAwKwFCxaosLBQxcXFPDDnQYcOHVRWVqbjx4+rqKhIubm56tGjh0aMGOHrrrUqx44d06233qoVK1YoKirK191pEzIyMpSRkeF6P2TIEPXu3VvPPPOM5s2b58OetQ6EkfMUFRWlgIAAVVRUuG2vqKhQTExMvfvExMR41f5C05RrdjE7n+u1cOFCLViwQO+8844GDBhgsputSlOvmb+/v3r27ClJSklJ0WeffaaCgoILPox4e7327NmjvXv36vrrr3dtczqdkqTAwEDt2rVLSUlJZjvtQ83xb1i7du00aNAg7d6920QX2xxu05ynoKAgpaamqqioyLXN6XSqqKjILQWfKSMjw629JG3atKnB9heaplyzi1lTr9fjjz+uefPmacOGDUpLS2uJrrYazfXfmNPpVG1trYkutireXq/k5GRt375dZWVlrtfYsWP13e9+V2VlZYqPj2/J7re45vjvy+FwaPv27brssstMdbNt8fUTtBeCwsJCKzg42Hr++eetnTt3WnfccYfVsWNH17StW2+91Zo1a5ar/fvvv28FBgZaCxcutD777DMrPz//opza6801q62ttbZt22Zt27bNuuyyy6z77rvP2rZtm/Xll1/66hRalLfXa8GCBVZQUJD13//9325TCY8dO+arU2hx3l6zRx991Hr77betPXv2WDt37rQWLlxoBQYGWitWrPDVKbQob6/X2S622TTeXq+HHnrI2rhxo7Vnzx5ry5Yt1k033WSFhIRYO3bs8NUptCqEkWayZMkSq1u3blZQUJA1ePBg68MPP3T9bPjw4VZ2drZb+1deecX6j//4DysoKMjq27ev9Yc//KGFe+x73lyzv/3tb5akc17Dhw9v+Y77iDfXKyEhod7rlZ+f3/Id9yFvrtmcOXOsnj17WiEhIVanTp2sjIwMq7Cw0Ae99h1v/x0708UWRizLu+s1Y8YMV9vo6Gjre9/7nrV161Yf9Lp18rMsy/LVqAwAAADPjAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ8ijAAAAJ/6P/8wShhl+np9AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -371,10 +372,74 @@ ], "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", + " draw_arm_side_view(x,y,z, details=details)\n", "\n", - "draw_arm(0.5,0.5,0.3, details=True)" + "draw_arm(0.5,0.2,0.3, details=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'elbow': (0.06441407671759522, -0.08297834710053949, 0.42498873000714044),\n", + " 'wrist': (0.3809831975755794, 0.14814654552767514, 0.44000000000002354),\n", + " 'wrist2': (0.4617483203289997, 0.20711259462904327, 0.44000000000002354),\n", + " 'tool': (0.4617483203289997, 0.20711259462904327, 0.5800000000000236)}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def joint_positions(x, y, z):\n", + " # Get joint and position information\n", + " angles = get_joints_from_xyz_abs(x, y, z)\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", + "\n", + " # Elbow\n", + " x1, y1 = polar_to_cartesian(l1*math.cos(angles[1]), line_angle)\n", + " x1, y1 = cx+x1, cy+y1\n", + " z1 = l1*math.sin(angles[1])\n", + "\n", + " # Wrist\n", + " x2, y2 = polar_to_cartesian(l2*math.cos(angles[1]-angles[2]), line_angle)\n", + " x2 += x1\n", + " y2 += y1\n", + " z2 = z1 + l2*math.sin(angles[1]-angles[2])\n", + "\n", + " # Wrist 2\n", + " x3, y3 = polar_to_cartesian(l3*math.cos(angles[1]-angles[2]-angles[3]), line_angle)\n", + " x3 += x2\n", + " y3 += y2\n", + " z3 = z2 + l3*math.sin(angles[1]-angles[2]-angles[3]) \n", + "\n", + " # Tool\n", + " x4, y4 = polar_to_cartesian(offset_z*math.cos(angles[1]-angles[2]-angles[3]-angles[4]), line_angle)\n", + " x4 += x3\n", + " y4 += y3\n", + " z4 = z3 + offset_z*math.sin(angles[1]-angles[2]-angles[3]-angles[4])\n", + "\n", + "\n", + " positions = {\n", + " 'elbow': (x1, y1, z1),\n", + " 'wrist': (x2, y2, z2),\n", + " 'wrist2': (x3, y3, z3),\n", + " 'tool': (x4, y4, z4)\n", + " }\n", + "\n", + " return positions\n", + "\n", + "joint_positions(0.5,0.2,0.3)" ] } ], diff --git a/ur5_control.py b/ur5_control.py index 269fb95..5622e79 100755 --- a/ur5_control.py +++ b/ur5_control.py @@ -6,6 +6,7 @@ import numpy as np import time import os import logging +import yaml from urx.robotiq_two_finger_gripper import Robotiq_Two_Finger_Gripper import sys from util import fprint @@ -191,11 +192,6 @@ def move_to_polar(start_pos, end_pos): return rx_intermediate -def degtorad(angle): - return angle/180.0 * math.pi -def radtodeg(angle): - return angle*180.0 / math.pi - def move_to_home(): global rob @@ -222,8 +218,6 @@ def normalize_degree(theta): # Return angle return normalized_theta - - def get_joints_from_xyz_rel(x, y, z, rx=0, ry=-math.pi/2, rz=0, initial_guess = (math.pi/2, math.pi/2, 0), l3offset=0): # Get limbs and offsets @@ -276,37 +270,61 @@ def get_joints_from_xyz_rel(x, y, z, rx=0, ry=-math.pi/2, rz=0, initial_guess = def get_joints_from_xyz_abs(x, y, z, rx=0, ry=-math.pi/2, rz=math.pi/2, l3offset=0): joints = get_joints_from_xyz_rel(x, y, z, rx, ry, rz, l3offset=l3offset) + # Return current positions if coordinates don't make sense + if z<0: + return rob.getj() + # Joint offsets # Base, Shoulder, Elbow, Wrist inverse = [1, -1, 1, 1, 1, 1] offsets = [-math.pi/2, 0, 0, -math.pi/2, 0, 0] - if radtodeg(joints[1]) > 137: + + if math.degrees(joints[1]) > 137: print("CRASH! Shoulder at", joints[1] * 180/math.pi) #else: #print("Shoulder at", joints[1] * 180/math.pi) + # Return adjusted joint positions return [o+j*i for j, o, i in zip(joints, offsets, inverse)] -# gripper angle: from vertical -# gripper length: from joint to start of grip -# to flip, you can use flip=True or make gripper angle negative +def move_arc(x, y, z, rx=0, ry=-math.pi/2, rz=math.pi/2): + + global rob + start_joints = rob.getj() + end_joint = get_joints_from_xyz_abs(x, y, z, rx, ry, rz) + + n_points = 50 + intermediate_joints = [] + for i in range(0, 6): + intermediate_joints.append(np.linspace(start_joints[i], end_joint[i], n_points)) + + joints = [joint_position for joint_position in zip(*intermediate_joints)] + + rob.movejs(joints, acc=2, vel=2, radius=0.1) + def offset_gripper_angle(x, y, z, gripperangle=35, gripperlength=0.20+0.018, flip=False): + # gripper angle: from vertical + # gripper length: from joint to start of grip + # to flip, you can use flip=True or make gripper angle negative + + # Determine tool rotation depending on gripper angle if gripperangle < 0: rz = - math.pi / 2 else: rz = math.pi / 2 if flip: - gripperangle = -degtorad(gripperangle) + gripperangle = -math.radians(gripperangle) grippery = gripperlength - math.cos(gripperangle) * gripperlength grippery += math.sin(gripperangle) * limb3 gripperx = math.sin(gripperangle) * gripperlength + limb3 * 2 gripperx -= (1-math.cos(gripperangle)) * limb3 rz = - math.pi / 2 # flip the whole wrist - return get_joints_from_xyz_abs(x, y, z-grippery, rx=gripperangle + degtorad(180), l3offset=-gripperx, ry=math.pi/2, rz=rz) + return get_joints_from_xyz_abs(x, y, z-grippery, rx=gripperangle + math.radians(180), l3offset=-gripperx, ry=math.pi/2, rz=-rz) + else: - gripperangle = degtorad(gripperangle) + gripperangle = math.radians(gripperangle) grippery = gripperlength - math.cos(gripperangle) * gripperlength grippery -= math.sin(gripperangle) * limb3 gripperx = math.sin(gripperangle) * gripperlength @@ -314,15 +332,59 @@ def offset_gripper_angle(x, y, z, gripperangle=35, gripperlength=0.20+0.018, fli return get_joints_from_xyz_abs(x, y, z-grippery, rx=gripperangle, l3offset=-gripperx, rz=rz) - def goto_holder_index(idx, z=0.05, gripperangle=35, flip=False): joint = config["position_map"][idx] print("Going to cable holder index", joint["index"], "at position", joint["pos"]) - angles = offset_gripper_angle(joint["pos"][1]/1000, joint["pos"][0]/1000, z, gripperangle=gripperangle, flip=flip) + + safe_move(joint["pos"][1]/1000, joint["pos"][0]/1000, z) + #angles = offset_gripper_angle(joint["pos"][1]/1000, joint["pos"][0]/1000, z, gripperangle=gripperangle, flip=flip) #rob.movej(angles, acc=2, vel=2) - return angles + #return angles #angles = get_joints_from_xyz_abs(joint["pos"][1]/1000, joint["pos"][0]/1000, 0.05, ) +def is_flipped(): + global rob + wrist2 = rob.getj()[4] + + if wrist2>0: + return True + else: + return False + +def flip(): + global rob + + # A list of safe positions to flip + safe_positions = [(-0.205, -0.108, 0.3), + (0.205, -0.108, 0.3)] + + # Find the closest safe position + curr_pos = rob.getl()[:3] + def dist_from_robot(pos): + x, y, z = pos + rx, ry, rz = curr_pos + return math.sqrt((rx-x)**2+(ry-y)**2+(rz-z)**2) + + pos_dist_pairs = zip(safe_positions, [dist_from_robot(pos) for pos in safe_positions]) + safe_pos = min(pos_dist_pairs, key=lambda x:x[1])[0] + + # Flip at safe position + rob.movej(offset_gripper_angle(*safe_pos, flip=is_flipped()), vel=2, acc=2) # Move to safe position + rob.movej(offset_gripper_angle(*safe_pos, flip=(not is_flipped())), vel=2, acc=2) # Flip gripper + +def safe_move(x, y, z): + flip_radius = 0.17 # Min radius on which to flip + r = math.sqrt(x**2 + y**2) # Get position radius + + # Flip gripper if needed + if (r <= flip_radius and is_flipped()) or (r > flip_radius and not is_flipped()): + flip() + + global rob + rob.movej(offset_gripper_angle(x, y, z, flip=is_flipped()), vel=2, acc=2) + + + if __name__ == "__main__": #rob.movej((0, 0, 0, 0, 0, 0), 0.1, 0.2) @@ -356,59 +418,55 @@ if __name__ == "__main__": 0.0510] curr_pos = rob.getl() - # up/down, - # tool rotation - # tool angle (shouldn't need) - # rob.set_pos(p1[0:3], acc=0.5, vel=0.5) - - # set_pos_abs(*home_pose) - - # angles = get_joints_from_xyz_abs(-0.2, 0, 0) - # rob.movej(angles, acc=2, vel=2) - # angles = get_joints_from_xyz_abs(-0.2, -0.2, 0) - # rob.movej(angles, acc=2, vel=2) - # angles = get_joints_from_xyz_abs(0, -0.6, 0) - # rob.movej(angles, acc=2, vel=2) - # angles = get_joints_from_xyz_abs(0, -0.5, 0) - # rob.movej(angles, acc=2, vel=2) - # angles = get_joints_from_xyz_abs(0, -0.4, 0) - # rob.movej(angles, acc=2, vel=2) - # angles = get_joints_from_xyz_abs(0, -0.3, 0) - # rob.movej(angles, acc=2, vel=2) - # angles = get_joints_from_xyz_abs(0, -0.2, 0) - # rob.movej(angles, acc=2, vel=2) - # angles = get_joints_from_xyz_abs(0, -0.13, 0) - # rob.movej(angles, acc=2, vel=2) config = None joints = [] - for i in np.linspace(-0.2, -0.7, 50): + for i in np.linspace(-0.2, -0.7, 10): joints.append(get_joints_from_xyz_abs(i, 0, 0)) - #rob.movejs(joints, acc=2, vel=2) - import yaml + # rob.movejs(joints, acc=2, vel=2, radius=0.1) + with open('config.yml', 'r') as fileread: #global config config = yaml.safe_load(fileread) + # move_arc(0, 0.3, 0.1) + # move_arc(0, -0.3, 0.3) + + + # for i in range(20): + # goto_holder_index(i, 0.1) + + flip() + flip() + #rob.movej(goto_holder_index(24, 0.2, 0), acc=2, vel=2) #joints = [] #for i in np.linspace(0, 340, 340): # joints.append(goto_holder_index(24, 0.5, i)) #rob.movejs(joints, acc=1, vel=3) - angle = 30 - rob.movej(goto_holder_index(26, 0.1, angle), acc=2, vel=2) - #rob.movej(goto_holder_index(32, 0.2, angle), acc=2, vel=2) - #rob.movej(goto_holder_index(38, 0.2, angle), acc=2, vel=2) - rob.movej(goto_holder_index(26, 0.1, angle, flip=True), acc=2, vel=2) + # angle = 30 + # rob.movej(goto_holder_index(26, 0.1, angle), acc=2, vel=2) + # # rob.movej(goto_holder_index(32, 0.2, angle), acc=2, vel=2) + # rob.movej(goto_holder_index(38, 0.2, angle), acc=2, vel=2) + # rob.movej(goto_holder_index(26, 0.1, angle, flip=True), acc=2, vel=2) + # rob.movej(offset_gripper_angle(-0.3, -0.3, 0.4, flip=True), acc=2, vel=2) - rob.movej(goto_holder_index(25, 0.2, angle, flip=True), acc=2, vel=2) - rob.movej(goto_holder_index(24, 0.0, angle, flip=True), acc=2, vel=2) - time.sleep(1) - rob.movej(goto_holder_index(25, 0.1, angle, flip=True), acc=2, vel=2) - rob.movej(goto_holder_index(49, 0.1, angle), acc=2, vel=2) - rob.movej(goto_holder_index(49, 0.1, angle, flip=True), acc=2, vel=2) + # safe_move(0.1, 0.1, 0.1) + # safe_move(-0.3, -0.3, 0.1) + + # flip() + # flip() + + + + # rob.movej(goto_holder_index(25, 0.2, angle, flip=True), acc=2, vel=2) + # rob.movej(goto_holder_index(24, 0.0, angle, flip=True), acc=2, vel=2) + # time.sleep(1) + # rob.movej(goto_holder_index(25, 0.1, angle, flip=True), acc=2, vel=2) + # rob.movej(goto_holder_index(49, 0.1, angle), acc=2, vel=2) + # rob.movej(goto_holder_index(49, 0.1, angle, flip=True), acc=2, vel=2) # rob.movej(goto_holder_index(50, 0.1, angle, flip=True), acc=2, vel=2) # rob.movej(goto_holder_index(51, 0.1, angle, flip=True), acc=2, vel=2) # rob.movej(goto_holder_index(52, 0.1, angle, flip=True), acc=2, vel=2)