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

J
Jacqueline · Dec 8, 2020 · 2.1K views
Question
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 PhD Expert
Answered Nov 20, 2025

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
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!