{"id":31021369,"url":"https://github.com/sisl/constructionbots.jl","last_synced_at":"2025-09-13T11:20:56.516Z","repository":{"id":203924717,"uuid":"328092806","full_name":"sisl/ConstructionBots.jl","owner":"sisl","description":"An open-source multi-robot manufacturing simulator designed to test algorithms for multi-robot assembly planning.","archived":false,"fork":false,"pushed_at":"2025-04-15T04:56:25.000Z","size":30308,"stargazers_count":15,"open_issues_count":8,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-09-07T16:53:46.817Z","etag":null,"topics":["multi-robot-planning","multi-robot-systems"],"latest_commit_sha":null,"homepage":"","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sisl.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,"zenodo":null}},"created_at":"2021-01-09T06:42:23.000Z","updated_at":"2025-05-30T11:10:27.000Z","dependencies_parsed_at":"2023-10-30T19:38:04.352Z","dependency_job_id":"66abab81-ab23-4413-b50d-6731a5331aff","html_url":"https://github.com/sisl/ConstructionBots.jl","commit_stats":null,"previous_names":["sisl/constructionbots.jl"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/sisl/ConstructionBots.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisl%2FConstructionBots.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisl%2FConstructionBots.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisl%2FConstructionBots.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisl%2FConstructionBots.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sisl","download_url":"https://codeload.github.com/sisl/ConstructionBots.jl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisl%2FConstructionBots.jl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274955746,"owners_count":25380669,"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","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["multi-robot-planning","multi-robot-systems"],"created_at":"2025-09-13T11:20:54.330Z","updated_at":"2025-09-13T11:20:56.480Z","avatar_url":"https://github.com/sisl.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ConstructionBots.jl\n\n[![Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://sisl.github.io/ConstructionBots.jl/stable)\n[![Build Status](https://github.com/sisl/ConstructionBots.jl/workflows/CI/badge.svg)](https://github.com/sisl/ConstructionBots.jl/actions)\n\n![ConstructionBots.jl Overivew](media/constructionbots_overviw.png)\n\n[arXiv paper](https://arxiv.org/abs/2311.00192)\n\nConstructionBots.jl is an open-source multi-robot manufacturing simulator and is designed to test algorithms for multi-robot assembly planning. This system approaches multi-robot assembly planning from a higher level of abstraction and addresses task planning and transit planning but abstracts away the kino-dynamic details of piecing together assemblies. Problems addressed and simulated:\n- **Trasport Team configuration:** How many robots are needed and how should robots be positioned when transporting a particular payload?\n- **Spatial layout of the construction site:** Where will each assembly be built, and where will the components of those assemblies be delivered?\n- **Sequential task allocation and team forming:** Which robots will collect and deliver which payloads? Wince there are generally far more payloads than robots, individual robots generally have to transport multiple payloads in sequence.\n- **Collision avoidance with heterogeneous agent geometry and dynamics:** How must laden and unloaden robots and robot teams move, subject to motion constraints that depend on the payload size and team configuration, to avoid collision with other robots and the active construction sites in the environment?\n\nConstructionBots ueses LEGO models to evaluate algorithms. LEGO models offer a convenient framework for defining large assemblies that are often composed of smaller assemblies in addition to individual parts. ConstructionBots uses assemblies that are defined using the LDraw file specification, an open-source tool for describing LEGO bricks and models.\n\n## Hosted Demos to View the Functionality of ConstructionBots\n| Project | Allocation Algorithm | RVO | Dispersion  | Tangent Bug | Visualization |\n| --- | :---: | :---: | :---: | :---: | :---: |\n| Tractor | Greedy | Yes | Yes | Yes | [Link](https://sisl.github.io/ConstructionBots.jl/stable/tractor_greedy_RVO_Dispersion_TangentBug_visualization.html) |\n| Tractor | MILP | Yes | Yes | Yes | [Link](https://sisl.github.io/ConstructionBots.jl/stable/tractor_milp_RVO_Dispersion_TangentBug_visualization.html) |\n| AT-TE Walker  | MILP + Greedy | Yes | Yes | Yes | [Link](https://sisl.github.io/ConstructionBots.jl/stable/atte-walker_milp-ws_RVO_Dispersion_TangentBug_visualization.html) |\n| X-Wing  | Greedy | No | No | No | [Link](https://sisl.github.io/ConstructionBots.jl/stable/x-wing_greedy_no-RVO_no-Dispersion_no-TangentBug_visualization.html) |\n| Saturn V  | Greedy | Yes | Yes | Yes | [Link](https://www.youtube.com/watch?v=1hJD7NCfjZU) |\n\n#### Saturn V (RVO + Dispersion + Tangent Bug) Video\n[![Saturn V demo](https://img.youtube.com/vi/1hJD7NCfjZU/0.jpg)](https://www.youtube.com/watch?v=1hJD7NCfjZU)\n\n## Installation\n\n### ConstructionBots\nTo interact with ConstrucitonBots, it is recommended you clone this repository and instantiate the environment.\n```bash\ngit clone https://github.com/sisl/ConstructionBots.jl.git\ncd ConstructionBots.jl\njulia\n```\n```julia\njulia\u003e ] activate .\npkg\u003e instantiate\npkg\u003e build\n```\n\n### LDraw Parts Library\nIndividual part geometry is needed for all features. The parts library can be downloaded from [LDraw™ Parts Library](https://library.ldraw.org/updates?latest). Place the unzipped library in your desired path. The default path assumed by LDrawParser is `joinpath(homedir(), \"Documents/ldraw\")`. It is recommended to download the complete library (~80 MB zipped, ~450 MB unzipped). If you did not place the parts library in the default path, you can change the path LDrawParser uses by the `set_part_library_dir!` command.\n\n### RVO\nThe RVO2 library is used for collision avoidance. ConstructionBots uses a Python API to interact with RVO2 library. The modified version of RVO2 that integrates dynamic priorities can be found at https://github.com/sisl/Python-RVO2.\n\nTo install the RVO2 library:\n```bash\nconda create -n lego_rvo2 python=3.7 anaconda\nconda activate lego_rvo2\nconda install pip\npip install cython==0.29.36\ngit clone https://github.com/sisl/Python-RVO2.git\ncd Python-RVO2\npython setup.py build\npython setup.py install\n```\nOnce you have the RVO2 library built, you need to set the path to the appropriate environment for PyCall to find the RVO2 library. In the Julia REPL, run the following:\n```julia\njulia\u003e ENV[\"PYTHON\"] = \"path/to/lego_rvo2/bin/python3.7\" # e.g. ~/miniconda3/envs/lego_rvo2/bin/python3.7\njulia\u003e using Pkg\njulia\u003e Pkg.build(\"PyCall\")\n```\n\nRestart Julia and run the following to test the installation of the RVO2 library:\n```julia\njulia\u003e using PyCall\njulia\u003e rvo = pyimport(\"rvo2\")\n```\n\nNote: In the current build of ConstructionBots, this step is still required even if you do not plan to use RVO.\n\n## Usage\nThis repository comes with demos to demonstrate the functionality of ConstructionBots. To run the demos, run the following in the Julia REPL:\n```julia\njulia\u003e include(\"scripts/demos.jl\")\n```\nThe default demo is the a Tractor based on LEGO model 10708, Green Creativity Box. The tractor model has a total of 20 individual pieces, which are organized into one final assembly (the tractor) and seven subassemblies. The demo is configured to use 10 robots to assemble the tractor. The collision avoidance algorithms are not used and it should open an interative visualization of the assembly process in your brower. The demo can be configured by changing the parameters in [`demos.jl`](https://github.com/sisl/ConstructionBots.jl/blob/master/scripts/demos.jl). Examples of the simulation are shown below.\nYou can interact with an example from the tractor simulation [here](https://sisl.github.io/ConstructionBots.jl/stable/tractor_greedy_RVO_Dispersion_TangentBug_visualization.html).\nThe main function for the demo is [`run_tractor_demo`](https://github.com/sisl/ConstructionBots.jl/blob/c7dcb3baabc437cfccd12e8ccc777e1561e9bf3b/src/full_demo.jl#L48) in [`full_demo.jl`](https://github.com/sisl/ConstructionBots.jl/blob/master/src/full_demo.jl).\n\nIf the demo setting `update_anim_at_every_step` is not set to `true`, then the animation will only update at the completion of nodes in the schedule. This setting results in faster processing times for the animation, but results in entities taking straight paths between updates. Therefore, it appears that collisions occur between entities. If collision avoidance is enabled and you want to see the collision avoidance in action (with no missed steps), set `update_anim_at_every_step` to `true`. Changing this setting increases processing time quite a bit.\n\n### Images from the Tractor Project\n![Tractor Project a](media/tractor_demo_a.png)\n\n![Tractor Project b](media/tractor_demo_b.png)\n\n![Tractor Project c](media/tractor_demo_c.png)\n\n![Tractor Project d](media/tractor_demo_d.png)\n\n## Citation\nUnder review\n\n[arXiv paper](https://arxiv.org/abs/2311.00192)\n\n```\n@article{Brown2023Assembly},\ntitle = {Large-Scale Multi-Robot Assembly Planning for Autonomous Manufacturing},\nauthor = {Kyle Brown and Dylan M. Asmar and Mac Schwager and Mykel J. Kochenderfer},\njournal = {arXiv preprint arXiv:2311.00192},\nyear = {2023}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsisl%2Fconstructionbots.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsisl%2Fconstructionbots.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsisl%2Fconstructionbots.jl/lists"}