Skip to content

Commit cd7a0b7

Browse files
added config for laserscan in lb-sim (#5174)
* added config for laserscan in lb-sim Signed-off-by: RamanaBotta <[email protected]> * fixing ament_flake8 errors Signed-off-by: RamanaBotta <[email protected]> * review: use_inf is default:true and added parameters on readme #4992 Signed-off-by: RamanaBotta <[email protected]> * refactor: meaningfull value for scan_angle_increment Signed-off-by: RamanaBotta <[email protected]> --------- Signed-off-by: RamanaBotta <[email protected]> Co-authored-by: RamanaBotta <[email protected]>
1 parent 09c4617 commit cd7a0b7

File tree

3 files changed

+52
-7
lines changed

3 files changed

+52
-7
lines changed

nav2_bringup/params/nav2_params.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,3 +565,9 @@ loopback_simulator:
565565
map_frame_id: "map"
566566
scan_frame_id: "base_scan" # tb4_loopback_simulator.launch.py remaps to 'rplidar_link'
567567
update_duration: 0.02
568+
scan_range_min: 0.05
569+
scan_range_max: 30.0
570+
scan_angle_min: -3.1415
571+
scan_angle_max: 3.1415
572+
scan_angle_increment: 0.02617
573+
scan_use_inf: true

nav2_loopback_sim/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ ros2 launch nav2_bringup tb4_loopback_simulation.launch.py # Nav2 integrated na
4242
- `scan_publish_dur`: : The duration between publishing scan (default 0.1s -- 10hz)
4343
- `publish_map_odom_tf`: Whether or not to publish tf from `map_frame_id` to `odom_frame_id` (default `true`)
4444
- `publish_clock`: Whether or not to publish simulated clock to `/clock` (default `true`)
45+
- `scan_range_min`: Minimum measurable distance from the scan in meters. Values below this are considered invalid (default: `0.05`)
46+
- `scan_range_max`: Maximum measurable distance from the scan in meters. Values beyond this are out of range (default: `30.0`)
47+
- `scan_angle_min`: Starting angle of the scan in radians (leftmost angle) (default: `` / `-3.1415`)
48+
- `scan_angle_max`: Ending angle of the scan in radians (rightmost angle) (default: `π` / `3.1415`)
49+
- `scan_angle_increment`: Angular resolution of the scan in radians (angle between consecutive measurements) (default: `0.02617`)
50+
- `scan_use_inf`: Whether to use `inf` for out-of-range values. If `false`, uses `scan_range_max - 0.1` instead (default: `True`)
51+
4552

4653
### Topics
4754

nav2_loopback_sim/nav2_loopback_sim/loopback_simulator.py

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

366398
def main() -> None:

0 commit comments

Comments
 (0)