mirror of
https://github.com/pim-n/road-gen.git
synced 2026-02-03 01:13:09 +01:00
204 lines
69 KiB
Plaintext
204 lines
69 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "59981fce",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"from road_gen.integrator.integrator import integrate_road\n",
|
|
"from road_gen.plotting.plot_road import plot_road"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a8d303ad",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Describing a road as a planar curve"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "08dda386",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let $r(s)$ be a [planar curve](https://en.wikipedia.org/wiki/Plane_curve) describing a road in the xy-plane as a function of *arc length* $s$ (distance traveled along the road), where $s \\in [0, L]$.\n",
|
|
"Suppose a road of total length $L$ in the xy-plane. Let the distance traveled along the road be denoted $s$ where $s \\in [0, L]$.\n",
|
|
"\n",
|
|
"Let $\\kappa(s)$ be the curvature of $r(s)$\n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\kappa(s) = \\frac{d\\theta}{ds}\n",
|
|
"$$\n",
|
|
"\n",
|
|
"where $\\theta$ is the heading (direction) of the road. Basically, $\\kappa(s)$ tells us at arc length $s$ whether the path is about to turn left or right, with larger magnitude of $\\kappa(s)$ indicating a sharper change, and $\\kappa(s) = 0$ indicating no change. A path in the xy-plane can now be fully defined by $\\kappa(s)$ and $L$, as the heading angle is simply\n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\theta(s) = \\int_0^s \\kappa(u)~du\n",
|
|
"$$\n",
|
|
"\n",
|
|
"and\n",
|
|
"\n",
|
|
"$$\n",
|
|
"x(s) = \\int_0^s \\cos(\\theta(u))~du \\; , \\; y(s) = \\int_0^s \\sin(\\theta(u))~du\n",
|
|
"$$\n",
|
|
"\n",
|
|
"#### Discrete form\n",
|
|
"\n",
|
|
"In practice, if we are going to generate a road in computer code we need to discretize this above formulation. Suppose a step size $\\Delta s$, then at the $i$-th waypoint we have traveled a distance $s_i = i \\Delta s$ and we have $N = L/\\Delta s$ waypoints in total. At waypoint $i$, with known curvature $\\kappa_i$, the next heading is\n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\theta_{i+1} = \\theta_i + \\kappa_i \\Delta s\n",
|
|
"$$\n",
|
|
"\n",
|
|
"which by recursion means that\n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\theta_{i+1} = \\sum_{j=0}^i \\theta_j + \\kappa_j \\Delta s\n",
|
|
"$$\n",
|
|
"\n",
|
|
"and likewise\n",
|
|
"\n",
|
|
"$$\n",
|
|
"x_{i+1} = \\sum_{j=0}^i x_j \\cos(\\theta_j) \\Delta s \\; , \\; y_{i+1} = \\sum_{j=0}^i y_j \\sin(\\theta_j) \\Delta s.\n",
|
|
"$$\n",
|
|
"\n",
|
|
"This shows that with starting conditions $(x_0, y_0, \\theta_0)$ and discrete curvature field $\\{\\kappa_0, \\kappa_1 ... \\kappa_{N-1}\\}$ we can construct a path of any arbitrary length $L$ with its shape entirely determined by the curvature field."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "7a22a5ef",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Visualizing curvature effect on final road composition"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "26135d05",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Straight road\n",
|
|
"A straight road can be defined by using curvature $\\kappa_i = 0$ at every step $i$; this would produce a straight road of length $L$ in the direction of the intitial heading $\\theta_0$."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "20f6ccb4",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAL01JREFUeJzt3Xtc1XWex/H3AeQiysELggheoosSJiaBaK2VTKTWyoilriU6blclTbOwvHQnK8u8pGtbmqUPzUrHHLNFNNOVFCUrvGWTF9IBNBVUEgl++0fj2U4iHhI48p3X8/E4j12+5/s75/OTx2PmNb9zwWZZliUAAADUex7uHgAAAAA1g7ADAAAwBGEHAABgCMIOAADAEIQdAACAIQg7AAAAQxB2AAAAhiDsAAAADEHYAQAAGIKwA4AqzJ8/XzabTfv373f3KABwUYQdgMvGuYg6d/Py8lKrVq00dOhQHTp0yN3jwQUlJSV6+umn9fnnn7t7FOBfkpe7BwCA33v22WfVrl07nTlzRl9++aXmz5+vjRs3Kjc3V76+vu4eD1UoKSnRM888I0m6+eab3TsM8C+IsANw2enVq5diYmIkSf/5n/+p5s2ba8qUKVqxYoXuvvtuN08HAJcvXooFcNm76aabJEl///vfndbXrl2rm266Sf7+/goMDFTfvn21a9cupz0HDhzQww8/rGuuuUZ+fn5q1qyZ7rrrrkrfM7djxw7deuut8vPzU1hYmJ5//nlVVFS4NGN+fr6GDRumsLAw+fj4qGXLlurbt+95z/Ppp586Zm7cuLH69OmjHTt2nPd4S5cuVWRkpHx9fRUVFaVly5Zp6NChatu2rWPP/v37ZbPZ9Oqrr2rWrFm64oor1LBhQ912223Ky8uTZVl67rnnFBYWJj8/P/Xt21fHjh0777lcmWno0KFq1KiRDh06pKSkJDVq1EhBQUF67LHHVF5e7pgnKChIkvTMM884XlJ/+umnXfo3BHDpuGIH4LJ3Lo6aNGniWFuzZo169eqlK664Qk8//bR+/vlnzZgxQ927d1dOTo4jgLKzs7Vp0yYNHDhQYWFh2r9/v2bPnq2bb75ZO3fuVMOGDSX9Gma33HKLfvnlF6Wlpcnf319z586Vn5+fSzMmJydrx44dSk1NVdu2bVVYWKiMjAwdPHjQMct7772nlJQUJSYmasqUKSopKdHs2bN144036quvvnLs+9vf/qYBAwaoY8eOSk9P1/HjxzV8+HC1atWq0udeuHChzp49q9TUVB07dkwvv/yy7r77bt166636/PPP9cQTT+j777/XjBkz9Nhjj+mdd95xHOvqTJJUXl6uxMRExcXF6dVXX9WaNWs0depURURE6KGHHlJQUJBmz56thx56SH/+85/Vr18/SdJ1113n0r8hgBpgAcBlYt68eZYka82aNdaRI0esvLw868MPP7SCgoIsHx8fKy8vz7E3OjraatGihfXTTz851r7++mvLw8PDGjJkiGOtpKTkvOfJysqyJFkLFixwrI0ePdqSZG3evNmxVlhYaNntdkuStW/fvgvOffz4cUuS9corr1xwz8mTJ63AwEDrvvvuc1rPz8+37Ha703rHjh2tsLAw6+TJk461zz//3JJktWnTxrG2b98+S5IVFBRknThxwrE+fvx4S5LVqVMnq6yszLE+aNAgy9vb2zpz5ky1Z0pJSbEkWc8++6zT3s6dO1tdunRx/HzkyBFLkjV58uQL/lsAqD28FAvgspOQkKCgoCCFh4erf//+8vf314oVKxQWFiZJ+sc//qHt27dr6NChatq0qeO46667Tn/605+0atUqx9pvr7iVlZXpp59+0pVXXqnAwEDl5OQ47lu1apW6du2q2NhYx1pQUJAGDx580Xn9/Pzk7e2tzz//XMePH690T0ZGhk6cOKFBgwbp6NGjjpunp6fi4uK0bt06SdLhw4f17bffasiQIWrUqJHj+B49eqhjx46VPvZdd90lu93u+DkuLk6SdM8998jLy8tp/ezZs45PGLs60289+OCDTj/fdNNN+uGHHy76bwSgbvBSLIDLzqxZs3T11VerqKhI77zzjr744gv5+Pg47j9w4IAk6Zprrjnv2A4dOuizzz7T6dOn5e/vr59//lnp6emaN2+eDh06JMuyHHuLioqcHvNcEP1WZc/xez4+PpoyZYrGjh2r4OBgde3aVXfccYeGDBmikJAQSdLevXslSbfeemuljxEQEOB0bldeeeV5e6688kqnGD2ndevWTj+fi7zw8PBK18/Fp6sznePr6+t4D905TZo0uWDMAqh7hB2Ay05sbKzjU7FJSUm68cYb9R//8R/as2eP01UsV6SmpmrevHkaPXq04uPjZbfbZbPZNHDgQJc/GOGK0aNH684779Ty5cv12WefaeLEiUpPT9fatWvVuXNnx3O99957jtj7rd9eWasuT0/Paq2fi9vqznShxwNw+SDsAFzWPD09lZ6erltuuUUzZ85UWlqa2rRpI0nas2fPeft3796t5s2by9/fX5L04YcfKiUlRVOnTnXsOXPmjE6cOOF0XJs2bRxXsH6rsue4kIiICI0dO1Zjx47V3r17FR0dralTp+r9999XRESEJKlFixZKSEi44GOcO7fvv//+vPsqW7sUrs5UHTabrUYeB8Afw3vsAFz2br75ZsXGxmratGk6c+aMWrZsqejoaL377rtOgZabm6v/+Z//Ue/evR1rnp6eTi+/StKMGTMcX9FxTu/evfXll19qy5YtjrUjR45o4cKFF52vpKREZ86ccVqLiIhQ48aNVVpaKklKTExUQECAXnzxRZWVlZ33GEeOHJEkhYaGKioqSgsWLNCpU6cc969fv17ffvvtRWepDldnqo5znzL+fTgDqBtcsQNQL4wbN0533XWX5s+frwcffFCvvPKKevXqpfj4eA0fPtzxdSd2u93pe9PuuOMOvffee7Lb7YqMjFRWVpbWrFmjZs2aOT3+448/rvfee0+33367Ro0a5fi6kzZt2uibb76pcrbvvvtOPXv21N13363IyEh5eXlp2bJlKigo0MCBAyX9+n612bNn695779X111+vgQMHKigoSAcPHtTf/vY3de/eXTNnzpQkvfjii+rbt6+6d++uYcOG6fjx45o5c6aioqKcYu9SVWcmV/n5+SkyMlJLlizR1VdfraZNmyoqKkpRUVE1NjeAKrj5U7kA4HDu606ys7PPu6+8vNyKiIiwIiIirF9++cWyLMtas2aN1b17d8vPz88KCAiw7rzzTmvnzp1Oxx0/ftwaNmyY1bx5c6tRo0ZWYmKitXv3bqtNmzZWSkqK095vvvnG6tGjh+Xr62u1atXKeu6556y33377ol93cvToUWvEiBFW+/btLX9/f8tut1txcXHWBx98cN7edevWWYmJiZbdbrd8fX2tiIgIa+jQodbWrVud9i1evNhq37695ePjY0VFRVkrVqywkpOTrfbt2zv2nPu6k99/zcq6dessSdbSpUtd+vd1ZaaUlBTL39//vPOZPHmy9fv/Ktm0aZPVpUsXy9vbm68+AeqYzbJ+9xoFAOCyFB0draCgIGVkZLh7FACXKd5jBwCXmbKyMv3y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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"curvature = np.zeros(10)\n",
|
|
"x, y = integrate_road(curvature)\n",
|
|
"plot_road(x, y)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ad3897f0",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Instant turn\n",
|
|
"\n",
|
|
"We could add a turn by setting $\\kappa \\neq 0$ somewhere along the curvature."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "7a1aceb1",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARJRJREFUeJzt3Xt8jvXjx/H3DnYwNqeZsMzhWxKZDKGSWq1SX+dTNJZUQrQUOlAqI4cUi/g6lEPk3OmrH4tKFJFEpZRTtDlvGBu7r98f19dqGTbb7s+9+349H4/70ce167rv96x4d13X53N5WZZlCQAAAMWet+kAAAAAKBwUOwAAADdBsQMAAHATFDsAAAA3QbEDAABwExQ7AAAAN0GxAwAAcBMUOwAAADdBsQMAAHATFDsAHmnWrFny8vLS7t27TUcBgEJDsQNQ5M6XqPMvX19fValSRT179tT+/ftNx0MepKen68UXX9SaNWtMRwFwCb6mAwDwHCNGjFD16tV15swZff3115o1a5bWrl2rbdu2KSAgwHQ8XEJ6erpeeuklSdJtt91mNgyAi6LYAXCae+65R1FRUZKkhx9+WBUqVNDo0aP1wQcfqFOnTobTAUDxx6VYAMbccsstkqTffvstx/bPPvtMt9xyi4KCglSmTBm1bt1aP/30U4599uzZo8cff1zXXnutAgMDVb58eXXs2DHXe+a2b9+u22+/XYGBgapatapeeeUVORyOPGVMTk5WXFycqlatKn9/f1111VVq3br1BZ/z3//+Nztz6dKl1apVK23fvv2C91u4cKHq1KmjgIAA1a1bV0uXLlXPnj0VERGRvc/u3bvl5eWlsWPHKjExUTVq1FDJkiV11113ad++fbIsSy+//LKqVq2qwMBAtW7dWkePHr3gs/KSqWfPnipVqpT279+vNm3aqFSpUgoNDdWgQYOUlZWVnSc0NFSS9NJLL2VfUn/xxRfz9HsIwHk4YwfAmPPlqGzZstnbVq1apXvuuUc1atTQiy++qNOnT2vixIlq3ry5Nm/enF2ANm7cqHXr1qlLly6qWrWqdu/ercmTJ+u2227Tjz/+qJIlS0qyi1nLli117tw5DRkyREFBQZo6daoCAwPzlLF9+/bavn27+vfvr4iICB08eFArV67U3r17s7PMnj1bPXr0UExMjEaPHq309HRNnjxZN998s7777rvs/T7++GN17txZ9erVU0JCgo4dO6ZevXqpSpUquX723LlzlZmZqf79++vo0aN67bXX1KlTJ91+++1as2aNBg8erJ07d2rixIkaNGiQZsyYkX1sXjNJUlZWlmJiYtSkSRONHTtWq1at0rhx41SzZk316dNHoaGhmjx5svr06aO2bduqXbt2kqQbbrghT7+HAJzIAoAiNnPmTEuStWrVKuvQoUPWvn37rEWLFlmhoaGWv7+/tW/fvux9IyMjrYoVK1pHjhzJ3vb9999b3t7eVmxsbPa29PT0Cz5n/fr1liTr3Xffzd42cOBAS5L1zTffZG87ePCgFRISYkmydu3addHcx44dsyRZY8aMueg+J06csMqUKWP17t07x/bk5GQrJCQkx/Z69epZVatWtU6cOJG9bc2aNZYkq1q1atnbdu3aZUmyQkNDrePHj2dvHzp0qCXJql+/vnX27Nns7V27drX8/PysM2fO5DtTjx49LEnWiBEjcuzboEEDq2HDhtm/PnTokCXJGj58+EV/LwCYx6VYAE4THR2t0NBQhYeHq0OHDgoKCtIHH3ygqlWrSpL+/PNPbdmyRT179lS5cuWyj7vhhht055136pNPPsne9vczbmfPntWRI0dUq1YtlSlTRps3b87+2ieffKKbbrpJjRs3zt4WGhqqbt26XTZvYGCg/Pz8tGbNGh07dizXfVauXKnjx4+ra9euOnz4cPbLx8dHTZo00erVqyVJBw4c0A8//KDY2FiVKlUq+/gWLVqoXr16ub53x44dFRISkv3rJk2aSJK6d+8uX1/fHNszMzOzZxjnNdPfPfbYYzl+fcstt+j333+/7O8RANfCpVgATpOYmKhrrrlGqampmjFjhr744gv5+/tnf33Pnj2SpGuvvfaCY6+77jp9+umnOnXqlIKCgnT69GklJCRo5syZ2r9/vyzLyt43NTU1x3ueL0R/l9tn/JO/v79Gjx6tp556SmFhYbrpppt03333KTY2VpUqVZIk/frrr5Kk22+/Pdf3CA4OzvG91apV64J9atWqlaOMnnf11Vfn+PX5khceHp7r9vPlM6+ZzgsICMi+h+68smXLXrTMAnBdFDsATtO4cePsWbFt2rTRzTffrAceeEA7duzIcRYrL/r376+ZM2dq4MCBatq0qUJCQuTl5aUuXbrkeWJEXgwcOFD333+/li1bpk8//VQv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+vrK19dXn3/+ud588035+voqKyvLdERcxlVXXaU6derk2Hbddddp7969hhIhv55++mkNGTJEXbp0Ub169fTggw/qySefVEJCgulouEKVKlWSJKWkpOTYnpKSkv01Z6DYIV8sy1K/fv20dOlSffbZZ6pevbrpSMinO+64Qz/88IO2bNmS/YqKilK3bt20ZcsW+fj4mI6Iy2jevPkFywz98ssvqlatmqFEyK/09HR5e+f8K9jHx0cOh8NQIhRU9erVValSJSUlJWVvS0tL0zfffKOmTZs6LQeXYpEvffv21bx587R8+XKVLl06+76BkJAQBQYGGk6HvChduvQF90QGBQWpfPny3CtZTDz55JNq1qyZRo4cqU6dOmnDhg2aOnWqpk6dajoa8uj+++/Xq6++qquvvlrXX3+9vvvuO40fP14PPfSQ6Wi4hJMnT2rnzp3Zv961a5e2bNmicuXK6eqrr9bAgQP1yiuv6F//+peqV6+uF154QZUrV86eOesUFpAPknJ9zZw503Q0FECLFi2sAQMGmI6BfPjwww+tunXrWv7+/lbt2rWtqVOnmo6EfEhLS7MGDBhgXX311VZAQIBVo0YN67nnnrMyMjJMR8MlrF69Ote/A3v06GFZlmU5HA7rhRdesMLCwix/f3/rjjvusHbs2OHUjKxjBwAA4Ca4xw4AAMBNUOwAAADcBMUOAADATVDsAAAA3ATFDgAAwE1Q7AAAANwExQ4AAMBNUOwAAADcBMUOAApox44dqlSpkk6cOFGg97npppu0ePHiQkoFwBNR7AB4vKysLDVr1kzt2rXLsT01NVXh4eF67rnnLnn80KFD1b9/f5UuXbpAOZ5//nkNGTKEB8EDuGI8UgwAJP3yyy+KjIzUtGnT1K1bN0lSbGysvv/+e23cuFF+fn65Hrd3717VqlVLu3btUpUqVQqUISsrS1WqVNH06dPVqlWrAr0XAM/EGTsAkHTNNddo1KhR6t+/v/78808tX75c8+fP17vvvnvRUidJ77//vurXr5+j1M2aNUtlypTRRx99pGuvvVYlS5ZUhw4dlJ6ernfeeUcREREqW7asnnjiCWVlZWUf5+Pjo3vvvVfz588v0u8VgPvyNR0AAFxF//79tXTpUj344IP64YcfNGzYMNWvX/+Sx3z55ZeKioq6YHt6errefPNNzZ8/XydOnFC7du3Utm1blSlTRp988ol+//13tW/fXs2bN1fnzp2zj2vcuLFGjRpV6N8bAM9AsQOA//Hy8tLkyZN13XXXqV69ehoyZMhlj9mzZ0+uxe7s2bOaPHmyatasKUnq0KGDZs+erZSUFJUqVUp16tRRy5YttXr16hzFrnLlytq3b58cDoe8vbmoAiB/+FMDAP5mxowZKlmypHbt2qU//vjjsvufPn1aAQEBF2wvWbJkdqmTpLCwMEVERKhUqVI5th08eDDHcYGBgXI4HMrIyCjAdwHAU1HsAOB/1q1bp9dff10fffSRGjdurF69euly88sqVKigY8eOXbC9RIkSOX7t5eWV67Z/zoA9evSogoKCFBgYeIXfBQBPRrEDANn3xPXs2VN9+vRRy5YtNX36dG3YsEFTpky55HENGjTQjz/+WGg5tm3bpgYNGhTa+wHwLBQ7AJC9Fp1lWdkTFyIiIjR27Fg988wz2r1790WPi4mJ0fr163PMbi2IL7/8UnfddVehvBcAz0OxA+DxPv/8cyUmJmrmzJkqWbJk9vZHH31UzZo1u+Ql2XvuuUe+vr5atWpVgXPs379f69atU1xcXIHfC4BnYoFiACigxMREffDBB/r0008L9D6DBw/WsWPHNHXq1EJKBsDTsNwJABTQo48+quPHj+vEiRMFeqxYxYoVFR8fX4jJAHgaztgBAAC4Ce6xAwAAcBMUOwAAADdBsQMAAHATFDsAAAA3QbEDAABwExQ7AAAAN0GxAwAAcBMUOwAAADdBsQMAAHATFDsAAAA38f+O36fitjF57AAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"curvature[4] = 0.1\n",
|
|
"x, y = integrate_road(curvature)\n",
|
|
"plot_road(x, y)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "3c04dad9",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Smooth turn\n",
|
|
"\n",
|
|
"A smooth turn would look like curvature being constant for a few steps."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "80696363",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASlJJREFUeJzt3X18T3Xjx/H3Nmxzs6GxGcvclJvcTG6WdG8ZqchNuLoau7qVZI3YFEvKEF1iu0hXIlcuSnGVq/Rj4Uott0kUqYhocxMbG8N2fn+cfLVsbGz7fL/fvZ6Px/fhs7PzPd/32Yr345zzOcfDsixLAAAAcHmepgMAAACgZFDsAAAA3ATFDgAAwE1Q7AAAANwExQ4AAMBNUOwAAADcBMUOAADATVDsAAAA3ATFDgAAwE1Q7ABA0ty5c+Xh4aE9e/aYjgIAl41iB6DMnStR514VKlRQ3bp1NWjQIO3fv990PBRBdna2nn/+ea1evdp0FAB/UMF0AADl1wsvvKAGDRro1KlT+vLLLzV37lytXbtW27Ztk4+Pj+l4uIjs7GyNGzdOknTbbbeZDQPAgWIHwJhu3bqpXbt2kqSHH35YAQEBmjRpkj744APdf//9htMBgOvhVCwAp3HzzTdLkn788cd8yz/99FPdfPPNqlKliqpXr64ePXrou+++y7fOzz//rCeeeEJNmjSRr6+vrrrqKvXt27fAa+a2b9+uO+64Q76+vqpXr55efPFF5eXlFSljWlqaoqOjVa9ePXl7e6tOnTrq0aPHBZ/z8ccfOzJXq1ZN3bt31/bt2y/Y3rvvvqvmzZvLx8dHLVq00JIlSzRo0CCFhoY61tmzZ488PDw0ZcoUJScnq2HDhqpcubK6dOmiffv2ybIsjR8/XvXq1ZOvr6969Oih33777YLPKkqmQYMGqWrVqtq/f7969uypqlWrqlatWhoxYoRyc3MdeWrVqiVJGjdunOOU+vPPP1+knyGA0sMROwBO41w5qlGjhmPZypUr1a1bNzVs2FDPP/+8Tp48qRkzZqhTp07avHmzowBt2LBBX3zxhfr376969eppz549mjlzpm677TZ9++23qly5siS7mN1+++06e/as4uLiVKVKFc2ePVu+vr5Fyti7d29t375dQ4cOVWhoqA4ePKgVK1Zo7969jizz58/XwIEDFRkZqUmTJik7O1szZ87UTTfdpK+++sqx3n//+1/169dPLVu2VGJioo4ePaqHHnpIdevWLfCz3377bZ0+fVpDhw7Vb7/9psmTJ+v+++/XHXfcodWrV2vUqFH64YcfNGPGDI0YMUJz5sxxvLeomSQpNzdXkZGRCg8P15QpU7Ry5UpNnTpVjRo10uDBg1WrVi3NnDlTgwcP1n333adevXpJklq1alWknyGAUmQBQBl78803LUnWypUrrUOHDln79u2zFi9ebNWqVcvy9va29u3b51g3LCzMql27tnXkyBHHsq+//try9PS0oqKiHMuys7Mv+JzU1FRLkvXWW285lsXExFiSrHXr1jmWHTx40PL397ckWbt37y4099GjRy1J1ssvv1zoOsePH7eqV69uPfLII/mWp6WlWf7+/vmWt2zZ0qpXr551/Phxx7LVq1dbkqz69es7lu3evduSZNWqVcs6duyYY3l8fLwlyWrdurV15swZx/IBAwZYlSpVsk6dOlXsTAMHDrQkWS+88EK+ddu0aWO1bdvW8fWhQ4csSVZCQkKhPwsAZY9TsQCMiYiIUK1atRQSEqI+ffqoSpUq+uCDD1SvXj1J0q+//qotW7Zo0KBBqlmzpuN9rVq10p133qmPPvrIseyPR9zOnDmjI0eOqHHjxqpevbo2b97s+N5HH32kG264QR06dHAsq1Wrlh544IFL5vX19VWlSpW0evVqHT16tMB1VqxYoWPHjmnAgAE6fPiw4+Xl5aXw8HCtWrVKknTgwAF98803ioqKUtWqVR3vv/XWW9WyZcsCt923b1/5+/s7vg4PD5ck/fWvf1WFChXyLT99+rRjhnFRM/3R448/nu/rm2++WT/99NMlf0YAzOJULABjkpOTde211yojI0Nz5szR//73P3l7ezu+//PPP0uSmjRpcsF7mzVrpk8++URZWVmqUqWKTp48qcTERL355pvav3+/LMtyrJuRkZFvm+cK0R8V9Bl/5u3trUmTJmn48OEKDAzUDTfcoLvvvltRUVEKCgqSJO3atUuSdMcddxS4DT8/v3z71rhx4wvWady4cb4yes7VV1+d7+tzJS8kJKTA5efKZ1EznePj4+O4hu6cGjVqFFpmATgPih0AYzp06OCYFduzZ0/ddNNN+stf/qKdO3fmO4pVFEOHDtWbb76pmJgYdezYUf7+/vLw8FD//v2LPDGiKGJiYnTPPfdo6dKl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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"curvature = np.zeros(10)\n",
|
|
"curvature[4:] = 0.02\n",
|
|
"x, y = integrate_road(curvature)\n",
|
|
"plot_road(x, y)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"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.12.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|