Hi all, I have some custom ROS messages that I have loaded into MATLAB utilizing the rosgenmsg routine. Everything went fine and they show up when calling rosmsg list. When I went to read messages of the custom type from my rosbag I received the following error: Reference to non-existent field 'Forces_'. Error in robotics.ros.custom.msggen.sfm_msgs.Forces/reload (line 165) Forces_Cell = arrayfun(@(x) feval([obj.SfmMsgsForceClass '.loadobj'], x), strObj.Forces_, 'UniformOutput', false); Error in robotics.ros.Message/fromStruct (line 172) obj.reload(sObj); Error in robotics.ros.BagSelection/readMessages (line 280) msgs{i}.fromStruct(msgStructs{i}); I did some investigation on how the function works and where the error comes from. In robotics.ros.Message/fromStruct the code tries to create a message object from the bag information (which is in struct format). For my custom message of type sfm_msgs/Forces the field names for the message and the structs (these are autogenerated by rosgenmsg) differ: K>> msgs{1} ans = ROS Forces message with properties: MessageType: 'sfm_msgs/Forces' Header: [1×1 Header] Forces_: [0×1 Force] versus K>> msgStructs{1} ans = struct with fields: MessageType: 'sfm_msgs/Forces' Header: [1×1 struct] Forces: [1×6 struct] This leads to the top-most error of my error message. As mentioned, this naming difference is autogenerated by the rosgenmsg routine. The original .msg message definitions are: Forces.msg: std_msgs/Header header Force[] forces Force.msg: uint8 ATTRACTIVE=0 uint8 INT_ROBOT=1 uint8 INT_OBSTACLE=2 uint8 INT_HUMAN=3 uint8 type string entity_name geometry_msgs/Vector3 force So... yeah. I have no idea how to fix this and as far as I am considered this is a bug in the rosgenmsg routine. Hopefully some of you guru's have an idea! P.S. I am using MATLAB Version: 9.4.0.813654 (R2018a) with Robotics System Toolbox Version 2.0 (R2018a)
Neeta Dsouza answered .
2025-11-20
readMessages(bagfile)
To:
readMessages(bagfile, 'DataFormat', 'struct')
This circumvents the above mentioned bug.