type
status
date
slug
summary
tags
category
icon
password

1.config/:配置文件目录

1. nav2_params.yaml (导航系统参数)

该文件是 Nav2 (Navigation 2) 框架的核心配置文件,定义了机器人如何感知环境、规划路径以及执行避障。
  • AMCL 定位:配置了蒙特卡洛定位算法,包括坐标系(base_frame_id: "base_footprint")、粒子数量(500-2000个)以及激光雷达话题。
  • 控制器 (Controller Server):定义了局部路径规划器(使用 DWBLocalPlanner),设定了最大平移速度 0.26 m/s 和旋转速度 1.0 rad/s
  • 代价地图 (Costmaps)
    • Local Costmap:用于局部避障,范围为 3x3 米的滚动窗口。
    • Global Costmap:用于全局规划,基于静态地图并包含膨胀层(inflation_layer),设置机器人半径为 0.22m
  • 规划器 (Planner Server):使用 NavfnPlanner 进行全局路径搜索。
  • 行为树 (BT Navigator):配置了导航逻辑,如重新规划路径和故障恢复行为。
  • 平滑器 (Smoother Server):用于优化路径,使其运动更顺滑。

2. wpb_home_controller.yaml (机械臂/控制器管理)

该文件用于 ROS 2 Control 框架,定义了机器人的硬件接口控制逻辑。
  • 控制器管理器 (controller_manager):设置更新频率为 100Hz,并声明了两个主要的控制器:manipulator_controller(机械臂控制器)和 joint_state_broadcaster(关节状态广播器)。
  • 机械臂控制 (manipulator_controller)
    • 控制类型:采用 forward_command_controller(转发指令控制器)。
    • 受控关节:包含了底座 (mani_base)、手肘 (elbow_forearm) 以及手指和指尖等 6 个关键关节。
    • 控制接口:主要通过 position(位置接口)进行运动控制。

总结

  • nav2_params.yaml 决定了机器人“怎么走”(导航、避障、定位)。
  • wpb_home_controller.yaml 决定了机器人“怎么动”(机械臂关节的精确控制和状态反馈)。

2.demo_cmakelists/: CMake 配置参考目录

demo_cmakelists/ 目录是一个非常特殊的辅助文件夹,其主要作用是为学习者提供 C++ 示例代码对应的 CMake 配置参考。这些文件通常不直接参与功能包的实际编译过程,而是作为“代码字典”存在。当你想要自己编写一个新的 ROS 2 节点并需要知道如何在 CMakeLists.txt 中添加 add_executableinstall 指令时,可以直接参考对应功能的 .txt 文件内容。

1. 基础节点与通信

  • 3_my_node.txt: 展示如何配置最基础的 ROS 2 节点。
  • 3_publisher_node.txt: 配置基础话题发布者(Publisher)的编译规则。
  • 3_subscriber_node.txt: 配置基础话题订阅者(Subscriber)的编译规则。
  • 3_launch.txt: 展示如何通过 CMake 安装和配置 Launch 启动文件。

2. 运动控制与传感器

  • 4_vel_node.txt: 配置发送速度控制指令(geometry_msgs/msg/Twist)的节点。
  • 5_lidar_data.txt: 展示如何处理和编译依赖激光雷达(Lidar)数据的节点。
  • 5_lidar_behavior.txt: 配置基于雷达数据的避障或简单行为控制逻辑。
  • 6_imu_data.txt: 展示如何获取和处理惯性测量单元(IMU)数据的配置。
  • 6_imu_behavior.txt: 配置基于 IMU 数据进行姿态控制的节点。

3. 导航与建图 (SLAM/Nav2)

  • 7_slam.txt: 包含 SLAM 建图相关的节点编译与地图处理配置。
  • 8_nav.txt: 展示如何配置与 Nav2 导航系统交互的基础客户端节点。
  • 8_waypoint_navigation.txt: 配置实现多点航点导航(Waypoint Navigation)功能的节点。

4. 计算机视觉 (OpenCV)

  • 9_cv_image.txt: 核心文件,展示如何集成 OpenCV 库并处理图像传感器数据。
  • 9_cv_hsv.txt: 配置进行颜色空间(HSV)转换和过滤的视觉节点。
  • 9_cv_face_detect.txt: 配置人脸检测功能的编译规则,涉及 OpenCV 的级联分类器依赖。
  • 9_cv_follow.txt: 配置基于视觉目标追踪的运动控制节点。

5. 三维感知与机械臂

  • 10_pc_data.txt: 展示如何处理点云(PointCloud2)数据的编译配置。
  • 10_pc_objects.txt: 配置基于点云进行物体识别和定位的节点。
  • 11_mani_ctrl.txt: 配置机械臂关节位置控制(Forward Control)的节点。
  • 11_grab_object.txt: 较复杂的配置,涉及视觉定位、导航和机械臂抓取动作的综合调用。
  • 12_home.txt: 与 Robocup@Home 比赛场景相关的综合任务逻辑配置。
  • 12_fetch.txt: 配置完整的“取物(Fetch)”任务节点,整合了导航、视觉和抓取功能。

3.demo_cpp/:C++ 示例代码的源文件

demo_cpp/ 目录包含了该库中所有 C++ 示例代码的源文件。这些文件涵盖了从基础的 ROS 2 节点编写到复杂的视觉处理和导航控制任务,是学习该库功能最核心的参考资料。

1. ROS 2 基础通信 (第 3 章)

  • 3_my_node.cpp: 最简单的 ROS 2 节点示例,演示如何初始化并保持节点运行。
  • 3_publisher_node.cpp: 基础的话题发布者示例,演示如何周期性发布字符串消息。
  • 3_publisher_class.cpp: 使用 C++ 类(面向对象)风格编写的发布者节点,是 ROS 2 开发的推荐写法。
  • 3_subscriber_node.cpp: 基础的话题订阅者示例,演示如何接收并打印话题数据。
  • 3_subscriber_class.cpp: 使用类风格编写的订阅者节点。

2. 运动控制与激光雷达 (第 4-5 章)

  • 4_velocity_command.cpp: 演示如何通过发布 geometry_msgs/msg/Twist 消息来控制机器人的平移和旋转运动。
  • 5_lidar_data.cpp: 演示如何订阅激光雷达话题 (/scan) 并解析测距数据。
  • 5_lidar_behavior.cpp: 综合示例,演示如何根据激光雷达数据实现简单的避障或特定行为控制。

3. 惯性测量单元 IMU (第 6 章)

  • 6_imu_data.cpp: 演示如何订阅 IMU 数据话题并获取机器人的姿态角(四元数或欧拉角)。
  • 6_imu_behavior.cpp: 演示如何利用 IMU 数据反馈来控制机器人进行精确的角度转向。

4. 导航控制 (第 8 章)

  • demo_nav2_client.cpp: 作为 Nav2 的动作客户端,演示如何通过代码发送目标点(Goal)给导航堆栈。
  • demo_nav2_client_class.cpp: 类风格的导航客户端实现。
  • 8_waypoint_navigation.cpp: 演示如何按顺序发送多个目标点,实现多点巡航导航。
  • 8_waypoint_navigation_class.cpp: 类风格的多点导航实现。

5. 计算机视觉 OpenCV (第 9 章)

  • 9_cv_image.cpp: 展示如何使用 cv_bridge 将 ROS 2 的图像消息转换为 OpenCV 格式并显示。
  • 9_cv_hsv.cpp: 演示如何进行 HSV 颜色空间转换,用于识别特定颜色的物体。
  • 9_cv_face_detect.cpp: 集成 OpenCV 的级联分类器,实现摄像头画面的实时人脸检测。
  • 9_cv_follow.cpp: 视觉循迹/跟随示例,根据视觉识别到的目标位置控制机器人运动。

6. 三维点云与机械臂抓取 (第 10-12 章)

  • 10_pc_data.cpp: 演示如何处理三维点云数据(sensor_msgs/msg/PointCloud2)。
  • 10_pc_objects.cpp: 演示如何在点云中进行聚类或物体识别,获取物体的三维坐标。
  • 11_mani_ctrl.cpp: 机械臂控制示例,演示如何控制 WPB 机器人的机械臂关节运动到指定位置。
  • 11_grab_object.cpp: 自动抓取示例,整合了目标识别与机械臂控制动作。
  • 12_fetch.cpp: 完整的“取物”任务示例,涵盖了导航到目标点、视觉定位物体、抓取以及返回的完整流程。

4.demo_launch/:ROS 2 启动文件

1. 基础通信与系统演示 (第 3 章)

  • 3_pub_sub.launch.py: 演示如何同时启动发布者和订阅者节点,展示它们之间的话题通信。
  • 3_pub_sub.launch.xml: 使用 XML 格式实现的发布/订阅启动文件,供用户对比不同 Launch 语法的区别。
  • 3_pub_sub.launch.yaml: 使用 YAML 格式实现的发布/订阅启动文件。

2. SLAM 建图 (第 7 章)

  • 7_slam.launch.py: 启动 SLAM(同步定位与建图)系统的演示脚本,通常会配合 Rviz 视图以便观察建图过程。

3. 导航功能 (第 8 章)

  • 8_nav.launch.py: 启动基础导航堆栈(Nav2)的配置脚本,用于演示单点导航功能。
  • 8_waypoint_nav.launch.py: 启动多点航点导航功能的脚本,配合 8_waypoint_navigation.cpp 示例运行。

4. 综合任务 (第 12 章)

  • 12_home.launch.py: 启动针对 Robocup@Home 场景的综合任务演示脚本,通常会整合视觉、导航和机械臂等多个节点进行协同工作。

目录特点与用法

  • 多语言支持: 目录中展示了 ROS 2 支持的三种 Launch 写法(Python、XML、YAML),方便学习者根据偏好选择。
  • 配套关系: 这些文件通常以章节编号开头(如 3_, 7_, 8_),直接对应 demo_cpp/ 中的源代码和 demo_cmakelists/ 中的编译配置。
  • 快速运行: 你可以通过类似 ros2 launch wpr_simulation2 8_nav.launch.py 的命令直接启动复杂的仿真实验环境。

5.demo_package/:依赖包

demo_package/ 目录包含了与示例代码配套的 package.xml 配置代码片段。在 ROS 2 开发中,package.xml 负责声明功能包的元数据以及编译和运行时所需的依赖项。
该目录下的每个文件都对应 demo_cpp/ 中的一个示例程序,主要用于指导用户在编写类似功能的程序时,需要在 package.xml 中添加哪些依赖声明:

1. 基础节点依赖

  • 3_my_node.xml: 基础节点的依赖配置,通常包含最基本的 rclcpp
  • 3_topic.xml: 包含标准消息通信(如 std_msgs)所需的依赖配置。

2. 运动控制与传感器依赖

  • 4_vel_node.xml: 包含发布速度指令所需的 geometry_msgs 依赖。
  • 5_lidar_data.xml / 5_lidar_behavior.xml: 包含处理激光雷达数据所需的 sensor_msgs 依赖。
  • 6_imu_data.xml / 6_imu_behavior.xml: 包含处理惯性测量单元数据所需的传感器消息依赖。

3. 导航与路径规划依赖

  • 8_waypoint_navigation.xml: 包含与 Nav2 导航堆栈交互所需的 nav2_msgs 或相关动作接口依赖。

4. 计算机视觉 (OpenCV) 依赖

  • 9_cv_image.xml / 9_cv_hsv.xml: 关键配置,展示如何声明 cv_bridge(连接 ROS 图像与 OpenCV)和 sensor_msgs 的依赖。
  • 9_cv_face_detect.xml: 除了基础视觉依赖外,还涉及图像处理相关的组件声明。
  • 9_cv_follow.xml: 综合了视觉处理和运动控制的依赖配置。

5. 高级感知与任务依赖

  • 10_pc_data.xml / 10_pc_objects.xml: 包含处理三维点云数据所需的 sensor_msgs 和可能需要的 pcl_conversions 等依赖。
  • 11_mani_ctrl.xml / 11_grab_object.xml: 包含机械臂控制所需的接口依赖(如自定义消息或标准动作接口)。
  • 12_fetch.xml: 最完整的依赖配置片段,涵盖了导航、视觉、点云和机械臂的所有相关依赖项。

6.exercises/:练习面向对象编程

exercises 文件夹是专门为学习者设计的“练习本”,它包含了 demo_cpp 中核心示例的面向对象(Class)改写版本。相比于基础示例,这些代码更符合 ROS 2 推荐的编程规范,适合进阶学习。

1. 基础运动与传感器 (第 4-6 章)

  • 4_velocity_command_class.cpp: 练习使用类结构发布速度指令,控制机器人移动。
  • 5_lidar_data_class.cpp: 练习以类的方式订阅并处理激光雷达数据。
  • 5_lidar_behavior_class.cpp: 练习将雷达避障逻辑封装在类中。
  • 6_imu_data_class.cpp: 练习使用类获取 IMU 姿态信息。
  • 6_imu_behavior_class.cpp: 练习基于类结构的 IMU 反馈转向控制。

2. SLAM 建图练习 (第 7 章)

  • 7_slam_all.launch.py: 一个综合启动文件,用于一键开启 SLAM 建图所需的所有组件。
  • 7_slam_resolution.launch.py: 练习调整地图分辨率等参数的 SLAM 启动文件。

3. 导航进阶 (第 8 章)

  • 8_navi_all_waypoints.cpp: 这是一个综合练习,要求实现机器人自动巡航通过地图上的所有预设航点。

4. 计算机视觉 OpenCV (第 9 章)

这一部分提供了大量的类封装练习,涵盖了从基础图像显示到复杂目标跟随的逻辑:
  • 9_cv_image_class.cpp: 练习类封装的图像显示。
  • 9_cv_hsv_class.cpp: 练习类封装的颜色过滤。
  • 9_cv_face_detect_class.cpp: 练习类封装的人脸检测。
  • 9_cv_follow_class.cpp: 练习类封装的目标跟随控制。
  • 9_cv_face_follow.cpp: 综合练习,实现机器人自动追踪并跟随人脸移动。
  • 9_cv_save_file.cpp: 练习如何将处理后的图像保存为本地文件。

5. 三维感知与抓取 (第 10-11 章)

  • 10_pc_data_class.cpp: 练习使用类处理 PointCloud2 三维点云数据。
  • 10_pc_objects_class.cpp: 练习类封装的三维物体识别逻辑。
  • 11_mani_ctrl_class.cpp: 练习以类的方式控制机械臂关节运动。
  • 11_grab_object_class.cpp: 综合练习,使用类结构实现“感知+抓取”的完整动作序列。

总结

  • 教学目的: 帮助你从简单的“过程式”编程(面向过程)过渡到成熟的“组件式”编程(面向对象)。
  • 学习建议: 当你理解了 demo_cpp 中的基础原理后,应该尝试阅读并运行 exercises 中的代码,这能帮你写出结构更清晰、更易于维护的 ROS 2 节点。

7.launch/:整个仿真系统的核心启动脚本

1. 基础环境与机器人生成

  • world.launch.py: 最基础的启动文件,用于打开一个空白的或指定路径的 Gazebo 仿真世界。
  • spawn_wpb.launch.py: 在当前的仿真世界中生成一台标准的 WPB-Home 机器人模型。
  • spawn_wpb_lidar.launch.py: 生成一台带激光雷达的机器人,常用于建图和导航练习。
  • spawn_wpb_mani.launch.py: 生成一台带有机械臂的机器人,用于抓取练习。
  • spawn_wpb_head_up.launch.py: 生成一台头部向上倾斜的机器人,通常是为了让摄像头获得更好的视野。

2. 核心功能启动

  • slam.launch.py: 启动 SLAM(同步定位与建图) 系统。它会同时运行激光雷达驱动、建图算法(如 Toolbox 或 Gmapping)以及 Rviz 可视化界面。
  • navigation.launch.py: 启动 Nav2 导航堆栈。它会加载全局和局部代价地图配置,并允许用户在 Rviz 中设置目标点让机器人自主移动。
  • map_tools.launch.py: 启动地图相关的辅助工具,可能用于地图的保存或加载。

3. 预设教学场景

  • wpb_simple.launch.py: 一键启动最简单的仿真环境,包含一台机器人和一个简单的方形房间。
  • wpb_table.launch.py: 启动一个包含桌子的场景,常用于视觉识别和机械臂抓取的初级练习。
  • wpb_scene_1.launch.py: 启动一个更复杂的室内居家场景。
  • robocup_home.launch.py: 启动 Robocup@Home 国际比赛的标准仿真场景,包含完整的家庭环境配置。
  • robocup_home_mani.launch.py: 在 Robocup@Home 场景中生成带机械臂的机器人,用于执行复杂的家庭服务任务。

4. 专项演示场景

  • wpb_face.launch.py: 专门用于人脸识别和跟随练习的场景,通常会生成一个带有人的模型。
  • wpb_objects.launch.py: 用于物体识别练习,场景中会随机分布各种颜色和形状的物体。
  • wpb_balls.launch.py: 专门用于彩色小球识别和追踪的练习场景。
  • spawn_objects.launch.py / spawn_persons.launch.py: 动态地在仿真世界中添加物体或行人模型的脚本。

5. 机械臂控制演示

  • demo_mani_ctrl.launch.py / wpb_mani.launch.py: 启动机械臂控制器的接口,允许用户通过代码或话题控制机械臂的关节运动。

8.maps/:存放 SLAM(同步定位与建图)生成的环境地图文件

  • 图片文件 (.pgm.png)
    • 作用:以栅格图像的形式表示环境。
    • 内容:黑色代表障碍物(墙壁、家具),白色代表自由空间,灰色代表未知区域。
  • 描述文件 (.yaml)
    • 作用:记录地图的元数据,供 map_server 加载时使用。
    • 关键参数:包含图片的路径、分辨率(如 0.05m/pixel)、起始原点坐标以及占用阈值等。

与库中其他功能的联系

  • 加载地图:在 nav2_params.yaml 配置文件中,map_server 会引用该目录下的 YAML 文件来加载仿真环境的背景图。
  • 保存地图:当你运行 slam.launch.py 完成扫描后,可以使用 map_saver 节点将扫描结果保存到这个目录下。
  • 导航引用:运行 navigation.launch.py 时,系统会默认或通过参数指定该目录下的地图文件,作为全局路径规划的依据。

9.media/:文档说明相关的多媒体资源,如图片和图标

1. 书籍与课程相关

  • book_1.jpg: 配套教材《机器人操作系统(ROS2)入门与实践》的封面图片。

2. 仿真效果截图

这些图片展示了不同功能启动后的典型界面,帮助用户确认程序运行是否正确:
  • wpb_simple.png: 演示 wpb_simple.launch.py 启动后的简单场景效果。
  • wpb_gmapping.png: 展示机器人进行 SLAM 建图时的 Rviz 界面截图。
  • wpb_navigation.png: 展示机器人执行导航任务时的界面效果。
  • wpb_home_table.png: 展示 WPB-Home 机器人在桌子场景下的仿真画面。
  • wpr1_simple.png / wpr1_gmapping.png / wpr1_navigation.png: 分别展示 WPR1 系列机器人在基础场景、建图和导航模式下的运行截图。

总结

该目录并不包含机器人运行所需的代码或模型数据,其核心作用是作为视觉辅助说明文件,让用户在查看 GitHub 仓库或本地文档时,能够快速了解该仿真库支持的机器人型号及其功能表现。

10.meshes/:3D 模型几何数据文件及外观贴图

meshes 目录存放的是机器人和仿真场景中各种物体的 3D 模型几何数据文件(如 .dae.stl)以及相关的外观贴图.jpg.png)。这些文件定义了物体在 Gazebo 仿真环境中的视觉外观和碰撞精细形状。

1. 场景家具与道具

这些文件用于构建逼真的室内仿真环境:
  • 基础家具:包含床 (bed.dae)、书架 (bookshelft.dae)、椅子 (chair.dae)、橱柜 (cupboard.dae)、沙发 (sofa.dae)、餐桌 (table.dae) 和茶几 (tea_table.dae)。
  • 生活用品:包含一个用于抓取练习的水瓶模型 (bottle.stl)。
  • 配套贴图:各家具子目录下存有对应的纹理图片,例如木纹贴图 (Wood_Veneer_02.jpg) 或地毯图案 (Carpet_Pattern_Squares_Multi.jpg)。

2. 角色模型(人物)

用于视觉识别和交互任务的 3D 人物模型:
  • 成人角色:包含男性模型 (man_1.dae, man_2.dae)、女性模型 (woman.dae) 以及特定的站立角色 kai (kai_standing.dae)。
  • 皮肤与服装贴图:每个角色文件夹下都有对应的 color.png 贴图文件。

3. 机器人组件

存放 WPR 系列机器人各部位的精细模型:
  • WPB-Home 系列:包含标准版主体 (wpb_home_std.dae)、带有机械臂的版本 (wpb_home_mani.dae) 以及机械臂的前臂组件 (forearm.dae)。
  • WPR1 系列:包含底座 (base.dae)、躯干 (torso.dae)、大臂 (upperarm.dae)、前臂 (forearm.dae)、手掌 (palm.dae)、手指 (finger.dae) 及指尖 (fingertip.dae) 的独立模型,用于实现精细的关节运动仿真。
  • WPV3 系列:包含 WPV3 机器人的整体模型文件 (wpv3.dae)。

总结

该目录是仿真的视觉资源库
  • .dae (Collada) 文件通常包含复杂的几何信息和贴图引用,是 Gazebo 中最常用的格式。
  • .stl 文件主要用于描述物体的几何形状,常用于简单的障碍物或抓取件。
  • 这些资源通过 models 目录下的 .model.sdf 文件被引用,最终呈现在仿真界面中。

11.models/:Gazebo 仿真模型定义文件

wpr_simulation2 库中,models 目录存放的是 Gazebo 仿真模型定义文件.model.sdf)。这些文件是仿真环境的核心,定义了机器人、人物和家具在物理世界中的属性,如质量、惯性、碰撞形状以及它们引用的 3D 外观(Meshes)。

1. 机器人模型

这些文件定义了仿真中各种机器人的物理结构和传感器配置:
  • wpb_home.model: 标准版 WPB-Home 机器人。
  • wpb_home_lidar.model: 在标准版基础上增加了激光雷达,用于建图和导航。
  • wpb_home_mani.model: 带有机械臂的 WPB-Home 机器人,用于抓取任务。
  • wpb_home_head_up.model: 摄像头头部向上倾斜的版本,提供更广的视野。
  • wpr1.model / wpv3.model: 库中支持的其他系列机器人模型(如 WPR-1 强力作业机器人或 WPV-3 移动底座)。

2. 交互角色(人物)

这些模型带有碰撞属性,可以作为机器人导航避障或视觉识别的对象:
  • man_1.model / man_2.model: 不同外貌的成年男性模型。
  • woman.model: 女性角色模型。
  • kai_standing.model: 名为“Kai”的站立人物模型。

3. 环境与家具模型

用于构建仿真场景,机器人可以检测这些物体的碰撞或与其交互:
  • 场景基础: bed.model(床)、sofa.model(沙发)、table.model(桌子)、tea_table.model(茶几)。
  • 收纳家具: bookshelft.model(书架)、cupboard.model(橱柜)、chair.model(椅子)。

4. 专项任务道具

  • 彩色小球 (balls/): 包含红、绿、蓝、橙四种颜色的球体模型(如 red_ball.model),常用于颜色追踪(HSV)练习。
  • 瓶子 (bottles/): 包含红、绿两种颜色的水瓶模型(如 green_bottle.model),主要用于机械臂抓取练习。

总结与用法

  • 与 Meshes 的关系: models 文件夹里的文件通常会引用 meshes 文件夹里的 3D 几何文件来渲染外观。
  • 启动方式: 这些模型通常通过 launch 目录下的 spawn_*.launch.py 脚本被加载到 Gazebo 场景中。例如,启动 spawn_wpb_mani.launch.py 就会在仿真中生成 wpb_home_mani.model 定义的机器人。

12.msg/:定义 ROS 2 自定义消息接口

wpr_simulation2 库中,msg 目录用于定义 ROS 2 自定义消息接口。这些消息允许库中的不同节点以特定于机器人任务的数据格式进行通信。
目前该目录下包含以下核心定义:
  • Object.msg: 定义了一个通用的物体识别消息格式。该消息通常包含物体的名称、置信度以及它在三维空间中的坐标或在图像中的位置。

13.rviz/:RViz2 的配置文件

  • slam.rviz: 专为 SLAM 建图 设计。它会重点显示生成的地图(OccupancyGrid)、机器人的运动轨迹以及激光雷达的扫描线。
  • navi.rviz: 用于 2D 导航 演示。配置了全局和局部路径规划的显示,并显示了代价值地图(Costmaps),方便观察避障逻辑。
  • navi_3d.rviz: 用于 3D 导航 场景,相比 2D 版本,它更适合在复杂的立体环境(如包含桌椅的室内)中查看机器人的三维空间感知情况。
  • pointcloud.rviz: 专门用于展示 3D 点云数据(PointCloud2)。当你运行深度摄像头或三维感知示例(如 10_pc_data.cpp)时,该配置能清晰显示三维空间中的离散点。
  • objects.rviz: 用于 物体识别 演示。它除了显示环境外,还会通过标记(Markers)在视图中圈出被识别到的物体,并显示物体标签和置信度。
  • fetch.rviz: 针对 “取物”任务(Fetch) 的综合配置。它集成了导航、点云感知和物体识别的显示项,方便开发者监控机器人从移动到抓取的全过程。
  • sensor.rviz: 基础传感器调试 配置。它提供了一个通用的视角来查看机器人的基本传感器输出,如普通的激光雷达扫描、TF 坐标系树等。
这些文件通常在 launch 目录下的启动脚本中被自动调用。例如,在 slam.launch.py 中,程序会自动加载 slam.rviz 来为你呈现建图界面。如果你想手动加载,可以在启动 RViz2 后通过 File -> Open Config 选择对应的文件。

14.scripts/:用于环境配置自动化安装依赖的 Shell 脚本文件

wpr_simulation2 库中,scripts 目录存放的是用于环境配置自动化安装依赖的 Shell 脚本文件。它们的主要作用是确保你的 Ubuntu 系统和 ROS 2 Humble 环境具备运行该仿真库所需的全部软件库。
  • install_for_humble.sh:
    • 核心作用:这是最关键的脚本,用于在 Ubuntu 22.04 上一键安装运行该仿真库所需的全部 ROS 2 Humble 依赖项。
    • 安装内容:它通常会自动安装 gazebo_ros_pkgs(Gazebo 仿真支持)、navigation2(导航框架)、joint_state_publisher 等关键组件。
    • 使用场景:在克隆完源码后,必须运行此脚本才能保证后续编译成功。
  • install_dep_face.sh:
    • 核心作用:专门用于安装人脸检测功能相关的额外依赖。
    • 安装内容:通常包含 Python 版的 OpenCV 以及相关的级联分类器模型文件,用于支持 src/face_detector.py 等视觉节点的运行。
    • 使用场景:如果你需要运行 wpb_face.launch.py 或进行人脸追踪练习,需要先运行此脚本。

15.src/:核心源代码

wpr_simulation2 库中,src 目录存放的是该功能包的核心源代码。与 demo_cpp 目录中的教学示例不同,src 中的文件通常是支持仿真环境运行、实现复杂交互逻辑或提供基础工具的关键程序。

1. 机器人与动作仿真

  • wpb_home_mani_sim.cpp: 这是 WPB-Home 机器人机械臂仿真的核心后端程序。它负责接收关节指令并模拟机械臂在 Gazebo 中的运动反馈。
  • grab_object_sim.cpp: 专门用于仿真环境下的抓取动作逻辑。它简化了复杂的物理抓取过程,确保在仿真中机器人能稳定地“吸附”或拿起目标物体。

2. 环境交互与动态物体

  • objects_publisher.cpp: 该程序负责在仿真世界中发布物体的信息。它会实时检测仿真环境中的物体坐标,并以 msg/Object.msg 定义的格式发布,供导航或视觉节点使用。
  • ball_random_move.cpp: 用于控制仿真场景中的小球进行随机运动。这通常用于视觉追踪(如颜色追踪)练习,增加算法在动态环境下的难度。

3. 视觉感知(Python)

  • face_detector.py: 基于 Python 编写的人脸检测节点。它订阅摄像头图像话题,利用 OpenCV 进行人脸识别,并输出人脸在画面中的位置坐标。

4. 基础工具

  • keyboard_vel_cmd.cpp: 一个简单的键盘控制工具。允许用户通过键盘按键(如 WASD)直接发布速度指令(cmd_vel)来手动遥控仿真中的机器人。

总结

src 目录是整个仿真库的功能支撑层
  • 它通过 C++ 和 Python 混合编程,实现了从底层动作模拟到高层视觉感知的完整链路。
  • 如果你需要深入了解仿真环境是如何处理物体坐标、机械臂如何响应指令或如何遥控机器人,这些文件是最佳的学习对象。

16.worlds/:Gazebo 仿真世界文件

wpr_simulation2 库中,worlds 目录存放的是 Gazebo 仿真世界文件.world)。这些文件是 XML 格式的,定义了仿真环境的物理特性、光照、以及在环境中放置的静态和动态物体(如墙壁、家具、机器人和道具)。
  • simple.world: 一个最基础的空白环境,仅包含地面和默认光照,适合进行基础的运动控制测试。
  • light.world: 专门配置了特定光照条件的环境,通常用于视觉算法在不同光效下的稳健性测试。
  • wpb_simple.world: 这是库中最常用的基础教学场景,包含一个简单的封闭房间和一台 WPB 机器人。它是配套教材中大多数基础练习的默认环境。
  • table.world: 该世界中放置了一张桌子和一些小型道具(如瓶子),专门用于练习视觉目标识别、点云分析以及机械臂的抓取动作。
  • robocup_home.world: 这是一个高度复杂的综合场景,模拟了 Robocup@Home(家庭服务机器人比赛)的标准比赛环境。它包含完整的客厅、卧室、厨房等家居布局,用于测试机器人在真实家庭环境中的导航、语音交互和任务执行能力。
  • wpb_pose.world: 一个用于测试机器人位姿估计和初始定位的环境,可能包含特定的参照物以帮助校验定位算法的准确性。

核心作用与使用方法

  • 环境初始化: 这些文件定义了仿真的“舞台”。当你通过 launch 文件启动仿真时(例如使用 world.launch.py),系统会读取这些 .world 文件来构建 Gazebo 界面。
  • 物理仿真: 它们不仅定义了物体的外观,还定义了摩擦力、重力等物理参数,确保机器人在其中的运动符合物理规律。
  • 快速切换: 你可以通过修改启动参数,快速在简单的“实验室”环境(如 simple.world)和复杂的“家庭”环境(如 robocup_home.world)之间切换,以验证算法的适应性。

17.其他

1. CMakeLists.txt (核心编译脚本)

这是 ROS 2 C++ 功能包的“总指挥部”。它定义了:
  • 依赖项查找:通过 find_package 加载 rclcppgazebo_rosnav2_msgs 等库。
  • 自定义消息生成:调用接口编译工具生成 Object.msg 对应的 C++/Python 代码。
  • 目标编译:通过 add_executable 声明将 src/demo_cpp/ 中的代码编译为可执行文件。
  • 安装规则:规定了 launch/config/models/ 等资源文件夹在安装后应该存放在系统的什么位置,确保 ros2 launch 命令能找到它们。

2. package.xml (功能包元数据)

这是功能包的“身份证”,采用 XML 格式:
  • 基本信息:记录了包名 (wpr_simulation2)、版本、维护者联系方式及 GPLv3 开源协议。
  • 依赖声明:明确列出了编译工具依赖(ament_cmake)、构建依赖和执行依赖(如 sensor_msgsnav2_common 等)。
  • 导出信息:告知 ROS 2 编译系统这是一个 ament_cmake 类型的包。

3. setup.pysetup.cfg (Python 集成)

虽然这是一个混合编译的功能包,但这两个文件主要负责处理其中的 Python 脚本(如 src/face_detector.py):
  • setup.py:定义了如何安装 Python 模块和脚本,使得 Python 节点可以像 C++ 节点一样通过 ros2 run 启动。
  • setup.cfg:为 setuptools 提供配置参数,通常用于指定脚本的安装路径。

4. README.md (用户指南)

这是你快速上手的“说明书”,包含了:
  • 教学资源链接:提供了配套的 Bilibili 和 YouTube 视频课程链接,以及淘宝教材购买地址。
  • 环境要求:明确指出适配 ROS2 Humble (Ubuntu 22.04)
  • 安装步骤:给出了获取源码、安装依赖和编译的具体终端命令。
  • 常用命令:列出了启动基础仿真、SLAM 建图和自动导航的演示指令。
 
 
 
 
 
 
💡
有关问题,欢迎您在底部评论区留言,一起交流~
开放场景下的机器人语义导航方法学习笔记——模拟篇构建一个2B的千问大模型
Loading...
Koreyoshi
Koreyoshi
一个普通的干饭人🍚
Announcement
🎉写给自己的2026心愿🎉
学一门乐器
拍摄人生照片
义工旅游一个月
在北京交很多新朋友
学习胡闹厨房建模和贴图
----- 2026 ------
👏希望我们一起变好👏