个人记录用
select函数链接:添加链接描述
clc,clear,close all
% 定义rosbag所在的位置
% filepath=fullfile('E:\RobotProject\Data\','data','2021-08-02-08-51-01.bag');
filepath=fullfile('E:\RobotProject\Data\','data','2021-08-08-08-58-06.bag');
% 提取bag中消息格式信息
bag=rosbag(filepath);
%% 正式读取
% 选择对应的话题,这里就只选择了/rslidar_points0
prometheus_msgs = select(bag,'Topic','/rslidar_points0');
messageNum=prometheus_msgs.NumMessages; % 消息数量
rows=[1:100:messageNum]; % 以100为周期生成rows向量
if (rows(end))%100!=1
rows=[rows,messageNum];
end
spePointZ=single(1.0280262); % 选定特定的z坐标
spePointData=[];
spePointTime=[];
figure(1);
% drone_pose = readMessages(prometheus_msgs); % 实际发现直接对太大的数据量读取不行,会爆内存
for i=1:size(rows,2)-1
data=readMessages(prometheus_msgs,(rows(i):rows(i+1)-1));
for j=1:size(data,1)
xyz=readXYZ(data{j});
spePointNum_tmp=find(xyz(:,3)==spePointZ);
% S=repmat([1],size(xyz,1),1);
% scatter3(xyz(:,1),xyz(:,2),xyz(:,3),S);
% hold on;
if ~isempty(spePointNum_tmp)
spePointData_tmp=xyz(spePointNum_tmp,:);
S=repmat([1],size(spePointData_tmp,1),1);
scatter3(spePointData_tmp(:,1),spePointData_tmp(:,2),spePointData_tmp(:,3),S);
hold on;
spePointData=[spePointData;spePointData_tmp];
spePointTime=[spePointTime;(i-1)*100+j]
end
end
% xyz=readXYZ(data{1});
% intensity=readField(data{1},'intensity');
end
% figure;
% S=repmat([1],size(spePointData,1),1);
% scatter3(spePointData(:,1),spePointData(:,2),spePointData(:,3),S);
save('extractedSpePoint.mat')
%% test
% prometheus_msgs = select(bag,'Topic','/rslidar_points0');
% drone_pose = readMessages(prometheus_msgs);
% for i=1:112
% xyz=readXYZ(drone_pose{i}); %
% intensity=readField(drone_pose{i},'intensity');
% % max_intensity=max(intensity);
% S=repmat([1],size(xyz,1),1);
% scatter3(xyz(:,1),xyz(:,2),xyz(:,3),S);
% hold on;
% end
% drone_pose = readMessages(prometheus_msgs,'DataFormat','struct');
%
% drone_position=zeros(2180,2);
% for i=1:2180
% drone_position(i,1) = drone_pose{i,1}.Pose.Position.X;
% drone_position(i,2) = drone_pose{i,1}.Pose.Position.Y;
% end
% real_x = drone_position(:,1);
% real_y = drone_position(:,2);
% plot(real_x,real_y);