@@ -86,6 +86,30 @@ def __init__(self) -> None:
8686 self .declare_parameter ('publish_clock' , True )
8787 self .publish_clock = self .get_parameter ('publish_clock' ).get_parameter_value ().bool_value
8888
89+ self .declare_parameter ('scan_range_min' , 0.05 )
90+ self .scan_range_min = \
91+ self .get_parameter ('scan_range_min' ).get_parameter_value ().double_value
92+
93+ self .declare_parameter ('scan_range_max' , 30.0 )
94+ self .scan_range_max = \
95+ self .get_parameter ('scan_range_max' ).get_parameter_value ().double_value
96+
97+ self .declare_parameter ('scan_angle_min' , - math .pi )
98+ self .scan_angle_min = \
99+ self .get_parameter ('scan_angle_min' ).get_parameter_value ().double_value
100+
101+ self .declare_parameter ('scan_angle_max' , math .pi )
102+ self .scan_angle_max = \
103+ self .get_parameter ('scan_angle_max' ).get_parameter_value ().double_value
104+
105+ self .declare_parameter ('scan_angle_increment' , 0.0261 ) # 0.0261 rad = 1.5 degrees
106+ self .scan_angle_increment = \
107+ self .get_parameter ('scan_angle_increment' ).get_parameter_value ().double_value
108+
109+ self .declare_parameter ('scan_use_inf' , True )
110+ self .use_inf = \
111+ self .get_parameter ('scan_use_inf' ).get_parameter_value ().bool_value
112+
89113 self .t_map_to_odom = TransformStamped ()
90114 self .t_map_to_odom .header .frame_id = self .map_frame_id
91115 self .t_map_to_odom .child_frame_id = self .odom_frame_id
@@ -235,14 +259,14 @@ def publishLaserScan(self) -> None:
235259 self .scan_msg = LaserScan ()
236260 self .scan_msg .header .stamp = (self .get_clock ().now ()).to_msg ()
237261 self .scan_msg .header .frame_id = self .scan_frame_id
238- self .scan_msg .angle_min = - math . pi
239- self .scan_msg .angle_max = math . pi
262+ self .scan_msg .angle_min = self . scan_angle_min
263+ self .scan_msg .angle_max = self . scan_angle_max
240264 # 1.5 degrees
241- self .scan_msg .angle_increment = 0.0261799
265+ self .scan_msg .angle_increment = self . scan_angle_increment
242266 self .scan_msg .time_increment = 0.0
243267 self .scan_msg .scan_time = 0.1
244- self .scan_msg .range_min = 0.05
245- self .scan_msg .range_max = 30.0
268+ self .scan_msg .range_min = self . scan_range_min
269+ self .scan_msg .range_max = self . scan_range_max
246270 num_samples = int (
247271 (self .scan_msg .angle_max - self .scan_msg .angle_min ) /
248272 self .scan_msg .angle_increment )
@@ -323,7 +347,10 @@ def getLaserPose(self) -> tuple[float, float, float]:
323347
324348 def getLaserScan (self , num_samples : int ) -> None :
325349 if self .map is None or self .initial_pose is None or self .mat_base_to_laser is None :
326- self .scan_msg .ranges = [self .scan_msg .range_max - 0.1 ] * num_samples
350+ if self .use_inf :
351+ self .scan_msg .ranges = [float ('inf' )] * num_samples
352+ else :
353+ self .scan_msg .ranges = [self .scan_msg .range_max - 0.1 ] * num_samples
327354 return
328355
329356 x0 , y0 , theta = self .getLaserPose ()
@@ -332,7 +359,10 @@ def getLaserScan(self, num_samples: int) -> None:
332359
333360 if not 0 < mx0 < self .map .info .width or not 0 < my0 < self .map .info .height :
334361 # outside map
335- self .scan_msg .ranges = [self .scan_msg .range_max - 0.1 ] * num_samples
362+ if self .use_inf :
363+ self .scan_msg .ranges = [float ('inf' )] * num_samples
364+ else :
365+ self .scan_msg .ranges = [self .scan_msg .range_max - 0.1 ] * num_samples
336366 return
337367
338368 for i in range (num_samples ):
@@ -361,6 +391,8 @@ def getLaserScan(self, num_samples: int) -> None:
361391 break
362392
363393 line_iterator .advance ()
394+ if self .scan_msg .ranges [i ] == 0.0 and self .use_inf :
395+ self .scan_msg .ranges [i ] = float ('inf' )
364396
365397
366398def main () -> None :
0 commit comments