跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Webots 2025a 与 ROS 2 Jazzy e-puck 机器人集成实战

基于 Webots 2025a 与 ROS 2 Jazzy,详解 e-puck 机器人的仿真启动、通信验证、运动控制及 Nav2 导航全流程。涵盖环境配置、节点话题分析、底层关节控制、地图解析与航点规划,提供参数调优与多机器人扩展思路,适合机器人开发入门与进阶研究。

Pythonist发布于 2026/4/8更新于 2026/5/2217 浏览
Webots 2025a 与 ROS 2 Jazzy e-puck 机器人集成实战

Webots 2025a + ROS 2 Jazzy e-puck 机器人分步使用与研究教程

本教程聚焦实操步骤和深度研究维度,从基础仿真启动到核心模块拆解,每一步都标注操作指令、验证方法和研究切入点。我们将跳过繁琐的环境安装环节(若未配置请参考文末附录),直接进入核心逻辑。

前提确认

在开始之前,请确保环境就绪。执行以下命令验证无报错:

# 加载 ROS 2 环境(若已添加到.bashrc 可跳过)
source ~/webots_ws/install/setup.bash

# 验证功能包存在
ros2 pkg list | grep webots_ros2_epuck

# 验证 Webots 版本
webots --version
# 输出应包含 2025a

第一阶段:基础仿真启动与核心通信验证

1. 启动 e-puck 核心仿真

操作指令:

# 启动仅包含 e-puck 机器人的基础仿真
ros2 launch webots_ros2_epuck robot_launch.py

现象:

  • Webots 2025a 自动启动,界面显示 e-puck 机器人在空场景中;
  • 终端无红色报错(黄色警告可忽略,多为参数默认值提示)。

注意:若左上角显示异常或黑屏,通常与摄像头渲染设置有关,可在 Webots 图形选项中调整分辨率或关闭部分特效。

2. 验证 ROS 2 节点与话题

新开终端,分步执行以下命令,逐行验证并记录结果,这是理解机器人与 ROS 2 通信链路的关键。

(1)查看运行的节点
ros2 node list

预期输出(核心节点):

/epuck/base_controller
/epuck/robot_state_publisher
/webots_ros2_driver
/webots_ros2_epuck_node

研究点:

  • /webots_ros2_driver:Webots 与 ROS 2 的核心桥接节点,负责传感器/执行器数据转发;
  • /epuck/base_controller:机器人运动控制节点,处理速度指令。
(2)查看核心话题列表
ros2 topic list | grep epuck

预期核心话题:

话题名称数据类型作用研究价值
/epuck/cmd_velgeometry_msgs/msg/Twist速度控制指令机器人运动控制入口
/epuck/laser_scansensor_msgs/msg/LaserScan激光雷达数据SLAM/避障/定位核心输入
/epuck/odometrynav_msgs/msg/Odometry里程计数据位姿估计、运动建模
/epuck/joint_statessensor_msgs/msg/JointState关节状态底层轮子运动反馈
/epuck/imusensor_msgs/msg/ImuIMU 数据姿态补正、运动融合

实际运行中,你可能会看到更多话题,如 /camera/image_color 等,这取决于场景配置。

(3)实时查看传感器数据
# 查看激光雷达数据(精简输出,仅看关键值)
ros2 topic echo /epuck/laser_scan --noarr

# 查看里程计数据(关注 position 和 orientation)
ros2 topic echo /epuck/odometry --noarr

# 查看 IMU 数据(关注角速度和加速度)
ros2 topic echo /epuck/imu --noarr

研究点:

  • 激光雷达的 angle_min/angle_max(扫描范围)、range_min/range_max(有效距离);
  • 里程计的 pose(位姿)和 twist(线/角速度)是否与 Webots 中机器人运动同步;
  • IMU 数据的噪声水平(仿真中可通过 Webots 调整传感器精度)。

文章配图

第二阶段:手动控制与交互测试

1. 单次速度指令

测试执行器响应,直接发布速度消息:

# 前进:线速度 0.2m/s,角速度 0rad/s
ros2 topic pub --once /epuck/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

# 左转:线速度 0,角速度 1rad/s
ros2 topic pub --once /epuck/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}"

# 停止:所有速度为 0
ros2 topic pub --once /epuck/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

现象:Webots 中机器人对应执行前进/左转/停止动作。

2. 持续键盘控制

使用 ROS 2 工具进行交互式测试:

# 安装键盘控制工具(若未装)
sudo apt install ros-jazzy-teleop-twist-keyboard

# 启动键盘控制,映射到 e-puck 的 cmd_vel 话题
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r cmd_vel:=/epuck/cmd_vel

操作说明:

  • w:前进,x:后退,a:左转,d:右转,s:停止;
  • z/c:调整线速度,q/e:调整角速度。

研究点:

  • 速度指令的响应延迟(仿真中可通过 Webots 调整 "real time factor");
  • 最大线速度/角速度限制(e-puck 物理限制:线速度≤0.3m/s,角速度≤5rad/s);
  • 里程计数据是否与实际运动一致(验证运动模型精度)。

文章配图

第三阶段:Rats Life 场景与地图系统研究

1. 启动带地图的 Rats Life 场景

# 启动包含迷宫地图的完整场景
ros2 launch webots_ros2_epuck rats_life_launch.py

现象:

  • Webots 加载 Rats Life 迷宫场景,e-puck 位于场景起点;
  • ROS 2 自动加载地图服务器(map_server),发布 /map 话题。

2. 解析地图配置文件

找到地图配置文件路径:

# 定位 map_rats_life.yaml 文件
rospack find webots_ros2_epuck
# 进入配置目录
cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/config

打开 map_rats_life.yaml,逐行分析:

image: map_rats_life.pgm # 地图图像文件(PGM 格式)
resolution: 0.05 # 地图分辨率:0.05m/像素(5cm)
origin: [-10.0, -10.0, 0.0] # 地图原点(对应 Webots 世界坐标系)
negate: 0 # 0=白色为自由空间,1=黑色为自由空间
occupied_thresh: 0.65 # 像素值>0.65 视为障碍物
free_thresh: 0.196 # 像素值<0.196 视为自由空间
frame_id: map # 地图坐标系名称(必须与 Nav2 对齐)

研究操作:

# 查看地图话题数据(验证地图加载)
ros2 topic echo /map --noarr

# 可视化地图(需启动 RViz2)
rviz2

在 RViz2 中配置:

  1. Fixed Frame 选择 map;
  2. 添加 Map 组件,Topic 选择 /map;
  3. 添加 RobotModel 组件,Robot Description 选择 /robot_description;
  4. 添加 LaserScan 组件,Topic 选择 /epuck/laser_scan。

现象:RViz2 中显示迷宫地图、机器人模型和激光扫描数据。

3. 场景自定义修改

进阶研究可以从修改场景入手:

  • 添加/删除障碍物:在 Webots 中拖拽 "Box" 节点,调整尺寸/位置;
  • 修改机器人传感器:选中 e-puck → 双击 "LaserEmitter" → 调整扫描角度/精度;
  • 调整地面材质/摩擦力:影响机器人运动模型。

保存修改后,重新启动 rats_life_launch.py 验证效果。

第四阶段:ROS 2 Control 底层控制研究

1. 解析 ros2_control.yml 配置

cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/config
cat ros2_control.yml

核心内容解析:

controller_manager: ros__parameters:
  update_rate: 100 # 控制频率 100Hz
joint_state_broadcaster:
  type: joint_state_broadcaster/JointStateBroadcaster
joint_velocity_controller:
  type: velocity_controllers/JointGroupVelocityController
  ros__parameters:
    joints: # 控制的关节名称(e-puck 左右轮)
      - left_wheel_joint
      - right_wheel_joint
    interface_name: velocity # 控制接口类型(速度控制)

研究点:

  • update_rate:控制频率越高,运动越平滑,但占用资源越多;
  • 关节名称必须与机器人 URDF 中的定义一致(可通过 /robot_description 查看)。

2. 底层关节控制测试

# 查看关节状态(确认关节名称和当前速度)
ros2 topic echo /epuck/joint_states

# 发布关节速度指令(直接控制左右轮)
# 左轮 1rad/s,右轮 1rad/s → 前进
ros2 topic pub /epuck/joint_velocity_controller/commands std_msgs/msg/Float64MultiArray "{data: [1.0, 1.0]}"

# 左轮 -1rad/s,右轮 1rad/s → 原地旋转
ros2 topic pub /epuck/joint_velocity_controller/commands std_msgs/msg/Float64MultiArray "{data: [-1.0, 1.0]}"

# 停止关节运动
ros2 topic pub /epuck/joint_velocity_controller/commands std_msgs/msg/Float64MultiArray "{data: [0.0, 0.0]}"

研究对比:

  • 对比 /epuck/cmd_vel(高层运动指令)和 /epuck/joint_velocity_controller/commands(底层关节指令)的控制差异;
  • 分析关节速度与 /epuck/odometry 中速度的映射关系(验证运动学模型)。

第五阶段:Nav2 航点导航全流程研究

1. 启动导航系统

# 启动包含 Nav2 的航点导航场景
ros2 launch webots_ros2_epuck rats_life_waypoints_launch.py

启动后自动加载的模块:

模块名称节点/话题作用
地图服务器/map提供全局地图
AMCL 定位/amcl_pose基于激光的蒙特卡洛定位
BT 导航器/navigate_to_pose行为树导航逻辑
路径规划器/plan全局/局部路径规划
控制器/cmd_vel输出速度指令到机器人

2. 验证 Nav2 核心组件

# 查看 AMCL 定位结果(机器人在地图中的位姿)
ros2 topic echo /amcl_pose --noarr

# 查看全局路径规划结果
ros2 topic echo /plan --noarr

# 查看 Nav2 状态(是否就绪)
ros2 topic echo /nav2_controller/status --noarr

关键验证:

  • /amcl_pose 的 pose 应与 Webots 中机器人位置一致(误差 < 0.1m);
  • /nav2_controller/status 的 status 应为 1(就绪)。

3. 发送导航目标点

# 安装 Nav2 命令行工具(若未装)
sudo apt install ros-jazzy-nav2-cli

# 发送目标点 1:x=2.0, y=1.0, 朝向 0°(w=1.0)
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{ pose: { header: {frame_id: 'map'}, pose: { position: {x: 2.0, y: 1.0, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0} } } }"

# 发送目标点 2:回到起点(x=0.0, y=0.0)
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{ pose: { header: {frame_id: 'map'}, pose: { position: {x: 0.0, y: 0.0, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0} } } }"

现象:

  • Webots 中机器人自动规划路径,避开障碍物到达目标点;
  • 终端显示 result: {success: True} 表示导航成功。

4. Nav2 参数调优

打开 Nav2 参数文件:

cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/config
cat nav2_params.yaml

关键参数调优方向:

参数模块核心参数调优目的
amclalpha1-alpha5降低定位误差(仿真中可设为 0.1)
dwb_controllermax_vel_x/min_vel_x调整最大/最小线速度
dwb_controllermax_vel_theta调整最大角速度
obstacle_layermax_obstacle_height适配激光雷达高度
bt_navigatordefault_bt_xml_filename更换导航行为树(如添加避障逻辑)

调优测试:

  • 修改 max_vel_x 从 0.2→0.3,重启导航,观察机器人运动速度变化;
  • 增大 alpha1 到 0.5,观察 AMCL 定位误差是否增大(验证噪声敏感度)。

第六阶段:高级研究与扩展

1. 仿真时间同步研究

Webots 与 ROS 2 的时间同步是核心,验证方法:

# 查看仿真时间
ros2 topic echo /clock --noarr

# 检查节点是否启用 use_sim_time
ros2 param get /amcl use_sim_time
# 应返回 true
ros2 param get /webots_ros2_driver use_sim_time
# 应返回 true

研究点:

  • 若 use_sim_time 为 false,导航会出现严重偏差;
  • Webots 的 "real time factor"(实时因子)调整对时间同步的影响。

2. 机器人 URDF 模型解析

# 查看机器人 URDF 描述
ros2 topic echo /robot_description --noarr

研究点:

  • URDF 中的连杆(link)和关节(joint)定义;
  • 传感器的坐标系(frame_id)是否与 RViz2/Nav2 对齐;
  • 修改 URDF 中的轮子半径,观察里程计精度变化。

3. 多机器人仿真扩展

修改 robot_launch.py,添加第二个 e-puck 机器人:

# 在 launch 文件中复制机器人节点,修改命名空间
epuck2_node = Node(
    package='webots_ros2_driver',
    executable='driver',
    namespace='epuck2',
    parameters=[
        {'robot_description': robot_description},
        {'use_sim_time': True},
        {'robot_name': 'epuck2'}
    ]
)

验证:

ros2 topic list | grep epuck2
# 应出现/epuck2/cmd_vel 等话题

4. 数据记录与分析

使用 ROS 2 bag 记录数据,用于离线分析:

# 记录核心话题
ros2 bag record /epuck/laser_scan /epuck/odometry /amcl_pose /map

# 回放数据
ros2 bag play <bag 文件名称>

分析工具:

  • 使用 rqt_bag 可视化 bag 数据;
  • 用 Python 脚本解析激光雷达/里程计数据,绘制运动轨迹。

总结

通过上述步骤,我们完成了从基础仿真到高级导航的全流程实践。建议按以下路径深入:

  1. 基础层:掌握节点/话题/参数的通信逻辑,验证传感器/执行器数据;
  2. 控制层:对比高层(cmd_vel)和底层(关节控制)的差异,理解运动学模型;
  3. 导航层:拆解 Nav2 的定位/规划/控制流程,调优参数验证效果;
  4. 扩展层:自定义场景/航点/URDF,研究多机器人仿真和时间同步。

每一步操作后,建议记录'现象 - 原因 - 结论',例如:

  • 现象:导航到目标点时机器人绕障失败;
  • 原因:局部规划器的 min_vel_x 过小;
  • 结论:调大 min_vel_x 至 0.1,绕障成功。

通过这种方式,可逐步深入理解 Webots 与 ROS 2 的集成逻辑,掌握 e-puck 机器人的仿真与控制核心。


附录:环境安装参考

若尚未配置环境,可参考以下步骤:

  1. 操作系统:Ubuntu 24.04(ROS 2 Jazzy 官方推荐)
  2. 安装 Webots 2025a:
    wget https://cyberbotics.com/Cyberbotics.asc
    sudo apt-key add Cyberbotics.asc
    sudo apt-add-repository 'deb https://cyberbotics.com/debian binary-amd64/'
    sudo apt update
    sudo apt install webots=2025a-1
    
  3. 克隆并编译功能包:
    mkdir -p ~/webots_ws/src && cd ~/webots_ws/src
    git clone --branch jazzy https://github.com/cyberbotics/webots_ros2.git
    cd webots_ros2
    rosdep install --from-paths . --ignore-src -r -y
    cd ~/webots_ws
    colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
    source install/setup.bash
    
  4. 安装 Nav2 导航栈:
    sudo apt install ros-jazzy-navigation2 ros-jazzy-nav2-bringup
    

目录

  1. Webots 2025a + ROS 2 Jazzy e-puck 机器人分步使用与研究教程
  2. 前提确认
  3. 加载 ROS 2 环境(若已添加到.bashrc 可跳过)
  4. 验证功能包存在
  5. 验证 Webots 版本
  6. 输出应包含 2025a
  7. 第一阶段:基础仿真启动与核心通信验证
  8. 1. 启动 e-puck 核心仿真
  9. 启动仅包含 e-puck 机器人的基础仿真
  10. 2. 验证 ROS 2 节点与话题
  11. (1)查看运行的节点
  12. (2)查看核心话题列表
  13. (3)实时查看传感器数据
  14. 查看激光雷达数据(精简输出,仅看关键值)
  15. 查看里程计数据(关注 position 和 orientation)
  16. 查看 IMU 数据(关注角速度和加速度)
  17. 第二阶段:手动控制与交互测试
  18. 1. 单次速度指令
  19. 前进:线速度 0.2m/s,角速度 0rad/s
  20. 左转:线速度 0,角速度 1rad/s
  21. 停止:所有速度为 0
  22. 2. 持续键盘控制
  23. 安装键盘控制工具(若未装)
  24. 启动键盘控制,映射到 e-puck 的 cmd_vel 话题
  25. 第三阶段:Rats Life 场景与地图系统研究
  26. 1. 启动带地图的 Rats Life 场景
  27. 启动包含迷宫地图的完整场景
  28. 2. 解析地图配置文件
  29. 定位 mapratslife.yaml 文件
  30. 进入配置目录
  31. 查看地图话题数据(验证地图加载)
  32. 可视化地图(需启动 RViz2)
  33. 3. 场景自定义修改
  34. 第四阶段:ROS 2 Control 底层控制研究
  35. 1. 解析 ros2_control.yml 配置
  36. 2. 底层关节控制测试
  37. 查看关节状态(确认关节名称和当前速度)
  38. 发布关节速度指令(直接控制左右轮)
  39. 左轮 1rad/s,右轮 1rad/s → 前进
  40. 左轮 -1rad/s,右轮 1rad/s → 原地旋转
  41. 停止关节运动
  42. 第五阶段:Nav2 航点导航全流程研究
  43. 1. 启动导航系统
  44. 启动包含 Nav2 的航点导航场景
  45. 2. 验证 Nav2 核心组件
  46. 查看 AMCL 定位结果(机器人在地图中的位姿)
  47. 查看全局路径规划结果
  48. 查看 Nav2 状态(是否就绪)
  49. 3. 发送导航目标点
  50. 安装 Nav2 命令行工具(若未装)
  51. 发送目标点 1:x=2.0, y=1.0, 朝向 0°(w=1.0)
  52. 发送目标点 2:回到起点(x=0.0, y=0.0)
  53. 4. Nav2 参数调优
  54. 第六阶段:高级研究与扩展
  55. 1. 仿真时间同步研究
  56. 查看仿真时间
  57. 检查节点是否启用 usesimtime
  58. 应返回 true
  59. 应返回 true
  60. 2. 机器人 URDF 模型解析
  61. 查看机器人 URDF 描述
  62. 3. 多机器人仿真扩展
  63. 在 launch 文件中复制机器人节点,修改命名空间
  64. 应出现/epuck2/cmd_vel 等话题
  65. 4. 数据记录与分析
  66. 记录核心话题
  67. 回放数据
  68. 总结
  69. 附录:环境安装参考
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 双指针算法专题:移动零、复写零与快乐数
  • Linux C++ 多线程编程入门:从核心概念到常用函数详解
  • 鸿蒙 ArkWeb 组件内核:加载机制与 Cookie 管理
  • Revit 模型 Web 展示方案:三步实现 BIM 可视化
  • Web 项目路径配置:contextPath 与 C 标签用法
  • OpenClaw 飞书机器人配置指南:实现多渠道 AI 助手集成
  • OpenClaw 部署指南:Minimax/DeepSeek 模型与飞书机器人集成
  • Web 聊天室消息加解密方案详解
  • 前端监控实战:错误、性能与用户行为实时监测
  • LLM 大模型测试策略与方法
  • JDK 1.8 在 Windows 系统下的安装与配置教程
  • VSCode 自定义 Copilot Agent 与 Awesome Agent 模板
  • Java 集成百度地图 API 实现实时路况检索
  • SuperMap iClient3D for WebGL 集成大华 RTSP 与 WebSocket 视频投放方案
  • 利用大疆 SRT 数据实现高精度 AR 视频投射
  • ToClaw 实测:不止炫技,更是易用的桌面 AI 助手
  • AR 系列摄像头发展历程与参数规格分析
  • OpenClaw 厂商产品对比:2026 主流 AI 智能体平台深度评测
  • DrissionPage 使用教程:Python 动态网页自动化
  • C++ 特殊类设计实战:拷贝控制、内存分配与单例模式

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online