跳到主要内容Webots 2025a 与 ROS 2 Jazzy e-puck 机器人集成教程 | 极客日志PythonAI算法
Webots 2025a 与 ROS 2 Jazzy e-puck 机器人集成教程
介绍 Webots 2025a 与 ROS 2 Jazzy 环境下 e-puck 机器人的集成配置与使用。内容涵盖环境搭建、基础仿真启动、节点话题验证、运动控制(高层与底层)、Rats Life 地图导航及 Nav2 航点规划全流程。通过具体命令操作与参数调优,帮助掌握传感器数据通信、URDF 模型解析及多机器人扩展方法,适用于机器人仿真与自主导航研究。
筑梦师33 浏览 Webots 2025a + ROS 2 Jazzy e-puck 机器人分步使用与研究教程
本教程涵盖环境配置、基础仿真启动到核心模块拆解,从实操步骤到深度研究维度,每一步标注操作指令、验证方法和研究切入点,帮助你彻底掌握 e-puck 机器人的 ROS 2 集成使用。
环境前置配置
1. 基础环境要求
- 操作系统:Ubuntu 24.04(ROS 2 Jazzy 官方推荐)
- 已安装:
- ROS 2 Jazzy(完整安装,包含 ros-base + desktop)
- Webots 2025a
- webots_ros2 核心包 + webots_ros2_epuck 功能包
- Nav2 导航栈(Jazzy 版本)
2. 环境安装步骤
(1)安装 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
(2)安装 webots_ros2 及 e-puck 功能包
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
3. 前提确认
执行以下命令验证环境就绪(确保无报错):
source ~/webots_ws/install/setup.bash
ros2 pkg list | grep webots_ros2_epuck
webots --version
第一阶段:基础仿真启动与核心通信验证
步骤 1:启动 e-puck 核心仿真
ros2 launch webots_ros2_epuck robot_launch.py
- Webots 2025a 自动启动,界面显示 e-puck 机器人在空场景中;
- 终端无红色报错(黄色警告可忽略,多为参数默认值提示)。
步骤 2:验证 ROS 2 节点与话题
(1)查看运行的节点
/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_vel | geometry_msgs/msg/Twist | 速度控制指令 |
/epuck/laser_scan | sensor_msgs/msg/LaserScan | 激光雷达数据 |
/epuck/odometry | nav_msgs/msg/Odometry | 里程计数据 |
/epuck/joint_states | sensor_msgs/msg/JointState | 关节状态 |
/epuck/imu | sensor_msgs/msg/Imu | IMU 数据 |
(3)实时查看传感器数据
ros2 topic echo /epuck/laser_scan --noarr
ros2 topic echo /epuck/odometry --noarr
ros2 topic echo /epuck/imu --noarr
- 激光雷达的 angle_min/angle_max(扫描范围)、range_min/range_max(有效距离);
- 里程计的 pose(位姿)和 twist(线/角速度)是否与 Webots 中机器人运动同步;
- IMU 数据的噪声水平。
步骤 3:手动控制机器人运动
(1)单次速度指令
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}}"
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}}"
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)持续键盘控制
sudo apt install ros-jazzy-teleop-twist-keyboard
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:调整角速度。
第二阶段: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:解析地图配置文件
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
resolution: 0.05
origin: [-10.0, -10.0, 0.0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
frame_id: map
ros2 topic echo /map --noarr
rviz2
- Fixed Frame 选择
map;
- 添加 Map 组件,Topic 选择
/map;
- 添加 RobotModel 组件,Robot Description 选择
/robot_description;
- 添加 LaserScan 组件,Topic 选择
/epuck/laser_scan。
步骤 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
joint_velocity_controller:
type: velocity_controllers/JointGroupVelocityController
ros__parameters:
joints:
- left_wheel_joint
- right_wheel_joint
interface_name: velocity
update_rate:控制频率越高,运动越平滑,但占用资源越多;
- 关节名称必须与机器人 URDF 中的定义一致。
步骤 2:底层关节控制测试
ros2 topic echo /epuck/joint_states
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: [-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:启动导航系统
ros2 launch webots_ros2_epuck rats_life_waypoints_launch.py
| 模块名称 | 节点/话题 | 作用 |
|---|
| 地图服务器 | /map | 提供全局地图 |
| AMCL 定位 | /amcl_pose | 基于激光的蒙特卡洛定位 |
| BT 导航器 | /navigate_to_pose | 行为树导航逻辑 |
| 路径规划器 | /plan | 全局/局部路径规划 |
| 控制器 | /cmd_vel | 输出速度指令到机器人 |
步骤 2:验证 Nav2 核心组件
ros2 topic echo /amcl_pose --noarr
ros2 topic echo /plan --noarr
ros2 topic echo /nav2_controller/status --noarr
/amcl_pose 的 pose 应与 Webots 中机器人位置一致(误差 < 0.1m);
/nav2_controller/status 的 status 应为 1(就绪)。
步骤 3:发送导航目标点
sudo apt install ros-jazzy-nav2-cli
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} } } }"
- Webots 中机器人自动规划路径,避开障碍物到达目标点;
- 终端显示 result: {success: True} 表示导航成功。
步骤 4:航点导航源码研究
- 自定义航点修改:修改
waypoints 列表中的坐标,重启 Launch 文件;
- 核心代码解析:
waypoints = [
(0.0, 0.0, 0.0),
(1.5, 0.5, 1.57),
(3.0, -0.5, 3.14),
(0.0, 0.0, 0.0)
]
步骤 5:Nav2 参数调优
cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/config
cat nav2_params.yaml
| 参数模块 | 核心参数 | 调优目的 |
|---|
| amcl | alpha1-alpha5 | 降低定位误差 |
| dwb_controller | max_vel_x/min_vel_x | 调整最大/最小线速度 |
| dwb_controller | max_vel_theta | 调整最大角速度 |
| obstacle_layer | max_obstacle_height | 适配激光雷达高度 |
第五阶段:高级研究与扩展
1. 仿真时间同步研究
ros2 topic echo /clock --noarr
ros2 param get /amcl use_sim_time
ros2 param get /webots_ros2_driver use_sim_time
- 若 use_sim_time 为 false,导航会出现严重偏差;
- Webots 的 real time factor(实时因子)调整对时间同步的影响。
2. 机器人 URDF 模型解析
ros2 topic echo /robot_description --noarr
- URDF 中的连杆(link)和关节(joint)定义;
- 传感器的坐标系(frame_id)是否与 RViz2/Nav2 对齐;
- 修改 URDF 中的轮子半径,观察里程计精度变化。
3. 多机器人仿真扩展
修改 robot_launch.py,添加第二个 e-puck 机器人:
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
4. 数据记录与分析
ros2 bag record /epuck/laser_scan /epuck/odometry /amcl_pose /map
ros2 bag play <bag 文件名称>
- 使用 rqt_bag 可视化 bag 数据;
- 用 Python 脚本解析激光雷达/里程计数据,绘制运动轨迹。
常见问题与解决
1. Webots 启动后机器人无响应
- 原因:仿真时间未同步(use_sim_time=false)
- 解决:所有 Nav2/机器人节点启用 use_sim_time: true,在 Launch 文件中添加:
launch.actions.SetParameter(name='use_sim_time', value=True)
2. Nav2 定位漂移
- 原因:激光雷达话题不匹配/AMCL 参数错误
- 解决:
- 确认 amcl 配置中 laser_topic: "/epuck/laser_scan"
- 调整 AMCL 的 alpha 参数(如 alpha1=0.1)
- 检查 /epuck/odometry 话题是否有数据
3. 编译报错(Jazzy 兼容)
- 原因:webots_ros2 分支不匹配
- 解决:确保克隆 jazzy 分支:
cd ~/webots_ws/src/webots_ros2
git checkout jazzy
colcon build --cmake-force-configure
4. 话题名称不匹配
- 原因:机器人命名空间未统一
- 解决:所有话题添加 /epuck 命名空间,如 cmd_vel → /epuck/cmd_vel
总结与研究路径建议
- 基础层:掌握节点/话题/参数的通信逻辑,验证传感器/执行器数据;
- 控制层:对比高层(cmd_vel)和底层(关节控制)的差异,理解运动学模型;
- 导航层:拆解 Nav2 的定位/规划/控制流程,调优参数验证效果;
- 扩展层:自定义场景/航点/URDF,研究多机器人仿真和时间同步。
通过这种方式,可逐步深入理解 Webots 与 ROS 2 的集成逻辑,掌握 e-puck 机器人的仿真与控制核心。
相关免费在线工具
- 加密/解密文本
使用加密算法(如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