Controller server parameters for an omnidirectional robot
Hello,
I have a mecanum robot that's using Nav2. Right now, I'm using 2D Goal Pose to move the robot around the map. I currently have two main problems:
- I can't seem to increase the velocity and
- It tends to move diagonally (positive x and y and at a 45º angle) whenever there are no objects around.
I've played around with many parameters, from costmap height/width to controller frequency, to max_vel, etc.. but I haven't been able to confidently say something like: Increasing this parameter X resulted in velocity increasing, or something similar (other than costmap size matters to velocity). I've also noticed how some changes that I made to increase the speed have made it less nimble and smart when passing through a "track" full of obstacles that I have.
Things I've already tried: Read Navigation Tuning Guide paper, read several git issues/ros answers (most are due to costmap being small or other stuff that doesn't apply). What's the best course of action, is there a god blessed configuration guide I'm missing, or should I just read in depth about the DWB algorithm and everything will make sense? I'm not looking for a step by step, just point me somewhere!
Here's the config file: context: I'm using a Jetson Xavier NX which might explain why parameters such as controller_frequency might be low. The max/min_vel values may also be wild, that's because I haven't seen any difference after changing them, since it never goes over ~0.4 m/s anyways. My current logic is to have a high max_vel of X compared to Y so it prefers to move forward.
controller_server:
ros__parameters:
use_sim_time: False
controller_frequency: 2.0
min_x_velocity_threshold: 0.001
min_y_velocity_threshold: 0.001
#0.5
min_theta_velocity_threshold: 0.001
failure_tolerance: 0.3
progress_checker_plugin: "progress_checker"
goal_checker_plugins: ["general_goal_checker"] # "precise_goal_checker"
controller_plugins: ["FollowPath"]
# Progress checker parameters
progress_checker:
plugin: "nav2_controller::SimpleProgressChecker"
required_movement_radius: 0.5
movement_time_allowance: 10.0
# Goal checker parameters
#precise_goal_checker:
# plugin: "nav2_controller::SimpleGoalChecker"
# xy_goal_tolerance: 0.25
# yaw_goal_tolerance: 0.25
# stateful: True
general_goal_checker:
stateful: True
plugin: "nav2_controller::SimpleGoalChecker"
xy_goal_tolerance: 0.25
yaw_goal_tolerance: 0.25
# DWB parameters
FollowPath:
plugin: "nav2_rotation_shim_controller::RotationShimController"
primary_controller: "dwb_core::DWBLocalPlanner"
angular_dist_threshold: 0.785
forward_sampling_distance: 0.5
rotate_to_heading_angular_vel: 0.8
max_angular_accel: 1.0
simulate_ahead_time: 1.0
debug_trajectory_details: True
min_vel_x: -1.
min_vel_y: -0.2
max_vel_x: 1.5
max_vel_y: 0.2
max_vel_theta: 0.4
min_speed_xy: -1.5
max_speed_xy: 1.5
min_speed_theta: -0.4
# Add high threshold velocity for turtlebot 3 issue.
# https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75
acc_lim_x: 0.5
acc_lim_y: 0.5
acc_lim_theta: 0.2
decel_lim_x: -0.5
decel_lim_y: -0.5
decel_lim_theta: -1.0
vx_samples: 15
vy_samples: 15
vtheta_samples: 20
sim_time: 3.0 #1.7
linear_granularity: 0.05
angular_granularity: 0.025
transform_tolerance: 0.2
xy_goal_tolerance: 0.25
trans_stopped_velocity: 0.25
short_circuit_trajectory_evaluation: True
stateful: True
critics: ["RotateToGoal", "Oscillation", "BaseObstacle", "GoalAlign", "PathAlign", "PathDist", "GoalDist", "ObstacleFootprintCritic", "Twirling"]
BaseObstacle.scale: 0.02
PathAlign.scale: 32.0
PathAlign.forward_point_distance: 0.1
GoalAlign.scale: 24.0
GoalAlign.forward_point_distance: 0.1
PathDist.scale ...