Ariles
|
branch | HEAD v2 | pkg_ws_2 (ROS/ROS2 packages) |
---|---|---|
CI status | ||
package | |
Loosely speaking, ariles
is a C++ reflection library, i.e., it provides meta-programming APIs for implementation of class visitors (processors). It also provides a number of (de)serializers based on these APIs, e.g., YAML
, JSON
, XML
, ROS
parameter server, ROS2
parameters; and serialization wrappers for some types, e.g., STL
containers, smart pointers, Eigen
matrices, etc.
boost::serialization
, ariles
tries to be flexible while parsing by:XML
,YAML
<-> ROS
parameter server. Note that the conversion is not data-agnostic, i.e., the complete data structure must be represented in C++ code.Octave
script for debugging purposes.URDF
.Class [./tests/api_v2/types/minimal.h
]:
Serialization:
Result:
Deserialization:
Conversion:
Note that ROS/ROS2 compatible packages are available in a separate branch https://github.com/asherikov/ariles/tree/pkg_ws_2.
See demo for more exaples: https://asherikov.github.io/ariles/2/DEMO.html [./tests/api_v2/demo_api_v2.cpp
]
ariles
includes a number of optional visitors that support various data representation formats, in particular:
YAML
via yaml-cpp
: https://asherikov.github.io/ariles/2/group__yaml__cpp.html.msgpack
via msgpack-c
: https://asherikov.github.io/ariles/2/group__msgpack.html.JSON
via RapidJSON
, with optional Jsonnet preprocessing: https://asherikov.github.io/ariles/2/group__rapidjson.html and https://asherikov.github.io/ariles/2/group__jsonnet.html.XML
via PugiXML
: https://asherikov.github.io/ariles/2/group__pugixml.htmlOctave
script, output only, no dependencies: https://asherikov.github.io/ariles/2/group__octave.htmlROS
parameter server, via standard ROS
libs: https://asherikov.github.io/ariles/2/group__rosparam.htmlgraphviz
dot files for diagram generation: https://asherikov.github.io/ariles/2/group__graphviz.htmlROS2
parameters, via standard rclcpp
lib: https://asherikov.github.io/ariles/2/group__ros2param.html ROS2
parameters is not designed to fully reflect yaml structure as explained here https://github.com/ros2/rcl/issues/463, so while ariles
can dump and read anything, there are certain workarounds in place that are described in more details in the ROS2
demo [./tests/api_v2/demo_api_v2_ros2.cpp
] https://asherikov.github.io/ariles/2/DEMO_ROS2.html.There are also a few utility visitors, e.g.,
compare
for class comparison;copyto
for copying data to non-ariles
classes;copyfrom
for copying data from non-ariles
classes.The complete list of modules is available at https://asherikov.github.io/ariles/2/modules.html
ariles
provides serialization wrappers for the follwing types:
std::string
, std::vector
, std::map
, std::pair
, std::shared_ptr
, std::unique_ptr
.Eigen
types: matrices, transforms, quaternions.Boost
classes: boost::optional
, boost::movelib::unique_ptr
. boost::shared_ptr
.cmake
>= 3.1C++17
compatible compilerboost
Visitors and corresponding dependencies can be enabled or disabled via cmake options, the same applies to data types which depend on external libraries.
ROS1/ROS2 compatible packages are provided in pkg_ws_2
branch of the main repository -> https://github.com/asherikov/ariles/tree/pkg_ws_2.
ariles2::rosparam::Reader
, but its functionality is more limited.ariles
it is more focused on reflection per se rather than applications, for example, it allows to set value by string name of a class member, handles class methods, etc. Ponder
does not rely as much on preprocessor macro, but is more verbose.ponder
. Partially inspired ariles
2.x.x API.pfr
): C++14 library providing tuple like methods for aggregate initializable structures. Addresses a somewhat different but related problem.boost::serialization
, https://github.com/USCiLab/cereal.