ROS学习笔记(五):rosbag与读取图片与点云数据

这篇具有很好参考价值的文章主要介绍了ROS学习笔记(五):rosbag与读取图片与点云数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

rosbag基本应用

rosbag录制数据

录制所有话题:

rosbag record -a

录制指定话题,设置 bag 包名:

rosbag record -O xxx.bag /topic

rosbag回放数据

以暂停的方式启动,防止跑掉数据

rosbag play --pause xxx.bag

设置以 0.5 倍速回放,也就是以录制频率的一半回放

rosbag play -r 0.5 xxx.bag

rosbag获取bag文件的信息

rosbag info xxx.bag

rosbag压缩

如果录制的 bag 很大,我们可以压缩它,默认的压缩格式是 bz2:

rosbag compress xxx.bag

你也可以添加 -j 手动指定压缩格式为 bz2:

rosbag compress -j xxx.bag

也可以使用 LZ4 来压缩数据:

rosbag compress --lz4 xxx.bag

rosbag解压

rosbag decompress xxx.bag解压

rosbag截取时间段

rosbag filter input.bag output.bag "t.to_sec() <= 1284703001.00 and t.to_sec() >= 1284703000.00"

rqt_bag显示与绘制

rqt_bag

rqt_bag是一个用于记录和管理包文件的应用程序。主要特点:

  • 显示bag信息内容
  • 显示图像消息(可选为时间线上的缩略图)
  • 绘制消息值的可配置时间序列
  • 向ROS发布/记录所选topic的消息
  • 将时间范围内的消息导出到新bag

rosbag中读取图像数据

运行以下命令从input.bag的/img/cam的话题中读取图像数据

python2 export.py

export.py文件如下所示

# coding:utf-8
#!/usr/bin/python
#Exrtact image from a bag file.
import roslib
import rosbag
import rospy
import cv2
import os
from cv_bridge import CvBridge
from cv_bridge import CvBridgeError
image_path = './image/'
class ImageCreator():
	def __init__(self):
		self.bridge = CvBridge()
		with rosbag.Bag('./input.bag', 'r') as bag:
			for topic,msg,t in bag.read_messages():
				if topic == "/img/cam": #topic for images;
						try:
							cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8")
						except CvBridgeError as e:
							print e
						timestr = "%.6f" %  msg.header.stamp.to_sec() #%.6fis the precision of the timestamps you prefer;
						image_name = timestr+ ".png" #name: timestamps.png
						cv2.imwrite(image_path + image_name, cv_image)  #save;
if __name__ == '__main__':
    try:
        image_creator = ImageCreator()
    except rospy.ROSInterruptException:
        pass

rosbag中读取点云数据

确保linux系统中安装了pcl_ros包:

rospack find pcl_ros

若没有安装则需要运行以下命令:

sudo apt-get install ros-melodic-pcl-ros

启动ros的master节点

roscore

运行以下命令,读取点云数据

rosrun pcl_ros bag_to_pcd bag包 点云话题 保存pcd的路径
# eg: rosrun pcl_ros bag_to_pcd data.bag /velodyne_points pcd

点云可视化

pcl_viewer  xxx.pcd

结果如下图所示
ROS学习笔记(五):rosbag与读取图片与点云数据,ROS,自动驾驶,计算机视觉,ROS,机器人

使用Matlab读取bag信息

以下是一个matlab读取bag信息并绘图的示例(具体使用需要根据自身bag的Topic相关信息进行修改),其中
/mavros/local_position/pose 为无人机状态,包含了无人机位置、速度、姿态等信息
/prometheus/control/ref_pose_rviz为无人机期望轨迹,包含了期望位置和期望姿态(期望姿态由控制器计算得到)文章来源地址https://www.toymoban.com/news/detail-536956.html

filepath=fullfile('d:','Matlab/bag','subset2.bag');
bag=rosbag(filepath);

prometheus_msgs_ref_pose = select(bag,'Topic','/prometheus/control/ref_pose_rviz');
prometheus_msgs_pose = select(bag,'Topic','/mavros/local_position/pose');
drone_ref_pose = readMessages(prometheus_msgs_ref_pose,'DataFormat','struct');
drone_pose = readMessages(prometheus_msgs_pose,'DataFormat','struct');

%% 位置
drone_ref_position=zeros(length(drone_ref_pose),3);
t_ref_position = zeros(length(drone_ref_pose),1);
for i = 1:length(drone_ref_pose)
drone_ref_position(i,1) = drone_ref_pose{i,1}.Pose.Position.X;
drone_ref_position(i,2) = drone_ref_pose{i,1}.Pose.Position.Y;
drone_ref_position(i,3) = drone_ref_pose{i,1}.Pose.Position.Z;
t_ref_position(i) = drone_ref_pose{i,1}.Header.Stamp.Sec;
end

drone_position=zeros(length(drone_pose),3);
t_position = zeros(length(drone_pose),1);
for i = 1:length(drone_pose)
drone_position(i,1) = drone_pose{i,1}.Pose.Position.X;
drone_position(i,2) = drone_pose{i,1}.Pose.Position.Y;
drone_position(i,3) = drone_pose{i,1}.Pose.Position.Z;
t_position(i) = drone_pose{i,1}.Header.Stamp.Sec;
end
% x轴位置曲线
figure
plot(t_ref_position(:),drone_ref_position(:,1))
hold on
plot(t_position(:),drone_position(:,1));
hold off
xlabel('时间戳/s');
ylabel('距离/m');
% y轴位置曲线
figure
plot(t_ref_position(:),drone_ref_position(:,2))
hold on
plot(t_position(:),drone_position(:,2));
hold off
xlabel('时间戳/s');
ylabel('距离/m');
% z轴位置曲线
figure
plot(t_ref_position(:),drone_ref_position(:,3))
hold on
plot(t_position(:),drone_position(:,3));
hold off
xlabel('时间戳/s');
ylabel('距离/m');

%% 姿态角
drone_ref_orientation=zeros(length(drone_ref_pose),4);
drone_ref_angle=zeros(length(drone_ref_pose),3);
t_ref_position = zeros(length(drone_ref_pose),1);
for i = 1:length(drone_ref_pose)
drone_ref_orientation(i,1) = drone_ref_pose{i,1}.Pose.Orientation.X;
drone_ref_orientation(i,2) = drone_ref_pose{i,1}.Pose.Orientation.Y;
drone_ref_orientation(i,3) = drone_ref_pose{i,1}.Pose.Orientation.Z;
drone_ref_orientation(i,4) = drone_ref_pose{i,1}.Pose.Orientation.W;
[drone_ref_angle(i,1),drone_ref_angle(i,2),drone_ref_angle(i,3)]=quat2angle(drone_ref_orientation(i,:),'XYZ');
t_ref_position(i) = drone_ref_pose{i,1}.Header.Stamp.Sec;
end

drone_orientation=zeros(length(drone_pose),4);
drone_angle=zeros(length(drone_pose),3);
t_position = zeros(length(drone_pose),1);
for i = 1:length(drone_pose)
drone_orientation(i,1) = drone_pose{i,1}.Pose.Orientation.X;
drone_orientation(i,2) = drone_pose{i,1}.Pose.Orientation.Y;
drone_orientation(i,3) = drone_pose{i,1}.Pose.Orientation.Z;
drone_orientation(i,4) = drone_pose{i,1}.Pose.Orientation.W;
[drone_angle(i,1),drone_angle(i,2),drone_angle(i,3)]=quat2angle(drone_orientation(i,:),'XYZ');
t_position(i) = drone_pose{i,1}.Header.Stamp.Sec;
end

drone_ref_angle(:,3)=-abs(drone_ref_angle(:,3));
drone_angle(:,3)=-abs(drone_angle(:,3));

subplot(3, 1, 1);
plot(t_ref_position(:),drone_ref_angle(:,1))
hold on
plot(t_position(:),drone_angle(:,1));
hold off
xlabel('时间戳/s');
ylabel('弧度/rad');
subplot(3, 1, 2);
plot(t_ref_position(:),drone_ref_angle(:,2))
hold on
plot(t_position(:),drone_angle(:,2));
hold off
xlabel('时间戳/s');
ylabel('弧度/rad');
subplot(3, 1, 3);
plot(t_ref_position(:),drone_ref_angle(:,3))
hold on
plot(t_position(:),drone_angle(:,3));
hold off
xlabel('时间戳/s');
ylabel('弧度/rad');

到了这里,关于ROS学习笔记(五):rosbag与读取图片与点云数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机算法】【图论】【最优匹配与点云对准问题】最(极)大团算法

    团与最大团的定义 图顶点集的子集满足任意两个顶点相邻,称该子集是该图的一个团。图的所有团中顶点最多的,即最大的一个或多个,称为图的最大团或极大团。 图的最大团的实际应用问题 CVPR2023最佳论文之一用最大团算法实现鲁棒的点云对准,有效解决外点问题。顾名

    2024年03月15日
    浏览(24)
  • ROS1 rosbag的详细使用,并且使用python来合并bag包

    在使用ros的时候经常会用到rosbag来录制或者回放算法,是个非常有用的工具。 命令 作用 record 录制一个包,并且指定topic info 总结一个包的详细信息 play 回放一个或者多个包,并且可以指定topic check 确定一个包是否可以在当前系统中播放,或者是否可以迁移 fix 修复一个包使

    2024年02月20日
    浏览(18)
  • 『OPEN3D』1.3 RGB-D image与点云拼接 python篇

    目录 1 open3d中的IMAGE  1.1 open3d中的image  1.2 open3d中的rgbd image 2 open3d.camera 3 RGBD图像的点云拼接

    2024年02月06日
    浏览(18)
  • ubuntu22.04,ros2使用自带opencv读取图片

    从网上找了很久的ros2如何使用自带的opencv库或者自定义安装opencv库的教程,自己看的云里雾里的,跟着配置走下来依旧是不能使用,出现的最多的问题,就是找不到头文件或者undefined reference to \\\'cv::imread(std::cxxll::basic stringchar, std::char traits, std::allocator const, int)\\\'这一类的未定义

    2024年02月10日
    浏览(28)
  • rosbag中提取图片和视频的步骤

    step1: 首先查看自己的rosbag中视频相关的topic信息:执行rosbag info命令 rosbag info radar_camera.bag [备注:adar_camera.bag是我自己的包名,这里需要改成你自己的包名] 我的包里有一个topic是与视频相关的,如下图,这里要注意的是 我的视频格式是“compressed”压缩的。 topics: /cam_rear_le

    2024年02月06日
    浏览(16)
  • Python点云处理(一)点云数据读取与写入

    当处理点云数据时,我们通常需要读取各种不同格式的点云文件。Python作为一种强大的编程语言,在点云处理领域提供了许多库和工具,可以帮助我们读取和处理各种格式的点云文件。本文将介绍如何使用Python读取和写入各种格式的点云文件。 LAS(Lidar Data Exchange)和LAZ(L

    2024年02月08日
    浏览(19)
  • python读取并显示3d点云数据

    首先给出代码,很简单,如下所示: 在运行之前需要安装open3d库,安装过程如下: 点击图中的cmd,这个安装anaconda就会有。直接在cmd中输入pip install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple 这是通过镜像下载,速度很快。 下载成功后,就可以运行了。运行之前,请将路径更改

    2024年02月12日
    浏览(19)
  • TI AWR1843毫米波雷达采集三维点云数据(ROS)

    毫米波雷达以其稳定性、对不同环境的适应能力、价格等方面的优势逐步引起了科研人员的注意,本文主要介绍利用了TI(德州仪器)的AWR1843设备,基于ROS系统进行采集点云数据的流程。供大家参考及为自己做一个笔记。 Ubuntu 18.04 + ROS Melodic (推荐工作环境) 使用Uniflash成功

    2023年04月16日
    浏览(30)
  • 十九.在ROS系统基于点云和视觉图像数据融合构建3D点云场景

    一. 背景介绍         现在很多智能导航场景都涉及到激光(毫米波,固态等)雷达和相机视觉信息融合,这里激光雷达一般都是指多线激光雷达,16线,64线,甚至更多线数. 但多线激光雷达动不动数万的价格,让很多技术人员无法尝试.我前面写过一篇使用单线激光雷达和相机视觉融合

    2023年04月08日
    浏览(23)
  • C# 读取pcd、ply点云文件数据

            最近研究了下用pcl读取点云数据,又做了个C#的dll,方便读取,同样这个dll基于pcl 最新版本1.13.1版本开发。         上次做的需要先得到点云长度,再获取数据。这次这个定义了一个PointCloudXYZ类来存数据。将下面的dll拷贝到可执行目录下,引用Q_PclSharp.dll使用

    2024年02月12日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包