Skip to content

[logo] BulletLab

Developed by Ranasurya Ghosh

A high-level robotics simulation and experimentation framework built on PyBullet.

BulletLab provides a high-level object-oriented interface to PyBullet that simplifies robotics experimentation by exposing joints, links, sensors, and environments as intuitive Python objects instead of raw physics engine IDs. It combines real-time simulation with a Dear ImGui-powered modern interface for interactive control, parameter tuning, telemetry visualization, and experiment management, while also offering reinforcement learning integration for training and evaluating autonomous robotic systems within a unified workflow.

Why BulletLab?

Without BulletLab

With BulletLab

p.setJointMotorControl2(robot_id, i, p.VELOCITY_CONTROL, ...) robot.joints["motor"].velocity = 15
p.changeDynamics(robot_id, i, mass=5) robot.links["wheel"].mass = 5
p.getBasePositionAndOrientation(...) robot.base_position
Complex IDs everywhere Named Python objects

Key Features

  • ⚡ One-Line Model Deployment (quickLaunch) — deploy and inspect any model (local URDF or Arsenal package) with a single line of code, complete with interactive 3-mode joint controls, telemetry, and camera tracking
  • Object-oriented robot interface — joints and links as Python objects
  • Dear ImGui control window — modern interface, separate from PyBullet visualization
  • Interactive UI Console — live test API calls, script sequential movements, and register custom commands
  • BulletLab Arsenal — built-in model registry to seamlessly download and spawn high-quality robots on the fly
  • Live telemetry — watch any robot state variable
  • Data logging — CSV and JSON output
  • Live plots — ImPlot-powered real-time charts
  • RL-ready — clean state/action interface, no ML framework required
  • Generic — works with any URDF or MJCF robot

Quick Start

Instant Deployment (quickLaunch)

Deploy any robot model in a full interactive simulation with rich UI controls in just one line:

import bulletlab

# Deploy a built-in URDF or local file
bulletlab.quickLaunch("kuka_iiwa/model.urdf")

# Or deploy directly from BulletLab Arsenal
bulletlab.quickLaunch("arsenal:reference_bot")

Custom Simulation Script

from bulletlab import Simulation, Robot

sim = Simulation()
sim.start()

robot = Robot.load("kuka_iiwa/model.urdf", sim=sim)

# Control by name
robot.joints["iiwa_joint_1"].set_position(1.0)
robot.links["iiwa_link_0"].mass = 5.0

while True:
    sim.step()

Installation

pip install bulletlab

Or from source:

git clone https://github.com/NuclearVenom/BulletLab.git
cd BulletLab
pip install -e ".[dev]"