Skip to content

Reads in logs to processable format from mavlogdump.py

Notifications You must be signed in to change notification settings

Tille88/FLB.logfile.utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

FLB.logfile.utils

Reads in logs to processable format from mavlogdump.py

Installation

devtools::install_github("Tille88/FLB.logfile.utils/FLB.logfile.utils")

Get logfile from binary example

$ mavlogdump.py logfile.tlog > outputfile.txt

Example code of usage

# Example of usage
library(FLB.logfile.utils)
library(readr)
library(stringr)
library(data.table)
library(dplyr)
library(tidyr)
library(ggplot2)
library(corrplot)
library(RColorBrewer)


path = "~/Desktop/reading_in_logs/x5_1_log_flight_15_09_to_15_15_from_16_39_file.txt"
# Read in log
log_df = read_in_log(path)

# Extract full variable lookup table by category and view
extract_variable_lookup(log_df) %>% View()

# Split log df into list of dfs
separate_dfs = split_separate_dfs(log_df)

# Extract single category df in wide format
attitude_df = extract_variables_wide(separate_dfs$ATTITUDE)

# Get summary statistics
attitude_df %>% summary()
# If also want e.g. standard deviation
attitude_df %>% summarise(sd = sd(pitchspeed))

# Extract all in wide format
log_df_wide_list = extract_all_in_wide(separate_dfs)
# Get specific one from list
attitude_df = log_df_wide_list$ATTITUDE
# Quick plot example
# All vars
plot(attitude_df)
#Single variable against time
plot(attitude_df$posix_time, attitude_df$yaw)

# Convert single dataframe to long format
#(e.g. for plotting and not having to interpolate between values)
attitude_long = attitude_df %>% gather(key = variables, value = values, -1) %>% head()

# Combine two dfs in long format and pick specific variables
df_1 = log_df_wide_list$ATTITUDE %>%
  gather(key = variables, value = values, -1)
df_2 = log_df_wide_list$GLOBAL_POSITION_INT %>%
  gather(key = variables, value = values, -1)
combined = rbind(df_1, df_2)  

#Selecting variables at this stage
# Inefficient, but for different plots, you may want to plot different subsets easy
combined_subset = combined %>% filter(variables %in%  c("roll", "rollspeed", "alt"))

# Plots over time
ggplot(combined_subset, aes(posix_time, values)) +
        geom_point(size=0.2) +
        geom_line() +
        facet_grid(variables ~ ., scales = "free_y")

# Connected scatterplot
# Need data in wide format
# If combining categories
#frequency differ, so must deal with that through e.g. interpolation  
global_pos_df = log_df_wide_list$GLOBAL_POSITION_INT

ggplot(global_pos_df, aes(lat,
                          lon,
                          colour=relative_alt)) +
  geom_path()

# Get correlation plot between variables (wide form)
corr_mat=cor(global_pos_df %>% select(-c(1,2)),method="s")
# From http:https://rpubs.com/melike/corrplot
corrplot(corr_mat, method = "color", outline = T,
         addgrid.col = "darkgray", order="hclust",
         addrect = 4, rect.col = "black",
         rect.lwd = 5,cl.pos = "b", tl.col = "indianred4",
         tl.cex = 1.5, cl.cex = 1.5, addCoef.col = "white",
         number.digits = 2, number.cex = 0.75,
         col = colorRampPalette(c("darkred","white","midnightblue"))(100))

About

Reads in logs to processable format from mavlogdump.py

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages