Skip to content

raisim::DeformableTerrain ​

final class · #include <raisim/object/terrain/DeformableTerrain.hpp>

Inherits: raisim::HeightMap

A triangulated soil surface with no particles or soil inertia. The surface deforms along its local +Z axis. Bekker pressure-sinkage and elastic unloading describe a calibrated soil bed; this is a surface terramechanics model, not a volumetric FEM or an excavation model. Contacts are area quadrature samples coupled implicitly to rigid/articulated dynamics. The mesh spacing controls spatial accuracy; pressure and forces are independent of the number of contact rows. Create with World::addDeformableTerrain(). Rendering and ray queries use the deformed mesh.

Nested classes ​

  • struct Material
  • struct State
  • struct StepStats — Counters of the last step. contacts counts the quadrature rows near bodies, including rows that the body has not loaded. contactArea (m^2) and normalForce (N) cover the loaded rows.

Constructors & destructor ​

DeformableTerrain ​

cpp
DeformableTerrain(
    size_t xSamples,
    size_t ySamples,
    double xSize,
    double ySize,
    double centerX,
    double centerY,
    const std::vector<double> &heights,
    const Material &material)

Public member functions ​

getSoilMaterial ​

cpp
const Material &getSoilMaterial() const

getUndeformedHeights ​

cpp
const std::vector<double> &getUndeformedHeights() const

getSoilState ​

cpp
const State &getSoilState() const

getSoilStepStats ​

cpp
const StepStats &getSoilStepStats() const

setSoilState ​

cpp
void setSoilState(const State &state)

Restore a validated state and synchronize the collision/render mesh. Throws on bad input.

resetSoil ​

cpp
void resetSoil()

setBodyType ​

cpp
void setBodyType(BodyType type) override

Soil is a fixed bed. Its frame may be placed between steps, but cannot move dynamically.

pressure ​

cpp
double pressure(
    double sinkage,
    double plasticSinkage,
    double contactWidth) const

Constitutive pressure without viscosity (Pa). Width is the narrowest projected footprint width.

Inherited members ​

From raisim::HeightMap: destroyCollisionBodies, getCenterX, getCenterY, getColor, getColorMap, getContactHeight, getContactHeightVector, getHeight, getHeightMap, getHeightRowRevisions, getHeightVector, getNormal, getVisualDirtyRegion, getXSamples, getXSize, getYSamples, getYSize, hasVisualHeightUpdate, init, isUpdated, setColor, setColorPatch, setOrientation, setPosition, setUpdatedFalse, update, updateCollision, updateContactAabbs, updateVisualHeight, updateVisualHeightPatch

From raisim::SingleBodyObject: clearExternalForcesAndTorques, getAngularVelocity, getAppearance, getBodyToComPosition_rs, getCollisionBody, getCollisionGroup, getCollisionMask, getCom, getComPosition, getComPosition_rs, getContactPointVel, getDOF, getEnergy, getGeneralizedCoordinateDim, getGyroscopicMode, getInertiaMatrix_B, getInertiaMatrix_B_rs, getInertiaMatrix_W, getInertiaMatrix_W_rs, getKineticEnergy, getLinearMomentum, getLinearVelocity, getMass, getObjectType, getOrientation, getPosition, getPotentialEnergy, getQuaternion, getRotationMatrix, getVelocity, integrate, preContactSolverUpdate1, preContactSolverUpdate2, setAngularDamping, setAngularVelocity, setAppearance, setCom, setConstraintForce, setExternalForce, setExternalTorque, setGyroscopicMode, setInertia, setLinearDamping, setLinearVelocity, setMass, setOrientation, setPose, setPosition, setVelocity

From raisim::Object: addContactToPerObjectContact, clearPerObjectContact, getBodyType, getContactAabb, getContactAabbCount, getContacts, getExternalForce, getExternalForcePosition, getExternalTorque, getExternalTorquePosition, getId, getIndexInWorld, getName, getRenderRevision, Id, lock, lockMutex, setIndexInWorld, setName, try_lock, unlock, unlockMutex

RaiSim — physics for robotics and AI.