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 case?
If not, I think I should give up using navigation to avoid obstacle in this case.
This is my first time ask question here, if there is any violation or Insufficient narrative, please let me know and I will improve it as soon as possible.
Thanks!
Originally posted by Arthur6057 on ROS Answers with karma: 13 on 2020-08-11
Post score: 1