A C++ based deployment repository
for executing policies trained with LFMC-Gym.
This git repository contains
two branches. The master branch provides an execution
example that requires Raisim while
the library branch contains the minimal implementation
of the controller.
Project website: https://ori-drs.github.io/lfmc/
Training repository: https://github.com/ori-drs/lfmc_gym
Deployment (Python): https://github.com/ori-drs/lfmc_pyval
Preprint: https://arxiv.org/abs/2209.14887
@article{lfmc-locomotion,
title = {Learning Low-Frequency Motion Control for Robust and Dynamic Robot Locomotion},
author = {Gangapurwala, Siddhant and Campanaro, Luigi and Havoutis, Ioannis},
url = {https://arxiv.org/abs/2209.14887},
publisher = {arXiv},
year = {2022},
doi = {10.48550/ARXIV.2209.14887},
}
The deployment code depnds on Eigen and YAML-CPP. These can be installed in Ubuntu like so:
sudo apt-get install libeigen3-dev libyaml-cpp-devTo execute the example, you will also need to have installed
Raisim. Please refer to the Raisim documentation
for install instructions. Based on the documentation,
we will assume that Raisim has been installed in a directory
called $LOCAL_INSTALL.
To clone lfmc_cval, use the following command. Note that,
this repository depends upon a neural network implementation
written in C++ called networks_minimal
and is included as a submodule. Ensure you
use --recurse-submodule flag while cloning the repository.
git clone --recurse-submodules git@github.com:ori-drs/lfmc_cval.gitUpon cloning the repository, we build the library and executable in the
build folder.
cd lfmc_cval
mkdir build && cd buildNote that, for CMake to be able to find Raisim, you need to ensure
that $LOCAL_INSTALL is an accessible environment variable and
directs to the Raisim install location. You can either execute the
following command in your current shell or add it to your .bashrc.
export LOCAL_INSTALL=<raisim-install-directory>Assuming, Raisim has been correctly set up, you can then build the package.
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4To run the example code, you will first have to launch the RaisimUnity visualizer.
Make sure you have checked the Auto-connect option in RaisimUnity and then
execute the following command.
./command_trackingNote that, the current policy executes at 10 Hz. We will add additional policies trained at different frequencies soon.
└── configuration # Contains configuration files
├── simulation.yaml # Simulation configuration parameters
└── dependencies # Packages required by LFMC-CVal
├── networks_minimal # C++ based implementation of MLP and GRU networks
└── examples # RL environments
├── include # Helpers required for included Raisim example code
└── Actuation.hpp # Actuation class emplying an actuator network for ANYmal C
├── command_tracking.cpp # Raisim example code for executing trained policy
└── include # C++ header files
├── lfmc
└── Controller.hpp # LFMC controller interface class declaration
└── models # Robot URDFs
└── parameters # Neural network parameters for locomotion and actuation
└── src # C++ source files
├── Controller.cpp # LFMC controller interface class function definitions
└── CMakeLists.txt # C++ build utility