Omnidirectional square robot in Nav2
Hi!
I am trying to navigate an omnidirectional square robot using Nav2 and RTABMap. RTABMap is used for creating the map and afterwards localize the robot in it, therefore I don't need to use the AMCL nor the Map Server. Moreover I am using Ros2 Foxy.
I am pretty new with Nav2 and I am not able to tune the parameters correctly as there are some of them that I don't really understand how they work, although I have read the Nav2 documentation. I need to get the robot pass along a very narrow cave through where the robot enters roughly-
First of all, I tried to define my robot's footprint in the local and global costmap, however it seems like the footprint doesn't change, that is why I used the robot_radius although my robot has a square footprint... (I don't know if I have set something wrong)
Secondly, my robot gets stuck with the cave walls as the route created by the planner doesn't avoid part of them (when it seems it is possible to go through other path. As there are not many Planner parameters I don't know if maybe it has to something with the critics of the controller, but I don't understand them properly. It is also worth to mention that I am using the NavFn
Planner although in the Nav2 documentation (https://navigation.ros.org/setup_guid...) they recommend the Smac Lattice Planner
for my type of robot, however, this planner is not available for Ros2 Foxy (distribution I have to work with).
Finally, when the robot gets stuck, it doesn't enter in the recovery mode (I am using the predefined behavior tree where, after the robot isn't able to compute or follow the path, it spins 90º and waits), although the controller_server shows: Failed to make progess, Aborting handle.
Here it is my configuration file, any idea or clue will be very well appreciated:
bt_navigator:
ros__parameters:
use_sim_time: True
global_frame: map
robot_base_frame: base_link
odom_topic: world
enable_groot_monitoring: True
groot_zmq_publisher_port: 1666
groot_zmq_server_port: 1667
default_bt_xml_filename: "navigate_w_replanning_and_recovery.xml"
plugin_lib_names:
- nav2_compute_path_to_pose_action_bt_node
- nav2_follow_path_action_bt_node
- nav2_back_up_action_bt_node
- nav2_spin_action_bt_node
- nav2_wait_action_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_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_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_distance_traveled_condition_bt_node
bt_navigator_rclcpp_node:
ros__parameters:
use_sim_time: True
controller_server:
ros__parameters:
use_sim_time: True
odom_topic: "odom/unfiltered"
controller_frequency: 5.0
min_x_velocity_threshold: 0.001
min_y_velocity_threshold: 0.001
min_theta_velocity_threshold: 0.001
progress_checker_plugin: "progress_checker"
goal_checker_plugin: "goal_checker"
controller_plugins: ["FollowPath"]
# Progress checker parameters
progress_checker:
plugin: "nav2_controller::SimpleProgressChecker"
required_movement_radius: 0.1
movement_time_allowance: 20.0
# Goal checker parameters
goal_checker:
plugin: "nav2_controller::SimpleGoalChecker"
xy_goal_tolerance: 0.25
yaw_goal_tolerance: 0.25
stateful: True
# DWB parameters
FollowPath:
plugin: "dwb_core::DWBLocalPlanner"
debug_trajectory_details: True
min_vel_x: 0.0
min_vel_y: 0.0
max_vel_x: 2.0
max_vel_y: 1.0
max_vel_theta: 4.5
min_speed_xy: 0.2
max_speed_xy: 1.0
min_speed_theta: 0.0
# Add high threshold velocity for turtlebot 3 issue.
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
acc_lim_x: 2.5
acc_lim_y: 0.0
acc_lim_theta: 3.2
decel_lim_x: -2.5
decel_lim_y: 0.0
decel_lim_theta: -3.2
vx_samples: 20
vy_samples: 10
vtheta_samples: 20
sim_time ...