Matlab Coder fails generation for slerp() call with double quaternions

Illustration
Jacqueline - 2020-12-08T11:15:08+00:00
Question: Matlab Coder fails generation for slerp() call with double quaternions

I am using  MATLAB coder to generate code for following function.   function [D] = getInterpolatedTransforms(q0,t0,q1,t1,steps,correction) D = zeros(4,4,steps); for i = 0:1:steps-1 coeff = single(i/steps); qt = slerp(q0,q1,coeff); tt = [t0*(1-coeff)+t1*coeff,1]'; D(1:3,1:3,i+1) = (quat2rotm(qt))*correction; D(1:4,4,i+1) = tt; end end I get following error while generating code at the "check for issues" step> ??? This assignment writes a 'single' value into a 'double' type. Code generation does not support changing types through assignment. Check preceding assignments or input type specifications for type mismatches. Error in ==>> quaternioncg Line: 48 Column: 17 Code generation failed: View Error Report ??? This assignment writes a 'single' value into a 'double' type. Code generation does not support changing types through assignment. Check preceding assignments or input type specifications for type mismatches. Error in ==>> quaternioncg Line: 48 Column: 17 Code generation failed: View Error Report The location of the error is in Matlab internal file quaternioncg.m

Expert Answer

Profile picture of John Williams John Williams answered . 2025-11-20

Solution 1 : Remove the single cast

 

function [D] = getInterpolatedTransforms(q0,t0,q1,t1,steps,correction)
D = zeros(4,4,steps);    
for i = 0:1:steps-1
    coeff = i/steps;
    qt = slerp(q0,q1,coeff);
    tt = [t0*(1-coeff)+t1*coeff,1]';
    D(1:3,1:3,i+1) = (quat2rotm(qt))*correction;
    D(1:4,4,i+1) = tt;
    
end
end

Solution 2: Make the input quaternion as single

 

>> a = quaternion(single([45,0,0]),'eulerd','ZYX','frame');
>> c = quaternion(single([-45,0,0]),'eulerd','ZYX','frame');

>> codegen getInterpolatedTransforms -args {a,1:3,c,3:5,10,0.5} -report


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!