Tools
bag2pcd
sudo apt install pcl_ros
roscore
rosrun pcl_ros bag_to_pcd <input_file.bag> <topic> <output_directory>bag2vicon
In one terminal
rosbag play <input_file.bag>In another terminal run
./bag2vicon.py. It will subscribe the designated ros topic and save it into a txt file in the format [time, trans.x, trans.y, trans.z, rot.x, rot.y, rot.z, rot.w].Remember to change ros topic name, bag name, file name accordingly beforehand.
#!/usr/bin/env python
import csv
import rospy
from geometry_msgs.msg import TransformStamped
pose = []
def callback(msg):
secs = msg.header.stamp.secs
nsecs = msg.header.stamp.nsecs
time = float(str(secs) + "." + str(nsecs))
trans = msg.transform.translation
rot = msg.transform.rotation
stamp_float = [time, trans.x, trans.y, trans.z, rot.x, rot.y, rot.z, rot.w]
stamp_string = [format(s, ".4f") for s in stamp_float ]
pose.append(stamp_string)
if __name__ == '__main__':
ros_topic_name = "vicon/turtlebot/turtlebot"
ros_bag_name = "turtlebot_zed_pointcloud_sq2_vicon.bag"
save_to_file = "turtlebot_zed_pointcloud_sq2_vicon_gt.txt"
try:
rospy.init_node('converter', anonymous=True)
rospy.Subscriber(ros_topic_name, TransformStamped, callback)
rospy.spin()
finally:
with open(save_to_file, mode='w') as file:
file.writelines("# ground truth trajectory\n")
file.writelines("# file: " + ros_bag_name + "\n")
file.writelines("# timestamp tx ty tz qx qy qz qw\n")
with open(save_to_file, mode='a') as file:
file = csv.writer(file, delimiter=' ', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for line in pose:
file.writerow(line)vicon2gt
usage:
./vicon2gt.py <vicon_traj.txt> <pcd_folder>It will iterate over pcd folder, extract the timestamp from the pcd filename, and look for the closest timestamp in
vicon_traj.txtand save it into agt.logfile.
ply2pcd
ply2pcd batch
pcd2ply
pcd2ply batch
bin2pcd
Last updated
Was this helpful?