Skip to content

ci-group/revolve

Repository files navigation

Revolve is an open source software framework for robot evolution providing C++ and Python libraries to create, simulate and manage robots in the Gazebo general-purpose robot simulator. Given a specification, a robot body can be constructed by Revolve from a tree structure, starting with a root node extending to other body parts through its attachment slots. Revolve also ships with some simple generator classes, which can generate arbitrary robot bodies from scratch given a set of constraints.

Revolve was originally developed and is maintained by researchers and engineers working at the Computational Intelligence Group within Vrije Universiteit Amsterdam for the purposes of conducting robot body and brain evolutionary-related research. The system is general enough to be applicable in a wide variety of other domains, as well.

Installation

The current system is supported for Linux and Mac OS X platforms. If all pre-requirements are satisfied, to install the current release run:

git clone https://github.com/ci-group/revolve.git
export SIM_HOME=`pwd` && cd $SIM_HOME/revolve
mkdir -p build && cd build
cmake ..
make -j4

Within the revolve/ root directory create Python virtual environment:

cd $SIM_HOME/revolve
virtualenv --python python3 .venv
source .venv/bin/activate
pip install -r requirements.txt

To verify the build, run following command to open the Gazebo simulator:

(.venv) ./revolve.py --simulator-cmd=gazebo

If you want to have an overview of all possible Revolve commands, run ./revolve.py --help.

See Installation Instructions for Revolve for detailed instructions, and how to build from source.

Try your first Revolve program

While ./revolve.py is running, in another terminal window start the same virtual environment:

cd ./revolve/
source .venv/bin/activate
(.venv) python
>>> import asyncio
>>> from pyrevolve.gazebo.manage import WorldManager as World
>>> async def run():
...     world = await World.create()
...     await world.pause(True)
...     print("Hello Revolve! I paused Gazebo.")
... 
>>> loop = asyncio.get_event_loop()
>>> loop.run_until_complete(run())
Hello Revolve! I paused Gazebo.

Learn more examples about how to do specific tasks in Revolve at the tutorials page of Revolve wiki.

Contribution guidelines

If you want to contribute to Revolve, be sure to review the contribution guidelines. By participating, you are expected to uphold this code.

Open in Gitpod

We use GitHub issues for tracking requests and bugs.

The Revolve project strives to abide by generally accepted best practices in open-source software development: CII Best Practices CircleCI Codacy Badge

Contributors

We would like to thank all contributors of Revolve project!

Special thanks to Elte Hupkes who designed the codebase and professor Gusz Eiben whose energy is pushing the project forward. Many thanks to Milan Jelisavcic and Matteo De Carlo for redesigning and simplifying the codebase. For the complete list of contributors see AUTHORS.

For more information

License

Apache License 2.0