YAML配置语法#
配置文件是一个用于初始化环境的 YAML 文件。它包含用于模拟和可视化世界、障碍物和机器人的配置参数。使用者可以通过使用这些参数简单地自定义场景并定义对象的行为。
参数快速参考#
使用此导航快速跳转到特定参数部分:
World 参数
-
name,height,width,step_time,sample_time,offset
-
control_mode,collision_mode,status
-
obstacle_map,mdownsample
-
plot
Object 参数
-
number,distribution,state,goal,velocity,state_dim,vel_dim,group,name
-
kinematics,vel_min,vel_max,acce,angle_range,goal_threshold
-
shape
-
behavior,group_behavior,role,static,
-
sensors,fov,fov_radius
-
goal(float列表或列表的列表,默认None)
-
color,plot,description
可视化界面参数
-
backend,global_hook,key_lv_max,key_ang_max,key_lv,key_ang,key_id
-
zoom_factor
快速上手
配置的内容主要分为三部分: world, robot, and obstacle. 下面是个建立的示例:`
world:
height: 10 # the height of the world
width: 10 # the width of the world
step_time: 0.1 # 10Hz calculate each step
sample_time: 0.1 # 10 Hz for render and data extraction
offset: [0, 0] # the offset of the world on x and y
collision_mode: 'stop' # 'stop', 'unobstructed', 'unobstructed_obstacles'
plot:
show_title: true
figure_pixels: [1000, 800]
robot:
- kinematics: {name: 'diff'} # omni, diff, acker
shape: {name: 'circle', radius: 0.2} # radius
# shape: {name: 'rectangle', length: 0.5, width: 0.2} # radius
state: [1, 1, 0]
goal: [9, 9, 0]
# acce: [3, .inf] # acce of [linear, angular] or [v_x, v_y] or [linear, steer]
behavior: {name: 'dash'} # move toward to the goal directly
obstacle:
- number: 10
distribution: {name: 'random'}
shape:
- {name: 'circle', radius: 1.0} # radius
- {name: 'rectangle', length: 1.5, width: 1.2} # radius
state:
- [5, 5, 0]
- [4, 4, 0]
- shape: {name: 'rectangle', length: 1.5, width: 1.2} # radius
state: [6, 5, 1]
- shape: {name: 'linestring', vertices: [[5, 5], [4, 0], [1, 6]] } # vertices
state: [0, 0, 0]
unobstructed: True
重要
关键内容配置指南
要在配置文件中包含多个机器人或障碍物,请在 robot 和 obstacle 部分下添加单独的条目,并使用
-标记每个添加的条目。诸如分布、形状、行为和运动学等参数必须格式化为
{key: value}对。请确保每个字典都包含name键;省略 name 将导致该参数的值为 None。当处理多个对象(即数量大于 1)时,利用
distribution参数来定义这些对象的摆放位置的分布方式。默认情况下,同一组内的所有对象共享相同的配置。要自定义组内的单个对象,请使用
-添加子参数。任何未显式配置的额外对象将继承组中最后一个指定对象的设置。对象级别的
name是可选的,用于标识每个对象。如果省略,默认为"<role>_<id>"(例如robot_0,obstacle_3)。名称在所有对象中必须是唯一的;重复的名称会在环境初始化期间引发错误。不要将对象级别的name与shape、kinematics或behavior等字典中使用的name键(表示组件类型)混淆。
World 配置#
本节介绍 world 区块可用的配置参数。
World 参数表#
参数 |
类型 |
默认值 |
说明 |
|---|---|---|---|
|
|
|
世界名称 |
|
|
|
长(米) |
|
|
|
世界的宽 |
|
|
|
决定仿真每一步之间的时间间隔(秒)。 |
|
|
|
渲染和数据提取的采样时间间隔(秒)。如未指定则默认为 |
|
|
|
世界位置在 |
|
|
|
|
|
|
|
发生碰撞的处理模式 (支持: |
|
|
|
仿真环境状态初始化(支持 |
|
|
|
表示障碍物地图的图片文件路径 |
|
|
|
障碍地图的降采样系数,用于降低分辨率并减少计算量。 |
|
|
|
初始化世界图形的绘制选项。 |
参数详解#
world 属性
name(str,默认:"world")定义仿真使用的世界名称,便于区分不同环境。
height(float,默认10)指定世界在屏幕 Y 轴方向的垂直尺寸(米)。
width(float,默认10)指定世界在屏幕 X 轴方向的水平尺寸(米)。
step_time(float,默认0.1)决定仿真每一步之间的时间间隔。
性能影响:
step_time越小仿真频率越高(如 0.1 秒即 10 Hz),但仿真耗时也更长。sample_time(float,默认与step_time相同)定义渲染与数据采集的时间间隔,决定可视化更新与记录的频率。未指定时默认等于
step_time。offset(float列表,默认[0, 0])设置世界在 X、Y 轴上的初始偏移,便于在更大坐标系中定位或相对放置。
world 模式
control_mode(str, 默认:"auto")配置仿真中对象的被控方式:
选项:
auto:通过 Python 脚本中定义的输入速度或 YAML 文件中的行为进行自动控制。keyboard:通过键盘输入进行手动控制。按键输入在文件中定义。
collision_mode(str, 默认:"stop")定义仿真中对象碰撞的处理方式:
选项:
stop:发生碰撞时立即停止(默认)。unobstructed:允许对象彼此穿过,不考虑任何碰撞。unobstructed_obstacles:仅允许障碍物彼此穿过而不考虑碰撞;机器人与障碍物发生碰撞时仍会停止。
status(str, 默认值:"None")设置仿真环境的初始状态:
选项:
"Running":仿真正常运行(默认)。"Pause": 仿真初始状态为暂停。"Arrived": 仿真在机器人到达目标点的时候停止。"Collision": 仿真在机器人与障碍物发生碰撞时停止。
注意:仿真过程中可以通过键盘(空格键)或程序控制动态切换状态。
world 地图
obstacle_map(str(文件路径), 默认值:None)指定障碍地图对应的图像文件路径。该图像用于生成描述世界中障碍位置的栅格地图;图像中的每个像素都对应栅格中的一个栅格,像素的颜色决定该位置是否存在障碍。
可用地图:我们在
irsim/world/map文件夹中提供了一些示例地图;你也可以使用自己的地图,例如来自 HM3D、MatterPort3D、Gibson 等 3D 数据集。更多细节可查看这里。# Example usage obstacle_map: 'hm3d_2.png' # hm3d_1.png, hm3d_2.png, hm3d_3.png, hm3d_4.png, hm3d_5.png, hm3d_6.png, hm3d_7.png, hm3d_8.png, hm3d_9.png, cave.png
mdownsample(int, 默认值:1)设置障碍物地图图像的降采样系数。
提示:更高的取值会降低障碍地图的分辨率,减小计算负载,从而提升仿真性能。
world 可视化
plot(dict, 默认值:{})指定初始化世界绘图时可用的绘制选项。
可视化选项:
saved_figure: 默认dpiis100; 默认格式是png; 默认bbox_inches是tight。详情参考matplotlib.pyplot.savefig。figure_pixels: 图像的像素宽和高,默认值为[1000, 800]。show_title: 是否显示图表标题,默认是True.title:自定义图表标题;若未指定,则显示仿真时间与当前状态。no_axis: 是否显示坐标轴,默认是False。tight: 是否使用紧凑布局,默认是True.viewpoint: 控制相机(视角)的中心位置,默认值为null.null:使用初始的世界边界,不进行自动移动[x, y]:视角始终以固定点[x, y]为中心"<object_name>":跟随该名称的对象进行动态平移,例如"robot_0"。
# Examples plot: viewpoint: [3, 3] # fixed center at (3, 3) # or plot: viewpoint: "robot_0" # follow the object named robot_0
完整世界配置示例#
world:
name: "world" # Name of the world
height: 10 # Height of the world
width: 10 # Width of the world
step_time: 0.1 # Time interval between steps (10 Hz)
sample_time: 0.1 # Time interval for rendering and data extraction (10 Hz)
offset: [0, 0] # Positional offset of the world on the x and y axes
control_mode: 'keyboard' # Control mode ('auto' or 'keyboard')
collision_mode: 'stop' # Collision handling mode ('stop', 'unobstructed', 'unobstructed_obstacles')
obstacle_map: "path/to/map.png" # Path to the obstacle map image file
mdownsample: 2 # Downsampling factor for the obstacle map
status: "Running" # Initial simulation status
plot: # Plotting configuration
show_title: true # Show plot title
title: "Custom Simulation Title" # Custom title (optional)
figure_pixels: [1200, 800] # Figure size in pixels
viewpoint: "robot_0" # Camera center: fixed [x, y], object name, or null
saved_figure: # Figure saving options
dpi: 150 # Resolution for saved figures
format: "png" # File format
警告
obstacle_map:请将 "path/to/map.png" 替换为真实的障碍地图路径,确保图像格式兼容(如PNG、JPEG)且能正确表示障碍位置。
Object 配置#
仿真中的 robot 与 obstacle 都作为对象进行配置,参数结构类似但默认值可能不同。本节介绍这些对象可用的配置项。
Object Parameters Table#
Parameter |
类型 |
Default |
描述 |
|---|---|---|---|
|
|
|
对象的唯一标识符;若省略,则会自动分配为 |
|
|
|
要创建的对象数量。 |
|
|
|
定义多个对象的分布方式。支持的分布方式有: |
|
|
|
对象的运动学模型。支持的模型有 |
|
|
|
对象的几何形状。支持的形状有 |
|
|
|
对象的初始状态向量。 |
|
|
|
初始速度向量。 |
|
|
|
目标状态向量。 |
|
|
|
决定对象运动的行为配置,支持 |
|
|
|
同组对象的群体行为配置,支持 |
|
|
|
对象在仿真中的角色。 |
|
|
|
对象在仿真中的显示颜色。 |
|
|
|
指示对象是否是静态的。 |
|
|
|
各控制维度的最小速度限制。 |
|
|
|
各控制维度的最大速度限制。 |
|
|
|
加速度限制。 |
|
|
|
朝向角的弧度范围。 |
|
|
|
判定到达目标的距离阈值。 |
|
|
|
对象所挂载传感器配置列表,支持 |
|
|
|
到达检测模式。 |
|
|
|
对象的图像描述或标签。 |
|
|
|
用于组织的分组 ID,使对象可以按组管理。 |
|
|
|
指示对象是否忽略碰撞。 |
|
|
|
对象可视化的绘图选项。 |
|
|
|
状态向量维度。 |
|
|
|
速度向量维度。 |
|
|
|
对象传感器的视场角(弧度)。 |
|
|
|
对象传感器的视场半径。 |
参数详解#
object 属性
number— 创建多少个对象distribution— 对象摆放位置分布 (manual,random,circle)state— 初始化位置 ([x, y, θ])goal— 目标位姿 ([x, y, θ])velocity— 初始化速度 ([v, ω],[vx, vy],[v, φ])state_dim— 状态向量维度 (auto: 3 或 4)vel_dim— 速度向量维度 (auto: 2)name— 对象的唯一标识符role— 对象类型(robot、obstacle)
number(int, 默认值:1)指定使用该配置创建的对象数量。
# Example usage robot: - number: 5
distribution(dict, 默认值:{name: manual}) (source)当
number大于1时,定义多个对象在空间中的分布方式。选项:
'manual':手动为每个对象指定初始状态和目标这种模式下必须为每个对象提供
state(或目标)参数;如果提供的列表长度少于对象数量,则最后一个状态(或目标)会被重复使用。
# Example usage distribution: {name: 'manual'} state: [[1, 1, 0], [2, 2, 0], [3, 3, 0]] goal: [[9, 9, 0], [8, 8, 0], [7, 7, 0]]
'random': 在指定范围内随机分布对象。可选参数:range_low(list): 随机分布的下界。默认值为[0, 0, -3.14]range_high(list): 随机分布的上界。默认值为[10, 10, 3.14]
# Example usage distribution: {name: 'random', range_low: [0, 0, -3.14], range_high: [10, 10, 3.14]}
'circle':将对象以圆形阵列排布在指定中心周围。可选参数:center(list): 圆心坐标。默认值为[5, 5, 0]radius(float): 圆的半径。默认值为4.0
# Example usage distribution: {name: 'circle', center: [5, 5, 0], radius: 4.0}
state(float列表, 默认为[0, 0, 0])定义对象的初始状态,通常格式为
[x, y, theta],其中theta表示方向角(弧度)。如果提供的状态元素多于所需,则多余部分会被截断;如果少于所需,缺失值用零填充。# Example usage state: [1.0, 1.0, 0.2]
velocity(由float组成的列表, 默认值为[0, 0])指定对象的初始速度(列表)。格式取决于运动学模型:
运动学模型的格式:
'diff'模型参数由[v, omega]构成, 其中v线速度,omega角速度。'omni'模型参数由[vx, vy]构成, 其中vx和vy分别是x和y轴方向上的速度。'acker'模型参数通常由[v, phi]构成,其中v是线速度,phi是转向角。
# Example usage velocity: [1.0, 0.5]
goal(float列表或float列表的列表,默认值:None)设置对象应移动到的目标状态或位置。与行为结合使用以指导对象导航。格式为
[x, y, theta]或[[x, y, theta], [x, y, theta], ...](用于多个目标)# Example usage - single goal goal: [10.0, 10.0, 0.2]
注意:对于单个对象的多个目标(注意区分多个对象的单个目标与单个对象的多个目标):
# Example usage - multiple goals goal: - [[10.0, 10.0, 0.2], [5.0, 4.0, 1.0], [3.0, 3.0, 2.0]]
state_dim(int, 默认值:None)显式定义状态向量的维度。若未指定,则自动从运动学模型推断。对于大多数使用场景,默认推断即可满足需求。
常用值:
3: 2D的位置和朝向角[x, y, theta]4:对于具有额外状态的车辆(例如 Ackermann 模型的[x, y, theta, steer_angle])
# Example usage state_dim: 3
vel_dim(int, 默认值:None)显式定义速度向量的维度。若未指定,则自动从运动学模型推断。速度维度取决于特定运动学模型的控制输入。
常用值:
2:对于差速驱动[v, omega]或全向[vx, vy]额外维度可用于更复杂的运动学模型
# Example usage vel_dim: 2
group(int,默认0)指定用于组织目的的分组标识符,允许对象被分类和管理。具有相同分组 ID 的对象可作为一个整体用于某些操作。
# Example usage group: 1
name(str或str列表,默认None)为对象设置唯一标识符。若不提供,名称默认为 "
_ "(如 robot_0、obstacle_3)。名称在整个环境中必须唯一;重复的名称会在初始化期间引发ValueError。创建多个对象(
number > 1)时,可提供名称列表。若列表长度小于对象数量,则最后一个名称会被重复使用;请确保名称唯一性以避免错误。
# Example usage - single object robot: - name: "r1" kinematics: {name: 'diff'} shape: {name: 'circle', radius: 0.2} state: [1, 1, 0] goal: [9, 9, 0]
# Example usage - multiple objects with explicit names robot: - number: 3 name: ["r1", "r2", "r3"] distribution: {name: 'circle', center: [5, 5, 0], radius: 4.0} kinematics: {name: 'diff'} shape: {name: 'circle', radius: 0.2}
备注
不要将对象级别的
name与shape、kinematics或behavior等字典内的name键混淆。后者指定组件的类型,而非对象的标识符。role(str, 默认值:'obstacle')定义对象在仿真中的角色,由其所属的配置区块决定:
'robot':主动实体,通常由行为或输入命令控制。'obstacle':被动实体,可静止也可移动,但参与碰撞检测。
object 运动学
diff— 差速驱动,由线速度和角速度控制([v, omega])omni— 全向移动,由 x 和 y 轴方向的线速度控制([vx, vy])acker— 阿克曼转向,由线速度和转向角控制([v, phi])
kinematics(dict,默认None)设置控制对象运动的运动学模型。
选项:
'diff':差速驱动机器人,适用于原地旋转的机器人(如两轮机器人)。通过线速度和角速度控制。可选参数:noise(bool):是否给速度命令添加噪声。默认为False。alpha(列表):速度命令的噪声参数。默认值为[0.03, 0, 0, 0.03]。
# Example usage kinematics: {name: 'diff', noise: True, alpha: [0.03, 0, 0, 0.03]}
'omni':全向运动,允许在任意方向移动而无需改变朝向。此类机器人通过沿 x 和 y 轴的速度控制。可选参数:noise(bool):是否给速度命令添加噪声。默认为False。alpha(列表):速度命令的噪声参数。默认值为[0.03, 0, 0, 0.03]。
# Example usage kinematics: {name: 'omni', noise: True, alpha: [0.03, 0, 0, 0.03]}
'acker':阿克曼转向,典型用于类车辆,需要转向半径。noise(bool):是否给速度命令添加噪声。默认为False。alpha(列表):速度命令的噪声参数。默认值为[0.03, 0, 0, 0.03]。mode(str):转向模式,为steer或angular。默认为steer。steer:对象通过线速度和转向角控制。angular:对象通过线速度和角速度控制。
# Example usage kinematics: {name: 'acker', noise: True, alpha: [0.03, 0, 0, 0.03], mode: 'steer'}
vel_min(float列表,默认:[-1, -1])和vel_max(float列表,默认:[1, 1])设置每个控制维度的最小和最大速度限制(例如线速度和角速度)。这些约束确保对象的运动保持在可行且安全的范围内。
acce(float列表,默认:[inf, inf])定义加速度限制,即每个控制维度在每个时间步内的最大速度变化。此参数模拟对象运动能力的物理限制。
angle_range(float列表,默认:[-pi, pi])指定允许的朝向角范围
[min, max](弧度)。对象的朝向角theta会被归整到此范围内以保持一致性。goal_threshold(float,默认:0.1)确定对象被认为已到达目标的距离阈值。一旦在此距离范围内,可能会触发到达行为或状态变化。
# Example usage vel_min: [-1, -1] vel_max: [1, 1] acce: [0.5, 0.1] angle_range: [-pi, pi] goal_threshold: 0.1
警告
使用
acker运动学模型时,请确保在shape配置中设置wheelbase参数。
object 形状
circle— 圆形(radius、center)rectangle— 矩形(length、width、wheelbase)polygon— 自定义多边形(vertices、is_convex)linestring— 线段(vertices)
shape(dict,默认{name: circle})决定用于碰撞检测与可视化的几何形状。
支持的形状:
'circle':圆形。radius(float):圆半径,默认0.2。center(列表):圆心 (x, y),默认[0, 0]。random_shape(bool):是否随机半径,默认False。radius_range(列表):当random_shape=True时用于随机半径的范围[min_radius, max_radius],默认[0.1, 1.0]。wheelbase(float):阿克曼转向车辆的轴距,使用'acker'时必填,默认None。
# Example usage shape: {name: 'circle', radius: 0.2, center: [0, 0]}
'rectangle':矩形。length(float):x 轴方向长度,默认1.0。width(float):y 轴方向宽度,默认1.0。wheelbase(float):阿克曼转向车辆的轴距,使用'acker'时必填,默认None。
# Example usage shape: {name: 'rectangle', length: 1.0, width: 0.5}
'polygon':由顶点列表定义的多边形。vertices(列表):定义多边形的顶点列表,格式[[x1, y1], ...]。若未提供则生成随机多边形。random_shape(bool):是否生成一系列随机多边形,默认False。is_convex(bool):是否生成一系列随机凸多边形,默认False。随机多边形生成参数详见 random_generate_polygon,包括
number、center_range、avg_radius_range、irregularity_range、spikeyness_range、num_vertices_range。
# Example usage shape: name: 'polygon' vertices: - [4.5, 4.5] - [5.5, 4.5] - [5.5, 5.5] - [4.5, 5.5]
# Example usage - random polygon shape: - {name: 'polygon', random_shape: true, center_range: [5, 10, 40, 30], avg_radius_range: [0.5, 2], irregularity_range: [0, 1], spikeyness_range: [0, 1], num_vertices_range: [4, 5]}
'linestring':由顶点列表定义的折线,类似多边形但生成的是一串线。vertices(列表):定义线串的顶点列表,格式[[x1, y1], ...]。random_shape(bool):是否生成随机线串(多边形),默认False。is_convex(bool):是否生成随机凸线串(多边形),默认False。随机线串(多边形)生成参数详见 random_generate_polygon,包括
number、center_range、avg_radius_range、irregularity_range、spikeyness_range、num_vertices_range。
# Example usage shape: name: 'linestring' vertices: - [4.5, 4.5] - [5.5, 4.5] - [5.5, 5.5] - [4.5, 5.5]
# Example usage - random linestring shape: - {name: 'linestring', random_shape: true, center_range: [5, 10, 40, 30], avg_radius_range: [0.5, 2], irregularity_range: [0, 1], spikeyness_range: [0, 1], num_vertices_range: [4, 5]}
object 行为
behavior:dash(直接朝目标移动)、rvo(碰撞避让算法)group_behavior:orca(optimal reciprocal collision avoidance)static— 静止对象(True/False)
behavior(dict,默认None)配置对象的运动行为,可为简单或复杂策略,并可包含额外参数。
选项:
'dash':以最大允许速度直接朝目标移动。wander(bool/False):是否加入随机游走。若为True,对象到达当前目标后会随机分配新目标。target_roles(str/all):仅对具有目标角色的对象应用该行为。当前可设为robot或obstacle。range_low(列表):随机游走下界,默认[0, 0, -3.14]。range_high(列表):随机游走上界,默认[10, 10, 3.14]。angle_tolerance(float):diff、acker运动学的朝向校准容差,默认0.1。
示例:
behavior: {name: 'dash', wander: True, range_low: [0, 0, -3.14], range_high: [10, 10, 3.14], angle_tolerance: 0.1}
'rvo':实现多动态体避碰的 RVO 算法,支持diff与omni运动学。wander(bool/False):是否加入随机游走。若为True,对象到达当前目标后会随机分配新目标。target_roles(str/all):仅对具有目标角色的对象应用该行为。当前可设为robot或obstacle。range_low(列表):随机游走下界,默认[0, 0, -3.14]。range_high(列表):随机游走上界,默认[10, 10, 3.14]。vxmax(float):x 轴最大线速度,默认1.5。vymax(float):y 轴最大线速度,默认1.5。acce(float):最大加速度,默认1.0。factor(float):RVO 算法因子,默认1.0。mode(str):RVO 算法模式,可选rvo、hrvo、vo,默认rvo。rvo:互惠速度障碍法,用于多智能体避碰。hrvo:混合 RVO,将 RVO 与 VO 结合以减少死锁。vo:速度障碍,用于避障。
neighbor_threshold(float):筛选邻居的距离阈值,默认3.0。
示例:
behavior: {name: 'rvo', vxmax: 1.5, vymax: 1.5, acce: 1.0, factor: 1.0, mode: 'rvo', wander: False}
group_behavior(dict,默认None)同组内所有对象的群体行为。对于协同行为(如群体或人群仿真)更高效,因为它在单步中为所有成员计算动作。必须包含
name及行为特定参数。选项:
'orca':最优互惠碰撞避让(ORCA),用于多智能体导航。需要pyrvo包(pip install pyrvo)。仿真仅在使用此行为时尝试导入。wander(bool/False):是否加入随机游走。若为True,对象到达当前目标后会随机分配新目标。range_low(列表):随机游走下界,默认[0, 0, -3.14]。range_high(列表):随机游走上界,默认[10, 10, 3.14]。neighborDist(float/15.0):搜索邻居的最大距离。maxNeighbors(int/10):考虑的邻居数量上限。timeHorizon(float/20.0):相对于其他智能体计算安全速度的时间范围。timeHorizonObst(float/10.0):相对于静态障碍物计算安全速度的时间范围。safe_radius(float/0.1):额外的安全半径填充。maxSpeed(float/None):智能体最大速度。若为None,使用对象的vel_max。
示例:
group_behavior: name: 'orca' neighborDist: 10.0 maxNeighbors: 10 timeHorizon: 10.0 timeHorizonObst: 10.0 safe_radius: 0.1
static:布尔值,表示对象是否静止。静止对象忽略运动学与行为,保持初始状态。
示例:
static: True
object 传感器
lidar2d— 2D 激光雷达(range_min/max、angle_range、noise)fov— 视场角(弧度)fov_radius— 最大探测距离
sensors:为对象挂载传感器以感知环境。每个传感器以字典形式描述其类型与参数,目前支持:
lidar2d:用于距离测量的 2D LiDAR,参数包括:range_min(float):最小探测距离,默认0.0。range_max(float):最大探测距离,默认10.0。angle_range(float):传感器覆盖角度,默认pi。number(int):激光束数量,默认100。scan_time(float):完成一次扫描的时间,默认0.1。noise(bool):测量是否加入噪声,默认False。std(float):当noise=True时距离噪声的标准差,默认0.2。angle_std(float):noise=True时的角度噪声标准差,默认0.02。offset(列表):传感器相对对象位置 (x, y, theta) 的偏移,默认[0, 0, 0]。alpha(float):绘图透明度,默认0.3。has_velocity(bool):是否测量点速度,默认False。color(str):传感器颜色,默认r。
示例:
sensors: - name: 'lidar2d' range_min: 0 range_max: 5 angle_range: 3.14 number: 200 noise: False std: 0.2 angle_std: 0.2 offset: [0, 0, 0] alpha: 0.3
fov 与 fov_radius:定义对象传感器的视场范围。fov 指定弧度角度区间,fov_radius 设置最大探测距离。
示例:
fov: 1.57
fov_radius: 5.0
object 模式
arrive_mode— 目标判定方式(position、state)unobstructed— 忽略碰撞(True/False)
arrive_mode(str,默认'position')选择判定对象是否到达目标的方法:
选项:
'position':仅根据与目标位置 ([x, y]) 的距离判断。'state':同时考虑位置与朝向 ([x, y, theta])。
示例:
arrive_mode: 'position'
unobstructed(bool,默认False)当设为
True时,该对象被视为无障碍,忽略与其他对象和障碍物的碰撞,适合测试或需要不被阻挡的对象。示例:
unobstructed: True
object 可视化
color— 对象颜色('r'、'blue'、'k'等)description— 图像文件(如'car_blue.png'、'diff_robot0.png')plot— 进阶显示选项Object — 外观(
obj_color、obj_alpha、obj_linestyle)Goal — 目标标记(
show_goal、goal_color)Trail — 轨迹点(
show_trail、keep_trail_length)Trajectory — 路径线(
show_trajectory、keep_traj_length)Sensors — 传感器显示(
show_sensor、show_fov)
color(str,默认'k'黑色)指定可视化中的对象颜色,便于区分。更多色彩见 matplotlib color。
示例:
color: 'r'
description(str,默认None)提供用于图形展示的图像,可使用 world/description 下的文件,或自定义绝对路径。
可用图像:
car_green.png:阿克曼车辆默认图。car_blue.pngcar_red.pngdiff_robot0.pngdiff_robot1.png
示例:
description: 'car_blue.png'
plot:包含控制对象显示的绘图选项。所有绘图元素初始创建在原点,并在动画更新时通过变换与数据更新定位。
对象可视化属性:
obj_linestyle(str):对象轮廓线型(如 '-', '--', ':', '-.'),默认 '-'.obj_zorder(int):对象元素的绘制层级,机器人默认 3、障碍物默认 1。obj_color(str):对象颜色,默认沿用color。obj_alpha(float):对象透明度(0.0-1.0),默认 1.0。obj_linewidth(float):轮廓线宽,默认随对象类型而定。
目标可视化:
show_goal(bool):是否显示目标位置,默认 False。goal_color(str):目标标记颜色,默认与对象一致。goal_alpha(float):目标透明度,默认 0.5。goal_zorder(int):目标层级,默认 1。
文本标签可视化:
show_text(bool):是否显示文本信息,默认 False。text_color(str):文本颜色,默认 'k'(黑)。text_size(int):字体大小,默认 10。text_alpha(float):文本透明度,默认 1.0。text_zorder(int):文本层级,默认 2。text_position(列表):相对对象中心的偏移[dx, dy],默认[-radius-0.1, radius+0.1]。
速度箭头可视化:
show_arrow(bool):是否显示速度箭头,默认 False。arrow_color(str):箭头颜色,默认 "gold"。arrow_length(float):箭头长度,默认 0.4。arrow_width(float):箭头宽度,默认 0.6。arrow_alpha(float):箭头透明度,默认 1.0。arrow_zorder(int):箭头层级,默认 4。
轨迹线可视化:
show_trajectory(bool):是否显示路径线,默认 False。traj_color(str):路径颜色,默认继承对象颜色。traj_style(str):路径线型(如 '-', '--', ':', '-.'),默认 "-"。traj_width(float):路径线宽,默认为对象宽度。traj_alpha(float):路径透明度,默认 0.5。traj_zorder(int):路径层级,默认 0。keep_traj_length(int):保留的尾段步数,默认 0(保留全部)。
对象轨迹点可视化:
show_trail(bool):是否显示轨迹点,默认 False。trail_freq(int):轨迹显示频率(每 N 步),默认 2。trail_type(str):轨迹形状类型,默认与对象形状相同。trail_edgecolor(str):轨迹边缘颜色,默认为对象颜色。trail_linewidth(float):轨迹线宽,默认 0.8。trail_alpha(float):轨迹透明度,默认 0.7。trail_fill(bool):是否填充轨迹形状,默认 False。trail_color(str):轨迹填充色,默认为对象颜色。trail_zorder(int):轨迹层级,默认 0。keep_trail_length(int):保留的轨迹尾段步数,默认 0(保留全部)。
传感器可视化:
show_sensor(bool):是否显示传感器,默认 True。
视场可视化:
show_fov(bool):是否显示视场,默认 False。fov_color(str):视场填充色,默认 "lightblue"。fov_edge_color(str):视场边缘色,默认 "blue"。fov_alpha(float):视场透明度,默认 0.5。fov_zorder(int):视场层级,默认 1。
注意: 所有可视化元素在初始化时创建于原点,并在动画期间通过 matplotlib 的变换(patch)与 set_data(线)定位。
示例:
plot:
# Object appearance
obj_linestyle: '--'
obj_zorder: 3
obj_color: 'blue'
obj_alpha: 0.8
obj_linewidth: 2.0
# Goal visualization
show_goal: True
goal_color: 'red'
goal_alpha: 0.7
goal_zorder: 2
# Text labels
show_text: True
text_color: 'black'
text_size: 12
text_alpha: 0.9
text_zorder: 5
# Velocity arrows
show_arrow: True
arrow_color: 'gold'
arrow_length: 0.5
arrow_width: 0.8
arrow_alpha: 0.9
arrow_zorder: 4
# Trajectory path
show_trajectory: True
traj_color: 'green'
traj_style: '-'
traj_width: 0.6
traj_alpha: 0.6
traj_zorder: 1
# Object trails
show_trail: True
trail_freq: 3
trail_edgecolor: 'purple'
trail_linewidth: 1.0
trail_alpha: 0.5
trail_fill: False
trail_color: 'purple'
trail_zorder: 0
# Sensors and FOV
show_sensor: True
show_fov: True
fov_color: 'lightblue'
fov_edge_color: 'blue'
fov_alpha: 0.3
fov_zorder: 1
GUI 配置#
GUI 参数表#
Parameter |
类型 |
Default |
描述 |
|---|---|---|---|
|
|
|
键盘控制选项(当 |
|
|
|
鼠标控制选项。 |
键盘控制
keyboard(dict,默认 {}):配置键盘控制,由 KeyboardControl 读取。默认后端为 pynput,若不可用则自动退回 Matplotlib。
backend(str):键盘后端。"pynput"(默认):全局键盘hook,但需 Matplotlib 窗口聚焦(依赖pynput包)。"mpl":Matplotlib 图窗按键事件,仅在窗口聚焦时生效;无额外依赖,但对象数量多时可能有延迟。
global_hook(bool):当backend='pynput'时即便窗口未聚焦也捕获按键,默认False(仅窗口聚焦时活跃)。key_lv_max(float):最大线速度,默认 3.0。key_ang_max(float):最大角速度,默认 1.0。key_lv(float):初始线速度,默认0.0。key_ang(float):初始角速度,默认0.0。key_id(int):初始机器人控制 ID,默认0。
# Example: enable keyboard control with GUI settings
world:
control_mode: 'keyboard'
gui:
keyboard:
backend: 'pynput' # or 'mpl'
global_hook: true # if your want to capture keys globally. Default is False.
key_id: 0
key_lv_max: 3.0
key_ang_max: 1.0
键盘控制按键:
w— 前进s— 后退a— 左转d— 右转q— 降低线速度e— 提高线速度z— 降低角速度c— 提高角速度alt+num— 更改当前控制的机器人IDr— 重置环境space— 切换暂停/恢复环境esc— 退出环境(设置退出标志)x— 切换键盘/自动控制l— 重新加载环境F5— 调试环境(Mac上使用fn+f5)v— 保存当前图像
小技巧
调试模式可逐帧推进仿真以便检查:
按
F5在当前帧进入调试模式,再次按下F5进入单步。按
space退出调试模式并恢复正常执行。
注意:
在 macOS 笔记本上可能需要配合
fn键(如fn+F5)。alt键对应option。
鼠标控制
mouse(dict,默认 {}):配置鼠标控制,由 MouseControl 读取。
zoom_factor(float):缩放因子,默认1.1。
gui:
mouse:
zoom_factor: 1.1
备注
鼠标操作:
鼠标移动 — 跟踪鼠标位置并更新显示坐标
中键点击 — 重置缩放到默认视图
滚轮向上 — 放大(以鼠标位置为中心)
滚轮向下 — 缩小(以鼠标位置为中心)
鼠标位置属性:
mouse_left_pos(tuple):左键点击位置 (x, y)。mouse_right_pos(tuple):右键点击位置 (x, y)。mouse_pos(tuple):当前鼠标位置 (x, y)。
配置示例#
下面通过多个配置示例展示 IR-SIM 的灵活性与能力:
robot:
- number: 10
distribution: {name: 'circle', radius: 4.0, center: [5, 5]}
kinematics: {name: 'diff'}
shape:
- {name: 'circle', radius: 0.2}
behavior: {name: 'rvo', vxmax: 1.5, vymax: 1.5, acce: 1.0, factor: 1.0}
vel_min: [-3, -3.0]
vel_max: [3, 3.0]
color: ['royalblue', 'red', 'green', 'orange', 'purple', 'yellow', 'cyan', 'magenta', 'lime', 'pink', 'brown']
arrive_mode: position
goal_threshold: 0.15
plot:
show_trail: true
show_goal: true
trail_fill: true
trail_alpha: 0.2
show_trajectory: false
robot:
- number: 10
distribution: {name: 'circle', radius: 4.0, center: [5, 5]}
kinematics: {name: 'omni'}
shape: {name: 'circle', radius: 0.2}
group_behavior:
name: 'orca'
neighborDist: 10.0
maxNeighbors: 10
timeHorizon: 10.0
timeHorizonObst: 10.0
safe_radius: 0.1
vel_max: [2.0, 2.0]
goal: [9, 9, 0]
plot:
show_trail: true
trail_alpha: 0.5
obstacle:
- shape: {name: 'circle', radius: 1.0} # radius
state: [5, 5, 0]
- shape: {name: 'rectangle', length: 1.5, width: 1.2} # radius
state: [6, 5, 1]
- shape: {name: 'linestring', vertices: [[5, 5], [4, 0], [1, 6]] } # vertices
state: [0, 0, 0]
unobstructed: True
- shape:
name: 'polygon'
vertices:
- [4.5, 4.5]
- [5.5, 4.5]
- [5.5, 5.5]
- [4.5, 5.5]
robot:
- kinematics: {name: 'acker'}
shape: {name: 'rectangle', length: 4.6, width: 1.6, wheelbase: 3}
state: [1, 1, 0, 0]
goal: [40, 40, 0]
vel_max: [4, 1]
behavior: {name: 'dash'}
plot:
show_trajectory: True
robot:
- kinematics: {name: 'diff'}
shape: {name: 'circle', radius: 0.3}
state: [2, 2, 0]
goal: [8, 8, 0]
behavior: {name: 'rvo'}
sensors:
- name: 'lidar2d'
range_min: 0.1
range_max: 8.0
angle_range: 6.28 # Full 360 degrees
number: 360
noise: True
std: 0.1
offset: [0, 0, 0]
color: 'red'
plot:
show_sensor: True
show_fov: True
fov_color: 'lightgreen'
fov_alpha: 0.3
小技巧
配置最佳实践:
多对象:配置多个对象时,结合
number与distribution高效生成。例如设定number: 10且distribution: 'random'可快速随机填充场景。字典参数:所有字典类型参数(如
distribution、shape、kinematics、behavior)必须包含'name'键以声明类型,否则会退回默认值或引发错误。分组配置:同组对象默认共享配置。若需定制,请使用
-添加子参数;未显式配置的对象会继承组内最后一个配置。运动学与速度:确保
velocity与vel_max的格式与运动学模型匹配,例如差速 ('diff') 使用[v, omega],全向 ('omni') 使用[vx, vy]。绘图选项:若
plot位于对象配置内部,可为单个对象定制可视化;若位于对象配置的根级,则应用于所有对象。