rosbag使用--记录深度相机数据
首先看一下教程:
http://wiki.ros.org/openni_launch/Tutorials/BagRecordingPlayback
知道了rosbag如何进行使用记录深度数据
但是按照以上教程记录下来的bag file还是很大
于是看了别人写的launch file
摘抄自spencer_people_tracking
<!-- Launch file for playing bagfiles recorded with the SPENCER robot platform -->
<launch>
<!-- CONFIGURABLE ARGUMENTS -->
<arg name="files" default=""/>
<arg name="folder" default=""/> <arg name="urdf" default="false"/>
<arg name="remap_tf" default="true" if="$(arg urdf)"/>
<arg name="remap_tf" default="false" unless="$(arg urdf)"/> <arg name="depth" default="true"/>
<arg name="no_point_clouds" default="false" />
<arg name="front_rgbd" default="true"/>
<arg name="rear_rgbd" default="true"/>
<arg name="laser" default="true"/>
<arg name="uncompress_rgbd" default="true"/>
<arg name="tracked_persons" default="true"/>
<arg name="velodyne" default="false"/> <!-- Playback options -->
<arg name="rqt" default="false"/>
<arg name="pause" default="true"/>
<arg name="initial_wait_time" default="0.0" if="$(arg pause)"/>
<arg name="initial_wait_time" default="45.0" unless="$(arg pause)"/>
<arg name="loop" default="false"/>
<arg name="start" default="0.0"/> <!-- seconds into the bagfile at which to start playing -->
<arg name="duration" default="99999999.9"/> <!-- number of seconds to play -->
<arg name="rate" default="1.0"/> <!-- playback speed -->
<arg name="required" default="true" /> <!-- Visualization options -->
<arg name="visualization" default="true" /> <!-- whether to run RViz with provided config, or not -->
<arg name="panoramas" default="false"/>
<arg name="relay_rgbd_for_visualization" default="true"/>
<arg name="rviz_config_file" default="$(find spencer_bagfile_tools)/launch/components/visualization_robot.rviz"/> <!-- configuration file for RViz to use, if visualization is enabled --> <arg name="rosbag_play_args" default="--clock --queue=5 --delay=0 --start=$(arg start) --duration=$(arg duration) --rate=$(arg rate)" /> <!-- extra arguments used to play back the bagfile --> <!-- Important: Use simulated time published on /clock topic, otherwise TF will be broken -->
<param name="/use_sim_time" value="true"/> <!-- BAG FILE PLAYBACK -->
<group>
<remap from="/tf" to="/spencer/sensors/tf_in_bagfile" if="$(arg remap_tf)"/>
<remap from="/spencer/sensors/clock" to="/clock"/> <remap from="/spencer/perception/tracked_persons" to="/spencer/perception/tracked_persons_in_bagfile" unless="$(arg tracked_persons)"/>
<remap from="/spencer/perception/detected_persons" to="/spencer/perception/detected_persons_in_bagfile" unless="$(arg tracked_persons)"/> <!-- Uncompress RGB-D images -->
<remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_front_top/depth/image_raw/compressedDepth" to="/spencer/sensors/rgbd_front_top/depth_recorded/image_raw/compressedDepth"/>
<remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_front_top/rgb/image_raw/compressed" to="/spencer/sensors/rgbd_front_top/rgb_recorded/image_color/compressed"/> <remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_front_bottom/depth/image_raw/compressedDepth" to="/spencer/sensors/rgbd_front_bottom/depth_recorded/image_raw/compressedDepth"/>
<remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_front_bottom/rgb/image_raw/compressed" to="/spencer/sensors/rgbd_front_bottom/rgb_recorded/image_color/compressed"/> <remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_rear_top/depth/image_raw/compressedDepth" to="/spencer/sensors/rgbd_rear_top/depth_recorded/image_raw/compressedDepth"/>
<remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_rear_top/rgb/image_raw/compressed" to="/spencer/sensors/rgbd_rear_top/rgb_recorded/image_color/compressed"/> <remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_rear_bottom/depth/image_raw/compressedDepth" to="/spencer/sensors/rgbd_rear_bottom/depth_recorded/image_raw/compressedDepth"/>
<remap if="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_rear_bottom/rgb/image_raw/compressed" to="/spencer/sensors/rgbd_rear_bottom/rgb_recorded/image_color/compressed"/> <!-- Hack if uncompressed depth/image_rect was recorded instead of depth/image_raw as recommended at http://wiki.ros.org/openni_launch/Tutorials/BagRecordingPlayback -->
<remap unless="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_front_top/depth/image_rect" to="/spencer/sensors/rgbd_front_top/depth/image_raw"/>
<remap unless="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_front_bottom/depth/image_rect" to="/spencer/sensors/rgbd_front_bottom/depth/image_raw"/> <remap unless="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_rear_top/depth/image_rect" to="/spencer/sensors/rgbd_rear_top/depth/image_raw"/>
<remap unless="$(arg uncompress_rgbd)" from="/spencer/sensors/rgbd_rear_bottom/depth/image_rect" to="/spencer/sensors/rgbd_rear_bottom/depth/image_raw"/> <!-- This script launches either rosbag play or rqt_bag, and searches for all relevant bag files for the active sensor modalities in the given folder -->
<node name="playback_wrapper" pkg="spencer_bagfile_tools" type="play.py" output="screen" required="$(arg required)" ns="/spencer/sensors" clear_params="true"> <!-- sub-namespace only applied for relative topic names in bagfile -->
<!-- Either give a list of files... -->
<param name="files" value="$(arg files)"/> <!-- Or an entire folder containing bagfiles prefixed with laser_, front_rgbd_, etc. -->
<param name="folder" value="$(arg folder)"/>
<param name="laser" value="$(arg laser)"/>
<param name="front_rgbd" value="$(arg front_rgbd)"/>
<param name="rear_rgbd" value="$(arg rear_rgbd)"/> <param name="rqt" value="$(arg rqt)"/>
<param name="pause" value="$(arg pause)"/>
<param name="loop" value="$(arg loop)"/>
<param name="rosbag_play_args" value="$(arg rosbag_play_args)"/>
<param name="initial_wait_time" value="$(arg initial_wait_time)"/>
</node>
</group> <!-- TF EXCLUSIONS -->
<group if="$(arg remap_tf)">
<remap from="tf_old" to="/spencer/sensors/tf_in_bagfile"/>
<node name="tf_filter" pkg="spencer_bagfile_tools" type="tf_filter.py" args="_exclude:='[]'"/>
</group> <!-- RGB-D PROCESSING -->
<group if="$(arg depth)">
<!-- Uncompress RGB-D -->
<group if="$(arg uncompress_rgbd)">
<include file="$(find spencer_bagfile_tools)/launch/components/uncompress_rgbd.launch">
<arg name="sensor_name" value="rgbd_front_top"/>
</include>
<include file="$(find spencer_bagfile_tools)/launch/components/uncompress_rgbd.launch">
<arg name="sensor_name" value="rgbd_front_bottom"/>
</include>
<include file="$(find spencer_bagfile_tools)/launch/components/uncompress_rgbd.launch">
<arg name="sensor_name" value="rgbd_rear_top"/>
</include>
<include file="$(find spencer_bagfile_tools)/launch/components/uncompress_rgbd.launch">
<arg name="sensor_name" value="rgbd_rear_bottom"/>
</include>
</group> <!-- Generate point clouds -->
<group unless="$(arg no_point_clouds)" ns="/spencer/sensors/">
<!-- Front sensors -->
<group if="$(arg front_rgbd)">
<include file="$(find spencer_bagfile_tools)/launch/components/generate_pointcloud.launch">
<arg name="sensor_name" value="rgbd_front_top"/>
</include>
<include file="$(find spencer_bagfile_tools)/launch/components/generate_pointcloud.launch">
<arg name="sensor_name" value="rgbd_front_bottom"/>
</include>
</group> <!-- Rear sensors -->
<group if="$(arg rear_rgbd)">
<include file="$(find spencer_bagfile_tools)/launch/components/generate_pointcloud.launch">
<arg name="sensor_name" value="rgbd_rear_top"/>
</include>
<include file="$(find spencer_bagfile_tools)/launch/components/generate_pointcloud.launch">
<arg name="sensor_name" value="rgbd_rear_bottom"/>
</include>
</group>
</group>
</group> <!-- Relay original RGB-D images to throttled visualization topics (for playback, we don't need compression and throttling) -->
<group if="$(arg relay_rgbd_for_visualization)" ns="relay_rgbd_for_visualization">
<node pkg="nodelet" type="nodelet" name="manager" args="manager" output="screen"/> <include file="$(find spencer_bagfile_tools)/launch/components/relay_rgbd_for_visualization.launch">
<arg name="camera" value="rgbd_front_top"/>
</include> <include file="$(find spencer_bagfile_tools)/launch/components/relay_rgbd_for_visualization.launch">
<arg name="camera" value="rgbd_front_bottom"/>
</include> <include file="$(find spencer_bagfile_tools)/launch/components/relay_rgbd_for_visualization.launch">
<arg name="camera" value="rgbd_rear_top"/>
</include> <include file="$(find spencer_bagfile_tools)/launch/components/relay_rgbd_for_visualization.launch">
<arg name="camera" value="rgbd_rear_bottom"/>
</include>
</group> <!-- Create RGB and depth panoramas for visualization -->
<group if="$(arg panoramas)" ns="/spencer/sensors">
<node if="$(arg front_rgbd)" name="panorama_rgb_front" pkg="spencer_bagfile_tools" type="panorama_builder" args="_topics:='/spencer/sensors/rgbd_front_top/rgb /spencer/sensors/rgbd_front_bottom/rgb' _inplane_rotations:='0.0 180.0' _vertical:=true _output_topic:='/spencer/sensors/rgbd_front_panorama/rgb'"/> <node if="$(arg rear_rgbd)" name="panorama_rgb_rear" pkg="spencer_bagfile_tools" type="panorama_builder" args="_topics:='/spencer/sensors/rgbd_rear_top/rgb /spencer/sensors/rgbd_rear_bottom/rgb' _inplane_rotations:='0.0 180.0' _vertical:=true _output_topic:='/spencer/sensors/rgbd_rear_panorama/rgb'"/> <group if="$(arg depth)">
<node if="$(arg front_rgbd)" name="panorama_depth_front" pkg="spencer_bagfile_tools" type="panorama_builder" args="_topics:='/spencer/sensors/rgbd_front_top/depth /spencer/sensors/rgbd_front_bottom/depth' _inplane_rotations:='0.0 180.0' _vertical:=true _output_topic:='/spencer/sensors/rgbd_front_panorama/depth'"/> <node if="$(arg rear_rgbd)" name="panorama_depth_rear" pkg="spencer_bagfile_tools" type="panorama_builder" args="_topics:='/spencer/sensors/rgbd_rear_top/depth /spencer/sensors/rgbd_rear_bottom/depth' _inplane_rotations:='0.0 180.0' _vertical:=true _output_topic:='/spencer/sensors/rgbd_rear_panorama/depth'"/>
</group>
</group> <!-- VELODYNE POINT CLOUD GENERATION -->
<group if="$(arg velodyne)">
<include file="$(find velodyne_pointcloud)/launch/VLP16_points.launch"/>
</group> <!-- ROBOT URDF -->
<group if="$(arg urdf)">
<include file="$(find spencer_description)/launch/publish.launch"/>
</group> <!-- VISUALIZATION -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rviz_config_file)" required="false" if="$(arg visualization)"/> </launch>
可以看到解压缩,rosbag info 以下别人的bag file
topics:
/spencer/sensors/rgbd_front_top/depth/camera_info 720 msgs : sensor_msgs/CameraInfo
/spencer/sensors/rgbd_front_top/depth/image_raw/compressedDepth 720 msgs : sensor_msgs/CompressedImage
/spencer/sensors/rgbd_front_top/rgb/camera_info 691 msgs : sensor_msgs/CameraInfo
/spencer/sensors/rgbd_front_top/rgb/image_raw/compressed 691 msgs : sensor_msgs/CompressedImage
发现记录的都是压缩格式的深度图,和彩色图
于是需要解压缩
别人的uncompress_rgbd.launch
<launch>
<arg name="sensor_name"/> <group ns="/spencer/sensors/$(arg sensor_name)">
<!--注意这里是base topic就是说这个base topic下的所有topic都会被变换-->
<node name="republish_rgb" pkg="image_transport" type="republish" args="compressed in:=rgb_recorded/image_color raw out:=rgb/image_raw"/>
<node name="republish_depth" pkg="image_transport" type="republish" args="compressedDepth in:=depth_recorded/image_raw raw out:=depth/image_raw"/>
</group> </launch>
发现用到了image_transport
于是去看
http://wiki.ros.org/image_transport
和
http://wiki.ros.org/image_transport_plugins
下面是本文采用的launch file,使用compressed imge节省了空间
在弄这个launch file 的时候出了错误,rosbag记录正确,但是image_view就是没有图像,问题在于remap出错了,应该放在node里,或者放在rosbag node前面
<launch>
<!-- Important: Use simulated time published on /clock topic, otherwise TF will be broken -->
<param name="/use_sim_time" value="true"/>
<node pkg="rosbag" type="play" name="rosbag" args="--clock --queue=5 --delay=0 --start=0 --duration=99999999 --rate=1 --loop $(find vision_obstacles_avoidance)/bags/xtion.bag">
<remap from="/vision_obstacles_avoidance/xtion/depth_registered/image_raw/compressedDepth" to="/vision_obstacles_avoidance/xtion/depth_registered_recorded/image_raw/compressedDepth"/>
<remap from="/vision_obstacles_avoidance/xtion/rgb/image_raw/compressed" to="/vision_obstacles_avoidance/xtion/rgb_recorded/image_color/compressed"/>
</node>
<!--注意这里是base topic就是说这个base topic下的所有topic都会被变换-->
<group ns="/vision_obstacles_avoidance/xtion">
<node name="republish_rgb" pkg="image_transport" type="republish" args="compressed in:=rgb_recorded/image_color raw out:=rgb/image_raw"/>
<node name="republish_depth" pkg="image_transport" type="republish" args="compressedDepth in:=depth_registered_recorded/image_raw raw out:=depth_registered/image_raw"/>
</group>
</launch>
rosbag record --duration=15 /vision_obstacles_avoidance/xtion/depth_registered/image_raw/compressedDepth /vision_obstacles_avoidance/xtion/depth_registered/camera_info /vision_obstacles_avoidance/xtion/rgb/image_raw/compressed /vision_obstacles_avoidance/xtion/rgb/camera_info -O xtion
rosbag record --duration=15 /vision_obstacles_avoidance/xtion/depth/image_raw/compressedDepth /vision_obstacles_avoidance/xtion/depth/camera_info /vision_obstacles_avoidance/xtion/rgb/image_raw/compressed /vision_obstacles_avoidance/xtion/rgb/camera_info -O xtion
rosbag使用--记录深度相机数据的更多相关文章
- 【计算机视觉】深度相机(一)--TOF总结
http://www.voidcn.com/blog/lg1259156776/article/p-6302915.html 1.1 TOF初探 TOF是Time of flight的简写,直译为飞行 ...
- 【计算机视觉】深度相机(九)--OpenNI API及中间件说明
本文由官方文档翻译而来 总览 目的 OpenNI 2.0 API(应用程序编程接口)提供了访问PrimerSense的兼容深度传感器.这就使得一个应用程序能够初始化传感器和从设备接收深度(depth) ...
- 【计算机视觉】深度相机(四)--Realsense概览
本文参考下文,做一点个人使用补充. http://blog.csdn.net/app_12062011/article/details/52662143 转自: http://blog.csdn. ...
- 深度学习数据特征提取:ICCV2019论文解析
深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...
- [Unity3D]深度相机 Depth Camera
作为3D世界里最重要的窗口,摄像机的应用就显得很重要,毕竟在屏幕上看到的一切都得用摄像机矩阵变换得来的嘛.论坛上看到了一篇帖子讲非天空盒的背景做法,让我想起其实很多界面合成画面可以用摄像机之间的交互来 ...
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现
Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssq ...
- Entity Framework入门教程(17)---记录和拦截数据库命令
记录和拦截数据库命令 这一节介绍EF6怎么记录和拦截发送给数据库的查询和操作命令. 1.记录EF发送给数据库命令(DbContext.Database.Log) 以前给了查看EF发送给数据库的命令我们 ...
- ROS与深度相机入门教程-在ROS使用kinect v1摄像头
ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...
- ASP.NET Web API 记录请求响应数据到日志的一个方法
原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个 ...
随机推荐
- asp.net Forms登录核心方法
登录核心方法: private void Signin(string curUserId) { System.Web.Security.FormsAuthenticationTicket tk = , ...
- DPDK如何抓包
原创翻译,转载请注明出处. DPDK的librte_pdump库,提供了在DPDK框架下抓包的功能.这个库通过完全复制Rx和Tx的mbuf到一个新的内存池,因此它降低应用程序的性能,所以只推荐在调试的 ...
- Java的同步容器和并发容器
前言: 之前在介绍Java集合的时候说到,java提供的实现类很少是线程安全的.只有几个比较古老的类,比如Vector.Hashtable等是线程安全的,尤其是Hashtable,古老到连命名规范都没 ...
- Cocoa & OS X & swift 4
Cocoa & OS X & swift 4 http://www.runoob.com/swift/swift-environment.html https://en.wikiped ...
- 附录A培训实习生-面向对象基础类和实例(1)
对象是一个自包含的实体,用一组可识别的特性和行为来标识. 面向对象编程,Object-Oriented Programming,其实就是针对对象进行编程的意思. 类就是具有相同属性和功能的对象的抽象的 ...
- [洛谷P2016] 战略游戏 (树形dp)
战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得 ...
- SQL 学习小笔记
1.FOUND_ROWS() 题目: ,; 在上边sql中使用什么选项可以使 SELECT FOUND_ROWS()忽略LIMIT子句,返回总数? *答案* : SQL_CALC_FOUND_ROWS ...
- springmvc4+hibernate4+activiti5.18(Maven)
项目下载地址: http://files.cnblogs.com/files/walk-the-Line/springmvc_activiti5.18_hibernate4.zip
- mybatis 关系映射
一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: 1 CREATE TABLE items ( 2 id INT NOT NULL AUTO_INCREMENT, 3 itemsname ...
- ${pageContext.request.contextPath}的解释以及和request.contextPath的区别
JSP中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决. 1)采用相对路径遇到的问题 l 相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不 ...