[IGSTK-Developers] Conclusion on igstkTransform issues - David&Patrick

Patrick Cheng cheng at isis.georgetown.edu
Tue Mar 7 11:28:27 EST 2006


Hi Luis,

I agree on statement 2) and 3).

But for 1), to be 'safe by design', we should not make any presumption 
that an operation does no go over a "long period of time".

This "long duration" is easily being misused, and at least, it's not 
consistent through out our code. some examples:

**********************************************************************
[[[Super Long Period]]]
igstkTrackerTool.cxx
Line 31
   m_ToolCalibrationTransform.SetToIdentity( 1e300 );

igstkMeshReader.cxx
line91-92:
   // Provide an identity transform with a long validity time.
   const double validityTimeInMilliseconds = 1e30;

[[[Wrong]]]
igstkPivotCalibration.cxx
Line 149
this->m_CalibrationTransform.SetTranslationAndRotation( translation, 
quaternion, 0.1, 1000);
Line 286
this->m_CalibrationTransform.SetTranslation(translation, 0.1, 1000);

igstkPrincipalAxisCalibration.cxx
Line 204
this->m_CalibrationTransform.SetRotation( quaternion, 0.1, 1000);
************************************************************************

Luis Ibanez wrote:
> 
> Hi Patrick,
> 
> 
> 1) The double use of Static and Dynamic transform will require
>    SpatialObject to have both of them as member variables.
>    Since SpatialObjects should be able to be "static" or "tracked".
> 
>    What is the difficulty with having the "static" transforms be
>    represented with a time stamp of long duration ?
> 
> 
> 2) When composing transforms, the time stamp of the final transform
>    must by the intersection among all the time stamps of the transforms
>    involved on the composition.
> 
>    We could add to the TimeStamp class, as service method that will
>    compote the intersection between two TimeStamps. This operation
>    is associative, so by applying it by pairs we can compose any
>    number of TimeStamps.
> 
> 
> 3) It is better to have a explicit "Compose" method, than having
>    an operator overload.  The Compose method name could also make
>    clearer whether we are pre-composing or post-composing the
>    transform.
> 
> 
> 
> 
>   Luis
> 
> 
> 
> ---------------------
> Patrick Cheng wrote:
>> Hi everybody,
>>
>> This is the conclusion of the discussion between david and me. Welcome 
>> to comment on it.
>>
>> =======================================================================
>>
>> Problem 1. We need both static and dynamic transform. (Registration 
>> and calibration transforms should be static, and tracker transforms 
>> should be dynamic)
>>
>> Solution: Make subclasses of igstk::Transform,
>> igstk::DynamicTransform and igstk::StaticTransform StaticTransform 
>> which do not have time stamp. In base class we provide pure virtual 
>> fuction:
>> bool IsStatic()/IsDynamic();
>>
>>   Q? Do we some times have to switch the transform of a object from 
>> dynamic to static or the other way around?
>>
>> =======================================================================
>>
>> Problem 2. We currently don't have a simple transform compose method, 
>> and we are not taking care of time stamps in the current 
>> implementation of the transform multiplication.
>>
>> e.g.
>> Ta is static transform, Tb is dynamic, and Tc is dynamic.
>> When we do T = Ta * Tb * Tc
>> to get the final valid time stamp for T, we should first ignore Ta, 
>> and pick up the earlier expiration time from Tb and Tc, and minus 
>> current time, to get the valid time period for the T, and set a right 
>> time stamp for it.
>>
>> Solution: Add a simple function or operator such as:
>> transform = transform1.compose( transform2 )
>> equals to:
>> transform = transform1 * transform2
>>
>> This will avoid the wrong matrix composition, and make code simpler 
>> and cleaner.
>> Also this compose() method will calculate the correct time stamp 
>> automatically according to predefine rules.
>>
>> =======================================================================
>>
>> David, I hope you still agree on these points.
>>
>>
> 
> 
> 



More information about the IGSTK-Developers mailing list