[Documentation] [TitleIndex] [WordIndex

Only released in EOL distros:  

pr2_rfid: rfid_artoolkit | rfid_behaviors | rfid_datacapture | rfid_demos | rfid_explore_room | rfid_hardware | rfid_nav2 | rfid_people_following | rfid_pf | rfid_servoing

Package Summary

This stack contains code for robot behaviors and radio frequency perception techniques that enable a PR2 (modified with articulated patch antennas) to efficiently discover, locate, and interact with long-range (UHF) RFID tags applied to locations, objects, and people of interest. Sample capabilities include: estimating the bearing toward a tag, RFID servoing, and RFID search. These techniques form the foundation of Travis Deyle's PhD thesis; we also demonstrated sample applications such as medication delivery, sensor fusion, and RFID search in home environments.

  • Author: Dr. Travis Deyle (Georgia Tech), advisor), Prof. Matt Reynolds (Duke Univ., collaborator), Prof. Charlie Kemp (Georgia Tech
  • License: BSD
  • Source: git https://code.google.com/p/gt-ros-pkg.hrl/ (branch: master)

Hardware Overview

These algorithms (predominantly) use two RFID reader antennas (Laird S9025P) affixed to the PR2's shoulders via a pan-tilt system built using Robotis servos. Both antennas are connected to a single ThingMagic M5e reader. The system is shown in the figures below.

PR2_antennas_ann.jpg PR2_antennas_rear_ann.jpg

Packages

There are a number of packages in this stack:

rfid_hardware

Setup code for the PR2-specific configuration of the ThingMagic M5e and Robotis servos. Provides the various services, and also (constantly) updates coordinate transformations in tf.

rfid_explore_room

In general, this package contains python code that allows a robot to traverse a set of distal waypoints -- intelligently moving on to the next one based on unmapped obstacles and catching base_local_planner actionlib states. Using this functionality, we also include a brute-force room traversal (search) algorithm. Using a user-supplied "search radius," this code defines a rudimentary "triangle" (snaking) search pattern based on a room coordinate frame and the room's length & width.

rfid_nav2

This package is a duplicate of rfid_nav, and is only included here for completeness. This defines PR2 navstack settings and configurations that were found to be "good" for use in the Healthcare Robotics Lab and Georgia Tech's Aware Home (ie. bot lab and non-lab settings).

rfid_people_following

This code is deprecated. It was used on EL-E to prototype code contained in this stack. It is only included here since some of the other packages in this stack still make use of its service type definitions.

rfid_artoolkit

At one time, we used AR-Kinect visual fiducials to provide an additional form of close-range identity verification (in lieu of short-range UHF RFID readers).

rfid_pf

Implements a basic probabilistic tag pose estimator (ie. particle filter) to track an RFID tag from multiple readings, given a data-driven RFID sensor model. The data-driven RFID sensor model has two components: (1) a histogram that specifies the likelihood of a positive tag detection (binary random variable) given the 2-DoF (planar) position of the tag relative to the querying reader antenna; (2) a RSSI model that specifies the likelihood of a particular continuously-valued RSSI measurement (model is a Gaussian) given the 2-DoF (planar) position of the tag relative to the querying reader antenna. The Gaussian is represented to by two matrices containing the mean and standard deviation for each discretized planar pose.

rfid_servoing

This code performs RFID servoing to continuously servo towards a desired RFID tag. The robot repositions its antennas to +- 40-degrees (pan angle) relative to the robot's forward-facing position. The robot moves forward at a constant forward velocity while changing its angular velocity in proportion to the difference in RSSI between the two antennas. Servoing continues until it's forward progress is impeded by an obstacle.

rfid_behaviors

This package contains code to perform bearing estimation toward the tag by panning the robot's antennas and orienting the robot in the direction that obtained the maximum (expected) RSSI. The package also contains other behaviors such as non-navstack movement, tactile-sensor monitoring, RFID sensor recording, and "medication handoff."

rfid_datacapture

This package was used to obtain brute-force data captures in a large office (lab) environment in the Healthcare Robotics Lab. The data was used to develop data-driven RFID sensor models (eg. rfid_pf) and to evaluate various RFID behaviors (eg. rfid_servoing and rfid_behaviors). Additionally, in "search_cap" we developed behaviors for performing RFID search using a hybrid global-local optimization (regrettably it was never integrated into rfid_demos). This "search" behavior explores a room (rfid_explore_room) to find a good (global) initial position near the tag, then other local RFID behaviors (eg. bearing estimation and rfid_servoing) to determine a final position that is both near a tagged object and oriented towards it. This algorithm was tested in a real home environment with numerous tagged objects.

rfid_demos

A series of SMACH state machines that tie together the various RFID behaviors into demonstrations (for PR demos and user studies). Examples include: RFID servoing (continuous for people following), medication delivery, and early versions of RFID search.

Important Notes on Dependencies

This stack is not strictly self-contained (as the dependencies would suggest). Rather, it is simply a collection of packages, each with their own dependencies. For example, it relies on several packages in gt-ros-pkg. However, this repo does not have a proper stack (release) to build dependencies against. Rather, it was last tested on revision 1907 in August 2011 under ROS Diamondback on the PR2. I am told by labmates that some of the dependencies are unlikely to function under Electric without modifications. YMMV.

Report a Bug

<<TracLink(REPO COMPONENT)>>


2024-12-07 15:01