These instructions describe the integration of the ThingMagic Pro RFID reader on the Pioneer P3AT robot. The particular context of this project is the class project for ME4823, but this may be helpful for other projects involving this hardware and software.
Prerequisites and Dependencies
- The sensor hardware: http://www.thingmagic.com/usb-pro-rfid-reader
- The ROS driver software: http://wiki.ros.org/thingmagic_rfid
There are (at least) four aspects of the integration that you will want to pay attention to...
- ROS Software integration: This is described below
- Mechanical integration: Your team will need to work on a simple, robust way to mount the sensor so that it can be used for survey. There is a good supply of 80/20 hardware in the ME4823 lab that can be used for this purpose.
- Electrical Integration: This is fairly trivial since the device connects to the Pioneer's PC via USB. However, after you have a satisfactory mechanical mount you will want to neatly run the USB cable to the sensor. Zip ties are a good way to secure the cables.
- Testing and debugging: It is good practice to test the integration to increase your understanding of how the device works with the robot before trying more complex tasks. Some suggestions for tests are provided below.
ROS Software Integration
The software driver should be installed on all the Pioneers. The driver is started with the PC boots and will be restarted automatically if the driver crashes, so you should not need to do anything beyond plugging in the sensor and powering on the robot.
The best to tell if the software is running is to ssh into the robot's computer and check what nodes are running. For example if I
ssh frl@p6 and then run
rosnode list I should see...
If you do not see the
thing_reader_node then you can restart all the ROS nodes on the robot with these commands (run on the robot's PC)
If that doesn't work it would be best to power cycle the robot and PC. Also, make sure the the green LED on the ThingMagic USB Pro is lit, indicating the device has power.
thing_reader_node is launched within the robot's namespace, so with the multimaster setup (Assignment 6: Callbacks, Multimaster and Multiple (N=2) Robots (17-3)#3)-ROSandNetworkSetup) you should be able to run multimaster discovery and sync nodes on your remote laptop and then be able to access the nodes. For example, with six robots running and the multimaster setup on my laptop I can see all six RFID tag nodes...
Testing the Published
Each of the nodes published on the
/rfid topic. You can echo the topic like so...
at first you will see no output...
Now if you move one of the sample RFID tags near the sensor you should see the tag ID number as it is published by the driver...
rqt_topic tool is also helpful for testing this as it will give you the update rate in addition to the actual message.
You will want to do some testing with your integration to make sure everything is working properly. Once you have the software working you will want to explore the performance of the RFID reader. The range of the reader is affected by many things, including (but not limited to)
- Antenna design: we will be using the antenna embedded in the USB Pro reader
- Tag design: we have a variety of tags to try
- Orientation between tag and antenna
- Environment - metallic background for the tag or antenna can reduce the effective range
My limited experience is that this reader can pick up most of the tags within ~3 ft range. This will change depending on the factors above. Developing a feel for this will help you design tag-finding robot control.
I think it is good to start integration with the sensor alone - without the robot - to get a sense of the range and directionality of the reader. You should be able to fairly quickly develop a sense of how range and orientation affect the reader's ability to detect a tag. You will also note that the reader just reports that a tag is in proximity, it doesn't tell us anything about where it might be (range or direction).
Once you get a sense for the reader performance you can develop a mounting strategy that maximize the robot's ability to positively detect a tag. It will probably be necessary to mount the reader with the antenna (the front of the sensor) pointed down toward the ground and mounted away from the robot base so that there is a clear path between the antenna and the ground. It may also be necessary to mount the sensors so that they are close to the ground. In the past we have used these readers (https://www.sparkfun.com/products/13198) which have a very short range and found we needed to mount them about an inch above the ground. I'm hopeful that we'll be able to mount these farther from the ground.
One potential trouble is in the serial port configuration. The ROS driver looks for the serial port named
/dev/thingmagic for communicating with the device. (The USB interface for the sensor is actually a USB-to-serial interface, which is pretty common for sensors.) All of the Pioneer computers have a udev rule so that these devices will automatically be assigned the
This udev rule is file
\etc\udev\rules.d\99-thingmagic-serial.rules which contains the following line...
If your sensor is not working, one thing to check is that this port exists. If you ssh onto the robot's computer, you find if the serial port exists - it should look like this...
If not, try disconnecting and re-connecting the USB cable.