【大作业】TaichiGAME: GPU Accelerated Motion Engine based on Taichi Lang

Overview

TaichiGAME is aim to become a lightweight simulation engine in motion planning and control research fields. And it is written in python and taichi, which combines the traditional numerical methods for solving rigid dynamics equations, model parameters derivation, with parallel implementation capabilites in order to maximize scientists’ productivity.

Motivation

I am a postgraduate in school of astronautics and major in aerospace robot guidance, navigation and control. During my first year, I took a class on advanced control theory and was taught many different control algorithms for estimating dynamic model, fitting state curves and so on.

When I carried out a research on asteroid rover motion planning supported by NFSC(National Natural Science Foundation of China), I spent lots of time on learning c++ for writing parallel program to solve complex rigid body dynamics equations. To be honest, achieving all of the details, especially some c++ advanced features, made me thoroughly exhausted. I could not just focus on the algorithms and built rapid prototype to verify it. I thought others feel the same way. After that, I searched online and found no open source, scientific-oriented, out-of-the-box tools or framework to execute such high performance rigid body motion computing. In that case, why not build one? The result of that desire is this project.

Feature

NOTE: Due to my research is still under review and revise, I could not release all results now. At present, I only release the initial physics engine component of TaichiGAME. So I only introduce physics engine component now. In the first half of 2022, I will release other components of TaichiGAME.

As the chart below illustrates, the physics component of TaichiGAME can divide into three layers. The top layer contains abstract design of all modules. The middle layer provides all call interfaces for computing such as shape of body, joint and so on. The bottom layer contains multiple data structures, collision detection algorithms to support the middle layer.

NOTE: open above picture in a new window to browse the larger one

Simulation result

  1. dbvt query: this frame is aim to show the dbvt’s ability to accelerate the broad phase query of collision. The red rectangle represents the query region, yellow rectangles represent the query results(AABB of the shape).
    dbvt_query

  2. raycast: this frame casts a ray in given direction. You can move the cast direction by mouse, and the cast shapes are rendered in cyan color.
    raycast

  3. bitmask: this frame shows two objects, a square and a ground, are with same bitmask property can contact with each other. In addition, the yellow rectangles represent the real time update result of dbvt.
    bitmask

  4. collision: those frames show multiple collision examples. First one is a simple collision, second frame shows eight balls hit the ground with different restitution increased from left to right, the last one shows the three squares slide down from slopes with different friction coefficient.
    collision_simple
    collision_restit
    collision_fric

  5. stack: this frame shows a free fall square stack. You can apply mouse joint constraint to the shape.
    stack

  6. domino: this frame shows a pendulum strike a domino card and trigger a ripple collison. The surface of ground and slopes are both smooth, so the card can not stay static on it.
    domino

If you want to get MORE detailed introduction, you can visit the TaichiGAME’s github repository:

11 个赞