配置动态随机环境#
动态、随机且拥挤的环境非常适合测试导航与避障算法。在该环境中,每个回合的障碍物分布、目标位置与几何形状都会随机变化。
随机障碍物配置参数#
import irsim
env = irsim.make()
for i in range(1000):
env.step()
env.render(0.05)
if env.done():
break
env.end()
world:
height: 50 # the height of the world
width: 50 # the width of the world
control_mode: 'keyboard'
robot:
- kinematics: {name: 'acker'}
shape: {name: 'rectangle', length: 4.6, width: 1.6, wheelbase: 3}
state: [5, 5, 0, 0]
goal: [40, 40, 0]
vel_max: [4, 1]
sensors:
- name: 'lidar2d'
range_min: 0
range_max: 20
angle_range: 3.14
number: 100
plot:
show_trajectory: True
obstacle:
- number: 20
kinematics: {name: 'omni'}
distribution: {name: 'random', range_low: [10, 10, -3.14], range_high: [40, 40, 3.14]}
behavior: {name: 'rvo', wander: True, range_low: [10, 10, -3.14], range_high: [40, 40, 3.14], vxmax: 2, vymax: 2, factor: 3.0}
vel_max: [4, 4]
vel_min: [-4, -4]
shape:
- {name: 'circle', radius: 1.0, random_shape: True}
- {name: 'polygon', random_shape: true, avg_radius_range: [0.5, 2.0], irregularity_range: [0, 0.4], spikeyness_range: [0, 0.4], num_vertices_range: [4, 6]}
关键参数说明#
生成不同形状随机障碍物所需的参数位于 obstacle 部分的 behavior、distribution 与 shape 设置。
若使用
rvo行为,可将wander设为True,使障碍物到达目标后继续随机移动;rvo还可用于障碍物之间的避碰。range_low与range_high则决定障碍物目标位置的随机范围。当
distribution的 name 为random时,可在指定区域内随机生成障碍物。range_low和range_high控制障碍物初始位置的随机范围。在
shape参数中将random_shape设为True,即可随机生成障碍物的形状。圆形障碍物的
radius会在radius_range内随机生成。对于多边形障碍物,
avg_radius_range、irregularity_range、num_vertices_range与spikeyness_range决定生成的多边形类型。详情参见 random_generate_polygon。
更多参数细节见 YAML 配置。
小技巧
如需生成凸多边形,可将 spikeyness_range 设为 [0, 0],或将 is_convex 设为 True。