Sean’s Status Update for 03/07 (Week 4)

Progress

This week, I worked on implementing the mapping algorithm. Initially, I thought it would be an easy task given that 2D mapping simply implies scanning the room autonomously. However, it turns out it requires much more fine-tuning then that. There are 2 main phases to my mapping algorithm: edge-following and filling-in-the-rest.

Edge-Following

First, the robot performs “edge-following” to get the dimension of the room. The robot will first move forward until it detects an wall. Then, it rotate to the right(or left) in place until the wall is no longer visible. Once this is done, the robot will move forward in an arc steering to the left(or right). The reason for moving in an arc is to lead the robot toward the wall. If it moved straight instead, the robot will potentially travel away from the wall. The edge-following is “done” when the robot returns to its initial position where it detected the first wall. This task is done twice, once steering to the left and once to the right. Performing edge-following in both directions is necessary to scan the area that was potentially missed in one of the runs. Meanwhile, the XY-coordinate of the robot is being recorded to generate the map.

Filling in the Rest

Once the boundary of the room is set, the robot must travel the rest of the room to find any potential obstacles such as a furniture. This is a bit more tricky. First, it is hard to define the end-condition that guarantees enough samplings to generate a map. In addition, it is difficult to set the behavior of the robot that would work universally regardless of the shape of the room. It turns out that iRobot actually programmed Roomba to move “randomly”–move straight ahead, rotate random amount when bumped into something, and loop–to maximize the area being covered by it while cleaning. This works well if the the main function of the robot is to clean the room; there is essentially no limit on the time it takes, and it doesn’t matter too much even if some area is not inspected. However, when we need to generate a 2D map of the room, this can cause some problems. First, moving for a long time, especially including rotations, can introduce more and more error to the odometry. In order to use the map for path-planning, it is important to have a map that is as accurate and detailed as possible. Also, this algorithm doesn’t guarantee a completeness within a finite time. It might be the case that the robot cannot cover enough area within a reasonable time period. Thus, I decide to implement a more formulized behavior for the robot. I am defining the robot to essentially first move back-and-forth parallel to the first wall it detects. This will let the robot travel the room more efficiently. Then, it will do the same thing perpendicular to the first wall. This is to avoid potentially being trapped in a certain area of the room. More testing would be necessary to check the validity of this algorithm.

Deliverables next week

When I get back from the break, I plan to complete the 2D mapping algorithm

Schedule

On Schedule.

Leave a Reply

Your email address will not be published. Required fields are marked *