本文介绍了LaserScan消息的格式以及各个参数的意义,并且在文章的最后编写了一个subscriber用来读取激光数据.
LaserScan是ROS定义的激光数据格式,消息定义在sensor_msgs/LaserScan.msg文件中,路径为:/opt/ros/indigo/share/sensor_msgs/msg.
LaserScan的消息如下:
Header header
# Header也是一个结构体,包含了seq,stamp,frame_id,其中seq指的是扫描顺序增加的id,stamp包含了开始扫描的时间和与开始扫描的时间差,frame_id是扫描的参考系名称.注意扫描是逆时针从正前方开始扫描的.
float32 angle_min # 开始扫描的角度(角度)
float32 angle_max # 结束扫描的角度(角度)
float32 angle_increment # 每一次扫描增加的角度(角度)
float32 time_increment # 测量的时间间隔(s)
float32 scan_time # 扫描的时间间隔(s)
float32 range_min # 距离最小值(m)
float32 range_max # 距离最大值(m)
float32[] ranges # 距离数组(长度360)
float32[] intensities # 与设备有关,强度数组(长度360)
了解了LaserScan的数据格式,下面将编写一个订阅器用来接收LaserScan消息(假设roscore和laser都已经启动):
laser_listener.py
#!/usr/bin/env python
import rospy
from sensor_msgs.msg import LaserScan
def callback(scan):
rospy.loginfo('header: {0}'.format(scan))
def listener():
rospy.init_node('lasr_listener', anonymous=False)
rospy.Subscriber('scan', LaserScan,callback)
rospy.spin()
if __name__ == '__main__':
listener()
python laser_listener.py