import rospy from sensor_msgs.msg import LaserScan def callback(scan): for i in range(len(scan.ranges)): range_val = scan.ranges[i] angle = scan.angle_min + i * scan.angle_increment print("Range: %.2f Angle: %.2f" % (range_val, angle)) rospy.init_node('laser_scan_subscriber') rospy.Subscriber('scan', LaserScan, callback) rospy.spin()
import rospy from sensor_msgs.msg import LaserScan from std_msgs.msg import Header rospy.init_node('laser_scan_publisher') pub = rospy.Publisher('scan', LaserScan, queue_size=10) rate = rospy.Rate(10) header = Header(stamp=rospy.Time.now(), frame_id="laser_frame") angle_min = -1.57 angle_max = 1.57 angle_increment = 0.01 ranges = [float('inf')] * int((angle_max - angle_min) / angle_increment) intensities = [] msg = LaserScan(header=header, angle_min=angle_min, angle_max=angle_max, angle_increment=angle_increment, time_increment=0.0, scan_time=0.0, range_min=0.0, range_max=100.0, ranges=ranges, intensities=intensities) while not rospy.is_shutdown(): msg.header.stamp = rospy.Time.now() pub.publish(msg) rate.sleep()This code creates a custom LaserScan message with a constant range value of infinity and publishes it at a rate of 10Hz. The sensor_msgs.msg package library contains the definition of the LaserScan message type in ROS.