Skip to content

feat: introduce webots demo package for rust robonix framework#16

Open
enkerewpo wants to merge 61 commits intomainfrom
dev/rust
Open

feat: introduce webots demo package for rust robonix framework#16
enkerewpo wants to merge 61 commits intomainfrom
dev/rust

Conversation

@enkerewpo
Copy link
Member

@enkerewpo enkerewpo commented Jan 4, 2026

  1. add example webots package
  2. add Qwen-VL and Deepseek agent as map service impl
  3. refactor robonix-core modules
  4. add performance profiling and testing framework under tools

- Added a new webots demo package with various scripts for controlling a mobile robot.
- Implemented demo service provider with semantic map and task planning services.
- Updated demo recipe to reflect new package names and services.
- Adjusted file permissions for several scripts to ensure proper execution.
- Included necessary configuration files and documentation for the new package.
- Introduced a web-based management interface for robonix-core, allowing real-time monitoring and control.
- Implemented a TF monitor to parse and visualize the ROS2 TF tree data.
- Added logging functionality with a buffer to capture and display logs in the web GUI.
- Updated the main application to initialize the web GUI and handle web server tasks.
- Enhanced the existing Rust modules with new dependencies and improved structure for better maintainability.
- Renamed demo service from `demo_service` to `demo_service_provider` for clarity.
- Updated `.env.example` to include new API keys for Qwen3-VL and DeepSeek services.
- Added `.gitignore` to exclude unnecessary files and directories.
- Enhanced `README.md` with detailed service descriptions and configuration instructions.
- Improved `setup.py` to include additional dependencies for image processing and API interaction.
- Refactored `semantic_map_service.py` to implement real object detection using Qwen3-VL and front camera integration.
- Added test scripts for ping service and querying primitives to ensure functionality.
- Cleaned up startup scripts for better readability and efficiency.
change to String fixes everything
Add preferred and alternative RUST_LOG configurations for robonix-core
- Introduced an Image Monitor module to track and store images from ROS2 topics.
- Updated web GUI to display image topics and allow image retrieval.
- Enhanced existing scripts and configurations for better integration with the new image monitoring feature.
- Improved error handling and logging for image processing tasks.
- Updated dependencies in Cargo.toml and Cargo.lock to support new functionalities.
- Commented out build commands in the test script for clarity.
- Improved service call methods in DaemonRos2Clients to include retry logic and service discovery waiting.
- Enhanced error messages for service call timeouts and failures to guide users in troubleshooting.
- Updated QoS settings for service clients to ensure compatibility with robonix-core.
- Added bash completion support in the Docker entrypoint script.
- Updated Dockerfile to include bash-completion and fonts-lmodern.
- Enhanced Rust Makefile with new test commands for stress testing and benchmarking.
- Introduced new test scripts for querying primitives and ping service load testing.
- Updated README and .gitignore files to reflect new test framework structure and ignore unnecessary files.
- Improved logging and error handling in test scripts for better diagnostics.
@enkerewpo enkerewpo requested a review from Copilot January 12, 2026 10:54
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a comprehensive test framework and web GUI for the Robonix framework, along with modular reorganization of the codebase and integration of a Webots demo package for simulation.

Changes:

  • Added a multi-language test framework (Rust, Python, C++) for stress testing ROS2 service performance
  • Introduced a web-based GUI for monitoring and managing Robonix core components
  • Reorganized codebase into modular directories (perception, cognition, action) with separate specification files
  • Added Webots simulation demo package for RangerMiniV3 robot

Reviewed changes

Copilot reviewed 122 out of 158 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
rust/tools/test_framework/* Stress test framework with benchmark reporting and visualization
rust/robonix-core/web_gui/* Web GUI with static assets (HTML, CSS, JS) for system monitoring
rust/robonix-core/src/web_gui.rs Web server implementation with REST API endpoints
rust/robonix-core/src/perception/* Perception module with TF, topic, and image monitoring
rust/robonix-core/src/cognition/* Cognition module with task planning specs
rust/robonix-core/src/action/* Action module with skill library and motion specs
rust/provider/webots_demo_package/* Webots simulation package for RangerMiniV3 robot
rust/robonix-core/src/main.rs Updated main to initialize web GUI and monitoring components
rust/robonix-core/src/service/mod.rs Changed metadata storage from JSON value to string

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

skill_id: String::new(),
};
}
if serde_json::from_str::<serde_json::Value>(&req.metadata).is_err() {
Copy link

Copilot AI Jan 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error from JSON parsing is discarded. Consider logging the actual parse error for debugging purposes, similar to how it was done in the original code (lines 71-72 show the pattern).

Copilot uses AI. Check for mistakes.
- Commented out the build command in `start_robot.sh` and replaced it with a call to `./rbnx/build.sh`.
- Updated logging levels in `four_wheel_steering_controller.cpp` from DEBUG to INFO for improved clarity in odometry and command updates.
- Removed unused navigation and SLAM configuration files from the `setup.py` and deleted associated resource files.
- Adjusted mappings in `robot_launch.py` for better command and odometry topic handling.
- Enhanced `ros2_control.yml` parameters for the four-wheel steering controller to improve responsiveness and control limits.
- Cleaned up RViz configuration in `default.rviz` for better visualization management.
- Updated `start_robot.sh` to accept parameters for world, RViz, navigation, and RTAB-Map settings.
- Added new dependencies for RTAB-Map and navigation in `build.sh` and `package.xml`.
- Introduced a new `camera_info_publisher.py` to publish camera info for RGB and depth cameras.
- Modified `robot_launch.py` to integrate RTAB-Map nodes and camera info publisher.
- Removed obsolete `test_launch.py` and `tiago_bringup_webots.urdf` files to streamline the project structure.
- Adjusted RViz configuration for improved visualization and usability.
- Introduced `.gitignore` to exclude build artifacts.
- Added `build.sh` and `run.sh` scripts for building and launching the ROS2 package.
- Created `description.yml` for package metadata.
- Implemented `rviz.config.rviz` for RViz visualization settings.
- Added `start_rviz.sh` to launch RViz with the specified configuration.
- Included initial files for `eaios_webots` package, including URDF, launch files, and configuration for navigation and control.
- Established basic structure for `nav2_webots_tiago` with configuration files for navigation and mapping.
…ities

- Added `tiago_demo_package` providing camera, depth, pose, and navigation primitives.
- Introduced `navigation_skills_provider` package with wandering and move_to_object skills.
- Updated `demo_recipe.yaml` to register new packages and their respective services and skills.
- Created necessary scripts for starting and stopping skills, including pose conversion and navigation.
- Enhanced RViz configuration for better visualization of the Tiago robot's capabilities.
- Implemented build scripts for both `tiago_demo_package` and `navigation_skills_provider` to streamline deployment.
…viders

- Refactored service names in `demo_recipe.yaml` and `rbnx_manifest.yaml` to include `srv::` prefix for consistency.
- Updated skill names in `navigation_skills_provider` to use `skl::` prefix, enhancing clarity in skill identification.
- Introduced `kill.sh` script for terminating processes related to the ROS2 environment.
- Enhanced `test_cli.sh` with additional task creation examples for better usability.
- Modified `move_to_object_skill.py` and `wandering_skill.py` to implement new service querying mechanisms and improved logging.
- Adjusted `package.xml` to remove unnecessary dependencies, streamlining the build process.
- Updated RViz configuration for improved visualization of the robot's capabilities.
- Added direct executable search for `move_to_object_skill` and `wandering_skill` in their respective scripts, enhancing execution reliability.
- Updated fallback mechanisms to prioritize executable paths before resorting to ROS2 commands and Python scripts.
- Removed the unused `std_msgs` module and its references from the project, streamlining the codebase.
- Enhanced logging for skill execution to provide clearer feedback during runtime.
…port

- Introduced a new function to set thread real-time priority using SCHED_FIFO for improved responsiveness.
- Refactored core API handlers to run on dedicated high-priority threads, ensuring better performance during service requests.
- Added `libc` dependency to facilitate real-time scheduling on Linux.
- Updated logging to provide feedback on thread priority settings and potential issues.
- Added a new `StdString` struct to represent string messages in ROS2, implementing the `Message` trait for compatibility.
- Updated `RtdlExecutor` to utilize `StdString` for publishing and subscribing to messages, enhancing type safety and clarity in message handling.
- Modified message handling logic to access the string data directly from the new struct.
- Modified `demo_recipe.yaml` to require AMCL for pose primitives and updated package references to use `prm::base.pose.amcl`.
- Enhanced `README.md` with updated process cleanup commands for ROS2.
- Updated `test_cli.sh` to streamline deployment and log management.
- Improved `semantic_map_service.py` to handle robot pose updates using `PoseWithCovarianceStamped` and added logic for querying pose primitives.
- Refactored `task_plan_service.py` to correct RTDL terminology and ensure consistency.
- Introduced new scripts for starting and stopping the AMCL pose primitive, removing the need for a separate pose converter.
- Enhanced web GUI with a 2D semantic map view for better visualization of detected objects.
…ripts

- Updated `process.rs` to enforce FastDDS for all started processes.
- Enhanced `status.rs` to convert recipe paths to absolute paths for better clarity.
- Modified shell scripts (`test_ping.sh`, `test_query_primitive.sh`, `test_task.sh`) to set and display FastDDS as the DDS implementation for ROS2 CLI tools.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Updated `Cargo.toml` and `Cargo.lock` to include new dependencies such as `aws-lc-rs`, `aws-lc-sys`, and `cesu8`, while also upgrading existing dependencies like `clap`, `reqwest`, and `tokio`.
- Introduced a new `config.rs` module for managing core configuration, allowing for loading and saving settings related to the agent.
- Enhanced the web interface with new settings page for agent configuration, including options for LLM provider, API key, and model settings.
- Improved agent interaction by implementing chat functionality and updating the web interface to support real-time communication with the agent.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Added a new SpeechConfig struct to manage speech-related settings, including access token, appkey, and region.
- Updated CoreConfig to include speech configuration, allowing for dynamic loading and saving of speech settings.
- Enhanced the web interface with a dedicated speech configuration section, enabling users to input and save speech-related parameters.
- Implemented TTS and STT services in the agent, allowing for text-to-speech and speech-to-text functionalities.
- Improved agent interaction by adding new handlers for TTS and STT requests, enhancing user experience.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Updated the configuration update handler to include a restart requirement message for users after successful updates.
- Improved the TTS service by adding validation for required fields and enhanced error handling for TTS requests, including detailed logging for success and failure cases.
- Modified the web interface to display appropriate status messages based on the configuration update results, including warnings for required restarts.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Replaced all instances of `prm::camera.capture` with `prm::camera.rgb` across various configuration files, scripts, and documentation to reflect the updated camera primitive naming.
- Adjusted logging messages and comments to ensure consistency with the new primitive name.
- Introduced a new clean command module in the CLI for managing log files.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Updated all instances of `prm::base.pose.amcl` to `prm::base.pose.cov` across various configuration files, scripts, and documentation to reflect the new naming convention for the pose primitive.
- Adjusted logging messages and comments to ensure consistency with the updated primitive name.
- Configured CAN interfaces in `init.sh` for improved network setup.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Changed version from `0.0.1-impl-alpha` to `0.0.1` in `rbnx_manifest.yaml` for demo package.
- Updated maintainer details from `root` to `wheatfox` and changed email to `wheatfox17@icloud.com` in `rbnx_manifest.yaml` for demo_service and navigation_skills packages.
- Added a new text-to-speech primitive in `specs.rs` to enhance functionality.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Deleted the `deploy.sh` script, `Makefile`, and various documentation files including `README.md`, `conf.py`, and API references to streamline the project structure.
- Removed unused images and CSS files from the documentation directory.
- Cleaned up the source directory by eliminating obsolete API and example files.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
…and configuration handling

- Added logging functionality to `start_move_to_object.sh` and `start_wandering.sh` for better debugging and tracking of script execution.
- Improved handling of the `ROBONIX_SDK_PATH` configuration by checking for the path in the user's home directory and logging relevant messages.
- Updated the scripts to prefer a source layout when the skill module exists, enhancing the execution process for both skills.
- Included error handling to provide clear feedback when required files are missing.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Enhanced error logging in `move_to_object_skill.py` and `wandering_skill.py` by formatting log messages for better readability.
- Adjusted the structure of several log messages to maintain consistency and improve clarity.
- Ensured that status publishing messages are also formatted for better alignment.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
…map service

- Added functionality to load manual objects from a YAML configuration file in `semantic_map_service.py`, enhancing the semantic map capabilities.
- Introduced error handling and logging for the loading process, ensuring clear feedback on the status of manual object loading.
- Updated the object creation logic to support manual object definitions, including frame mappings and bounding boxes.
- Created a new YAML configuration file `semantic_map_config.yaml` to define manual objects with their respective properties.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Enhanced the `rust/README.md` with detailed instructions for starting `robonix-core`, emphasizing the use of environment variables and the web UI.
- Clarified the role of standard services in task execution and updated the RTDL format section to specify list-form RTDL support.
- Added a new `tiago_demo_package/README.md` to guide users on starting the Tiago simulator and related services.
- Revised `service_load_test/README.md` to reflect the correct procedure for starting `robonix-core` and introduced the option to use `./core.sh` for background execution.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Added instructions for verifying package installation and building the `tiago_demo_package` using `rbnx package build`.
- Improved clarity on the prerequisites for starting the simulator and related services.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Introduced `CallCancelTask` command and `CancelTaskResponse` in the daemon client to handle task cancellation requests.
- Implemented `cancel_task` method in the `TaskManager` to update task states and remove tasks from the queue if necessary.
- Added a new API endpoint for cancelling tasks and integrated it into the web interface with a confirmation modal.
- Enhanced the `TaskClient` to support cancellation requests and updated the front-end to allow users to cancel tasks interactively.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Introduced a new README.md for the Robonix Test Framework, detailing test and benchmark utilities for comparing ROS2 client implementations.
- Added benchmark results from a recent test run, including a summary table and latency/failure rate comparisons.
- Included detailed logs and JSON reports for various test configurations, enhancing the framework's documentation and usability.
- Updated .gitignore to preserve specific benchmark logs while ignoring others.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Introduced `cli.sh` for managing the Robonix daemon, including build, deployment, and logging setup.
- Added `dev_setup.sh` for initializing the development environment, including SDK configuration and package installation.
- Updated `test_cli.sh` to include daemon stop command for cleaner test execution.
- Enhanced `test_core.sh` cleanup function for improved process termination and logging.
- Modified `README.md` in demo_service to reflect API key changes and service configurations.
- Updated `rbnx_manifest.yaml` to include new start script parameters for semantic map service.
- Added new YAML configuration files for manual object definitions in semantic mapping.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Improved the cleanup function in `core.sh` and `test_core.sh` to ensure more reliable termination of the `robonix-core` process.
- Added detailed logging to track the process IDs being killed and confirm successful cleanup.
- Implemented signal traps for SIGINT and SIGTERM to handle interruptions gracefully.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Added support for skill cancellation in `move_to_object_skill.py` and `wandering_skill.py`, allowing skills to respond to termination requests from Robonix.
- Introduced `_cancel_requested` flag to manage cancellation state and updated the subscription QoS settings for navigate status.
- Enhanced logging to provide feedback on skill termination and navigation completion status.
- Updated the task management system to publish termination messages to the skill's start topic when a task is cancelled.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Updated `init.sh` to enable CAN interface configuration.
- Added environment variable export for RMW implementation in `core.sh`.
- Refined `kill.sh` to improve process termination handling for navigation and image monitoring components.
- Modified `.env.example` to adjust semantic map update interval and introduce thresholds for pose and image skipping.
- Enhanced `semantic_map_service.py` to implement logic for skipping VLM calls when pose or image data is unchanged, optimizing token usage.
- Updated web interface to display hidden image topics and improve image monitor functionality.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Introduced a new `TransformScan` service to convert point clouds to LaserScan format, supporting both single-call and streaming operations.
- Updated `package.xml` to include dependencies for `sensor_msgs` and `sensor_msgs_py`.
- Modified `rbnx_manifest.yaml` to add the new service and its associated start/stop scripts.
- Created `transform_scan_service.py` to implement the service logic, including handling for conversion and streaming.
- Added new shell scripts for starting and stopping the transform scan service.
- Included a new YAML configuration file for demo map settings.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Introduced a new Python script `forward_prim_test.py` to facilitate testing of forward navigation primitives.
- Implemented functionality to query schemas, publish navigation goals, and monitor arrival conditions based on position and orientation tolerances.
- Integrated ROS 2 components for service interaction and message handling, enhancing the testing framework for navigation tasks.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Changed the start script for the semantic map service in `rbnx_manifest.yaml` to use `building_map_config.yaml`.
- Updated file permissions for several shell scripts (`start_transform_scan.sh`, `stop_semantic_map.sh`, `stop_task_plan.sh`, `stop_transform_scan.sh`) to make them executable.
- Refactored the node creation logic in `node.rs` to support two separate ROS2 nodes for improved task management and responsiveness.
- Enhanced the main application logic in `main.rs` to utilize the new node structure, ensuring that long-running tasks do not block API requests.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
- Added support for replacing the target object during an ongoing move operation, allowing for more dynamic navigation.
- Introduced a new flag `_target_replaced` to track when a target is updated.
- Updated logging to provide clearer feedback when a new target is received and the navigation status is updated accordingly.
- Refactored error handling in the `_move_operation` method to maintain functionality while querying the semantic map.

Signed-off-by: wheatfox <wheatfox17@icloud.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant