Created
July 31, 2024 21:20
-
-
Save CorniiDog/4e26797ef697e1235f88b0a9452090d9 to your computer and use it in GitHub Desktop.
OdomTest.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"authorship_tag": "ABX9TyNuxDsgrMRbkK5n1zCJ6gwd", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/ConnorAtmos/4e26797ef697e1235f88b0a9452090d9/odomtest.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 472 | |
}, | |
"id": "M1CfhXc_p-bC", | |
"outputId": "9821fce4-9a16-4009-dd94-cb120368b6ad" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
], | |
"image/png": "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Tw0YMEBtwvG4ceOwf/9+fPPNN7h06RJmzpyJv//+u8gwpE8yqQxLOiwBkPeG/6L824s7LGawIZOQ/5yubFsZKzuvxI1xNzC80XC9BBsiotdh8Dk3ISEhePjwIaZPn46EhAT4+vpi//79qknDt2/fVjsl2d/fHxs3bsTnn3+OKVOmoFatWvj1118Ndo2b7l7dsa33NrXr3ABAVbuqWNxhcZm6zg1RSagOP9lW1uueGiIiXTF4uAGAMWPGFLnn5ciRI4XaevXqhV69eum5quLr7tUdXd7sgsgbkfj9j9/x7jvv8lAUGT2GGiIyVmUi3JgCmVSGwOqBSLuYhsDqgQw2ZLQYaojI2DHcEJEahhoiMnYMN0QEL0cvpGSmMNQQkUlguCEixIyMgVIoGWqIyCQw3BARzKR8KyAi02Hw69wQERER6RLDDREREZkUhhsiIiIyKQw3REREZFIYboiIiMikMNwQERGRSWG4ISIiIpPCcENEREQmheGGiIiITArDDREREZkUhhsiIiIyKQw3REREZFIYboiIiMikMNwQERGRSWG4ISIiIpPCcENEREQmheGGiIiITArDDREREZkUhhsiIiIyKQw3REREZFIYboiIiMikMNwQERGRSWG4ISIiIpPCcENEREQmheGGiIiITArDDREREZkUhhsiIiIyKQw3REREZFIYboiIiMikMNwQERGRSWG4ISIiIpPCcENEREQmheGGiIiITArDDREREZkUhhsiIiIyKQw3REREZFIYboiIiMikMNwQERGRSWG4ISIiIpPCcENEREQmheGGiIiITArDDREREZkUhhsiIiIyKQw3REREZFLMDF1AaRNCAABSUlJ0vu7s7Gykp6cjJSUF5ubmOl+/seK4aMZx0YzjohnHRTOOi2amOC75f7fz/46/TLkLN6mpqQAAd3d3A1dCRERE2kpNTUWFChVe2kciihOBTIhSqcT9+/dha2sLiUSi03WnpKTA3d0dd+7cgZ2dnU7Xbcw4LppxXDTjuGjGcdGM46KZKY6LEAKpqamoXLkypNKXz6opd3tupFIpqlatqtdt2NnZmcyTSZc4LppxXDTjuGjGcdGM46KZqY3Lq/bY5OOEYiIiIjIpDDdERERkUhhudEihUGDGjBlQKBSGLqVM4bhoxnHRjOOiGcdFM46LZuV9XMrdhGIiIiIybdxzQ0RERCaF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\n" | |
}, | |
"metadata": {} | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"import numpy as np\n", | |
"\n", | |
"def plot_arc_displacement(X0, Y0, theta0, delta_forward, delta_sideways, delta_theta):\n", | |
" # Initial position and orientation\n", | |
" theta = theta0\n", | |
"\n", | |
" # Calculate the new orientation\n", | |
" theta_new = theta + delta_theta\n", | |
"\n", | |
" # Calculate radii\n", | |
" if delta_theta != 0:\n", | |
" radius_forward = delta_forward / delta_theta\n", | |
" radius_sideways = delta_sideways / delta_theta\n", | |
" else:\n", | |
" radius_forward = radius_sideways = float('inf') # No rotation case\n", | |
"\n", | |
" # Calculate the change in position\n", | |
" delta_x = radius_forward * (np.sin(theta_new) - np.sin(theta)) + radius_sideways * (np.cos(theta_new) - np.cos(theta))\n", | |
" delta_y = radius_forward * (np.cos(theta) - np.cos(theta_new)) + radius_sideways * (np.sin(theta_new) - np.sin(theta))\n", | |
"\n", | |
" # New position\n", | |
" X = X0 + delta_x\n", | |
" Y = Y0 + delta_y\n", | |
"\n", | |
" # Plot the initial and final positions\n", | |
" plt.plot(X0, Y0, 'go', label='Start')\n", | |
" plt.plot(X, Y, 'ro', label='End')\n", | |
"\n", | |
" # Draw arrows for look vectors at start and end positions\n", | |
" plt.arrow(X0, Y0, 0.5*np.cos(theta), 0.5*np.sin(theta), head_width=0.05, head_length=0.05, fc='green', ec='green')\n", | |
" plt.arrow(X, Y, 0.5*np.cos(theta_new), 0.5*np.sin(theta_new), head_width=0.05, head_length=0.05, fc='red', ec='red')\n", | |
"\n", | |
" # Plot the arc path\n", | |
" arc_theta = np.linspace(theta, theta_new, 100)\n", | |
" arc_x = X0 + radius_forward * (np.sin(arc_theta) - np.sin(theta)) + radius_sideways * (np.cos(arc_theta) - np.cos(theta))\n", | |
" arc_y = Y0 + radius_forward * (np.cos(theta) - np.cos(arc_theta)) + radius_sideways * (np.sin(arc_theta) - np.sin(theta))\n", | |
"\n", | |
" plt.plot(arc_x, arc_y, 'k--')\n", | |
"\n", | |
" # Set labels and title\n", | |
" plt.xlabel('X Position')\n", | |
" plt.ylabel('Y Position')\n", | |
" plt.title('Arc Displacement Visualization with Orientation')\n", | |
" plt.legend()\n", | |
" plt.axis('equal')\n", | |
" plt.grid(True)\n", | |
" plt.show()\n", | |
"\n", | |
"# From global position {0, 0, 0} with deltas of {1, 0, pi/4}\n", | |
"plot_arc_displacement(X0=0, Y0=0, theta0=0, delta_forward=1, delta_sideways=0, delta_theta=np.pi/4)\n" | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment