{ "cells": [ { "cell_type": "markdown", "source": [ "# IMU与车辆\n", "\n", "\"Open" ], "metadata": { "colab_type": "text", "id": "view-in-github" } }, { "cell_type": "code", "execution_count": 1, "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ], "outputs": [], "metadata": { "id": "-fVNTc29f76V" } }, { "cell_type": "code", "execution_count": 2, "source": [ "origin_point = np.array([0, 0, 0])\n", "axes_3d = np.array([[1, 0, 0],\n", " [0, 1, 0],\n", " [0, 0, 1]])" ], "outputs": [], "metadata": { "id": "X9LzuCxjgDCW" } }, { "cell_type": "code", "execution_count": 3, "source": [ "def plot_axes3d(origin_point, axes_3d, ax):\n", " labels = ['x', 'y', 'z']\n", " for axis, label in zip(axes_3d, labels):\n", " x, y, z = np.vstack((origin_point, axis)).T\n", " ax.plot(x, y, z, label=label)\n", "\n", "ax = plt.figure().add_subplot(projection='3d')\n", "ax.set_xlim3d(-2, 2)\n", "ax.set_ylim3d(-2, 2)\n", "ax.set_zlim3d(-2, 2)\n", "plot_axes3d(origin_point, axes_3d, ax)\n", "plt.legend()\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPQAAADzCAYAAACxKjtGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABQ9UlEQVR4nO29eXRkZZ0+/txaUlVJqpKqytpJJ510ekln7+4goDTYoiBCbwyb9ACigjPq0DJH4XxRZsZRD4wcRR0ZnNER+AkudAMCDSibCiMNDXZn3/d0lqpKVVL7et/fH837cqs6Sy23lhT3OYejnaRuvanc576f9/N5Ps+HI4RAggQJ2QFZuhcgQYIE8SARWoKELIJEaAkSsggSoSVIyCJIhJYgIYugWOP7UgpcgoTkgxPrQtIOLUFCFkEitAQJWQSJ0BIkZBEkQkuQkEVYKykmQcK6QCAQwPT0NLxeb7qXsiLUajUqKyuhVCqT9h7cGlpuKcstYV1gbGwMWq0WRqMRHCda0lg0EEKwsLAAh8OBmpqayG9LWW4JEoTwer0ZS2YA4DgORqMx6RGERGgJWYNMJTNFKtYnEVqChCyCRGgJErIIEqElSMgiSISWIEEEnDx5Es3NzfB6vXC5XGhoaEB3d3fK1yHVoSVkHf7tuR70zthFveaODTr8y1UNK36/vb0d+/btwze/+U14PB4cPnwYjY2Noq4hGkiEliBBJNx7771ob2+HWq3Gj3/847SsQSK0hKzDajtpMrGwsACn04lAIACv14u8vLyUr0E6Q6cBhBAEg0GEQiFIrqvZg9tvvx3//u//jhtvvBF33XVXWtYg7dApBs/zCAQC8Hg8AIClpSUYDAaoVCooFApwHJfxAgkJ5+Kxxx6DUqnEZz/7WYRCIVx44YV47bXXsHfv3pSuQ9JypwiEEIRCIUxPT8PtdoMQgvz8fExNTaGurg4qlQoAIJPJoFQqoVQqIZfLJYJHib6+PtTX16d7GWtihXVKWu71BEIIAoEAAoEAXC4XJicnAQAWiwVLS0vo7e3F5OQkHA4HCCHw+/1wOp2w2+1wOBxwu90IBALgeT7Nv4mETIcUcicZPM/D7/eD53lMTExgdnYW5eXl2LhxIziOg9/vx8aNG+Hz+WAymTA8PAyFQoHCwkIUFhZCp9PB7/fD7/cDOLuDKxQKtoPLZNIzWcIHkAidJNAQOxAIwO/3o7u7G1qtFlu2bIHT6WQ/x3EcFAoFCgoKUFJSAgDw+XxYXFzE/Pw8hoaGkJOTwwiu1WolgktYERKhkwAaNvM8j4WFBQwODmLbtm0oKiqCyWQ6J7Md+W+VSoXS0lKUlpYCOEtwm82G2dlZDA4OQqVSQa/Xo7CwEHl5eecQXKlUQqFQSAT/EEIitMigIXYoFMLIyAgcDgd2797Nkl4cxzECE0KiSnipVCqUlZWhrKwMAODxeLC4uIjp6Wk4nU6o1WpG8NzcXPh8Pvh8PgDhBKdZdAnZC4nQIoHWloPBIDweD7q7u1FcXIxdu3YtSyJKbCHBo4VGo4FGo0F5eTkIIfB4PLDZbJicnITT6URubi4juEajYQQnhMDpdKK4uBhyuVwieBZCIrQIoLVlnucxNzeHsbExNDQ0oLCw8JyfXY7AiYhLOI5Dbm4ucnNzUVFRAUII3G43bDYbxsfH4XK5kJeXxwg+MDAArVbLXi+Xy8NCdIng6xsSoROAMPEVCoXQ39+PUCiE8847b0UjuEhCi00gjuOQl5eHvLw8VFZWghACl8sFm82GkZEReDwe9Pf3M4Kr1eowWxyJ4OsbEqHjhDDEdjqd6O7uRlVVFSoqKlYlwXKETqb8k+M45OfnIz8/Hxs3bsQ777yDqqoq2Gw2DA0NwefzIT8/nxFcpVJJBI8D9957LwwGA44cOQIAuOeee1BSUoI77rgjpeuQCB0HaIhNlV8zMzNobm5Gfn7+mq9NNaGXe3+tVgutVouqqirwPA+n0wmbzYaBgQH4/X5otVpGcI7j4PF4GJHXBcFfvBuY6xL3mmVNwKfvW/Hbt956Kw4dOoQjR46A53n85je/wTvvvCPuGqKAROgYIAyxg8Egenp6kJOTg/POOw9yuTyqa6SawGtBJpNBp9NBp9OhuroaPM/D4XDAZrOhr68PwWAQOp0Oer0eBQUF5xCcZs8zmuApwKZNm2A0GnHq1CnMz8+jra0NRqMx5euQCB0lCCGwWq1wOp3IyclBX18fNm/ezEpJ0SLdO/RakMlkKCgoQEFBATZt2gSe57G0tMTKZKFQCAUFBWEEDwQCYQSnO7hMJksPwVfZSZOJL3zhC3jkkUcwNzeHW2+9NS1rkAgdBWht2e12Y3x8HBzHYefOndBoNDFfK/IGzzRCR0Imk0Gv10Ov16OmpgahUIgRfHJyEoSQMIKHQiEEg0EQQhihFQoFVCpV+gieIhw8eBD33nsvAoEAnnjiibSsQSL0KhAmvnw+H4aHhwEA559/ftwKrEwn8FqQy+UwGAwwGAwAgFAohMXFRSwuLmJiYgKEEBQWFkKv10On02FhYQEejwdVVVWM3PS/bCN4Tk4OPv7xj6OwsDDqI5jYkAi9AoTyTYvFgqGhIVRWVsLpdCYsp8zkkDtWyOVyGI1Gdl4MBoNYXFyE1WrF2NgYAoEA1Go1CgoKoNPpEAwGEQgEACDrCM7zPE6cOIEnn3wybWuQCL0M6E3H8zyGhobgdrvR3t4Oj8cDh8OR0LUz/QydKBQKBYqKilBUVAQAmJ6ehsPhgMViwcjICORyedgOTttKgQ8ILmw0WS8E7+3txZVXXomDBw9iy5YtaVuHRGgBhCG22+1Gd3c3ysrKsH37dnAcB5/Pl3BP8nKSz2widCRkMhm0Wi0qKysBAH6/H4uLi+e0iur1emi12nMIHtlokqkE37FjB0ZHR9O9DInQFEL55uzsLCYmJtDQ0ICCggL2M2LspslWimUaIhtQcnJyUFJSck6r6NzcHAYHB1mrqF6vR35+Pvx+/6qNJtn++cWKDz2hI2vL/f39AIDzzjsPCkX4xyOTyUTboVf6d7aBZrtXwkqtojMzM3A4HKxVVK/Xs1ZRn8/HyEztmgghUXevZTM+1ISm1kChUAgOhwM9PT2orq5GRUXFsj+fjB2ariNbESvJVmoVnZqaOqdVVNgLTghhD1tK9g8juT+0hBZaA01NTWF2dnZN+aZYhAY+IHG233SJ7prRtorSHRr44Pgk7EH/sBD8Q0doYeIrEAigp6cHGo0GH/nIR9YsR4kVcvt8Ppw4cQIymYxJLw0Gw4odWusZYobBq7WK0kQm/UyFnufChyddS7YS/ENFaGFt2Wazob+/H1u2bGEJmrWQ6A5NCMHY2Bg8Hg8+8pGPQC6XY2RkBF6vF11dXeB5niWE0ilOEBPJPNcKW0UnJyeRl5fHlGo8zzOC0yw5XY/w9dlG8A8NoYV9y2NjY7DZbNi1axfUanXU10hkh/b5fOjq6mKtjCqVCjzPQ6PRQKvVory8PEyUMTo6CrlcDr1eD4PBAK1Wuy79wVKdqBISV61WIxQKIRQKwev1sgRdMgj+8MMP4+GHHwZwdnjCpk2b8Prrr4v1a0WNrCc0DbFpwqu7uxsGgwHt7e0x32jx7tBWqxV9fX3YunUr9Ho93nvvvWWvGSnK8Pv9YRlfmhCiGd/1sKPwPJ/ydT7w3gPot/av+AAUnreB1clLv77NsA13n3f3iu/5pS99CV/60pcQCASwd+9e3HnnnQn8BvEjqwktrC2bTCZYrVbU19czHXKsiJXQNMQ2m82smSNyntVq18zJyQkr6Xg8HlitVmYtRI0JDAZDTJFGKrFW2SpZWMtkQvh9YYY88vvsHM6fLW9G7uKRuOOOO7B3715cddVVovwesSIrCR1pDTQ0NIRAIIALLrgAOTk5cV83lp2GenHn5uaivb2d3dSJnMM1Gg0qKipYQkhoTODz+VjXk16vz5gEWzpqw/+8858RCoVYljta0PuG/kcIYWaKcrl8xZ2d/n6PPvooJiYm8J//+Z+i/j6xIOsILawtu91udHV1YcOGDdBoNAmRORYsLi6ip6cHdXV1bHeloISm53GO4+I6ly/nPGK322G1WjE1NcW6ngwGAwoKCtKWYEsHoeN9YAqbReh1KLlprXslgr/33nt44IEH8Kc//SlM3ptqZBWhhbXl2dlZTE5OorGxETqdDmfOnEn6h0wIweTkJGZnZ9HW1obc3NxVfxYQTykmk8nYdA3gg66nhYUFjIyMQKFQQK/XIxQKgef5lIXB6bqxxXjPaAhOyf3QQw/BarVi79694DgO9fX1eOSRR1J+FMoKQkeG2L29vZDJZGHyzWQ/NYPBILq7u5kl0UqESdXNvVyCzWq1IhAI4N1332UJNoPBgNzc3KStK5vkmCsRPBgM4ic/+UnYz87Pzyf8e3MctxHAYwBKcXYS7H8TQn602mvWPaGFtWW73Y7e3l5s2rQJGzZsCPs5uVyetJ3Jbreju7sbNTU1KC8vj+m1qdJy5+TkoKysDFNTU9i9ezdTXI2NjbEEm8FggF6vF3VXSVfInYr3jCQ47QewWq1wu90YGxuDTqdDaWlpvEeeIIB/JoT8jeM4LYD3OI57mRDSu9IL1jWhhSH25OQk5ufn0draumyoS9VDkQ0XiYAQgjNnzmBqaipq18/I16ejOWM5xZXT6YTVakV/fz/8fr9oCbZs2qGjgUwmQ0VFBVwuF2pra+FyueL+/QkhswBm3///Do7j+gBUAMguQgvlm36/Hz09PcjLy1s11BVDtilEMBhEb28vOI6LyfVzOaS7OUOYYKPOn0tLS7DZbCzBRskda4ItlYQWPiDT9RCh78vzPJRKJfR6fdj6ErjuJgBtAN5e7efWHaGFtWWr1YqBgQFs3boVxcXFq75OTEI7nU50dnaiqqqKNe7Hi0zcvYTGgMAHCTbqOkITbFTBttrvkCpy5eTkwGq1Mo1BOj5X4e8a+f6EECwsLMR1nOE4Lh/AMQBHCCH21X523RBamPjieR6jo6NYWlqKWr4pFqEDgQA6OzvR1NQUNiMqXqyHfujIBBvtWT5z5gxTsNHzd2SCLVWELioqgsVigdlsRjAYZE0aqUQwGATHcZDL5csmxdRqdcwbAMdxSpwl8+OEkKfW+vl1QWhhiE0bGYqKirB79+6ob5ZECU1nVwUCAVx44YWiCjcyndCREPYsC1saR0dH4Xa72eQNg8GQMkIrFArWQz04OIiSkpJlhwUmE6Ojo9BqtTAajbjxxhtx+vTphK7Hnf3gfgGgjxDyg2hek/GEFobY8/PzGB0dxY4dO8LOJtEgEUK73W50dHSgoqICdrtd1Cd/JobcsWC5BBudvNHb2wu73Y6xsTEUFRWhsLAwJQq2VNbZhQiFQpDL5ex/RcBHAfw9gC6O406//7X/Rwh5YaUXZCyhaa+rz+eDSqVic5dWm+y4GuIl9NzcHEZHR5m/2OzsrKg76noIuWMBx3Fho3X+9re/wWg0wm63M2P+eBNs0SLdhHa73auKiqIFIeRNADE98TOS0LS2bLFYsLCwALvdjsrKSlRWVsa9o8VKaJ7nMTAwAI/Hg/b2dvYQEessHnnOzGYYDAbWcx4MBmGz2eJKsEWLdBN6aWkJeXl5KX9/IAMJLawtW61WzM/Po729PeEEVCxE9Hg86OzsRElJCbPwpRB7R13vIfdaiDxDKxQKFBcXs6oETbBNT0/D6XRCo9GwHTxeBVu6CU2FOulAxhBamPiiNV6e51FaWipKNjlaQpvNZgwODq54The7np1tIXck1kqKRSbYqKXQ6OgoPB5PmIIt2u4pidBphlC+ubS0hN7eXmzevBkajQZTU1OivMdaROR5HsPDw7Db7Whvb1+xM0tMAkZ6XmUjYslyCy2FKisrWYLNarWit7cXwWAwTMG2kuov3YSm5oXpQNoJTc36CCEYHx+HxWJhnUpOpxOhUEiU96HSz+Xg9XrR2dkJo9GIXbt2rdkcn+gOzfM83n33Xfj9fqjVatbymSk9zJkCYYJt06ZNbPIldf0EwFpEdTodS7Cli9C0LfZDuUNHyje7u7uh0+nCzABoQ4UYkMvlbMSKEAsLC+jv78f27dujGtAtk8kS2lGpcL+trQ15eXmYn5/HzMwMOjs7WQaY9jCvRw+x5SBWniBy8mUgEMDi4iLMZjMbq2MwGBAMBkV5v3jhcrlEOSbGg7QQWlhbXlhYwODgILZt28aUSBS0picGIkNuQghGRkZgs9mwe/fuqM9n8RKaEIKJiQnMz88zL+lgMMg01Nu3b2cZYJPJhKGhIahUKnYDJ7PFcb1CqVSek2CzWq3w+/04efIk+5wNBgM0Gk3KPj+32/3hyHJHyjdHRkbgcDhWJNRqYXKsEBLa7/ejs7MTOp0Ou3btimknjCfkpiaFCoUC7e3tOHHiRNj3hSaBwhuUeojRBJFWq2UJolS5r6wnqFQqlJeXY3p6Grt372YJtuHhYXi93rgSbPHA6XRCp9Ml7fqrIWWEFloDeTwedHV1obS0dNUzazJ2aKpgiqahYznEmhRzuVyskYOO2BFeY7VdQ+ghxvM8SxCdOXMGPM9nZXguFiITbDzPsxZRYYLNYDCgsLAw4bZa4T3hcrlWHKeUbKSE0LS2TAjB3NwcxsfHsWPHjjW1tmKGSBzHwWazwWazMQfOeBBL2YqGzk1NTWFP7EhCR/OAkMlkKCgoQEFBAWpqaqTwPEbQCSXLJdjGx8fBcVyYgi3WB6QwEed2u7MzKSZMfNHmBp7nl53smEwEAgGMjIwgGAziggsuSGg3i4aAhBAMDw9jaWlp2RLYcq11sUIKzxPDSgk2+oDMyclhEVB+fv6aD0iheYbL5cq+M7Swtux0OtHd3c3CzlTuHktLS+ju7kZ5eTkbjZII1tqh6fm8oKBgxeNEtCF3LIi0+KUOoJHheTbXvIH4a/qRCTav13vOUDz6gFwuwRYKhdi9lXVlK2Hia3p6GjMzM3FZ9CSCSAdOOgInUay2Q9vtdnR1da05LyuZUlJ6zZXCc9o5lq3huVjtmmq1GuXl5WzqpdvthtVqZQk2YYtoTk5OWIeV0+nMDkJTZQ+9SXt7e6FSqRK26IkV1IFTqVSivb2dyfHEqGmvtEOfOXMGk5OTaG1tXTPciiRxsndNYXhut9uxdetWFp673W42/TIbwvNkiEqECbaNGzeyBKXNZkNPTw+CwSA0Gg2CwSB8Ph/rCU/wPf8XwJUATISQxmhfJxqhaYg9OjoKtVqNmZmZZY3mYwUtE0X7R3I4HOjq6jrH+VPMLikhAXmeR19fH4LBINrb26PKDQh9r9KxO0aG5w6HAwsLC1mRPU+FSkyYoKQJtunpaZhMJtxyyy3o6urCj3/8Y+zbtw8XXnhhvPmiRwD8J87a+EYN0QhNb1J6c+zatSvuTLIQ0drvruXAKSah6XW8Xi86OjpQWlqK6urqmMgpJHQ6z7VCeSUNz6n6aj1mz9Mh+5TL5cjNzUVRURF+/etfY8+ePdi9ezd++9vfxp0AJoT85X1jwJggasjd2dkJjuNQU1MjCpmBD2rRq30otDsLwIrhvVgyUqoUoxMl4xl+F0/ZKlWI9A8T+nfTcgwl+FrheTp+r3Q3ZlBcd911uP7661O+DlEJ3djYiDNnzogmBgHWVos5nU50dXVh48aNqxqwiaU64zgOFosFMzMzMc+XFl4jk0i8GjQaDTQaDTZs2BDW/dTd3c0G1FNxRiSR0mGnmwmETuffVlRCK5VKKBQK+Hw+0a65mlpsZmYG4+PjUTlwikGiYDCI6elp5sUd742TyTv0aojsfhLa+w4PD0OlUrHzd15e3oeO0Dk5OaKXI2OFqISmFqZi7tDLhcpCB85ozyiJfsBUwqnT6ZCbm5uwOIX+73oidCRWCs+F86sDgQD8fn/KsueZsEOnE6LXoRUKhajta5GhstvtRmdnJzZs2ICNGzem5Ek4Pz+P4eFhNDU1we12w+VyJXS9VJetUoXI8NxmszFhjzA8T+Z423QTOhgMiqKC5Dju1wAuAVDEcdw0gH8hhPxirdeJTuhk7ND0epRYjY2NKCgoEO09VgIhBENDQ3A4HEzC6fF4EiZgMpRimQaO45Cfn4/c3Fy0traeM31DqVSy5FpeXp5on0O6Ce1yucRy/LwhntclZYcWm9CBQAB9fX3weDxx2/jGCqGEc+fOneyGE6P8tV7P0LFCeIaODM+9Xi+sVisLz6n2PJrs+WpIN6EXFxfTphIDknSGFjPkpn3TlZWV5zhwJgs0TFxOwikWAQkhWe8ptlpSTK1WY8OGDWtmz2MNz9NN6HTquIEMD7nNZjOmp6exYcMG1NTUiHLNtTA9PY2pqSnmaxYJsXZov98Pl8uVkqNDuhBtlnu17Hms4XkmEDpdnVZAhibFhA6ctbW1ou5gK91kPM+jt7cXoVBoVe25GDu03+/HwMAAjEYjJicn4XK5MDY2BqPRKJrZfCYg3rJVIuF5ugntdDqzh9AcxyVsokeH0RkMBuzatQvz8/MJZ5Up6O4aSVZqrF9WVoaqqqpVb8JEd+iZmRnYbLYwD7V33nkHGo0G09PTcDgcyM/Ph9FoTOg8+WDHgwCAIy1H2NdSHdqL2fkUbXjO83xKe+0p6IMk60LuRLCcA6eYzp/LEZq+Z7QD8OLdoQkhbLROWVkZ87SitWih2bzT6cTCwgK7YfV6PYxGI3Q6XdS7z9DSUMxrFBvJEJasFZ5Ta6H8/HxRs+fRri2dbiVAhhCaEILR0VHW1CGUUybLKJD6gJvN5pgknPFEIIFAAB0dHSgsLERraysGBwfDvh/ZH02dQOkNa7PZMDc3h8HBQWg0GrZ7xyM7TSVSoRSLDM/pZxsZnifbGJAiq87Q8fzxhA6cu3fvPmcHEjPJRnd72i+tUqmWfc/VEKvrp9PpRGdnJ+rq6ljGPBZhibCXmTba06giEAgwqeVyWup0gxrPpxIymYydr4XRDjUGFLaGJkPc4nQ6o/J3TxaSskNH28McjQOnmITmOA5OpxNDQ0Pn9EvHco1od2iTyYTh4eFz2jnjDduFjfZVVVUIhULnaKnp7r0c1usZOhYI77vIaId+XgsLC6KKWyIdP6urq0X5XeJBUghNSbgSoWm4azKZ1nTgFHM4nM/nQ39/P1pbW+N2lIhmPdTEf3FxMWwUbeTPUMR7I8nlchiNRrYjeDweLCwssAqBQqGAxWKBXq9nu1EqCcbzfEY1Z0R+XtQ3bGJiAk6nM8xWKJbwXPjgyqoztFAVFAwGl72RA4EAurq6oNFowsberAQxdmhCCAYHB+HxeKLqzFoNa+2uwWAQXV1dyM3NjcokkK5PDGg0GjZHW2vTsh1pbGyMjYkJhUIp2znTvUOvhUjfsEjfbmFr6GrhubAxI6vO0BQrkXBpaQk9PT2ora1FWVlZQteKFn6/Hx0dHdDr9SgpKUmq6yc14Kuurl41nE+F3JPjOCgUCtTV1QE4G51YLBb4fD6cPHkSWq0WRqMRer1+RSkt57aC5MZm3iBEphNaCGF4Xl1dzR6G1HtNoVCwzyvS1jeS0FmzQwPLt1ASQjA1NYUzZ86gtbU1JvF6ImUrKuGkZ/SBgYGEd/uVyEgTVdE0jkReIxU3PR0TMzs7i507dzKrqKmpKXAcx86SWq0WHAhy3vwPKLt/A/eNL4DoYs81AOuL0JGIDM/p3Cxq6yt0bslqQgPhajGhA2c87p+xZpUplpNwinEeX27o3cTEBEwmU9RD79LdPik0uQPORjFWqxXT09NwLS2gefRn0M79Cd6G60HyYh8XRLGeCR0J+kBcLjz3+XzgOA7vvPOOaITmOO5yAD8CIAfwc0LIfdG8Lqkh90oOnLEg1huCSjjphA7hA0TsTqlQKISenh7I5fKYyl/pknau9ODIyck5K2wpUEHz+3ugmDuJ2cYvYbDo0+BPfeDhHYuwhb5fthBaiMjwnDqmHj16FB0dHbjppptwxRVX4J/+6Z/iqn1zHCcH8FMAnwQwDeAkx3HPEkJ613ptUkJuhUIBk8kEh8ORUoN9j8eDjo4OlJeXLyvhFIvQwAeOn/S9YkWqQ+613ouzjSH36ZvA2Wfg+cxDyN++DzuBhIQt2UroSBBCkJ+fj29/+9v4y1/+gkceeQRvvPFGIm2+5wEYJoSMAgDHcb8BsB9A6gkdCoUwNzcHAFH7VIuBaCScYpXAgsEg3nvvvbgcP+k6MsmxRHbmXWie+RwAwHPNbxCqaGffS0TYkg5Cp+M9hWdonudRVVWFw4cPJ3LJCgBTgn9PA/hINC8UnW19fX3QarXIy8tLCZkJIRgbG4PFYlnzDCsGoaenp+Hz+fCxj30sIavidJOYQjHwPNQv3gGiLYf70GMg+toVfzYWYUtubm5ayEXXmUpQQgt73NMF0RnX2NiI2dlZOBwOUa+73M1Ba75qtTqqM6xMJkMgEIjr/XmeZ7tSbm5uQmSOTPSl5UxNCHJO/hdUb3wPoQ274dn/vzGXqCIzwZHznxQKBXJzczPGQC9ZiPSNF+HveQbARsG/K9//2ppISdkqUdDSlfCmoBrpWBJu8e7QtJZdVFSE+vp6vPXWWzFfQ4h0Z7nBB6F69ZvI6fwVAtv2wXv5DwBF4o0eubm5yM3NZQPWh4eH4XK58Le//Y3VccX2EMsEhEIhsRs/TgLYwnFcDc4S+XoAn43mhUkvW4kB2nFFCT03N4fR0dGYVV/xEJpm6rds2bKi3jxWpMtHjBACedANzdO3QDH+J/jO+zL8H7sL4MRPIslkMuTm5iI/Px8bNmyAz+fDwsIC64LS6XRrClvWC+i9KZZdMSEkyHHcVwD8AWfLVv9LCOmJ5rXrZocOhULgeR5DQ0NwuVwraqRXQ6yEpg+OlpYWUeV8kbtTqnYrzjmHttP/D3LXJLyfvB+B5huT+n7CY5JKpWImBXR648LCAiYnJ8M6pNajYwvtWxDL8RMACCEvAHgh1tclbYcWm9Berxfd3d0wGAxoa2uL648eLaGF9r3xDhtbDXSH9vl8UKlUKdmtZaZe5D19E3jPEjyHHkVo0yVJf8+VSkhCYUttbW2YsEUsx5ZUgp6hbTZbWlViQBKFJWKG3KFQCF1dXaivr08o7I1GRhoMBtHZ2Yn8/Pww+16xYTKZMDs7C57n4fP5YDKZYDAYklIZkI+9Ds1zXwJR6XB6533YlgIyA9GXkJiwZQXHlmiFLeno7gI+2KHT3WkFJFFYItYOPTU1hcXFxYTJDKy9Q7tcLnR0dETVPBJvSSYQCLDup6amJgDAu+++C7vdjomJCebAYTQaodFoEr5BlZ2/guqVe8AXbYdj3y/gGjUldL1YEM9ntJxji9VqjUrYki6DQOpjJmbIHS+SanCQCEKhEPr6+sDzPMrLy0VJnKxGaLPZjMHBQTQ1NUGn0616HRoyx3qzut1unD59GgaDAT6fj4XdhBBUVVWhuroagUAgrPRTWFgIo9G4ZgvfuSDgFiehPvl7BGs+Ds+V/wWeUwHIbEJHQqFQoKSkBCUlJWHClr6+vjAHksLCwrQ6fspkMta0kU4kjdCJgEo46fyqkZER0WY7R0YOVJiysLDAxt1Ec51Ybx7hPGmNRoOJiQmcOnUKXq8XGzZsQCAQgEqlglKpRElJCUpLSwGc7RizWq0YGRlhwg26e6+IoA/umX5oQ4uY2HQNcj9zH9Q5KiAQSGlIKrawZDlhi81mY8IWpVIJv98Pt9ud0p1SaOGblYROBBaLBQMDA2ESTrGMAiN36FAoxDrBdu3aFVNzRSyJrOnpaUxPT6O1tRU5OTngOA65ublQKpVobGyE3W7H2NgYPB4PCgoKmMMnx3EoKChgDpc+nw82mw0DAwNMdmk0GlFQUBC29hBk2BSQYSJQi4vHD0A1fBLt1QW4sKYAJUFx3F+iQbKVYnK5PMwgkEY2wuiGGgQmU9hCvdOy9gwdD4TOn5ESTrHKYEJC0yiAOnzEep1oCC207hUm2IaGhuD1erFz507I5XLodDomxqA7zujoaJiUUqlUQqVShSWPFhcXYTKZMDQ0xM6WRqMRKpUK/3L4j/CFgHcnFvHmiA1vjFjxHyM2AMB/dp3ERZsNuKjOgF0bC5CjSE6YmmrpZ05ODvLz87Fjxw7wPM8MCmjOgn4+ubm5SVlXut1KgCTv0NGGpVTCqdFokur8SQlNw9+GhgYUFhbGfJ1ocgQ0W67VatHU1ARCCGu3pF9brhssUkppsVgwODgY1ghBxTR6vZ5FMdQfq6enh2WGjUYjLqzV46ObDbgLmzEyb8fRv/ZhzKvGb9+bwf/3zhlolDKcX6N/n+B6lOnEswZONaGF95uwtg2ACVvGxsbgdruh0+nY98WqLDidTnZUSheSRmia6V6L0FTCWVNTg/Ly8mV/JhENduR1PB4PhoaGYvLiXu46qxFaaEVEkzk+nw9dXV3YuHHjir9nJHJzc1FVVcXOi1arle3IeXl5LFmmVCqZP5Zw956ZmUF/fz+r65brdPjUphy0tTXB7Q/h5MQi3hi24o0RK14fXAAAbCnJw0WbDfjYZj1aK3VQyuPfvVNN6NVsg6MRthiNxnPshWJBVofcdFddLTsdrYRTjB1aOLtq9+7dCZ2pVjtDU2viHTt2ID8/n41u6e3tRX19fVwRAXD2MxC2MTqdTlgsFlYJoDck7XIS7k60aWJ6ehputxvj4+MwGo3YU2fAxVuMZxODCx5G7sfensb/vjWFfJUcF9TocVGdAR+r1aNYG5teOdWEjmYDAVYWtkxNTcHhcMQ02jbSwjcrQ25ai15JXMLzPAYHB+F2u6OScCZKaJ/Ph46ODpSUlGBpaSnhBMlKhD5z5gwmJyfDkl/z8/OYmJhAa2trQh1ake9Pa7U1NTUIBALMNcPhcLBwkvYo06aJ0tJS9PX1QaVSMW8sqqmuMhhw8/mVuPn8Sjh9Qbw9tog3Rqx4Y9iKl/stAID6snx29m7aoIVctjpZ0xlyx4JohC10kGDk9TPJTwxIYsi9Egl9Ph86OztjknAmQmhqFEjnZc3MzMR1HSGW8xUbGhqC0+kMs+4dHR2F3W7Hrl27ktobrlQqw25Iu90Os9mMqakpdi43GAw4c+YM8vPzmXBFJpOxwW+Tk5Nh7ZB7txnxie1FZy2QTS5G7l/8dRL//X+TKNAo8NHas7v3R2sN0Ocu7z2+HggtxErCltnZWQwMDCA3N5cRXKVSfbgJvbi4iJ6enrDJi9Eg3rbHmZkZTExMrDjrOV4Id2ia0MvLy0NzczMIIeB5Hn19fcjJyUFra2vKLYaEBoA+nw9msxkdHR3geR6lpaWw2+1MPJOfn4/8/HxUVVWxm3d0dDSshFZXpMe20ip84cIqLHkCeOv93fvNESte6DGDA9BUocXHNhuwZ7MB9eX5kMUpvkkEyRCWrCRsod7d+fn5rHFI7DM0x3HXAPhXAPUAziOEvLvmekV798gLC0JuauM7MzMTF7li3aGF5aJk2CDRB4zH48Hp06dRVVWF0tJSEELg9/vR1dWF8vLymMthyYBMJsP8/DxqampQUVHBHEaEZTE6yE148wKA3W6HzWbD2NgYcnJy2O59+Y5iXL6jGDwh6Jt14i8jVrw5bMV//WUCD/1lAq/900dQrFWlXLmV7PdbTtgyMzODpaUlfO5zn0N3dzeOHTuG66+/HrW1Kzu/xIBuAIcA/CzaFyTtDE1JGAqF0Nt71tusvb09rvNrLISOnPSYjB2C4ziW6BImv1wuF7q7u7Ft27a4vMbEBp17XVNTw0gamSyzWCwYGhqC3+9nQhWaoBSObaWilsHBQfj9fiZJrS8rRMMGLf7hompYXX50nnGw5Fk27NCrQS6XswTao48+ik9+8pNQqVS488478etf/zrhnAkhpA+ITduR1B3a7Xbj5MmTTMKZyAynaEJuWgLbvHlzUuuBlAhtbW1QqVTgOI7NJ25ubk57phM4a8zQ3d2NHTt2rGj8v1xZzGw2Y2hoCLm5uWFlsZycHJSWlrJIZGlpiUkuhaKWS7Z+MHkxHYRO9bB34Rna7/fjjjvuwD//8z+ndA1CJO23d7vdmJ2dRVtbW9ylGopopJ900uNaJbBoJ2MuB0IIs9Wpq6tjarbJyUlYLBbs2rUrI9w3FhYWMDQ0hJaWlqiPN5FlMZfLBYvFgv7+/nPKYgBQWFjI/q50qgQtC9KdPtXtjOlozhCWygghMUegl156KV599dXuZb51DyHk97GuJymEnpiYgMViwYYNGxImM7B6yC2c9Lh79+4164bxNFYAZ/9wnZ2dbCDc5OQk/H4/FhcXIZfL0dbWlhHzmWdmZnDmzBns3LkzbnMAjuNYsmzTpk2sA4yWxehcrIKCAigUCjZVQihqmZubg91ux8DAAMuqJ9usIF2EVigUcTt+vvLKKwDQKNZ6kkLo4uJiqNVqWK1WUa630lNeKBnduXNn1KKCWDPmXq8Xp0+fRmVlJbtpCwoK0N199sGak5OD8fFxFBcXJ6Q0SgRUC+9wOJhGXCwolcqwcNtut8NisZxTFlOr1UzUotfr4XQ6UVFRAbvdju7ubvY9ek4X+3NK9w4NpG8qCkVSCJ2XlwePxyOqDVEkop30GIlYCU3r2PX19dBqtSCEwOPxoL+/H9u2bUNxcTECgQAsFgvGx8fhdDpRWFiIoqIiGAyGlNjX0jKZXC5HS0tLUm8qYVls8+bNTCM9MTEBl8vFkmXBYJBNlNBqtaioqGA+3tRqSKvVss9JjLPvatLPZIHneeTk5CQlX8Bx3EEAPwFQDOA4x3GnCSGXrfaatCjFEkUskx4jEQuh5+bmMDY2hpaWFpb8slqtGBoaQkNDAzurK5VKNsiMdvnQJJlarUZRURGKi4vFtnoF8EETiMFgQHV1dcp3iEiN9OLiIsbHx7G4uIiCggKYTKawcJsmzziOYwPfqJ6afi9em9907NDBYBAajUY0x08hCCFPA3g6ltekXCmWCOikx/n5+agnPUYiGkLTc/nS0hIL5TmOw5kzZ1iib6X3juzyocml7u5uhEIhGI1GFBcXixJyUklrVVVV1PO2kwnq2gEAF198Mfx+PyuL+Xy+c8pitKa7ceNGlmUfHx+H2+1mopZYepmj1XKLCeoX73Q6M6K6kfRuK7FACEFXVxdkMhna29vj/sOtRWhqSKhSqdDS0sJ+ltZfYz2f0puW2gvR8NTpdKKgoADFxcVxheZOp5PVvFea5ZVK0Ieg2+1Ga2srZDIZNBoNNm7cyAhLe72FZTG9Xg+FQhGWZQfAJKljY2NQKpVhvcwrIV1naLlcDrvdnnbZJ5BkYYlYIbfX64Xb7UZlZSWqq6sTutZqhKbJLxpCUhlnd3c3CgoKsHXr1oR2VaHmmud5LC0twWw2M3uh4uJiFBUVrdnWSV1LGhsbM+ImIoSgv78fAJbt8wbC3UUiy2LCUld+fj54ng/TU/v9fthstnN81vR6fRiB03GGpoTOhNZJIIk7tFiTHqn+Ozc3N+4Z09Gsy263o6urC9u3b0dBQQHrYe7s7ER1dbXoIa1MJgszKHC73TCbzejp6Vk1NJ+bm8Pk5OSqYX8qQR94eXl5qK2tjeqBt1JZbHZ2Fna7namvCgsLoVAomM9acXExOI4L81lTq9Vs907nDp0Jjp9AEgktRnJmenoaU1NT2LlzJxMtJCrcWI7Q8/PzTOVFd0e73Y6+vr5VlVZiIjc3F9XV1WGh+eTkJBwOBwoKClBUVASn04nFxUXs3Lkz5Yqo5RAKhdjMr3hmZFNElsUcDgcsFgt6es5Of6GEpWUxmmWvqalhTi39/f1YWlrCxMQEioqKzvFZSxYyySAQyFDXT57nMTAwAJ/Ph/POOw9yuTxq+edaEBKa1m5tNhs7G3Mch7m5OUxNTaGtrS1uV5NEENkOubi4iIGBAXi9Xuh0OszOzrJaf7oQCARYbT5aB5ZowHEc05BT8wGLxcLKYkITRZlMxnzWSktL0dHRAZ1Ox1xd6Dk9maIW4Q6dtYROBHTSo9FoxPbt29nDQWznT+rvpVAo0NLSwr4/MjICp9OZMbsgz/OYmJhAcXExamtr4fF42O4VCoVgMBhQXFzMXEJTAa/XywYSiDXAbyXk5OSElcWohnx8fBxKpZIJVfx+P3ieZ8cYjuPg9XphtVrPMSoQ87OiYf6HhtCxFNwdDgc6OzuxdevWc24UscpgcrkcPp8P7777LsrKylBRUcGSX729vVCr1UkXZ0QL+nDbsGEDKioqAIQ3VASDQSwsLDDrHJ1Oh+LiYhiNxqQJWtxuNzo7O9OSXY/MO3g8HqZJsNvtKCsrg8vlYmUxtVod9jCw2WzMZ43KV6mjaiKgNfWsLlsBH5Awmp2O+ou1trYu+8GIRWi/34+ZmRk0NjaisLCQ9TB3dnaioqKCESfdoMTZsmULcwGNhEKhOKcDymw2s1IPzZqLZX1EO7gaGxtjGuObLGg0GjZQ/oILLghrBxWOzKGEpTs0x3FwuVzMZ43juIRNAl0uV0bcO0k9Q1O12GqEph1Mdrt9VX8xMbLmJpMJMzMz2LBhA0t0OZ1O5qKSCT3MwFm5aW9vb0zE4TgurAPK4/HAbDajr68PgUCAZc3jDTdpqSyWDq5kY2FhAcPDwyzjn5uby8pilNz9/f0IBoNhhCWEIDc3lzXaUEnq5OTkObOroz12eTye7N6ho5kTHcukx0R2aEIIxsfHYbFYUFtbi9nZWeh0OoRCIYyPj2fUTWoymTA2NpawqaBGozknNJ+enmb2Q7QDKpob1mw2s+gpnYk4IWgk0tbWdk7CS+gsUl1dHeYLRgUglLD0PhVKUqmoZWJiIux7kQb9wg6rrM5ys4uvoueOZdIjED+heZ5HT08PZDIZWltbQQiBWq1myS+9Xo/FxUUolcq09zJPTU3BZDJh586doq5ludBcmFiiWvPlHiDCdsx0fz4UJpMJ4+PjaGtri2pNkb5gtCxGu+WEvd48z7MaOS0h2mw25rMmHB4IIKMMAoEUnaEjEcukR4p4stx+vx+nT59GSUlJ2Plmbm4OWq0Wu3btgsfjgclkwqlTpyCTyZj8MJU7Nj12eDyepPdVC0Pzuro6ljWnoTnNmhcUFGBychJWq1X0dsxEICwpxvOAWa4sRhOLVI5rMBhYHVuhULBcBMdxsNvtzEhRoVAwFZvYhOY47vsArgLgBzAC4HOEkMU1X7dGU3bsHdvvIxAIYGBgAIWFhSxjLQx9W1paYqoNnjlzBoFAAJs2bYrq54UZc71eD0IIAoEAurq6UFJSsqwlktfrhcVigdlsht/vT/jcGQ1oBKFWq1FXV5fW7DoNTc1mM8xmM+RyOerq6lBcXJwRJbyZmRnMzs6ipaUlKevheZ71ei8sLITNw6ItkhSU3MPDw3jiiSfwhz/8AZdffjk++9nPYs+ePbGu75w/OsdxnwLwGiEkyHHc/QBACLlrrQslfYemIXe8kx6F1/J6vVH9LPXFEiq/3G43uru7UVdXt6KFsFqtZsPrIktCiTRSrIRAIIDOzk72gEk36G60sLCA0tJSlJeXMyMDYfOEWFnzWDA9PQ2TyYTW1takRQsymSwseqEP+JGRkTANOU1UBgIB5OXl4fvf/z6GhoZwySWX4Omnn8YFF1yQ8AOHEPJHwT9PAPi7aF6X1B16bGyMJRXinfRIYTabYbPZsHXr1pUX+357pclkQlNTExQKRVgPc7zNDLTP12w2w2q1Ijc3l4Vh8SqQlnPkTDdW02V7vV6YzWZYLBb4fD4WvRQUFCQ9qpiamoLFYkFzc3PaQn/hZFCbzQa5XA6Px4OKigr4fD5cfvnl6O7ujlfzv+oHyHHccwB+Swj51ZoXSiahp6amsLS0BJvNFjbvOR4sLCzAbDZj+/bty36fCkMIIexnOI7D9PQ05ufn0dzcLIr8j3YK0bA0nnN3NI6cqUYsuuxQKISFhQVYLBYsLS0x5xGj0Sh64mxiYgI2mw3Nzc0Z4dkGgFkqFRcX48tf/jL6+/tx1VVX4Ytf/CIuvPDCqK9z6aWXYm5uDj1UtP4BmEEgx3H3ANgN4BCJwrQsqWUr+kQ7//zzEy53rJblpoqqoqIibNy4kZUTBgcHEQwGo/YbiwbCTiHaHECH1Pt8PpYxXuncHY8jZ7IRqy5bLpeHZY3puZOO06GfQaK/39jYGBwOR0aR2eFwoKenB62trTCbzXA4HHjqqadgs9nw7rvvxkTo9w0CgRVMAjmOuwXAlQA+EQ2ZgSTu0AMDAzCbzdBqtSvuqrHA4XBgbGwMzc3NYV+nXtx1dXUwGAxsDnNXVxf0ej02bdqUskQTPXfTP3TkuZuWgGJNCCYTYuuyhYlFn88XljWPlpTULMHr9WLHjh0ZQ2an04muri60tLTAarXi2muvxcMPP4zzzz8/0UsvlxS7HMAPAFxMCDFHfaFkEdrj8TA71x07dsR7GQa3243BwUG0trayr9GdsampiSVqvF4vurq6sGnTprQO3448d1OrmkwSZ7hcLnR1dSVNly00719aWkJ+fj7Tmq8UmtMSXiAQQH19fUZo6oEPyNzc3Ay73Y5rrrkGDz74IPbs2SPG5Zcj9DAAFYCF9790ghDypbUulLSQOycnB0qlUjQbImEdmhCCyclJzM3Nsa4ojuOwuLiI/v5+NDQ0RF3fThaot1hhYSE72+fl5aGzszNt9W4h7HY7enp6kqrLjjTvdzgcMJvNYaF5UVERk0zSmWQAMorM9MHX1NQEp9OJa6+9Fg888IBYZF4WhJC6eF6XsrKVGNeiU/76+voQCoWwc+dOAGfPtbOzs5ienk5bD/NyoL7her2eOXLW1tayiZDRnrvFRjp02UJBB7X/peVFr9cLvV4Pt9sNjUaDbdu2ZQyZaZNMY2MjvF4vrrnmGnzve9/D3r170720ZZG0kDsUCrEn2+7du+O9DAPP8zhx4gQzjKuqqmKFfmpO19jYmDGKpmgdOdc6d4sNoS47EyyMgLOfQUdHBwKBAPPyprt3OuWmHo8HHR0d2LFjB4LBIK6++mp861vfwpVXXin2W4n29EpqlltM50+32w2n04mWlhYYjUbWw0z9xpqbmzPmqU4dObdu3bpmB5dQZy08dw8PD4tS7xYiE3XZNOLS6/Wora0FIQROpxNms5nJcWkEk8puJposrK+vByEE1157Le6+++5kkFlUJDXkFstlhDaxazQalsmmPcyVlZWimAeKhUQcOYWe3sJ6d0dHBziOS+jcPTExkXG6bJ7n0dXVhYKCAibp5TiOOX7S4wntcaaheXFxMQoLC5OW/abur9u3b4dMJsPf/d3f4ciRIzh48GBS3k9MJC3k5nkegUAAf/3rX2OqzUVicnISs7OzaGpqQnd3N2QyGbRaLUwmE+rr6zPCk5qCOnIKJadigZ45aTnIaDSipKRkzXM3LQF5PB40NDRkTAmIDv+jx6doXyNUa+Xl5bGsuVhlQJ/Ph1OnTmHbtm3IycnBNddcgy984Qs4fPiwKNdfAaKFlkkjNN1F4yU0z/Po7+8PK19wHIfJyUlMTEwgJycnrC0unYkwKjm1Wq1obm5OeiNDtOduQgj6+vogk8kyKtFEVWklJSVxS4FpaG6xWGCxWMBxXFjWPJ7f1e/349SpU9iyZQvUajWuu+46HD58GJ/73OfiWmMMyG5CBwIBdHR0sOwwXSOVATY1NUGpVDJ9sclkQigUQlFREUpKSlLal0pLLaFQCPX19WkZxbK0tASTyRSmMzcajRgYGIjJLzsVoAmw8vJyUY9K1B3UbDbD4/FAr9ejqKjoHDP+1V5/6tQp1NXVIS8vDzfccAMOHTqE2267LRWf3foi9AUXXBD1hyI0PqB2MnSnUSgU2Lp167J/oEAgwMjt9XqjDkkTAe0gy8/PzwjS0HP3/Pw8JicnoVQqsXHjxrTWu4UIBoM4ffo0KioqRLX+jQRtpKANPXl5eWz3Xi40DwQCOHXqFGpra6HVavH3f//3uOyyy/CVr3wlVX/TzCc0cPY88vbbb2PXrl1RhaFWqxV9fX1obGxkNyB9opeVlUXdYkibB0wmExwOB0ukRPu0jgbLOXJmAui6KisrYTAY4jp3JwNUL15VVZVSBZ8wuWixWAAgLGseDAZx6tQp1NTUoLCwEDfffDMuuugi3Hnnnan8jNYPod977z00NjauWfOcnp7G9PQ0mpuboVQqmTNjd3f3qs6Xa4E+rU0mExYXF6HValFSUpKQ1S0VG6zWW50OrKbLpuYF9CGX7Hq3ENQ5pqamJuk+3tGshYbmbrcbfr8feXl52LZtG7785S9j165duPvuu5NC5qmpKdx0002Yn58Hx3G47bbbcMcddwDrhdDCJMNKNUR6BqVCfJr8oo6OTU1NotUfaWeQyWTCwsICNBoNKwVFW5eljpyZIC8Vgop4tm/fzvyuVsJK526x6t1C+Hw+nD59Gps3b86ohx/dmfV6PY4fP46HHnoIWq0WX//613Ho0KGktLXOzs5idnYWO3fuhMPhwK5du/DMM89gx44dmS8soVit7ZGG0zqdDo2NjcymV2iWJ+YNxnEcm4tUV1cHl8vF/MRoS+BqI2aEKqt0uHashFh12ULDerHr3ULQem40AptUgmbZKysrUVJSgoGBARw+fBiHDx/G8ePHYbVak0Lo8vJyljvQarWor6/HmTNnRGleokj6Dt3b24uysrJz6sVutxsdHR3YtGkTE+/THmae51OeMaY+1mazGTzPs4w5jQ6mpqYwPz+PlpaWjFFZAWfzDoODg2hubhYl8bVcvTseZxIqm8yU+dUUoVAIp0+fRnl5OcrKyvC1r30NOp0O3//+91N6v42Pj2PPnj3o7u6GTqdbHyF3IBBAf38/S0pR2Gw2FrZS4/NgMIju7m4YDAbWyJAu+P1+ljH3+XyQyWSs9TFTVFZAuId3MnTZkcnFaM/dNMdQX1+fMY4swAc7M/VLu+uuuyCTyfCjH/0opWR2Op24+OKLcc899+DQoUPAejlDBwIBDA0NIS8vjzUo0ORXU1MTcnJywHEc89eqra3NGH8t4ANpIs/zUCgUzMe7pKQkqdLDaDAzM4OZmZmURQzCAfVWq5XlHyLP3S6XC52dnRmXY+B5Hh0dHSguLsaGDRvwrW99Cx6PBw899FBK/46BQABXXnklLrvsMtx55530y+uH0NQosKKiAoODg3C73WhoaGDJL6p9zrQbYDlHTp7nWaZ4aWkJOp0OJSUlKckUCyFUpaUjYogsBVGVVl5eHoaHhzNm9hUFfTAbDAZUVlbi29/+NkwmE37+85+n9PMjhODmm2+GwWDAgw8+KPzW+iB0MBjExMQEmz5ABRh0IiXdZZqbmzOmlQ+IzpGTTqCgGfPc3FyUlJQkteUvU3XZPp8PU1NTmJychFqtZkm1VDiCrgVK5sLCQlRVVeG+++7D2NgYHn300ZQ/DN98801cdNFFaGpqYn+7733ve7jiiivWD6HHxsYwOjqKLVu2sFEsADA8PAyv14uGhoaMOpdSR876+vo1yz8UVFdsMplgsVigVCpZxlysB1Wm6rKBs6W8vr4+9mCO59ydDBBC0NXVBZ1Oh+rqavzwhz9EV1cXHn/88YwYHCDA+iA07WnV6/XYsWMHM/Dr6elh7XGZdGNSR85Ea990vI7ZbAYhBMXFxSgpKYk7C72aX3a6QW2fWlpazinlEULCfNVWOncnA4QQ1itfU1ODn/70p3jrrbfwu9/9LqOqFO9jfRB6dnYWXq8XExMTqKurg0ajQVdXFzZu3JhULW88SJYjp9/vZ+T2+/1hDSTREJNO6IzGLzvVoCWzaIwPVzp3J/KgW+29ent7oVarUVtbi//5n//Bq6++iqNHj2bU0U6A9UHol19+GZs3b4ZcLsfo6CicTifzzk53lpiCEIKxsTHY7XY0NTUlNSwMBoOwWCwwmUxwuVwwGAwsY74cuYW67Ex7AFIlX7wlM7Hq3ZGgRxOlUonNmzfj0UcfxXPPPYdnnnkmY7zmlsH6IPRDDz2EX/3qV/B4PHC73XjyySeh1+uZrrqgoIBlidNBbtpzzXEctm/fntJQlud51tO8tLTEzppGoxEymYzpsjNNMgl8MJu5tbVVlGiG1rvNZjPsdnvc524qI5bJZNiyZQsef/xx/O53v8Ozzz6bEd1mq2B9EBoA7rvvPrzyyivYu3cvXnzxRRBCcNVVV2H//v3MecRqtUKr1aK0tDRlyZPlHDnTBXrWpJ+FSqWCy+XCjh074m5KSRZinc0cK+I9d1OVIQBs3boVTz75JB555BEcP348pV5kcWL9EPr06dMslCWEYHZ2FseOHcPTTz8Nt9uNK6+8Evv27UNRURErAeXn57MSUDLITR05M/Esv7S0xGqmDocDOTk5LKmW7mkbdDZza2trShJLK527Iw0DqTl/MBjE9u3b8cwzz+BnP/sZjh8/nlH18FWwfgi94oUJgclkwtNPP81mA11xxRXYv38/ysvL2R9Ro9GwEpAYpYZYHDlTjeV02W63myXVaONESUlJyptDkj2bORqsdO42m83Mqur48eN48MEHcfz48aRpyG+99VY8//zzKCkpQXd3txiXXP+EjsTCwgJ+//vf49ixY5ibm8Nll12GAwcOoKqqipE7JycHpaWlMbU7CpGII2eyEY0um97QJpMJgUAg5ox5vKCzmVtaWjJGM0DP3XQG1l//+lcQQvDKK6/gxRdfTOpR5S9/+Qvy8/Nx0003SYSOBouLi3juuedw7NgxjI+P45Of/CQOHjyIuro69oQWGgRGE4rOz89jYmIiKY6ciSIeXXYgEGAZc4/HwzLmYquzMmE280oYGxuD0+lEQ0MDHn74YfziF7+AQqFAXV0dfvWrXyX17Dw+Po4rr7xSInSscDgcOH78OI4dO4aBgQF84hOfwP79+9HQ0BA2o5mSO3J3o3OwFhYWUuLIGSvE0GXToXAmk4llicWoHmTibGaK8fFx2O12NDY24s0338Q3v/lNPP/88ygrK8PQ0BDq6uqSGrVIhBYBbrcbL730Eo4dO4bOzk5cfPHF2L9/P1pbW5nckBASZu2bTkfO1UATOVT+Ktba6PQNk8nE9PPUcimWhxmdzdzY2JhRnxtw1qudur+eOHEC3/jGN/Dcc8+l1NtNIrTI8Hq9ePnll3H06FG89957uPDCC3Hw4EG0t7fDarVibm4OTqeTzafOpNJFqnTZdOIj1ZirVCqWYFzpmJKps5kppqamWLT13nvv4Y477sBzzz0XtYGkWJAInUT4/X689tprOHbsGP7617+itbUVXV1d+OEPf4iqqqqwJFJpaWlayU27f7RaLWpqalJa/6aWSxaLJWykLc2YZ+psZorp6WmYzWa0tLSgo6MD//iP/4hnnnkGNTU1KV+LROgUYWBgAFdddRUaGhowODiInTt34sCBA7jooovgcDgwPz8Pr9fLyj/JzhALQXXZxcXFKd9RIrHckAKXywWFQpFy1Vw0mJmZwdzcHFpaWtDb24svfvGLOHbsGLZs2ZLytdxwww3405/+BIvFgtLSUvzbv/0bPv/5zydySYnQK+Hll1+G0WjEzp07EQqF8H//9384evQoXn/9dTQ0NODAgQP4+Mc/znYrt9udEr/qTNZl08F/Xq8XCoUirf7dy2F2dhYzMzNobW3FwMAAbr31Vvzud7/D9u3b0700sSAROlbwPI933nkHTz75JF5++WVs2bIFBw4cwKWXXgqfz4f5+Xk4nU4YDAaUlpaKWv7JZF027UxSqVTYvHkz05jTfubCwkKUlJSIOqQgFszNzWF6ehptbW0YHh7GzTffjCeeeAKNjY0pX0sSIRE6EfA8j1OnTuHo0aN46aWXUFVVhX379uHyyy9HMBhk5R/qH6bX6+MmN/XYisUwIVWg87Vpn/Vy3xeOlBFjSEEsoCN92traMDExgRtvvBGPPfYYWltbk/7eKYZEaLFACEF3dzeefPJJvPDCCyguLsb+/fvxmc98BsDZm4p2Q5WWlsa0U8Xql51KLDebeTVEDilQq9UsY54MXbfZbMb4+DhaW1sxMzOD66+/Hr/4xS+we/du0d8rAyAROhkghKC/vx9Hjx7F888/j4KCAuzbtw+f+cxnoFQqWW2XmgPSVsflILZftpiIZzZzJJxOJxP2RDOkIBZYLBaMjo6ira0N8/PzuPbaa/Hwww/j/PPPT/jaGQqJ0MkGrccePXoUzz77LFQqFfbt24d9+/ZBrVazVsf8/HyUlpaGhaG0xbClpSXjHDLEmM0cCa/XyxpIQqEQqyDEUx6k+uy2tjZYLBZcc801ePDBB7Fnzx5R1pqhyExCf/3rX8dzzz2HnJwcbN68Gb/85S8z7twYD+hA96eeegpPP/00ALCebp1OF+b8qVAo4HK5UtZiGAuSNZtZCDoMjo71pe2O0WTMrVYrhoaG0NbWBpvNhquvvhoPPPAA9u7dm5S1ZhAyk9B//OMfsXfvXigUCtx1110AgPvvvz+B5WUeCCGYmZlhPd1er5f1dL/66qvYunUr1Go11Go1SktLk2rrGwtSNZtZiFAoxMi91pACm83G/MkcDgcOHTqE7373u7jssstSstY0IzMJLcTTTz+No0eP4vHHH4/3EhkP2tP91FNP4YEHHoBarcahQ4dw6NAhVFRULGvrmw6TgnTNZhYicqyvTqdjlksOhwP9/f1oa2uDy+XC1VdfjXvvvZclJpOFl156CXfccQdCoRC+8IUv4O67707q+62CzCf0VVddheuuuw6HDx+O9xLrBj/5yU8wMjKCe+65B88++yyOHTsGk8mEyy67DAcPHkR1dXVUnWHJQCbNZqYQDimgbqgAUFVVhdtuuw3f+MY3cPDgwaSuIRQKYevWrXj55ZdRWVmJ9vZ2/PrXvxZ1EmQMSN842UsvvRRzc3PnfP273/0u9u/fz/6/QqHAjTfemPgK1wFuu+02Nqfr85//PD7/+c9jcXERzz77LL7zne9gYmKC9XRv2bIFZrMZXV1dABDWGSY2MnU2M8dxLOxeWFhAU1MTfvnLX+L2229HUVFRWKkwWXjnnXdQV1fH6u/XX389fv/736eL0KIhZkK/8sorq37/kUcewfPPP49XX301I2SDqcByO21hYSFuuukm3HTTTbDb7Th+/Dh+8IMfYHBwkPV0NzY2wmKxoKenBzzPo7i4GKWlpaLYC2XqbGYKh8OB3t5etLa2IhQK4fXXX8f999+Pj370o3jmmWfgdruTSugzZ86E6ekrKyvx9ttvJ+39UgVRu/1feukl/Md//Af+/Oc/Z1ztNZ3Q6XS44YYbcMMNN8DtduPFF1/Ez372M3R1deGSSy7B/v370dbWhoWFBfT19SEYDCZU+snU2cwU1NetpaUFhBDccMMNuPnmm1lEd+TIkfQucB1DVEJ/5Stfgc/nwyc/+UkAwPnnn4+HH35YzLdY98jNzcXVV1+Nq6++mvV0P/bYYzhy5Ag++tGPsp5um82GoaEh+Hy+sLbPtaKeTJ3NTOF0OtHV1cVcUG644QZcd911uOWWW1K6joqKCkxNTbF/T09Pp9QgIVmQhCUZAtrTffToUZw4cQIf+chHcODAAVxwwQWw2+2Yn5+Hx+NhxoBarfYccmfqbGYKur6mpiYolUocPnwYn/70p/HlL3855cezYDCIrVu34tVXX0VFRQXa29vxxBNPoKGhIaXreB+Zn+WWED+CwSD+/Oc/4+jRo3jjjTewc+dO7N+/HxdffDFzIKGjdEpLS6HT6eByudDV1ZWRunHgg8ihoaEBarUaN998M/bs2YOvfe1racu1vPDCCzhy5AhCoRBuvfVW3HPPPWlZByRCn8WTTz6Jf/3Xf0VfXx/eeeedrBTuh0IhvPnmmzh27Bhef/11NDY24sCBA9i7dy/cbjfLCAcCAWzbtg1lZWUZl4ykZ/qGhgZoNBp8/vOfx65du3DXXXdl3FrTBInQAJgv1+23344HHnggKwktBM/zePvtt3H06FG8/PLL2Lp1K1paWnDq1Cncf//9WFpawtLSUtp7mIWg2fb6+nrk5+fj9ttvx7Zt23DvvfdKZP4AEqGFuOSSSz4UhBaC53k88sgjuOeee1BdXY2ysjLW083zfFhnGJ0ZlmpyR5L5q1/9KjZs2IDvfve7EpnDkT5hiYTMgEwmw+nTp3Hy5Els2LCB9XTv27cPJSUl2L9/P6644grI5XLMz89jaGgopQYFVNSyfft2aLVaHDlyBEVFRfjOd74jkTmJyPgdOhpl2odxh14J1CL46NGjOH78OAoKCphhg0qlCusMo80jYpPb7/fj1KlT2LJlCwoLC/GNb3wDcrkcP/rRj9J+BMhQSCG3EBKhlwe15T127BieffZZqNVq7Nu3D1dddRXy8vJY84iYAwEpmevq6qDX6/Gtb30LHo8HDz30kETmlSERWgiJ0GuD9nQfO3YMzzzzDDiOw1VXXYUDBw5Ap9Ox5pFEBgIGAgGcOnUKtbW1MBqN+Pa3vw2TyYSf//znGTcXK8MgERo426L51a9+FWazGYWFhWhtbcUf/vCHdC8r4xHZ0+3z+XDllVdi//79KCkpYV1QsQwEpGSuqalBUVER7rvvPoyPj+ORRx6RyLw2JEJLEAfCnu6nnnoKdrudzemurKxkZvy07XM537BgMIhTp06huroaxcXF+OEPf4iuri48/vjjGTccMEMhEVpCcmCxWNicbpPJhE9/+tPYv38/ampqWFjO8zzbuZVKJU6fPo2NGzeipKQEP/3pT3HixAn89re/TZlTSxYIjCRCpxoZ5G6RMthsNjane3JyEp/61Kdw4MABbNu2DRaLBXNzc3A4HNBoNMjLy8Nbb72FV199FceOHUupM0sWCIzEq+MRQlb7TwIhJBgMktraWjIyMkJ8Ph9pbm4mPT096V5WSrG0tESeeOIJcvXVV5Pm5mby1a9+lbS3t5M//elP5I9//CNpa2sjBoOB3HvvvaS/vz8ta7z44ovJyZMn0/LeCWItHkb9n3TAiQLZ6m4RC4Q93VarFZ/4xCeg0+nw1a9+FaWlpdBqteju7sZrr72GEydOYNu2bele8ocSEqGjQLa6W8SL7u5u/MM//ANuu+02eL1ePPjgg7j11ltRUlKSNNupaARGEiRCS4gDe/bsYcb3arU6JfmEtayvJJyFJN2JAtnqbiEh+yAROgq0t7djaGgIY2Nj8Pv9+M1vfoN9+/ale1kS3sfTTz+NyspKvPXWW/jMZz7zYTHnXxZS2SpKZJC7hYTsg1SHliAhiyAaoaWQW4KELIJE6AwGLQU1NjameykS1gkkQmcwbrnlFrz00kvpXoaEdQSJ0BmMPXv2ZOQYGwmZC4nQEiRkESRCS5CQRZAILUFCFkEitIS04+tf/zq2b9+O5uZmHDx4EIuLi+le0rrFWsISCWkEx3G/BnAJgCIA8wD+hRDyi7QuKgngOO5TAF4jhAQ5jrsfAAghd6V5WesSEqElZBQ4jjsI4O8IIcnpw8xySCG3hEzDrQBeTPci1iukfmgJ54DjuI0AHgNQirN6/v8mhPwowWu+AqBsmW/dQwj5/fs/cw+AIIDHE3mvDzOkkFvCOeA4rhxAOSHkbxzHaQG8B+AAIaQ3ie95C4DbAXyCEOJO1vtkO6SQW8I5IITMEkL+9v7/dwDoA5A0RweO4y4H8A0A+yQyJwZph5awKjiO2wTgLwAaCSH2JL3HMAAVgIX3v3SCEPKlZLxXtkM6Q0tYERzH5QM4BuBIssgMAISQumRd+8MGKeSWsCw4jlPiLJkfJ4Q8le71SIgOUsgt4RxwZyeyPwrASgg5kublSIgBEqElnAOO4z4G4A0AXQD497/8/wghL6RvVRKigURoCRKyCNIZWoKELIJEaAkSsggSoSVIyCJIhJYgIYsgEVqChCyCRGgJErIIEqElSMgi/P/kOfBIsdN+bQAAAABJRU5ErkJggg==" }, "metadata": { "needs_background": "light" } } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 248 }, "id": "Mj_FomdgidY6", "outputId": "4854e54d-15f4-404e-8905-e78c6d856b75" } }, { "cell_type": "markdown", "source": [ "Consider a counter-clockwise rotation of 90 degrees about the z-axis. " ], "metadata": { "id": "jjC1u2DnoB48" } }, { "cell_type": "code", "execution_count": 4, "source": [ "from scipy.spatial.transform import Rotation as R\n", "r = R.from_quat([0, 0, np.sin(np.pi/4), np.cos(np.pi/4)])\n", "r_axes3d = r.apply(axes_3d)\n", "\n", "ax = plt.figure().add_subplot(projection='3d')\n", "ax.set_xlim3d(-2, 2)\n", "ax.set_ylim3d(-2, 2)\n", "ax.set_zlim3d(-2, 2)\n", "\n", "plot_axes3d(origin_point, r_axes3d, ax)\n", "plt.legend()\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": { "needs_background": "light" } } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 248 }, "id": "Fk9fFXRMmRxN", "outputId": "79f08754-ab88-4652-f86d-437c6901a357" } }, { "cell_type": "code", "execution_count": 5, "source": [ "direction_3dvec = np.array([0, 1, 0])\n", "\n", "inv_direction_3dvec = r.inv().apply(direction_3dvec)\n", "inv_direction_3dvec.round()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([1., 0., 0.])" ] }, "metadata": {}, "execution_count": 5 } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "x2Zk3UoBoene", "outputId": "aa15952e-6ec4-4f1b-d14a-400616080fe9" } }, { "cell_type": "code", "execution_count": 6, "source": [ "ax = plt.figure().add_subplot(projection='3d')\n", "ax.set_xlim3d(-2, 2)\n", "ax.set_ylim3d(-2, 2)\n", "ax.set_zlim3d(-2, 2)\n", "\n", "ax.quiver(*origin_point, *direction_3dvec, length=1, color='g')\n", "ax.quiver(*origin_point, *inv_direction_3dvec, length=1)\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": { "needs_background": "light" } } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 248 }, "id": "uBHPChPApsYV", "outputId": "0634ff22-28b8-4114-94c1-bbef224c1397" } }, { "cell_type": "markdown", "source": [ "## 旋转向量\n", "已知两个向量$a,b$,两者之间的位姿变化$Ra=b$,可通过旋转向量求出:\n", "\n", "- 旋转角:$\\theta = \\arccos(\\frac{a \\cdot b}{|a||b|})$,根据 $a \\cdot b = |a| |b| \\cos(\\theta)$\n", "- 旋转轴:$n = \\frac{a \\times b}{|a \\times b|}$" ], "metadata": { "id": "77JpIOdaM43Y" } }, { "cell_type": "code", "execution_count": 7, "source": [ "def align_two_vectors(a, b):\n", " \"\"\" Get a rotation from a to b.\n", " @a: array_like, shape (3)\n", " @b: array_like, shape (3)\n", " \"\"\"\n", " theta = np.arccos(a @ b / (np.linalg.norm(a)*np.linalg.norm(b)))\n", " cross_vector = np.cross(a, b)\n", " norm = cross_vector / np.linalg.norm(cross_vector)\n", " #print(np.rad2deg(theta).round(3), norm)\n", "\n", " return theta * norm\n", "\n", "rotvec = align_two_vectors(direction_3dvec, inv_direction_3dvec)\n", "r = R.from_rotvec(rotvec)\n", "r.apply(direction_3dvec).round(), inv_direction_3dvec.round()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(array([1., 0., 0.]), array([1., 0., 0.]))" ] }, "metadata": {}, "execution_count": 7 } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "o9EnhloVs0jO", "outputId": "3b60b98f-f235-449b-f99d-aaac0982ca4b" } }, { "cell_type": "markdown", "source": [ "## 车辆与IMU运动关系" ], "metadata": { "id": "sy8bdwTUwHfo" } }, { "cell_type": "markdown", "source": [ "### 施密特正交化\n", "根据IMU静止时刻的加速度$b_g$构建Z轴:" ], "metadata": { "id": "42vhvLyOpKeb" } }, { "cell_type": "code", "execution_count": 8, "source": [ "w_x = np.array([1, 0, 0])\n", "w_y = np.array([0, 1, 0])\n", "w_z = np.array([0, 0, 1])\n", "b_g = np.array([1.2, 2.4, 1.61])\n", "\n", "b_z = b_g / np.linalg.norm(b_g)\n", "\n", "np.linalg.norm(b_z)" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0.9999999999999999" ] }, "metadata": {}, "execution_count": 8 } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9cT6Et3vPf9G", "outputId": "f19008a2-b995-4a76-e6ba-077c7180ab82" } }, { "cell_type": "markdown", "source": [ "通过施密特正交化构建X轴:" ], "metadata": { "id": "wbmp5edCvEuT" } }, { "cell_type": "code", "execution_count": 9, "source": [ "b_x = w_x - w_x @ b_z * b_z\n", "b_x = b_x / np.linalg.norm(b_x) # normalization\n", "\n", "np.linalg.norm(b_x)" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0.9999999999999999" ] }, "metadata": {}, "execution_count": 9 } ], "metadata": { "id": "lsB5NPSzRXZA" } }, { "cell_type": "markdown", "source": [ "通过XZ叉乘构建Y轴" ], "metadata": { "id": "D6mjHcAbvG3w" } }, { "cell_type": "code", "execution_count": 10, "source": [ "b_y = np.cross(b_x, b_z)\n", "b_y = b_y / np.linalg.norm(b_y) # normalization\n", "\n", "np.linalg.norm(b_x)" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "0.9999999999999999" ] }, "metadata": {}, "execution_count": 10 } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "APMKt2KQQ9zq", "outputId": "7586953b-5218-4837-85c3-486affea1ae1" } }, { "cell_type": "markdown", "source": [ "证明三个轴两两正交:" ], "metadata": { "id": "dvLpZ2-tulDI" } }, { "cell_type": "code", "execution_count": 11, "source": [ "for v1, v2 in zip((b_x, b_y, b_z), (b_y, b_z, b_x)):\n", " print((v1 @ v2).round(2))" ], "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0.0\n", "0.0\n", "0.0\n" ] } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "u4PFMezUsO9T", "outputId": "fe406f42-1857-474e-99f1-69aee25f6498" } }, { "cell_type": "markdown", "source": [ "### IMU坐标系与世界坐标系\n", "静止时,重力在世界坐标系下为$[0, 0, 1]^\\mathsf{T}$,在IMU坐标系下为$b_g$,设世界坐标系到IMU坐标系的旋转矩阵为$R_{wb}$,则:\n", "\n", "$$\n", "R_{wb}\n", "\\begin{bmatrix}\n", "0\\\\\n", "0\\\\\n", "1\n", "\\end{bmatrix} = b_g\n", "$$\n", "\n", "其中$R_{wb}[:,0] = b_x$,$R_{wb}[:,1] = b_y$,$R_{wb}[:,2] = b_z$。对应的,IMU坐标系到世界坐标系的旋转矩阵$R_bw$为:\n", "\n", "$$\n", "R_{bw} = R_{wb}^{-1} = R_{wb}^\\mathsf{T}\n", "$$\n", "\n", "其中$R_{bw}[0,:] = b_x$,$R_{bw}[1,:] = b_y$,$R_{bw}[2,:] = b_z$。\n", "\n", "IMU在世界坐标系下的姿态为$R_{bw}$" ], "metadata": { "id": "xx4xwlYVysyq" } }, { "cell_type": "code", "execution_count": 12, "source": [ "ax = plt.figure().add_subplot(projection='3d')\n", "ax.set_xlim3d(-2, 2)\n", "ax.set_ylim3d(-2, 2)\n", "ax.set_zlim3d(-2, 2)\n", "\n", "plot_axes3d(origin_point, np.vstack((b_x, b_y, b_z)), ax)\n", "plt.legend()\n", "plt.show()" ], "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": { "needs_background": "light" } } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 248 }, "id": "N8UdHg1srLMX", "outputId": "93cea635-4946-406d-8285-818bea7a1adb" } }, { "cell_type": "markdown", "source": [ "### 标定车辆和IMU相对位姿\n", "假设车辆朝正前方行驶,则正前方单位向量为$c_x = [1, 0, 0]$,若测得此时IMU的加速度为$v^b$,那么可以求得$R_{bc} v^b = c_x$。" ], "metadata": { "id": "LwF8q3nkvji7" } }, { "cell_type": "code", "execution_count": 13, "source": [ "v_b = np.array([2, 3, 4])\n", "c_w = np.array([1, 0, 0])\n", "R_bc = R.from_rotvec(align_two_vectors(v_b, c_w))\n", "\n", "R_bc.apply(v_b / np.linalg.norm(v_b)).round()" ], "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([1., 0., 0.])" ] }, "metadata": {}, "execution_count": 13 } ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "KW4PFhUg3uAd", "outputId": "3a650533-07c1-496d-edb0-e1435908d3dd" } } ], "metadata": { "colab": { "authorship_tag": "ABX9TyM/ngzZIs9HR1WBzTL0QLuk", "collapsed_sections": [], "include_colab_link": true, "name": "imu.ipynb", "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }