webots_ros2
Webots + ROS2 机器人仿真桥接框架,支持 SLAM/导航/机械臂控制等完整算法验证
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Webots + ROS2 机器人仿真桥接框架,支持 SLAM/导航/机械臂控制等完整算法验证
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你刚写好一段导航算法,想立刻验证效果——但现实中没有机器人,没有场地,更没有愿意帮你调试一周的实验室。
webots_ros2 就是来解决这个痛点的。它是 Cyberbotics 公司维护的开源机器人仿真框架 Webots 与 ROS2(机器人操作系统2) 之间的桥梁,让你在虚拟3D环境中测试任意机器人算法,无需实体硬件。

图1:Webots + ROS2 联合仿真界面,图中为 TIAGo 机器人在室内环境中进行 SLAM
机器人开发有一个核心矛盾:迭代速度 vs. 硬件成本。一个导航算法的调参,在真实机器人上可能需要数天;在仿真器里,重跑一次只要几分钟。
Webots 正是为此而生。这是一款诞生于1990年代的工业级机器人仿真器,最初用于瑞士洛桑联邦理工学院(EPFL)的教学和研究。经历了三十多年迭代,它支持数百种预置机器人模型(TIAGo、TurtleBot、Universal Robot 等)、精确的物理引擎(基于 ODE/Bullet)和传感器仿真(摄像头、激光雷达、IMU、力矩传感器)。
ROS2 是机器人领域的事实标准,但 Webots 原生并不支持它。webots_ros2 项目填补了这个空白:通过标准 ROS2 接口(topic、service、action)将 Webots 仿真器暴露给 ROS2 生态,使得任何兼容 ROS2 的算法包都能无缝接入仿真环境。
该项目由 Cyberbotics 官方团队维护,同时获得了欧盟 Horizon 2020 框架下 ROSIN 和 OpenDR 计划的资金支持,在学术界和工业界均有广泛应用。
webots_ros2 是一个多包集合,共包含约 15 个独立的 ROS2 包,涵盖从底层驱动到高层算法的完整工具链:
| 包名 | 功能 | 代表机器人 |
|---|---|---|
| webots_ros2_driver | Webots 设备驱动框架 | 通用 |
| webots_ros2_control | ros2_control 硬件抽象层 | 通用 |
| webots_ros2_epuck | 小型移动机器人驱动 | e-puck |
| webots_ros2_tiago | 协作机器人 + 移动底盘 | TIAGo |
| webots_ros2_turtlebot | 经典 SLAM 测试平台 | TurtleBot3 |
| webots_ros2_universal_robot | 工业机械臂控制 | UR5/UR5e |
| webots_ros2_crazyflie | 四旋翼无人机 | Crazyflie 2.0 |
| webots_ros2_mavic | 无人机 | DJI Mavic |
| webots_ros2_importer | URDF/Xacro 模型导入 | 通用 |
| webots_ros2_msgs | 专用消息/服务定义 | — |
从算法类型看,该项目覆盖了机器人研究的几大核心方向:
SLAM(同步定位与地图构建):内置对 cartographer 和 slam_toolbox 的配置示例,机器人通过激光雷达数据实时构建环境地图。结合 nav2(ROS2 Navigation Stack),还能实现从地图到路径规划的完整自主导航流程。

图2:nav2 导航栈在 Webots 仿真环境中的运行效果
运动规划(Motion Planning):通过 moveit2 集成,支持对机械臂进行关节空间和笛卡尔空间的轨迹规划。Universal Robot 包中包含了完整的 MoveIt 配置(moveit_movegroup.yaml、moveit_kinematics.yaml 等),开箱即用。
多机器人协同:代码库中包含 multirobot_launch.py,可同时启动多个机器人实例进行协同任务仿真,例如多机器人探索或多臂协作装配。
传感器融合:支持 IMU、摄像头(含识别功能)、激光雷达、力矩传感器的数据仿真,并提供 CameraRecognitionObject 等高级消息类型,可直接用于目标检测算法的训练数据生成。

图3:2D SLAM 建图效果(黑白为障碍物,彩色为机器人路径)
该项目采用典型的 ROS2 元包(metapackage)架构,所有子包通过 package.xml 声明依赖关系,最终在 workspace 中一起编译。
语言构成:主力语言为 C++(驱动层、插件系统、ros2_control 硬件接口)和 Python(节点脚本、launch 文件、工具脚本),符合 ROS2 生态的主流实践。
核心插件系统:Webots 与 ROS2 的交互通过其自定义插件机制实现。在 webots_ros2_driver 中,定义了 Ros2SensorPlugin、Ros2Control 等 C++ 插件类,加载到 Webots 仿真世界中,将传感器数据发布为 ROS2 topic,并将 ROS2 command 下发到仿真器执行物理动作。这一设计使得添加新传感器/执行器时无需修改核心代码,只需实现对应插件接口即可。
ros2_control 集成:这是该项目最具技术含量的部分。ros2_control 是 ROS2 的标准化硬件抽象层,而 webots_ros2_control 包通过 C++ 实现了一个 Ros2ControlSystem 类,将 Webots 仿真器的物理模型暴露为符合 ros2_control 接口的硬件资源(关节控制器、力矩传感器等)。这意味着:真实机器人上使用的同一套 ros2_controllers(如 joint_trajectory_controller、diff_drive_controller)可以直接无缝迁移到仿真环境中,算法验证结果具有高度可迁移性。
URDF/Xacro 导入器:webots_ros2_importer 提供了将真实机器人的 URDF/Xacro 模型转换为 Webots .wbt 格式的能力。这对于研究新型机器人而不存在于 Webots 预置库中的场景非常有价值,降低了新机器人的仿真准入门槛。
代码质量:项目包含完整的 CI 流水线(GitHub Actions),测试覆盖 clang-format 代码格式化检查、版权声明检查(Apache 2.0)、PEP8 Python 规范检查,以及系统级集成测试(test_system_*.py),确保每个 PR 的代码质量。
环境要求:Webots 是一款重量级应用(完整安装约 2-3 GB),且依赖图形环境(X11/Wayland)。推荐在 Ubuntu 20.04 或 22.04 上运行,配合 ROS2 Humble 或 Jazzy。macOS 和 Windows 也有官方支持但社区资源较少。
安装方式:官方提供三种路径——
colcon build 完整编译osrf/ros:jazzy-desktop + Webots R2025a,适合 CI/CD 场景动手门槛:对于有 ROS2 使用经验的开发者,安装和运行官方提供的示例(launch 文件)大约需要 30 分钟。但若要深度定制(例如添加新传感器、编写自定义控制器),需要具备 C++ 插件开发和 ros2_control 的知识积累,门槛明显上升。
不支持一键部署:由于 Webots 本身是重型图形仿真应用,无法通过简单的 docker-compose up 启动(无 headless 模式,或 headless 模式功能受限)。不过 GitHub Actions CI 中使用了 Docker 来标准化测试环境,说明 Docker 路径是可行的开发工作流选择。
物理真实性:Webots 的物理引擎(Bullet)在高精度接触力控场景(如精细抓取)下不如 Mujoco,但对于导航、SLAM、机械臂点对点运动等主流研究场景,精度足够。Cyberbotics 也在持续改进物理模型。
图形性能:Webots 是 CPU/GPU 混合渲染的仿真器,在没有独立 GPU 的环境下(如服务器、无头节点),帧率和仿真速度可能明显下降。有研究者在 HPC 集群上使用虚拟显示驱动(如 xvfb)运行 headless 仿真,但需要额外调优。
ROS2 版本绑定:该项目与 ROS2 版本强耦合。ROS2 的版本迭代(从 Foxy 到 Humble,再到 Jazzy)涉及底层通信中间件(DDS)配置的变化,升级一次 ROS2 版本意味着重新验证所有包的兼容性。2025 年初,项目已开始全面支持 Jazzy,但 Humble 用户的迁移仍需手动处理。
维护者单一:主要贡献者集中于 Cyberbotics 公司,社区驱动的新功能开发相对有限,与 ROS 生态中完全社区化的项目(如 Navigation2、MoveIt2)相比,开放性稍弱。
在具身智能(Embodied AI)和大模型控制机器人成为热点的当下,高保真仿真环境的重要性急剧上升。webots_ros2 的价值在于:
从增长趋势看,随着 ROS2 社区从 Humble 向 Jazzy 迁移,以及具身智能研究的热度持续攀升,该项目的活跃度和影响力预计将继续增长。它代表了一种务实的技术路线:在虚拟世界中快速试错,在真实世界中一击必中。
总结:webots_ros2 是连接 Webots 仿真引擎与 ROS2 机器人操作系统的官方桥接包,提供从 SLAM、导航到机械臂控制的完整仿真工具链。适合有 ROS2 基础的机器人和 AI 研究者,用于算法快速验证和仿真数据生成。部署有一定门槛(图形环境依赖),但 Docker 支持使其在 CI/CD 场景下具有良好的可复现性。