How to use c++ codegen to write to a ROS2 message, erroring at struct type
5 次查看(过去 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
0 个评论
采纳的回答
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 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!