MATLAB: How to extract data from diagnostic​s_msgs/Dia​gnosticArr​ay ROS message type in Simulink

arrayarraymbusdiagnosticarrayMATLABmessage definitionpublishRobotics System Toolboxrobotics toolboxrossimulinksubscribe

Dear Mathworks community, I need to extract data from diagnostics_msgs/DiagnosticArray ROS message type in my Simulink model. The message definition in ROS and Matlab matches and is the following :
std_msgs/Header header
uint32 seq
time stamp
string frame_id
diagnostic_msgs/DiagnosticStatus[] status
byte OK=0
byte WARN=1
byte ERROR=2
byte STALE=3
byte level
string name
string message
string hardware_id
diagnostic_msgs/KeyValue[] values
string key
string value
end
I am interested in the string value array inside the KeyValue[] values bus. In Simulink this element is detected as a bus element in an array of sub-buses. I have tried many combinations of Selector blocks and Bus Selector blocks but I havent been successful in extracting this data and exporting it to the Matlab workspace.So far I have tried the following :
Any help would be greatly appreciated! Thanks in advance.

Best Answer

Hi Sorry for the delayed response.
I was able to create this, it is indeed a bit tricky with Simulink buses and able to extract the data.
>> msg =
ROS DiagnosticArray message with properties:
MessageType: 'diagnostic_msgs/DiagnosticArray'
Header: [1×1 Header]
Status: [16×1 DiagnosticStatus]
Please note the three images attached, (1) The Simulink model using "Selector" + "Bus Selector" blocks in tandem, (2) The Default array sizes for the variable sized buses which are defined in the Simulink > Tools > ROS > Manage array sizes for the model.
Thanks
Robotics Team @ MathWorks