12 const std::string& schema,
16 ,_parser(topic_name, type_name, schema)
17 ,_deserializer(deserializer)
21 Parser::DISCARD_LARGE_ARRAYS;
31 auto hasQuaternion = [
this](
const auto& node) {
38 tree.visit(hasQuaternion, tree.croot());
61 std::string series_name;
65 key.toStr(series_name);
72 key.toStr(series_name);
90 MessageParser::setLargeArraysPolicy(clamp, max_size);
104 size_t last = key.fields.size() - 1;
108 key.fields[last]->name() ==
"x")
112 quat.
x = val.convert<
double>();
117 std::string prefix = key.toStdString();
154 msg.status.resize( status_count );
155 for(
size_t st = 0; st < status_count; st++)
157 auto& status = msg.status[st];
163 status.key_value.clear();
167 std::string value_str;
168 for(
size_t kv = 0; kv < key_value_count; kv++)
172 status.key_value.push_back( {key, value_str} );
177 double ts = timestamp;
182 std::string series_name;
184 for (
const auto& status : msg.status)
186 for (
const auto& kv : status.key_value)
188 if (status.hardware_id.empty())
191 _topic, status.name, kv.first);
195 _topic, status.hardware_id, status.name, kv.first);
199 double value = QString::fromStdString(kv.second).toDouble(&ok);
218 msg.position.clear();
219 msg.velocity.clear();
227 msg.name.resize( name_size );
228 for(
auto&
name: msg.name)
238 msg.position.resize( pos_size );
239 for(
auto& pos: msg.position)
248 msg.velocity.resize( vel_size );
249 for(
auto& vel: msg.velocity)
258 msg.effort.resize( eff_size );
259 for(
auto& eff: msg.effort)
265 std::string series_name;
266 for(
size_t i=0; i < std::max(name_size, pos_size); i++)
271 for(
size_t i=0; i < std::max(name_size, vel_size); i++)
276 for(
size_t i=0; i < std::max(name_size, eff_size); i++)
290 if( transform_size == 0)
294 msg.transforms.resize(transform_size);
296 auto getDouble = [
this]() {
300 for(
auto& trans: msg.transforms)
306 if (trans.header.frame_id.empty())
313 _topic_name, trans.header.frame_id, trans.child_frame_id);
320 Msg::Quaternion quat = { getDouble(), getDouble(), getDouble(), getDouble() };
329 {stamp, RPY.roll * RAD_TO_DEG} );
331 {stamp, RPY.roll * RAD_TO_DEG} );
333 {stamp, RPY.yaw * RAD_TO_DEG} );
std::vector< std::pair< FieldsVector, std::string > > name
List of all those parsed fields that can be represented by a "string".
std::shared_ptr< RosMsgParser::Deserializer > _deserializer
void parseHeader(PJ::Msg::Header &header)
unsigned maxArraySize() const
RPY QuaternionToRPY(Quaternion q)
bool deserialize(Span< const uint8_t > buffer, FlatMessage *flat_output, Deserializer *deserializer) const
deserializeIntoFlatContainer takes a raw buffer of memory and extract information from it...
bool _contains_quaternion
ParserROS(const std::string &topic_name, const std::string &type_name, const std::string &schema, RosMsgParser::Deserializer *deserializer, PJ::PlotDataMapRef &data)
void parseJointStateMsg(const PJ::MessageRef serialized_msg, double ×tamp)
void appendRollPitchYaw(double timestamp)
bool parseMessage(const PJ::MessageRef serialized_msg, double ×tamp) override
RosMsgParser::FlatMessage _flat_msg
const std::shared_ptr< MessageSchema > & getSchema() const
getSchema provides some metadata amout a registered ROSMessage.
bool clampLargeArray() const
std::string type_name(lua_State *L, type t)
void pushBack(const Point &p) override
RosMsgParser::Parser _parser
constexpr double RAD_TO_DEG
void pushBack(const Point &p) override
void setMaxArrayPolicy(MaxArrayPolicy discard_entire_array, size_t max_array_size)
const uint8_t * data() const
The MessageParser is the base class used to parse a message with a specific encoding+schema.
PlotData & getSeries(const std::string &key)
void parseDiagnosticMsg(const PJ::MessageRef serialized_msg, double ×tamp)
static ROSType quaternion_type(Msg::Quaternion::id())
void setLargeArraysPolicy(bool clamp, unsigned max_size) override
StringSeries & getStringSeries(const std::string &key)
std::vector< std::pair< FieldsVector, Variant > > value
std::basic_string< Char > format(const text_style &ts, const S &format_str, const Args &... args)
void parseTF2Msg(const PJ::MessageRef serialized_msg, double ×tamp)