google is your friend! http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools
Dont go all the way to town like this guy. Just think of a clever way of feeding test data into your routine. Even write an extra routine that calls the code under test in the same sourcefile. then compile your testcode with a library link to the original code. J. On Mon, May 16, 2011 at 7:54 AM, Viesturs Lācis <[email protected]>wrote: > Could You, please, explain in more detail, where can I find out, what that > is? > > Viesturs > > 2011/5/15 Jan de Kruyf <[email protected]>: > > Why dont you set up a quick testbed and some prinf's > > I am sure that is not going to take more than 20 lines of code. > > > > j. > > > > On Sun, May 15, 2011 at 9:12 PM, Viesturs Lācis < > [email protected]>wrote: > > > >> Hello! > >> > >> I am trying to develop kinematics module and I think that Euler's Zyz > >> angles would be very appropriate to represent joints' positions. > >> And for that I want to use Zyz to Rpy convertion in forward kins and > >> Rpy to Zyz convertion in inverse kins. > >> > >> The problem is that I cannot get that conversion working. Not even as > >> a pure concept - I have set the formulas as simple as possible just to > >> get it working, and then I would like to adjust them so that they > >> match the machine. > >> > >> What I get in EMC is: > >> 1) module compiles without errors, so I suspect thatI have got the > >> syntax correct. > >> 2) EMC starts up without errors; > >> 3) Homing of joints works ok (I am running a simulated machine without > >> any particular model loaded); > >> 4) switching to world mode and I get crazy values in A, B and C; > >> 5) sometimes I can quickly switch back to joint mode, where joint values > >> are ok; > >> 6) anyway, all the times immediately or after few seconds I get error > >> taht some of rotary joints have exceeded negative limit. And then > >> switching to joint mode shows joint value of something like > >> -6,175e+278 > >> > >> And that is it. > >> > >> > >> Question to the audience - has anyone ever used Euler angles in EMC2 > >> and functions that convert them to rpy, rotation matrix or whatever > >> else? > >> > >> > >> Thanks in advance! > >> > >> Viesturs > >> > >> > >> Here is the forward and inverse kinematics section from the module: > >> > >> int kinematicsForward(const double * joint, > >> EmcPose * world, > >> const KINEMATICS_FORWARD_FLAGS * fflags, > >> KINEMATICS_INVERSE_FLAGS * iflags) > >> { > >> double a3, a4, a5; > >> > >> PmEulerZyz zyz; > >> PmRpy rpy; > >> > >> /* convert joint angles to radians for sin() and cos() */ > >> > >> a3 = joint[3] * ( PM_PI / 180 ); > >> a4 = joint[4] * ( PM_PI / 180 ); > >> a5 = joint[5] * ( PM_PI / 180 ); > >> > >> /* assign joint values to Zyz angles */ > >> zyz.z = a3; > >> zyz.y = a4; > >> zyz.zp = a5; > >> > >> /* use Euler's Zyz to Rpy conversion*/ > >> pmZyzRpyConvert(zyz, &rpy); > >> > >> world->tran.x = joint[0]; > >> world->tran.y = joint[1]; > >> world->tran.z = joint[2]; > >> world->a = rpy.r * 180 / PM_PI; > >> world->b = rpy.p * 180 / PM_PI; > >> world->c = rpy.y * 180 / PM_PI; > >> > >> return (0); > >> } > >> > >> int kinematicsInverse(const EmcPose * world, > >> double * joint, > >> const KINEMATICS_INVERSE_FLAGS * iflags, > >> KINEMATICS_FORWARD_FLAGS * fflags) > >> { > >> PmEulerZyz zyz; > >> PmRpy rpy; > >> > >> rpy.r = world->a * ( PM_PI / 180 ); > >> rpy.p = world->b * ( PM_PI / 180 ); > >> rpy.y = world->c * ( PM_PI / 180 ); > >> > >> /* convert Rpy angles to Euler's Zyz */ > >> pmRpyZyzConvert(rpy, &zyz); > >> > >> joint[0] = world->tran.x; > >> joint[1] = world->tran.y; > >> joint[2] = world->tran.z; > >> joint[3] = zyz.z * (180 / PM_PI); > >> joint[4] = zyz.y * (180 / PM_PI); > >> joint[5] = zyz.zp * (180 / PM_PI); > >> > >> return (0); > >> } > >> > >> > >> > ------------------------------------------------------------------------------ > >> Achieve unprecedented app performance and reliability > >> What every C/C++ and Fortran developer should know. > >> Learn how Intel has extended the reach of its next-generation tools > >> to help boost performance applications - inlcuding clusters. > >> http://p.sf.net/sfu/intel-dev2devmay > >> _______________________________________________ > >> Emc-users mailing list > >> [email protected] > >> https://lists.sourceforge.net/lists/listinfo/emc-users > >> > > > ------------------------------------------------------------------------------ > > Achieve unprecedented app performance and reliability > > What every C/C++ and Fortran developer should know. > > Learn how Intel has extended the reach of its next-generation tools > > to help boost performance applications - inlcuding clusters. > > http://p.sf.net/sfu/intel-dev2devmay > > _______________________________________________ > > Emc-users mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/emc-users > > > > > ------------------------------------------------------------------------------ > Achieve unprecedented app performance and reliability > What every C/C++ and Fortran developer should know. > Learn how Intel has extended the reach of its next-generation tools > to help boost performance applications - inlcuding clusters. > http://p.sf.net/sfu/intel-dev2devmay > _______________________________________________ > Emc-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/emc-users > ------------------------------------------------------------------------------ Achieve unprecedented app performance and reliability What every C/C++ and Fortran developer should know. Learn how Intel has extended the reach of its next-generation tools to help boost performance applications - inlcuding clusters. http://p.sf.net/sfu/intel-dev2devmay _______________________________________________ Emc-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/emc-users
