{"id":23911894,"url":"https://github.com/maxfleur/ros2_utils_tool","last_synced_at":"2025-04-08T04:16:57.629Z","repository":{"id":270988475,"uuid":"911948875","full_name":"MaxFleur/ros2_utils_tool","owner":"MaxFleur","description":"A simple, but powerful UI toolset for various ROS2 utilities, with additional partial CLI support. ","archived":false,"fork":false,"pushed_at":"2025-04-04T13:37:21.000Z","size":644,"stargazers_count":70,"open_issues_count":0,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-04T14:32:57.156Z","etag":null,"topics":["catch2","cpp","cpp20","ros2","ros2-humble","ros2-jazzy"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"eupl-1.2","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MaxFleur.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-04T09:25:38.000Z","updated_at":"2025-04-04T10:47:36.000Z","dependencies_parsed_at":"2025-01-04T16:21:39.856Z","dependency_job_id":"3de89b17-ef4e-4102-9503-44bbef2bd738","html_url":"https://github.com/MaxFleur/ros2_utils_tool","commit_stats":null,"previous_names":["maxfleur/ros2_utils_tool"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxFleur%2Fros2_utils_tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxFleur%2Fros2_utils_tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxFleur%2Fros2_utils_tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaxFleur%2Fros2_utils_tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MaxFleur","download_url":"https://codeload.github.com/MaxFleur/ros2_utils_tool/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247773721,"owners_count":20993639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["catch2","cpp","cpp20","ros2","ros2-humble","ros2-jazzy"],"created_at":"2025-01-05T08:32:15.866Z","updated_at":"2025-04-08T04:16:57.623Z","avatar_url":"https://github.com/MaxFleur.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n   ![License badge](https://img.shields.io/badge/License-EUPLv1.2-blue.svg)\n   ![C++ badge](https://img.shields.io/badge/C++-20-blue.svg)\n   ![CI Ubuntu badge](https://github.com/MaxFleur/ros2_utils_tool/actions/workflows/humble.yml/badge.svg?event=push)\n   ![CI Windows badge](https://github.com/MaxFleur/ros2_utils_tool/actions/workflows/jazzy.yml/badge.svg?event=push)\n   ![Tag badge](https://img.shields.io/badge/Release-v0.10.0-blue.svg)\n\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"400\" height=\"480\" src=\"https://github.com/user-attachments/assets/0f493a2a-d409-49bc-8ca5-b98665f7be3a\"\u003e\n  \u003cimg width=\"360\" height=\"480\" src=\"https://github.com/user-attachments/assets/53659e06-e993-4460-8237-cf6e73248d67\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"760\" height=\"130\" src=\"https://github.com/user-attachments/assets/b34534c8-c751-4fec-b58e-0643ea0b7f3f\"\u003e\n\u003c/p\u003e\n\n# Overview\n\nThe ros2_utils_tool package provides a complete UI-based tool for the everyday-usage of ROS2 with additional CLI support. As of now, the tool provides the following functionalities:\n\n| Tool  | Description | UI support | CLI support |\n|-------|-------------|:----------:|:-----------:|\n| Bag to Video | Export a ROS bag video topic to a video |  X  |  X  |\n| Video to Bag | Port a video file to a ROS bag |  X  |  X  |\n| Bag to PCDs | Export a ROS bag point cloud topic to a set of pcd files  |  X  |  X  |\n| PCDs to Bag | Port a set of PCD files to a ROS bag  |  X  |  X  |\n| Bag to Images | Export a ROS bag video topic to an image sequence |  X  |  X  |\n| Edit Bag | Rename, remove or crop topics in a ROS bag |  X  |    |\n| Merge Bags | Merge selected topics of two bags in a new ROS bag |  X  |  X  |\n| Dummy Bag | Create a ROS bag with dummy data |  X  |  X  |\n| UI-based Bag Info | UI-supported bag info vis |  X  | (X) (`ros2 bag info`) |\n| Compress Bag | Compress a bag file |  X  |  X  |\n| Decompress Bag | Decompress a bag file |  X  |  X  |\n| Video as ROS Topic | Publish a video file as a ROS image_msg topic |  X  |  X  |\n| Image Sequence as ROS Topic | Publish a file with images as ROS image_msg Topic |  X  |  X  |\n\nNOTE: The package is still under active development, so more tools might be added later in the future. Additionally, already existing features might expand and change constantly.\n\n## Installation\n\n### Dependencies\n\nThe following packages are required to be installed manually:\n- [ROS2](https://docs.ros.org/en/jazzy/index.html), both version **humble** and **jazzy** are supported.\n- [Qt6/Qt5](https://doc.qt.io/) for all UI as well as some convenience functionalities.\n- [catch2_ROS](https://index.ros.org/p/catch_ros2/) for Catch2-based unit tests with ROS2.\n\nThe following packages are also required, but should be installed automatically with ROS:\n- [OpenCV](https://opencv.org/) for writing video files.\n- [cv_bridge](https://index.ros.org/p/cv_bridge/) for converting ROS sensor images to cv matrices and vice versa.\n- [PCL](https://pointclouds.org/) for creating point clouds and converting them from and to ROS messages.\n\nThe following packages are optional:\n- [uncrustify](https://github.com/uncrustify/uncrustify) for code formatting.\n\nAll dependencies aside from ROS2 can be installed at once using the following command:\n\n**Humble**:\\\n`sudo apt install libopencv-dev ros-humble-cv-bridge libpcl-dev qt6-base-dev qtbase5-dev ros-humble-catch-ros2`\n\n**Jazzy**:\\\n`sudo apt install libopencv-dev ros-jazzy-cv-bridge libpcl-dev qt6-base-dev qtbase5-dev ros-jazzy-catch-ros2`\n\nAlternatively, use `rosdep` to install all dependencies.\n\n### Build the tool\n\n1. Navigate to your ROS2 workspace's src direction:\n```\ncd path/to/your/workspace/src\n```\n\n2. Clone this repository:\n```\ngit clone https://github.com/MaxFleur/ros2_utils_tool.git\n```\n\n3. Navigate back to your workspace:\n```\ncd path/to/your/workspace/\n```\n\n4. Build the project and source it:\n```\ncolcon build\nsource install/setup.bash\n```\n\n## Usage\n\n**Full UI**:\n```\nros2 run ros2_utils_tool tool_ui\n```\n\n**Bag-to-Video-Tool**:\n```\nros2 run ros2_utils_tool tool_bag_to_video /path/to/bag /path/to/video\n```\n(Note that a topic can be specified optionally. If no topic is specified, the first available video topic is used. The video needs to have an .mp4 or .mkv appendix).\n\n**Video-to-Bag-Tool**:\n```\nros2 run ros2_utils_tool tool_video_to_bag /path/to/video /path/to/bag\n```\n(Note that a topic can be specified optionally. If no topic is specified, a predefined topic name will be taken. The video needs to have an .mp4 or .mkv appendix).\n\n**Bag-to-PCDs-Tool**:\n```\nros2 run ros2_utils_tool tool_bag_to_pcds /path/to/bag /path/to/pcds\n```\n(Note that a topic can be specified optionally. If no topic is specified, the first available point cloud topic is used).\n\n**PCDs-to-Bag-Tool**:\n```\nros2 run ros2_utils_tool tool_bag_to_pcds /path/to/pcds /path/to/bag\n```\n(Note that a topic can be specified optionally. If no topic is specified, a predefined topic name will be taken).\n\n**Bag-to-Images-Tool**:\n```\nros2 run ros2_utils_tool tool_bag_to_images /path/to/bag /path/to/images\n```\n(Note that a topic can be specified optionally. If no topic is specified, the first available video topic is used. `image_format` needs to be either `jpg`, `bmp` or `png`, jpg is default).\n\n**Merge-Bags-Tool**:\n```\nros2 run ros2_utils_tool tool_merge_bags path/to/first_bag path/to/second_bag -t1 topic_name_1 (...) -t2 topic_name_2 (...) path/to/output_bag\n```\n\n**Dummy-Bag-Tool**:\n```\nros2 run ros2_utils_tool tool_dummy_bag path/to/bag topic_type_1 topic_name_1 ... message_count\n```\n(Topic type needs to be `String`, `Integer`, `Image` or `PointCloud`, up to four topics can be written, `message_count` needs to be a value from 1 to 1000).\n\n**Compress-Bag-Tool**:\n```\nros2 run mediassist4_ros_tools tool_compress_bag path/to/uncompressed/source/bag /path/to/compressed/target/bag\n```\n(Compression per file is default, use `-m message` to compress per message).\n\n**Decompress-Bag-Tool**:\n```\nros2 run mediassist4_ros_tools tool_decompress_bag path/to/compressed/source/bag /path/to/uncompressed/target/bag\n```\n\n**Publish-Video-Tool**:\n```\nros2 run ros2_utils_tool tool_publish_video path/to/video\n```\n(Note that a topic can be specified optionally. If no topic is specified, a predefined topic name will be taken. The video needs to have an .mp4 or .mkv appendix).\n\n**Publish-Images-Tool**:\n```\nros2 run ros2_utils_tool tool_publish_images path/to/images\n```\n(Note that a topic can be specified optionally. If no topic is specified, a predefined topic name will be taken. Images need to be of format `jpg`, `bmp` or `png`).\n\n**Unit tests**:\n```\nros2 run ros2_utils_tool tool_tests\n```\n\n## License\n\nThe ros2_utils_tool package is licensed under [EUPLv1.2](https://interoperable-europe.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt).\n\n## Contribution \n\nIf you discover a new bug or wish for a new feature, feel free to open a new issue.\\\nIf you want to contribute another feature, please use the provided Uncrustify file for code formatting. As the `main` branch is only updated for new versions or critical bugfixes, the `develop` branch is the most current one, providing the newest updates and features. So please open a merge request with `develop` as the target branch.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxfleur%2Fros2_utils_tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxfleur%2Fros2_utils_tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxfleur%2Fros2_utils_tool/lists"}