{"id":30696027,"url":"https://github.com/lalywr2000/multi-robot_waam","last_synced_at":"2026-02-20T19:04:51.712Z","repository":{"id":307391072,"uuid":"1019256325","full_name":"lalywr2000/Multi-Robot_WAAM","owner":"lalywr2000","description":"Multi-Robot Wire Arc Additive Manufacturing","archived":false,"fork":false,"pushed_at":"2025-08-12T08:30:20.000Z","size":77118,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-09T03:17:47.065Z","etag":null,"topics":["3d-printing","additive-manufacturing","multi-robot","path-planning","robot","robotic-arm","robotics-simulation","scheduling","visualization","wire-arc-additive-manufacturing"],"latest_commit_sha":null,"homepage":"","language":"G-code","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/lalywr2000.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-14T03:52:36.000Z","updated_at":"2026-01-22T05:10:38.000Z","dependencies_parsed_at":"2025-10-14T11:07:18.640Z","dependency_job_id":"31cde34c-5ae7-406e-a29d-c5a5a32cbdc4","html_url":"https://github.com/lalywr2000/Multi-Robot_WAAM","commit_stats":null,"previous_names":["lalywr2000/kamic","lalywr2000/multi-robot_waam"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lalywr2000/Multi-Robot_WAAM","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lalywr2000%2FMulti-Robot_WAAM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lalywr2000%2FMulti-Robot_WAAM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lalywr2000%2FMulti-Robot_WAAM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lalywr2000%2FMulti-Robot_WAAM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lalywr2000","download_url":"https://codeload.github.com/lalywr2000/Multi-Robot_WAAM/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lalywr2000%2FMulti-Robot_WAAM/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29661585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T16:33:43.953Z","status":"ssl_error","status_checked_at":"2026-02-20T16:33:43.598Z","response_time":59,"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":["3d-printing","additive-manufacturing","multi-robot","path-planning","robot","robotic-arm","robotics-simulation","scheduling","visualization","wire-arc-additive-manufacturing"],"created_at":"2025-09-02T07:34:05.733Z","updated_at":"2026-02-20T19:04:51.678Z","avatar_url":"https://github.com/lalywr2000.png","language":"G-code","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multi-Robot WAAM Path Planning\n\n\u003cdiv width=\"100%\" align=\"center\"\u003e\n    \u003cimg width=\"32%\" src=\"/assets/nozzle_sim.gif\"\u003e\n    \u003cimg width=\"32%\" src=\"/assets/puzzle_sim.gif\"\u003e\n    \u003cimg width=\"32%\" src=\"/assets/square_sim.gif\"\u003e\n\u003c/div\u003e\n\n\u003cdiv width=\"100%\" align=\"center\"\u003e\n    \u003cimg width=\"32%\" src=\"/assets/nozzle_path.png\"\u003e\n    \u003cimg width=\"32%\" src=\"/assets/puzzle_path.png\"\u003e\n    \u003cimg width=\"32%\" src=\"/assets/square_path.png\"\u003e\n\u003c/div\u003e\n\n## Project Overview\n\nThis project focuses on path planning for multi-robot **Wire Arc Additive Manufacturing (WAAM)**. The system enables two or more industrial robots to collaboratively manufacture a single part by generating coordinated deposition paths.\n\nBy applying multi-robot systems to WAAM, manufacturing time can be significantly reduced through parallelized deposition, and large-scale part fabrication becomes feasible.\n\nThe key features of this implementation are as follows:\n\n- Integration of an efficient scheduling algorithm\n- Validation of robot accessibility (workspace reachability)\n- Implementation of dwelling time between layers\n- Visualization for planning validation\n- Synchronization mechanisms to coordinate robotic operations\n- Automatic RAPID code generation for simulation in ABB RobotStudio\n\n## Background \u0026 Reference\n\nMulti-robot WAAM was first successfully demonstrated by [Oak Ridge National Laboratory (ORNL)](https://www.sciencedirect.com/science/article/pii/S2772369023000634?ref=pdf_download\u0026fr=RR-2\u0026rr=96b4d22519d6e375), where they used three 6-axis ABB robots to fabricate large and complex parts. This project is built upon insights from ORNL’s open-source work on multi-robot additive manufacturing.\n\nIn particular, this project utilizes and extends functionality from [Pyrobopath](https://github.com/alexarbogast/pyrobopath), a Python package designed for demonstrating multi-robot path planning in additive manufacturing. Pyrobopath includes:\n\n- Centralized bead-level scheduling system\n- Data models and algorithms for paths, contours, events, and scheduling\n- Collision detection using [bounding box method](https://pyrobopath.readthedocs.io/en/latest/users/examples/python_examples.html) and the [python-fcl](https://github.com/BerkeleyAutomation/python-fcl) library\n\nFor more details, refer to the Pyrobopath repository and documentation.\n\n## Directory Structure\n\n```shell\n./\n ├── multi-robot.py   # Main code for path planning\n │\n ├── path/\n │   └── gcode/       # Location for .gcode path files\n │   └── manual/      # Location for .txt path files\n │        └── path_gen_script/   # Script for generating manual .txt paths\n │\n └── rapid_gen/       # Location for RAPID code output\n```\n\n## Requirements\n\nBefore running the program, ensure that the following prerequisites are installed:\n\n```bash\npip install numpy\npip install matplotlib\npip install gcodeparser\npip install pyrobopath\n```\n\nThis program has been developed and tested using Ubuntu 20.04 and Pyrobopath 0.2.8\n\n## Usage\n\nThe following shows how to run the examples included in the repository. First, clone the repository using the following command:\n\n```bash\ngit clone https://github.com/lalywr2000/Multi-Robot_WAAM.git\n```\n\nTo run individual examples, you need to configure the variables at the top of the `multi-robot.py` file as follows. \n\n| Example            | [nozzle](/assets/nozzle_sim.gif) | [puzzle](/assets/puzzle_sim.gif) | [square](/assets/square_sim.gif) |\n|:-------------------|:--------------------------------:|:--------------------------------:|:--------------------------------:|\n| GCODE_MODE         | False                            | False                            | True                             |\n| PREPROCESSING_MODE | False                            | True                             | True                             |\n| SCHEDULING_MODE    | True                             | True                             | True                             |\n| ALGORITHM_MODE     | 1                                | 1                                | 1                                |\n| GCODE_PATH         | N/A                              | N/A                              | path/gcode/square.gcode          |\n| MANUAL_PATH        | path/manual/nozzle.txt           | path/manual/puzzle.txt           | N/A                              |\n| ROBOT_REACHABLE_R  | 2500.0                           | 2500.0                           | 2500.0                           |\n| SUBSTRATE_SIZE     | 500.0                            | 500.0                            | 500.0                            |\n| MAX_CONTOUR_LENGTH | N/A                              | 300.0                            | 300.0                            |\n| DWELLING_TIME      | 0.0                              | 0.0                              | 0.0                              |\n\nAfter modifying and saving the changes, run the example using the following command:\n\n```bash\npython3 multi-robot.py\n```\n\n## ABB RobotStudio Validation with RAPID\n\n[RobotStudio](https://new.abb.com/products/robotics/software-and-digital/robotstudio) is ABB's commercial software, implemented in the RAPID code format, and supports simulation and Offline Programming (OLP). By utilizing this virtual test environment, it is possible to validate whether path following is feasible without collisions, considering the robot layout and the movement of joints. \n\n\u003cdiv width=\"100%\" align=\"center\"\u003e\n    \u003cimg width=\"51.2%\" src=\"/assets/robotstudio_sim.gif\"\u003e\n    \u003cimg width=\"48%\" src=\"/assets/robotstudio_img.png\"\u003e\n\u003c/div\u003e\n\nThe above example was tested using three IRB 4600-40/2.55 robots and a substrate measuring 500 mm × 500 mm.\n\nIn RobotStudio, the layout of the robot (position and orientation) and the substrate (size and location) must match those defined in the `multi-robot.py` code. Furthermore, the names of the robot model, tool (weld gun), and work object coordinate system must remain consistent and aligned with their respective RAPID code.\n\n### RAPID Code Generation\n\n```shell\nMODULE Module1\n    \u003c COPY \u0026 PASTE ROB1_target.txt HERE \u003e\n    CONST robtarget Target_1:=[[-50.0, 550.0, 600.0],[0,0,1,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];\n    CONST robtarget Target_2:=[[-49.03427708839263, 548.6479879237497, 594.234634217704],[0,0,1,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];\n    CONST robtarget Target_3:=[[-48.068554176785256, 547.2959758474993, 588.4692684354079],[0,0,1,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];\n    ...\n    ...\n    ...\n\n    VAR Syncident Sync1;\n    VAR Syncident Sync2;\n    PERS tasks all_tasks{3}:=[[\"T_ROB1\"],[\"T_ROB2\"],[\"T_ROB3\"]];\n\n    PROC mhome()\n        MoveL Target_1\\ID:=1,v500,fine,Weldgun_1\\WObj:=Workobject_1;\n    ENDPROC\n\n    PROC main()\n        ConfL\\Off;\n        ConfJ\\Off;\n        AccSet 100,100;\n\n        WaitSyncTask Sync1,all_tasks;\n        SyncMoveOn Sync2,all_tasks;\n        mhome;\n        SyncMoveOff Sync2;\n\n        \u003c COPY \u0026 PASTE ROB1_move.txt HERE \u003e\n        MoveL Target_1,v300,fine,Weldgun_1\\WObj:=Workobject_1;\n        MoveL Target_2,v300,z0,Weldgun_1\\WObj:=Workobject_1;\n        MoveL Target_3,v300,z0,Weldgun_1\\WObj:=Workobject_1;\n        ...\n        ...\n        ...\n    ENDPROC\nENDMODULE\n```\n\n## Future Work\n\n**1. Offline to Online Planning**\n\nDevelop a seamless workflow to transition from offline simulation to real-time online execution, ensuring smooth deployment on physical systems.\n\n**2. Minimize Build Time**\n\nFormulate and solve an optimization problem aimed at reducing total build time while maintaining process quality.\n\n**3. Considering Heat Leveling**\n\nIncorporate thermal distribution analysis into the planning stage to achieve uniform heat leveling and reduce material distortion.\n\n**4. Digital Twin**\n\nImplement a digital twin of the manufacturing environment for real-time monitoring, predictive maintenance, and enhanced simulation accuracy.\n\n**5. Further Optimization of Scheduling Algorithms**\n\nRefine and enhance scheduling algorithms to achieve even greater operational efficiency and throughput.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flalywr2000%2Fmulti-robot_waam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flalywr2000%2Fmulti-robot_waam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flalywr2000%2Fmulti-robot_waam/lists"}