How to use c++ codegen to write to a ROS2 message, erroring at struct type

조회 수: 7 (최근 30일)
I have the following code in maltab to be generated using codegen:
%change function to file name
function LidarObstacle()
%#codegen
pointnode_lane = ros2node("/ouster_driver_lane");
pubdistance_lane = ros2publisher(pointnode_lane,"/LaneDist","std_msgs/Float64MultiArray");
msg = ros2message(pubdistance_lane);
msg.data = coder.nullcopy(zeros(1, 20));
The error that is happening is:
Attempt to write a value of type 'std_msgs_Float64MultiArrayStruct_T' into a variable defined as type
'struct_T'. Code generation does not support changing types through assignment. To investigate the cause
of the type mismatch, check preceding assignments or input type specifications.
Is there a fix to this issue? I've tried multiple different ways. I've even tried Simulink at writing the

채택된 답변

Prabeen Sahu
Prabeen Sahu 2025년 4월 24일
Hi,
This is likely a limitation with your current version of MATLAB. When you create a ROS 2 message in MATLAB (e.g., std_msgs/Float64MultiArray), the message fields such as data are preallocated with a specific type and size. If you attempt to assign a whole new array (e.g., rmsg.data = zeros(1, 20)) or use coder.nullcopy, MATLAB Coder detects a type or size mismatch and produces an error.
Workaround:
Instead of coder.nullcopy(zeros(1, 20)), please use a loop to initialize msg.data as shown below:
function LidarObstacle()
%#codegen
pointnode_lane = ros2node("/ouster_driver_lane");
pubdistance_lane = ros2publisher(pointnode_lane,"/LaneDist","std_msgs/Float64MultiArray");
msg = ros2message(pubdistance_lane);
for ii = 1:20
msg.data(ii) = 0;
end

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 ROS Network Access in Simulink에 대해 자세히 알아보기

제품


릴리스

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by