Webots 2025a + ROS 2 Jazzy e-puck 机器人教程

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

bash 复制代码
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

bash 复制代码
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 数据 姿态补正、运动融合

实际效果:

bash 复制代码
 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 中配置:

  1. Fixed Frame 选择 map
  2. 添加 Map 组件,Topic 选择 /map
  3. 添加 RobotModel 组件,Robot Description 选择 /robot_description
  4. 添加 LaserScan 组件,Topic 选择 /epuck/laser_scan现象:RViz2 中显示迷宫地图、机器人模型和激光扫描数据。

步骤 3:场景自定义修改(进阶研究)

  1. 打开 Webots 场景文件: bash

    运行

    复制代码
    cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/worlds
    webots rats_life.wbt  # 直接用Webots打开场景文件
  2. 可修改的内容(研究切入点):

    • 添加 / 删除障碍物:在 Webots 中拖拽 "Box" 节点,调整尺寸 / 位置;
    • 修改机器人传感器:选中 e-puck → 双击 "LaserEmitter" → 调整扫描角度 / 精度;
    • 调整地面材质 / 摩擦力:影响机器人运动模型;
  3. 保存修改后,重新启动 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 输出速度指令到机器人

bash

运行

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

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

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

关键验证

  • /amcl_posepose 应与 Webots 中机器人位置一致(误差 < 0.1m);
  • /nav2_controller/statusstatus 应为 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:航点导航源码研究(进阶)

  1. 定位航点导航 Launch 文件: bash

    运行

    复制代码
    cd $(rospack find webots_ros2_epuck)/share/webots_ros2_epuck/launch
    cat rats_life_waypoints_launch.py
  2. 核心代码解析(研究切入点): 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'
    )
  3. 自定义航点修改:

    • 修改 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 脚本解析激光雷达 / 里程计数据,绘制运动轨迹。

总结与研究路径建议

  1. 基础层:掌握节点 / 话题 / 参数的通信逻辑,验证传感器 / 执行器数据;
  2. 控制层:对比高层(cmd_vel)和底层(关节控制)的差异,理解运动学模型;
  3. 导航层:拆解 Nav2 的定位 / 规划 / 控制流程,调优参数验证效果;
  4. 扩展层:自定义场景 / 航点 / 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 版本)

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

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 航点导航

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)
  • 原因:激光雷达话题不匹配 / AMCL 参数错误
  • 解决:
    1. 确认 amcl 配置中 laser_topic: "/epuck/laser_scan"
    2. 调整 AMCL 的 alpha 参数(如 alpha1=0.1)
    3. 检查 /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 场景

  1. 打开 Webots 2025a → 打开 webots_ros2_epuck/worlds/epuck_world.wbt

  2. 添加障碍物、修改地图、调整机器人传感器

  3. 保存为自定义 world 文件,通过 Launch 参数加载: bash

    运行

    复制代码
    ros2 launch webots_ros2_epuck robot_launch.py world:=/path/to/your/world.wbt
  • 修改 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 从基础仿真到高级导航的全流程,核心关键点:

  1. 确保 Webots 2025a 与 ROS 2 Jazzy 环境同步(仿真时间、命名空间);
  2. 理解核心 Launch 文件的分工(机器人启动、场景加载、导航配置);
  3. Nav2 导航需重点适配 use_sim_time 和传感器话题;
  4. 调试时优先检查节点、话题、参数三大核心要素。

若需更深入的开发(如 SLAM、多机器人、自定义控制器),可基于 webots_ros2_driver 扩展,或参考 Webots ROS 2 官方文档

相关推荐
-Springer-5 分钟前
STM32 学习 —— 个人学习笔记9-3(FlyMcu 串口下载)
笔记·stm32·学习
weixin_4588726140 分钟前
东华复试OJ每日3题打卡·复盘103~105
学习
SuniaWang1 小时前
《Spring AI + 大模型全栈实战》学习手册系列 ·专题三:《Embedding 模型选型指南:从 MMTEB 排名到实际应用》
人工智能·学习·spring
问道飞鱼1 小时前
【Tauri框架学习】Windows 11 环境下 Tauri 开发环境安装与问题解决手册
windows·学习·tauri·开发环境
中屹指纹浏览器1 小时前
2026指纹浏览器与代理IP协同安全体系构建——从特征匹配到行为风控的全链路防护
经验分享·笔记
لا معنى له2 小时前
什么是Active Inference(主动推理)? ——学习笔记
笔记·学习
xwz小王子2 小时前
Advanced Functional Materials 花粉变身高敏“电子皮肤”,让机器人拥有触觉与痛觉,清华大学孙富春教授与中科院纳米所合作成果
机器人
JicasdC123asd2 小时前
并行双分支瓶颈架构改进YOLOv26异构卷积核协同特征提取与残差学习双重突破
学习·yolo·架构
zhouping@2 小时前
JAVA学习笔记day06
java·笔记·学习
Jack.Jia2 小时前
GPS原理笔记三——GPS卫星轨道理论和计算
笔记