Quickstart
Minimal example (create sim, reset, control step, render)
from crazyflow.sim import Sim
import numpy as np
# Minimal sim
sim = Sim()
sim.reset()
# simple state command (n_worlds=1, n_drones=1, 13 state cmd)
cmd = np.zeros((1, 1, 13), dtype=np.float32)
cmd[0, 0, 2] = 0.5 # 0.5m hovering setpoint
sim.state_control(cmd)
sim.step(1) # step one control cycle
sim.render() # opens a MuJoCo window (or render to images)
sim.close()
A slightly more explicit example where you adjust sim settings (control, integrator, physics):
from crazyflow.sim import Sim
from crazyflow.control import Control
from crazyflow.sim.integration import Integrator
from crazyflow.sim.physics import Physics
import numpy as np
sim = Sim(
n_drones=4,
n_worlds=2,
control=Control.state,
integrator=Integrator.rk4,
physics=Physics.first_principles,
drone_model="cf2x_T350",
)
sim.reset()
duration = 5.0
fps = 60
# send a simple state command (shape: n_worlds, n_drones, 13)
cmd = np.zeros((4, 2, 13), dtype=np.float32)
cmd[..., 2] = sim.data.states.pos[..., :3] + 0.5 # 0.5m hovering setpoint
for i in range(int(duration * sim.control_freq)):
sim.state_control(cmd)
sim.step(sim.freq // sim.control_freq)
if ((i * fps) % sim.control_freq) < fps:
sim.render()
sim.close()
For the full API and configuration options (Sim args, control helpers, render options), see the API reference: API reference