All posts

Behavior

Today’s Summary:
RFID-assisted relocalization: first full run

As of now, I am seeking to tie off my undergrad thesis by approaching this as a system that will seek to relocalize once a threshold of uncertainty has been reached.

Today I implemented RFID tag serialization, to save the locations of tags when detected while mapping. I also added a message and trigger metric for uncertainty ( u = SQRT(λmax) ) which quantifies uncertainty as a distance: one standard deviation of position error along the most uncertain direction (about a 68% chance the true position is within ±u along that axis).

I then simulated a long hallway with tag locations and tested a behavior tree to seek out a tag when u reaches a threshold of 15cm.

In a long, featureless aisle, lidar SLAM gradually loses track of how far along the robot is. I’m fixing that with RFID tags on the walls. When the robot’s position estimate gets uncertain, it pauses its route, moves to the wall, and sweeps along it until it reads a tag whose position it knows. It then resets its position from the tag and continues.

What’s implemented:

  • Localization: slam_toolbox runs against a saved map and publishes a live uncertainty signal.
  • Wall maneuvers: the robot estimates where the aisle walls are and can shift to the right wall, follow it at a fixed distance, and return to the centreline.
  • Tag map: a registration mode sweeps the walls and records each tag’s map position, including which wall it’s on.
  • Correction: a node resets the SLAM pose from a trusted tag read. It rejects unknown tags, tags on the wrong wall, and implausibly large jumps.
  • Navigation: Nav2 drives an out-and-back route with bay stops. After an interruption it resumes at the next stop ahead.
  • Recovery: a behaviour tree ties it together: trigger, pause the route, shift to the wall, sweep, correct, settle, return, resume.
  • Simulator: a stand-in for the real 60 ft × 5 ft aisle in RViz, with the real robot model, simulated lidar and tag reads, and ground truth for scoring every stop.
  • Trial tooling: one command runs a trial and records a bag, a metadata file (code version, container image, config fingerprints), and analysis metrics.

What happens in the video:

0:00–2:28: outbound leg with 5 bay stops (~0:31, 0:58, 1:26, 1:55 and 2:27).

~2:29: recovery triggers at the far end and the robot shifts toward the wall. At ~3:02 the attempt fails with wall_lost because the aisle’s far end is open, so the robot aborts safely and resumes.

~3:14: recovery triggers again on the return leg. The robot reaches the wall at ~3:50 and sweeps along it until it reads tag L07 after a 1.1 m sweep. It corrects its pose (~4:16), re-centres, and resumes at the next stop ahead (~4:38).

~5:05 and ~5:34: return-leg bay stops; the recording ends at 5:37, partway home. After the correction, the remaining stops landed noticeably closer to their marks than in the baseline run.