Learn practical skills, build real-world projects, and advance your career
if 'google.colab' in str(get_ipython()):
  from google.colab import drive
  drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
!pip3 install rosbag --extra-index-url https://rospypi.github.io/simple/
Looking in indexes: https://pypi.org/simple, https://rospypi.github.io/simple/ Requirement already satisfied: rosbag in /usr/local/lib/python3.7/dist-packages (1.15.11) Requirement already satisfied: genpy<2000 in /usr/local/lib/python3.7/dist-packages (from rosbag) (0.6.14) Requirement already satisfied: pycryptodome in /usr/local/lib/python3.7/dist-packages (from rosbag) (3.12.0) Requirement already satisfied: rospkg in /usr/local/lib/python3.7/dist-packages (from rosbag) (1.3.0) Requirement already satisfied: gnupg in /usr/local/lib/python3.7/dist-packages (from rosbag) (2.3.1) Requirement already satisfied: rospy in /usr/local/lib/python3.7/dist-packages (from rosbag) (1.15.11) Requirement already satisfied: genmsg in /usr/local/lib/python3.7/dist-packages (from rosbag) (0.5.12) Requirement already satisfied: pycryptodomex in /usr/local/lib/python3.7/dist-packages (from rosbag) (3.12.0) Requirement already satisfied: roslib in /usr/local/lib/python3.7/dist-packages (from rosbag) (1.14.7.post0) Requirement already satisfied: psutil>=1.2.1 in /usr/local/lib/python3.7/dist-packages (from gnupg->rosbag) (5.4.8) Requirement already satisfied: catkin in /usr/local/lib/python3.7/dist-packages (from roslib->rosbag) (0.7.18) Requirement already satisfied: catkin-pkg in /usr/local/lib/python3.7/dist-packages (from rospkg->rosbag) (0.4.24) Requirement already satisfied: PyYAML in /usr/local/lib/python3.7/dist-packages (from rospkg->rosbag) (3.13) Requirement already satisfied: distro in /usr/local/lib/python3.7/dist-packages (from rospkg->rosbag) (1.6.0) Requirement already satisfied: python-dateutil in /usr/local/lib/python3.7/dist-packages (from catkin-pkg->rospkg->rosbag) (2.8.2) Requirement already satisfied: docutils in /usr/local/lib/python3.7/dist-packages (from catkin-pkg->rospkg->rosbag) (0.17.1) Requirement already satisfied: pyparsing in /usr/local/lib/python3.7/dist-packages (from catkin-pkg->rospkg->rosbag) (3.0.6) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil->catkin-pkg->rospkg->rosbag) (1.15.0) Requirement already satisfied: roscpp in /usr/local/lib/python3.7/dist-packages (from rospy->rosbag) (1.15.11) Requirement already satisfied: rosgraph-msgs in /usr/local/lib/python3.7/dist-packages (from rospy->rosbag) (1.11.3.post2) Requirement already satisfied: std-msgs in /usr/local/lib/python3.7/dist-packages (from rospy->rosbag) (0.5.13.post0) Requirement already satisfied: rosgraph in /usr/local/lib/python3.7/dist-packages (from rospy->rosbag) (1.15.11) Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from rospy->rosbag) (1.19.5)
import rosbag
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import fftpack
Failed to load Python extension for LZ4 support. LZ4 compression will not be available.

Read slam data

def read_slam_data(path):

  bag = rosbag.Bag(path)

  conel_x, conel_y = [], []
  coner_x, coner_y = [], []
  car_x, car_y = [], []
  time = []

  for topic, msg, t in bag.read_messages(topics=['/cone_right', '/cone_left', '/pose_stamped']):
      time.append(t)
      if topic == "/cone_right":
          for pose in msg.poses:
              coner_x.append(pose.position.x)
              coner_y.append(pose.position.y)
      elif topic == "/cone_left":
          for pose in msg.poses:
              conel_x.append(pose.position.x)
              conel_y.append(pose.position.y)
      elif topic == "/pose_stamped":
          car_x.append(msg.pose.position.x)
          car_y.append(msg.pose.position.y)

  length = min(len(time), len(car_x), len(car_y))
  pose_dict = {'time': time[:length], 'x': car_x[:length], 'y': car_y[:length]}
  cone_l_dict = {'x': conel_x, 'y': conel_y}
  cone_r_dict = {'x': coner_x, 'y': coner_y}
  car_pose = pd.DataFrame(pose_dict)
  cone_l = pd.DataFrame(cone_l_dict)
  cone_r = pd.DataFrame(cone_r_dict)
  bag.close()

  return car_pose, cone_l.sort_values(by=['x']), cone_r.sort_values(by=['x'])

if 'google.colab' in str(get_ipython()):
  slam_bag_file_path = '/content/drive/MyDrive/SA/slam.bag'
else:
  slam_bag_file_path = '../data/slam.bag'

car_pose, cone_l, cone_r = read_slam_data(slam_bag_file_path)