unitree_mujoco/terrain_tool/readme_zh.md

120 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 地形生成工具
## 使用
1. 首先安装依赖
```bash
pip3 install noise opencv-python numpy
```
2. 打开 terrain_generator.py 修改开头的配置,这里以 Go2 机器人为例
```python
# 机器人目录
ROBOT = "go2"
# 输入的场景文件
INPUT_SCENE_PATH = "./scene.xml"
# 输出的
OUTPUT_SCENE_PATH = "../unitree_robots/" + ROBOT + "/scene_terrain.xml"
```
3. 运行
```bash
cd terrain_tool
python3 ./terrain_generator.py
```
程序将输出地形场景文件到`/unitree_robots/go2/scene_terrain.xml`。接着可以修改仿真器的配置文件`simulate/config.yaml`,将场景改为刚刚生成的 `scene_terrain.xml`:
```yaml
robot_scene: "scene_terrain.xml"
```
如果使用的是基于 python 的仿真器,则修改`simulate_python/config.py`
```python
ROBOT_SCENE = "../unitree_robots/" + ROBOT + "/scene_terrain.xml"
```
之后运行 unitree_mujoco 仿真器,可以看到所生成的地形。
# 函数解释
用户可以利用 `terrain_generator.py` 自行添加所需的地形,以下是函数解释。
##### 1. `AddBox`
添加立方体,参数:
``` python
position=[1.0, 0.0, 0.0] # 中心位置
euler=[0.0, 0.0, 0.0] # 姿态
size=[0.1, 0.1, 0.1] # 尺寸,长宽高
```
##### 2. `AddGeometry`
添加几何体, 参数:
``` python
position=[1.0, 0.0, 0.0] # 中心位置
euler=[0.0, 0.0, 0.0] # 姿态
size=[0.1, 0.1, 0.1] # 尺寸,部分几何体只需要用到前两个参数
geo_type="cylinder" # 几何体类型,支持"plane", "sphere", "capsule", "ellipsoid", "cylinder", "box"
```
##### 3. `AddStairs`
添加楼梯,参数:
```python
init_pos=[1.0, 0.0, 0.0] # 靠近地面的台阶的位置
yaw=0.0 # 楼梯朝向
width=0.2 # 台阶宽度
height=0.15 # 台阶高度
length=1.5 # 台阶长度
stair_nums=10 #台阶数量
```
##### 4. `AddSuspendStairs`
添加悬浮楼梯,参数:
```python
init_pos=[1.0, 0.0, 0.0] # 靠近地面的台阶的位置
yaw=0.0 # 楼梯朝向
width=0.2 # 台阶宽度
height=0.15 # 台阶高度
length=1.5 # 台阶长度
gap=0.1 # 悬浮间隙
stair_nums=10 # 台阶数量
```
##### 5. `AddRoughGround`
添加杂乱地形,通过随机排列立方体实现杂乱的地形,参数:
```python
init_pos=[1.0, 0.0, 0.0] # 第一个立方体的位置
euler=[0.0, -0.0, 0.0], # 地形相对于世界的欧拉角
nums=[10, 10], # 在 x 和 y 方向上的立方体个数
box_size=[0.5, 0.5, 0.5], # 立方体的尺寸
box_euler=[0.0, 0.0, 0.0], # 立方体的姿态
separation=[0.2, 0.2], # 立方体在 x 和 y 方向上的间隔
box_size_rand=[0.05, 0.05, 0.05], # 立方体尺寸的随机增量
box_euler_rand=[0.2, 0.2, 0.2], # 立方体姿态的随机增量
separation_rand=[0.05, 0.05] # 立方体间隔的随机增量
```
##### 6.`AddPerlinHeighField`
基于 Perlin 噪声生成高程图地形,参数:
```python
position=[1.0, 0.0, 0.0], # 地形中心位置
euler=[0.0, -0.0, 0.0], # 地形相对于世界的欧拉角
size=[1.0, 1.0], # 地形长宽
height_scale=0.2, # 地形最大高度
negative_height=0.2, # z 轴负方向高度
image_width=128, # 地形高程图像素尺寸
img_height=128,
smooth=100.0, # 噪声平滑度
perlin_octaves=6 # Perlin 噪声参数
perlin_persistence=0.5
perlin_lacunarity=2.0
output_hfield_image="height_field.png" # 输出的高程图名称
```
##### 7. `AddHeighFieldFromImage`
基于给定的图像生成地形
```python
position=[1.0, 0.0, 0.0] # 地形中心位置
euler=[0.0, -0.0, 0.0], # 地形相对于世界的欧拉角
size=[2.0, 1.6], # 地形长宽
height_scale=0.02, # 地形最大高度
negative_height=0.1, # z 轴负方向高度
input_img="./unitree_robot.jpeg" # 输入的图像路径
output_hfield_image="height_field.png", # 输出的高程图名称
image_scale=[1.0, 1.0], # 缩放图像比例
invert_gray=False # 反转像素
```