Arranging a robot swarm with global inputs and wall friction [discrete]

All robots get same input, but uses wall-friction to steer robots to a desired configuration.
120 Downloads
Updated 16 Dec 2015

View License

Authors: Arun Viswanathan Mahadev and Aaron T. Becker
Arranges a robot swarm. All robots get same input, but wall-friction steers robots to a desired configuration.
Description:
‘frictionbotsdiscrete.m’ implements a friction-based algorithm to control the movement of a robot swarm. The algorithm gives the same input to all the robots and ends with the robots in a desired configuration.
See video at YouTube: https://youtu.be/uhpsAyPwKeI
The concept assumes that robots experience infinite friction along the surface of the walls. This code uses a rectangular workspace enclosed by four walls. The algorithm iterates over five steps that isolate one robot from the swarm and apply “drift-movements” to the whole swarm so that only the isolated robot experiences a different net movement because it touches a wall.
The workspace is split into two regions:
1. Staging Zone – The robots are initialized in this zone.
2. Build Zone – The robots goal configuration is in this zone.
Robots are depicted as colored disks; the boundary is black, and final locations are grey. Running the code with no arguments uses a default arrangement with 14 robots that form a hollow shape.
Arguments:
PosGoal: desired final position of robots (drawn in grey) given in a 2D matrix. Column 1- x axis position, Column 2- y axis position
PosObstacles: position of obstacles (drawn in black) given in a 2D matrix. Column 1- x axis position, Column 2- y axis position
PosCurrent: the current location of all robots. Column 1 – x axis position, 2- y axis position, 3 – index, 4 - color
Make_Movie: If true, a small video called ‘Friction_bots.mp4’is saved in the current MATLAB directory
Returnvalue: total number of movements applied to the swarm
ALGORITHM: robots are numbered such that bottom-most robot is ‘1’, and numbered in ascending order row-wise. The corresponding final locations of the robots are numbered based on descending y coordinate as first priority and descending x coordinate as second priority.
The algorithm runs once for each of the N robots. At the beginning of the Kth step the robots 1 to K-1 are in their goal positions and robots K to N are in their initial positions. On the Kth iteration, steps 1 to 5 are implemented:
Step 1: Move the robots to the left and down until kth robot touches the bottom boundary.
Step 2: apply a “drift-move” left until kth robot reaches left wall
Step 3: apply a “drift-move” up until Kth robot reaches its final y position.
Step 4: move all robots left until Kth robot is in correct position relative to robots 1 to K-1. Then move all robots right until the Kth robot’s x position is at its goal position.
Step 5: Move up until the Kth robot’s y position is at its goal position.
Now robots 1 to K have reached their final position. Robots from K+1 to N have been returned to the staging zone.
This code does discrete moves on robots and every time the ‘moveto()’ function is called there is a step movement. This code has a built-in moviemaker function that can be turned on by setting Make_Movie to true. If true, a small video called ‘Friction_bots.mp4’is saved in the current MATLAB directory.
December 13, 2015
Email: vm.arun94@yahoo.com and atbecker@uh.edu

Cite As

Aaron T. Becker's Robot Swarm Lab (2024). Arranging a robot swarm with global inputs and wall friction [discrete] (https://www.mathworks.com/matlabcentral/fileexchange/54526-arranging-a-robot-swarm-with-global-inputs-and-wall-friction-discrete), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2015a
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Version Published Release Notes
1.0.0.0

Added cover image