Update
Richard Southern has found that if you set the rotInd variable twice in a row, then the bug disappears. He was using MATLAB 7.3. I've made his modification available here.Problem in MATLAB 7.4 JIT Optimizer?
Yi Li pointed out a problem with my MOCAP toolbox 0.135 when used with Matlab 7.4. A little investigation revealed an unusual bug in MATLAB.
To recreate this you need to download the MOCAP toolbox vrs 0.135 and the NDLUTIL toolbox vrs 0.16. They are available from here and here. I used MATLAB Version 7.4.0.336. I couldn't recreate the bug in vrs 7.0.1.24704. The bug occurred regardless of whether I was using the JVM.
>> version ans = 7.4.0.336 (R2007a) >> [skel, channels, frameLength] = bvhReadFile('examples/Swagger.bvh'); >> skel.tree(1).rotInd ans = 5 6 0 >>
In MATLAB 7.0, the same commands produce this:
>> version ans = 7.0.1.24704 (R14) Service Pack 1 >> [skel, channels, frameLength] = bvhReadFile('examples/Swagger.bvh'); >> skel.tree(1).rotInd ans = 5 6 4 >>
The difference is that the last element of the vector is zero in 7.4 and four in 7.0. So I thought I'd do a little debugging in 7.4 to see if the format of some functions had changed. So I ran
>> version ans = 7.4.0.336 (R2007a) >> dbstop at 120 in bvhReadFile >> [skel, channels, frameLength] = bvhReadFile('examples/Swagger.bvh'); 120 skel.tree(jointNo).posInd(1, 3) = channelNo + i; K>> dbcont >> skel.tree(1).rotInd ans = 5 6 4 >>
and the problem disappeared. One possible explanation is that there is a problem with the JIT optimizer in MATLAB 7.4, and the optimizer is switched off when you debug. It seems like a pretty major bug.
This document last modified Friday, 24-Jan-2014 07:29:11 UTC.