rubullet 0.1.0-alpha-3

Rust interface to the Bullet Physics SDK simmilar to PyBullet
Documentation
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.load_urdf(
        "plane.urdf",
        UrdfOptions {
            use_maximal_coordinates: Some(false),
            ..Default::default()
        },
    )?;
    physics_client.load_urdf(
        "cube.urdf",
        UrdfOptions {
            base_transform: Isometry3::translation(0., 0., 1.),
            use_maximal_coordinates: Some(false),
            ..Default::default()
        },
    )?;
    physics_client.set_gravity([0., 3., -10.]);
    loop {
        physics_client.step_simulation()?;
        let pts = physics_client.get_contact_points(None, None, None, None)?;
        let mut total_normal_force = 0.;
        let mut total_lateral_friction_force = Vector3::zeros();
        for pt in pts.iter() {
            total_normal_force += pt.normal_force.unwrap();
            total_lateral_friction_force += pt.lateral_friction_1 + pt.lateral_friction_2;
        }
        println!("total_normal_force = {}", total_normal_force);
        println!(
            "total_lateral_friction_force = {}",
            total_lateral_friction_force
        );
    }
}