{"id":34519314,"url":"https://github.com/selfpatch/ros2_medkit","last_synced_at":"2026-02-13T17:24:11.751Z","repository":{"id":324788116,"uuid":"1098436077","full_name":"selfpatch/ros2_medkit","owner":"selfpatch","description":"ROS 2 Jazzy diagnostics and remote operations toolkit with SOVD style REST API. Runtime discovery, introspection, faults, secure access.","archived":false,"fork":false,"pushed_at":"2026-02-06T08:45:41.000Z","size":6006,"stargazers_count":36,"open_issues_count":23,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-06T13:39:33.616Z","etag":null,"topics":["diagnostics","edge","fleet","gateway","introspection","observability","rbac","remote-debugging","rest-api","robotics","ros2","ros2-diagnostics","ros2-medkit","sovd"],"latest_commit_sha":null,"homepage":"https://selfpatch.github.io/ros2_medkit/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/selfpatch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"docs/roadmap.rst","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-17T17:27:24.000Z","updated_at":"2026-02-05T01:28:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/selfpatch/ros2_medkit","commit_stats":null,"previous_names":["bburda/diagtree","bburda/ros2_diag_tree","bburda/ros2_medkit","selfpatch/ros2_medkit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/selfpatch/ros2_medkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selfpatch%2Fros2_medkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selfpatch%2Fros2_medkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selfpatch%2Fros2_medkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selfpatch%2Fros2_medkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/selfpatch","download_url":"https://codeload.github.com/selfpatch/ros2_medkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selfpatch%2Fros2_medkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29413093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diagnostics","edge","fleet","gateway","introspection","observability","rbac","remote-debugging","rest-api","robotics","ros2","ros2-diagnostics","ros2-medkit","sovd"],"created_at":"2025-12-24T04:28:03.064Z","updated_at":"2026-02-13T17:24:11.746Z","avatar_url":"https://github.com/selfpatch.png","language":"C++","funding_links":[],"categories":["Methods","ROS"],"sub_categories":["Libraries and Packages"],"readme":"# ros2_medkit\n\n[![CI](https://github.com/selfpatch/ros2_medkit/actions/workflows/ci.yml/badge.svg)](https://github.com/selfpatch/ros2_medkit/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/selfpatch/ros2_medkit/branch/main/graph/badge.svg)](https://codecov.io/gh/selfpatch/ros2_medkit)\n[![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://selfpatch.github.io/ros2_medkit/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![ROS 2](https://img.shields.io/badge/ROS%202-Jazzy-blue)](https://docs.ros.org/en/jazzy/)\n[![Discord](https://img.shields.io/badge/Discord-Join%20Us-7289DA?logo=discord\u0026logoColor=white)](https://discord.gg/6CXPMApAyq)\n[![Quality Level 3](https://img.shields.io/badge/Quality-Level%203-yellow)](QUALITY_DECLARATION.md)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"hero-full.gif\" alt=\"Robots break. Now you'll know why.\" width=\"600\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eAutomotive-grade diagnostics for ROS 2 robots.\u003c/b\u003e\u003cbr\u003e\n  When your robot fails, find out why — in minutes, not hours.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Fault correlation · Black-box recording · REST API · \u003ca href=\"https://github.com/selfpatch/ros2_medkit_mcp\"\u003eAI via MCP\u003c/a\u003e\n\u003c/p\u003e\n\n## 🚀 Quick Start\n\n**Try the full demo** (Docker, no ROS 2 needed):\n\n```bash\ngit clone https://github.com/selfpatch/selfpatch_demos.git\ncd selfpatch_demos/demos/turtlebot3_integration\n./run-demo.sh --headless\n# → API: http://localhost:8080/api/v1/  Web UI: http://localhost:3000\n```\n\n**Build from source** (ROS 2 Jazzy):\n\n```bash\ngit clone --recurse-submodules https://github.com/selfpatch/ros2_medkit.git\ncd ros2_medkit\nrosdep install --from-paths src --ignore-src -r -y\ncolcon build --symlink-install \u0026\u0026 source install/setup.bash\nros2 launch ros2_medkit_gateway gateway.launch.py\n# → http://localhost:8080/api/v1/areas\n```\n\nFor more examples, see our [Postman collection](postman/).\n\n## ✨ Features\n\n- **🔍 Runtime Discovery** — Automatically discover what is actually running on your robot\n- **🏗️ Entity Tree Model** — Organize diagnostics as Area → Component → Function → App\n- **🔗 SOVD Compatible** — Align with Service-Oriented Vehicle Diagnostics standards\n- **🌐 REST API Gateway** — HTTP interface for integration with external tools and UIs\n- **📊 Health Modeling** — Track health state per entity for fleet-level observability\n- **🔧 Easy Integration** — Works with existing ROS 2 Jazzy nodes out of the box\n\n## 📖 Overview\n\nros2_medkit models a robot as a **diagnostic entity tree**:\n\n| Entity | Description | Example |\n|--------|-------------|---------|\n| **Area** | Physical or logical domain | `base`, `arm`, `safety`, `navigation` |\n| **Component** | Hardware or software component within an area | `motor_controller`, `lidar_driver` |\n| **Function** | Capability provided by one or more components | `localization`, `obstacle_detection` |\n| **App** | Deployable software unit | node, container, process |\n\nCompatible with the **SOVD (Service-Oriented Vehicle Diagnostics)** model — same concepts across robots, vehicles, and embedded systems.\n\n## 📋 Requirements\n\n- **OS:** Ubuntu 24.04 LTS\n- **ROS 2:** Jazzy Jalisco\n- **Compiler:** GCC 13+ (C++17 support)\n- **Build System:** colcon + ament_cmake\n\n## 📚 Documentation\n\n- 📖 [Full Documentation](https://selfpatch.github.io/ros2_medkit/)\n- 🗺️ [Roadmap](https://selfpatch.github.io/ros2_medkit/roadmap.html)\n- 📋 [GitHub Milestones](https://github.com/selfpatch/ros2_medkit/milestones)\n\n## 💬 Community\n\nWe'd love to have you join our community!\n\n- **💬 Discord** — [Join our server](https://discord.gg/6CXPMApAyq) for discussions, help, and announcements\n- **🐛 Issues** — [Report bugs or request features](https://github.com/selfpatch/ros2_medkit/issues)\n- **💡 Discussions** — [GitHub Discussions](https://github.com/selfpatch/ros2_medkit/discussions) for Q\u0026A and ideas\n\n---\n\n## 🛠️ Development\n\nThis section is for contributors and developers who want to build and test ros2_medkit locally.\n\n### Pre-commit Hooks\n\nThis project uses [pre-commit](https://pre-commit.com/) to automatically run\n`clang-format`, `flake8`, and other checks on staged files before each commit.\n\n```bash\npip install pre-commit\npre-commit install\n```\n\nTo run all hooks against every file (useful after first setup):\n\n```bash\npre-commit run --all-files\n```\n\n### Installing Dependencies\n\n```bash\nrosdep install --from-paths src --ignore-src -r -y\n```\n\n### Building\n\n```bash\ncolcon build --symlink-install\n```\n\n### Testing\n\nRun all tests:\n\n```bash\nsource install/setup.bash\ncolcon test\ncolcon test-result --verbose\n```\n\nRun linters:\n\n```bash\nsource install/setup.bash\ncolcon test --ctest-args -L linters\ncolcon test-result --verbose\n```\n\nRun only unit tests (everything except integration):\n\n```bash\nsource install/setup.bash\ncolcon test --ctest-args -E test_integration\ncolcon test-result --verbose\n```\n\nRun only integration tests:\n\n```bash\nsource install/setup.bash\ncolcon test --ctest-args -R test_integration\ncolcon test-result --verbose\n```\n\n### Code Coverage\n\nTo generate code coverage reports locally:\n\n1. Build with coverage flags enabled:\n\n```bash\ncolcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=ON\n```\n\n2. Run tests:\n\n```bash\nsource install/setup.bash\ncolcon test --ctest-args -LE linter\n```\n\n3. Generate coverage report:\n\n```bash\nlcov --capture --directory build --output-file coverage.raw.info --ignore-errors mismatch,negative\nlcov --extract coverage.raw.info '*/ros2_medkit/src/*/src/*' '*/ros2_medkit/src/*/include/*' --output-file coverage.info --ignore-errors unused\nlcov --list coverage.info\n```\n\n4. (Optional) Generate HTML report:\n\n```bash\ngenhtml coverage.info --output-directory coverage_html\n```\n\nThen open `coverage_html/index.html` in your browser.\n\n### CI/CD\n\nAll pull requests and pushes to main are automatically built and tested using GitHub Actions.\nThe CI workflow runs on Ubuntu 24.04 with ROS 2 Jazzy and consists of two parallel jobs:\n\n**build-and-test:**\n\n- Code linting and formatting checks (clang-format, clang-tidy)\n- Unit tests and integration tests with demo automotive nodes\n\n**coverage:**\n\n- Builds with coverage instrumentation (Debug mode)\n- Runs unit tests only (for stable coverage metrics)\n- Generates lcov coverage report (available as artifact)\n- Uploads coverage to Codecov (only on push to main)\n\nAfter every run the workflow uploads test results and coverage reports as artifacts for debugging and review.\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Whether it's bug reports, feature requests, documentation improvements, or code contributions — we appreciate your help.\n\n1. Read our [Contributing Guidelines](CONTRIBUTING.md)\n2. Check out [good first issues](https://github.com/selfpatch/ros2_medkit/labels/good%20first%20issue) for beginners\n3. Follow our [Code of Conduct](CODE_OF_CONDUCT.md)\n\n## 🔒 Security\n\nIf you discover a security vulnerability, please follow the responsible disclosure process in [SECURITY.md](SECURITY.md).\n\n## 📄 License\n\nThis project is licensed under the **Apache License 2.0** — see the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cp align=\"center\"\u003e\n  Made with ❤️ by the \u003ca href=\"https://github.com/selfpatch\"\u003eselfpatch\u003c/a\u003e community\n  \u003cbr\u003e\n  \u003ca href=\"https://discord.gg/6CXPMApAyq\"\u003e💬 Join us on Discord\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselfpatch%2Fros2_medkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fselfpatch%2Fros2_medkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselfpatch%2Fros2_medkit/lists"}