Task Generation

Now that we are performing search in an unknown environment, we:

  • Need to be able to generate interest points that help explore the unmapped parts of the environment and exploit the already mapped environment.
    • Since the exploration sensor (Lidar) has a larger range than the exploitation sensor (camera), some mapped out parts of the environments will not have been effectively searched for victims. We will have to generate coverage and frontier tasks.
  • Need unified solution for both coverage planning and frontier exploration.
    • We want to be able to generate coverage and frontier tasks with the same system.
  • Need to keep a track of visited/unvisited areas in a dynamic map.
    • Since the map will be continuously changing, it will be hard to keep track of which areas have been already visited, and which already areas correspond with newly mapped areas.
  • Need a task generation graph which persists through loop closures!
    • The generated tasks should persist throughout the mission and not be deleted/disappear with map updates.

So what are frontier and coverage tasks?

  • Frontier tasks: tasks that are on the border between mapped and unknown space. If the robots go to these tasks, they should be able to map out and further explore the environment.
  • Coverage tasks: tasks that are points in the mapped free space that maximize camera sensor coverage. If the robots go to these tasks, they should execute some search behavior so that it can look for potential victims.

Our solution:

  • Pose-Graph Aware Task Generation
    • Multiple random trees are grown from the pose-graph nodes.
    • Updated with the pose-graph.
    • If branches intersect occupied space, they are disabled but can be re-enabled in the future if they no longer are in occupied space.
  • Frontier tasks:
    • Nodes that connect into unknown space
    • Filtered based on information gain
  • Coverage tasks:
    • Nodes on the trees that maximize sensor coverage
    • Robot executes search behavior at these tasks

Legend:

  • Cyan squares: coverage tasks
  • Blue circles: coverage task radius
  • Green squares: frontier tasks
  • Cyan lines: Pose-Graph Aware Task Generator random trees

In the above GIF, you can see that at first the left corridor has already been mapped, but due to drift in odometry the robot’s current position is inaccurate. This results in a separate corridor appearing in the built map and redundant coverage tasks being generated. However, when loop closures occur and the pose-graph is updated, the random trees of the task generator are also updated. The redundant tasks are then associated with the correct corridor and are deleted. You can see there was also minimal pruning of the random tree branches, showing that our task generator is both robust, accurate, and efficient.