Webots R2023b 版本深度解析:Pose 节点迁移、VacuumGripper 真空吸盘与外置控制器启动器实战 科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载Webots R2023b 是 Cyberbotics 于 2023 年 6 月 28 日发布的重大版本更新本篇文章以官方发布文档 docs/blog/Webots-2023-b-release.md 为核心骨架结合仓库内节点源码、转换脚本与示例世界完整梳理这一版本引入的场景树架构变革Solid 移除 scale、新增 Pose 节点、真空吸盘新设备节点、外置控制器启动器、ROSbot XL 与 Robotiq 系列机器人模型等关键技术点。读完本文你将掌握 R2023b 的升级迁移路径、Pose 节点的正确用法、VacuumGripper 的控制器编程接口以及如何用启动器管理本地/远程 extern controllers。版本概览R2023b 带来了什么R2023b 的核心主题可以概括为一次面向物理一致性的架构重构 一批面向工业场景的新资产架构层面从 Solid 及其派生节点中移除了scale字段并引入新的 Pose 节点作为 Solid 的新父类杜绝缩放传感器/包围盒导致的物理不一致行为资产层面新增 Husarion ROSbot XL 移动机器人、Robotiq 2F-85 / 2F-140 平行夹爪与 EPick 真空夹爪并新增 VacuumGripper 设备节点工具链层面推出 extern controller 启动器、PROTO 文件缩进格式化脚本proto_formatter.py生态层面PROTO 文档体系迁移至 webots.cloudROS 2 支持扩展至 Iron Irwini。完整的逐条变更列表含每个功能对应的 GitHub Pull Request 编号请查阅 docs/reference/changelog-r2023.md 中 Webots R2023b 一节下文仅深入讲解发布文档重点强调的内容。新机器人Husarion ROSbot XLR2023b 在 Webots 机器人库中新增了来自 Husarion 的ROSbot XL——一款基于 ROS 的四轮差速移动机器人平台面向教育、研究与物流场景。该模型随仓库一起提供了完整的演示世界位于 projects/robots/husarion/rosbot_xl/worlds/rosbot_xl.wbt。在 Webots 中通过File Open Sample World rosbot_xl.wbt即可打开世界内包含一个铺有地毯质感的室内场景使用TexturedBackground、Floor与CarpetFibers外观并预设了Viewpoint.follow Rosbot跟随视角方便直接观察机器人运动。与 R2023a 中引入的第一代 ROSbot 不同ROSbot XL 是一个独立的 PROTO 模型其定义位于 projects/robots/husarion/rosbot_xl/protos/RosbotXl.proto配套的webots.yaml声明文件使其可被 Webots 的 PROTO 索引机制识别。这延续了 Webots 将真实厂商机器人Husarion、Robotis、Clearpath 等1:1 复刻进仿真器的传统方便开发者先在仿真中验证 ROS 导航、避障等算法再无缝移植到真实硬件。新设备对象Robotiq 系列夹爪面向工业操作场景R2023b 一次性为 Webots 库添加了三款 Robotiq 夹爪PROTO 模型类型特点Robotiq2f85Gripper.proto两指平行夹爪 2F-8585 mm 行程适合中小型工件Robotiq2f140Gripper.proto两指平行夹爪 2F-140140 mm 行程适合大型工件RobotiqEPickGripper.proto真空吸盘 EPick内部集成 VacuumGripper 节点见下文这些模型的完整定义位于仓库 projects/devices/robotiq/protos 目录下每个 PROTO 都配套了.yaml元数据与网格资源。值得注意的细节是三款夹爪均改用耦合电机coupled motors驱动即两个指节的电机在底层通过耦合关系联动而不是各自独立控制详见其他亮点一节RobotiqEPickGripper.proto内部把 VacuumGripper 节点挂在夹爪末端连杆的endPoint上并包含名为 end effector 的SuctionCup子模型——这正是 R2023b 新增的真空吸盘节点与真实厂商产品的首次官方结合。核心架构变更Solid 移除 scale引入 Pose 节点这是 R2023b 最重要的破坏性变更直接影响所有.wbt世界文件与 PROTO 模型的编写习惯。为什么移除 scale在旧版本中Solid 及其所有后代Device、Robot 等都继承自 Transform因而带有scale字段。官方给出的理由是scale会导致 solid、device 与 robot 节点产生不一致的物理行为——对一个传感器或包围盒boundingObject做缩放本质上没有物理意义却容易让惯性矩、碰撞体积与视觉外观互相矛盾。Pose 节点没有 scale 的 Transform为弥补移除scale造成的层级空缺R2023b 引入了新节点 Pose。简单来说Pose 是一个不带 scale 的 Transform其完整字段定义如下Pose { SFVec3f translation 0 0 0 # any vector SFRotation rotation 0 0 1 0 # unit axis, (-inf, inf) angle SFFloat translationStep 0.01 SFFloat rotationStep 0.261799387 }translation定义子坐标系相对父坐标系的平移rotation四个浮点数rx ry rz α前三个分量构成归一化旋转轴长度为 1否则仿真结果未定义α 为绕轴旋转角度弧度。例如绕 z 轴旋转 π/2 写为rotation 0 0 1 1.5708绕 x、y 轴之间的对角轴旋转 π 写为rotation 0.7071 0.7071 0 3.1416translationStep/rotationStep3D 视图中选中对象时平移/旋转手柄的最小步长设为 0 则连续调节。在节点继承关系上Pose 派生自 Group而 Solid、Transform、Fluid 均直接派生自 Pose。从源码上看WbPose.hpp 与 WbPose.cpp 的实现继承了 WbTransform 的平移/旋转/参考系计算逻辑但移除了 scale 相关代码路径。边界规则Transform 还能做什么移除 scale 后的权限划分非常明确Transform 仍可用于缩放几何体Shape 等这是它保留的意义Transform 不再允许出现在 boundingObjects 中Transform 不能再包含 Solid 或其任何后代Device、Robot 等这些节点只能挂在 Pose 下。换言之今后想给某个刚体换坐标系就用 Pose想缩放纯视觉几何才用 Transform。自动转换机制与手工迁移脚本为了减少升级痛苦Webots 实现了自动转换机制打开世界文件时引擎会自动把不涉及缩放的 Transform 改写为 Pose。但有两点限制scale 不是默认值1 1 1的 Transform 不会被自动转换引擎无法替你决定如何缩放刚体PROTO 模型文件.proto不会在打开时被自动改写需要用户显式执行转换。针对 PROTO以及需要批量处理的 world官方提供了转换脚本 scripts/converter/convert_transform_to_pose.py。其用法是python convert_transform_to_pose.py /path/to/your/webots/project脚本会自动递归扫描目标项目下的protos/*.proto与worlds/*.wbt对每个文件执行转换。从源码看其核心逻辑convert_children函数为对每个Transform节点检查其scale字段若 scale 为[1, 1, 1]默认值直接移除该字段并把节点名改写为Pose同时打印Transform found and replaced若 scale 非默认值则跳过并打印Transform found but not replaced due to a non-default scale需要你手工决定如何调整递归处理children、endPoint与boundingObject三个字段且对USE引用直接跳过避免破坏 DEF/USE 结构。脚本依赖同目录的 scripts/converter/webots_parser.py 解析世界/ PROTO 文件。迁移完成后建议在 Webots 中重新打开世界并检查场景树与物理表现重点关注含缩放刚体的自定义模型。新设备节点VacuumGripper 真空吸盘为支持 pick-and-place 与吸盘攀爬等场景R2023b 新增了 VacuumGripper 设备节点。它派生自 Device 与 Solid用于仿真真空吸附产生的物理连接可在运行期由控制器建立/销毁连接。节点字段详解VacuumGripper { SFBool isOn FALSE # {TRUE, FALSE} SFFloat tensileStrength -1 # {-1, [0, inf)} SFFloat shearStrength -1 # {-1, [0, inf)} SFInt32 contactPoints 3 # [1, inf) }isOn吸盘泵的开关状态。注意on 状态只表示泵已启动不代表已与物体建立物理连接真正的连接需要满足泵开启且有合法的 Solid 与吸盘发生碰撞两个条件。若.wbt文件中吸盘初始即为 on 且旁边有可用 Solid仿真会自动建立连接——可以利用这一点在仿真开始时即处于已吸附的机械构型tensileStrength可承受的最大拉伸力N。拉伸力指沿负 x 轴方向把两个物体拉开的分量超过该值连接断裂。默认-1表示无限强度、永不拉断shearStrength可承受的最大剪切力N对应使两物体在 yz 平面内相对滑动的力超过则断裂默认-1同样表示无限强contactPoints建立连接所需的最小接触点数默认 3。连接检测基于碰撞检测。控制器 APIVacuumGripper 提供两组 API覆盖 C / C / Python / Java / MATLAB 五种语言吸附状态查询wb_vacuum_gripper_enable_presence/disable_presence/get_presence_sampling_period/get_presence以指定毫秒采样周期开启/关闭是否已连接 Solid的查询get_presence在有物体连接时返回TRUE。注意采样仅在首个采样周期过后才生效。吸盘开关控制wb_vacuum_gripper_turn_on/turn_off/is_on打开/关闭吸附泵并同步更新isOn字段。动态 Solid 在泵开启时与吸盘碰撞即建立物理连接此后两刚体保持恒定距离与相对姿态调用turn_off则销毁连接。C 语言头文件为 include/controller/c/vacuum_gripper.hPython 绑定位于 lib/controller/python/controller/vacuum_gripper.py。以 Python 为例一个典型的拾取循环骨架如下from controller import VacuumGripper gripper VacuumGripper(gripper) gripper.enablePresence(32) # 每 32 ms 查询一次吸附状态 # ... 移动到目标物体上方并下压使吸盘与物体发生碰撞 ... gripper.turnOn() # 开启吸附泵建立连接 while not gripper.getPresence(): # 等待物理连接建立 pass # ... 执行搬运 ... gripper.turnOff() # 释放物体实战官方示例世界仓库提供了开箱即用的演示世界 projects/samples/devices/worlds/vacuum_gripper.wbtFile Open Sample World vacuum_gripper.wbt。该世界包含两块质量分别为 2 kg 与 0.5 kg 的CardboardBox以及一台三自由度机械臂由 yaw/pitch/roll 三个 HingeJoint RotationalMotor 构成腕部末端由 SliderJoint 上的 LinearMotor 带动一个 VacuumGripper配置了tensileStrength 65、shearStrength 162即会真实断裂的有限强度吸盘。Robotiq 官方 PROTO projects/devices/robotiq/protos/RobotiqEPickGripper.proto 则展示了生产级用法其末端endPoint VacuumGripper挂载了SuctionCup子模型与多段圆柱构成的 boundingObjectphysics mass 0.001并通过参数化名称% ... % vacuum joint sensor与 PositionSensor 关联。在测试侧tests/api/worlds/vacuum_gripper.wbt 也对该节点进行了 API 级回归覆盖。外置控制器启动器一行命令接管 extern controllersR2023b 之前启动 extern controller 需要手工设置WEBOTS_HOME、LD_LIBRARY_PATH/PYTHONPATH等一系列环境变量极易出错。新版引入了官方控制器启动器它会根据命令行选项、当前平台与控制器类型自动配置全部环境变量。完整说明见 docs/guide/running-extern-robot-controllers.md。工作机制与支持类型将机器人节点的controller字段设为extern后Webots 不再自动启动控制器而是等待外部进程连接若同时设置robot.synchronization TRUEWebots 会等待控制器启动后才推进仿真。启动器支持四类控制器文件可执行文件Linux/macOS 无扩展名Windows 为.exePython.pyJava.jar与.classMATLAB.m。命令行用法首先设置WEBOTS_HOME指向 Webots 安装目录export WEBOTS_HOME/home/username/webots然后按平台调用启动器# Windows webots-controller.exe [options] path/to/controller/file [controller-args] # Linux $WEBOTS_HOME/webots-controller [options] path/to/controller/file [controller-args] # macOS $WEBOTS_HOME/Contents/MacOS/webots-controller [options] path/to/controller/file [controller-args]控制器文件路径可以是绝对路径也可以相对启动器所在目录。选项一览--help 显示帮助并退出 --protocolipc|tcp 控制器与 Webots 的通信协议默认 ipc同机 远程连接须用 tcp --ip-addressip 运行 Webots 的远程主机 IP仅 tcp 协议使用 --portport 连接端口默认 1234Webots 默认端口多实例时 用于指定目标 Webots 实例 --robot-namename 按 Robot 节点 name 字段锁定目标机器人 适用于一个仿真中有多个 extern 机器人 --interactive 以 MATLAB 交互调试模式启动 --matlab-pathpath 指定特定版本 MATLAB 可执行文件路径 --stdout-redirect 将控制器 stdout 重定向到 Webots 控制台 --stderr-redirect 将控制器 stderr 重定向到 Webots 控制台典型场景速查单仿真单本地机器人无需任何选项默认参数自动匹配唯一实例与唯一机器人单仿真多本地机器人为每个机器人分别开启终端用--robot-nameRobot.name区分目标多仿真单机器人用--portWebots启动端口区分不同 Webots 实例多仿真多机器人同时使用--port与--robot-name远程控制器--protocoltcp --ip-address远程主机IP可加--port、--robot-name。Webots 端可在偏好设置Network选项卡中按X.X.X.X或 CIDRX.X.X.X/netmask白名单限制可连接的 IP列表为空则允许所有连接Snap 版 Webots需额外设置WEBOTS_HOME/snap/webots/current/usr/share/webots与LD_LIBRARY_PATH$WEBOTS_HOME/lib/controller启动器会自动计算WEBOTS_TMPDIR基于SNAP_USER_COMMON用于跨沙箱共享通信文件夹建议不要手动覆盖该变量MATLAB 控制器默认以非交互 batch 模式运行传--interactive可打开完整桌面界面启动器按平台查找默认安装目录Windows:C:\Program Files\MATLAB\R20XXx\...、Linux:/usr/local/MATLAB/R20XXx/...、macOS:/Applications/MATLAB_R20XXx.app亦可用--matlab-path指定。一个完整示例官方文档给出了经典流程打开nao_demo.wbt→ 将 Nao 的controller字段改为extern→ 保存并运行仿真 → 在终端执行$WEBOTS_HOME/webots-controller $WEBOTS_HOME/projects/robots/softbank/nao/controllers/nao_demo/nao_demo远程场景只需追加--protocoltcp --ip-address127.0.0.1替换为实际远程 IP。启动成功后即可看到 Nao 被外部进程驱动运动。从实现角度看启动器源码为 src/controller/launcher/webots_controller.c它内部维护WEBOTS_HOME、WEBOTS_CONTROLLER_URL、webots_project、webots_controller_name、webots_controller_args、webots_version等环境变量并根据平台差异PATH_SEPARATOR、ENV_SEPARATOR等拼装 PATH、Python 路径与库路径——这正是launcher 替你搞定一切环境配置的底层依据。PROTO 文档体系重构与 webots.cloudR2023b 将所有关于 robots、sensors、actuators 和 objects 的 PROTO 文档从本地文档迁移到了 webots.cloud 的 PROTO 目录带来的体验升级包括在网页上即可浏览、检索全部 PROTO 模型在线直接修改并测试 PROTO 参数无需本地打开 Webots支持将自己的 PROTO 模型提交到共享库供所有人复用。仓库内各厂商 PROTO如 projects/devices/robotiq/protos、projects/robots/husarion/rosbot_xl/protos配套的.md文档与webots.yaml元数据正是这套云端文档体系的数据来源。与分享并使用你自己的 PROTO相关的完整说明可参见官方指南中 webots.cloud 章节。ROS 2 支持增强R2023b 持续推进 Webots 的 ROS 2 集成对应独立的 webots_ros2 包官方列出的新增能力包括支持 ROS 2 Iron Irwini为VacuumGripper、Pen、Compass、Emitter、Receiver等新设备新增 ROS 2 接口新增一个节点仅在 Webots 就绪后再启动其他节点解决启动时序竞态新增节点以更干净的方式启动机器人插件新增TIAGo 完整配置 launch 文件配合 R2023b 中 TIAGo 模型更名与默认 RGBD 相机增强。结合 docs/reference/changelog-r2023.md 可见R2023b 还修复了一批 ROS 2 / extern controller 相关的连接与重连问题如降低 extern controller 连接重试延迟、修复 snap 版连接目标实例等整体上让仿真端 Webots 控制端 ROS 2的开发链路更加稳定。其他亮点proto_formatter 与耦合电机PROTO 文件格式化脚本R2023b 新增了 scripts/proto_formatter 目录下的proto_formatter.py脚本用于自动修正 PROTO 文件的缩进。该脚本可集成进 VS Code配置为保存时格式化帮助团队统一 PROTO 源码风格、减少手写缩进错误——对于拥有大量自定义 PROTO 的工程尤为实用。机器人夹爪改用耦合电机本版本将仓库内各机器人模型的夹爪电机从独立控制改为耦合电机coupled motors两个夹指由逻辑上联动的电机共同驱动保证对称夹取并简化控制器代码。源码层面WbMotor.hpp 中维护了mCoupledMotors列表及addToCoupledMotors()、checkMinAndMaxPositionAcrossCoupledMotors()、checkMaxVelocityAcrossCoupledMotors()、checkMultiplierAcrossCoupledMotors()等方法负责在校验阶段对耦合电机组的限位、速度与乘数进行一致性检查WbMotor.cpp 实现其联动逻辑。升级与迁移建议面向 R2023b或更高版本的升级路径可归纳为三步先让世界文件自动转换直接打开.wbt让 Webots 自动把无缩放 Transform 改写为 Pose保存后即完成基础迁移再处理 PROTO 模型对项目执行python scripts/converter/convert_transform_to_pose.py project批量转换.proto与.wbt并人工核查脚本报告出的非默认 scale Transform这类节点需要你根据物理尺寸手工调整验证物理一致性重点检查 boundingObject、惯性矩阵与自碰撞表现——这正是 R2023b 移除 scale 的初衷所在。若你的旧世界中存在给 Solid 整体缩放的用法需要改由 Pose 下的几何体 Shape 承担缩放职责。此外R2023b 还附带多项值得注意的增强完整清单见 docs/reference/changelog-r2023.mdPython APICamera.getImage性能大幅提升、Recognition.occlusion字段由SFBool改为SFInt32支持两级精度、ContactProperties新增maxContactJoints字段以平衡碰撞精度与性能、移除了 SUMO 依赖、升级 Qt 6.4.3 等。对于需要与 ROS 2 联调、工业抓取仿真或大规模 PROTO 工程维护的开发者R2023b 是一次值得规划的版本跃迁。赞分享科研自动驾驶物理引擎【免费下载链接】webotsWebots Robot Simulator项目地址https://gitcode.com/gh_mirrors/web/webots点击查看免费下载相关推荐Webots R2022b 版本全解析新机器人、CadShape 节点与云端仿真Webots R2022b 版本全解析新机器人、CadShape 节点与云端仿真 Webots R2022b 是 Webots 机器人仿真器在 2022 年科研自动驾驶物理引擎开启机器人仿真新纪元Webots全栈开发深度解析开启机器人仿真新纪元Webots全栈开发深度解析 想象一下你站在一个虚拟实验室中眼前是各种形态的机器人——从灵巧的工业机械臂到智能的自动驾驶汽车它们都在科研自动驾驶物理引擎Fold Craft Launcher移动端Java版Minecraft启动器深度解析与实战指南Fold Craft Launcher移动端Java版Minecraft启动器深度解析与实战指南 在移动设备上畅玩Java版Minecraft曾经只是一个美好移动开发游戏开发上一篇鸣潮自动化工具终极指南解放双手让AI帮你轻松刷声骸做日常下一篇【亲测免费】 vCheck-vSphere 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考