2个版本

0.1.0-alpha-22021年3月13日
0.1.0-alpha2021年3月3日

#314 in 模拟


2 个仓库中使用(通过 rubullet

MIT 许可证

18MB
763K SLoC

C++ 721K SLoC // 0.0% comments C 33K SLoC // 0.1% comments Lua 4.5K SLoC // 0.1% comments Rust 2K SLoC // 0.0% comments Objective-C 1K SLoC // 0.1% comments Python 660 SLoC // 0.1% comments GLSL 527 SLoC // 0.0% comments Shell 156 SLoC // 0.2% comments Batch 115 SLoC Automake 89 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 等更多

GitHub Workflow Status crates.io crates.io crates.io docs.rs

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的外部函数接口。

无运行时依赖