• 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

     

  • 相关阅读:
    Google recaptcha在webform中的使用
    User control's property loses value after a postback
    share memory cache across multi web application
    Losing session data in ASP.NET
    What is the difference between UserControl, WebControl, RenderedControl and CompositeControl?
    maven跳过单元测试-maven.test.skip和skipTests的区别
    @RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别
    SpringBoot-@PathVariable
    pick王菊?作为“菊外人”的程序员能做点什么?
    数据库CRUD操作
  • 原文地址:https://www.cnblogs.com/hong2016/p/7624280.html
Copyright © 2020-2023  润新知