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
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