使用ROS的过程中,我们在用Intel的realsense进行提取深度图像获得障碍物地图的过程中,需要用到depthimage_to_laserscan进行对三维图像-伪激光图的转换。我们获得的laserscan需要传输给其他节点,这里我们尝试对laserscan中的信息进行提取。
首先在depthimage_to_laserscan中的代码进行阅读,可以找到
DepthImageToLaserScanROS::DepthImageToLaserScanROS(ros::NodeHandle& n, ros::NodeHandle& pnh):pnh_(pnh), it_(n), srv_(pnh) {
boost::mutex::scoped_lock lock(connect_mutex_);
// Dynamic Reconfigure
dynamic_reconfigure::Server::CallbackType f;
f = boost::bind(&DepthImageToLaserScanROS::reconfigureCb, this, _1, _2);
srv_.setCallback(f);
// Lazy subscription to depth image topic
pub_ = n.advertise("scan", 10, boost::bind(&DepthImageToLaserScanROS::connectCb, this, _1), boost::bind(&DepthImageToLaserScanROS::disconnectCb, this, _1));
}
DepthImageToLaserScanROS::~DepthImageToLaserScanROS(){
sub_.shutdown();
}
其中可以找到以"scan"的topic发表的信息
// Lazy subscription to depth image topic
pub_ = n.advertise("scan", 10, boost::bind(&DepthImageToLaserScanROS::connectCb, this, _1), boost::bind(&DepthImageToLaserScanROS::disconnectCb, this, _1));
可以找到信息格式为sensor_msgs::LaserScan
查阅API可以得到原始数据格式
# Single scan from a planar laser range-finder
#
# If you have another ranging device with different behavior (e.g. a sonar
# array), please find or create a different message, since applications
# will make fairly laser-specific assumptions about this data
Header header # timestamp in the header is the acquisition time of
# the first ray in the scan.
#
# in frame frame_id, angles are measured around
# the positive Z axis (counterclockwise, if Z is up)
# with zero angle being forward along the x axis
float32 angle_min # start angle of the scan [rad]
float32 angle_max # end angle of the scan [rad]
float32 angle_increment # angular distance between measurements [rad]
float32 time_increment # time between measurements [seconds] - if your scanner
# is moving, this will be used in interpolating position
# of 3d points
float32 scan_time # time between scans [seconds]
float32 range_min # minimum range value [m]
float32 range_max # maximum range value [m]
float32[] ranges # range data [m] (Note: values < range_min or > range_max should be discarded)
float32[] intensities # intensity data [device-specific units]. If your
# device does not provide intensities, please leave
# the array empty.
其中
std_msgs/Header header
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[] ranges
float32[] intensities