-
Notifications
You must be signed in to change notification settings - Fork 11
feat: introduce webots demo package for rust robonix framework #16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
- 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.
There was a problem hiding this 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.
| if metadata.get('requests'): parts.append(f"Reqs: {metadata['requests']}") | ||
| if metadata.get('rate'): parts.append(f"Rate: {metadata['rate']}Hz") | ||
| if metadata.get('duration'): parts.append(f"Dur: {metadata['duration']}s") |
Copilot
AI
Jan 12, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The metadata dictionary access could raise KeyError if the dictionary is malformed. Use .get() consistently with a default value or validate metadata structure before accessing.
| if metadata.get('requests'): parts.append(f"Reqs: {metadata['requests']}") | |
| if metadata.get('rate'): parts.append(f"Rate: {metadata['rate']}Hz") | |
| if metadata.get('duration'): parts.append(f"Dur: {metadata['duration']}s") | |
| requests = metadata.get('requests') | |
| if requests: | |
| parts.append(f"Reqs: {requests}") | |
| rate = metadata.get('rate') | |
| if rate: | |
| parts.append(f"Rate: {rate}Hz") | |
| duration = metadata.get('duration') | |
| if duration: | |
| parts.append(f"Dur: {duration}s") |
| let (r, g, b) = if encoding_lower == "bgr8" || encoding_lower == "8uc3" | ||
| { | ||
| (b, g, r) // Swap R and B for BGR | ||
| } else { | ||
| (r, g, b) | ||
| }; |
Copilot
AI
Jan 12, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The comment states '8uc3' is BGR format, but this encoding typically refers to 3-channel unsigned 8-bit format without specifying color order. Add documentation or a source reference explaining why 8uc3 is treated as BGR.
| skill_id: String::new(), | ||
| }; | ||
| } | ||
| if serde_json::from_str::<serde_json::Value>(&req.metadata).is_err() { |
Copilot
AI
Jan 12, 2026
There was a problem hiding this comment.
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).
tools