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']}")