Core Plugins

The SCRIMMAGE core project provides several plugins that can be used for multi-agent simulation. The following is a brief description of the available plugins.

Autonomy Plugins

  • AuctionAssign : An example of using Auction-based methods and SCRIMMAGE’s messaging system to generate auctions and bids between multiple entities.

  • Boids : An implementation of Boid’s swarm control model. (

  • MOOSAutonomy : Allows an entity to be controlled by MOOS-IvP. See the script in the scripts directory for help on running MOOS with SCRIMMAGE.

  • MotorSchemas : An implementation of the Motor Schemas autonomous control framework. The entity can move towards a waypoint while avoiding other entities.

  • PyAutonomy : Allows an entity to be controlled by a Python script.

  • ROSAutonomy : Allows an entity to be controlled by a ROS node. (experimental).

  • Straight : Moves the entity in the forward direction from its initial heading.

Motion Model Plugins

  • DoubleIntegrator : Implements a 3D double integrator motion model.

  • FixedWing6DOF : A dynamics-based with quaternion integration fixed-wing model.

  • JSBSimControl : An example of controlling JSBSim’s actuators directly from an Autonomy plugin.

  • JSBSimModel : An example of controlling JSBSim’s autopilot / model from an Autonomy plugin.

  • RigidBody6DOF : A general purpose rigid body 6DOF model.

  • SimpleAircraft : Implements a simple 3D aircraft model.

  • SimpleCar : Implements a simple car model. (

  • SimpleQuadrotor : Implements a simple 3D quadrotor model.

  • SingleIntegrator : Implements a 3D single integrator motion model. The entity can instantaneously change velocity and heading.

  • Unicycle : Implements a simple unicycle model. (

Controller Plugins

  • DoubleIntegratorControllerWaypoint : A waypoint controller for the DoubleIntegrator.

  • FixedWing6DOFControllerPID : Controls speed, altitude, and heading.

  • FixedWing6DOFControllerROS : Controls speed, altitude, and heading from ROS node (experimental).

  • JSBSimControlControllerHeadingPID : Directly controls actuators of JSBSim model from SCRIMMAGE.

  • JSBSimModelControllerHeadingPID : Controls speed, altitude, and heading. Uses an autopilot defined in JSBSim’s XML syntax.

  • RigidBody6DOFControllerPID : Controls speed, altitude, and heading.

  • RigidBody6DOFControllerROS: Controls speed, altitude, and heading from ROS node (experimental).

  • SimpleAircraftControllerPID : Controls speed, altitude, and heading.

  • SimpleCarControllerHeading: Controls speed and heading.

  • SimpleQuadrotorControllerLQR : Implements linear-quadratic regulator (LQR) controller for quadrotor model. Controls heading, speed, and altitude.

  • SingleIntegratorControllerSimple : Directly controls 3D velocity components of single integrator.

  • SingleIntegratorControllerWaypoint : Implements waypoint control of single integrator model.

  • UnicycleControllerDirect : Directly controls the speed and angular velocity.

  • UnicycleControllerPoint : Drives the unicycle to a desired X/Y position.

Sensor Plugins

  • ContactBlobCamera : Converts contacts within a field-of-view and range into a circle projected onto a 2D camera image. A bounding box is generated around each contact. See the ContactBlobCamera.xml file for complete sensor configuration.

  • NoisyContacts : Converts the states of contacts within a field-of-view and range into noisy states. Simulates noisy range-based sensors.

  • NoisyState : Converts the entity’s own state into a noisy version. Simulates noisy localization.

Entity Interaction Plugins

  • BulletCollision : Perform collision detection between entities with the open source Bullet physics engine.

  • GroundCollision : Determine if an entity falls below a z-position threshold. If so, remove the entity from the simulation.

  • SimpleCollision : Determine if the distance between two entities is below a given threshold. If so, remove the two entities from the simulation.

Metrics Plugins

  • SimpleCollisionMetrics : Keeps track of each entity’s total simulation time, collisions with teammates, collisions with non teammates, and collisions with the ground. This metric computes a score for each team based on the counts and the weights, which are defined in SimpleCollisionMetrics.xml