- Removed redundant visibility settings and consolidated them for both C and C++.
- Ensured consistent application of visibility presets to enhance code encapsulation and maintainability.
* feat: enhance record_playback_plugin with storage policy configuration
* feat: add executor configuration for record_playback_plugin in YAML files
* fix: standardize formatting in YAML configuration for record_playback_plugin
* docs: improve clarity in record_playback_plugin documentation
* refactor: rename executor to timer_executor in record_playback_plugin
* refactor: rename timer_executor to executor in record_playback_plugin and update documentation for storage policy options
* format
* docs: clarify timer_executor requirement in record_playback_plugin documentation
* docs: update message count period in YAML and markdown files for record_playback_plugin
* feat: improve validation of storage policy options in record_playback_plugin
* feat: update RecordAction to use storage_executor_ref_ in InitExecutor and remove CommitRecord method
* feat: update RecordAction to use timer_executor in InitExecutor and clean up includes in record_playback_plugin
* fix: correct service address handling in grpc plugin
- Fixed an issue in the grpc plugin where the service address was incorrectly set during communication with native grpc. This change ensures that the service address is now correctly formatted, improving the reliability of grpc interactions.
- Updated the release notes for version 0.10.0 to reflect this fix.
* refactor: improve subprocess command formatting in ExampleRunner
- Updated the ExampleRunner class in run_all_example.py to read the package version from the VERSION file instead of hardcoding it. This change enhances flexibility and ensures that the correct version is installed during the example execution.
* docs: improve clarity and consistency in AimRT documentation
- Updated terminology in the concepts documentation to correct "拓补" to "拓扑" for accuracy.
- Enhanced the README for the ROS2 plugin by adding process type clarifications (e.g., specifying "cli" and "srv" for client and server processes).
- Ensured consistent formatting and terminology throughout the documentation to improve readability and understanding for users.
* fix: correct typo in CMakeLists.txt visibility setting
- Fixed a typo in the CMakeLists.txt file where "CMAKE_CXX_VISIBLITY_INLINES_HIDDEN" was corrected to "CMAKE_CXX_VISIBILITY_INLINES_HIDDEN". This change ensures proper visibility settings for inline functions in the project.
* perf: add proxy cache to avoid the deserialize step
* feat(proxy_plugin): Dynamically register cache serialization types
* feat: Optimize the traversal method for type list
* docs: clarify RPC error handling and update related documentation
- Added explanations regarding the behavior of the framework when a service is not implemented, specifically that it returns AIMRT_RPC_STATUS_OK instead of the expected error code due to limitations in ROS2.
- Enhanced the description of the `Status` class to clarify that its error messages are primarily for framework-level issues, guiding developers on how to handle business-level errors.
- Updated the documentation to improve understanding of RPC call behavior in AimRT.
* docs: enhance RPC error code documentation in Status class
- Expanded the documentation for the `Status` class to include a detailed table of error codes, their values, and descriptions for both server and client errors.
- Clarified that the error codes primarily indicate framework-level issues, guiding developers on how to handle business-level errors effectively.
- Improved overall clarity and accessibility of the RPC error handling documentation.
* fix: adjust context handling in ROS2 adapter RPC client and server
- Updated the context reservation in `ros2_adapter_rpc_client.cc` to accommodate an additional timeout value.
- Modified the context parsing in `ros2_adapter_rpc_server.cc` to correctly handle the new timeout value and adjust the indexing for key-value pairs accordingly.
* fix: enhance context handling for timeout in ROS2 adapter RPC client and server
- Updated context reservation in `ros2_adapter_rpc_client.cc` to include an additional timeout entry.
- Adjusted context parsing in `ros2_adapter_rpc_server.cc` to correctly set the timeout and handle key-value pairs more efficiently.
- Fixed typos in the RPC documentation, specifically changing "正真的" to "真正的" and "Contxet" to "Context".
- Enhanced the clarity of the text to ensure better understanding of the RPC method handling process in AimRT.
- Introduced a new method `WaitForServiceServer` to ensure the service server is available before starting benchmarks.
- Added a timeout mechanism for RPC calls to improve robustness.
- Enhanced logging to provide feedback on server availability during the benchmark process.
- Updated the release notes to include the new version v0.9.2.
- Added important changes including a bug fix related to the asio thread executor and minor documentation and benchmark updates.
- Added a note regarding the MSVC toolset version 19.40 for Visual Studio 2022 to address potential compilation issues.
- Updated the installation methods for the `aimrt_py` package, clarifying that PyPI installation is not currently supported and emphasizing source compilation as the recommended method.
- Bumped the version number from 0.9.0 to 0.9.1 in the VERSION file.
- Updated the release notes to reflect the new version, replacing references from v0_9_0.md to v0_9_1.md.
Updated the SubscribeIndexMap in LocalChannelBackend to use std::string instead of std::string_view for msg_type, topic, lib_path, and module_name. This change enhances memory management and ensures proper ownership semantics for string data within the subscription index map.
* feat: enhance error checking for server listen address in gRPC plugin
- Added a new method `CheckListenAddr` to validate the listening address for the server.
- Integrated error checking in the server initialization to throw an exception if the address is already in use, improving robustness and error handling.
* refactor: remove process termination commands from gRPC plugin start scripts
- Eliminated the lines that forcefully kill processes listening on ports 50050 and 50051 in the gRPC plugin start scripts. This change simplifies the startup process and avoids potential issues with abrupt terminations.
* feat: enhance aimrt_py with ROS2 support and modularize functionality
- Added support for ROS2 message types in aimrt_py, improving interoperability with ROS2 systems.
- Introduced new module aimrt_python_runtime_ros2 for ROS2-specific functionalities, including publishing, subscribing, and RPC handling.
- Updated existing files to integrate ROS2 capabilities, ensuring seamless interaction between ROS1 and ROS2 message types.
- Enhanced CMake configuration to conditionally include ROS2 components based on build settings.
- Improved code organization by separating ROS2-related functionalities into dedicated headers and source files for better maintainability.
* chore: update .gitignore and refactor example scripts for improved clarity and organization
- Added 'test_log/' to .gitignore to exclude test log files from version control.
- Removed obsolete 'py_tests.py' file to streamline the test structure.
- Enhanced logging messages in ROS2 subscriber and RPC server applications for better context clarity.
- Updated expected output definitions in utility files to reflect new message structures and improve consistency.
- Refactored example runner script to correct directory path handling and improve readability.
- Added new example configurations for ROS2 channels and RPC interactions, enhancing the testing framework.
* refactor: remove unused import from python_runtime initialization
- Eliminated the import of aimrt_python_runtime_ros2 from the __init__.py file in the python_runtime module to streamline the code and improve clarity.
* refactor: streamline ROS2 import structure and enhance CMake configuration
- Removed direct import of aimrt_python_runtime_ros2 in favor of aliasing for clarity in aimrt_py_chn.py.
- Updated CMakeLists.txt to conditionally add dependencies for ROS2 components, improving build flexibility.
- Adjusted ROS2 service generation script to utilize the aliased import for better readability and maintainability.
* feat: add support for additional ROS2 example script
- Introduced a new subprocess call in `run_all_example.py` to execute the `build_examples_py_ros2_rpc.sh` script, enhancing the example runner's capabilities for ROS2 RPC interactions.
- This addition allows for better demonstration and testing of ROS2 functionalities within the example framework.
* format code
Improve the import structure by replacing a relative import with an absolute import format. This enhances readability and maintains consistency in the codebase.
* fix: enhance error handling in RPC benchmark client
* chore: remove unused pybind11 includes
Clean up unused dependencies from the Python runtime type support headers to streamline the codebase and improve maintainability.
* fix: improve error logging for GetFooData failures
Enhance logging by using ToString() for status to provide clearer failure messages, aiding in troubleshooting and debugging.
* fix(bag): optimize bag file processing workflow
- Add handling for missing files in PlaybackAction, ignore non-existent files
- Add bag_recover.py script for repairing corrupted bag files
- Modify rosbag_trans.py to add file existence check and repair steps
- Add index creation and transaction handling in AimrtbagToRos2 to improve conversion efficiency
* build(bag_recover): update version
* fix: rename the file
* fix: opt the code
* feat: add checks for ROS 2 message type support
Implement validation functions to ensure message or service types are compliant with ROS 2 standards, enhancing compatibility and error handling when integrating ROS 1 and ROS 2 environments.
* build: update file globbing to include configure dependencies
Ensure source files are automatically detected during configuration by adding CONFIGURE_DEPENDS to the file globbing commands for C++ and Python files. This improves build reliability as it accounts for changes in the file structure.
* feat: add ROS2 message support and enhance publishing functionality
Implement functions to register, publish, and subscribe to ROS2 messages, improving interoperability with ROS2 systems. Adjust type support to handle both protobuf and ROS2 message types, streamlining the process of message serialization and ensuring robustness in message handling.
* feat: add HTTP and ROS2 example configurations and applications
Introduce example configurations and applications for both HTTP and ROS2 channels, enabling greater flexibility and showcasing the capabilities of the system for publishing and subscribing to messages.
* chore: disable unimplemented copy and move functions
Throw runtime errors for the unimplemented copy and move methods to ensure clarity on their current status and prevent accidental usage.
* feat: enhance message publishing with iteration and logging
Implement continuous publishing of messages with incremental identifiers in the publisher application. Update the subscriber to log message count, improving visibility into received messages.
* refactor: reorganize and encapsulate ROS2 message handling functionality
Streamline the handling of ROS2 messages by encapsulating related functionality into a new utility header file. This enhances code clarity and maintainability while adhering to best practices in modular design.
* refactor: streamline protobuf and ROS2 message publishing
Enhance context handling and unify publish type registration for better clarity and usability. Simplify serialization type management and improve the architecture for future extensions, particularly for messaging features.
* refactor: streamline messaging functions
Enhance message publishing by consolidating function calls and improving clarity. Update context handling to better support message serialization types, allowing for a more flexible interaction with both protobuf and ROS2 messages.
* refactor: simplify message subscription handling and reduce publish frequency
Adjust the message subscription method to handle both Protobuf and ROS2 message types more efficiently and eliminate redundant subscription functions. Decrease the publishing frequency in the example app for improved performance and readability.
* fix: remove unnecessary error message for ROS 1 type detection
Eliminate confusion by removing the printed warning about ROS 1 message types, as it was not providing significant value in handling unsupported types.
* docs: update README and add ros2 channel examples
Clarify publisher behavior in examples and provide comprehensive documentation for ros2 channel implementations.
* feat: support ros2 message types in aimrt_py channel
Add support for ros2 message types in the aimrt_py channel to enhance interoperability with ROS2-based applications.
* fix: improve error handling during ROS2 message serialization and deserialization
Enhance robustness by adding exception handling to ensure the process correctly handles serialization and deserialization failures, improving overall stability in handling ROS2 messages.
* fix: correct argument validation and formatting
Remove unnecessary whitespace and enhance error handling for argument types in the publishing function, ensuring clear type checking and preventing potential runtime errors.
* refactor: streamline message conversion logic
Simplify the conversion of ROS2 messages to Python objects by moving the conversion logic inline. This eliminates unnecessary function calls and improves performance while maintaining clarity in the subscription method.
* feat: add ROS2 support to Python runtime
Enable linking and compilation of ROS2 interfaces based on the build configuration. This improves flexibility by allowing the Python runtime to interface with ROS2 when needed, enhancing interoperability and feature set.
* feat: enhance message type handling for publishers and subscribers
Add utility functions to generate names for ROS2 and protobuf message types, centralizing logic for type name creation. Update the publisher and subscriber to utilize these functions, improving code readability and maintainability while ensuring accurate message type management.
* feat: update message types to use RosTestMsg for better compatibility
Register new message type RosTestMsg in both publisher and subscriber applications. Update data format for publishing events to improve clarity and consistency in message handling. Ensure proper setup in the shell scripts for localization configuration.
* chore: consolidate pybind11 includes
Simplify header files by removing redundant pybind11 includes, reducing clutter and improving maintainability.
* docs: add ROS2 message support details and example links
Enhance the documentation by including information on ROS2 message formats and how to generate corresponding Python code. This provides users with clearer guidance on integrating ROS2 functionality within the project.
* chore: update copyright information to reflect new authorship
Update copyright year and licensing information across multiple configuration files and application scripts to maintain proper attribution for the AimRT project.
* feat: add ROS2 RPC client and server examples with configurations
Introduce example applications for ROS2 RPC communication, including client and server scripts, along with necessary configuration files. Implement a build script to set up the protocol buffers correctly, enhancing usability by supporting both HTTP and gRPC backends.
* feat: update RPC request and response handling
Refactor the RPC client and server implementations to utilize the updated request and response types from the example ROS2 service, improving code clarity and ensuring compatibility with the new service structure.
* refactor: simplify RPC response handling
Remove unnecessary response object instantiation and streamline the response creation process for improved clarity and efficiency in the RPC invocation logic.
* refactor: streamline publisher and subscriber method names
Simplify method names related to publishing and subscribing to enhance readability and maintainability. Transition from a prefix-based naming convention to a more concise approach, ensuring consistency across the codebase.
* chore: update configuration file paths for gRPC client and server examples
Align the configuration file paths in the example scripts to use the gRPC-specific settings, ensuring the correct configuration is utilized for both the client and server.
* refactor: rename internal methods for clarity
Improve naming conventions for protobuf message type functions, enhancing code readability and maintainability. Update related usages to keep consistent across the runtime and RPC generator.
* feat: add service type validation and improve bash scripts
Introduce a new bash script for debugging the ROS2 client and enhance existing scripts with proper sourcing. Implement service type validation to ensure the reliability of service registration. This improves the robustness of RPC interactions and simplifies the setup process for developers.
* feat: extend RPC response data structure and improve logging
Add additional data types to the RosTestRpc response for enhanced functionality. Set logging level to trace for more detailed output during execution.
* feat: add support for static and dynamic arrays in RPC service
Enhance the RPC service by introducing static and dynamic array types for various data types, enabling more complex data handling in requests and responses. This improves flexibility and usability for clients interacting with the service.
* feat: add support for new ROS message types
Enhance the RPC server to handle additional ROS message types, including dynamic and static arrays of custom data structures. This improves the server's data handling capabilities and aligns with the updated service specifications.
* refactor: improve type mapping and message copy functions
Update type mappings for better consistency and clarity. Enhance the readability of message copying functions by formatting multi-line expressions.
* refactor: improve message copying and moving functions
Enhance the handling of ROS message copying and moving by updating the parameter order and adding tailored move functions for better memory management. This optimizes the performance of message manipulations and ensures cleaner, more maintainable code.
* refactor: simplify message type support functions
Remove inline implementations and enhance readability of message type support functions, while maintaining functionality and improving code organization.
* refactor: streamline ROS message handling and improve introspection support
Enhance readability and maintainability by cleaning up function definitions related to ROS message type support. Implement a more robust method for obtaining message members information, addressing potential failure scenarios. Adjust example service implementation for consistency in dynamic data handling.
* fix: ensure pointers for ROS message creation and destruction are valid
Throw runtime exceptions if the function pointers for creating or destroying ROS messages are null, enhancing error handling and stability during object initialization.
* feat: enhance RosTestRpc method signature for better type safety
Improve the RosTestRpc method by adding overloads for different argument configurations, ensuring clearer type expectations and reducing potential runtime errors. This change aids in maintaining robust interactions with the ROS2 service framework.
* refactor: simplify parameter naming in RPC proxy function
Rename the `ctx_ref` parameter to `ctx` in the RPC function signature for cleaner and more concise code. This enhances readability and maintains consistency across the codebase.
* fix: restrict static array sizes in RosTestRpc service
Limit the size of static array fields to three elements each for better resource management and to prevent potential overflow issues.
* feat: enhance python runtime generation for ROS2 services
Add support for generating code from ROS2 service definitions, improving interoperability with the aimrt framework. Update build scripts to include new generation scripts and ensure file dependencies are configured correctly.
* refactor: update RPC service and client implementations to use ROS2 naming convention
Modify scripts to utilize the new aimrt_py-gen-ros2-rpc tool and update service and client references accordingly for consistency and clarity. Remove deprecated code to streamline functionality and improve maintainability.
* chore: update .gitignore to exclude generated files
Add pattern to ignore *_aimrt_rpc_ros2.py files to keep the repository clean from auto-generated files.
* refactor: streamline response structure for RosTestRpc
Remove unused fields from RosTestRpc response to simplify the data structure and enhance clarity. Adjust logging level for better control over output verbosity.
* chore: update log level to INFO for consistency
Adjust the core log level to INFO to ensure a more standard logging output and reduce unnecessary verbosity in the logs.
* docs: add README for ros2 rpc examples
Provide detailed instructions and explanations for setting up and running Python RPC examples using ros2 protocols with HTTP, gRPC, and native ros2 backends.
* feat: enhance aimrt_py channel with rpc support for ros2 message types
Add support for ros2 message types in both aimrt_py channel and rpc to improve compatibility and functionality.
* docs: add ros2_rpc example to Python interface section
Include a new example link to enhance the documentation and provide more resources for users exploring the Python interfaces.
* chore: add spacing for improved readability in service proxy class
Improve code readability by adding blank lines in the service proxy class definition.
* chore: standardize argument names for RPC generator
Update argument names in the RPC generation script and implementation for consistency, enhancing readability and usability.
* docs: update RPC documentation to include ROS2 Srv support
Add examples and instructions for using ROS2 Srv in RPC, enhancing integration options for developers. Adjust existing protobuf references for clarity and consistency.
* style: standardize whitespace in RosTestRpc.srv
Improve readability by ensuring consistent spacing in the service definition.
* build: exclude ROS2 specific files from the build if not using ROS2
Remove ROS2-related source files from the compilation when the project is configured without ROS2 support, helping to streamline the build process and avoid unnecessary dependencies.
* style: add missing newline at end of file for consistency
* refactor: rename copy function to improve clarity
Refactor the function used for copying messages within dynamic arrays to better convey its functionality. This change enhances code readability and maintainability.
---------
Co-authored-by: zhangyi <zhangyi@agibot.com>
Include a method to print detailed startup information about the framework, enhancing user awareness of the version and providing relevant links for support.
* feat(opentelemetry_plugin): Add RPC tracing and performance metrics
- Added multiple counters and histograms in OpenTelemetryPlugin for tracking RPC calls
- Updated ChannelTraceFilter and RpcTraceFilter with enhanced context attribute handling
- Added new RpcMetricsFilter for collecting RPC performance metrics
- Adjusted log level configuration from INFO to Warn
- Added link to echo_plugin example in documentation
* fix: format the code
* fix : format
* perf(opentelemetry_plugin): Optimize RPC performance metrics calculation logic
* fix: Simplify opentelemetry plugin code
* refactor(opentelemetry_plugin): remove rpc status
* fix: delete unnessary label
* format
* feat(opentelemetry_plugin): Add custom histogram boundaries option for RPC metrics
* fix(opentelemetry): Fix histogram boundary value type
* fix: change new to make_unique
* docs: add opentelemetry_plugin doc
* fix: opt the expression of doc
* choro: format the code
* docs: opt opentelemetry doc
* fix: update OpenTelemetry plugin documentation
- Change trace_otlp_http_exporter_url and metrics_otlp_http_exporter_url fields from required to optional
- Optimize capture list in OpenTelemetryPlugin::RpcMetricsFilter function
* add zenoh-shm API
* use zenoh shm-api for channel and rpc
* set z_alloc_result as a local variable.
* add zenoh_buffer_array_allocator
* avoid copy opreation when pub data with shm
* if shm pool size is not enough, use net buffer instead
* add z_pub_shm_size_map_ to store topic-loan_size
* little fix
* remove client send data 's copying
* remove server send data 's copy
* add doc
* change benchamrk item
* minor modification
---------
Co-authored-by: hanjun <hanjun@agibot.com>
Improve error handling for async wait operations in both RPC backends by catching system errors, ensuring robustness against unexpected cancellations. This change addresses potential crashes and enhances stability during RPC service registration.
* Optimize reconnection steps.
* Using condition variables to establish a connection with the broker.
* use aimrt's light_signal
* add condition variable for channel and rpc
* Change the notify timing to the start phase
* Remove redundancy
* Modify the timing of the sleep call
---------
Co-authored-by: hanjun <hanjun@agibot.com>