Avoid to hit corners using A* algorithm
I'm using ROS melodic with Gazebo 9.9.0 on an Ubuntu 18.04.2 LTS.
I'm implementing an autonomous node that uses A* algorithm to move a robot from one position to another. The robot will be on a Gazebo World.
My problem is when moves on diagonal, sometimes it hits a corner and can not continue moving.
For example, I want to move from cell (1,1) to cell(10,12). I'm using an ones and zeros grid that it is represented in Gazebo and I translate the cells into Gazebo world's locations. Moving from (1,1) to (10,12), I get this path:
The Path is -> (1,1) -> (2,2) -> (3,3) -> (4,4) -> (4,5) -> (5,6) -> (6,6) -> (7,6) -> (8,7) -> (9,7) -> (10,7) -> (11,7) -> (12,8) -> (11,9) -> (11,10) -> (10,11) -> (10,12)
Cell (1,1) is the top most left cell in map. The problem comes when it tries to move from (4,5) to (5,6). In the following picture, the robot is on cell (4,5) facing to cell (5,6), and if it moves, it will hit the corner.
The algorithm is doing this:
Is there any way to solve this problem or this is a problem attached to A* algorithm?
which local planner are you using?
No local planner. I have implemented A*, and using Odometry and cmd_vel topics to move the robot.