Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
25e0ce228This file is pinned to the selected release. Download the original to open it in your design tool.
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sat May 27 10:54:41 2017
@author: pach0
"""
import matplotlib.pyplot as plt
import pandas as pd
from numpy import linalg as LA
class DatasetImporter(object):
def __init__(self, filename, fill_na=False, filter_data=True):
self.filename = filename
self.fill_na = fill_na
self.time = 'time'
self.gt_x = '_bicycle_odom_rear_wheel.pose.pose.position.x'
self.gt_y = '_bicycle_odom_rear_wheel.pose.pose.position.y'
self.gt_z = '_bicycle_odom_rear_wheel.pose.pose.position.z'
self.gt_v = '_bicycle_odom_rear_wheel.twist.twist.linear.x'
self.gt_psi = '_imu_lean_yaw.data'
self.gt_phi = '_imu_lean_pitch.data'
self.gt_delta = '_imu_steering_yaw.data'
self.sim_xf = '_bicycle_odom_gps_front.pose.pose.position.x'
self.sim_xr = '_bicycle_odom_gps_rear.pose.pose.position.x'
self.sim_yf = '_bicycle_odom_gps_front.pose.pose.position.y'
self.sim_yr = '_bicycle_odom_gps_rear.pose.pose.position.y'
self.sim_zf = '_bicycle_odom_gps_front.pose.pose.position.z'
self.sim_zr = '_bicycle_odom_gps_rear.pose.pose.position.z'
self.sim_za = '_bicycle_altitude.altitude'
self.sim_v_x = '_bicycle_gps_rear_velocity.vector.x'
self.sim_v_y = '_bicycle_gps_rear_velocity.vector.y'
self.sim_v = 'velocity'
self.sim_psi = '_imu_lean_noise_yaw.data'
self.sim_phi = '_imu_lean_noise_pitch.data'
self.sim_delta = '_imu_steering_noise_yaw.data'
self.linear_a_x = '_bicycle_imu_1.linear_acceleration.x'
self.linear_a_y = '_bicycle_imu_1.linear_acceleration.y'
self.linear_a = 'linear_a'
self.angular_vel_phi = '_bicycle_imu_1.angular_velocity.y'
self.angular_vel_delta = '_bicycle_imu_steering.angular_velocity.y'
self.data = pd.read_csv(self.filename, na_filter=True, parse_dates=[self.time]) \
.drop_duplicates(subset=[self.time])
if filter_data:
self.data = self.data.filter(items=[self.time, self.gt_x, self.gt_y, self.gt_z, self.gt_v,
self.gt_psi, self.gt_phi, self.gt_delta,
self.sim_xf, self.sim_xr, self.sim_yf, self.sim_yr,
self.sim_zf, self.sim_zr, self.sim_za,
self.sim_v_x, self.sim_v_y,
self.sim_psi, self.sim_phi, self.sim_delta,
self.linear_a_x, self.linear_a_y, self.angular_vel_phi,
self.angular_vel_delta])
# if self.fill_na:
self.data = self.data.fillna(method='pad') # fill forward
self.data = self.data.fillna(method='bfill') # fill backward
self.data[self.sim_v] = self.data.apply(self.compute_velocity, axis=1)
# Set time as index in dataset
self.data['time_index'] = pd.to_datetime(self.data['time'])
self.data = self.data.set_index('time_index', drop=True, verify_integrity=True)
self.data['time'] = self.data.index
def compute_velocity(self, row):
return LA.norm([row[self.sim_v_x], row[self.sim_v_y]])
def plot_dataset(self):
fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(15, 15))
self.data.plot(x=self.gt_x, y=self.gt_y, ax=axes[0, 0], kind='scatter', use_index=False, legend=False)
self.data.plot(x=self.sim_xf, y=self.sim_yf, ax=axes[0, 0], kind='scatter', use_index=False, legend=False)
self.data.plot(x=self.sim_xr, y=self.sim_yr, ax=axes[0, 0], kind='scatter', use_index=False, legend=False)
axes[0, 0].set_title('x-y (path)')
self.data.plot(x=self.time, y=self.sim_psi, ax=axes[0, 1], legend=True)
self.data.plot(x=self.time, y=self.sim_phi, ax=axes[0, 1], legend=True)
self.data.plot(x=self.time, y=self.sim_delta, ax=axes[0, 1], legend=True)
axes[0, 1].set_title('angles')
self.data.plot(x=self.time, y=self.gt_x, ax=axes[1, 0], legend=True)
self.data.plot(x=self.time, y=self.sim_xf, ax=axes[1, 0], legend=True)
self.data.plot(x=self.time, y=self.sim_xr, ax=axes[1, 0], legend=True)
self.data.plot(x=self.time, y=self.gt_y, ax=axes[1, 0], legend=True)
self.data.plot(x=self.time, y=self.sim_yf, ax=axes[1, 0], legend=True)
self.data.plot(x=self.time, y=self.sim_yr, ax=axes[1, 0], legend=True)
axes[1, 0].set_title('x-y (time)')
self.data.plot(x=self.time, y=self.gt_v, ax=axes[1, 1], legend=True)
self.data.plot(x=self.time, y=self.sim_v, ax=axes[1, 1], legend=True)
axes[1, 1].set_title('v')
self.data.plot(x=self.time, y=self.linear_a, ax=axes[2, 0], legend=True)
axes[2, 0].set_title('linear a')
self.data.plot(x=self.time, y=self.angular_vel_phi, ax=axes[2, 1], legend=True)
self.data.plot(x=self.time, y=self.angular_vel_delta, ax=axes[2, 1], legend=True)
axes[2, 1].set_title('angular vel')