Robotics has typically been constrained to experts in academia and industry with access to expensive and niche robotics systems. The robotics community has embraced a layered hierarchical software design from the early days and reusability has been a core design principle.
With automation posing as an alternative to many mundane tasks, the knowledge of robotics does come in handy. However, learning robotics is not a straightforward task. Building robots requires knowledge of engineering mechanics, computer vision to begin with. So in order to make the technology available to the users without domain expertise, Facebook came up with a novel framework — PyRobot.
Though there have been several motion planning libraries such as OpenRave, MoveIt!, OMPL which provide hardware-agnostic core functionalities that can be compiled for each specific robot, PyRobot offers abstraction like never before.
An Easy-To-Use Framework
PyRobot is designed to easily accommodate common robotic manipulators and mobile bases. The researchers behind this work, began with the goal of abstracting away the low-level controls for individual robots from the high-level motion generation and learning in an easy-to-use way.
PyRobot comes with the utility functions like joint velocity control, joint position control, joint torque control, cartesian path planning, forward kinematics and inverse kinematics that form the fundamentals of building.

Currently, PyRobot supports LoCoBot, which is a low-cost mobile manipulator suitable for both navigation and manipulation. Each robot has a configuration file that specifies the necessary robot-specific parameters: joint names, to get state and set commands, base frame, end-effector frame, planner configuration, inverse kinematics solution tolerance, whether it has an arm or base or camera, etc
Interfacing a new robot with PyRobot can be done in four steps:
- Create a new configuration file. The configuration file name should follow the following naming convention: <ROBOT_NAME>_config.py. The easiest way to create this file is to inherit the pre-defined configurations in src/pyrobot/cfg/config.py
- Inherit the PyRobot parent classes (Arm, Gripper, Camera, Base)
- Write unit tests
- Add examples
Establishing An Ecosystem
Benchmarking in robotics is extremely challenging given the vast scope of applications and diversity of physical test conditions (hardware, objects, environment, etc.).
Compared to other fields, benchmarking in robotics is challenging and PyRobot’s unified API and LoCoBot’s standard hardware will allow researchers to share their high-level algorithmic implementations, models and datasets collected on a real robot.
Using PyRobot will allow users to run robots without having to deal with the robot specific software along with enabling better comparisons.
Though PyRobot abstracts away the complexity, users still have the flexibility to use components for commanding low-level velocities and torques This will allow researchers to collaborate and iterate faster on robotics applications.
Apart from the open software, LoCoBot works as affordable open hardware that can be easily assembled for use with PyRobot. While simulation is useful for software testing and running experiments, writing software that works on the real robot is the eventual goal of the field and has severe challenges. As more developers get access to open hardware and software, sharing high-quality applications tested on real robots can publicly become easy. The team behind PyRobot hopes that other researchers will find the PyRobot framework useful and contribute to it in the future.
How To Install
- Install Python virtual environment
sudo apt-get -y install python-virtualenv
virtualenv_name="pyenv_pyrobot"
VIRTUALENV_FOLDER=~/${virtualenv_name}
virtualenv --system-site-packages -p python2.7 $VIRTUALENV_FOLDER
- Install PyRobot
cd ~
mkdir -p low_cost_ws/src
cd ~/low_cost_ws/src
source ~/${virtualenv_name}/bin/activate
git clone --recurse-submodules https://github.com/facebookresearch/pyrobot.git
cd pyrobot/
pip install
You can read more about PyRobot here.