[Documentation] [TitleIndex] [WordIndex

This page contains notes on using visual place recognition on the PR2 for localization, solving the kidnapped / wake-up robot problem.

At a high level, there will be a node that continuously gathers data for performing place recognition as an already localized robot moves around in the world. It may actively engage with the navigation stack to stop and collect data when needed. This data is stored persistently so we have it on robot wake-up.

It will have a ROS interface (action?) to attempt to localize using place recognition when the robot is poorly localized (kidnapped or just woken up).

Gathering place data

Global pose estimates come from amcl:

Place database

At least for now, keep two separate databases. One in memory for doing the place recognition prefilter. Another containing other associated data (poses, keypoints, descriptors) for doing the geometric check and pose estimation. Both are keyed on the "document id" for that image (pair, for stereo).

An extension once basic system is working: replace old data when we revisit a place to give some robustness to changing environment.

Place recognition database:

Associated data for pose estimation:

Getting sufficient coverage of building

When some distance (say >2m) from any place already in database:

Can publish markers of where we took samples to rviz to see where we have coverage.

Would be nice to teleop robot around and have it just stop and collect data when appropriate. Maybe simplest to hack up pr2_teleop to allow place rec node to temporarily disable responding to the joystick. Skip 180 degrees backwards view (?) since someone will always be standing there.

Nicest would be for the robot to traverse the whole building autonomously to gather / refresh its data, but that can be implemented later.

Localizing by place recognition

When action / service invoked:


2024-03-23 12:42