ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Webots R2021b 版本技术解析:强化学习 API、WREN 网页渲染与电机关节新特性

Webots R2021b 版本技术解析:强化学习 API、WREN 网页渲染与电机关节新特性 科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载导读本文基于 Webots R2021b2021 年 7 月 16 日发布的官方版本说明系统梳理这一版本的核心技术变更面向强化学习场景新增的 Supervisor 状态保存/恢复 API 与 OpenAI Gym 集成示例、通过在线资源缓存将安装包体积缩减 70% 以上的新 URL 资源系统、将自研渲染器 WREN 移植到 WebAssembly 的全新 Web 仿真界面、支持多指夹爪等场景的耦合电机与带间隙关节 PROTO以及新增的机器人模型、传感器与 ROS 2 集成进展。读完本文你将掌握 R2021b 关键新特性的设计动机、API 用法与仓库内的可验证实现证据。完整的逐条变更清单请参见 Webots R2021 ChangeLog。版本概览R2021b 的六条主线R2021b 的改进集中在六个方向强化学习实验支持、安装包瘦身、Web 端渲染引擎重写、电机与关节功能扩展、机器人模型库扩充、ROS 2/ROS 1 生态集成。下面逐一展开每条主线都结合当前仓库的源码与示例给出实现层面的印证。面向强化学习场景的 Supervisor 新 API强化学习实验最繁琐的一环是 episode 重置reset与状态复制。R2021b 为此新增了四个 Supervisor API全部声明在 include/controller/c/webots/supervisor.h 中void wb_supervisor_node_save_state(WbNodeRef node, const char *state_name); void wb_supervisor_node_load_state(WbNodeRef node, const char *state_name); void wb_supervisor_node_set_joint_position(WbNodeRef node, double position, int index); const char *wb_supervisor_node_export_string(WbNodeRef node);节点状态的保存与恢复save_state / load_statewb_supervisor_node_save_state会保存指定节点及其所有后裔节点的完整仿真状态位置、姿态、速度、关节状态、物理属性等并关联一个字符串标识state_name之后调用wb_supervisor_node_load_state即可在任意时刻将这部分场景回退到已保存的状态。这比传统做法——删除整棵子树再重建——要轻量得多也更适合在多智能体 RL 场景中对单个机器人而非整个世界做部分重置。官方 ChangeLog 对此的表述是 allow partial world reverting to a saved state即允许将世界部分回退到已保存状态。从设计意图看这是为 RL 训练循环中每个 episode 结束即恢复初始构型的典型需求准备的。节点定义的字符串导出export_stringwb_supervisor_node_export_string返回一个可用来重新构造该节点的字符串表示。典型用途是训练中需要按概率复制若干同类实体例如随机摆放多个障碍物或生成多个相同机器人先取一次定义字符串之后按需实例化避免重复查询 DEF 名称与字段。主动/被动关节的人工位置设定set_joint_positionwb_supervisor_node_set_joint_position允许不通过电机Motor指令直接、立即地设定主动关节与被动关节passive joint的位置。index参数用于指定多自由度关节如 Hinge2Joint中的对应轴。这对 RL 非常实用训练中直接搬动机械臂到期望位形无需等待电机 PID 收敛从而显著加速 reset 与数据采集。配套的 OpenAI Gym 集成示例仓库中新增了 OpenAI Gym 集成示例位于 projects/samples/howto/openai_gym/其中 openai_gym.py 演示了将 Webots 仿真封装为 Gym 环境接口action/observation/reward/reset 循环的典型写法配合 openai_gym.wbt 世界文件可直接运行可作为自建 RL 训练框架的起点模板。安装包体积优化与新 URL 资源系统思路资源按需下载 本地缓存R2021b 从安装包中移除了纹理textures、网格meshes和声音sounds等静态资源。这些资源不再随安装包分发而是在仿真加载到对应url字段时从网络下载并缓存在本地供后续复用。官方同时移除了离线文档等冗余内容最终安装包体积大幅缩减OSR2021a 包体积R2021b 包体积Windows1.65 GB448 MBLinux1.45 GB263 MBmacOS1.42 GB226 MBWindows 包从 1.65 GB 降到 448 MBLinux 从 1.45 GB 降到 263 MBmacOS 从 1.42 GB 降到 226 MB——缩减幅度超过 70%。对在服务器、容器或 CI 中频繁部署 Webots 的强化学习流水线而言这是非常可观的收益。支持 http/https 下载的 URL 字段按官方 ChangeLog以下节点的 URL 字段在 R2021b 起支持http://与https://协议下载并缓存Background天空盒Camera背景图ContactProperties接触纹理ImageTexture贴图Mesh网格文件Motor自定义电机特性曲线等旧世界文件迁移提示R2021a 及更早版本的世界文件中纹理/网格往往引用本地相对路径。升级到 R2021b 后需要将这些本地 URL 更新为指向在线资源官方给出的示例是把textures/carpet.jpg这类路径改写为指向 Webots 仓库 R2021b 标签的完整资源地址否则对应资源可能无法加载。新 Web 渲染引擎将 WREN 移植到 WebAssemblyWebots 的 Web 界面流式仿真、动画回放此前使用独立的渲染管线长期存在一个问题网页端与桌面端的阴影、光照参数难以完全一致导致同一场景在两个端看起来不一样。R2021b 的解决方案是釜底抽薪——把 Webots 桌面端自研的 3D 渲染器WRENWebots Renderer ENgine源码位于 src/wren/整体编译为 WebAssembly并直接用于 Web 仿真界面。这样一来网页端与桌面端共享同一套渲染代码光照、阴影与材质效果天然一致可以straightforward地在 Web 上运行高质量仿真与动画。官方同时趁此次改造刷新了 Web 界面的图形用户界面GUI。对使用者而言这意味着通过 Web 分享、演示或远程运行仿真时渲染结果与本地桌面版高度一致不再需要为网页端单独调参。电机与关节功能扩展耦合电机Coupled MotorsR2021b 为 Motor 节点 增加了耦合电机支持在name字段中通过::分隔符指定与之逻辑关联的另一个电机并用新增的multiplier字段设定两者之间的传动比率。在源码 src/webots/nodes/WbMotor.cpp 中可以找到这条实现的直接证据第 76 行mMultiplier findSFDouble(multiplier);解析multiplier字段第 217–223 行通过电机名字中的::分隔符解析并建立mCoupledMotors列表且保持耦合关系的对称性第 357–397 行在计算目标位置、目标速度与力/力矩时统一乘以multiplier()保证主从电机按比例联动第 548–601 行还跨耦合电机校验最小/最大位置与最大速度的一致性约束。# 耦合电机的典型字段用法示意 Motor { name left_finger::right_finger # :: 指定关联电机 multiplier 1 # 传动比率不可为 0默认 1 }这项功能特别适合简化多指夹爪multi-fingered grippers等需要多个关节同步驱动的机构——不再需要在控制器里手动同步多个电机的位置/速度指令。带间隙关节HingeJointWithBacklash / Hinge2JointWithBacklash机械传动中的间隙backlash对真实机器人精度影响显著R2021b 为此新增两个 PROTO 节点HingeJointWithBacklash与Hinge2JointWithBacklash分别扩展 HingeJoint 与 Hinge2Joint用于在铰链中方便地加入间隙效应。以 projects/joints/protos/HingeJointWithBacklash.proto 为例其关键字段与实现机制如下backlash默认 0.01定义齿轮间隙大小取值范围 [0, ∞)gearMass默认 0.1定义模拟间隙的齿轮质量device/outputSensor/startPoint/endPoint与普通关节一致用于挂载电机、位置传感器、起点与终点。实现上该 PROTO 在backlash 0时会在endPoint前插入一个虚拟齿轮实体带物理属性Physics的 Solid并在其内部嵌套一个微型 HingeJoint通过将minStop/maxStop设为±backlash/2、stopERP设为 0让末端在间隙范围内自由游走从而在物理层面还原真实的空行程效应。若backlash为 0则直接退化为普通 HingeJoint。官方同时提供了对应的示例世界见 ChangeLog 的 #2786、#2850 PR。通用 Gear 齿轮 PROTOR2021b 新增了通用GearPROTO用于模拟基于碰撞的传动机构collision-based transmission。其实现位于 projects/objects/gear/protos/Gear.proto是一个使用 JavaScript 模板语言template language: javascript程序化生成几何的 PROTOteeth默认 8齿数取值 [8, ∞)低于 8 会自动回退默认值width默认 0.01齿轮厚度innerRadius默认 0.01中心孔半径pitchRadius默认 0.04齿节圆半径toothDepth默认 0.01齿深density默认 0.001齿轮密度为 0 时禁用物理bodyBoundingObject/teethBoundingObject是否启用齿轮主体圆柱碰撞体、是否在每个齿上生成球形/胶囊碰撞接触点。模板内部按齿数循环计算顶点坐标并生成 IndexedFaceSet 网格同时在teethBoundingObject开启时于每个齿尖生成球/胶囊碰撞体用于齿间啮合的碰撞式传动仿真。新增机器人模型R2021b 在 projects/robots/ 下新增了多款机器人模型对应世界文件均可直接打开运行。模块化移动平台Summit-XL Steel、MiR100、Fabtino新增三款用于物流与室内运输场景的模块化移动平台机器人Robotnik Summit-XL Steelsummit_xl_steel.wbtMobile Industrial Robots MiR100mir100.wbtREC Fabtinofabtino.wbt三款模型都预定义了用于安装附加设备的挂载位点mounting points并预留了前/后激光雷达lidar位方便用户直接在其上扩展传感器与执行器。Niryo Ned 六轴协作机械臂Niryo Ned 是一款面向工业环境中编程教学的 6 轴协作机器人collaborative robot其模型适合用于 ROS 与机械臂运动学/逆运动学教学实验。NVIDIA JetBot 与 Jetson Nano 板卡NVIDIA JetBot 是基于 NVIDIA Jetson Nano 开发板的低成本双轮机器人广泛用于 AI 机器人应用如目标跟随、避障等。除整机模型外R2021b 还单独提供了 NVIDIA Jetson Nano 板卡的独立模型方便用户将其嵌入自建机器人。新增传感器SICK S300 激光雷达与 Altimeter 高度计SICK S300 激光雷达模型R2021b 在传感器库中新增了SICK S300激光雷达lidar模型相关设备模型位于 projects/devices/sick/该目录同时维护多个 SICK 系列激光雷达的 PROTO 与配套文档。S300 是工业安全/导航领域常用的二维激光扫描仪可满足室内移动机器人建图与导航仿真需求。社区贡献的 Altimeter 高度计感谢社区贡献者 sishamiltonR2021b 提供了全新的Altimeter传感器用于获取机器人或机器人部件相对地面的全局高度altitude。其完整 API 与字段说明见 Altimeter 节点参考文档官方示例用法见 示例设备列表中的 Altimeter 小节。该传感器与 GPS 配合可以方便地构建三维位置感知系统。ROS 2 与 ROS 1 集成进展ROS 216 个 Webots 包兼容 Foxy / Galactic / RollingR2021b 持续完善 ROS 2 支持官方 Webots 包webots_ros2数量达到 16 个且本版本完全兼容 ROS 2 当前的两个最新发行版Foxy Fitzroy、Galactic Geochelone以及滚动版本Rolling Ridley。本版本重点新增了四个包webots_ros2_tesla演示 Webots 与 ROS 2 的汽车仿真。特斯拉 Model 3 车辆通过简单的 OpenCV 图像处理实现车道跟随webots_ros2_mavic演示 Webots 与 ROS 2 的无人机仿真。DJI Mavic 2 PRO 无人机使用简单的 PD 控制器跟随给定的geometry_msgs/Twist速度指令webots_ros2_driver全新的 Webots ROS 2 接口核心面向性能设计支持通过 C 插件扩展并可通过 URDF 文件进行便捷配置webots_ros2_control集成ros2_control控制框架的插件已在webots_ros2_turtlebot包中落地。ROS 1ros_control 集成与更简单的传感器启用R2021b 也没有冷落 ROS 1一方面将ros_control框架集成进来通过--use-ros-control启动参数激活即可直接使用diff_drive_controller、joint_state_controller等标准控制器另一方面传感器不再需要通过 service 手动启用——配合--auto-publish参数所有设备会在启动时自动启用并创建对应 topic。此外还新增了--robot-description参数暴露robot_description内含机器人 URDF使 Webots 更容易嵌入 ROS 1 应用。官方同时提供了一个集成 SLAMgmapping与 MoveIt 的 Tiago 演示示例。其他亮点Billboard 节点与 JavaScript 程序化 PROTOBillboard 节点新增 Billboard 节点其子节点会自动平移/旋转以始终面向视点viewpoint。在场景中放置方向指示牌、标签或始终面向用户的辅助信息非常实用其含义可类比三维场景中永远面向相机的公告板。JavaScript 程序化 PROTO程序化 PROTOProcedural PROTO此前仅支持 LUA 脚本R2021b 起新增 JavaScript 支持用法见 JavaScript 程序化 PROTO 文档。上文提到的GearPROTO 正是用 JavaScript 模板语言实现的典型示例——脚本在解析阶段动态生成几何节点让一个参数化齿轮 PROTO 生成任意齿数齿轮成为可能。其他值得一提的底层改进详见 ChangeLog仿真重置simulation reset相关的一批 Bug 修复与同步逻辑优化对 RL 训练稳定性至关重要wb_camera_get_image等图像读取函数性能显著提升Supervisor 新增按节点检索全部字段、绝对/相对位姿获取等函数WorldInfo新增dragForceScale/dragTorqueScale字段等。小结Webots R2021b 是一版面向 AI 训练与 Web 协作的里程碑式更新Supervisor 状态保存/恢复与关节人工设定 API 直击强化学习实验的 reset 痛点在线资源缓存把安装包压缩到几百 MB 级别显著降低服务器/容器部署成本WREN 渲染器移植 WebAssembly 让 Web 端与桌面端渲染质量首次对齐耦合电机、带间隙关节与齿轮 PROTO 则让机构级仿真更接近真实机械。结合本文给出的仓库源码与示例路径读者可以直接在 projects/samples/howto/openai_gym/、projects/robots/ 与 projects/joints/protos/ 等处动手验证这些新特性并以此为起点构建自己的仿真实验。赞分享科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载相关推荐Fleet 文章格式规范全解从结构骨架、关键要点到诚实声明的工作流守则Fleet 文章格式规范全解从结构骨架、关键要点到诚实声明的工作流守则 Fleet 把技术文章thought leadership、how to、对比类沉科研自动驾驶物理引擎从v3平滑升级到v4Apollo Client 4.0迁移完整清单与破坏性变更解析从v3平滑升级到v4Apollo Client 4.0迁移完整清单与破坏性变更解析 Apollo Client 4.0 是行业领先的 GraphQL 客户端前端GraphQL上一篇CANN opbase 算子错误码 EZ0021Invalid Argument Tensor Dtype深度解析多参数数据类型不一致的定位与排查下一篇npx vs npm run深度对比与最佳实践指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表