bevy_urdf

A Bevy plugin for importing robots from URDF files and running physics simulations. Ground vehicles use Rapier physics, while drones are simulated using integrated dynamics models.
Bevy URDF Plugin
A Bevy plugin for loading and simulating robots from URDF files.
Installation
[dependencies]
bevy_urdf = "0.4"
Setup
use bevy::prelude::*;
use bevy_urdf::{UrdfPlugin, StlPlugin, ObjPlugin};
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins((UrdfPlugin, StlPlugin, ObjPlugin))
.run();
}
Loading Robots
use bevy_urdf::{LoadRobot, RobotLoaded, SpawnRobot, RobotType};
fn setup(mut load_robot_events: EventWriter<LoadRobot>) {
load_robot_events.send(LoadRobot {
urdf_path: "robots/robot.urdf".to_string(),
mesh_dir: "assets/robots".to_string(),
});
}
fn spawn_robot(
mut robot_loaded_events: EventReader<RobotLoaded>,
mut spawn_robot_events: EventWriter<SpawnRobot>,
) {
for event in robot_loaded_events.read() {
spawn_robot_events.send(SpawnRobot {
handle: event.handle.clone(),
mesh_dir: event.mesh_dir.clone(),
robot_type: RobotType::NotDrone, });
}
}
Control Events
Motor Velocities (ground robots)
ControlMotorVelocities {
handle: robot_handle,
velocities: vec![1.0, -1.0, 0.5],
}
Motor Positions (manipulators)
ControlMotorPositions {
handle: robot_handle,
positions: vec![0.5, 1.2, -0.3],
motor_props: motor_properties,
}
Thrusts (drones)
ControlThrusts {
handle: robot_handle,
thrusts: vec![10.0, 10.0, 10.0, 10.0],
}
Sensor Reading
SensorsRead {
handle: robot_handle,
transforms: link_transforms,
joint_angles: current_angles,
}
URDF Requirements
- Use relative mesh paths:
meshes/part.stl
- Remove
package:// URIs
- Remove Gazebo-specific elements
- Support STL and OBJ mesh formats only
Examples
cargo run --example uav --release
cargo run --example uuv --release
cargo run --example quadruped --release
cargo run --example manipulator --release