âimufâ uses complementary filtering to estimate the orientation of an inertial measurement unit (IMU) with a 3-axis accelerometer and a 3-axis gyroscope. It takes the IMUâs accelerometer and gyroscope readings, time duration, its initial orientation, and a âgainâ factor as inputs, and provides an estimate of the final orientation as outputs.
âimufâ adopts the north-east-down (NED) coordinate system. The initial and final orientations are expressed as quaternions in (w, x, y, z) convention.
InstallationYou can install the development version of imuf from GitHub with:
# install.packages("pak")
pak::pak("gitboosting/imuf")
Example
This is a basic example which shows you how to solve a common problem:
library(imuf)
#
acc <- c(0, 0, -1) # accelerometer NED readings in g (~ 9.81 m/s^2)
gyr <- c(1, 0, 0) # gyroscope NED readings in radians per second
deltat <- 0.1 # time duration in seconds
initq <- c(1, 0, 0, 0) # initial orientation expressed as a quaternion
gain <- 0.1 # a weight (0-1) given to the accelerometer readings
#
# final orientation expressed as a quaternion
(final <- compUpdate(acc, gyr, deltat, initq, gain))
#> [1] 0.99898767 0.04498481 0.00000000 0.00000000
#
#
# rotate a vector pointing east by 90 deg about north
q <- c(cos(pi/4), sin(pi/4), 0, 0) # quaternion to rotate 90 deg about north
vin <- c(0, 1, 0) # vector in east direction
(vout <- rotV(q, vin)) # after rotation, vector is in down direction
#> [1] 0.000000e+00 2.220446e-16 1.000000e+00
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4