Error in readMessages from generated ROS message
显示 更早的评论
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)
采纳的回答
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Specialized Messages 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!