首先看一下教程:
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