更新日志#

2.12.0 (2026-10-04)#

本版本新增用于真实碰撞处理的 contact 模式、面向学术论文配图的默认 Okabe-Ito 调色板、作为群体行为的社会力模型,并修复了反应式行为、激光雷达读数和环境生命周期中的问题。

  • 新功能:

    • contact 模式像刚体物理引擎一样解算碰撞。 在 YAML 中设置 collision_mode: contact;它依据每个对象的 mass、friction、inertia 和 restitution;具有有限 mass 的障碍物可以被推动,每个对象通过 obj.contact 报告其接触。详见 usage/26push_box_world。(#374)

    • 新增面向学术论文配图的默认 Okabe-Ito 调色板。 渲染现在使用 Okabe-Ito 配色设置机器人、障碍物和其他对象的颜色。它们是 irsim.config.palette_param 中的运行时参数;color: 'cycle' 为群组中的每个机器人分配各自的调色板颜色。详见 usage/06multi_objects_world。(#373)

    • 新增社会力模型的群体行为。 group_behavior: {name: sfm} 一次推进整个人群,比逐对象的 sfm 快 2 到 2.6 倍;social_groups 让行人结伴同行。详见 usage/23sfm_world。(#369)

    • 激光雷达扫描报告有效性与无穷远距离。 两种激光雷达都提供逐束的 valid 掩码,angle_std 为光束方向加入噪声,env.get_msg(use_inf=True) 按 REP 117 对未命中发布无穷大。详见 usage/05lidar_world。(#379)

  • 修复:

    • 群体动作落到正确的机器人上。 栅格地图也不再作为幻影智能体加入群组。(#377)

    • RVO 为静止的机器人构建正确的速度锥。 静止的机器人不再撞向迎面而来的邻居。(#378)

    • 差速和阿克曼机器人在 rvo 与 sfm 下朝向目标行驶。 此前它们会转开。(#378)

    • ORCA 以速度上限驱动全向成员。 此前它们被固定在 1 m/s。(#378)

    • 激光雷达噪声只作用于命中的光束。 所有距离保持在 [range_min, range_max] 内,range_min 也已生效。(#379)

    • 无头模式下 control_mode: keyboard 的场景回退到 auto。 此前它们在重置或重新加载后会崩溃。(#380)

    • 每个环境拥有独立的日志和图窗。 创建或关闭一个环境不再影响其他环境。(#380)

    • arrive_mode: state 接受没有朝向的目标。 朝向差会做角度回绕。(#380)

    • 其他修复。 RVO 在超过速度上限时不再崩溃,FMCW 在 range_min 以内的回波仍视为遮挡,传感器在构建时完成扫描,只有机器人能揭开迷雾地图,二维点可在三维中绘制,输出目录跟随脚本目录或工作目录,静止对象上的传感器会被重绘,自定义群体行为示例动起来了。(#378, #379, #380, #381)

  • 文档:

    • 文档 GIF 已用新调色板重新生成。 它们托管在 ir-sim-gifs 仓库中,README 画廊新增迷雾地图、contact 模式和社会力模型演示。(#381)

2.11.0 (2026-09-01)#

本版本新增用于批量训练的无头(headless)环境、复合几何体、内部/外部步进模式、ROS 风格的仿真消息,以及按环境隔离的对象 id 与随机数生成器,并大幅提升了激光雷达扫描与多机器人行为的步进速度。

在 Apple 芯片的 Mac 上以无头模式与 2.10.2 对比测得(多次运行取中位数):

耗时

2.10.2

2.11.0

加速比

env.step():200 束激光雷达,单个多边形

2.88 ms

0.26 ms

11.1x

env.step():200 束激光雷达,50 个多边形

6.20 ms

1.51 ms

4.1x

env.step():200 束激光雷达,混合场景(usage/05lidar_world)

5.27 ms

0.31 ms

17.0x

env.step():FMCW 激光雷达(usage/22fmcw_lidar_world)

4.32 ms

0.60 ms

7.2x

env.step():100 束激光雷达,图像地图(usage/10grid_map)

3.07 ms

2.15 ms

1.4x

env.step():16 个 RVO 机器人

37.1 ms

2.16 ms

17.2x

env.step():100 个 dash 机器人

5.92 ms

3.82 ms

1.6x

不创建图形的 irsim.make()(disable_all_plot / headless)

21.6 ms

5.8 ms

3.7x

  • 新功能:

    • 复合几何体可建模多部件刚体。 真实平台很少是单一图元。现在可以用固定的圆、矩形和多边形部件组合出一个形状,并在碰撞、激光雷达、渲染和目标中作为一个整体使用。(#350)

    • 外部系统可以接管状态更新。 在联合仿真或硬件在环场景中,外部仿真器或中间件已经算出了下一时刻状态;使用 step_mode: "external" 时 IR-SIM 不再自行积分,而是让几何、传感器、碰撞和时钟与调用方设置的状态保持同步。(#354)

    • ROS 风格消息用于交换仿真状态。 以前将 IR-SIM 接入 ROS 或其他仿真器需要自写胶水代码;env.get_msg() / env.receive_msg() 提供不依赖第三方库的快照与里程计更新,桥接只需几行代码。(#355)

    • YAML 新增 custom 段。 实验参数——奖励权重、安全裕度、规划器设置——可以与使用它们的场景放在一起,通过 env.config["custom"] 读取,而无需再维护第二个配置文件。(#359)

    • 无头模式完全不创建图形。 批量强化学习训练会创建成千上万个从不绘图的环境;irsim.make(..., headless=True) 不创建图形、窗口和输入设备,也不改动 Matplotlib 后端,并行进程完全不接触显示栈,创建环境的开销也大幅降低(见上表)。disable_all_plot 保留为别名。(#362)

    • 自定义运动学模型可携带自己的 YAML 参数。 研究用模型——一阶惯性、打滑模型——需要自己的常数;kinematics: 下的所有额外键现在都会传入已注册处理器的 __init__,自定义模型可以像内置模型一样直接在场景中配置,例如 kinematics: {name: lag, tau: 0.5}。(#362)

    • 随机数按环境隔离。 向量化训练在一个进程中运行多个环境,结果不应取决于它们的交错顺序;使用 seed= 创建的环境拥有自己的生成器,用于场景采样、重置和噪声,每次运行都可独立复现。未设种子的环境仍与以前一样共享默认生成器。(#365)

  • 性能:

    • 2D 激光雷达射线投射已重写。 GEOS 叠加运算被 Lidar2D 与 FMCWLidar2D 共享的向量化射线投射取代:扫描约快 4.6-25 倍且距离误差在机器精度量级,从障碍物内部发出的扫描也不再冻结。(#353)

    • RVO 候选速度评估已向量化。 逐候选的 Python 循环开销随 机器人数 x 邻居数 x 候选数 增长;现在对所有候选和模式(rvo、hrvo、vo)统一用数组运算,16 个 RVO 机器人每步从 37 ms 降到 2.2 ms,且机器人越多收益越大。(#366)

    • 逐对象逐步开销被削减。 缓存几何半径、geometry_transform 改用 shapely.transform、有效性不再每步做 GEOS 检查、目标每次更换只转换一次而不是每次读取都转换、acce 无界时跳过加速度窗口,普通机器人群获得稳定约 1.6 倍加速。(#366)

    • 碰撞查询已批量化。 一次 STRtree 空间查询加一次向量化 intersects 取代了每个对象各自的查询与检测;地图对象保留自己的占据检测。(#366)

    • pynput 改为按需导入。 仅在创建 pynput 键盘控制器时才加载,每个进程节省约 85 毫秒导入时间。(#362)

  • 修复:

    • 全向机器人在其被操控的坐标系中接收指令。 ORCA、RVO 和 SFM 在世界坐标系中规划,但速度未经变换直接传给机器人,导致背向目标的机器人越走越远;现在速度会先变换到机器人自身坐标系再执行。(#357)

    • 激光雷达角度改为截断而非取模。 angle_range 或 fov 为 2pi 时会被取模成 0,所有光束指向正前方;二者现在都截断到 [0, 2pi]。(#360)

    • 采样间隔精确且不再为零。 浮点噪声使 0.3 / 0.1 每 2 步而不是 3 步采样一次,sample_time 小于 step_time 时还会除零;比率现在先舍入再截断,且至少为一步。(#360)

    • 动作行为符合用户预期。 env.step([1.0, 0.5]) 会把扁平动作拆给两个对象并崩溃,action_id 表示列表位置而不是对象;现在接受扁平列表、元组以及以机器人名称为键的字典,action_id 是对象 id 或名称,多余动作丢弃并给出一次警告,未知 id 抛出 ValueError。(#360)

    • 未注册的运动学名称会抛出异常。 kinematics.name 拼写错误以前会静默生成差速机器人,现在抛出 NotImplementedError。(#360)

    • 警告不再刷屏。 速度被截断或机器人没有行为时,以前每一步都会警告;此类条件现在只警告一次,之后以 DEBUG 级别记录。(#360)

    • end() 只释放自己的资源。 无头运行从不关闭自己的图形,清理时还会关闭其他环境的窗口并重置共享 id 计数器;end() 现在只关闭自己的图形,不再改动共享状态。(#360)

    • 对象 id 按环境分配。 创建或重置第二个环境会回拨全局 id 计数器,导致添加到第一个环境的对象可能复用已有 id;每个环境现在从 0 开始编号,add_object 拒绝重复 id,对象按身份比较,env.id 为环境编号。(#362)

    • 全局种子在 make() 之后仍然有效。 以前创建不带种子的环境会用全新的无种子生成器替换共享生成器,因此先 set_seed(0) 再 irsim.make() 无法复现。现在可以了。(#365)

    • 绘图与键盘的边界问题已修复。 用宽和高绘制矩形会抛出 TypeError 且与碰撞几何错位,跟随视角会先显示一帧世界中心画面,3D 线段只接受三个点,没有环境时按键会抛错;这些现在要么正常工作,要么被忽略并给出警告。(#356)

  • 重构:

    • 清除重复逻辑与死代码。 场景搭建、目标守卫、RVO 锥体几何、运动噪声、规划器初始化和键盘按键表各自只保留一份实现;除上文列出的修复外行为不变。(#356)

    • 装饰器拥有独立模块。 bind_env、plot_only、normalize_actions 与计时辅助函数移入 irsim/util/decorator.py,并从 irsim.util 包导出。(#365)

  • 文档:

    • 项目有了 logo 和统一的引用格式。 加入明暗两种 logo、favicon 和社交预览,品牌资源移至 docs/ 下,CITATION.cff 首选 arXiv 论文。(#349, #351, #352)

2.10.2 (2026-08-01)#

  • 修复:

    • 在碰撞几何、渲染、凸 G/h 约束和 RVO 邻居状态中一致应用机体坐标系下的圆心偏移,并对 HRVO 反正弦函数的输入进行截断。这样可确保带偏移的圆和阿克曼模型圆在各种表示中保持对齐,并避免数学定义域错误。(#344)

  • 重构:

    • 将对象渲染从 ObjectBase 抽取到专用的 ObjectPlot 类,并用数据类封装绘图选项,同时保持公共 API 和选项优先级不变。这样可分离渲染职责,且不破坏现有调用方。(#345)

  • 文档:

    • 将 17 个文档 GIF(约 64 MB)迁移到专用的 IR-SIM-GIFs 仓库,并用远程 URL 替换本地路径。这样可在保留可视化示例的同时减小源码树体积。(#341)

    • 使使用说明和 YAML 文档与运行时默认值保持一致,补充公共 API 文档字符串,并改进中英文 API 导航。这样可使文档中的行为和入口点与实现保持一致。(#343)

    • 更新中文翻译目录,明确 world.status 的语义,从文档中的运行状态列表移除未记录的 "Done" 值,并将 Ruff 升级至 0.16.0,同时重新格式化 Markdown 代码块。这样可保持双语文档与经过检查的示例同步。(#347)

  • 测试:

    • 将 25 个测试文件整合为 13 个,将 irsim/ 覆盖率从 96.7% 提升至 97.3%,并将本地测试套件运行时间从 3:02 缩短至 2:08。通过绑定实例路由环境和世界参数模块的访问,以防止全局状态泄漏,同时使测试套件更精简、更可靠。(#346)

2.10.1 (2026-07-01)#

  • 新功能:

    • 为 diff 机器人新增 orca 群体行为(ORCA 的完整(holonomic)速度通过 omni_to_diff 映射为 (linear, angular)),将互惠碰撞避免扩展到差速驱动机群;参见 19orca_world/orca_diff_world 示例。(#333)

    • 新增地图迷雾(fog-of-map)叠加层(FogMap,通过 world: {fog_map: true, fog_map_resolution: ...} 启用),由每个机器人的激光雷达或 fov 扇形揭示,用于在部分可观测条件下建模探索;参见 24fog_world 示例。(#337)

  • 性能:

    • 当动态障碍物与静态地图重叠时,将激光雷达步进加速约 2 倍。(#332)

  • 修复:

    • 修复目标位于机体后方时 dash 的原地偏航振荡与停滞。(#331)

    • 修复目标正后方时 diff RVO 的冻结。(#331)

    • 修复创建大量环境时无渲染(headless)键盘事件队列溢出。(#331)

    • 将保存的动画帧固定为统一尺寸,并将视频填充为偶数尺寸,使保存的 mp4/gif 与屏幕上的图形一致。(#330)

    • 抑制静态障碍物上默认的速度箭头(v2.9.2 运动学处理器重构引入的回归)。(#313)

  • 重构:

    • 将警告和错误发送到日志记录器(logger)而非 print。(#326)

  • 文档:

    • 全面改进文档站点的清晰度与导航,实现完整的中英文对应。(#325)

    • 在 README 中添加 arXiv 论文引用和徽章。(#320)

    • 新增 IRSIM-3DGS-Bridge 社区项目链接。(#317) (@Wayneyujie)

2.10.0 (2026-05-24)#

此小版本新增两项感知与行为能力:用于行人式群体避障的社会力模型(SFM),以及可提供逐波束径向速度的简化二维 FMCW 激光雷达传感器。

  • 新功能:

    • 新增简化的 2D FMCW 激光雷达传感器,提供距离与速度回波,并新增 22fmcw_lidar_world 使用示例。(#293) (@KevinLADLee)

    • 为 diff 和 omni 运动学新增社会力模型(SFM)行为(各向异性 Moussaid-Helbing 2009 变体),并提供 23sfm_world 十字走廊使用示例。(#307)

  • 性能:

    • 在 ObjectBase 上按时间步缓存 velocity_xy、rvo_neighbor_state 和 rvo_line_segments,使 SFM/RVO 单步计算速度提升约 4 倍。(#307)

  • 文档:

    • 为 changelog.md 中的所有版本标题添加发布日期。(#288)

    • 优化 YAML 配置参考与键盘/鼠标控制文档,使其更清晰(英文 + 中文)。(#296)

    • 在 rvo 旁边补充 sfm 行为的文档(英文 + 中文)。(#307)

  • 测试:

    • 新增 tests/test_sfm.py,覆盖 SFM 算法与行为注册。(#307)

2.9.4 (2026-04-21)#

  • 新功能:

    • 新增 omni_angular 运动学,提供 3 自由度机体坐标系控制 [forward, lateral, yaw_rate],并将 omni 重构为机体坐标系 [forward, lateral]。机体坐标系速度与物理全向平台的指令方式一致,omni_angular 为完整约束/swerve 场景提供独立偏航控制。键盘控制围绕新轴重新设计。(#270)

    • 新增 env.reset(random=True),可从缓存的 YAML 解析结果重新采样随机场景。无需重新从磁盘读取 YAML 即可快速以全新随机场景(新位置、新随机形状)重启,适用于强化学习 rollout 和批量实验。(#283)

    • 新增带成对最小间距的 random_uniform 采样器,并为 random 和 circle 分布提供基于世界的默认值。成对最小间距可防止随机采样中的物体重叠,基于世界的默认值使采样范围自动适应世界尺寸/偏移,用户无需为每个场景重复指定边界。(#283)

    • 新增 env.refresh() 和 ObjectBase.refresh(),无需推进仿真即可同步几何、传感器和碰撞树。在直接修改物体状态(如 robot.set_state(...))后很有用,可确保下一次 env.step() 前传感器和碰撞数据已更新。(#284)

  • 性能:

    • 用矢量化的 shapely.box + unary_union 替换圆形缓冲的障碍物地图几何。方格单元完美平铺栅格——linestring 减少约 3 倍、坐标减少约 24 倍、lidar 步进加快约 3.8 倍,障碍物地图碰撞查询也相应减负——并修复旧圆形缓冲中曾让 lidar 射线穿墙的对角缝隙。(#276)

  • 修复:

    • 在 EnvBase.__init__ 时重置 ObjectBase.id_iter,使每个环境的物体 ID 从 0 开始。此前类级计数器跨环境保留,导致顺序创建多个环境时索引不匹配。(#277)

    • 在 env.reset() 期间保留初始速度,使 set_velocity(init=True) 生效。此前 reset 内部的零动作步骤会在速度恢复后立即清除 _velocity,导致用户无法设置非零初始速度。(#284)

  • 文档:

    • 修复使用指南和 YAML 配置参考中失效的交叉引用(Markdown [Name](#irsim.path) 链接替换为 Sphinx {py:class/meth/func} role),并在 EN + zh_CN 全文将 omni 速度描述更新为机体坐标系。(#278)

2.9.3 (2026-04-06)#

  • 新功能:

    • 为路点导航行为新增循环模式。(#266)

    • 为 RVO 算法新增线段障碍物支持。(#250)

    • 新增 CBF-QP 和碰撞锥使用示例。(#258) (@Lawliet9666)

  • 性能:

    • 矢量化 lidar 距离/原点过滤并跳过 union_all,基于地图的场景中 lidar 步进加快约 48%。(#257) (@williamleong)

    • 使用 STRtree intersects 谓词进行 lidar 地图线段过滤,PNG 地图场景中 lidar 步进加快约 26%。(#255) (@williamleong)

    • 缓存几何有效性并简化 lidar 地图射线求交,PNG 地图场景中 lidar 步进加快约 18%。(#254) (@williamleong)

  • 修复:

    • 防止 WrapToPi/WrapTo2Pi 在非有限输入下出现无限循环。(#269)

  • 重构:

    • 简化 util 中的 file_check 和 find_file。(#256)

2.9.2 (2026-03-16)#

  • 新功能:

    • 新增 env.create_robot() 和 env.create_obstacle() 用于程序化创建物体,以及 env.add_object() / env.add_objects() 用于运行时添加。(#251)

    • 新增 check_arrive() 方法检查物体是否到达指定目标,并为动态添加的物体初始化绘图。(#240)

    • 新增 set_text() 和 set_goal_text() API,用于为物体和目标设置自定义文本。(#239)

    • 为无效的 YAML 配置键新增拼写错误检测与建议。(#227)

  • 重构:

    • 将运动学元数据(默认颜色、state_dim、描述)集中到 handler 注册表,使运动学更易于添加。(#237)

  • 修复:

    • 通过逐帧读取和保存而非将所有图像载入内存,提升保存动画的健壮性。(#230) (@williamleong)

  • 文档:

    • 在 Make Environment 文档中新增“动态物体管理”章节。(#251)

    • 修复并更新中文翻译。

2.9.1 (2026-02-16)#

  • 新功能:

    • 新增 Perlin 噪声和基于图像的栅格地图生成器、新的 JPS(跳点搜索)和 Informed RRT* 路径规划器,并重构现有规划器(A*、RRT、RRT*、PRM)以使用 EnvGridMap 协议。#215 (@KevinLADLee)

    • 移除 Python 3.9 支持,新增 Python 3.14 支持。将最低 Python 版本提升至 3.10,现代化类型注解(Optional/Union 改为 X | Y 语法)。#216

    • 为 set_random_seed() 新增可选 reload 参数,设为 True 时用新种子重新生成随机障碍物。#210

    • 未显式指定时,动画文件名默认使用世界名称。#221

  • 修复:

    • 为障碍物地图新增基于栅格的碰撞检测,使用栅格数组查找以加速检测,并在 ObstacleMap 中缓存 STRtree。#205

  • 重构:

    • 为运动学和工具函数新增输入校验装饰器(validate_shape、validate_length、ensure_column_vector、ensure_numpy)。#209

  • 文档:

    • 完善 README。#222

    • 新增栅格地图配置和路径规划文档。#215

2.9.0 (2026-01-26)#

此版本新增了基于实例参数的多环境支持,允许多个独立的仿真环境同时运行。还引入了 1D ToF 传感器支持和键盘改进。

  • 新功能:

    • 通过设置 lidar2d 传感器 number: 1 和 angle_range: 0 新增 1D ToF(飞行时间)传感器支持。(#200)

    • 新增多环境键盘切换支持。同一时刻仅一个环境响应键盘输入;通过鼠标点击或焦点事件切换。(#192)

    • 新增 y 键用于开关显示渲染窗口。(#194)

  • 重构:

    • 环境参数(env_param、world_param、path_param)现为基于实例而非全局,从而支持正确的多环境运行。(#191)

  • 修复:

    • 修复 robot 属性,在不存在机器人时抛出带清晰信息的 IndexError。(#188)

    • 修复 save_figure 以正确处理含多个点的文件名。(#188)

    • 修复 get_group_by_name、get_obstacle_info_list、get_robot_info_list 和 random_obstacle_position 的类型注解。(#188)

    • 修复 set_ax_viewpoint 以处理 None 的 objects 参数。(#188)

    • 为 3D 状态生成和均匀分布(尚未实现)新增 NotImplementedError。(#188)

  • 文档:

    • 在文档中新增更新日志和贡献页面。(#203)

    • 改进自定义行为教程和示例。(#193)

    • 修复文档中的格式问题。(#190)

  • 测试:

    • 重构并将测试覆盖率从 94% 提升至 97%。(#189)

    • 为多环境键盘切换和显示开关新增测试。

2.8.2 (2026-01-05)#

  • 功能 #183:

    • 新增 group_name YAML 参数,帮助用户管理同组物体。

    • 新增 show_goal_text YAML 参数,决定是否在绘图上显示目标文本。

    • 新增 get_group_by_name 函数,按组名获取同组物体。

    • 更新相关文档

  • 修复:

    • 修复组 ID 参数冲突问题 #180 #183

    • 修复组行为警告问题 e8ca7df

2.8.1 (2025-12-13)#

热修复:修复文档中的 autoapi 扩展问题。

2.8.0 (2025-12-12)#

此版本添加了 group_behavior 功能,支持同一组内所有对象的群体级行为,这对于协调行为(如群体或人群仿真)更加高效,因为它可以在单步中计算所有成员的动作。同时支持中文版文档。

  • 新功能:

    • 新增 group_behavior YAML 参数,支持对同组所有物体的组级行为。

    • 集成 GroupBehavior 类处理组级逻辑,支持基于函数和基于类的行为。

    • 新增由 pyrvo 库实现的 ORCA(最优互惠碰撞避免)行为支持,可在 YAML 文件中配置。

    • 更新 behavior_registry,支持使用装饰器(@register_behavior_class、@register_group_behavior_class)注册行为类和组行为类。

    • 新增 viewpoint YAML 参数,以物体视角渲染绘图。

  • 文档:

    • 支持中文版文档。

    • 更新 group_behavior 配置文档,包含 ORCA 参数。

  • 修复:

    • generate_polygon 函数中的 rng 随机化

    • 组索引递增问题

2.7.5 (2025-10-26)#

  • 新功能:

    • 新增在随机环境生成中设置种子以保证可复现性的功能。只需在 make 函数中添加 seed 参数(如 env = irsim.make("random_obstacle.yaml", seed=2)),或使用 env.set_random_seed 函数设置种子后调用 env.reload()。详见用法 random_obstacle_seed。

    • 在 ir-sim 中新增 ORCA 示例(行为),由 PyRVO 实现——经典 ORCA 算法(C++ 版,高效)的 Python 绑定。详见 usage orca world。

  • 错误修复:

    • 修复采样时间不生效的问题。

    • 修复文档错误。

2.7.4 (2025-10-06)#

  • 新功能:

    • 新增状态归一化和输入检查装饰器函数。

    • 新增 F5 键调试环境。调试模式下环境暂停并等待下一次 F5 继续;按空格退出调试模式。

    • 新增 v 键保存当前图像。

    • 新增 reload、debug 和 quit 标志。

  • 错误修复:

    • 修复键盘控制问题。

    • 修复目标绘制问题。

  • 样式:

    • 整理 patch 绘图的绘图函数。

    • 整理日志信息。

2.7.3 (2025-09-20)#

  • 新功能:

    • 将默认键盘后端切换为 pynput(全局键盘钩子),pynput 不可用时自动回退到 Matplotlib(mpl)。注意:mpl 在绘制大量物体时可能引入延迟。

    • 使 pynput 键盘后端与 mpl 功能对齐:

      1. 仅当图形窗口获得焦点时处理键盘输入。

      2. 在键盘配置中新增 global_hook 选项,允许图形窗口失焦时输入。

      3. 为 pynput 后端实现 reload 和 quit。

    • 新增环境级 quit 函数。

    • 重命名 keyboard_control.py 中的键盘处理器:_on_release → _on_pynput_release,_on_press → _on_pynput_press。

  • 错误修复:

    • 修正目标绘图的 alpha 处理。

    • 将默认采样时间设置为与步进时间一致。

    • 修复随机障碍物绘图。

    • 修复用法文档中的 GUI YAML 示例。

    • 解决动态物体的 LiDAR 步进时序问题(LiDAR 在所有物体位姿更新后再更新)。

    • 修复 macOS 上的键盘问题。

  • 文档:

    • 明确传感器更新顺序。

    • 补充使用 pynput 后端的键盘控制文档。

2.7.2 (2025-08-31)#

  • 新功能:

    • 在 YAML 配置中新增 gui 部分用于键盘和鼠标控制。参见 gui 配置

    • 将默认键盘后端改为 Matplotlib(mpl),其使用图形窗口按键事件。mpl 后端在 Matplotlib 图形窗口获得焦点时生效。提供全局键盘钩子的 pynput 后端仍受支持,可在 YAML 中选择。

    • 新增 env.reload() 可即时重载环境,使 YAML 更改无需关闭 Matplotlib 图形窗口即可应用。

    • 新增热键以配置和更新环境设置,在 auto 和 keyboard 控制模式下均可用:

      • r:重置环境

      • space:暂停/恢复环境

      • esc:退出环境

      • x:在键盘和自动控制模式间切换

      • l:重载环境并应用更新的 YAML,无需关闭 Matplotlib 图形窗口

    • 更新相应的文档和用法。

2.7.1 (2025-08-25)#

  • 新功能:

    • 为物体新增 name 属性,可在 yaml 文件中配置。新增重名检查以确保无重复名称。

    • 明确 env.step 动作顺序:1. 键盘控制;2. 输入动作;3. 行为控制。

    • 新增 env.get_object_by_name 和 env.get_object_by_id 函数,按名称和 id 获取物体。

  • 错误修复:

    • 修复文档和函数注释中的错误。

ir-sim 2.7.0 (2025-08-10)#

此版本改进了 CI 流水线、GitHub Actions 工作流、代码检查和格式化,以确保一致的代码风格和更快的检查速度,无 API 变更。

  • 工作流改进:

    • 采用 uv 管理项目和依赖;pyproject.toml 现由 uv 管理。

    • 使用 uv.lock 锁定依赖。

    • 使用 Ruff 进行 lint 和格式化(替代 Black)。

    • 新增类型提示并使用 ty 进行类型检查。

    • 新增 pre-commit 配置(.pre-commit-config.yaml),在提交前运行 lint 和格式化。

    • 重组 GitHub Actions 工作流以测试 API 并强制代码风格。

    • 新增 issue 模板、dependabot.yml、贡献指南。

  • 错误修复:

    • 修复文档错误。

    • 修复三维绘图标题。

  • 目录结构:

    • 将 doc/ 重命名为 docs/。

    • 将 irsim/usage/ 移动到仓库根目录的 usage/。

ir-sim 2.6.1 (2025-07-28)#

  • 错误修复:

    • 修复文档错误。

  • 新功能:

    • 新增 WrapTo2Pi 函数。

    • 对 lidar 和 fov 角度范围应用 WrapTo2Pi。

ir-sim 2.6.0 (2025-07-21)#

此版本是文档网站的重大更新。新网站更加用户友好,更容易浏览参数用法和 API。

  • 主要功能

    • 为文档新增版本切换器。

    • 优化文档样式。

    • 优化注释和代码风格。

  • 错误修复:

    • 从 ndarray 提取元素

    • 修复目标朝向和轨迹保留长度

    • 修复 GIF 生成错误

  • API 变更:

    • 将 global_param 文件夹重命名为 config。所有对 global_param 的调用都应替换为 config。

    • 将 keep_length 重命名为 keep_traj_length 和 keep_trail_length。

ir-sim 2.5.5 (2025-06-29)#

  • 新功能:

    • 新增环境暂停和恢复功能。在键盘控制中按 space 键可暂停/恢复环境。详见 键盘控制文档。

    • 新增环境标题以显示当前仿真时间和机器人状态。也可通过 env.set_title 函数自定义标题。详见 make env 文档。

    • 将默认图像像素(尺寸)改为 1000x800。

  • 功能增强:

    • 优化代码风格、日志警告输出和网站文档。

ir-sim 2.5.4 (2025-06-16)#

  • 错误修复:

    • 修复 pynput 导入错误

ir-sim 2.5.3 (2025-06-15)#

  • 新功能:

    • 新增 GUI 模块,包含键盘和鼠标控制。

    • 新增鼠标控制文档。

    • 将物体默认目标设为 None。

  • 错误修复:

    • 修复 macOS 系统的后端错误。

    • 修复物体绘图的 zorder 问题。

    • 修复物体碰撞检查问题。

  • API 变更:

    • 为环境新增 mouse_left_pos、mouse_right_pos 和 mouse_pos 属性用于鼠标控制。

    • 将 keyboard_control.py 移至 gui 文件夹。因此键盘 API 改变,如从 env.alt_flag 改为 env.keyboard.alt_flag。

ir-sim 2.5.2 (2025-06-02)#

  • 错误修复:

    • 修复清除组件的 bug。

ir-sim 2.5.1 (2025-06-02)#

  • 错误修复:

    • 修复目标绘图坐标 bug。

    • 修复文档和注释中的语法、格式和拼写错误。

    • 将加速度参数名 accer 统一为 acce。

    • 移除障碍物的状态检查警告。

  • 新功能:

    • 为圆形物体新增 center。

ir-sim 2.5.0 (2025-05-26)#

此版本通过重构对象绘图函数和大型环境的几何变换操作,提升了性能(约 40% 的速度提升)。

  • 新功能:

    • 使用 Matplotlib patch transforms 重构物体绘图函数。

    • 新增物体绘图功能和 API。

    • 重构几何变换操作。

    • 提高测试覆盖率。

    • 新增设置激光颜色的函数。

    • 优化文档和待办列表。

    • 为项目新增 UV 锁文件。

  • 错误修复:

    • 修复对象绘制错误。

    • 将 init_vertices 重命名为 original_vertices。

    • 将 init_geometry 重命名为 original_geometry。

    • 修复警告消息。

ir-sim 2.4.4 (2025-05-06)#

  • 错误修复:

    • 修复几何树错误

    • 修复三维绘图错误

  • 新功能:

    • 新增 RRT* 路径规划器

    • 为 rvo 行为新增 neighbor_threshold 参数

  • 功能增强:

    • 更新距离函数以加速 rvo 算法

    • 更新机器人图像

ir-sim 2.4.3 (2025-04-30)#

  • 错误修复:

    • 修复 lidar 偏移绘图 bug。

  • 新功能:

    • 实现若干经典路径规划器(A*、RRT、PRM),改编自 python robotics 仓库。

    • 新增绘制 quiver 的函数

    • 在 yaml 文件中新增世界绘图参数。

    • 更新依赖要求。

ir-sim 2.4.2 (2025-04-19)#

  • 错误修复:

    • 将 omni 机器人默认状态维度改为 3。

    • 移除 env_base 中的 check_collision 和 arrive 属性。

    • 修复测试用例中的 bug;移除部分旧功能 (#50)。

  • 新功能:

    • 重组 logger 函数。

    • 新增物体航向和朝向 (#48)。

    • 为碰撞检查构建几何树

    • 提升此代码的测试覆盖率 (#50)。

ir-sim 2.4.1 (2025-04-02)#

  • 错误修复:

    • 修复多边形轨迹类型 bug。

  • 新功能:

    • 确保障碍物为有效多边形。

    • 新增设置激光颜色的函数。

    • 环境可在无 yaml 文件时初始化。

    • 新增渲染 mode 以选择要渲染的物体:static、dynamic、all。

    • 增强 readme 和文档。

ir-sim 2.4.0 (2025-03-20)#

  • 新功能:

    • 新增由 3D 场景数据集(Hm3d)生成的二值地图。

    • 加速大型二值地图的碰撞检查。

    • 支持多目标设置。

    • 新增 requirement 文件。

    • 为物体新增设置随机目标的调用。

  • 错误修复:

    • 修复碰撞模式 bug,无阻挡障碍物将不计入碰撞检查。

    • 修复 readme 和文档中的拼写错误。

    • 修复日志消息中的错误。

    • 修复多物体键盘控制错误。

ir-sim 2.3.6 (2025-03-12)#

  • 错误修复:

    • Lidar2d 传感器现在会穿过无阻挡物体,详见用法:05lidar_world。

    • 修复在无头服务器运行时的 matplotlib 后端错误。

    • 修复物体顶点错误。

    • 修复绘图参数名:edgecolor -> trail_edgecolor;linewidth -> trail_linewidth;

  • 新功能:

    • 为物体新增 obj_linestyle 参数以设置物体边缘线型,详见用法:05lidar_world。

    • 更新物体属性注释和 API 文档。

ir-sim 2.3.5 (2025-02-27)#

  • 错误修复:

    • 多边形物体初始顶点的维度

  • 新功能:

    • 完善物体的 show_text 功能并为物体新增缩写名,运行用法:06multi_objects_world 查看详情。

    • 为 set_goal 函数新增 init 参数。

    • 为环境新增 add_object、add_objects、delete_object、delete_objects 函数以支持添加或移除障碍物。

    • 为物体新增 get_Gh 函数。

    • 更新函数的类型提示并用 black 格式化代码。

ir-sim 2.3.4 (2025-02-18)#

  • 错误修复:

    • 全向机器人动力学

    • RVO 除零问题

    • Python 版本兼容性

  • 新功能:

    • 更新 random_obstacle_position 函数以支持障碍物选择和不重叠特性。

    • 支持将动画保存为视频。

ir-sim 2.3.2 (2025-01-28)#

ir-sim 2.3.2 是一个错误修复版本,与 2.3.1 相比没有新功能。

ir-sim 2.3.1 (2025-01-26)#

  • 更新相关文档。

  • 修复若干错误

  • 新功能:

    • 为物体新增 FOV,详见用法 15fov_world。

    • 为 WrapToPi 函数新增参数。

    • 为行为新增角色选择。

ir-sim 2.3.0 (2024-12-22)#

主要版本更新:

  • 发布项目文档。

  • 为项目新增覆盖率测试。

  • 重构运动学 handler 和几何 handler 以配置机器人和障碍物。

  • 重组 lidar2d 步进函数以提升性能。

  • 更新函数注释。

  • 修复项目中的若干 bug。

  • 新增 3D 绘图环境。

ir-sim 2.2.6 (2024-11-22)#

  • 重构行为库并新增自定义行为接口。详见用法:13custom_behavior。

  • 为 YAML 文件新增默认名称,与 Python 脚本名匹配。详见用法:12dynamic_obstacle。

  • 更改轨迹可视化样式。详见用法:02robot_world。

  • 重构 save_figure 函数。详见用法:07renderw_world。

  • 修复 env.end() 函数中的 'display' bug。

ir-sim 2.2.5 (2024-10-17)#

  • 将 GIF 文件转为 readme 链接以减小仓库体积

  • 修改机器人箭头的可视化

  • 按像素调整图像尺寸

  • 新增世界时间重置功能

  • 将 matplotlib 后端改为 TkAgg

  • 修复可视化的若干 bug

ir-sim 2.2.4 (2024-09-17)#

  • 修复障碍物的碰撞避免 bug

  • 整理运动学函数

  • 为 object_base 新增 state_shape 和 vel_shape

  • 用 black 格式化所有 Python 代码

  • 完善函数注释并生成 API 文档

ir-sim 2.2.3 (2024-09-01)#

  • 将模块名从 ir_sim 重命名为 irsim,将包名从 ir_sim 重命名为 ir-sim

  • 为项目新增引用信息

  • 优化函数注释

  • 为文档配置 readthedocs 和 sphinx

  • 为物体新增 unobstructed 属性,详见用法:obstace_world

  • 修复 state_dim 错误

ir-sim 2.2.0 (2024-08-30)#

  • 将模块从 ir_sim 重命名为 irsim,将包名从 ir_sim 重命名为 ir-sim

  • 为项目新增引用信息

  • 优化函数注释

ir-sim 2.1.4 (2024-08-19)#

  • 更新函数注释

  • 更新 README

  • 新增更改环境中物体分布的接口

  • 新增环境中障碍物随机化功能

ir-sim 2.1.3 (2024-08-11)#

  • 修复示例中的错误

  • 删除部分旧文件

  • 修复若干错误

ir-sim 2.1.2 (2024-08-04)#

  • 修复 omni 动力学机器人的 bug

  • 修复 RVO 行为错误

  • 替换 object_base 的 diff 描述

ir-sim 2.1.1 (2024-07-15)#

  • 更新 YAML API

  • 增强 object_base 中的功能 (G, h)

  • 扩展项目开发工具

  • 修复若干错误

ir-sim 2.1.0 (2024-03-29)#

大版本更新

  • 重构整个项目框架,所有物体均基于 object base 开发

  • 使用 shapely 构建机器人和障碍物的几何

  • 重构 YAML 接口

  • 为物体新增行为库

  • 新增物体工厂用于创建物体

  • 新增 env logger 用于记录和打印环境状态

ir-sim 1.1.12 (2023-11-02)#

更新 show_trail 的刷新;新增设置机器人目标的方法;修复若干 bug

ir-sim 1.1.11 (2023-04-28)#

新增更改 edgecolor 的函数;新增重复 mkdirs;修复若干 bug

ir-sim 1.1.10 (2023-04-12)#

  • 修复若干错误

  • 新增碰撞模式 'unobstructed'

  • 新增矩形框绘制函数

  • 为障碍物新增半径属性

ir-sim 1.1.9 (2023-03-20)#

  • 修复若干错误

  • 为障碍物新增功能。

ir-sim 1.1.8 (2023-02-27)#

  • 新增地图障碍物

  • 修复机器人重置错误

  • 新增不同车辆模型

ir-sim-v1.1.7 (2023-01-16)#

  • 修复 pyproject.toml 的 bug