I have a mobile robot and I would like it to follow the walls of a room.
I have:
- A map of the room.
- Wheel encoders for the odometry.
- A Kalman filter for fusing data from wheel encoders and IMU.
- A Hokuyo lidar for localization and obstacle avoidance
- A Kinect to see obstacles which can not be seen by the Hokuyo.
- Amcl for localization.
- A couple of sharp sensors on the side for wall following.
I am not planning to use the global or local costmap because the localization of the robot is not perfect and the robot might think that it is closer (or further away) to the wall than it actually is and therefore, wall following might fail. So, I am planning to just use the data from Hokuyo lidar and sharp sensors to do wall following and maintain constant distance from the wall (say 10 cm).
Now, I would like to know what is the best technique for doing wall following in this manner? Also, how can one deal with the issue of open gaps in the wall (like open doors, etc..) while doing wall following using the above approach?
I know this is a very general question but any suggestions regarding it will be appreciated. Please let me know if you need more information from me.
Update:
I am just trying to do wall following in a given room (I have the vertices of the room in a global reference frame) For example, Lets say I have a map of a room (shown below). I want to make the robot follow the wall very closely (say 10 cm from the wall). Also, if there is an open space (on bottom left), the robot should not go in the adjacent room but should keep on doing wall following in the given room (For this, I have the boundary limits of the room which I can use to make sure the robot is within the given room).
The approach which I am thinking is to come up with an initial global path (set of points close to the wall) for wall following and then make sure robot goes from one point to the next making sure that it always maintains a certain distance from the wall. If there is no wall, then the robot can just follow the global path (assuming localization is good). I am not sure about its implementation complexity and whether there is a better algorithm/ approach to do something like this.