8个版本 (4个重大变更)
0.14.0 | 2024年7月5日 |
---|---|
0.14.0-rc.1 | 2024年7月1日 |
0.13.0 | 2024年4月2日 |
0.12.0 | 2023年11月5日 |
0.0.2 | 2022年12月26日 |
#52 in Simulation
每月80次下载
38KB
494 行
Bevy MuJoCo
将MJCF文件导入Bevy,并使用MuJoCo运行仿真。
实现说明
MuJoCo有两种模式,具有不同的坐标系用于体
-
paused
模式,其中所有平移和旋转都是从mj_Model
在MuJoCo-Rust
中提取的,作为body.pos
,body.quat
在父体的坐标系中。为了让它们与bevy很好地协同工作,mujoco的体结构必须通过body_tree()
调整为树结构。然后递归地生成body_tree
到bevy世界中——这是一个在setup_mujoco
中完成的绝妙装置。 -
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