## 3 Conventional Offline Motion Preparation
### Relevant Preparation Algorithms  
For the preparation of a given point list for one operating speed, various methods could be used, see e.g., [14; 15; 16]. However, comparative studies regarding the performance of different algorithms are rare in the literature. Therefore, statements such as \"with [the introduced algorithm] LSPIA, a very large data set can be fitted efficiently\" [21] are hardly verifiable. For this reason, some motion preparation algorithms using B-spline and monomial splines are evaluated for their performance. The B-spline approaches use the advantages of B-splines and are representative for other B-spline algorithms. They will be compared with two monomial spline approaches, which are expected to be much easier to calculate. All approaches promise a good performance during the offline motion preparation. The algorithms are discussed on the example of a non-linear kinematics and the process introduced in Section 1. In the following algorithms, the function named _SplineIntTolerance()_ calculates the distance between the given, optimized motion set point and the point calculated from the spline. The whole spline is checked, whether it meets the given requirements. The first return value is \"ok\" for \"in tolerance/meets accuracy\" which is true, if the calculated spline meets the given requirements. The second value isan array of indices of the segments that do not match the given accuracy. Those indices are used for inserting new knots. Depending on the given check mode, only the index for the segment with the maximum error (mode \"maximum only\") or all faulty segments indices are returned (mode \"all\"). With these two modes, two variants of the B-spline algorithms can be evaluated. If only the segment with the maximum deviation is subdivided, a small amount of data is expected with increased computational effort. If, as suggested in [22], all segments with too large deviation are subdivided, a smaller computational effort caused by less iterations are expected with a simultaneously increasing amount of data. The reason for this is that inserting a single control point also affects the neighboring segments. If several neighboring segments are faulty, more nodes than necessary may result. _SplineSegInTolerance()_ only checks one segment of the spline for compliance and can, therefore, be implemented for greater performance. _Calculate(StartEnd)Derivatives(_0_) calculates from the given points the derivatives using central differentiation according to [23]. At the motions boundaries, the cyclical character of the motion is used. With these values a system of equations results, which can be solved. _SolveEquationSystem(_) uses QR decomposition with Householder transformations to solve the equation system which has been set up in _SetupEquationSystem(_). Implementation is always important when evaluating different approaches. In order to ensure comparability, the choice of segment lengths in all algorithms is based on bisection at 50% within the considered range. Other solutions like separation at the largest error or curvature require further investigation and are not part of this work. **bsLSQ**: the first considered approach implements [24], Figure 3, to calculate a B-spline globally. [24] uses the principle of least square approximation and thus offers a solution with minimal error for the problem. With the algorithm, derivatives can be specified at the start and end of the spline. The algorithm generates \"closed curves with various degrees of smoothness\" [24]. If the spline does not meet the required accuracy after calculation, additional nodes are inserted. The splitting is always performed at the given, optimized points. This avoids the knot span not containing any motion values and a singular system of equation is created. In the case of \"maximum only\" mode, a single node is inserted into the segment with the maximum error (bsLSQmax); otherwise (mode \"all\") a single node is inserted into all segments, that exceed the accuracy (bsLSQall).