4 releases
0.0.4 | Mar 23, 2025 |
---|---|
0.0.3 | Mar 22, 2025 |
0.0.2 | Mar 22, 2025 |
0.0.1 | Mar 21, 2025 |
#451 in Game dev
326 downloads per month
7.5MB
456 lines
bevy_urdf
Import robots from URDF files and run simulation with rapier.
API
- Add Urdf and Stl plugins to bevy app
UrdfPlugin,
StlPlugin,
- Load robot in your startup systems
fn setup(mut ew_load_robot: EventWriter<LoadRobot>,) {
...
ew_load_robot.send(LoadRobot {
urdf_path: "robots/flamingo_edu/urdf/Edu_v4.urdf".to_string(),
mesh_dir: "assets/robots/flamingo_edu/urdf".to_string(),
});
...
}
- Subscribe to loaded event and emit spawn event
fn start_simulation(
mut er_robot_loaded: EventReader<RobotLoaded>,
mut ew_spawn_robot: EventWriter<SpawnRobot>,
mut state: ResMut<NextState<AppState>>,
) {
for event in er_robot_loaded.read() {
ew_spawn_robot.send(SpawnRobot {
handle: event.handle.clone(),
mesh_dir: event.mesh_dir.clone(),
});
state.set(AppState::Simulation);
}
}
Events
Read sensors and control motors through events:
#[derive(Event)]
pub struct SensorsRead {
pub handle: Handle<UrdfAsset>,
pub transforms: Vec<Transform>,
pub joint_angles: Vec<f32>,
}
#[derive(Event)]
pub struct ControlMotors {
pub handle: Handle<UrdfAsset>,
pub velocities: Vec<f32>,
}
Limitations
You may need to hand-inspect urdf files to ensure mesh links are relative to urdf file. package://
and links and gazebo nodes are not supported.
Dependencies
~64–100MB
~2M SLoC