Entries : Category [ Robotics ]
Articles about robots and robotics.
[Miscellaneous]  [Computers and Technology]  [Travel]  [Education]  [Hacks]  [Robotics]  [Science]  [Programming and Software]  [iPhone]  [Digital TV and Video]  [Intellectual Property & Copyright]  [Personal] 

01 June

I just returned from the Computer and Robot Vision conference in Kelowna, BC. This meeting was, as usual, held in conjunction with two other conferences: Artificial Intelligence, and Graphics Interface. As always, the refereed submissions are complemented by about nine invited talks (three from each conference). This year Jim Little from UBC gave an interesting talk on the Semantic Robot Vision competition over the last few years, and some of the issues involved in building a mobile vision system that can drive around and identify objects.

Junaed Sattar from our lab won an award for the best robotics paper that I co-authored with him. This award was based on the scores from the reviewers. The paper discusses the computer system design and software architecture for our Aqua vehicle family which allows the robot to track and interact with a human operator.

The conference took place at the Okanagen campus of the University of British Columbia (where the general chair, Yves Lucet, is a professor). The campus is quite impressive with a slew of recently-constructed buildings, and a hist of buildings currently under construction. Getting to an off-campus restaurant, however, is a major undertaking.

By Gregory Dudek at | Leave a comment |    
13 June

No country on earth likes robots more than the Japanese, and they're also in contention for the most technically adept. Thus, what better place to see extreme household robotics than at the International Food Machinery and Technology Exhibition in Tokyo?

There was also a robot with an end effector made to look like a human hand. It moved pre-prepared sushi around on a plate and has been mis-reported (e.g. by engadget) as a sushi-chef robot. See the picture here [reuters].

When in Japan I have had sushi that was made from shrimp that was living just minutes before it hit my plate. I doubt a robot device has anywhere near the dexterity and sensing ability required to really compete with a human sushi chef in the foreseeable future, but pancakes? No problem!

In contrast, the Okonomiyaki robot from Toyo Riki Co. actually mixes pancake batter, pours it and flips the pancake. I don't have any idea how accurate or reliable it is, but is does seem to actually do the whole job (although not the subsequent cleanup, which is probably the part you would most like to offload).
You can read a little more about it at this web page [Japan Times Online]. As with many such demos, you need to be very wary about how smart the system really is and how much is just rote playback. I don't know the answer in this case.


Also, from EPFL, this robot uses rote playback to perform cooking-like tasks. I think it's using a sophisticated head, but the music downplays the seriousness of the work.

By Gregory Dudek at | Leave a comment |    
19 June

What's our robot up to soon? It's going North, way up North to be used in a Mars analogue site where it will be used in Astrobiology experiments. More on This later.

View Larger Map

By Gregory Dudek at | Leave a comment |    
16 July

I mentioned earlier that one of our robots was up North. Well, it's been visiting an outpost -- the McGill Arctic Research Station -- of McGIll University and the Canadian government on Axel Heiberg Island in the territory of Nunavut, Canada. This is very far North -- there's not much other land as far north except Komsomolets Island in Russia and Northern Greenland.

Philippe Giguere from our lab has taken the robot up there as part of an experiment dealing with sensing in harsh environments in the context of developing tools for space exploration and, in particular, astrobiology. The robot is being used to deploy an exotic automated microscope that can detect signs of life in hostile environments, much as one might wish to do on the another planetary body like Europa or Mars. Of course, this experiment only tests a small fraction of the suit of technologies that would be needed for a genuine extra-terrestrial mission, but is still very satisfying to work on in this context. Sending Philippe instead of going myself made a lot of sense in terms on scheduling and logistics, but I am certainly envious and a bit disappointed I didn't get to go. The mission seems to have gone very well based on the reports back to home, and the robot carried the holographic microscope successfully.

This location is, incidentally, pretty close to the North magnetic pole. Among the other interesting features of this location, the Earth's lines of magnetic flux point almost straight down so that a magnetic compass is pretty much useless there.

By Gregory Dudek at | Leave a comment |    
06 August

Computational Principles of Mobile Robotics

2nd Edition

coming soon

CPMR cover

By Gregory Dudek at | Read (1) or Leave a comment |    
14 July

This post deals with Xbee/Zigbee firmware with non-windows software for editing the Xbee parameters from the command line. There's also a trick for re-flashing and Xbee in an Arduino shield. Below, I explain the different kinds of hardware and software.

Contents: my application, XBee hardware versions (confusing!), firmware versions, non-Windows programming software (Mac OS X, Linux, etc.)

My application

Last weekend I implemented a GPS broadcasting system using Xbee (Zigbee) modules from Digi International. These are small wireless networking nodes that can be connected using a serial line. The Funnel IO variant of the Arduino open source CPU module directly supports the Xbee hardware, and also provides a lithium-polymer charging circuit, so it seemed just right for my needs. (FunnelIO is very nice, but poorly documented.) The idea was to receive GPS data on one module and transmit it to another one (that was in a location where direct GPS reception was impossible: i.e. inside our robot). While everything seemed pretty straightforward in principle, I had few problems.

XBee rear
(click to zoom)

I programmed the Arduino to pull in GPS data on a software serial port, and then retransmit the data on the hardware serial driver connected to the Xbee. I also wrote some diagnostic code to verify the GPS data was solid, to check the fix and do some housekeeping. This worked well, and I was even able to deploy the GPS receiver at the end of a 10 meter cable. When I tried to relay the data across the Zigbee link, however, I encountered all kinds of data losses. These looked like buffer overflows which led to lost data.


On the whole, I found the terminology and variety of options pretty confusing, partly because terms have changed and there are both obsolete and even misleading documents widely readily available on the net. Also, non-windows support, and even Windows Vista/7 support, was poor. Hence this page.

Firmware and device families

[ Sorry, this part of the story is almost assured to confuse you on the first reading. That's because the mish-mash of names and models is just a mess. Just ahead to the more readable part on "Reflashing in an Arduino shield" is you start to feel sea sick. ]

Now these xbee modules can work in either point-to-point mode, or via broadcast. My first attempt was with broadcast using ZB firmware since that was easier to configure. Well, broadcast mode automatically retransmits packets multiple times (since acknowledgements can;t be sent in a broadcast context). I figured I'd try point-to--point mode. I could never get this to work.

My observations and inferences about the Xbee line:

-- There are at least 4 main families of the hardware, and several variants of the firmware for each hardware family. All the modules on a network should have the same hardware and firmware. (In addition, within each family there may be different modules with alternative antennas, but I'll ignore those little differences since they don't impinge on functionality at a software level.)

-- There are 2 different hardware "series": Series 1 and Series 2, and each has a Pro (and non-Pro) variation. This makes for 4 classes of hardware: Series 1 non-pro, Series 1 Pro, Series 2 non-pro, Series 2 Pro. These different variations differ at a hardware level. You cannot reprogram one to become another.

XBee series 2 indication
(click to zoom)

-- Confusing names: Series 1 is now officially called "XBee 802.15.4." Series 2 was renamed "XBee ZNet 2.5" which is really confusing since this names also seems to be used for one of the types of firmware for these devices.

These two series (1 and 2) are also known as Freescale and Ember respectively, based on the different hardware makers for the 802.15.4-protocol networking chip. The Freescale MC13213 is an integrated radio transceiver and a 8-bit 689S08A microcontroller. The Ember EM250 is a radio and a 16-bit XAP2b RISC microcontroller with AES encryption support and 128kB of flash memory. Series 1 and Series 2 differences are described in this document from Digi.

Firmware versions (4 types)

-- ZNet 2.5 firmware is based on the "EmberZNet 2.5" radio networking software. (This equivalence and terminology is indicated in the Firmware Revision History, although a Digi employee I spoke to disputed some details.)

-- ZB firmware is also known as Zigbee, or more correctly as "ZigBee PRO" since that is the name of the protocol specification it adheres to. It is based on the Ember "EmberZNet 3.x" rio-networking software. Thus, ZB is newer than ZNet 2.5, but for me ZNet 2.5 worked better.

-- Devices running ZNet 2.5 firmware cannot talk to devices running the ZB firmware, even though they are used in very similar ways and with similar commands.

-- Another firmware called 802.15.4 for Series 1 modules also exists, as well as DigiMesh. This makes for 4 different firmware families, and they should all be considered incompatible with one another. Note that 802.15.4 appears the name of one of the firmwares, but it is ALSO the name of the networking protocol. This 802.15.4 has two different meanings: the firmware and a IEEE standard protocol. (Yes, this is bewildering.)

-- The Zigbee networking protocol is defined by an organization called the Zigbee alliance. They have two key variations of the Zigbee protocol: the original Zigbee (Zigbee 2006) and a new protocol called Zigbee Pro based on Zigbee 2007. This "Pro" suffix is unrelated to the word Pro in the name of the "Xbee Pro" module family, where refers to modules with high power output. Also, both these Zigbee protocols are built upon the lower-level IEEE 802.15.4-2003 standard.

-- "XBee Pro" modules operate at higher RF power levels, 50 or 100 milliwatts. Same pinout, slightly longer chip housing for the Pro models. The regular (non-pro) units work at 1 or 2 milliwatts. (It is possible they inter-operate with non-pro, but I have not tried.) Regular XBee devices have serial numbers starting with "XB" (e.g. XB24-B) while Pro devices start with XBP.

Using the "DD" command, you can read the pre-loaded device family code.

The Xbee's using I purchased came with "Zigbee" firmware pre-installed. I believe this is what they suggest for new customers. I could never get point-to-point (non-broadcast) communications to work with or without a coordinator, so I tried another firmware. When I eventually decided to download and burn in the "ZNET 2.5" firmware instead of the Zigbee firmware, everything worked. Point-to-point worked, but I am pretty sure the throughput was so much better that broadcast would have worked fine also. My morale: use the ZNet 2.5 software on the Xbee if you can.

Firmware versions -- details
Using the VL command, you can query the currently-loaded firmware version. It is a 4-digit number (ABCD), but if the last digit is zero it might appear in the form ABC. The digits have the following interpretations:

  • A: seems to be 1 for ZNet 2.5 release firmware, 2 for Zigbee firmware and 8 for beta-test code.

  • B: the "variant". 0 for coordinator in AT mode (one of two possible command languages used for the modules). 2 for end device code. 1 and 3 are for API command mode.

  • C: seems to identify the version of the code. New releases have bigger values.

  • D: revision number of the version.

Thus my XBee Series 2 node in coordinator mode currently uses firmware version 1047.

See also Digi's firmware documentation, the list series 2 firmware releases.

Reflashing in an Arduino shield

To reflash the Xbee firmware you need to use the XCTU program. My Xbee was in an Arduino "shield" (which provides a USB interface). To directly control the Xbee, you need to remove the microcontroller from the Arduino CPU board (as described here). This is great for accessing the Xbee serial interface from a computer, but to use XCTU you will also need to reset the Xbee a couple of times and no such button it provided on the shield. With a small section of wire, you can do this the "hard core" way. Just touch the wire between pin 5 and pin 10 of the Xbee (or the solder pads beside it). Pin five is the reset pin and pin 10 (at the corner of the module) is the ground pin. Pulling the reset pin low (to ground) does the reset. This is pretty easy and works reliably.

XBee reset using jumper
(click to zoom)

Python-based XCTU replacement

I rarely use Windows and thus I also wrote a python-based program to allow the parameters of the Xbee to be queried and set. This allowed me to configure the Xbee from OS X and (later) from other software systems. This is command-line based. I've tested it on Apple's OS X and it is likely to work on Linux. On Windows I have no idea, but Windows supports XCTU which in the vendor supported solution. On the other hand, since as of this date XCTU does not seem to support either Windows Vista or Windows 7, this might be useful even there. If you try this on Windows, let me know what happens. This software does not support re-flashing the firmware, so to switch from Zigbee to ZNet you still need to use XCTU from Digi.

My Python program called "xbee-gdxctu.py" is available for download. Version 2.10 was put in place Feb. 2011, but it might have been updated since (e.g. it was update to v2.1 on Dec 1 2012). This link provides the current version ID.

Note that my program requires the pyserial module that you might also need to download.

This software is is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.Creative Commons License

If you find problems of have suggestions, please let me know. An example session is given below.

Here is an example of what you get when you run the code. By default, it prints some of the key XBee parameters, and then lets you do manual queries. I have also added some comments on the "ND Discover all other nodes" command output (where it detected another node that I had activated).

python xbee-gdxctu.py
Here is an example of what you get when you run the code. By default, it prints some of the key XBee parameters, and then lets you do manual queries. I have also added some comments on the "ND Discover all other nodes" command output (where it detected another node that I had activated).

python xbee-gdxctu.py

xbee-gdxctu XBee configuration tool. 2.1 Copyright Gregory Dudek (c) 2009.
xbee-gdxctu.py using /dev/tty.usbserial-A5002WY6
Try 19200 got: 'OK'
Firmware: 1047
Non-Beacon Enabled 802.15.4 Code
>> %V Vcc Voltage (multiply by 0.001173; thus 0x8FE means 2.70v)
%V AE8 equal to 3.275016 V
>> BD baud code (2:4800, 3:9600, 4:19200, 5:38400, 6:57600 )
BD 4 => 19200 baud
>> CH Addressing: The channel of the module
CH 17
>> DB Received Signal Strength [in dB] of last good packet (see RC)
DB 41
>> DH Addressing: destination address for wireless communication (hi word)
DH 0
>> DL Addressing: destination address for wireless communication (lo word)
>> ID Addressing: The network ID (default 0x1234)
ID 1234
>> MY 16-bit address of the spefic module
MY 0
>> ND Discover all other nodes (takes NT*100 ms). MY/SH/SL/DB/NI

[Article posted 2009/11/24, revisions: July 14 2010, Feb 26,2011,Dec. 1,2012 ]

By Gregory Dudek at | Read (7) or Leave a comment |    
Prev  1   2   3   4   5   6   7   8   [9]   10   11   12   13   14   15   16   Next