2个版本
0.1.0-alpha-2 | 2021年3月13日 |
---|---|
0.1.0-alpha | 2021年3月3日 |
#314 in 模拟
在 2 个仓库中使用(通过 rubullet)
18MB
763K SLoC
包含 (DOS可执行文件,1.5MB) bullet3/libbullet3/build3/premake5.exe,(DOS可执行文件,285KB) bullet3/libbullet3/build3/premake4.exe,(ELF可执行文件/库,380KB) bullet3/libbullet3/build3/premake4_arm64,(ELF可执行文件/库,285KB) bullet3/libbullet3/build3/premake4_linux,(ELF可执行文件/库,395KB) premake4_linux64,(Mach-o可执行文件,410KB) bullet3/libbullet3/build3/premake4_osx 等更多。
RuBullet
RuBullet是PyBullet的Rust实现。换句话说,它使用Bullet3的C API来公开与PyBullet类似的功能。开发正在进行中,功能目前有限。
状态
目前RuBullet应该覆盖大多数基本用例。它可以
- 在Direct、Gui或其他模式下创建PhysicsClient
- 从URDF、SDF、MuJoCo或Bullet文件加载模型
- 在模拟中创建自己的模型
- 以位置、速度或扭矩模式控制机器人
- 计算逆动力学、逆运动学、雅可比和质心矩阵
- 渲染相机图像
- 读取关于链接和关节的信息
- 更改物体的动力学
- 创建GUI滑块、按钮或将调试文本或线条放入模拟
- 获取键盘和鼠标事件
- 创建和管理约束
- 日志记录
- 保存状态和加载状态
- 设置物理引擎参数
- 碰撞检测查询
- 可变形体和布料
尚未实现的事物
- 所有与MultiDOF相关的事物
- 虚拟现实
- 插件
API是不稳定的,可能会更改。
示例
use std::{thread, time::Duration};
use anyhow::Result;
use nalgebra::{Isometry3, Vector3};
use rubullet::*;
fn main() -> Result<()> {
let mut physics_client = PhysicsClient::connect(Mode::Gui)?;
physics_client.set_additional_search_path("../rubullet-sys/bullet3/libbullet3/data")?;
physics_client.set_gravity(Vector3::new(0.0, 0.0, -10.0));
let _plane_id = physics_client.load_urdf("plane.urdf", Default::default())?;
let cube_start_position = Isometry3::translation(0.0, 0.0, 1.0);
let box_id = physics_client.load_urdf(
"r2d2.urdf",
UrdfOptions {
base_transform: cube_start_position,
..Default::default()
},
)?;
for _ in 0..10000 {
physics_client.step_simulation()?;
thread::sleep(Duration::from_micros(4167));
}
let cube_transform = physics_client.get_base_transform(box_id)?;
println!("{}", cube_transform);
Ok(())
}
错误报告和合并请求
当前开发是作为marcbone硕士论文的一部分进行的。因此,直到2021年7月5日,不接受合并请求。我们将在此期间禁用合并请求,遗憾的是,这也将禁用问题。如果您发现任何错误或提出建议,请给维护者发送电子邮件。
许可协议
RuBullet遵循MIT协议
lib.rs
:
Bullet C API的外部函数接口。