monoCamera codegen error: Handle Classes in top-level outputs are not supported in MATLAB Coder

7 次查看(过去 30 天)
monoCamera is defined in https://www.mathworks.com/help/driving/ref/monocamera.html?s_tid=srchtitle. and have codegen capability. I try to generate the C++ object with code below:
function sensor = gen_camera(focalLength, principalPoint,imageSize, height,pitch,roll) %#codegen
coder.inline('never');
intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize);
sensor = monoCamera(intrinsics, height, 'Pitch', pitch, 'Roll', roll);
end
and codegen reports error:
cfg = coder.config('lib');
cfg.HardwareImplementation.ProdHWDeviceType = 'Intel->x86-64 (Linux 64)';
cfg.TargetLang = "C++";
cfg.CppNamespace = 'camera';
cfg.CppNamespaceForMathworksCode = 'MatlabCV';
cfg.HeaderGuardStyle = "UsePragmaOnce";
cfg.PostCodeGenCommand = 'packNGo(buildInfo)';
>> codegen -config cfg -report -o cameraVision gen_camera -args {focalLength, principalPoint,imageSize, height,pitch,roll}
??? Handle Classes in top-level outputs are not supported in MATLAB Coder. Output parameter 'sensor'
contains a handle class.
Anyway to solve this issue?

回答(1 个)

Aghamarsh Varanasi
Aghamarsh Varanasi 2020-11-13
编辑:Aghamarsh Varanasi 2020-11-13
Hi Li Chen,
‘sensor' is a Handle class object of the class ‘monoCamera’. A handle class object cannot be an entry-point (top level) function input or output.
Refer this documentation page to declare a MATLAB class that supports codegen.
If the purpose of ‘sensor’ handle class object is just to pass data from one function to another, you could instead convert ‘sensor’ to a structure and pass it as an output argument to the function ‘gen_camera’.
sensor = struct(sensor);
You can add this line at the end of your fucntion gen_camera’.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by