diff --git a/.obsidian/plugins/text-extractor/cache/19bf7bae4584f22d8d824ea9198ecda3.json b/.obsidian/plugins/text-extractor/cache/19bf7bae4584f22d8d824ea9198ecda3.json new file mode 100644 index 0000000..a75f843 --- /dev/null +++ b/.obsidian/plugins/text-extractor/cache/19bf7bae4584f22d8d824ea9198ecda3.json @@ -0,0 +1 @@ +{"path":"Attachments/Pasted image 20250612230104 1.png","text":"W 1 0 ° sin@ cos ¢ B(, 1:9 = c050 0 cospcosO —sin@cos0 W, ® cos@ sin¢sinf cos ¢ sin 0 W3 —— — — B 7 D 17e Û”V‘Ôîô }: j;] B/ N B/‚oß v3 ]y","libVersion":"0.3.2","langs":"deu+eng+fra"} \ No newline at end of file diff --git a/.obsidian/plugins/text-extractor/cache/27f380e86244d5c5dcc79cac6cf90fde.json b/.obsidian/plugins/text-extractor/cache/27f380e86244d5c5dcc79cac6cf90fde.json new file mode 100644 index 0000000..b2dcde3 --- /dev/null +++ b/.obsidian/plugins/text-extractor/cache/27f380e86244d5c5dcc79cac6cf90fde.json @@ -0,0 +1 @@ +{"path":"Attachments/Pasted image 20250612225625.png","text":"A E L AR _ 20 f{ 'lï I L 0 L IN LR | | Ë 'l_ id M “'l | A IM CIN | ä °|{ ‘N e e e ST","libVersion":"0.3.2","langs":"deu+eng+fra"} \ No newline at end of file diff --git a/.obsidian/plugins/text-extractor/cache/95e163ec3e8e9050cfaaa2193f8941bd.json b/.obsidian/plugins/text-extractor/cache/95e163ec3e8e9050cfaaa2193f8941bd.json new file mode 100644 index 0000000..d78e4c4 --- /dev/null +++ b/.obsidian/plugins/text-extractor/cache/95e163ec3e8e9050cfaaa2193f8941bd.json @@ -0,0 +1 @@ +{"path":"Attachments/Pasted image 20250612230104.png","text":"W 1 0 ° sin@ cos ¢ B(, 1:9 = c050 0 cospcosO —sin@cos0 W, ® cos@ sin¢sinf cos ¢ sin 0 W3 —— — — B 7 D 17e Û”V‘Ôîô }: j;] B/ N B/‚oß v3 ]y","libVersion":"0.3.2","langs":"deu+eng+fra"} \ No newline at end of file diff --git a/.obsidian/plugins/text-extractor/cache/b57b2074137d041e1b90d3b0c0e54e0e.json b/.obsidian/plugins/text-extractor/cache/b57b2074137d041e1b90d3b0c0e54e0e.json new file mode 100644 index 0000000..d5bbb6c --- /dev/null +++ b/.obsidian/plugins/text-extractor/cache/b57b2074137d041e1b90d3b0c0e54e0e.json @@ -0,0 +1 @@ +{"path":"Attachments/Pasted image 20250612230042.png","text":"W 0 - sing cos® | B w, 0 =à 0 cos¢cosf —sinw@cos0 W, ® cos0 singsinf — cos®sin0 | \\w, qyYyce quves l Lz &“ 38","libVersion":"0.3.2","langs":"deu+eng+fra"} \ No newline at end of file diff --git a/.obsidian/plugins/text-extractor/cache/fc6628ddefe8ab0bf9813594d700a2c0.json b/.obsidian/plugins/text-extractor/cache/fc6628ddefe8ab0bf9813594d700a2c0.json new file mode 100644 index 0000000..047f5ac --- /dev/null +++ b/.obsidian/plugins/text-extractor/cache/fc6628ddefe8ab0bf9813594d700a2c0.json @@ -0,0 +1 @@ +{"path":"Attachments/Pasted image 20250612230414.png","text":"S Roll Pitch ‘ 40 40 .…, 3 30 30 ’“ ] 3 20 I _ 20 ( _2 . Il l | …L E e — NN g < AR 1 \\ ‘ “ = Ë:;: I W Ë:;Z Ë1: -30 -30 | -40 -40 : 0 100 200 300 400 0 100 200 300 400 time (s) time (s)","libVersion":"0.3.2","langs":"deu+eng+fra"} \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 90e8dd1..e9aff22 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -299,8 +299,13 @@ "periodic-notes:Open today": false } }, - "active": "b2f0aff0beb8228f", + "active": "84f0fd68d3885e08", "lastOpenFiles": [ + "Attachments/Pasted image 20250612230414.png", + "Attachments/Pasted image 20250612230104 1.png", + "Attachments/Pasted image 20250612230104.png", + "Attachments/Pasted image 20250612230042.png", + "Attachments/Pasted image 20250612225625.png", "Attachments/Pasted image 20250612221908.png", "99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/kalman_filter.excalidraw.md", "99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md", @@ -318,7 +323,6 @@ "Attachments/Pasted image 20250604104428.png", "Attachments/Pasted image 20250604104422.png", "99 Work/0 OneSec/OneSecThoughts/Status Quo OneSec.md", - "Attachments/Pasted image 20250529200716.png", "2 Personal/1 Skills/IT/Supabase Learnings.md", "0 Journal/0 Daily/2025-05-24.md", "2 Personal/1 Skills/IT", @@ -343,10 +347,6 @@ "2 Personal/Lists/Packlisten/Packliste - Berge Mehrtages.md", "2 Personal/Hobbies/Berge/Gletscherkurs/Gletscherkurs - Selbstudie.md", "2 Personal/Home Lab/Repairshop/Repair Climbing Light.md", - "Attachments/Pasted image 20250402091926.png", - "Attachments/Pasted image 20250331151348.png", - "Attachments/IMG_5894.jpeg", - "Attachments/image 16.jpg", "99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Computer Science/Untitled.canvas", "Dashboard Canvas.canvas", "8 Work/OneSecNotes/Temporary/Untitled.canvas" diff --git a/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md b/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md index 711b812..9175fac 100644 --- a/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md +++ b/99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Robotics/Kalman Filter.md @@ -65,6 +65,18 @@ $$ x_k \sim \mathcal{N}(\hat{x}_k, P_k)$$ - Q: is the process noise: it's just there you cannot really get rid of it $$ \hat{x}^-_k = A \hat{x}_{k-1}$$ $$ P_k^- = AP_{k-1} A^T + Q$$ + +$$Q=\begin{pmatrix} + +\sigma_{1}^{2} & 0              & \cdots & 0\\ + +0              & \sigma_{2}^{2} & \ddots & \vdots\\ + +\vdots         & \ddots         & \ddots & 0\\ + +0              & \cdots         & 0      & \sigma_{n}^{2} + +\end{pmatrix}$$, where $\sigma_i^2$ is the variance of the process noise ### Estimation Step #### II. Compute Kalman Gain This is the dynamic update of the Kalman gain. @@ -86,7 +98,27 @@ Note: - $H$: is the measurement noise: you can control it with better sensors -### Simple Example +## Dynamic Attitude Determination +Sensors: +- Gyroscope and accelerometer + +Lets integrate the gyro data to visualize what we could do to get the attitude. +![[Pasted image 20250612230104 1.png]] +As we can see below, there is a lot of drift meaning the numerical integration is no good. +![[Pasted image 20250612230414.png]] + +System Model + +## Key Takeaways + +Use the Kalman filter to estimate velocity from position samples. Its much more precise than a simple derivative. +![[Pasted image 20250612225625.png]] + + +Why do IMUs have gyro and accelerometers? Because they work really well together. The gyro is fast and gives quite good data on a short time horizon, but has terrible drift. On contrary, the accelerometer is quite noisy, but gives a true value about attitude, because it can measure gravity. Thus with accelerometer measurmenets every now and then, you can fix the gyro drift and estimate it to fix it. +Accelerometer data can give you pitch and roll. --> this is used in the kalman filter to update the estimates --> sensor fusion +Magnetometer data can give you yaw. + --- ## Sources diff --git a/Attachments/Pasted image 20250612225625.png b/Attachments/Pasted image 20250612225625.png new file mode 100644 index 0000000..1e1c7ee Binary files /dev/null and b/Attachments/Pasted image 20250612225625.png differ diff --git a/Attachments/Pasted image 20250612230042.png b/Attachments/Pasted image 20250612230042.png new file mode 100644 index 0000000..564a257 Binary files /dev/null and b/Attachments/Pasted image 20250612230042.png differ diff --git a/Attachments/Pasted image 20250612230104 1.png b/Attachments/Pasted image 20250612230104 1.png new file mode 100644 index 0000000..f869a03 Binary files /dev/null and b/Attachments/Pasted image 20250612230104 1.png differ diff --git a/Attachments/Pasted image 20250612230104.png b/Attachments/Pasted image 20250612230104.png new file mode 100644 index 0000000..f869a03 Binary files /dev/null and b/Attachments/Pasted image 20250612230104.png differ diff --git a/Attachments/Pasted image 20250612230414.png b/Attachments/Pasted image 20250612230414.png new file mode 100644 index 0000000..2fc6658 Binary files /dev/null and b/Attachments/Pasted image 20250612230414.png differ