Error in readMessages from generated ROS message

Technical Source
2 min readMay 16, 2023

--

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)

NOTE:-

Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help , Finance Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

I contacted MATLAB support and they let me know that there are a couple of known bugs with the readMessages function and that I should use the ‘DataFormat’, ‘struct’ options. This options is faster, does not require custom message code generation (no rosgenmsg call) and thus does not induce my error. I tried this and it works.

The change I thus made was; from:

readMessages(bagfile)

To:

readMessages(bagfile, 'DataFormat', 'struct')

This circumvents the above mentioned bug.

SEE COMPLETE ANSWER CLICK THE LINK

--

--

Technical Source
Technical Source

Written by Technical Source

Simple! That is me, a simple person. I am passionate about knowledge and reading. That’s why I have decided to write and share a bit of my life and thoughts to.

No responses yet