diff --git a/notebooks/MPC_racecar_tracking.ipynb b/notebooks/MPC_racecar_tracking.ipynb index 4ea054e..ff048b1 100644 --- a/notebooks/MPC_racecar_tracking.ipynb +++ b/notebooks/MPC_racecar_tracking.ipynb @@ -292,8 +292,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 3.38 ms, sys: 0 ns, total: 3.38 ms\n", - "Wall time: 2.83 ms\n" + "CPU times: user 3.25 ms, sys: 0 ns, total: 3.25 ms\n", + "Wall time: 2.87 ms\n" ] } ], @@ -371,8 +371,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 2.46 ms, sys: 0 ns, total: 2.46 ms\n", - "Wall time: 1.76 ms\n" + "CPU times: user 2.37 ms, sys: 684 µs, total: 3.05 ms\n", + "Wall time: 2.18 ms\n" ] } ], @@ -673,18 +673,18 @@ " warm start: on, polish: on, time_limit: off\n", "\n", "iter objective pri res dua res rho time\n", - " 1 0.0000e+00 4.27e+00 4.67e+02 1.00e-01 3.66e-04s\n", - " 175 1.6965e+02 2.63e-05 3.49e-05 7.14e+00 1.99e-03s\n", + " 1 0.0000e+00 4.27e+00 4.67e+02 1.00e-01 3.80e-04s\n", + " 175 1.6965e+02 2.63e-05 3.49e-05 7.14e+00 1.87e-03s\n", "\n", "status: solved\n", "solution polish: unsuccessful\n", "number of iterations: 175\n", "optimal objective: 169.6454\n", - "run time: 2.23e-03s\n", + "run time: 2.13e-03s\n", "optimal rho estimate: 6.34e+00\n", "\n", - "CPU times: user 136 ms, sys: 651 µs, total: 136 ms\n", - "Wall time: 131 ms\n" + "CPU times: user 116 ms, sys: 3.93 ms, total: 120 ms\n", + "Wall time: 123 ms\n" ] } ], @@ -853,7 +853,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "CVXPY Optimization Time: Avrg: 0.1620s Max: 0.2313s Min: 0.1459s\n" + "CVXPY Optimization Time: Avrg: 0.1636s Max: 0.2422s Min: 0.1457s\n" ] } ], @@ -1059,7 +1059,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "CVXPY Optimization Time: Avrg: 0.5893s Max: 0.8228s Min: 0.2923s\n" + "CVXPY Optimization Time: Avrg: 0.6024s Max: 0.8522s Min: 0.2994s\n" ] } ], @@ -1251,7 +1251,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Use Dynamics w.r.t Robot Frame\n", + "## V2 Use Dynamics w.r.t Robot Frame\n", "\n", "explanation here...\n", "\n", @@ -1262,7 +1262,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ @@ -1283,8 +1283,9 @@ " fx=interp1d(np.linspace(0,1,2),start_xp[idx:idx+2],kind=1)\n", " fy=interp1d(np.linspace(0,1,2),start_yp[idx:idx+2],kind=1)\n", " \n", - " final_xp=np.append(final_xp,fx(interp_range))\n", - " final_yp=np.append(final_yp,fy(interp_range))\n", + " # watch out to duplicate points!\n", + " final_xp=np.append(final_xp,fx(interp_range)[1:])\n", + " final_yp=np.append(final_yp,fy(interp_range)[1:])\n", " \n", " dx = np.append(0, np.diff(final_xp))\n", " dy = np.append(0, np.diff(final_yp))\n", @@ -1392,7 +1393,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "CVXPY Optimization Time: Avrg: 0.1573s Max: 0.1875s Min: 0.1463s\n" + "CVXPY Optimization Time: Avrg: 0.1593s Max: 0.1842s Min: 0.1461s\n" ] } ], @@ -1564,6 +1565,120 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## V3 Add track constraints\n", + "inspried from -> https://arxiv.org/pdf/1711.07300.pdf\n", + "\n", + "explanation here...\n", + "\n", + "benefits:\n", + "* add a soft form of obstacle aoidance" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def generate_track_bounds(track):\n", + " \"\"\"\n", + " in world frame\n", + " \"\"\"\n", + " width = 0.5\n", + " bounds_low=np.zeros((2, track.shape[1]))\n", + " bounds_upp=np.zeros((2, track.shape[1]))\n", + " \n", + " for idx in range(track.shape[1]):\n", + " x = track[0,idx]\n", + " y = track [1,idx]\n", + " th = track [2,idx]\n", + " \n", + " \"\"\"\n", + " trasform the points\n", + " \"\"\"\n", + " bounds_upp[0, idx] = 0 * np.cos(th) - width * np.sin(th) + x #X\n", + " bounds_upp[1, idx] = 0 * np.sin(th) + width * np.cos(th) + y #Y\n", + " \n", + " bounds_low[0, idx] = 0 * np.cos(th) - (-width) * np.sin(th) + x #X\n", + " bounds_low[1, idx] = 0 * np.sin(th) + (-width) * np.cos(th) + y #Y\n", + " \n", + " return bounds_low, bounds_upp\n", + "\n", + "track = compute_path_from_wp([0,3,4,6,10,12,14,6,1,0],\n", + " [0,0,2,4,3,3,-2,-6,-2,-2],0.05)\n", + "\n", + "lower, upper = generate_track_bounds(track)\n", + "\n", + "plt.figure(figsize=(15,10))\n", + "\n", + "plt.plot(track[0,:],track[1,:],\"b+\")\n", + "plt.plot(lower[0,:],lower[1,:],\"g.\")\n", + "plt.plot(upper[0,:],upper[1,:],\"r.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "the points can be used to generate the **halfplane constrains** for each reference point.\n", + "the issues (outliers points) should be gone after we are in vehicle frame...\n", + "\n", + "the halfplane constrains are defined given the line equation:\n", + "\n", + "**lower halfplane**\n", + "$$ a1x_1 + b1x_2 = c1 \\rightarrow a1x_1 + b1x_2 \\leq c1$$\n", + "\n", + "**upper halfplane**\n", + "$$ a2x_1 - b2x_2 = c2 \\rightarrow a2x_1 + b2x_2 \\leq c2$$\n", + "\n", + "we want to combine this in matrix form:\n", + "\n", + "$$\n", + "\\begin{bmatrix}\n", + "x_1 \\\\\n", + "x_2 \n", + "\\end{bmatrix}\n", + "\\begin{bmatrix}\n", + "a_1 & a_2\\\\\n", + "b_1 & b_2\n", + "\\end{bmatrix}\n", + "\\leq\n", + "\\begin{bmatrix}\n", + "c_1 \\\\\n", + "c_2 \n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "becouse our track points have known heading the coefficients can be computed from:\n", + "\n", + "$$ y - y' = \\frac{sin(\\theta)}{cos(\\theta)}(x - x') $$" + ] + }, { "cell_type": "code", "execution_count": null,