Open source embedded foot-mounted INS

 

 

 

DURING THE YEAR, WE HAVE MADE SIGNIFICANT UPGRADES TO THE TRACKING MODULES. UNFORTUNATELY, WE HAVE NOT YET UPDATED THE INFORMATION ABOUT THE MODULES UNDER THE LINKS TO THE RIGHT. CONSEQUENTLY, MOST OF THE INFORMATION THERE REFERS TO THE OLD GENERATION OF TRACKING MODULES. THE INFORMATION SHOULD BE UPDATED DURING THE FALL. FOR MORE INFORMATION, SEE RECENT POSTS.

Open­Shoe is an open source embed­ded foot-mounted iner­tial nav­i­ga­tion sys­tem (INS) imple­men­ta­tion, includ­ing both hard­ware and soft­ware designs. The mod­ule tracks the motion of the foot over the step by means of iner­tial nav­i­ga­tion. The steps can then be summed up to get a rel­a­tive posi­tion of a pedes­trian, as illus­trated above.

The embed­ded imple­men­ta­tion and the step-wise iner­tial nav­i­ga­tion mod­u­lar­izes the foot-mounted INS tech­nol­ogy which facil­i­tates the inte­gra­tion in real­time pedes­trian posi­tion­ing sys­tems, and make it fea­si­ble to equip a larger num­ber of users with foot-mounted INS mod­ules for field per­for­mance tests and coop­er­a­tive local­iza­tion stud­ies. The mod­ules are wire­less and can pro­vide the track­ing infor­ma­tion to, for exam­ple, a smart-phone. Mod­ules can be used on both feet for improved performance.

Gen­eral fea­tures of the implementation:

  1. Embed­ded ZUPT-aided INS
  2. Open source
  3. Wire­less
  4. Dead reck­on­ing updates*

Hard­ware features:**

  1. Four Invensense MPU9150 IMUs
  2. Atmel AVR32UC3C microcontroller
  3. Blue­tooth and USB interfaces
  4. Approx. 1.5[h] bat­tery time
  5. Size 23.2x31x13.5[mm]

Soft­ware features:

  1. Embed­ded soft­ware writ­ten in C
  2. Gen­eral pro­cess­ing and com­mu­ni­ca­tion framework
  3. Algo­rithm implementations
  4. Repro­gram­ma­ble via USB
  5. Appears as a vir­tual com-port

For a more detailed pre­sen­ta­tion of the imple­men­ta­tion, see the paper Foot-mounted iner­tial nav­i­ga­tion made easy (opens in a new tab). The cur­rent mod­ule is the sec­ond gen­er­a­tion of mod­ules. Descrip­tion of the pre­vi­ous gen­er­a­tion can be found in the paper Foot-mounted INS for Every­body — An Open-Source Embed­ded Imple­men­ta­tion.

We hope that you find the imple­men­ta­tion inter­est­ing and use­ful. If you have any ques­tions, com­ments, sug­ges­tions, or inquiries, please con­tact us at openshoe@ee.kth.se.

Best regards
/The Open­Shoe team

 

* For sys­tem inte­gra­tion, the sta­tis­tics of the posi­tion and head­ing is nec­es­sary. This is achieved by pro­vid­ing dead reck­on­ing updates (dis­place­ment and head­ing changes over indi­vid­ual steps) which can be used to repro­duce the sta­tis­tics. This way, most of the pro­cess­ing can be hid­den from the user while still pro­vid­ing suf­fi­cient infor­ma­tion for fusion with other infor­ma­tion sources.

** Addi­tional hard­ware fea­tures such as a FLASH mem­ory and a pres­sure sen­sor are avail­able. How­ever, no soft­ware sup­port for these com­po­nents is yet available.

Recent posts

More resources

January 30, 2015, Posted by: John-Olof

GT-Silicon (who are build­ing and sell­ing com­plete Open­Shoe mod­ules) have a lot of resources related to the mod­ules on their home­page. You can find them at:

www.inertialelements.com

OpenShoe communication protocol revision and documentation

January 30, 2015, Posted by: John-Olof

Not many updates here lately, but a larger num­ber of updates in the repos­i­tory. Dur­ing the last month, I have revised, com­ple­mented, and cleaned up pri­mar­ily the com­mu­ni­ca­tion pro­to­col. I’ve even writ­ten some doc­u­men­ta­tion! The bad news is that the com­mu­ni­ca­tion pro­to­col has changed slightly but keep­ing the messy order of com­mand IDs seemed even worth. The com­mu­ni­ca­tion logic is the same but some com­mand head­ers have changed. Any­how, this should not be too big of a prob­lem since now you can find all com­mands described in the fol­low­ing document:

OpenShoe_communication_protocol

Just to sum up, the sig­nif­i­cant changes are:

  1. There are now a two byte pack­age num­ber in the pack­ages com­ing over the USB inter­face, just like it has always been for the Blue­tooth inter­face. The long term inten­tion is to con­nect the inter­faces much tighter. Now they only sig­nif­i­cant dif­fer­ence is the lack of a “loss­less” mode for the USB interface.
  2. A num­ber of com­mands have new headers.
  3. A num­ber of new com­mands have been added to make the pro­to­col more complete.
  4. Sup­port for the old­est gen­er­a­tion of Open­Shoe mod­ules (those based on the AD16367 IMU) have been removed.

To make get­ting started with the mod­ules eas­ier I have also com­piled a num­ber of Mat­lab scripts which I use. These scripts demon­strates the basic usage of the mod­ules. You find the scripts below:

OpenShoe_Matlab_scripts

Some of the scripts rely on mex-files. The C++-code is included but it has only been com­piled for 64-bit Win­dows. If you are run­ning some other OS, you need to com­pile those functions.

IPIN 2014

October 28, 2014, Posted by: John-Olof

I (John-Olof) is cur­rently attend­ing the IPIN con­fer­ence in Busan, South Korea. The pre­sen­ta­tion of today is avail­able at:

Presentation_IPIN14

Tomor­row I will also give a demo at the con­fer­ence. See you there!

Clarification — calibration body

October 2, 2014, Posted by: John-Olof

Just a small clar­i­fi­ca­tion con­cern­ing the cal­i­bra­tion body. Both the MIMU22BT mod­ules and the MIMU4444 boards (as well as the old MIMU3333 boards) fit in the body. (The do slide in fur­ther com­pared to the pho­tos.) The wire­less link of the MIMU22BT mod­ules is really nice when you do the cal­i­bra­tion. Just be sure to pair with the right mod­ule. Once I spent tenth of min­utes try­ing to fig­ure out why my cal­i­bra­tion script had stopped work­ing until I real­ized that the mea­sure­ments did not come from the mod­ule in the body.

Calibration procedure

August 22, 2014, Posted by: John-Olof


Our recent mod­ules con­tain mul­ti­ple single-chip iner­tial mea­sure­ment units. To get the best per­for­mance out of them, they should be cal­i­brated. How­ever, the “IMU array” setup means stan­dard cal­i­bra­tion pro­ce­dures will not work. We have there­fore devel­oped array cal­i­bra­tion meth­ods for the mod­ules. These have lately been pub­lished in the let­ter below. Mat­lab code for per­form­ing the cal­i­bra­tion and and STL-file and cor­re­spond­ing SCAD-code are also provided.

In short, the mod­ules are inserted in the cal­i­bra­tion body seen above, sta­tic mea­sure­ments are take from all sides, the cal­i­bra­tion para­me­ters are esti­mated in a blind sys­tem iden­ti­fi­ca­tion fash­ion, and code is gen­er­ated which should then be loaded onto the respec­tive module.

 

John-Olof Nils­son, Isaac Skog, and Peter Hän­del, Align­ing the Forces—Eliminating the Mis­align­ments in IMU ArraysInstru­men­ta­tion and Mea­sure­ment, IEEE Trans­ac­tions on , vol.PP, no.99, pp.1,1

Repro­ducible research: code, STL/SCAD