Basic Usage Examples
This page contains basic usage examples to help you get started with MsgCenterPy.
Creating Message Instances
ROS2 Message Instances
Working with ROS2 Messages
from msgcenterpy.instances.ros2_instance import ROS2MessageInstance
from std_msgs.msg import String, Float64MultiArray
from geometry_msgs.msg import Point, Pose
# Simple String message
string_msg = String()
string_msg.data = "Hello ROS2"
ros2_instance = ROS2MessageInstance(string_msg)
# Access and modify field
ros2_instance.data = "Updated message"
print(f"Message data: {ros2_instance.inner_data.data}")
# Float array message
array_msg = Float64MultiArray()
array_msg.data = [1.1, 2.2, 3.3, 4.4, 5.5]
array_instance = ROS2MessageInstance(array_msg)
# Complex nested message
pose_msg = Pose()
pose_instance = ROS2MessageInstance(pose_msg)
# Set nested fields
pose_instance.position.x = 1.5
pose_instance.position.y = 2.5
pose_instance.position.z = 3.5
# Or set entire object
new_position = Point(x=10.0, y=20.0, z=30.0)
pose_instance.position = new_position
Converting ROS2 to Python Dictionary
# Get Python dictionary representation
python_dict = ros2_instance.get_python_dict()
print(f"Dictionary: {python_dict}")
# Set data from dictionary
new_data = {"data": "dictionary_value"}
ros2_instance.set_python_dict(new_data)
JSON Schema Message Instances
Creating JSON Schema Instances
from msgcenterpy.instances.json_schema_instance import JSONSchemaMessageInstance
# Define JSON Schema
schema = {
"type": "object",
"properties": {
"name": {"type": "string", "minLength": 2, "maxLength": 50},
"age": {"type": "integer", "minimum": 0, "maximum": 150},
"active": {"type": "boolean"},
"tags": {
"type": "array",
"items": {"type": "string"},
"minItems": 1,
"maxItems": 10
}
},
"required": ["name"]
}
# Sample data
data = {
"name": "John Doe",
"age": 30,
"active": True,
"tags": ["developer", "python"]
}
# Create instance
json_schema_instance = JSONSchemaMessageInstance(data, schema)
Working with JSON Schema Constraints
# Get field type information with constraints
name_type_info = json_schema_instance.fields.get_sub_type_info("name")
print(f"Field type: {name_type_info.standard_type}")
print(f"Min length: {name_type_info.get_constraint_value('min_length')}")
# Check validation errors
if len(json_schema_instance._validation_errors) == 0:
print("Data is valid according to schema")
else:
print(f"Validation errors: {json_schema_instance._validation_errors}")
# Export to envelope format
envelope = json_schema_instance.export_to_envelope()
print(f"Envelope metadata: {envelope['metadata']}")
Message Type Conversion
Converting ROS2 to JSON Schema
from std_msgs.msg import String
from msgcenterpy.instances.ros2_instance import ROS2MessageInstance
# Create ROS2 instance
string_msg = String()
string_msg.data = "conversion_test"
ros2_instance = ROS2MessageInstance(string_msg)
# Convert to JSON Schema instance
json_schema_instance = ros2_instance.to_json_schema()
# Verify conversion
print(f"Original data: {ros2_instance.get_python_dict()}")
print(f"Converted data: {json_schema_instance.get_python_dict()}")
print(f"Generated schema: {json_schema_instance.json_schema}")
Generate JSON Schema from ROS2 Message
from geometry_msgs.msg import Pose
# Create complex ROS2 message
pose_msg = Pose()
pose_msg.position.x = 5.0
pose_msg.position.y = 10.0
pose_msg.position.z = 15.0
pose_msg.orientation.w = 1.0
ros2_instance = ROS2MessageInstance(pose_msg)
# Generate JSON Schema
schema = ros2_instance.get_json_schema()
print("Generated JSON Schema:")
print(f"Type: {schema['type']}")
print(f"Properties: {list(schema['properties'].keys())}")
print(f"Position schema: {schema['properties']['position']}")