Webots 2025a + ROS 2 Jazzy e-puck 机器人分步使用与研究教程
本教程跳过环境安装环节,聚焦实操步骤和深度研究维度,从基础仿真启动到核心模块拆解,每一步都标注操作指令、验证方法和研究切入点,帮助你彻底掌握 e-puck 机器人的 ROS 2 集成使用。
前提确认
先执行以下命令验证环境就绪(确保无报错):
bash
运行
# 加载ROS 2环境(若已添加到.bashrc可跳过)
source ~/webots_ws/install/setup.bash
# 验证功能包存在
ros2 pkg list | grep webots_ros2_epuck
# 验证Webots版本
webots --version # 输出应包含2025a
webots --version
webots --version
webots --version
![]()
第一阶段:基础仿真启动与核心通信验证
步骤 1:启动 e-puck 核心仿真
操作指令:
bash
运行
# 启动仅包含e-puck机器人的基础仿真
ros2 launch webots_ros2_epuck robot_launch.py
现象:
- Webots 2025a 自动启动,界面显示 e-puck 机器人在空场景中;
- 终端无红色报错(黄色警告可忽略,多为参数默认值提示)。
ros2 launch webots_ros2_epuck robot_launch.py
ros2 launch webots_ros2_epuck robot_launch.py
ros2 launch webots_ros2_epuck robot_launch.py

注意左上角为黑,如何解决?思考?
步骤 2:验证 ROS 2 节点与话题(核心研究点)
新开终端,分步执行以下命令,逐行验证并记录结果(研究机器人与 ROS 2 的通信链路):
(1)查看运行的节点
bash
运行
ros2 node list
预期输出(核心节点):
plaintext
/epuck/base_controller
/epuck/robot_state_publisher
/webots_ros2_driver
/webots_ros2_epuck_node

注意差异性。
研究点:
/webots_ros2_driver:Webots 与 ROS 2 的核心桥接节点,负责传感器 / 执行器数据转发;/epuck/base_controller:机器人运动控制节点,处理速度指令。
(2)查看核心话题列表
bash
运行
ros2 topic list | grep epuck
预期核心话题:
| 话题名称 | 数据类型 | 作用 | 研究价值 |
|---|---|---|---|
/epuck/cmd_vel | geometry_msgs/msg/Twist | 速度控制指令 | 机器人运动控制入口 |
/epuck/laser_scan | sensor_msgs/msg/LaserScan | 激光雷达数据 | SLAM / 避障 / 定位核心输入 |
/epuck/odometry | nav_msgs/msg/Odometry | 里程计数据 | 位姿估计、运动建模 |
/epuck/joint_states | sensor_msgs/msg/JointState | 关节状态 | 底层轮子运动反馈 |
/epuck/imu | sensor_msgs/msg/Imu | IMU 数据 | 姿态补正、运动融合 |
实际效果:
ros2 topic list
/Ros2Supervisor/remove_node
/camera/camera_info
/camera/image_color
/clock
/cmd_vel
/controller_manager/activity
/controller_manager/introspection_data/full
/controller_manager/introspection_data/names
/controller_manager/introspection_data/values
/controller_manager/statistics/full
/controller_manager/statistics/names
/controller_manager/statistics/values
/diagnostics
/diffdrive_controller/transition_event
/dynamic_joint_states
/e_puck/receiver/data
/e_puck/receiver/emitter_direction
/e_puck/receiver/signal_strength
/joint_state_broadcaster/transition_event
/joint_states
/led0
/led1
/led2
/led3
/led4
/led5
/led6
/led7
/led8
/led9
/ls0
/ls1
/ls2
/ls3
/ls4
/ls5
/ls6
/ls7
/odom
/parameter_events
/pi_puck_led_0
/pi_puck_led_1
/pi_puck_led_2
/ps0
/ps1
/ps2
/ps3
/ps4
/ps5
/ps6
/ps7
/remove_urdf_robot
/robot_description
/rosout
/scan
/tf
/tf_static
/tof
(3)实时查看传感器数据(验证通信)
bash
运行
# 查看激光雷达数据(精简输出,仅看关键值)
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 调整传感器精度)。
步骤 3:手动控制机器人运动
(1)单次速度指令(测试执行器)
bash
运行
# 前进:线速度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 中机器人对应执行前进 / 左转 / 停止动作。
实际:
cmd_vel
(2)持续键盘控制(交互测试)
bash
运行
# 安装键盘控制工具(若未装)
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);
- 里程计数据是否与实际运动一致(验证运动模型精度)。


左上角和仿真中摄像头位置对应。

rqt

第二阶段:Rats Life 场景与地图系统研究
步骤 1:启动带地图的 Rats Life 场景
bash
运行
# 启动包含迷宫地图的完整场景
ros2 launch webots_ros2_epuck rats_life_launch.py
现象:
- Webots 加载 Rats Life 迷宫场景,e-puck 位于场景起点;
- ROS 2 自动加载地图服务器(
map_server),发布/map话题。
步骤 2:解析地图配置文件(核心研究)
首先找到地图配置文件路径:
bash
运行
# 定位map_rats_life.yaml文件
rospack find webots_ros2_epuck
# 输出示例:/home/ros2/webots_ws/install/webots_ros2_epuck/share/webots_ros2_epuck
# 进入配置目录
cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/config
打开 map_rats_life.yaml,逐行分析:
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对齐)
研究操作:
bash
运行
# 查看地图话题数据(验证地图加载)
ros2 topic echo /map --noarr
# 可视化地图(需启动RViz2)
rviz2
在 RViz2 中配置:
- Fixed Frame 选择
map; - 添加
Map组件,Topic 选择/map; - 添加
RobotModel组件,Robot Description 选择/robot_description; - 添加
LaserScan组件,Topic 选择/epuck/laser_scan。现象:RViz2 中显示迷宫地图、机器人模型和激光扫描数据。
步骤 3:场景自定义修改(进阶研究)
- 打开 Webots 场景文件:
bash
运行
cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/worlds webots rats_life.wbt # 直接用Webots打开场景文件 - 可修改的内容(研究切入点):
- 添加 / 删除障碍物:在 Webots 中拖拽 “Box” 节点,调整尺寸 / 位置;
- 修改机器人传感器:选中 e-puck → 双击 “LaserEmitter” → 调整扫描角度 / 精度;
- 调整地面材质 / 摩擦力:影响机器人运动模型;
- 保存修改后,重新启动
rats_life_launch.py验证效果。
第三阶段:ROS 2 Control 底层控制研究
步骤 1:解析 ros2_control.yml 配置
打开控制配置文件:
bash
运行
cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/config
cat ros2_control.yml
核心内容解析:
yaml
controller_manager:
ros__parameters:
update_rate: 100 # 控制频率100Hz
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster
joint_velocity_controller:
type: velocity_controllers/JointGroupVelocityController
joint_velocity_controller:
ros__parameters:
joints: # 控制的关节名称(e-puck左右轮)
- left_wheel_joint
- right_wheel_joint
interface_name: velocity # 控制接口类型(速度控制)
研究点:
update_rate:控制频率越高,运动越平滑,但占用资源越多;- 关节名称必须与机器人 URDF 中的定义一致(可通过
/robot_description查看)。
步骤 2:底层关节控制测试
bash
运行
# 查看关节状态(确认关节名称和当前速度)
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:启动导航系统
bash
运行
# 启动包含Nav2的航点导航场景
ros2 launch webots_ros2_epuck rats_life_waypoints_launch.py
启动后自动加载的模块(研究重点):
| 模块名称 | 节点 / 话题 | 作用 |
|---|---|---|
| 地图服务器 | /map | 提供全局地图 |
| AMCL 定位 | /amcl_pose | 基于激光的蒙特卡洛定位 |
| BT 导航器 | /navigate_to_pose | 行为树导航逻辑 |
| 路径规划器 | /plan | 全局 / 局部路径规划 |
| 控制器 | /cmd_vel | 输出速度指令到机器人 |
步骤 2:验证 Nav2 核心组件
bash
运行
# 查看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:发送导航目标点(手动测试)
bash
运行
# 安装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:航点导航源码研究(进阶)
- 定位航点导航 Launch 文件:
bash
运行
cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/launch cat rats_life_waypoints_launch.py - 核心代码解析(研究切入点):
python
运行
# 航点列表定义(可修改添加自定义航点) waypoints = [ (0.0, 0.0, 0.0), # 起点 (1.5, 0.5, 1.57), # 航点1(x,y,yaw) (3.0, -0.5, 3.14), # 航点2 (0.0, 0.0, 0.0) # 终点 ] # Nav2参数加载(适配Jazzy版本) nav2_params = os.path.join( get_package_share_directory('webots_ros2_epuck'), 'config', 'nav2_params.yaml' ) - 自定义航点修改:
- 修改
waypoints列表中的坐标,重启 Launch 文件; - 观察机器人是否按新航点移动,分析路径规划逻辑。
- 修改
步骤 5:Nav2 参数调优(核心研究)
打开 Nav2 参数文件:
bash
运行
cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/config
cat nav2_params.yaml
关键参数调优方向:
| 参数模块 | 核心参数 | 调优目的 |
|---|---|---|
amcl | alpha1-alpha5 | 降低定位误差(仿真中可设为 0.1) |
dwb_controller | max_vel_x/min_vel_x | 调整最大 / 最小线速度 |
dwb_controller | max_vel_theta | 调整最大角速度 |
obstacle_layer | max_obstacle_height | 适配激光雷达高度 |
bt_navigator | default_bt_xml_filename | 更换导航行为树(如添加避障逻辑) |
调优测试:
- 修改
max_vel_x从 0.2→0.3,重启导航,观察机器人运动速度变化; - 增大
alpha1到 0.5,观察 AMCL 定位误差是否增大(验证噪声敏感度)。
第五阶段:高级研究与扩展
1. 仿真时间同步研究
Webots 与 ROS 2 的时间同步是核心,验证方法:
bash
运行
# 查看仿真时间
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 模型解析
bash
运行
# 查看机器人URDF描述
ros2 topic echo /robot_description --noarr
研究点:
- URDF 中的连杆(link)和关节(joint)定义;
- 传感器的坐标系(frame_id)是否与 RViz2/Nav2 对齐;
- 修改 URDF 中的轮子半径,观察里程计精度变化。
3. 多机器人仿真扩展(进阶)
修改 robot_launch.py,添加第二个 e-puck 机器人:
python
运行
# 在launch文件中复制机器人节点,修改命名空间
epuck2_node = Node(
package='webots_ros2_driver',
executable='driver',
namespace='epuck2', # 第二个机器人命名空间
parameters=[
{'robot_description': robot_description},
{'use_sim_time': True},
{'robot_name': 'epuck2'} # Webots中机器人名称
]
)
验证:
bash
运行
ros2 topic list | grep epuck2 # 应出现/epuck2/cmd_vel等话题
4. 数据记录与分析
使用 ROS 2 bag 记录数据,用于离线分析:
bash
运行
# 记录核心话题
ros2 bag record /epuck/laser_scan /epuck/odometry /amcl_pose /map
# 回放数据
ros2 bag play <bag文件名称>
分析工具:
- 使用
rqt_bag可视化 bag 数据; - 用 Python 脚本解析激光雷达 / 里程计数据,绘制运动轨迹。
总结与研究路径建议
- 基础层:掌握节点 / 话题 / 参数的通信逻辑,验证传感器 / 执行器数据;
- 控制层:对比高层(cmd_vel)和底层(关节控制)的差异,理解运动学模型;
- 导航层:拆解 Nav2 的定位 / 规划 / 控制流程,调优参数验证效果;
- 扩展层:自定义场景 / 航点 / URDF,研究多机器人仿真和时间同步。
每一步操作后,建议记录 “现象 - 原因 - 结论”,例如:
- 现象:导航到目标点时机器人绕障失败;
- 原因:局部规划器的
min_vel_x过小; - 结论:调大
min_vel_x至 0.1,绕障成功。
通过这种方式,可逐步深入理解 Webots 与 ROS 2 的集成逻辑,掌握 e-puck 机器人的仿真与控制核心。
Webots 2025a + ROS 2 Jazzy e-puck 机器人完整教程
本文基于 webots_ros2_epuck 功能包,详细讲解从环境配置、核心概念到完整案例运行的全流程,覆盖基础启动、地图导航、ROS 2 控制、参数配置等核心场景,适配 Webots 2025a 和 ROS 2 Jazzy 版本。
一、环境前置配置
1. 基础环境要求
- 操作系统:Ubuntu 24.04(ROS 2 Jazzy 官方推荐)
- 已安装:
- ROS 2 Jazzy(完整安装,包含
ros-base+desktop) - Webots 2025a(官方下载 或通过 apt 安装)
webots_ros2核心包 +webots_ros2_epuck功能包- Nav2 导航栈(Jazzy 版本)
- ROS 2 Jazzy(完整安装,包含
2. 环境安装步骤
(1)安装 Webots 2025a
bash
运行
# 方式1:DEB包安装(推荐)
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:下载压缩包解压
wget https://cyberbotics.com/files/release/webots/R2025a/webots_2025a_amd64.tar.xz
tar -xf webots_2025a_amd64.tar.xz
sudo mv webots /opt/
echo 'export WEBOTS_HOME=/opt/webots' >> ~/.bashrc
echo 'export PATH=$WEBOTS_HOME:$PATH' >> ~/.bashrc
source ~/.bashrc
(2)安装 webots_ros2 及 e-puck 功能包
bash
运行
# 创建ROS 2工作空间
mkdir -p ~/webots_ws/src && cd ~/webots_ws/src
# 克隆官方仓库(Jazzy分支)
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
# 加载环境变量(每次新开终端都需执行,或添加到.bashrc)
source install/setup.bash
echo 'source ~/webots_ws/install/setup.bash' >> ~/.bashrc
(3)安装 Nav2 导航栈(可选,用于导航案例)
bash
运行
sudo apt install ros-jazzy-navigation2 ros-jazzy-nav2-bringup ros-jazzy-turtlebot3-navigation2
二、核心文件解析(理解 launch / 配置文件)
从你提供的命令行补全信息,webots_ros2_epuck 包含以下核心文件,先明确作用:
| 文件名称 | 核心作用 |
|---|---|
robot_launch.py | e-puck 机器人核心启动文件(加载 Webots 仿真、ROS 2 驱动) |
rats_life_launch.py | Rats Life 场景启动文件(包含地图、仿真环境) |
rats_life_waypoints_launch.py | 航点导航启动文件(基于 Nav2 实现路径跟踪) |
map_rats_life.yaml | Rats Life 场景地图配置(用于 SLAM / 导航) |
nav2_params_iron.yaml/nav2_params.yaml | Nav2 参数配置(适配 Iron/Jazzy 版本) |
ros2_control.yml | ROS 2 Control 配置(机器人关节 / 运动控制) |
epuck_world_map.yaml | e-puck 地图相关参数(坐标系、分辨率等) |
三、基础案例:启动 e-puck 仿真环境
1. 最简启动:仅加载 e-puck 机器人
bash
运行
# 启动核心机器人仿真
ros2 launch webots_ros2_epuck robot_launch.py
执行后会自动打开 Webots 2025a 仿真界面,显示 e-puck 机器人在空场景中,同时 ROS 2 节点启动,机器人驱动加载完成。
关键验证:检查 ROS 2 节点 / 话题
新开终端执行以下命令,确认通信正常:
bash
运行
# 查看运行的节点
ros2 node list
# 预期输出包含:/webots_ros2_driver /epuck/* 等节点
# 查看机器人话题(激光、里程计、速度指令等)
ros2 topic list
# 核心话题:
# /epuck/laser_scan(激光雷达数据)
# /epuck/odometry(里程计数据)
# /epuck/cmd_vel(速度控制指令)
# /epuck/joint_states(关节状态)
# 查看激光雷达数据(验证传感器)
ros2 topic echo /epuck/laser_scan --noarr
2. 启动 Rats Life 场景(带地图的仿真环境)
bash
运行
# 启动包含Rats Life地图的完整场景
ros2 launch webots_ros2_epuck rats_life_launch.py
此命令会加载带有迷宫 / 障碍物的 Rats Life 场景,e-puck 机器人置于场景中,同时加载地图配置 map_rats_life.yaml。
四、进阶案例:e-puck 运动控制
1. 手动控制机器人(通过 ROS 2 话题发布速度指令)
(1)发布速度指令(线速度 + 角速度)
bash
运行
# 方式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}}"
# 方式2:持续发布(转圈,角速度1rad/s,频率10Hz)
ros2 topic pub --rate 10 /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}}"
执行后可在 Webots 中看到机器人对应运动。
(2)使用键盘控制(ROS 2 teleop 工具)
bash
运行
# 安装键盘控制工具
sudo apt install ros-jazzy-teleop-twist-keyboard
# 启动键盘控制(指定话题为/epuck/cmd_vel)
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r cmd_vel:=/epuck/cmd_vel
按终端提示操作键盘(w/x 前进 / 后退,a/d 左转 / 右转,s 停止)。
2. 通过 ROS 2 Control 控制(底层关节控制)
ros2_control.yml 定义了 e-puck 轮子的关节控制配置,可通过以下方式直接控制关节:
bash
运行
# 查看关节状态
ros2 topic echo /epuck/joint_states
# 发布关节速度指令(控制左右轮)
ros2 topic pub /epuck/joint_velocity_controller/commands std_msgs/msg/Float64MultiArray "{data: [1.0, 1.0]}"
五、高级案例:Nav2 航点导航
1. 启动导航环境(带 Nav2 的 Rats Life 场景)
bash
运行
# 启动航点导航完整流程(包含地图、Nav2、机器人)
ros2 launch webots_ros2_epuck rats_life_waypoints_launch.py
此命令会自动加载:
- Webots Rats Life 场景 + e-puck 机器人
- Nav2 导航栈(基于
nav2_params.yaml配置) - 地图服务器(加载
map_rats_life.yaml) - 航点导航节点
关键配置文件说明:
nav2_params_jazzy.yaml(若不存在则用nav2_params.yaml):需适配 Jazzy 版本,核心参数包括:yaml
amcl: ros__parameters: use_sim_time: true # 启用仿真时间(必须与Webots同步) alpha1: 0.2 alpha2: 0.2 alpha3: 0.2 alpha4: 0.2 alpha5: 0.2 base_frame_id: "base_link" global_frame_id: "map" odom_frame_id: "odom" laser_topic: "/epuck/laser_scan" bt_navigator: ros__parameters: use_sim_time: true default_bt_xml_filename: "navigate_w_replanning_and_recovery.xml"map_rats_life.yaml:地图分辨率、坐标系、路径等配置:yaml
image: map_rats_life.pgm # 地图图片(Webots场景对应) resolution: 0.05 # 5cm/像素 origin: [-10.0, -10.0, 0.0] # 地图原点 negate: 0 occupied_thresh: 0.65 free_thresh: 0.196 frame_id: map # 坐标系与Nav2对齐
2. 发送航点导航指令
方式 1:通过 ROS 2 Action 发送目标点
bash
运行
# 安装Nav2命令行工具
sudo apt install ros-jazzy-nav2-cli
# 发送导航目标点(x=1.0, y=0.0, yaw=0.0)
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{pose: {header: {frame_id: 'map'}, pose: {position: {x: 1.0, y: 0.0, z: 0.0}, orientation: {w: 1.0}}}}"
方式 2:预定义航点导航
编辑 rats_life_waypoints_launch.py 中的航点列表:
python
运行
waypoints = [
(0.0, 0.0, 0.0), # 起点
(2.0, 1.0, 1.57), # 航点1(x,y,yaw)
(4.0, -1.0, 3.14), # 航点2
(0.0, 0.0, 0.0) # 回到起点
]
重启 launch 文件后,机器人会自动按航点移动。
3. 导航调试工具
bash
运行
# 查看Nav2状态
ros2 node list | grep nav2
ros2 topic echo /amcl_pose # 查看机器人定位
# 可视化(需安装RViz2)
rviz2 -d $(ros2 pkg prefix webots_ros2_epuck)/share/webots_ros2_epuck/config/epuck_nav.rviz
RViz2 中可查看:
- 地图(Map)
- 激光扫描(LaserScan)
- 机器人位姿(Pose)
- 规划路径(Path)
六、常用 Launch 参数说明(解决启动参数疑问)
从你的命令行补全信息,以下是关键 Launch 参数的使用方法:
| 参数 | 作用 | 示例 |
|---|---|---|
-a/--print | 打印 package.xml 信息 | ros2 launch webots_ros2_epuck robot_launch.py -a |
--debug | 调试模式启动(输出详细日志) | ros2 launch webots_ros2_epuck robot_launch.py --debug |
--launch-prefix | 为节点添加启动前缀(如 gdb 调试) | ros2 launch webots_ros2_epuck robot_launch.py --launch-prefix "gdb -ex run --args" |
-n | 自定义节点名称 | ros2 launch webots_ros2_epuck robot_launch.py -n my_epuck |
-s/--show-all-subprocesses-output | 显示所有子进程输出 | ros2 launch webots_ros2_epuck robot_launch.py -s |
--show-args | 显示 Launch 文件所有可用参数 | ros2 launch webots_ros2_epuck robot_launch.py --show-args |
--noninteractive | 非交互模式启动(无弹窗) | ros2 launch webots_ros2_epuck robot_launch.py --noninteractive |
示例:查看 robot_launch.py 的所有可配置参数
bash
运行
ros2 launch webots_ros2_epuck robot_launch.py --show-args
输出会包含:
plaintext
Arguments (pass arguments as '<name>:=<value>'):
'use_sim_time':
Use simulation (Webots) clock if true
(default: 'true')
'world':
Webots world file path
(default: '$(find-pkg-share webots_ros2_epuck)/worlds/epuck_world.wbt')
'rviz':
Start RViz2 automatically
(default: 'false')
七、常见问题与解决
1. Webots 启动后机器人无响应
- 原因:仿真时间未同步(use_sim_time=false)
- 解决:所有 Nav2 / 机器人节点启用
use_sim_time: true,在 Launch 文件中添加:python
运行
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分支:bash
运行
cd ~/webots_ws/src/webots_ros2 git checkout jazzy colcon build --cmake-force-configure
4. 话题名称不匹配
- 原因:机器人命名空间未统一
- 解决:所有话题添加
/epuck命名空间,如cmd_vel→/epuck/cmd_vel
八、扩展开发
1. 自定义 Webots 场景
- 打开 Webots 2025a → 打开
webots_ros2_epuck/worlds/epuck_world.wbt - 添加障碍物、修改地图、调整机器人传感器
- 保存为自定义 world 文件,通过 Launch 参数加载:
bash
运行
ros2 launch webots_ros2_epuck robot_launch.py world:=/path/to/your/world.wbt
2. 自定义 Nav2 行为
- 修改
nav2_params.yaml中的 BT 树(行为树):yaml
bt_navigator: ros__parameters: default_bt_xml_filename: "custom_bt.xml" # 自定义行为树 - 添加自定义恢复行为(如避障、重试)
3. 传感器扩展
e-puck 支持的传感器可通过 robot_launch.py 启用:
python
运行
# 在launch文件中添加传感器配置
webots_driver_node = Node(
package='webots_ros2_driver',
executable='driver',
parameters=[
{'robot_description': robot_description},
{'sensor_config': {
'camera': True, # 启用摄像头
'imu': True, # 启用IMU
'gps': True # 启用GPS
}}
]
)
九、总结
本教程覆盖了 webots_ros2_epuck 从基础仿真到高级导航的全流程,核心关键点:
- 确保 Webots 2025a 与 ROS 2 Jazzy 环境同步(仿真时间、命名空间);
- 理解核心 Launch 文件的分工(机器人启动、场景加载、导航配置);
- Nav2 导航需重点适配
use_sim_time和传感器话题; - 调试时优先检查节点、话题、参数三大核心要素。
若需更深入的开发(如 SLAM、多机器人、自定义控制器),可基于 webots_ros2_driver 扩展,或参考 Webots ROS 2 官方文档。
1292

被折叠的 条评论
为什么被折叠?



