A mobile robot only moves horizontally and vertically, navigation avoid obstacle problem
Hi all,
I am simulating a mobile robot that only moves horizontal and vertical, like:
It's length is 7 meters, width is 2.5 meters, and LiDAR is on middle of the robot, the green arrow is the direction it can move, but only one direction at a time.
The wheels are using steering, so it can rotate all wheels for 90 degrees to change direction, like:
In this case, footprint
data sets to:[[-1.25, -3.5], [-1.25, 3.5], [1.25, 3.5], [1.25, -3.5]]
In this case, local_planner is: dwa_local_planner
When it moves vertical, it can find the local obstacle, and it can avoid obstacle(Let mobile robot stop), like:
When it moves horizontal, it finds the obstacle, too, but it can't avoid obstacle, like:
Then, I use dynamic_reconfigure update my footprint
data to: [[-3.5, -3.5], [-3.5, 3.5], [3.5, 3.5], [3.5, -3.5]]
And, it success, like:
But now, It can't move horizontal to the edge of map, like:
I want it to move like:
But this case it can't avoid obstacle of edge of mobile robot.
My parameters of navigation:
move_base_params.yaml
footprint: [[-1.25, -3.5], [-1.25, 3.5], [1.25, 3.5], [1.25, -3.5]]
controller_frequency: 5.0
controller_patience: 15.0
planner_frequency: 0.0
planner_patience: 5.0
max_planning_retries: 0
oscillation_timeout: 30.0
recovery_behavior_enabled: true
recovery_behaviors: [{name: conservative_reset, type: clear_costmap_recovery/ClearCostmapRecovery}, {name: aggressive_reset, type: clear_costmap_recovery/ClearCostmapRecovery}]
conservative_reset:
reset_distance: 1.25
dwa_local_planner_params.yaml
base_local_planner: dwa_local_planner/DWAPlannerROS
DWAPlannerROS:
max_vel_x: 0.5
min_vel_x: -0.5
max_vel_y: 0.5
min_vel_y: -0.5
max_vel_trans: 0.5
min_vel_trans: -0.5
max_vel_theta: 0.05
min_vel_theta: -0.05
acc_lim_x: 5.0
acc_lim_y: 5.0
acc_lim_theta: 3.2
xy_goal_tolerance: 0.03
yaw_goal_tolerance: 100
latch_xy_goal_tolerance: true
sim_time: 1.0
vx_samples: 10
vy_samples: 10
vth_samples: 15
path_distance_bias: 24.0
goal_distance_bias: 72.0
occdist_scale: -1.0
forward_point_distance: 0.01
stop_time_buffer: 0.2
scaling_speed: 0.25
max_scaling_factor: 0.2
prune_plan: true
oscillation_reset_dist: 0.001
oscillation_reset_angle: 0.002
publish_traj_pc : true
publish_cost_grid_pc: true
costmap_common_params.yaml
robot_base_frame: base_footprint
transform_tolerance: 0.4
update_frequency: 5.0
publish_frequency: 1.0
obstacle_range: 6.0
publish_voxel_map: true
navigation_map:
map_topic: /map
obstacles:
observation_sources: scan
scan:
sensor_frame: laser_link
data_type: LaserScan
topic: scan
marking: true
clearing: true
global_costmap_params.yaml
global_costmap:
global_frame: map
static_map: true
raytrace_range: 7.0
resolution: 0.05
z_resolution: 0.2
z_voxels: 10
inflation:
cost_scaling_factor: 3.0
inflation_radius: 0.6
plugins:
- {name: navigation_map, type: "costmap_2d::StaticLayer" }
- {name: obstacles, type: "costmap_2d::VoxelLayer" }
- {name: inflation, type: "costmap_2d::InflationLayer" }
local_costmap_params.yaml
local_costmap:
global_frame: odom
static_map: false
rolling_window: true
raytrace_range: 7.0
resolution: 0.05
width: 10.0
height: 10.0
origin_x: 0.0
origin_y: 0.0
inflation:
cost_scaling_factor: 3.0
inflation_radius: 3.5
plugins:
- {name: obstacles, type: "costmap_2d::VoxelLayer" }
- {name: inflation, type: "costmap_2d::InflationLayer" }
My questions are:
- Can I eliminate global costmap obstacle in local costmap?
- In addition to changing the footprint, how can I change the obstacle inflation in different axis?
Is there any other solution to figure out this problem in this ...