463 lines
161 KiB
Text
463 lines
161 KiB
Text
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 49,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"backend = widget\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"import time\n",
|
||
|
|
"\n",
|
||
|
|
"#%matplotlib notebook\n",
|
||
|
|
"%matplotlib widget\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"import matplotlib.pyplot as plt\n",
|
||
|
|
"print(\"backend = \",plt.get_backend()) #prints \"widget\"\n",
|
||
|
|
"\n",
|
||
|
|
"from matplotlib.animation import FuncAnimation\n",
|
||
|
|
"import datetime\n",
|
||
|
|
"import matplotlib.dates as mdates\n",
|
||
|
|
"from collections import deque\n",
|
||
|
|
"import numpy as np\n",
|
||
|
|
"import os\n",
|
||
|
|
"import serial\n",
|
||
|
|
"import socket\n",
|
||
|
|
"import re\n",
|
||
|
|
"\n",
|
||
|
|
"PORT = \"COM43\"\n",
|
||
|
|
"PORT = \"/dev/ttytDAN\"\n",
|
||
|
|
"#PORT = \"/tmp/ttyJupyter\"\n",
|
||
|
|
"\n",
|
||
|
|
"# How many sensor samples we want to store\n",
|
||
|
|
"HISTORY_SIZE = 2500\n",
|
||
|
|
"\n",
|
||
|
|
"# Pause re-sampling the sensor and drawing for INTERVAL seconds\n",
|
||
|
|
"INTERVAL = 0.01\n",
|
||
|
|
"\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 9,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Sample time: 2026-04-28 12:59:10\n",
|
||
|
|
"Opened /dev/ttytDAN\n",
|
||
|
|
"[0.0, 0.0, 8192.0, 0.0, 0.0, 0.0, -159.0, 278.0, 465.0]\n",
|
||
|
|
"[0.0, 0.0, 8192.0, 0.0, 0.0, 0.0, -160.0, 281.0, 446.0]\n",
|
||
|
|
"[0.0, 0.0, 8192.0, 0.0, 0.0, 0.0, -156.0, 281.0, 447.0]\n",
|
||
|
|
"[0.0, 0.0, 8192.0, 0.0, 0.0, 0.0, -160.0, 281.0, 454.0]\n",
|
||
|
|
"[0.0, 0.0, 8192.0, 0.0, 0.0, 0.0, -158.0, 281.0, 455.0]\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"now = datetime.now()\n",
|
||
|
|
"serialport = None\n",
|
||
|
|
"\n",
|
||
|
|
"def get_imu_data():\n",
|
||
|
|
" global serialport\n",
|
||
|
|
" if not serialport:\n",
|
||
|
|
" # open serial port\n",
|
||
|
|
" serialport = serial.Serial(PORT, 115200, timeout=0.1)\n",
|
||
|
|
" # check which port was really used\n",
|
||
|
|
" print(\"Opened\", serialport.name)\n",
|
||
|
|
" # Flush input\n",
|
||
|
|
" time.sleep(3)\n",
|
||
|
|
" serialport.readline()\n",
|
||
|
|
"\n",
|
||
|
|
" # Poll the serial port\n",
|
||
|
|
" line = str(serialport.readline(), 'utf-8')\n",
|
||
|
|
" if not line:\n",
|
||
|
|
" return None\n",
|
||
|
|
" #print(line)\n",
|
||
|
|
" #if not \"Uni:\" in line:\n",
|
||
|
|
" # return None\n",
|
||
|
|
" if not \"Raw:\" in line:\n",
|
||
|
|
" return None\n",
|
||
|
|
" #vals = line.replace(\"Uni:\", \"\").strip().split(',')\n",
|
||
|
|
" vals = line.replace(\"Raw:\", \"\").strip().split(',')\n",
|
||
|
|
" #print(vals)\n",
|
||
|
|
" if len(vals) != 9:\n",
|
||
|
|
" return None\n",
|
||
|
|
" try:\n",
|
||
|
|
" vals = [float(i) for i in vals]\n",
|
||
|
|
" except ValueError:\n",
|
||
|
|
" return None\n",
|
||
|
|
" #print(vals)\n",
|
||
|
|
" return vals\n",
|
||
|
|
"# demonstrate capture works with a sample of 20 lines\n",
|
||
|
|
"print(\"Sample time: \",now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",
|
||
|
|
"for _ in range(5):\n",
|
||
|
|
" print(get_imu_data())"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"# Magnetometer data capture"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 11,
|
||
|
|
"metadata": {
|
||
|
|
"scrolled": true
|
||
|
|
},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"After closing port and before starting.\n",
|
||
|
|
"HOSTNAME: eos , PORT: /dev/ttytDAN\n",
|
||
|
|
"Plotting time start: 2026-04-28 13:01:52\n",
|
||
|
|
"Before show()\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
|
"model_id": "c9a046b15cfb46d7be8087b1d6be51ce",
|
||
|
|
"version_major": 2,
|
||
|
|
"version_minor": 0
|
||
|
|
},
|
||
|
|
"image/png": "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
|
||
|
|
"text/html": [
|
||
|
|
"\n",
|
||
|
|
" <div style=\"display: inline-block;\">\n",
|
||
|
|
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
|
||
|
|
" Figure\n",
|
||
|
|
" </div>\n",
|
||
|
|
" <img src='data:image/png;base64,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
|
||
|
|
" </div>\n",
|
||
|
|
" "
|
||
|
|
],
|
||
|
|
"text/plain": [
|
||
|
|
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Plotting time stopped (by user click or limit): 2026-04-28 13:01:52\n",
|
||
|
|
"After show()\n",
|
||
|
|
"After for i loop\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"\n",
|
||
|
|
"# Deque for axes\n",
|
||
|
|
"mag_x = deque(maxlen=HISTORY_SIZE)\n",
|
||
|
|
"mag_y = deque(maxlen=HISTORY_SIZE)\n",
|
||
|
|
"mag_z = deque(maxlen=HISTORY_SIZE)\n",
|
||
|
|
"\n",
|
||
|
|
"fig, ax = plt.subplots(1, 1)\n",
|
||
|
|
"ax.set_aspect(1)\n",
|
||
|
|
"\n",
|
||
|
|
"# close port in case its open\n",
|
||
|
|
"if serialport:\n",
|
||
|
|
" try:\n",
|
||
|
|
" serialport.close()\n",
|
||
|
|
" except NameError:\n",
|
||
|
|
" pass\n",
|
||
|
|
"print(\"After closing port and before starting.\")\n",
|
||
|
|
"serialport = None\n",
|
||
|
|
"anim = None\n",
|
||
|
|
"\n",
|
||
|
|
"def onClick(event):\n",
|
||
|
|
" if anim:\n",
|
||
|
|
" anim.event_source.stop()\n",
|
||
|
|
"\n",
|
||
|
|
"from datetime import datetime\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"def animate(i):\n",
|
||
|
|
" print(\"starting animate()\", i)\n",
|
||
|
|
"\n",
|
||
|
|
" for _ in range(i):\n",
|
||
|
|
" ret = get_imu_data()\n",
|
||
|
|
"\n",
|
||
|
|
" if not ret:\n",
|
||
|
|
" continue\n",
|
||
|
|
"\n",
|
||
|
|
" #print(\"MAG:\", ret[6:9])\n",
|
||
|
|
"\n",
|
||
|
|
" x, y, z = ret[6:9]\n",
|
||
|
|
" mag_x.append(x)\n",
|
||
|
|
" mag_y.append(y)\n",
|
||
|
|
" mag_z.append(z)\n",
|
||
|
|
"\n",
|
||
|
|
" ax.cla()\n",
|
||
|
|
" ax.set_aspect(1)\n",
|
||
|
|
"\n",
|
||
|
|
" ax.scatter(mag_x, mag_y, color='r')\n",
|
||
|
|
" ax.scatter(mag_y, mag_z, color='g')\n",
|
||
|
|
" ax.scatter(mag_z, mag_x, color='b')\n",
|
||
|
|
"\n",
|
||
|
|
" ax.set_title(f\"Mag samples: {len(mag_x)}\")\n",
|
||
|
|
"\n",
|
||
|
|
" if len(mag_x) == HISTORY_SIZE:\n",
|
||
|
|
" anim.event_source.stop()\n",
|
||
|
|
"\n",
|
||
|
|
"#animate(0)\n",
|
||
|
|
"\n",
|
||
|
|
"fig.canvas.mpl_connect('button_press_event', onClick) \n",
|
||
|
|
"anim = FuncAnimation(\n",
|
||
|
|
" fig,\n",
|
||
|
|
" animate,\n",
|
||
|
|
" interval=100,\n",
|
||
|
|
" cache_frame_data=False\n",
|
||
|
|
")\n",
|
||
|
|
"#hostname = os.environ.get(\"HOSTNAME\") # does not work as Jupyter inherit a limited number of ENV variables\n",
|
||
|
|
"hostname = socket.gethostname()\n",
|
||
|
|
"#hostname = \"SUSPENDED\"\n",
|
||
|
|
"print(\"HOSTNAME: \",hostname,\", PORT: \",PORT)\n",
|
||
|
|
"print(\"Plotting time start: \", datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"))\n",
|
||
|
|
"\n",
|
||
|
|
"print(\"Before show()\")\n",
|
||
|
|
"plt.show()\n",
|
||
|
|
"print(\"Plotting time stopped (by user click or limit): \", datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"))\n",
|
||
|
|
"print(\"After show()\")\n",
|
||
|
|
"#anim\n",
|
||
|
|
"#for i in range(2):\n",
|
||
|
|
"# animate(i)\n",
|
||
|
|
"\n",
|
||
|
|
"print(\"After for i loop\")"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "raw",
|
||
|
|
"metadata": {
|
||
|
|
"scrolled": true
|
||
|
|
},
|
||
|
|
"source": [
|
||
|
|
"min_x = min(mag_x)\n",
|
||
|
|
"max_x = max(mag_x)\n",
|
||
|
|
"min_y = min(mag_y)\n",
|
||
|
|
"max_y = max(mag_y)\n",
|
||
|
|
"min_z = min(mag_z)\n",
|
||
|
|
"max_z = max(mag_z)\n",
|
||
|
|
"\n",
|
||
|
|
"print(\"X range: \", min_x, max_x)\n",
|
||
|
|
"print(\"Y range: \", min_y, max_y)\n",
|
||
|
|
"print(\"Z range: \", min_z, max_z)\n",
|
||
|
|
"\n",
|
||
|
|
"mag_calibration = [ (max_x + min_x) / 2, (max_y + min_y) / 2, (max_z + min_z) / 2]\n",
|
||
|
|
"print(\"Final c userlibration in uTesla:\", mag_calibration)\n",
|
||
|
|
"\n",
|
||
|
|
"cal_mag_x = [x - mag_calibration[0] for x in mag_x]\n",
|
||
|
|
"cal_mag_y = [y - mag_calibration[1] for y in mag_y]\n",
|
||
|
|
"cal_mag_z = [z - mag_calibration[2] for z in mag_z]\n",
|
||
|
|
"\n",
|
||
|
|
"fig, ax = plt.subplots(1, 1)\n",
|
||
|
|
"ax.set_aspect(1)\n",
|
||
|
|
"\n",
|
||
|
|
"# Clear all axis\n",
|
||
|
|
"ax.cla()\n",
|
||
|
|
"\n",
|
||
|
|
"# Display the now calibrated data\n",
|
||
|
|
"ax.scatter(cal_mag_x, cal_mag_y, color='r')\n",
|
||
|
|
"ax.scatter(cal_mag_y, cal_mag_z, color='g')\n",
|
||
|
|
"ax.scatter(cal_mag_z, cal_mag_x, color='b')\n",
|
||
|
|
"fig.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"# Gyroscope offset calibration"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 46,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Put down the board and do not touch or move it!\n",
|
||
|
|
"3...2...1...COLLECTING GYRO DATA\n",
|
||
|
|
"Opened /dev/ttytDAN\n",
|
||
|
|
"Gyro X range: 0.0 0.0\n",
|
||
|
|
"Gyro Y range: 0.0 0.0\n",
|
||
|
|
"Gyro Z range: 0.0 0.0\n",
|
||
|
|
"Final calibration in rad/s: [0.0, 0.0, 0.0]\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
|
"model_id": "90098820a7df42229c092d2851cfdfa4",
|
||
|
|
"version_major": 2,
|
||
|
|
"version_minor": 0
|
||
|
|
},
|
||
|
|
"image/png": "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
|
||
|
|
"text/html": [
|
||
|
|
"\n",
|
||
|
|
" <div style=\"display: inline-block;\">\n",
|
||
|
|
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
|
||
|
|
" Figure\n",
|
||
|
|
" </div>\n",
|
||
|
|
" <img src='data:image/png;base64,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
|
||
|
|
" </div>\n",
|
||
|
|
" "
|
||
|
|
],
|
||
|
|
"text/plain": [
|
||
|
|
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
|
"model_id": "90098820a7df42229c092d2851cfdfa4",
|
||
|
|
"version_major": 2,
|
||
|
|
"version_minor": 0
|
||
|
|
},
|
||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXohJREFUeJzt3XtYVNXCP/DvcBsUBOQ6oICg5BW1MBDNyxscUTEvYSqaF45HT6ZmoqZYStqFU76VmibZe07qCfOWmpqHIvBSMd7QLFRICUXFAdFgEOS+fn/0Y58mRkXYw4Dz/TzPPDFrr7XX2rOCvq09e2+FEEKAiIiIiEyGmbEHQERERERNiwGQiIiIyMQwABIRERGZGAZAIiIiIhPDAEhERERkYhgAiYiIiEwMAyARERGRiWEAJCIiIjIxDIBEREREJoYBkIiIiMjEMAASERERmRgGQCIiIiITwwBIREREZGIYAImIiIhMDAMgERGATZs2QaFQ4PLly1LZ4MGDMXjwYOn94cOHoVAosGvXrqYfoMwUCgVef/11Yw+DiIyEAZCIDOr111+HQqFAQUGB3u09evTQCVn0X1u3bsXq1auNPQxotVq89dZb6NOnD+zt7aFUKuHt7Y3x48fjq6++MvbwiKgBLIw9ACKi5uqbb74xav9bt25Feno6Xn75ZaON4dKlSwgLC8OVK1cwZswYTJkyBba2trh69SoOHjyIESNGYMuWLZg8ebLRxkhED48BkIjoHqysrGTdX2lpKVq3bi3rPg2pqqoKY8aMQV5eHo4cOYL+/fvrbI+NjcU333yD6upqWforKSmBjY2NLPsiovvjKWAialZqv2e3Y8cOvPXWW2jfvj2sra0REhKCS5cu1al//PhxDB8+HG3btoWNjQ169uyJNWvWSNt/+uknTJs2Db6+vrC2toZKpcJf//pX3Lp164Fj+fN3AGtVV1dj6dKlUKlUsLGxwciRI3H16tU6bXv06IG0tDQMHDgQrVu3xtKlSwEAX375JcLDw+Hh4QGlUomOHTvijTfe0AlSgwcPxldffYUrV65AoVBAoVCgQ4cO0vby8nLExsaiU6dOUCqV8PT0xCuvvILy8nKdcZSXl2P+/PlwcXFBmzZtMHLkSFy7du2Bxw4AO3fuRHp6OpYtW1Yn/NUaMmQIhg0bBgD49ddfoVAo8MEHH9Spl5qaCoVCgc8//xzAf78acP78eUycOBFt27bFU089BeD34PnGG2+gY8eOUCqV6NChA5YuXVrn2Iio4bgCSETN0j/+8Q+YmZlh4cKFKCoqwrvvvotJkybh+PHjUp2kpCSMGDEC7u7umDdvHlQqFS5cuIADBw5g3rx5Up1ff/0VUVFRUKlUOHfuHDZu3Ihz587h2LFjUCgUDz22t956CwqFAosXL0Z+fj5Wr16N0NBQ/Pjjj2jVqpVU79atWxg2bBgmTJiA559/Hm5ubgB+v+DE1tYW0dHRsLW1RUpKCpYvXw6tVotVq1YBAF599VUUFRXh2rVrUqCytbUFANTU1GDkyJH4/vvvMXPmTHTt2hU///wzPvjgA/zyyy/Yu3evNIa//e1v+OyzzzBx4kT069cPKSkpCA8Pr9dx7t+/HwDw/PPP16u+r68v+vfvj4SEBMyfP19nW0JCAtq0aYNRo0bplD/33HPw8/PD22+/DSGENObNmzdj7NixWLBgAY4fP464uDhcuHABe/bsqddYiOgBBBGRAcXGxgoA4ubNm3q3d+/eXQwaNEh6f+jQIQFAdO3aVZSXl0vla9asEQDEzz//LIQQoqqqSvj4+Ahvb2/x22+/6eyzpqZG+rm0tLROn59//rkAII4ePSqVffrppwKAyM7OlsoGDRqkd2zt2rUTWq1WKt+xY4cAINasWaPTFoCIj4+v07++Mf39738XrVu3FmVlZVJZeHi48Pb2rlP33//+tzAzMxPfffedTnl8fLwAIH744QchhBA//vijACBefPFFnXoTJ04UAERsbGydff/R448/LhwcHOqU37lzR9y8eVN6FRUVSds+/vhjAUBcuHBBKquoqBDOzs5i6tSpUlntvxeRkZE6+64d89/+9jed8oULFwoAIiUl5b5jJqL64SlgImqWoqKidL6DN2DAAAC/n2YEgDNnziA7Oxsvv/wyHBwcdNr+cVXvjytyZWVlKCgoQN++fQEAp0+fbtDYpkyZgjZt2kjvx44dC3d3dxw8eFCnnlKpRFRUVJ32fxxTcXExCgoKMGDAAJSWliIjI+OB/e/cuRNdu3ZFly5dUFBQIL2efvppAMChQ4cAQBrPSy+9pNO+vheVaLVaadXxj1599VW4uLhIr4kTJ0rbxo0bB2trayQkJEhlX3/9NQoKCvSuJL7wwgs672vHHB0drVO+YMECAOBVx0QyYQAkIqPTdxrWy8tL533btm0BAL/99hsAICsrC8Dvt5G5n9u3b2PevHlwc3NDq1at4OLiAh8fHwBAUVFRg8br5+dXZ/ydOnXSuYcgALRr107vhSTnzp3DmDFjYG9vDzs7O7i4uEjhqD5junjxIs6dO6cTwlxcXPDYY48BAPLz8wEAV65cgZmZGTp27KjTvnPnzvU6zjZt2uDOnTt1yl988UUkJSUhKSlJOq1dy8HBAc888wy2bt0qlSUkJKBdu3ZSQP2j2rmoVTvmTp066ZSrVCo4ODjgypUr9Ro7Ed0fvwNIRAZlbW0NALh7967e7aWlpVKdPzI3N9dbX/z/74nV17hx45CamopFixahd+/esLW1RU1NDYYOHYqampqH2tfD+uNKX63CwkIMGjQIdnZ2WLlyJTp27Ahra2ucPn0aixcvrteYampq4O/vj/fff1/vdk9Pz0aPHQC6dOmCH3/8EdevX0e7du2k8scee0wKm/rmbsqUKdi5cydSU1Ph7++Pffv24cUXX4SZWd01B32fEaD/fwqISD4MgERkUN7e3gCAzMzMOsGktLQUV69exZAhQx56v7WrWunp6QgNDdVb57fffkNycjJWrFiB5cuXS+UXL1586P7+6M/thRC4dOkSevbs+cC2hw8fxq1bt7B7924MHDhQKs/Ozq5T914hqGPHjjh79ixCQkLuG5S8vb1RU1ODrKwsnVW/zMzMB44TAEaMGIFt27YhISEBr7zySr3aAMDQoUPh4uKChIQEBAUFobS0tN73Cawd88WLF9G1a1epPC8vD4WFhdK/T0TUODwFTEQGFRISAisrK2zYsKHO6tbGjRtRVVUl3UbkYTzxxBPw8fHB6tWrUVhYqLOtdpWwdhXxz6uGjX26xpYtW1BcXCy937VrF27cuFGv49A3poqKCnz00Ud16trY2Og9JTxu3Dhcv34dn3zySZ1td+/eRUlJCQBI41m7dq1Onfoe/7hx49CtWze88cYbOHbsmN46+lZkLSwsEBkZiR07dmDTpk3w9/evVzgGgOHDh+sdY+1qZ32vYCai++MKIBEZlKurK5YvX47XXnsNAwcOxMiRI9G6dWukpqbi888/x5AhQ/DMM8889H7NzMywYcMGPPPMM+jduzeioqLg7u6OjIwMnDt3Dl9//TXs7OwwcOBAvPvuu6isrES7du3wzTff6F1texiOjo546qmnEBUVhby8PKxevRqdOnXCjBkzHti2X79+aNu2LaZOnYqXXnoJCoUC//73v/UGqYCAAGzfvh3R0dF48sknYWtri2eeeQaTJ0/Gjh078MILL+DQoUPo378/qqurkZGRgR07duDrr79Gnz590Lt3b0RGRuKjjz5CUVER+vXrh+TkZL33U9TH0tISe/bsQVhYGJ566ik8++yzGDBgAGxsbHD9+nXs27cPOTk5ekPZlClTsHbtWhw6dAjvvPNOvfoDgF69emHq1KnYuHGjdLr8xIkT2Lx5M0aPHo3/+Z//qfe+iOg+jHgFMhGZkM8++0z07dtX2NjYCKVSKbp06SJWrFihc9sTIf57q5WdO3fqlGdnZwsA4tNPP9Up//7778Vf/vIX0aZNG2FjYyN69uwpPvzwQ2n7tWvXxJgxY4SDg4Owt7cXzz33nMjNza1zG5SHuQ3M559/LmJiYoSrq6to1aqVCA8
|
||
|
|
"text/html": [
|
||
|
|
"\n",
|
||
|
|
" <div style=\"display: inline-block;\">\n",
|
||
|
|
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
|
||
|
|
" Figure\n",
|
||
|
|
" </div>\n",
|
||
|
|
" <img src='data:image/png;base64,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
|
||
|
|
" </div>\n",
|
||
|
|
" "
|
||
|
|
],
|
||
|
|
"text/plain": [
|
||
|
|
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"print(\"Put down the board and do not touch or move it!\")\n",
|
||
|
|
"for s in range(3, 0, -1):\n",
|
||
|
|
" print(s, end='...')\n",
|
||
|
|
" time.sleep(1)\n",
|
||
|
|
"print(\"COLLECTING GYRO DATA\")\n",
|
||
|
|
"\n",
|
||
|
|
"# close port in case its open\n",
|
||
|
|
"if serialport:\n",
|
||
|
|
" try:\n",
|
||
|
|
" serialport.close()\n",
|
||
|
|
" except NameError:\n",
|
||
|
|
" pass\n",
|
||
|
|
"\n",
|
||
|
|
"serialport = None\n",
|
||
|
|
"\n",
|
||
|
|
"# Deque for axes\n",
|
||
|
|
"gyro_x = deque(maxlen=HISTORY_SIZE//10)\n",
|
||
|
|
"gyro_y = deque(maxlen=HISTORY_SIZE//10)\n",
|
||
|
|
"gyro_z = deque(maxlen=HISTORY_SIZE//10)\n",
|
||
|
|
"while len(gyro_x) < (HISTORY_SIZE//10):\n",
|
||
|
|
" ret = get_imu_data()\n",
|
||
|
|
" #print(ret)\n",
|
||
|
|
" if not ret:\n",
|
||
|
|
" continue\n",
|
||
|
|
" x, y, z = ret[3:6]\n",
|
||
|
|
" gyro_x.append(x)\n",
|
||
|
|
" gyro_y.append(y)\n",
|
||
|
|
" gyro_z.append(z)\n",
|
||
|
|
"\n",
|
||
|
|
"for _ in range(3):\n",
|
||
|
|
" gyro_x.popleft()\n",
|
||
|
|
" gyro_y.popleft()\n",
|
||
|
|
" gyro_z.popleft()\n",
|
||
|
|
"\n",
|
||
|
|
"min_x = min(gyro_x)\n",
|
||
|
|
"max_x = max(gyro_x)\n",
|
||
|
|
"min_y = min(gyro_y)\n",
|
||
|
|
"max_y = max(gyro_y)\n",
|
||
|
|
"min_z = min(gyro_z)\n",
|
||
|
|
"max_z = max(gyro_z)\n",
|
||
|
|
"\n",
|
||
|
|
"print(\"Gyro X range: \", min_x, max_x)\n",
|
||
|
|
"print(\"Gyro Y range: \", min_y, max_y)\n",
|
||
|
|
"print(\"Gyro Z range: \", min_z, max_z)\n",
|
||
|
|
"\n",
|
||
|
|
"gyro_calibration = [ (max_x + min_x) / 2, (max_y + min_y) / 2, (max_z + min_z) / 2]\n",
|
||
|
|
"print(\"Final calibration in rad/s:\", gyro_calibration)\n",
|
||
|
|
"\n",
|
||
|
|
"fig, (uncal, cal) = plt.subplots(2, 1)\n",
|
||
|
|
"\n",
|
||
|
|
"# Clear all axis\n",
|
||
|
|
"uncal.cla()\n",
|
||
|
|
"t = np.linspace(0, len(gyro_x), len(gyro_x))\n",
|
||
|
|
"# plot uncalibrated data\n",
|
||
|
|
"uncal.plot(t, gyro_x, color='r')\n",
|
||
|
|
"uncal.plot(t, gyro_y, color='g')\n",
|
||
|
|
"uncal.plot(t, gyro_z, color='b')\n",
|
||
|
|
"uncal.title.set_text(\"Uncalibrated Gyro\")\n",
|
||
|
|
"uncal.set(ylabel='Radians/s')\n",
|
||
|
|
"# plot calibrated data\n",
|
||
|
|
"cal.plot(t, [x - gyro_calibration[0] for x in gyro_x], color='r')\n",
|
||
|
|
"cal.plot(t, [y - gyro_calibration[1] for y in gyro_y], color='g')\n",
|
||
|
|
"cal.plot(t, [z - gyro_calibration[2] for z in gyro_z], color='b')\n",
|
||
|
|
"cal.title.set_text(\"Calibrated Gyro\")\n",
|
||
|
|
"cal.set(ylabel='Radians/s')\n",
|
||
|
|
"\n",
|
||
|
|
"fig.tight_layout()\n",
|
||
|
|
"fig.show()\n",
|
||
|
|
"serialport.close()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": []
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"metadata": {
|
||
|
|
"kernelspec": {
|
||
|
|
"display_name": "Python 3 (ipykernel)",
|
||
|
|
"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.13.12"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 4
|
||
|
|
}
|