0
0

More than 1 year has passed since last update.

geometry_msgs/PoseWithCovarianceStamped をrosbag_to_csvした時、covarianceの行が括弧でくくられてしまっている件

Last updated at Posted at 2023-01-08

経緯

rosbagのなかのgeometry_msgs/PoseWithCovarianceStamped型のトピックをrosbag_to_csvでcsv化すると、covarianceのすべての成分が()でくくられて扱いづらい。Screenshot from 2023-01-08 19-34-12.png
応急処置的ではあるが、pythonでcovarianceの成分を一つづつ列に保存するようにする。

環境

  • Ubuntu18.04
  • ROS1
  • python2.7

スクリプト

covariance_to_csv.py
import rosbag
import sys
import os
import pandas as pd

# get path
argv = sys.argv
filename=os.path.normpath(os.path.join(os.getcwd(),argv[1]))

# read from bag file
bag = rosbag.Bag(filename)

# select topic
print '---- topic list ----'
topics = bag.get_type_and_topic_info()[1].keys()
k = 0
for val in bag.get_type_and_topic_info()[1].values():
    if val[0] == "geometry_msgs/PoseWithCovarianceStamped":
        print k, '  topic  ', topics[k]
        print '    msg    ', val[0]
        print ''
    k += 1
number = input("input topic number : ")
topic_name = topics[number]

# initialized dict
col_name = ["sec", "nsec", "x", "y", "z", "q_x", "q_y", "q_z", "q_w"]
cov_comp = []
cov_size = 36
for i in range(cov_size):
    cov_name = "cov"+str(i)
    col_name.append(cov_name)
    cov_comp.append(cov_name)

pose_data_dict = {}
for i in range(len(col_name)):
    pose_data_dict[col_name[i]] = []

# msg
for topic, msg, t in bag.read_messages():
    if topic == topic_name:
        pose_data_dict["sec"].append(msg.header.stamp.secs)
        pose_data_dict["nsec"].append(msg.header.stamp.nsecs)
        pose_data_dict["x"].append(msg.pose.pose.position.x)
        pose_data_dict["y"].append(msg.pose.pose.position.y)
        pose_data_dict["z"].append(msg.pose.pose.position.z)
        pose_data_dict["q_x"].append(msg.pose.pose.orientation.x)
        pose_data_dict["q_y"].append(msg.pose.pose.orientation.y)
        pose_data_dict["q_z"].append(msg.pose.pose.orientation.z)
        pose_data_dict["q_w"].append(msg.pose.pose.orientation.w)

        for i in range(cov_size):
            pose_data_dict[cov_comp[i]].append(msg.pose.covariance[i])
bag.close()

# to csv
df = pd.DataFrame.from_dict(pose_data_dict)
df = df[col_name]
df.to_csv("pose_with_covariance.csv")
print "Saved csv file"

動作

command入力

python covariance_to_csv.py [input_csv_path]
---- topic list ----
1   topic   /localization/pose_twist_fusion_filter/pose_with_covariance_without_yawbias
    msg     geometry_msgs/PoseWithCovarianceStamped

2   topic   /localization/pose_estimator/pose_with_covariance
    msg     geometry_msgs/PoseWithCovarianceStamped

input topic number : 2
Saved csv file

pythonスクリプトと同じディレクトリにcsvが保存されます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0