Open source embedded foot-mounted INS


Open­Shoe is an open source embed­ded foot-mounted INS imple­men­ta­tion includ­ing both hard­ware and soft­ware design. A cross sec­tion of a shoe with a unit of the imple­men­ta­tion inte­grated into the sole can be seen above. To our knowl­edge, this is the only imple­men­ta­tion of its kind.

The imple­men­ta­tion has been done with the hope that it will save time, sweat, and tears for nav­i­ga­tion researchers as well as facil­i­tate the use of the tech­nol­ogy by researchers not spe­cial­ized in aided INS, e.g. in fields such as bio­med­ical engi­neer­ing, behav­ioral sci­ence, and ubiq­ui­tous com­put­ing. The value of the embed­ded imple­men­ta­tion also lies in its mod­u­lar­ity and in its small weight, bulk, and price in com­par­i­son with the typ­i­cal sensor-plus-laptop research sys­tems. These prop­er­ties alle­vi­ate the work of inte­grat­ing the foot-mounted INS in larger real­time pedes­trian nav­i­ga­tion sys­tems, and make it fea­si­ble to equip a larger num­ber of users with foot­mounted INS units for field per­for­mance tests and coop­er­a­tive nav­i­ga­tion studies.


Gen­eral fea­tures of the implementation:

  1. Embed­ded ZUPT aided INS
  2. Open source and fully documented
  3. Repro­duc­tion cost below $800

Hard­ware features:

  1. Designed for an Ana­log Devices ADIS16367 IMU but with inter­face com­pitabil­ity with all IMUs in the iSen­sor serie
  2. 820[Hz] sam­pling rate, 18[g] and 1200°/s dynamic range, 330[Hz] sen­sor band­width using the ADIS16367 IMU
  3. Atmel AVR32UC3C micro­con­troller with hard­ware float­ing point
  4. Foot­print 28.5x32x40.5[mm]
  5. USB inter­face

Soft­ware features:

  1. Source code writ­ten in C
  2. Eas­ily con­fig­ured to run any user imple­mented algorithms
  3. Mat­lab code avail­able for communication
  4. Repro­gram­ma­ble through the USB interface.
  5. Appear as a vir­tual com-port
  6. Con­fig­urable to work as an IMU, as a stand-alone ZUPT-aided INS, and as a dis­place­ment and head­ing change sensor.

The sys­tem is eas­ily repro­ducible. On this site you can find:

  1. Pre­com­piled code
  2. Fully doc­u­mented C source code
  3. Pro­duc­tion files for PCB/PCA and casing

For a more detailed pre­sen­ta­tion of the imple­men­ta­tion, see the arti­cle Foot-mounted INS for Every­body — An Open-Source Embed­ded Imple­men­ta­tion (opens in a new tab).

We hope that you find the imple­men­ta­tion inter­est­ing and use­full. If you have any ques­tions, com­ments, sug­ges­tions, or enquiries, please con­tact us at

Best regards
/The Open­Shoe team

Recent posts


April 1, 2014, Posted by: John-Olof

Finally, the new gen­er­a­tion of the IMU array boards, the MIMU4444v1, arrived yes­ter­day. These boards mea­sure 49.3x26.6[mm] and con­tain 32 MPU9150 IMUs each, which are all sam­pled in par­al­lel. The embed­ded soft­ware for the boards is achieved by com­pil­ing the code on source­forge with the argu­ment –DMIMU4444. The design-files for the boards are avail­able under Massive-MIMU. This is not an April fool mockup! The multi-IMU boards are rather a major side project to the main foot-mounted INS devel­op­ment. The same prin­ci­ples are used in the MIMU22BT boards but with 4 IMUs.

Casing STL files

March 30, 2014, Posted by: John-Olof

The cas­ing STL files can now be found under:
Sys­tem repro­duc­tion
The cas­ing is 1.5[mm] thick all around.
The outer dimen­sions of the cas­ing are 23.2x31x13.5[mm].
The cas­ing has a snap fit solu­tion and does not require any screws or sim­i­lar. This far, we have had the cas­ings printed on a Maker­Bot 2 by

Brief technical summary

March 25, 2014, Posted by: John-Olof

Below is a brief tech­ni­cal sum­mary of the new boards/modules

  • 4 MPU9150 9-axis IMUs sam­pled in parallel
  • Atmel AT32UC3C2512C 32-bit float­ing point microcontroller
  • ST SPBT2632C2A Blue­tooth module
  • Bat­tery pow­ered with charg­ing via USB
  • 4 layer 22.5x20x5.5mm PCB (exclud­ing pro­trud­ing USB connector)
  • Mod­ule size, includ­ing 150mAh bat­tery, circa 31x24x14mm (cas­ing not final)

In addi­tion we have also thrown in a flash mem­ory (up to 64Mb) and a pes­sure sensor.

If you have looked at the pho­tos below you may be won­der­ing why there are two micro-USB con­nec­tors. The one which has a slot in the cas­ing is a proper USB used for com­mu­ni­ca­tion (if you don’t want to use the Blue­tooth or sim­ply want more data than the Bluetooth-link can han­dle), charg­ing, and repro­gram­ming with the boot­loader. The one hid­den inside the cas­ing actu­ally con­tains a JTAG inter­face for debug­ging and repro­gram­ming. Micro-USB con­nec­tors are sim­ply con­ve­nient small foot­print connectors.

    Design files released

    March 24, 2014, Posted by: John-Olof

    Since we finally got a mod­ule work­ing, I have now pub­lished the PCB design files under

    Sys­tem reproduction

    Basic embed­ded soft­ware for the new mod­ules is already avail­able on source­forge. How­ever, sig­nif­i­cant updates, espe­cially to the wire­less inter­face, is expected in the near future. The STL-files for the cas­ing I will pub­lish as soon as it has gone through some more iterations.

    By the way, the new boards goes under the name MIMU22BTv2 (MIMU=multi-IMU, 22=number of IMUs on front and back, BT=Bluetooth, v2=version 2). This is how it’s referred to in all config-files in the software.

    Note that for some fea­ture such as the mem­ory and the pres­sure sen­sor there is still no soft­ware sup­port for and they have not been tested at all. On the other hand they are not nec­es­sary for the core func­tion­al­ity or the boards, i.e. pedes­trian tracking.

    It’s working!

    March 24, 2014, Posted by: John-Olof

    After what feels like a 1000 mount­ing attempts, we finally made one board of the first gen­er­a­tion work! So 4 IMUs, wire­less trans­mis­sion, bat­tery pow­er­ing and real­time step­wise dead reck­on­ing. To say the least I’m pretty relieved to see the whole chain work­ing. We are still expect­ing updated ver­sions of the boards but there are (should be) no changes to the schematic so hope­fully they should work right out of the box.

    The bat­tery cables should later on be sol­dered straight into the board but due to fur­ther test­ing needs we didn’t want to do that. Con­se­quently, you see the ugly solu­tion with a JST con­nec­tor and a pin header, and for the ini­tial test­ing we had to go with elec­tri­cal tape instead of the cas­ing lid.

    Above you see the first (actu­ally sec­ond, since the first time I got about 5m and then the bat­tery cable came off) track­ing result with the unit taped to the fore­foot and walk­ing back and forth in the cor­ri­dor two times. Note that Mat­lab is only sum­ming up the step dis­place­ments and head­ing changes and most of the pro­cess­ing is done in the module.

    Plenty of things remain to be done but at least now we know we will even­tu­ally have work­ing modules!