Imu msg converter - ashBabu/Utilities GitHub Wiki

Overview

The xsens imu produces msgs in its custom msg format. To convert that to the ros format, the following code is used

import os
import rosbag
import rospy
from sensor_msgs.msg import Imu
import sensor_msgs.point_cloud2 as pc2
import numpy as np
import tf_conversions

def convert_xsens_to_ros_imu(imu_msg):
    imu = Imu()
    imu.header = imu_msg.header

    roll = imu_msg.roll
    pitch = imu_msg.pitch
    yaw = imu_msg.yaw

    q = tf_conversions.transformations.quaternion_from_euler(roll, pitch, yaw)
    imu.orientation.w = q[0]
    imu.orientation.x = q[1]
    imu.orientation.y = q[2]
    imu.orientation.z = q[3]

    imu.angular_velocity.x = 0
    imu.angular_velocity.y = 0
    imu.angular_velocity.z = 0
    imu.orientation_covariance = [0, 0, 0, 0, 0, 0, 0, 0, 0]

    imu.linear_acceleration.x = 0
    imu.linear_acceleration.y = 0
    imu.linear_acceleration.z = 0
    imu.linear_acceleration_covariance = [0, 0, 0, 0, 0, 0, 0, 0, 0]

    return imu

def process_bag(input_bag_path, output_bag_path):
    with rosbag.Bag(output_bag_path, 'a') as outbag:
        with rosbag.Bag(input_bag_path, 'r') as inbag:
            for topic, msg, t in inbag.read_messages():
                if topic == '/hai_xsens/filter/orientation':
                    ros_imu_msg = convert_xsens_to_ros_imu(msg)
                    outbag.write('/hai_xsens/filter/orientation_ros', ros_imu_msg, t)
                else:
                    outbag.write(topic, msg, t)

def process_folder(folder_path):
    for filename in os.listdir(folder_path):
        if filename.endswith('.bag'):
            input_bag_path = os.path.join(folder_path, filename)
            output_bag_path = os.path.join(folder_path, 'converted_' + filename)
            process_bag(input_bag_path, output_bag_path)

if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(description="Convert ROS bag messages")
    parser.add_argument("folder_path", help="Path to the folder containing ROS bags")
    args = parser.parse_args()

    process_folder(args.folder_path)
  • run python3 name_of_the_code.py /path/to/ros1bags_folder after making it executable