Hello everyone,
I’m using a ZED camera for navigation and working with Isaac ROS VSLAM, Isaac ROS Nvblox, and Nav2. I mainly modified the isaac_sim_example.launch.py file from the Nvblox examples. During the process, I encountered the following warnings, and the robot is unable to successfully navigate to the target position.
If I use only VSLAM and Nvblox, everything works fine. However, when Nav2 is added, the navigation fails. Previously, I was able to successfully navigate with a RealSense camera, but after switching to the ZED camera, the above issues occurred.
The main content of the launch file is as follows:
from isaac_ros_launch_utils.all_types import *
import isaac_ros_launch_utils as lu
from nvblox_ros_python_utils.nvblox_launch_utils import NvbloxMode, NvbloxCamera, NvbloxPeopleSegmentation
from nvblox_ros_python_utils.nvblox_constants import SEMSEGNET_INPUT_IMAGE_WIDTH, SEMSEGNET_INPUT_IMAGE_HEIGHT, NVBLOX_CONTAINER_NAME
def generate_launch_description() -> LaunchDescription:
args = lu.ArgumentContainer()
args.add_arg('log_level', 'info', choices=['debug', 'info', 'warn'], cli=True)
args.add_arg(
'mode',
NvbloxMode.static,
choices=NvbloxMode.names(),
description='The nvblox mode.',
cli=True)
args.add_arg(
'people_segmentation',
default=NvbloxPeopleSegmentation.peoplesemsegnet_vanilla,
choices=[
str(NvbloxPeopleSegmentation.peoplesemsegnet_vanilla),
str(NvbloxPeopleSegmentation.peoplesemsegnet_shuffleseg)
],
description='The model type of PeopleSemSegNet (only used when mode:=people).',
cli=True)
args.add_arg(
'num_cameras',
1,
choices=['0', '1', '3'],
description='Number of cameras that should be used for 3d reconstruction',
cli=True)
args.add_arg(
'lidar', False, description='Whether to use 3d lidar for 3d reconstruction', cli=True)
args.add_arg(
'navigation',
True,
description='Whether to enable nav2 for navigation in Isaac Sim.',
cli=True)
actions = args.get_launch_actions()
# Globally set use_sim_time
actions.append(SetParameter('use_sim_time', False))
# AGV driver
"""actions.append(
lu.include(
'ape_base_driver',
'launch/ape_base_driver.launch.py'))"""
actions.append(Node(
package='tf2_ros',
executable='static_transform_publisher',
name='base2camera_tf',
arguments=["0.625", "0.0475", "0.373", "0", "0", "0", "base_link", "zed_camera_link"]
))
"""actions.append(Node(
package='tf2_ros',
executable='static_transform_publisher',
name='footprint_static_tf',
arguments=["0", "0", "0", "0", "0", "0", "base_link", "base_footprint"]
))"""
# ZED driver
actions.append(
lu.include(
'black_knight_test',
'launch/sensors/zed.launch.py',
launch_arguments={
'container_name': NVBLOX_CONTAINER_NAME,
'zed_camera_model': NvbloxCamera.zed2,
}))
# Visual SLAM
actions.append(
lu.include(
'black_knight_test',
'launch/perception/vslam_zed.launch.py',
launch_arguments={
'container_name': NVBLOX_CONTAINER_NAME,
'camera': NvbloxCamera.zed2,
},
# Delay for 1 second to make sure that the static topics from the rosbag are published.
delay=1.0,
))
# People segmentation
actions.append(
lu.include(
'black_knight_test',
'launch/perception/segmentation.launch.py',
launch_arguments={
'container_name': NVBLOX_CONTAINER_NAME,
'people_segmentation': args.people_segmentation,
'input_topic': '/zed/zed_node/rgb/image_rect_color',
'input_camera_info_topic': '/zed/zed_node/rgb/camera_info',
},
condition=IfCondition(lu.has_substring(args.mode, NvbloxMode.people))))
# Navigation
# NOTE: needs to be called before the component container because it modifies params globally
actions.append(
lu.include(
'black_knight_test',
'launch/navigation/nvblox_navigation.launch.py',
launch_arguments={
'container_name': NVBLOX_CONTAINER_NAME,
'mode': args.mode,
},
condition=IfCondition(lu.is_true(args.navigation))))
# Container
actions.append(
lu.component_container(
NVBLOX_CONTAINER_NAME, container_type='isolated', log_level=args.log_level))
# Nvblox
actions.append(
lu.include(
'black_knight_test',
'launch/perception/nvblox.launch.py',
launch_arguments={
'container_name': NVBLOX_CONTAINER_NAME,
'mode': args.mode,
'camera': NvbloxCamera.zed2,
'num_cameras': args.num_cameras,
'lidar': args.lidar,
}))
# Visualization
actions.append(
lu.include(
'black_knight_test',
'launch/visualization/visualization.launch.py',
launch_arguments={
'mode': args.mode,
'camera': NvbloxCamera.zed2,
#'camera': NvbloxCamera.isaac_sim,
}))
return LaunchDescription(actions)
The setup is as follows:
- Platform: Jetson AGX Orin 64GB
- Camera: ZED2i
The navigation parameter configuration file (modified from nova_carter_navigation.yaml) is as follows:
slam_toolbox:
ros__parameters:
# Plugin params
solver_plugin: solver_plugins::CeresSolver
ceres_linear_solver: SPARSE_NORMAL_CHOLESKY
ceres_preconditioner: SCHUR_JACOBI
ceres_trust_strategy: LEVENBERG_MARQUARDT
ceres_dogleg_type: TRADITIONAL_DOGLEG
ceres_loss_function: None
# ROS Parameters
odom_frame: odom
map_frame: map
base_frame: base_link
scan_topic: /front_3d_lidar/scan
mode: mapping
# lifelong params
lifelong_search_use_tree: false
lifelong_minimum_score: 0.1
lifelong_iou_match: 0.85
lifelong_node_removal_score: 0.04
lifelong_overlap_score_scale: 0.06
lifelong_constraint_multiplier: 0.08
lifelong_nearby_penalty: 0.001
lifelong_candidates_scale: 0.03
# if you'd like to immediately start continuing a map at a given pose
# or at the dock, but they are mutually exclusive, if pose is given
# will use pose
#map_file_name: test_steve
#map_start_pose: [0.0, 0.0, 0.0]
#map_start_at_dock: true
debug_logging: false
throttle_scans: 1
transform_publish_period: 0.02 #if 0 never publishes odometry
map_update_interval: 5.0
resolution: 0.05
max_laser_range: 20.0 #for rastering images
minimum_time_interval: 0.5
transform_timeout: 0.2
tf_buffer_duration: 10.
stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps
# General Parameters
use_scan_matching: true
use_scan_barycenter: true
minimum_travel_distance: 0.5
minimum_travel_heading: 0.5
scan_buffer_size: 10
scan_buffer_maximum_scan_distance: 10.0
link_match_minimum_response_fine: 0.1
link_scan_maximum_distance: 1.5
loop_search_maximum_distance: 3.0
do_loop_closing: true
loop_match_minimum_chain_size: 10
loop_match_maximum_variance_coarse: 3.0
loop_match_minimum_response_coarse: 0.35
loop_match_minimum_response_fine: 0.45
# Correlation Parameters - Correlation Parameters
correlation_search_space_dimension: 0.5
correlation_search_space_resolution: 0.01
correlation_search_space_smear_deviation: 0.1
# Correlation Parameters - Loop Closure Parameters
loop_search_space_dimension: 8.0
loop_search_space_resolution: 0.05
loop_search_space_smear_deviation: 0.03
# Scan Matcher Parameters
distance_variance_penalty: 0.5
angle_variance_penalty: 1.0
fine_search_angle_offset: 0.00349
coarse_search_angle_offset: 0.349
coarse_angle_resolution: 0.0349
minimum_angle_penalty: 0.9
minimum_distance_penalty: 0.5
use_response_expansion: true
amcl:
ros__parameters:
use_sim_time: False
alpha1: 0.1
alpha2: 0.1
alpha3: 0.1
alpha4: 0.1
alpha5: 0.1
base_frame_id: "base_link"
beam_skip_distance: 0.5
beam_skip_error_threshold: 0.9
beam_skip_threshold: 0.3
do_beamskip: false
global_frame_id: "map"
lambda_short: 0.1
laser_likelihood_max_dist: 4.0
laser_max_range: 100.0
laser_min_range: -1.0
laser_model_type: "beam"
max_beams: 360
max_particles: 2000
min_particles: 500
odom_frame_id: "odom"
pf_err: 0.05
pf_z: 0.99
recovery_alpha_fast: 0.0
recovery_alpha_slow: 0.0
resample_interval: 1
robot_model_type: "nav2_amcl::DifferentialMotionModel"
save_pose_rate: 0.5
sigma_hit: 0.1
tf_broadcast: true
transform_tolerance: 3.0
update_min_a: 0.2
update_min_d: 0.25
z_hit: 0.5
z_max: 0.05
z_rand: 0.4
z_short: 0.05
bt_navigator:
ros__parameters:
use_sim_time: False
global_frame: map
robot_base_frame: base_link
bt_loop_duration: 10
default_server_timeout: 20
navigators: ['navigate_to_pose', 'navigate_through_poses']
default_nav_to_pose_bt_xml: $(find-pkg-share nova_carter_navigation)/behavior_trees/navigate_to_pose_w_replanning_and_recovery.xml
default_nav_through_poses_bt_xml: $(find-pkg-share nova_carter_navigation)/behavior_trees/navigate_through_poses_w_replanning_and_recovery.xml
navigate_to_pose:
plugin: "nav2_bt_navigator/NavigateToPoseNavigator"
navigate_through_poses:
plugin: "nav2_bt_navigator/NavigateThroughPosesNavigator"
# 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
# nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
# nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
# They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
plugin_lib_names:
- nav2_compute_path_to_pose_action_bt_node
- nav2_compute_path_through_poses_action_bt_node
- nav2_smooth_path_action_bt_node
- nav2_follow_path_action_bt_node
- nav2_spin_action_bt_node
- nav2_wait_action_bt_node
- nav2_assisted_teleop_action_bt_node
- nav2_back_up_action_bt_node
- nav2_drive_on_heading_bt_node
- nav2_clear_costmap_service_bt_node
- nav2_is_stuck_condition_bt_node
- nav2_goal_reached_condition_bt_node
- nav2_goal_updated_condition_bt_node
- nav2_globally_updated_goal_condition_bt_node
- nav2_is_path_valid_condition_bt_node
- nav2_initial_pose_received_condition_bt_node
- nav2_reinitialize_global_localization_service_bt_node
- nav2_rate_controller_bt_node
- nav2_distance_controller_bt_node
- nav2_speed_controller_bt_node
- nav2_truncate_path_action_bt_node
- nav2_truncate_path_local_action_bt_node
- nav2_goal_updater_node_bt_node
- nav2_recovery_node_bt_node
- nav2_pipeline_sequence_bt_node
- nav2_round_robin_node_bt_node
- nav2_transform_available_condition_bt_node
- nav2_time_expired_condition_bt_node
- nav2_path_expiring_timer_condition
- nav2_distance_traveled_condition_bt_node
- nav2_single_trigger_bt_node
- nav2_goal_updated_controller_bt_node
- nav2_is_battery_low_condition_bt_node
- nav2_navigate_through_poses_action_bt_node
- nav2_navigate_to_pose_action_bt_node
- nav2_remove_passed_goals_action_bt_node
- nav2_planner_selector_bt_node
- nav2_controller_selector_bt_node
- nav2_goal_checker_selector_bt_node
- nav2_controller_cancel_bt_node
- nav2_path_longer_on_approach_bt_node
- nav2_wait_cancel_bt_node
- nav2_spin_cancel_bt_node
- nav2_back_up_cancel_bt_node
- nav2_assisted_teleop_cancel_bt_node
- nav2_drive_on_heading_cancel_bt_node
- nav2_is_battery_charging_condition_bt_node
bt_navigator_navigate_through_poses_rclcpp_node:
ros__parameters:
use_sim_time: False
bt_navigator_navigate_to_pose_rclcpp_node:
ros__parameters:
use_sim_time: False
controller_server:
ros__parameters:
use_sim_time: False
controller_frequency: 20.0
progress_checker_plugin: "progress_checker"
goal_checker_plugins: ["stopped_goal_checker"]
controller_plugins: ["FollowPath"]
# Progress checker parameters
progress_checker:
plugin: "nav2_controller::SimpleProgressChecker"
required_movement_radius: 0.5
movement_time_allowance: 10.0
stopped_goal_checker:
plugin: "nav2_controller::StoppedGoalChecker"
trans_stopped_velocity: 0.1
rot_stopped_velocity: 0.1
xy_goal_tolerance: 0.25
yaw_goal_tolerance: 0.25
FollowPath:
plugin: "nav2_mppi_controller::MPPIController"
time_steps: 56
model_dt: 0.05
batch_size: 2000
vx_std: 0.2
wz_std: 0.4
vx_max: 0.5
vx_min: -0.35
wz_max: 1.9
iteration_count: 1
prune_distance: 1.7
transform_tolerance: 0.1
temperature: 0.3
gamma: 0.015
motion_model: "DiffDrive"
visualize: false
reset_period: 1.0 # (only in Humble)
regenerate_noises: false
TrajectoryVisualizer:
trajectory_step: 5
time_step: 3
critics: ["ConstraintCritic", "ObstaclesCritic", "GoalCritic", "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", "PathAngleCritic", "PreferForwardCritic"]
ConstraintCritic:
enabled: true
cost_power: 1
cost_weight: 4.0
GoalCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
threshold_to_consider: 1.4
GoalAngleCritic:
enabled: true
cost_power: 1
cost_weight: 3.0
threshold_to_consider: 0.5
PreferForwardCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
threshold_to_consider: 0.5
ObstaclesCritic:
enabled: true
cost_power: 1
repulsion_weight: 4.0
critical_weight: 20.0
consider_footprint: True
collision_cost: 10000.0
collision_margin_distance: 0.1
near_goal_distance: 0.5
inflation_radius: 0.8 # (only in Humble)
cost_scaling_factor: 10.0 # (only in Humble)
PathAlignCritic:
enabled: true
cost_power: 1
cost_weight: 14.0
max_path_occupancy_ratio: 0.05
trajectory_point_step: 3
threshold_to_consider: 0.5
offset_from_furthest: 20
use_path_orientations: false
PathFollowCritic:
enabled: true
cost_power: 1
cost_weight: 5.0
offset_from_furthest: 5
threshold_to_consider: 1.4
PathAngleCritic:
enabled: true
cost_power: 1
cost_weight: 2.0
offset_from_furthest: 4
threshold_to_consider: 0.5
max_angle_to_furthest: 1.0
mode: 0
# TwirlingCritic:
# enabled: true
# twirling_cost_power: 1
# twirling_cost_weight: 10.0
local_costmap:
local_costmap:
ros__parameters:
footprint_padding: 0.03
update_frequency: 5.0
publish_frequency: 2.0
global_frame: odom
robot_base_frame: base_link
use_sim_time: False
rolling_window: true
width: 3
height: 3
resolution: 0.05
transform_tolerance: 0.3
footprint: "[ [0.14, 0.25], [0.14, -0.25], [-0.607, -0.25], [-0.607, 0.25] ]"
mark_threshold: 2
always_send_full_costmap: True
plugins: [TO_BE_OVERRIDDEN]
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
enabled: True
cost_scaling_factor: 10.0
inflation_radius: 0.8
front_2d_lidar_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
scan:
topic: /front_2d_lidar/scan
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "LaserScan"
back_2d_lidar_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
scan:
topic: /back_2d_lidar/scan
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "LaserScan"
nvblox_layer:
plugin: "nvblox::nav2::NvbloxCostmapLayer"
enabled: True
nav2_costmap_global_frame: odom # must match with global_frame of local_costmap
nvblox_map_slice_topic: "/nvblox_node/static_map_slice"
convert_to_binary_costmap: True
3d_lidar_layer:
plugin: "spatio_temporal_voxel_layer/SpatioTemporalVoxelLayer"
enabled: true
voxel_decay: 15.0 # seconds if linear, e^n if exponential
decay_model: 0 # 0=linear, 1=exponential, -1=persistent
voxel_size: 0.05 # meters
track_unknown_space: False # default space is known
mark_threshold: 2 # voxel height
update_footprint_enabled: true
combination_method: 1 # 1=max, 0=override
origin_z: 0.0 # meters
publish_voxel_map: true # default off
transform_tolerance: 0.2 # seconds
observation_sources: hesai_mark hesai_clear
hesai_mark:
data_type: PointCloud2
topic: /front_3d_lidar/pointcloud
marking: true
clearing: false
obstacle_range: 3.0 # meters
min_obstacle_height: 0.1 # default 0, meters
max_obstacle_height: 1.5 # default 3, meters
expected_update_rate: 0.0 # default 0, if not updating at this rate at least, remove from buffer
observation_persistence: 0.0 # default 0, use all measurements taken during now-value, 0=latest
inf_is_valid: false # default false, for laser scans
filter: "voxel" # default passthrough, apply "voxel", "passthrough", or no filter to sensor data, recommend on voxel_min_points: 0 # default 0, minimum points per voxel for voxel filter
clear_after_reading: true # default false, clear the buffer after the layer gets readings from it
hesai_clear:
enabled: true #default true, can be toggled on/off with associated service call
data_type: PointCloud2
topic: /front_3d_lidar/pointcloud
marking: false
clearing: true
max_z: 20.0 # default 0, meters
min_z: 0.05 # default 10, meters
vertical_fov_angle: 1.15 # Note: This the full fov.
vertical_fov_padding: 0.05 # 3D Lidar only. Default 0, in meters
horizontal_fov_angle: 6.29 # 3D lidar scanners like the VLP16 have 360 deg horizontal FOV.
decay_acceleration: 5.0 # default 0, 1/s^2.
model_type: 1 # default 0, model type for frustum. 0=depth camera, 1=3d lidar like VLP16 or similar
global_costmap:
global_costmap:
ros__parameters:
footprint_padding: 0.0
update_frequency: 1.0
publish_frequency: 1.0
global_frame: map
robot_base_frame: base_link
use_sim_time: False
footprint: "[ [0.14, 0.25], [0.14, -0.25], [-0.607, -0.25], [-0.607, 0.25] ]"
resolution: 0.05
#transform_tolerance: 0.3
# The following is only used as a default when no map is specified.
width: 50
height: 50
origin_x: -25.0
origin_y: -25.0
track_unknown_space: False
mark_threshold: 2
always_send_full_costmap: False
plugins: [TO_BE_OVERRIDDEN]
static_map_layer:
plugin: "nav2_costmap_2d::StaticLayer"
map_subscribe_transient_local: True
enabled: true
inflation_layer:
plugin: "nav2_costmap_2d::InflationLayer"
enabled: True
cost_scaling_factor: 10.0
inflation_radius: 0.8
front_2d_lidar_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
scan:
topic: /front_2d_lidar/scan
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "LaserScan"
back_2d_lidar_layer:
plugin: "nav2_costmap_2d::ObstacleLayer"
enabled: True
observation_sources: scan
scan:
topic: /back_2d_lidar/scan
max_obstacle_height: 2.0
clearing: True
marking: True
data_type: "LaserScan"
nvblox_layer:
plugin: "nvblox::nav2::NvbloxCostmapLayer"
enabled: True
nav2_costmap_global_frame: map # must match with global_frame of global_costmap
nvblox_map_slice_topic: "/nvblox_node/static_map_slice"
convert_to_binary_costmap: True
map_server:
ros__parameters:
use_sim_time: False
# Overridden in launch by the "map" launch configuration or provided default value.
# To use in yaml, remove the default "map" value in the tb3_simulation_launch.py file & provide full path to map below.
yaml_filename: ""
map_saver:
ros__parameters:
use_sim_time: False
save_map_timeout: 5.0
free_thresh_default: 0.25
occupied_thresh_default: 0.65
map_subscribe_transient_local: True
planner_server:
ros__parameters:
expected_planner_frequency: 1.0
use_sim_time: False
planner_plugins: ["GridBased"]
GridBased:
plugin: "nav2_smac_planner/SmacPlannerHybrid"
downsample_costmap: false # whether or not to downsample the map
downsampling_factor: 1 # multiplier for the resolution of the costmap layer (e.g. 2 on a 5cm costmap would be 10cm)
tolerance: 0.25 # dist-to-goal heuristic cost (distance) for valid tolerance endpoints if exact goal cannot be found.
allow_unknown: true # allow traveling in unknown space
max_iterations: 1000000 # maximum total iterations to search for before failing (in case unreachable), set to -1 to disable
max_on_approach_iterations: 1000 # Maximum number of iterations after within tolerances to continue to try to find exact solution
max_planning_time: 5.0 # max time in s for planner to plan, smooth
motion_model_for_search: "REEDS_SHEPP" # Hybrid-A* Dubin, Redds-Shepp
angle_quantization_bins: 72 # Number of angle bins for search
analytic_expansion_ratio: 3.5 # The ratio to attempt analytic expansions during search for final approach.
analytic_expansion_max_length: 1.5 # For Hybrid/Lattice nodes: The maximum length of the analytic expansion to be considered valid to prevent unsafe shortcutting
minimum_turning_radius: 0.20 # minimum turning radius in m of path / vehicle
reverse_penalty: 2.0 # Penalty to apply if motion is reversing, must be => 1
change_penalty: 0.0 # Penalty to apply if motion is changing directions (L to R), must be >= 0
non_straight_penalty: 1.2 # Penalty to apply if motion is non-straight, must be => 1
cost_penalty: 3.0 # Penalty to apply to higher cost areas when adding into the obstacle map dynamic programming distance expansion heuristic. This drives the robot more towards the center of passages. A value between 1.3 - 3.5 is reasonable.
retrospective_penalty: 0.015
lookup_table_size: 20.0 # Size of the dubin/reeds-sheep distance window to cache, in meters.
cache_obstacle_heuristic: false # Cache the obstacle map dynamic programming distance expansion heuristic between subsiquent replannings of the same goal location. Dramatically speeds up replanning performance (40x) if costmap is largely static.
debug_visualizations: false # For Hybrid nodes: Whether to publish expansions on the /expansions topic as an array of poses (the orientation has no meaning) and the path's footprints on the /planned_footprints topic. WARNING: heavy to compute and to display, for debug only as it degrades the performance.
use_quadratic_cost_penalty: False
downsample_obstacle_heuristic: True
allow_primitive_interpolation: False
smooth_path: True # If true, does a simple and quick smoothing post-processing to the path
smoother:
max_iterations: 1000
w_smooth: 0.3
w_data: 0.2
tolerance: 1.0e-10
do_refinement: true
refinement_num: 2
smoother_server:
ros__parameters:
use_sim_time: False
smoother_plugins: ["simple_smoother"]
simple_smoother:
plugin: "nav2_smoother::SimpleSmoother"
tolerance: 1.0e-10
max_its: 1000
do_refinement: True
behavior_server:
ros__parameters:
costmap_topic: local_costmap/costmap_raw
footprint_topic: local_costmap/published_footprint
cycle_frequency: 10.0
behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"]
spin:
plugin: "nav2_behaviors/Spin"
backup:
plugin: "nav2_behaviors/BackUp"
drive_on_heading:
plugin: "nav2_behaviors/DriveOnHeading"
wait:
plugin: "nav2_behaviors/Wait"
assisted_teleop:
plugin: "nav2_behaviors/AssistedTeleop"
global_frame: odom
robot_base_frame: base_link
transform_tolerance: 0.1
use_sim_time: False
simulate_ahead_time: 2.0
max_rotational_vel: 1.0
min_rotational_vel: 0.4
rotational_acc_lim: 3.2
robot_state_publisher:
ros__parameters:
use_sim_time: False
waypoint_follower:
ros__parameters:
use_sim_time: False
loop_rate: 20
stop_on_failure: false
waypoint_task_executor_plugin: "wait_at_waypoint"
wait_at_waypoint:
plugin: "nav2_waypoint_follower::WaitAtWaypoint"
enabled: True
waypoint_pause_duration: 200
velocity_smoother:
ros__parameters:
use_sim_time: False
smoothing_frequency: 20.0
scale_velocities: False
feedback: "OPEN_LOOP"
max_velocity: [0.7, 0.0, 1.0]
min_velocity: [-0.7, 0.0, -1.0]
max_accel: [2.5, 0.0, 3.2]
max_decel: [-2.5, 0.0, -3.2]
odom_duration: 0.1
deadband_velocity: [0.0, 0.0, 0.0]
velocity_timeout: 1.0
Since I am running this on a physical robot, use_sim_time is set to false. I have searched for related information online and tried modifying various navigation parameters (including transform_tolerance and the frequency of various servers), but nothing worked.
I am new to ROS and have been troubleshooting this issue for a week without success. I am unsure if it is a configuration problem or something else. Any help or suggestions would be greatly appreciated.
Thank you!
