OpenShoe is an open source embedded foot-mounted inertial navigation system (INS) implementation, including both hardware and software designs. The module tracks the motion of the foot over the step by means of inertial navigation. The steps can then be summed up to get a relative position of a pedestrian, as illustrated above.
The embedded implementation and the step-wise inertial navigation modularizes the foot-mounted INS technology which facilitates the integration in realtime pedestrian positioning systems, and make it feasible to equip a larger number of users with foot-mounted INS modules for field performance tests and cooperative localization studies. The modules are wireless and can provide the tracking information to, for example, a smart-phone. Modules can be used on both feet for improved performance.
General features of the implementation:
Embedded ZUPT-aided INS
Dead reckoning updates*
Four Invensense MPU9150 IMUs
Atmel AVR32UC3C microcontroller
Bluetooth and USB interfaces
Approx. 1.5[h] battery time
Embedded software written in C
General processing and communication framework
We hope that you find the implementation interesting and useful. If you have any questions, comments, suggestions, or inquiries, please contact us at email@example.com.
/The OpenShoe team
* For system integration, the statistics of the position and heading is necessary. This is achieved by providing dead reckoning updates (displacement and heading changes over individual steps) which can be used to reproduce the statistics. This way, most of the processing can be hidden from the user while still providing sufficient information for fusion with other information sources.
** Additional hardware features such as a FLASH memory and a pressure sensor are available. However, no software support for these components is yet available.
Significant bug fix
February 9, 2015, Posted by: John-Olof
New updates, new bugs.
In testing the updated code at the end of last week I experienced some strange behaviour. It turned out to be a subtle issue with the manipulation of the process sequence. The result was poor initial (first time after power on) performance for the dead reckoning. In the worst case scenario it could give errors in the order of a meter for the first steps. The bug had been around since the revision from 16th of Jan. Now it’s fixed in revision 15f969 and I recommend to upgrade if you are using the dead reckoning command (0x34).
I’ve also made a few other updates. The only important one from the user perspective is that I’ve moved the functions which read data from the IMUs to the process sequence. This is to get more flexibility, and really there is nothing special about this function so it fits better in the process sequence than beside it. The imu_read() function is in the process sequence by default and it has been added to all combined commands. Consequently, from the user interface perspective, the differences are small. However, if you are manually manipulating the process sequence, you will have to take into account that the imu_read() function should probably reside in the first slot in the sequence.
The plan is to spend part of this week on testing, revising and refactoring the code so more updates may come. However, the revision of the communication protocol was a one-time thing and I do not plan on making any significant changes there.
New and improved calibration script
February 6, 2015, Posted by: John-Olof
A new and improved calibration script is available below. First of all, you do not longer have to manually verify data from each side of the calibration body. Consequently, the procedure is much faster. Secondly, the script is adapted to the recent updates to the embedded code. If you change the commands and the parsing mex-file to those of the old script package, you could use it with an old module without reprogramming it, but then it’s probably better to simply reprogram your module. Thirdly, it comes with a brief instruction video:
Zip-file with calibration script package. Download and run main.m.
OpenShoe communication protocol revision and documentation
January 30, 2015, Posted by: John-Olof
Not many updates here lately, but a larger number of updates in the repository. During the last month, I have revised, complemented, and cleaned up primarily the communication protocol. I’ve even written some documentation! The bad news is that the communication protocol has changed slightly but keeping the messy order of command IDs seemed even worth. The communication logic is the same but some command headers have changed. Anyhow, this should not be too big of a problem since now you can find all commands described in the following document:
There are now a two byte package number in the packages coming over the USB interface, just like it has always been for the Bluetooth interface. The long term intention is to connect the interfaces much tighter. Now they only significant difference is the lack of a “lossless” mode for the USB interface.
A number of commands have new headers.
A number of new commands have been added to make the protocol more complete.
Support for the oldest generation of OpenShoe modules (those based on the AD16367IMU) have been removed.
To make getting started with the modules easier I have also compiled a number of Matlab scripts which I use. These scripts demonstrates the basic usage of the modules. You find the scripts below: