Skip to content

Commit

Permalink
update wiki about deformation engine
Browse files Browse the repository at this point in the history
  • Loading branch information
jnskkmhr committed Sep 14, 2024
1 parent 8a73495 commit eb1716a
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 42 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ requires-python = ">=3.10"
keywords = ["lunar", "simulator", "rover", "locomotion", "IsaacSim"]
authors = [
{ name = "Antoine Richard", email = "antoine.richard@uni.lu" },
{ name = "Junnosuke Kamohara", email = "xxx@gatech.edu" },
{ name = "Junnosuke Kamohara", email = "jkamohara3@gatech.edu" },
]

dependencies = [
Expand Down
103 changes: 63 additions & 40 deletions wiki/deformation_engine/DeformationEngine.md
Original file line number Diff line number Diff line change
@@ -1,85 +1,108 @@
# Deformation Engine

> [!WARNING]
> This wiki page is under construction
<center>
<img src="..//media/deformation_engine_img/deformation.png" width=500>
</center>

Here, the docs gives a brief explanation of deformation engine plugin. \
In hydra cfg file (see `cfg/environment/**.yaml`), you have specific lines for terrain deformation.

```yaml
deformation_engine:
enable: True
render_deform_inv: 10
delay: 2.0 # how many frames to hold before you apply deformation
terrain_width: ${....lunaryard_settings.lab_width}
terrain_height: ${....lunaryard_settings.lab_length}
terrain_resolution: ${....lunaryard_settings.resolution}
gravity: [0, 0, -49.0] #mg
force_depth_slope: 0.00014
force_depth_intercept: 0.008
wheel_params:
wheel_width: 0.09
wheel_radius: 0.1
deform_constraint:
deform_offset: 0.0
num_links: 4 # num_robots * num_target_links
footprint:
width: 0.25
height: 0.1
deform_constrain:
x_deform_offset: 0.0
y_deform_offset: 0.0
deform_decay_ratio: 0.01
force_distribution:
depth_distribution:
distribution: sinusoidal
wave_frequency: 2.0
wave_frequency: 4.14 # num_grouser/pi (no slip)
boundary_distribution:
distribution: trapezoidal
angle_of_repose: 1.047
angle_of_repose: 1.047 #pi/3
force_depth_regression:
amplitude_slope: 0.00006
amplitude_intercept: 0.008
mean_slope: -0.00046
mean_intercept: -0.0013
```
## Wheel parameters
You must specify the dimension of your wheels in meter.
## Footprint
This configuration specifies the dimensions of the robot's footprint. \
For now, we assume the footprint is rectangular since we are primarily focused on wheeled robots. \
Height and width correspond to the dimensions along the x and y axes (the robot's forward direction is along the x-axis).
```yaml
wheel_params:
wheel_width: 0.09
wheel_radius: 0.1
footprint:
width: 0.25
height: 0.1
```
### Deformation Constraint
Here you will specify parameter for constraint. \
`deform_offsest` is the distance between wheel origin and the center of deformation profile. \
`deform_decay_ratio` is decaying parameter of deformation. \
This is to limit deformation depth as rover traverse the same place many times.
### Deform Constraint
Here, you will specify the parameters for the constraint. \
`*_deform_offsest` refers to the distance between the projected wheel origin and the center of the deformation profile. \
`deform_decay_ratio` is the decay parameter for deformation. \
This is used to limit the deformation depth as the rover traverses the same location multiple times. \
Given the number of traversals $t$, the actual deformation value will be multiplied by scale factor $\text{ratio}^t$.
```yaml
deform_constraint:
deform_offset: 0.0
deform_constrain:
x_deform_offset: 0.0
y_deform_offset: 0.0
deform_decay_ratio: 0.01
```

## Force Distribution
Controls distribution of force over wheel footprint.
You have two options for this.
## Depth Distribution
This controls the xz distribution of the deformation profile.\
You have three options: uniform, sinusoidal, and trapezoidal.\
Typically, if your wheel has grousers, the wheel trace will exhibit a sinusoidal pattern.\
If your wheel has no grousers, the wheel trace is usually uniform.\
If the sand is cohesive, the trace tends to resemble a trapezoidal shape.

```yaml
force_distribution:
distribution: uniform
```

```yaml
---
force_distribution:
distribution: sinusoidal
wave_frequency: 2.0
---
force_distribution:
distribution: trapezoidal
wave_frequency: 2.0
```

## Boundary Distribution
Controls boundary shape (y axis vs z axis with FLU convention).
This controls the yz distribution of the deformation profile.\
The angle of repose is determined by the type of sand being used.

```yaml
boundary_distribution:
distribution: uniform
```

```yaml
---
boundary_distribution:
distribution: parabolic
```

```yaml
---
boundary_distribution:
distribution: trapezoidal
angle_of_repose: 1.047
```

## Force depth regression
To compute deformation depth from the contact force, we use a linear model.\
Each coefficient is determined by linear regression using DEM simulation data.\
Note that this model is quite simple, and it will be necessary to develop a higher-dimensional model for more accurate depth computation.

```yaml
force_depth_regression:
amplitude_slope: 0.00006
amplitude_intercept: 0.008
mean_slope: -0.00046
mean_intercept: -0.0013
```
2 changes: 1 addition & 1 deletion wiki/deformation_engine/_Footer.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Antoine Richard -- University of Luxembourg -- Space Robotics Group -- 2023-24
Junnosuke Kamohara -- Georgia Institute of Technology -- 2023-24 -- Work done while he was in Space Robotics Lab in Japan.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit eb1716a

Please sign in to comment.