MATLAB按话题提取ROSBAG数据

个人记录用
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); 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值