{"id":26076778,"url":"https://github.com/discower/discower_transportation","last_synced_at":"2026-04-17T21:31:27.183Z","repository":{"id":229709132,"uuid":"777444108","full_name":"DISCOWER/discower_transportation","owner":"DISCOWER","description":"A simple load transportation simulator based on the KTH Space Robotics platforms.","archived":false,"fork":false,"pushed_at":"2024-03-28T15:50:02.000Z","size":11949,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-09T02:29:03.676Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/DISCOWER.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}},"created_at":"2024-03-25T21:31:09.000Z","updated_at":"2024-03-25T21:33:16.000Z","dependencies_parsed_at":"2024-03-25T22:47:31.589Z","dependency_job_id":null,"html_url":"https://github.com/DISCOWER/discower_transportation","commit_stats":null,"previous_names":["discower/discower_transportation"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DISCOWER/discower_transportation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DISCOWER%2Fdiscower_transportation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DISCOWER%2Fdiscower_transportation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DISCOWER%2Fdiscower_transportation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DISCOWER%2Fdiscower_transportation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DISCOWER","download_url":"https://codeload.github.com/DISCOWER/discower_transportation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DISCOWER%2Fdiscower_transportation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31947474,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2025-03-09T02:30:58.931Z","updated_at":"2026-04-17T21:31:27.140Z","avatar_url":"https://github.com/DISCOWER.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Load Transportation Simulator\nWe present a simulator in Gazebo to simulate Multi-agent load transportation tasks in a microgravity environment. \n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"fig/simulator.png\" width=\"300\"\u003e\n\n**Fig. 1** Robot simulator\n\u003c/div\u003e\n\n## Requirements\n- ROS 2 Foxy\n- Casadi 3.6.5\n- Gazebo ROS2 Control plugin\n- Gazebo Plugins\n\n**NOTE**: this package was tested on a Ubuntu 20.04 LTS with the packages above mentioned. Different versions of Casadi and ROS 2 may work, but it is not guaranteed.\n\n## Running Simulation\n1. Create a ROS 2 workspace:\n```bash\ncd ~\nmkdir -p ~/discower_ws/src\ncd ~/discower_ws/src\n```\n2. Clone the repository:\n```bash\ngit clone git@github.com:DISCOWER/discower_transportation.git\n```\n3. Build the workspace:\n```bash\ncd ~/discower_ws\ncolcon build --symlink-install\nsource install/setup.bash \n```\n4. Start Gazebo simulation\n```bash\nros2 launch discower_transportation launch_sim.launch.py \n```\n5. Start PWM controller\n```bash\nros2 run discower_transportation start_pwm_controller.py \n```\n6. Run the Example controller.\nThis controller is a simple controller that moves the load forward.\n\n```bash\nros2 run discower_transportation example_controller.py \n```\n\n## Running [Transport MPC](https://github.com/pSujet/transport_mpc)\n\nTo run the Transport MPC controllers, clone into the workspace the Transport MPC:\n```bash\ncd ~/discower_ws/src\ngit clone git@github.com:pSujet/transport_mpc.git\n```\nThen, rebuild the workspace:\n```bash\ncd ~/discower_ws\ncolcon build --symlink-install\nsource install/setup.bash \n```\nThen, run steps 4 and 5 from the previous section, followed by one of the following:\n* Run centralized controller:\n```bash\nros2 launch transport_mpc start_controller_cen.launch.py\n```\n\n* Run decentralized controller:\n```bash\nros2 launch transport_mpc start_controller_decen.launch.py\n```\n\n## Restart Simulation\nWe can reset the simulator by stopping example_controller and pwm_controller. Next, pressing Ctrl + R in the Gazebo window. Then we can restart the cable position by launching the following command line:\n```bash\nros2 launch discower_transportation set_initial.launch.py \n```\n\n## Simulator\nThere are two robots and one load as shown in Fig. 1. The load is connected to the robots by cables. Each robot has four thruster pairs and is controlled by the PWM controller. Body wrench of each robot is calculated by the following equation:\n```math\n\\mathbf{F} = \\mathbf{D} \\mathbf{u} =\n\\begin{bmatrix}\n    F_x \\\\ F_y \n\\end{bmatrix} = \n\\begin{bmatrix}\n1 \u0026 1 \u0026 0 \u0026 0 \\\\\n0 \u0026 0 \u0026 1 \u0026 1\n\\end{bmatrix}\n\\begin{bmatrix}\nu_1 \\\\ u_2 \\\\ u_3 \\\\ u_4\n\\end{bmatrix}\n```\n\n```math\n\\boldsymbol{\\tau} = \\mathbf{L}\\mathbf{u} =\n\\begin{bmatrix}\n    \\tau_z\n\\end{bmatrix} = \nl_{arm}\\begin{bmatrix}\n1 \u0026 -1 \u0026 1 \u0026 -1\n\\end{bmatrix}\n\\begin{bmatrix}\nu_1 \\\\ u_2 \\\\ u_3 \\\\ u_4\n\\end{bmatrix}\n```\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiscower%2Fdiscower_transportation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiscower%2Fdiscower_transportation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiscower%2Fdiscower_transportation/lists"}