ros2_medkit_serialization
Runtime JSON to ROS 2 message serialization library
README
ros2_medkit_serialization
Runtime JSON ↔ ROS 2 message serialization library for the ros2_medkit gateway.
Overview
This package provides dynamic message serialization using dynmsg, enabling JSON ↔ ROS 2 message conversion at runtime without compile-time type dependencies. It eliminates CLI fallbacks in the gateway by providing native C++ APIs for all message operations.
Features
JSON Serialization: Convert ROS 2 messages to/from JSON (via YAML bridge)
CDR Serialization: Serialize JSON to CDR format for
GenericPublisherandGenericClientCDR Deserialization: Deserialize CDR data from
GenericSubscriptionto JSONType Caching: Thread-safe caching of type introspection data with LRU eviction
Service/Action Types: Helper functions for request/response/goal type derivation
Schema Generation: Generate JSON schemas for ROS 2 message types
Dependencies
dynmsg- OSRF dynamic message introspection librarynlohmann_json- JSON libraryyaml_cpp_vendor- YAML library (for dynmsg compatibility)rclcpp- ROS 2 client library (for SerializedMessage)
Usage
#include "ros2_medkit_serialization/json_serializer.hpp"
#include "ros2_medkit_serialization/type_cache.hpp"
// Get type info (cached)
auto& cache = ros2_medkit_serialization::TypeCache::instance();
auto type_info = cache.get("std_msgs", "String");
// Create serializer
ros2_medkit_serialization::JsonSerializer serializer;
// Serialize JSON to CDR for GenericPublisher
nlohmann::json msg_json = {{"data", "Hello World"}};
auto serialized = serializer.serialize("std_msgs/msg/String", msg_json);
// Use with: generic_publisher->publish(serialized);
// Deserialize CDR to JSON from GenericSubscription
nlohmann::json result = serializer.deserialize("std_msgs/msg/String", serialized_msg);
// Convert in-memory message to JSON
nlohmann::json json = serializer.to_json(type_info, message_ptr);
// Generate schema for a type
nlohmann::json schema = serializer.get_schema("geometry_msgs/msg/Twist");
API Reference
JsonSerializer
Method |
Description |
|---|---|
|
Serialize JSON to CDR |
|
Deserialize CDR to JSON |
|
Convert in-memory message to JSON |
|
Create message from JSON |
|
Get JSON schema for type |
|
Get default values as JSON |
|
Convert YAML node to JSON (static) |
TypeCache
Method |
Description |
|---|---|
|
Get singleton instance |
|
Get cached type info |
|
Get cached type info from full type string |
|
Clear all cached entries |
Building
cd /path/to/ros2_medkit
colcon build --packages-select ros2_medkit_serialization
Testing
colcon test --packages-select ros2_medkit_serialization
colcon test-result --verbose
Design Documentation
See the design documentation for architecture details.
License
Apache-2.0