{"id":45283476,"url":"https://github.com/gtri/scrimmage","last_synced_at":"2026-02-21T02:41:54.831Z","repository":{"id":40960914,"uuid":"99139417","full_name":"gtri/scrimmage","owner":"gtri","description":"Multi-Agent Robotics Simulator","archived":false,"fork":false,"pushed_at":"2026-02-10T20:34:38.000Z","size":375377,"stargazers_count":174,"open_issues_count":39,"forks_count":97,"subscribers_count":18,"default_branch":"Ubuntu-24.04","last_synced_at":"2026-02-10T23:41:40.420Z","etag":null,"topics":["multi-agent","robotics","simulation"],"latest_commit_sha":null,"homepage":"https://www.scrimmagesim.org","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gtri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-08-02T16:37:40.000Z","updated_at":"2026-02-10T20:27:34.000Z","dependencies_parsed_at":"2023-01-31T04:45:17.494Z","dependency_job_id":"5acc9197-8ea6-4a6c-bf6b-c629db804d2c","html_url":"https://github.com/gtri/scrimmage","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/gtri/scrimmage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtri%2Fscrimmage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtri%2Fscrimmage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtri%2Fscrimmage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtri%2Fscrimmage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gtri","download_url":"https://codeload.github.com/gtri/scrimmage/tar.gz/refs/heads/Ubuntu-24.04","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtri%2Fscrimmage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29671823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T00:11:43.526Z","status":"online","status_checked_at":"2026-02-21T02:00:07.432Z","response_time":107,"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-agent","robotics","simulation"],"created_at":"2026-02-21T02:41:54.090Z","updated_at":"2026-02-21T02:41:54.812Z","avatar_url":"https://github.com/gtri.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SCRIMMAGE Multi-Agent Simulator\n\n[![Build Status](https://travis-ci.org/gtri/scrimmage.png?branch=master)](https://travis-ci.org/gtri/scrimmage)\n[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/gtri/scrimmage/issues)\n[![Docker Pulls](https://img.shields.io/docker/pulls/syllogismrxs/scrimmage.svg?maxAge=2592000)](https://hub.docker.com/r/syllogismrxs/scrimmage)\n[![Join the chat at https://gitter.im/gtri-scrimmage/community](https://badges.gitter.im/gtri-scrimmage/community.svg)](https://gitter.im/gtri-scrimmage/community?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n![SCRIMMAGE Logo](./docs/source/images/scrimmage_vert_black_clean_medium.png)\n\n## Welcome to SCRIMMAGE\n\nSCRIMMAGE is a multi-agent simulator for robotics research. It has been used to\nconduct studies in multi-agent task assignment, differential game theory, novel\ncontrollers, and reinforcement learning.\n\n### SCRIMMAGE Demonstration Video\n\n[![SCRIMMAGE Demo Video](./docs/source/images/demo-video.png)](https://youtu.be/NW37klOQ2xA)\n\n## Online Documentation\n\n[Tutorials](https://gtri.github.io/scrimmage/sphinx/html/index.html)\n\n## Citation\n\nIf you use SCRIMMAGE in your research, please cite our research paper:\n\n    @inproceedings{demarco2018,\n        title={Simulating Collaborative Robots in a Massive Multi-Agent Game Environment ({SCRIMMAGE})},\n        author={DeMarco, Kevin and Squires, Eric and Day, Michael and Pippin, Charles},\n        booktitle={Int. Symp. on Distributed Autonomous Robotic Systems},\n        year={2018},\n    }\n\n## Build SCRIMMAGE\n\n### Directory Setup\n\nSCRIMMAGE developers and users may use multiple scrimmage-related projects and\nrepositories. Thus, it is recommended to group your scrimmage-related projects\nunder a single directory, but it is not necessary. To create a directory to\nhold your scrimmage projects and clone this scrimmage repo, run the following\ncommands:\n\n    mkdir -p ~/scrimmage \u0026\u0026 cd ~/scrimmage\n    git clone https://github.com/gtri/scrimmage.git\n\n### Install Binary Dependencies\n\nScrimmage's Binary Dependencies can be intalled by running `./setup/install-binaries.sh` and `./setup/install-jsbsim.sh`\n\n    cd scrimmage\n    sudo ./setup/install-binaries.sh\n    sudo ./setup/install-jsbsim.sh\n\n`./setup/install-binaries.sh` provides a list of required Ubuntu packages in the \"DEPS_DPKG\" array. This script allows for futher installation customization with the `--external` flag:\n\n    sudo ./setup/install-binaries.sh [--external]\n\nIf the first option `--external` is passed, the script only installs what is necessary for an external build (see EXTERNAL flag to project CMakeLists.txt).\n\n### Build SCRIMMAGE Core\n\n    mkdir build \u0026\u0026 cd build\n    cmake ..\n    make\n    source ~/.scrimmage/setup.bash\n\n### Environment Setup\n\nWhenever you want to use scrimmage, you need to source the\n~/.scrimmage/setup.bash file or you can place a line in your ~/.bashrc file to\nsource it automatically:\n\n    echo \"source ~/.scrimmage/setup.bash\" \u003e\u003e ~/.bashrc\n\n### Build with GPU integration\n\nScrimmage has some basic GPU enabled plugins that vastly improve performance of some CPU strenuous tasks.\nFor scrimmage to build GPU plugins you will need to run\n\n    ./setup/install-binaries.sh --gpu\n\nwhich will install the opencl packages necessary for scrimmage to find OpenCL.\nDepending on your GPU, you will need some additional packages though.\n\n#### Nvidia\n\nFor Nvidia you will need an nvidia driver installed, and nvidia-opencl-dev\n\n## Run SCRIMMAGE\n\nOpen a new terminal, change to the scrimmage directory, and execute a mission.\n\n    cd \u003c/path/to/\u003escrimmage\n    scrimmage ./missions/straight.xml\n\nYou should see the visualization GUI open up and display the simulation.\n\n## GUI Commands\n\nThe GUI responds to the following input keys:\n\n    'q'                     : Quit the simulation\n    'b'                     : (Break) Pauses and unpauses the simulation.\n    'space bar'             : When paused, take a single simulation step.\n    'a'                     : Rotate through the camera views\n    'right/left arrows'     : Change the aircraft to follow\n    '['                     : Decrease simulation warp speed\n    ']'                     : Increase simulation warp speed\n    '+'                     : Increase visual scale of all entities\n    '-'                     : Decrease visual scale of all entities\n    'r'                     : Reset visual scale and reset camera position\n    'z'                     : Zoom out from entity\n    'Z'                     : Zoom in to entity (z+shift)\n    'w'                     : Display wireframe\n    's'                     : Display solids (vs. wireframe)\n    'CTRL + Left Click'     : Rotate world\n    'SHIFT + Left Click'    : Translate camera through world\n\nThe GUI's camera can operate in three modes (cycle with 'a' key):\n\n1. Follow the entity and point towards the entity's heading\n2. Free floating camera\n3. Follow the entity from a fixed viewpoint\n\nNote: If all of the terrain data does not appear, click on the GUI window with\nyour mouse.\n\n## Building on macOS\n\nSupport for macOS has been deprecated. Refer [here](https://github.com/crichardson332/homebrew-crich_brews)\nfor legacy homebrew instructions, but this is not guaranteed to build\nwithout intervention from the user. Any user wishing to develop on\nmacOS is free to do so and make pull requests for patches, but the\nplatform is no longer supported by SCRIMMAGE core developers.\n\n## Build SCRIMMAGE Documentation\n\n    cd build\n    cmake .. -DBUILD_DOCS=ON\n    make docs\n\n### View SCRIMMAGE API (Doxygen) Documentation\n\n    firefox ./docs/doxygen/html/index.html\n\n### View SCRIMMAGE Tutorial (Sphinx) Documentation\n\n    firefox ./docs/sphinx/html/index.html\n\n## Build and Run Tests\n\n    cmake .. -DBUILD_TESTS=ON\n    make\n    make test\n\n## Cleaning SCRIMMAGE\n\nThe scrimmage source code can be cleaned with the standard clean command:\n\n    make clean\n\nHowever, if you want to clean everything, you can remove your build directory:\n\n    cd /path/to/scrimmage \u0026\u0026 rm -rf build\n\n## ROS Integration\n\nTo build SCRIMMAGE's ROS plugins, you must have\n[ROS](http://wiki.ros.org/ROS/Installation) installed, the ROS environment\nsourced, and the `BUILD_ROS_PLUGINS` cmake variable must be set:\n\n    sudo apt-get install ros-${ROS_VERSION}-desktop-full ros-${ROS_VERSION}-mavros-msgs\n    source /opt/ros/${ROS_VERSION}/setup.sh\n    cmake .. -DBUILD_ROS_PLUGINS=ON\n\nThe `${ROS_VERSION}` should be substituted with an appropriate ROS version\n(e.g., \"kinetic\", \"melodic\", etc.).\n\nAn example of using SCRIMMAGE to simulate robots running the ROS 2D Navigation\nstack can be found in the\n[scrimmage_ros](https://github.com/SyllogismRXS/scrimmage_ros) package.\n\n## MOOS Integration\n\nIf you want to use MOOS with SCRIMMAGE, you will first need to download and\nbuild MOOS/MOOS-IVP according to the instructions at:\nhttp://oceanai.mit.edu/moos-ivp/pmwiki/pmwiki.php?n=Site.Download\n\nThe MOOSAutonomy plugin interacts with the MOOSDB to synchronize time, exchange\ncontact information, and receive desired state from the IvP Helm. To build\nMOOSAutonomy, you have to provide cmake with the path to the moos-ivp source\ntree:\n\n    cmake .. -DMOOSIVP_SOURCE_TREE_BASE=/path/to/moos-ivp\n\n## FlightGear Multiplayer Server (FGMS) Integration\n\nIf you want to use FGMS with SCRIMMAGE, you will first need to download and\nbuild FGMS according to the instructions at:\nhttps://github.com/FlightGear/fgms\n\nClone the flight gear multiplayer server repository and build it:\n\n    git clone https://github.com/FlightGear/fgms.git\n    cd fgms\n    git checkout 6669ac222b9f6ca34b0d56ba1bc6cac9cc0324b2\n    mkdir build \u0026\u0026 cd build\n    cmake .. -DBUILD_SHARED_LIB=ON\n    make\n\nThe FGMS plugin interacts with SCRIMMAGE to receive the state variables of each\nentity. To build FGMS, you have to provide SCRIMMAGE's CMake project the path\nto the FGMS root source:\n\n    cmake .. -DFGMS_SOURCE_TREE_BASE=/path/to/fgms\n\n## Running SCRIMMAGE inside of Docker\n\nThe SCRIMMAGE docker image is pushed to a public repository after a successful\nbuild on Travis. If docker is installed on your machine, you can obtain the\nSCRIMMAGE docker image by running the following command:\n\n    docker pull syllogismrxs/scrimmage:latest\n\nYou can pass mission files from your host machine to the `scrimmage` executable\ninside of the docker container with the following command:\n\n    cd /path/to/scrimmage/missions\n    docker run --name my-scrimmage \\\n        -v ${PWD}/straight_jsbsim.xml:/straight_jsbsim.xml \\\n        syllogismrxs/scrimmage:latest /straight_jsbsim.xml\n\nThe previous command mounts the `straight_jsbsim.xml` mission file on your host\nmachine into the scrimmage container and then the `/straight_jsbsim.xml`\nportion at the end of the command overwrites the default docker `CMD`, which is\ndefined in the Dockerfile. Finally, the `scrimmage` executable is passed the\n`/straight_jsbsim.xml` mission file.\n\nSince we provided a name for our container, we can easily extract the SCRIMMAGE\nlog files from the docker container:\n\n    docker cp my-scrimmage:/root/.scrimmage/logs .\n\nIf you need to drop into a shell inside of the scrimmage container, you will\nneed to overwrite the docker image's ENTRYPOINT.\n\n    docker run -it --entrypoint=\"/bin/bash\" syllogismrxs/scrimmage:latest\n\nOnce inside of the container, you will need to source the `setup.bash` file\nmanually before running a mission.\n\n    source ~/.scrimmage/setup.bash\n    scrimmage ./missions/straight-no-gui.xml\n\nIf you want to see the scrimmage mission on your host, you can do the following:\n\n1. Allow docker to connect to your local display\n2. Run the mission in the docker container\n\n   xhost +local:docker\n   docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix scrimmage/ubuntu:latest\n   source ~/.scrimmage/setup.bash\n   scrimmage ~/scrimmage/scrimmage/missions/straight.xml\n\nIf you want gpu access for your docker container You must do the following:\n\n1. Install the container tools for your OS/GPU to allow the container to access your host's resources properly.\n   a. For NVidia GPUS this is the [Nvidia container toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)\n2. include the --gpus all flag in your docker run invocation\n\n   docker run -it --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix scrimmage/ubuntu:latest\n\n## Building SCRIMMAGE for CentOS or RedHat\n\nThis repository contains a Dockerfile that builds a compiler with C++20\nsupport, SCRIMMAGE's dependencies, and SCRIMMAGE for CentOS8 or RedHat8. RPMs\nare built inside of the docker image and they can be extracted and install on a\nCentOS or RedHat system. The user can change the package install prefix for all\nRPMs by specifying the `PKG_PREFIX` docker build argument. Building the docker\nimage can take several hours:\n\n    cd /path/to/scrimmage/ci/dockerfiles\n    docker build --build-arg PKG_PREFIX=/opt/scrimmage \\\n                   --tag scrimmage/centos6:latest \\\n                   --file almalinux8 .\n\nExtract the RPMs that were built to the host's `rpms` folder:\n\n    docker create --name mycontainer scrimmage/centos6:latest\n    docker cp mycontainer:/root/rpms ./rpms     # extract the rpms\n    docker rm mycontainer                       # clean up container\n\nCopy the `rpms` folder to your CentOS or RedHat system and install the run-time\ndependencies:\n\n    cd /path/to/rpms\n    rpm -ivh scrimmage_gcc*.rpm \\\n             scrimmage_boost*.rpm \\\n             scrimmage_geographiclib*.rpm \\\n             scrimmage_jsbsim*.rpm \\\n             scrimmage_grpc*.rpm \\\n             scrimmage_protobuf*.rpm \\\n             scrimmage_0.2.0*.rpm\n\nTo test that SCRIMMAGE was installed correctly, run the following command:\n\n    export JSBSIM_ROOT=/opt/scrimmage/etc/JSBSim \\\n        \u0026\u0026 source /opt/scrimmage/etc/scrimmage/env/scrimmage-setenv \\\n        \u0026\u0026 scrimmage /opt/scrimmage/share/scrimmage/missions/straight-no-gui.xml\n\n## Installing and Configuring Open Grid Engine\n\nInstructions modified from:\nhttps://scidom.wordpress.com/2012/01/18/sge-on-single-pc/\nhttp://www.bu.edu/tech/support/research/system-usage/running-jobs/tracking-jobs/\n\nInstall Grid Engine:\n\n    sudo apt-get install gridengine-master gridengine-exec \\\n      gridengine-common gridengine-qmon gridengine-client\n\nNote that you can configure how qsub is called with a `.sge_request` in your\nhome directory. Further, you can set the number of available slots (cores\navailable) when running grid engine under the Queue Control tab.\n\n## Installing and Configuring PostgreSQL\n\nInstall PostgreSQL and configure the database scrimmage, create user scrimmage with\npassword scrimmage, and add that user to the scrimmage database:\n\n    sudo apt-get install postgresql postgresql-contrib\n    sudo update-rc.d postgresql enable \u0026\u0026\\\n      sudo service postgresql restart \u0026\u0026\\\n      sudo -u postgres createdb scrimmage \u0026\u0026\\\n      sudo -u postgres psql -c \"CREATE USER scrimmage with password 'scrimmage';\" \u0026\u0026\\\n      sudo -u postgres psql -c \"alter user scrimmage with encrypted password 'scrimmage'\" \u0026\u0026\\\n      sudo -u postgres psql -c \"grant all privileges on database scrimmage to scrimmage;\"\n\nGo into /etc/postgresql/9.5/main/pg_hba.conf (or similar path to your postgres\ninstall) and change the line:\n\n`local    all     all     peer`\n\nto\n\n`local    all     all     md5`\n\nThen run:\n\n    sudo service postgresql restart\n\nThis will allow us to authenticate the scrimmage user on postgres with the\npassword scrimmage that we created.\n\nTo use the python scripts for pulling .csv files to postgres, install psycopg2,\nthe python interface for postgres:\n\n    pip install psycopg2\n\nThe scripts are located in the scripts directory.\n\n## Troubleshooting\n\n### Problem: I can't run the SCRIMMAGE GUI in a Virtual Machine (VirtualBox)\n\nThere are some OpenGL issues with VTK6 in Virtualbox. To run SCRIMMAGE in\nVirtualBox with VTK5, run the following commands:\n\n    sudo apt-get install libvtk5-dev\n    cd ~/scrimmage/scrimmage/build      # Note: Path may vary\n    cmake ..\n\nAt this point, cmake should output a message about finding VTK Version 5. Now,\nyou have to rebuild SCRIMMAGE:\n\n    make\n\n### Problem: vtkRenderingPythonTkWidgets cmake Warning\n\nWhen running cmake, the user gets the cmake warning:\n\n    -- The imported target \"vtkRenderingPythonTkWidgets\" references the file\n    \"/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so\"\n    but this file does not exist.  Possible reasons include:\n    * The file was deleted, renamed, or moved to another location.\n    * An install or uninstall procedure did not complete successfully.\n    * The installation package was faulty and contained\n    \"/usr/lib/cmake/vtk-6.2/VTKTargets.cmake\"\n    but not all the files it references.\n\nThis is a VTK6 Ubuntu package bug. It can be ignored.\n\n### Problem: I do not see building extrusions in the SCRIMMAGE GUI\n\nSCRIMMAGE uses vtkGeoJSONReader to load polygon extrusion data from a GeoJSON file. This VTK feature was added in VTK7. Since this feature is not available in older versions, SCRIMMAGE does not load building data if the installed VTK version is less than 7. Therefore, the remedy is to upgrade VTK. To install VTK7 on Ubuntu, run the following command:\n\n    sudo apt-get install libvtk7-dev\n\n### Problem: Docker Container Can't Access Internet\n\nDocker can have DNS issues. If you can ping a public ip address within a docker\nimage (such as 8.8.8.8), but you can't ping archive.ubuntu.com, create the file\n/etc/docker/daemon.json with the following contents:\n\n    {\n        \"dns\": [\"\u003cDNS-IP\u003e\", \"8.8.8.8\"]\n    }\n\nWhere `\u003cDNS-IP\u003e` is the first DNS IP address and \u003cinterfacename\u003e is a network\ninterface with internet access from the commands:\n\n    nmcli dev list | grep 'IP4.DNS'                    # Ubuntu \u003c= 14\n    nmcli device show \u003cinterfacename\u003e | grep IP4.DNS   # Ubuntu \u003e= 15\n\nRestart docker:\n\n    sudo service docker restart\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgtri%2Fscrimmage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgtri%2Fscrimmage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgtri%2Fscrimmage/lists"}