一、获取IMU六轴数据
1.1获取gazebo中传感器的数据
bash
rostopic echo -b liw_gazebo.bag -p /imu/data>imu_data.csv
这条命令用于从ROS的bag包文件中提取指定话题的数据,并保存为CSV格式。下面是对各部分的详细解释:
rostopic echo
ROS的核心命令之一,用于在终端中显示指定ROS话题上发布的消息内容。
-b liw_gazebo.bag
-b 选项指定从名为 liw_gazebo.bag的bag包文件中读取数据,而不是从当前运行的ROS系统中实时订阅话题。
-p
-p 选项表示以"适合绘图"的格式输出消息。它会将消息的各个字段(如时间戳、坐标值等)整理成表格形式,每个字段作为一列,非常适合导入到MATLAB、Octave或Excel等工具进行分析和可视化。
/imu/data
这是要提取的话题名称。一个包含惯性测量单元数据的话题
> imu_data.csv
这是Shell的重定向操作符。它将 rostopic echo命令在终端中的输出内容,从屏幕重定向到名为 imu_data.csv的文件中。如果文件不存在则会创建它。


1.2提取六轴数据
数据解析

使用matlab提取数据
Matlab
function get_6axis_imu_data()
% 读取CSV文件,保留原始列标题
data = readtable('imu_data.csv', 'VariableNamingRule', 'preserve');
% 查看实际的列名
disp('表格列名:');
disp(data.Properties.VariableNames);
% 提取时间戳(第一列)
timestamps = data{:, 1};
% 按新顺序提取六轴数据:先加速度计,后陀螺仪
six_axis_data = [data{:, 'field.linear_acceleration.x'}, ... % 线加速度 X
data{:, 'field.linear_acceleration.y'}, ... % 线加速度 Y
data{:, 'field.linear_acceleration.z'}, ... % 线加速度 Z
data{:, 'field.angular_velocity.x'}, ... % 角速度 X
data{:, 'field.angular_velocity.y'}, ... % 角速度 Y
data{:, 'field.angular_velocity.z'}]; % 角速度 Z
% 为六轴数据添加标签(按新顺序)
six_axis_labels = {'accel_x', 'accel_y', 'accel_z', 'gyro_x', 'gyro_y', 'gyro_z'};
% 创建包含时间戳和六轴数据的完整表格(时间戳在最后一列)
imu_table = array2table([six_axis_data, timestamps], ...
'VariableNames', [six_axis_labels, 'timestamp']);
% 保存为.mat文件(直接保存表格变量)
save('extracted_imu_data.mat', 'imu_table');
% 显示成功信息
disp('六轴数据已成功提取并保存为 extracted_imu_data.mat');
disp('文件包含变量: imu_table');
disp('数据列:');
disp(imu_table.Properties.VariableNames);
disp(['数据大小: ', num2str(size(imu_table))]);
end

二、姿态解析与航迹推算