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. (http://www.red3d.com/cwr/boids/) - **MOOSAutonomy** : Allows an entity to be controlled by MOOS-IvP. See the ``moos_scrimmage.py`` 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. (http://planning.cs.uiuc.edu/node658.html) - **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. (http://planning.cs.uiuc.edu/node660.html) 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