It’s working!

March 24th, 2014


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!

Casing for the new modules

March 16th, 2014

While wait­ing for the new boards we have also started work­ing on the design of the cas­ing for the new mod­ules. Sur­pris­ingly num­ber of details to think about! Cur­rently we are con­sid­er­ing a snap-fit solu­tion. A cou­ple of guys from myobjectify.com helped me with the cad and print­ing. The day before yes­ter­day I got a first crude print in my hand. The pho­tos above show the size of the cas­ing in com­par­i­son with an older unit and the cas­ing with a bat­tery and a par­tially assem­bled board in it (used for test­ing the wire­less links).

Computational cost of inertial frontend

March 15th, 2014

I just clocked the iner­tial fron­tend and it came in on around 1200 clock cycles for the sta­tis­tics cal­cu­la­tion, 200 clock cycles per IMU for the cal­i­bra­tion com­pen­sa­tion (sta­tic bias, mis­align­ment, scale error com­pen­sa­tion), and around 400 clock cycles for the (float­ing point) on-line bias esti­ma­tion. The bias esti­ma­tion is prob­a­bly dom­i­nated by the divi­sion oper­a­tion in the gain cal­cu­la­tion. Unfor­tu­nately, the micro­con­troller has no hard­ware float­ing point divi­sion operation.

The 1200 clock cycles for the sta­tis­tics cal­cu­la­tion can be com­pared with around 5500 float­ing point arith­metic oper­a­tion which would be required to cal­cu­late just the longer 256 sam­ple test sta­tis­tics in the naive way. And this com­pu­ta­tional cost would scale with the num­ber of sam­ples. I have not clocked the old func­tions but together with mem­ory accesses and other aux­il­iary oper­a­tions, I guess the old (naive) imple­men­ta­tion would take at least about 10 times the num­ber of clock cycles. I had pre­vi­ously done some back-of-an-envelope cal­cu­la­tions of the com­pu­ta­tional cost reduc­tion of the recur­sive inte­ger sta­tis­tics cal­cu­la­tions but this was the first time I have seen it for real.

Software updates

March 15th, 2014

A new ver­sion of the boards is under pro­duc­tion. While wait­ing for it I have pri­mar­ily been work­ing with the embed­ded soft­ware. The fol­low­ing are the important/larger changes which have been pushed to sourceforge:

  • Sup­port for com­pil­ing the code for the dif­fer­ent hard­ware plat­forms (ver­sions) has been added. The plat­form is con­trolled by in-line macro def­i­n­i­tions (-D) which together with #if … #endif state­ments include appro­pri­ate code sec­tions. Most of the set­ting for the dif­fer­ent ver­sions have been col­lected in plat­form spe­cific con­fig files.
  • The inte­ger iner­tial fron­tend is now almost com­pletely inte­grated and can now be used with the old units. The cor­re­spond­ing float­ing point func­tions in nav_eq.c are still there but will prob­a­bly be cleaned out some­time later.
  • The com­mands have been cleaned up and sev­eral com­mands which have been essen­tially unused have been removed.

140316: The float­ing point zupt-functions and states have now been cleaned out from nav_eq.c and the run­time framework.

Almost there …

February 22nd, 2014

Per­haps a lit­tle bit of an exag­ger­a­tion. What you see is the first “assem­bled” new mod­ule (with­out cas­ing and bat­tery). Unfor­tu­nately, it doesn’t work! For­tu­nately, it’s not really due to the sys­tem design but rather due to prob­lems we have encoun­tered in pop­u­lat­ing the boards. We have been able to ver­ify the func­tion­al­ity of most sub­sys­tems on the board, but have not been able to pop­u­late a sin­gle board in which every­thing works. Con­se­quently, we will have to go for a sec­ond gen­er­a­tion with a some­what dif­fer­ent approach for the assem­bly. Maybe a month … Stay tuned!

Note: I don’t have big hands!