#mujoco #bevy #robotics #physics #physics-simulation

bevy_mujoco

在bevy中使用MuJoCo物理和MCJF/URDF场景

8个版本 (4个重大变更)

0.14.0 2024年7月5日
0.14.0-rc.12024年7月1日
0.13.0 2024年4月2日
0.12.0 2023年11月5日
0.0.2 2022年12月26日

#52 in Simulation

Download history 76/week @ 2024-06-26 178/week @ 2024-07-03 8/week @ 2024-07-10 9/week @ 2024-07-24 71/week @ 2024-07-31

每月80次下载

MIT/Apache

38KB
494

Bevy MuJoCo

Crates.io MIT/Apache 2.0 Crates.io Rust

https://user-images.githubusercontent.com/97428129/210613348-82a5e59d-96af-42a9-a94a-c47093eb8297.mp4

将MJCF文件导入Bevy,并使用MuJoCo运行仿真。

实现说明

MuJoCo有两种模式,具有不同的坐标系用于体

  1. paused 模式,其中所有平移和旋转都是从 mj_ModelMuJoCo-Rust 中提取的,作为 body.posbody.quat 在父体的坐标系中。为了让它们与bevy很好地协同工作,mujoco的体结构必须通过 body_tree() 调整为树结构。然后递归地生成 body_tree 到bevy世界中——这是一个在 setup_mujoco 中完成的绝妙装置。

  2. simulation 模式,其中平移是从 sim.xpos()sim.xquat() 中提取的——这次它们位于全局框架中。由于体是按层次结构生成的,因此需要将平移和旋转转换为父坐标系——这发生在 simulate_physics 中。

入门指南

MuJoCo依赖项

  • MuJoCo 2.3.5已安装于Linux的 ~/.local/mujoco 或Windows的 C:/Program Files/Mujoco
  • nightly Rust。使用 cargo +nightly build 编译

用法

// 1. Import bevy_mujoco
use bevy_mujoco::*;
// 2. Setup bevy_mujoco Plugin. MuJoCo Plugin would spawn entities to the world
fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .insert_resource(MuJoCoPluginSettings {
            model_xml_path: "assets/unitree_a1/scene.xml".to_string(),
            pause_simulation: false,
            target_fps: 600.0, // this is not actual fps (bug in bevy_mujoco),
                               // the bigger the value, the slower the simulation
        })
        .add_plugins(MuJoCoPlugin)
        .add_systems(Startup, setup)
        .add_systems(Update, robot_control_loop)
        .run();
}
// 3. You can control your robots here
fn robot_control_loop(mut mujoco_resources: ResMut<MuJoCoResources>) {
    // prepare simulation data for the NN
    let qpos = mujoco_resources.state.qpos.clone();
    let qvel = mujoco_resources.state.qvel.clone();
    let cfrc_ext = mujoco_resources.state.cfrc_ext.clone();

    // Compute input -> control values here and fill control
    // ...
    let mut control: Vec<f32> = Vec::new();

    mujoco_resources.control.data = input_vec;
}

将build.rs复制到项目的根目录,以便在Windows环境中使用。它将mujoco.dll复制到应用程序的构建目录

要运行测试和示例,请使用以下命令初始化 mujoco_menagerie 子模块

cd bevy_mujoco
git submodule init
git submodule update

查看示例,以模拟Unitree A1机器人。

依赖关系

~22–37MB
~558K SLoC