Skip to content

Conversation

@bburda
Copy link
Contributor

@bburda bburda commented Jan 29, 2026

Description

Major improvements to TurtleBot3 integration demo:

Core Features:

  • Add manifest-based entity discovery (SOVD hierarchy: Areas→Components→Apps→Functions)
  • Implement fault management via diagnostic_bridge + fault_manager
  • Add SQLite storage for persistent fault tracking
  • Support conditional headless/GUI Gazebo modes

Docker & Launch:

  • Fix Dockerfile: add ros2_medkit_fault_manager, fault_reporter, diagnostic_bridge packages
  • Add SQLite dependencies (sqlite3, libsqlite3-dev)
  • Update launch file: conditional Gazebo launch based on headless argument
  • Change default mode from headless to GUI for better UX
  • Add HEADLESS environment variable support in docker-compose.yml

Manifest & Configuration:

  • Add turtlebot3_manifest.yaml defining complete entity hierarchy
  • Configure 4 areas: robot, navigation, diagnostics, bridge
  • Define 6 components: turtlebot3-base, lidar-sensor, nav2-stack, gateway, fault-manager, diagnostic-bridge-unit
  • Define 11 apps with ROS node bindings and dependencies
  • Define 3 functions: autonomous-navigation, robot-control, fault-management

Shell Scripts:

  • Fix all app IDs: underscore format → hyphen format (bt_navigator → bt-navigator, etc.)
  • Add check-entities.sh: explore SOVD entity hierarchy
  • Add check-faults.sh: view active faults
  • Add inject-nav-failure.sh: trigger unreachable goal scenario
  • Add inject-localization-failure.sh: reset AMCL with high uncertainty
  • Add inject-controller-failure.sh: set restrictive velocity limits
  • Add inject-collision.sh: navigate toward obstacles
  • Add restore-normal.sh: restore defaults and clear faults
  • Update send-nav-goal.sh: use SOVD API instead of docker exec

Documentation:

  • Completely rewrite TurtleBot3 demo README with:
    • Clear GUI vs headless mode instructions
    • SOVD entity hierarchy explanation
    • Fault management architecture diagram
    • Fault injection scenarios table
    • Complete REST API examples for all endpoints
    • Scripts reference table

Testing:

  • All scripts verified working with GATEWAY_URL=http://172.19.0.2:8080
  • Navigation goals successfully executed via SOVD API
  • Fault injection scenarios tested
  • 23 components discovered, 0 initial faults confirmed
  • GUI and headless modes both tested and working

Related Issue

closes #9

Checklist

  • Tested locally
  • README updated (if needed)

…ment and GUI as default

Major improvements to TurtleBot3 integration demo:

Core Features:
- Add manifest-based entity discovery (SOVD hierarchy: Areas→Components→Apps→Functions)
- Implement fault management via diagnostic_bridge + fault_manager
- Add SQLite storage for persistent fault tracking
- Support conditional headless/GUI Gazebo modes

Docker & Launch:
- Fix Dockerfile: add ros2_medkit_fault_manager, fault_reporter, diagnostic_bridge packages
- Add SQLite dependencies (sqlite3, libsqlite3-dev)
- Update launch file: conditional Gazebo launch based on headless argument
- Change default mode from headless to GUI for better UX
- Add HEADLESS environment variable support in docker-compose.yml

Manifest & Configuration:
- Add turtlebot3_manifest.yaml defining complete entity hierarchy
- Configure 4 areas: robot, navigation, diagnostics, bridge
- Define 6 components: turtlebot3-base, lidar-sensor, nav2-stack, gateway, fault-manager, diagnostic-bridge-unit
- Define 11 apps with ROS node bindings and dependencies
- Define 3 functions: autonomous-navigation, robot-control, fault-management

Shell Scripts:
- Fix all app IDs: underscore format → hyphen format (bt_navigator → bt-navigator, etc.)
- Add check-entities.sh: explore SOVD entity hierarchy
- Add check-faults.sh: view active faults
- Add inject-nav-failure.sh: trigger unreachable goal scenario
- Add inject-localization-failure.sh: reset AMCL with high uncertainty
- Add inject-controller-failure.sh: set restrictive velocity limits
- Add inject-collision.sh: navigate toward obstacles
- Add restore-normal.sh: restore defaults and clear faults
- Update send-nav-goal.sh: use SOVD API instead of docker exec

Documentation:
- Completely rewrite TurtleBot3 demo README with:
  * Clear GUI vs headless mode instructions
  * SOVD entity hierarchy explanation
  * Fault management architecture diagram
  * Fault injection scenarios table
  * Complete REST API examples for all endpoints
  * Scripts reference table

Testing:
- All scripts verified working with GATEWAY_URL=http://172.19.0.2:8080
- Navigation goals successfully executed via SOVD API
- Fault injection scenarios tested
- 23 components discovered, 0 initial faults confirmed
- GUI and headless modes both tested and working
@bburda bburda requested a review from mfaferek93 January 29, 2026 16:24
@bburda bburda self-assigned this Jan 29, 2026
Copilot AI review requested due to automatic review settings January 29, 2026 16:24
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 significantly enhances the TurtleBot3 integration demo by adding complete SOVD-compliant entity discovery, fault management capabilities, and improved Docker deployment options with both GUI and headless Gazebo modes.

Changes:

  • Implemented manifest-based entity discovery with complete SOVD hierarchy (Areas → Components → Apps → Functions)
  • Added fault management system with diagnostic_bridge for legacy /diagnostics topic support and persistent SQLite storage
  • Introduced conditional Gazebo launch modes (GUI/headless) with default GUI mode for better user experience
  • Created comprehensive fault injection scripts and monitoring tools for testing fault scenarios
  • Updated all documentation with REST API examples, entity hierarchy explanations, and fault management architecture

Reviewed changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
send-nav-goal.sh Migrated from docker exec to SOVD API for navigation goals, added robust validation and error handling
run-demo.sh Added --headless flag with environment variable support for conditional Gazebo modes
restore-normal.sh New script to restore default parameters and clear all faults after testing scenarios
inject-nav-failure.sh New fault injection script for unreachable navigation goals
inject-localization-failure.sh New fault injection script triggering AMCL uncertainty via global relocalization
inject-controller-failure.sh New fault injection script setting restrictive velocity limits
inject-collision.sh New fault injection script navigating toward obstacles
check-faults.sh New script to query and display active faults from gateway
check-entities.sh New script to explore complete SOVD entity hierarchy
demo.launch.py Added conditional headless/GUI Gazebo launch, fault_manager and diagnostic_bridge nodes, manifest path configuration
turtlebot3_manifest.yaml New complete SOVD manifest defining 4 areas, 6 components, 11 apps, and 3 functions
medkit_params.yaml Updated with hybrid discovery mode, DELETE method in CORS, and manifest configuration
docker-compose.yml Added HEADLESS environment variable support, switched to pre-built sovd_web_ui image
Dockerfile Added SQLite dependencies and ros2_medkit fault management packages
README.md (root) Expanded overview with SOVD capabilities, added both demo quick starts, included API examples
README.md (turtlebot3) Complete rewrite with GUI/headless instructions, entity hierarchy documentation, fault injection scenarios, comprehensive API reference

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

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

Copilot reviewed 16 out of 16 changed files in this pull request and generated 8 comments.


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

- Fix app IDs in README (underscore → hyphen to match manifest)
- Add jq dependency check to shell scripts
- Remove depends_on from sovd-web-ui
- Remove unused PythonExpression import in launch file
- Fix misleading comment about spawn (headless mode only)
- Fix gz_args list construction for clarity
- Add missing exec_depend in package.xml
- Keep stderr visible in restore-normal.sh curl commands
- Remove unused YELLOW variable from check-entities.sh
- Add -r flag to read command in restore-normal.sh to handle backslashes properly
@mfaferek93 mfaferek93 self-requested a review January 30, 2026 19:02
@bburda bburda merged commit f49df15 into main Jan 30, 2026
2 checks passed
@bburda bburda deleted the feat/update-turtlebot-demo branch January 30, 2026 19:07
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.

Sync Turtlebot demo with ros2_medkit changes

3 participants