UWBIns/lib/ros_read_bag.m

47 lines
1.2 KiB
Matlab
Raw Normal View History

2025-04-16 20:15:33 +08:00
%% Example
% path = 'imu3_codeodom_tst.bag';
%
% rosbag info 'imu3_codeodom_tst.bag'
% [imu, eul]= ch_ros_read_bag(path, '/imu_hi226');
% ch_imu_data_plot('acc', imu.acc', 'gyr', imu.gyr', 'eul', eul', 'time', imu.time', 'subplot', 1);
%%
function [imu, eul]= ros_read_bag(path, imu_topic_name)
bag = rosbag(path);
%<25><>ʾbag<61><67>Ϣ
% rosbag info 'imu3_codeodom_tst.bag'
% bag = select(bag, 'Time', [bag.StartTime+100 bag.StartTime + 110], 'Topic',imu_topic_name);
bag = select(bag, 'Topic', imu_topic_name);
imu_cell = readMessages(bag);
n = length(imu_cell);
span = bag.EndTime - bag.StartTime ;
imu.time = 0: span / n : span;
imu.time(end) = []; % remove last element
for i = 1:n
imu.gyr(1,i) = imu_cell{i,1}.AngularVelocity.X;
imu.gyr(2,i) = imu_cell{i,1}.AngularVelocity.Y;
imu.gyr(3,i) = imu_cell{i,1}.AngularVelocity.Z;
imu.acc(1,i) = imu_cell{i,1}.LinearAcceleration.X;
imu.acc(2,i) = imu_cell{i,1}.LinearAcceleration.Y;
imu.acc(3,i) = imu_cell{i,1}.LinearAcceleration.Z;
q(1) = imu_cell{i, 1}.Orientation.W;
q(2) = imu_cell{i, 1}.Orientation.X;
q(3) = imu_cell{i, 1}.Orientation.Y;
q(4) = imu_cell{i, 1}.Orientation.Z;
eul(:, i) = q2eul(q);
end
eul = rad2deg(eul);
end