@foxglove/ros2idl-parser
v0.3.5
Published
Parser for ROS 2 IDL message definitions
Downloads
4,128
Readme
@foxglove/ros2idl-parser
ROS 2
.idl
message definition parser
Introduction
The Robot Operating System (ROS) defines a supported subset of OMG IDL for describing data types. This library parses those message definitions and can round trip them back into a canonical string format suitable for checksum generation. The parsed definitions are useful for serialization or deserialization when paired with other libraries.
Usage
import { parseRos2idl } from "@foxglove/ros2idl-parser";
const ros2idlDefinitionStr = `
================================================================================
IDL: geometry_msgs/msg/Pose
module geometry_msgs {
module msg {
struct Pose {
geometry_msgs::msg::Point position;
geometry_msgs::msg::Quaternion orientation;
};
};
};
================================================================================
IDL: geometry_msgs/msg/Point
module geometry_msgs {
module msg {
struct Point {
double x;
double y;
double z;
};
};
};
================================================================================
IDL: geometry_msgs/msg/Quaternion
module geometry_msgs {
module msg {
struct Quaternion {
double x;
double y;
double z;
double w;
};
};
};
`;
const messageDefinition = parseRos2idl(ros2idlDefinitionStr);
// print the parsed message definition structure
console.log(JSON.stringify(messageDefinition, null, 2));
Prints:
[
{
"definitions": [
{
"type": "geometry_msgs/msg/Point",
"isArray": false,
"name": "position",
"isComplex": true
},
{
"type": "geometry_msgs/msg/Quaternion",
"isArray": false,
"name": "orientation",
"isComplex": true
}
]
},
{
"name": "geometry_msgs/msg/Point",
"definitions": [
{
"type": "float64",
"isArray": false,
"name": "x",
"isComplex": false
},
{
"type": "float64",
"isArray": false,
"name": "y",
"isComplex": false
},
{
"type": "float64",
"isArray": false,
"name": "z",
"isComplex": false
}
]
},
{
"name": "geometry_msgs/msg/Quaternion",
"definitions": [
{
"type": "float64",
"isArray": false,
"name": "x",
"isComplex": false
},
{
"type": "float64",
"isArray": false,
"name": "y",
"isComplex": false
},
{
"type": "float64",
"isArray": false,
"name": "z",
"isComplex": false
},
{
"type": "float64",
"isArray": false,
"name": "w",
"isComplex": false
}
]
}
]
Stay in touch
Join our Slack channel to ask questions, share feedback, and stay up to date on what our team is working on.