mirror of
https://github.com/ZGCA-Forge/MsgCenterPy.git
synced 2025-12-14 13:04:34 +00:00
167 lines
4.5 KiB
ReStructuredText
167 lines
4.5 KiB
ReStructuredText
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
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. code-block:: python
|
|
|
|
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
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. code-block:: python
|
|
|
|
# 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
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. code-block:: python
|
|
|
|
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
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. code-block:: python
|
|
|
|
# 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
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. code-block:: python
|
|
|
|
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
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. code-block:: python
|
|
|
|
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']}")
|