Vous êtes sur la page 1sur 25

Autonomous Exploration using

Hector SLAM

BITS Pilani ANUJ BANSAL


Pilani Campus
2013A7PS100P
SLAM Simultaneous Localization and Mapping

Problem of building a map

At the same time localizing within that map

Landmark extraction, data association, state


estimation, state update and landmark update

2
BITS Pilani, Pilani Campus
In order to build a map, we must
know our position

To determine our position, we need a


map

Solution: Alternate between the two


steps
3
BITS Pilani, Pilani Campus
4
BITS Pilani, Pilani Campus
Assumimg that the
robot uncertainty at its
initial location is zero

The robot observes a


feature with some
uncertainty related to
sensor error

5
BITS Pilani, Pilani Campus
In order to reduce its uncertainty, the robot must observe features
whose location is relatively well known
The observation is called loop closure detection

6
BITS Pilani, Pilani Campus
Lizi robot
Equipped with Hokuyo-URG-04lx-UG01 laser scanner
200 area scanning range with 4m depth
IMU, Compass, GPS, RGB-D Camera and Ultrasonic
range sensors

7
BITS Pilani, Pilani Campus
Heterogeneous Cooperating Team of Robots
Developed by S. Kohlbrecher, J. Meyer, O. von Stryk
and U. Klingauf.
Combines scan matching approach using a LIDAR
with a 3D estimation system based on inertial
sensing.

8
BITS Pilani, Pilani Campus
9
BITS Pilani, Pilani Campus
2D SLAM: Gmapping (Laser based SLAM)
Works only for planar environments
Relies heavily on odometry
3D SLAM: SLAM6D
Involves 3D reconstruction therefore not
applicable for online use
Visual SLAM: RGB-D (uses RGB-D cameras)
Computationally expensive
Not having enough depth information

10
BITS Pilani, Pilani Campus
Map generated by RGB-D SLAM

11
BITS Pilani, Pilani Campus
Challenge:
Given a partial knowledge of the world (incomplete map)
where should the robot move next to increase this
knowledge and improve the map
The exploration strategy is based on the frontier
exploration technique developed by Yamauchi in "A
Frontier-Based Approach for Autonomous Exploration
Consists of two parts:
Planner
Controller
12
BITS Pilani, Pilani Campus
Generates goals as well as associated paths
Two challenges:
How do we select a target?
What path do we choose?
Inputs:
Current robot state
Current map
Outputs:
Goal states
Trajectory to goal states

13
BITS Pilani, Pilani Campus
14
BITS Pilani, Pilani Campus
Our exploration strategy: In order to get new information, go
to a frontier
A frontier is a cell in the occupancy grid that is marked as free
but has a neighboring cell that is marked as unknown.

15
BITS Pilani, Pilani Campus
//Procedure doExploration();

global map;
global current_pose;

While(!map_covered && !no_frontier_enough_size){


goals = findFrontiers();
exploration_grid = buildDistanceTransform(current_pose, goals);
plan = getTrajectory(current_pose, goals, exploration_grid);
updateGoal(goal);
publishPlan(plan);
}

16
BITS Pilani, Pilani Campus
//Procedure findFrontiers();

Vector allFrontiers;
For(all cells in occupancy grid){
if(isFrontier(cell)){
allFrontiers.push_back(cell);
}
}

17
BITS Pilani, Pilani Campus
//Procedure isFrontier(point);

If( occupancy_grid[point] == FREE){


for(neighbor in neighbors){
If( occupancy_grid[neighbor] == NO_INFORMATION){
no_info++;
if(no_info > 2) return true;
}
}
}
return false;

18
BITS Pilani, Pilani Campus
//Procedure buildDistanceTransform(current_pose, goals);

For(all point in goals){


transform_grid[point] = 0; //initial cost for all goals
queue.push(point);
}
While(!queue.empty){
cur_point = queue.front();
min_cost = transform_grid[cur_point];
getStraightPoints(cur_point);
getDiagonalPoints(cur_point);
for(i=0 to 3)
neighbor_cost = minimum + STRAIGHT_COST + cellDanger(straightPoints[i]);
if (transform_grid[straightPoints[i]] > neighbor_cost) {
transform_grid [straightPoints[i]] = neighbor_cost;
queue.push(straightPoints[i]);
}
//same for diagonalPoint with DIAGONAL_COST
}
19
BITS Pilani, Pilani Campus
//Procedure getTrajectory(current_pose, goals, exploration_grid);
//returns plan

cur_point = current_pose;
vector plan;
While(!is_goal[cur_point]){
getAdjacentPoints(cur_point);
int maxDelta = 0;
for(point in adjacentPoints){
if(isFree(adjacentPoints[i])){
thisDelta = transform_grid[currentPoint] - transform_grid[adjacentPoints[i]];
if(thisDelta > maxDelta){
maxDelta = thisDelta;
nextPoint = adjacentPoints[i];
}
}
plan.push_back(cur_point);
cur_point = nextPoint;
}

20
BITS Pilani, Pilani Campus
A ROS node which responsible for generating and
limiting the twist messages which are sent to the
robot once the planner has finished its work.

Commute velocity and checks for overshoot or


undershoot
Checks whether a goal is reached or not

11
BITS Pilani, Pilani Campus
Input:
Current robot pose
Path given by exploration planner

Output:
List of velocity commands

11
BITS Pilani, Pilani Campus
Running autonomous exploration in Lab environment
BITS Pilani, Pilani Campus
Running autonomous exploration in Lab environment

BITS Pilani, Pilani Campus


Thank You
By:
Anuj Bansal
ID No. 2013A7PS100P
Under the supervision of:
Prof. Sudeept Mohan
Prof. Avinash Gautam
13
BITS Pilani, Pilani Campus

Vous aimerez peut-être aussi