--- title: "animate_imu" output: rmarkdown::html_vignette description: Learn how to use `animate_imu()` function to generate a 3-D animation of a time series of orientations of an inertial measurement unit. vignette: > %\VignetteIndexEntry{animate_imu} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Introduction This vignette describes how one may generate a 3-D animation of a time series of orientations of an inertial measurement unit (IMU). We first follow the steps described in `vignette("imuf")` to generate a time series of orientations using the `walking_shin_1` dataset: ```{r setup, message = FALSE} library(imuf) library(purrr) # lst_ned_in <- as.list(as.data.frame(t(walking_shin_1))) %>% unname dt <- 1/50 # myCompUpdate <- function(initQ, accgyr) { acc <- accgyr[1:3] gyr <- accgyr[4:6] gain <- 0.1 orientation <- compUpdate(acc, gyr, dt, initQ, gain) orientation } # orientations <- purrr::accumulate(lst_ned_in, myCompUpdate, .init = c(1, 0, 0, 0)) # head(orientations) ``` ## 3-D animation of IMU orientations Next we use the `animate_imu()` function to visualize a 3-D animation of the orienations. ```{r} # # time increment for animation needs to be in milli-seconds animate_imu(orientations, dt*1000) ``` ## 3-D animation of IMU orientations within Shiny We will now illustrate how one may display the 3-D animation in Shiny. ```{r} library(shiny) ui = pageWithSidebar( headerPanel("render an IMU animation example"), sidebarPanel(actionButton("do", "See animation")), mainPanel(animate_imuOutput('orientations')) ) server = function(input, output, session) { observeEvent(input$do, { output$orientations <- renderAnimate_imu( animate_imu(orientations, dt*1000) ) }) } shinyApp(ui = ui, server = server) ```