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
This course is designed for business owners, freelancers, and professionals looking to gain practical skills in using ChatGPT. It’s suitable for those who want to improve their data analysis, customer service, and automation skills in order to stay competitive in the market – all while saving time and money. ChatGPT course
ReplyDelete