Yukti Kathuria
Yukti Kathuria

Reputation: 61

How to convert csv to rosbag?

I have a csv file that I want to convert into rosbag as I am trying to use a package written in ROS. The goal is to perform sensor fusion using an extended kalman filter and my csv file has information of IMU and GPS data.

Upvotes: 4

Views: 7701

Answers (1)

adamconkey
adamconkey

Reputation: 4745

There are a couple steps:

1. Read in the data from the CSV file.

There are a number of ways to do this in Python but I prefer using Pandas:

import pandas as pd
df = pd.read_csv('my_csv_file.csv')

This loads the data as a Pandas dataframe that you can read off columns asdf['timestamp'] which can then be indexed like an array.

2. Populate ROS messages and write to rosbag

There is a nice Python API for rosbag. I don't know exactly what the data elements are in your CSV file so I will leave the message population up to you, but it looks something like:

import rospy
import rosbag
from sensor_msgs.msg import Imu, NavSatFix

with rosbag.Bag('output.bag', 'w') as bag:
    for row in range(df.shape[0]):
        timestamp = rospy.Time.from_sec(df['timestamp'][row])
        imu_msg = Imu()
        imu_msg.header.stamp = timestamp

        # Populate the data elements for IMU
        # e.g. imu_msg.angular_velocity.x = df['a_v_x'][row]

        bag.write("/imu", imu_msg, timestamp)

        gps_msg = NavSatFix()
        gps_msg.header.stamp = timestamp

        # Populate the data elements for GPS

        bag.write("/gps", gpu_msg, timestamp)

Note that there seem to be other GPS message types you can use, e.g. from the gps_common package. /imu and /gps are the topic names and you can name them as desired.

Upvotes: 3

Related Questions