# ros2_test **Repository Path**: naoano/ros2_test ## Basic Information - **Project Name**: ros2_test - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-11 - **Last Updated**: 2026-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ROS2 入门与实践 — 全书学习代码 依据《机器人操作系统(ROS2)入门与实践》(刘相权、张万杰整理)全书源代码整理的学习仓库。**每章一个目录**,代码按书中章节还原,修复了书中影响编译/运行的错误(差异见各章 README「与书中代码的差异」)。 ## 环境 | 项目 | 说明 | |------|------| | 本机 ROS 环境 | `conda activate ros2`(conda 中的 ROS2 环境) | | 本书原始环境 | Ubuntu 22.04 + ROS2 Humble + wpr_simulation2 仿真器(gazebo,依赖 Linux) | | 编译命令 | `colcon build --packages-select <包名>`(在含 src/ 的工作空间执行) | **macOS 上的能力边界**:不依赖仿真的节点(第 3~6 章全部、第 8 章 waypoint_navigation、第 9~10 章数据节点、第 11 章 mani_ctrl、第 12 章 fetch)已在本机 conda ros2 编译并**试运行验证通过**(用 `ros2 topic pub` / 模拟脚本提供传感器输入,详见各章 README「本机实测」);依赖 wpr_simulation2 / gazebo / nav2 的部分(第 7~12 章仿真链路、mani_pkg 的 grab_object)需在 Linux + Humble 环境运行。 ## 目录结构 | 目录 | 章节 | 内容 | 包 | |------|------|------|-----| | [ch01_linux入门](ch01_linux入门) | 第1章 | Ubuntu 安装与使用(无 ROS 代码) | - | | [ch02_ros2安装](ch02_ros2安装) | 第2章 | ROS2 Humble 安装 + wpr_simulation2 仿真器 | - | | [ch03_编程基础](ch03_编程基础) | 第3章 | 节点/话题/消息、类封装、3 种 Launch 格式 | my_pkg, topic_pkg | | [ch04_运动控制](ch04_运动控制) | 第4章 | 发布 /cmd_vel 控制机器人运动 | vel_pkg | | [ch05_激光雷达](ch05_激光雷达) | 第5章 | 雷达数据获取、避障 | lidar_pkg | | [ch06_IMU](ch06_IMU) | 第6章 | IMU 姿态读取、航向锁定 | imu_pkg | | [ch07_SLAM建图](ch07_SLAM建图) | 第7章 | slam_toolbox 仿真建图 | slam_pkg | | [ch08_NAV2导航](ch08_NAV2导航) | 第8章 | NAV2 自主导航、航点导航 | nav_pkg | | [ch09_图像视觉](ch09_图像视觉) | 第9章 | 图像获取、HSV 定位、目标追踪、人脸检测 | cv_pkg | | [ch10_三维视觉](ch10_三维视觉) | 第10章 | PCL 点云、桌面物品检测 | pc_pkg | | [ch11_机械臂](ch11_机械臂) | 第11章 | 机械臂控制、物品抓取状态机 | mani_pkg | | [ch12_综合应用](ch12_综合应用) | 第12章 | 服务机器人送饮料(导航+抓取编排) | home_pkg | ## 快速开始(编译 + 运行) ```bash conda activate ros2 # 1. 创建/进入工作空间,把需要的包链接进去 mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src ln -s <本仓库路径>/ch03_编程基础/my_pkg . ln -s <本仓库路径>/ch03_编程基础/topic_pkg . # ... 其余章节同理 # 2. 编译(可一次全部,或 -packages-select 指定) cd ~/ros2_ws && colcon build # 3. 加载环境并运行 source install/setup.bash ros2 run my_pkg my_node # 最简节点 ros2 run topic_pkg publisher_node # 话题发布者 ros2 launch topic_pkg pub_sub.launch.py # launch 启动发布+订阅 ``` 每个包/每章的完整运行步骤见各章 README。 ## 依赖的第三方包(需额外安装) 以下包不在本仓库内,按章使用前需安装(Linux + Humble): | 包 | 用途 | 章节 | 安装命令 | |----|------|------|---------| | **wpr_simulation2** | 全书仿真环境(gazebo 机器人) | 2~12 | `git clone https://github.com/6-robot/wpr_simulation2.git ~/ros2_ws/src/ && cd ~/ros2_ws/src/wpr_simulation2/scripts/ && ./install_for_humble.sh`(或 [ch02 脚本](ch02_ros2安装/scripts/install_wpr_simulation2.sh)) | | **slam_toolbox** | 2D SLAM 建图 | 7 | `sudo apt install ros-humble-slam-toolbox` | | **navigation2** | 导航框架 | 8 | `sudo apt install ros-humble-navigation2` | | **nav2_bringup** | 导航启动文件 | 8, 12 | `sudo apt install ros-humble-nav2-bringup` | | **wp_map_tools** | 航点编辑与航点导航 | 8, 12 | `git clone https://github.com/6-robot/wp_map_tools.git ~/ros2_ws/src/ && cd ~/ros2_ws/src/wp_map_tools/scripts/ && ./install_for_humble.sh` | | **cv_bridge** | ROS 图像 ↔ OpenCV | 9 | `sudo apt install ros-humble-cv-bridge`(conda 环境已内置) | | **pcl_ros, pcl_conversions, tf2_ros** | 点云处理与坐标变换 | 10 | `sudo apt install ros-humble-pcl-ros`(conda 环境已内置) | > 注意:wpr_simulation2 / wp_map_tools 为 GitHub 源码包,克隆后需 `colcon build`; > 国内网络可用 gitee 镜像:`https://gitee.com/s-robot/wpr_simulation2.git`、`https://gitee.com/s-robot/wp_map_tools.git`。 ## 编译与运行验证状态(本机 conda ros2,2026-08-11) | 包 | 编译 | 运行(本机实测) | 说明 | |----|------|-----------------|------| | my_pkg | ✅ | ✅ | my_node 打印 Hello world! | | topic_pkg | ✅ | ✅ | 发布/订阅/类封装全链路收发一致 | | vel_pkg | ✅ | ✅ | /cmd_vel 持续发布 linear.x=0.1 | | lidar_pkg | ✅ | ✅ | 模拟 /scan → 正确打印正前方距离 | | imu_pkg | ✅ | ✅ | 四元数→欧拉角正确;航向锁定发布 0.1 m/s | | slam_pkg | ✅ | - | 仅 launch,运行时需 slam_toolbox + wpr_simulation2(Linux) | | nav_pkg | ✅ | ✅(节点) | waypoint_navigation 成功发出"1"号航点请求;launch 需 navigation2 | | cv_pkg | ✅ | ✅ | 4 个节点模拟相机输入验证通过(显示/HSV/追踪/人脸框) | | pc_pkg | ✅ | ✅(pc_data) | 模拟点云逐点坐标正确;pc_objects 需仿真 tf | | mani_pkg | ✅(mani_ctrl) | ✅(mani_ctrl) | 用临时包验证 Pose1/2 状态机 + JointState 发布;grab_object 需 wpr_simulation2 | | home_pkg | ✅ | ✅(fetch) | 状态机进入 STEP_GOTO_KITCHEN 并发出 "kitchen" 航点请求 | > 每章详细编译命令、运行命令与实测输出见各章 README「本机实测」区块。 ## 与书中代码的差异(汇总) 书中代码存在少量错误,本仓库已修复并在各章 README 记录: - **ch03**:`pub_sub.launch.py` 缩进错误(`LaunchDescription()` 在函数外,无法运行)→ 修复;3.3 类封装代码补文件名与构建目标 - **ch06**:`imu_behavior.cpp` 订阅话题 `"imu"` 缺 `/` → `/imu`;两个文件补 `#include ` - **ch08**:`waypoint_nav.launch.py` 缩进错误 → 修复;`waypoint_navigation.cpp` 订阅话题 `"waterplus/navi_result"` 缺 `/` → `/waterplus/navi_result` - **ch09**:`cv_image.cpp` 缩进整理;`cv_follow.cpp` 窗口名 `"RGB "` 尾随空格(产生双窗口)→ `"RGB"` - **ch10**:CMakeLists 补 `find_package(tf2_ros REQUIRED)` 及 `ament_target_dependencies` 补 `"tf2_ros"`(原书漏掉,无法编译) - **ch11**:`grab_object.cpp` 补 `#include `(`fabs` 需要) - **ch12**:`fetch.cpp` 订阅话题 `"waterplus/navi_result"` 缺 `/` → `/waterplus/navi_result` ## 学习路线 ```mermaid graph LR A[ch01-02 环境搭建] --> B[ch03 编程基础
节点/话题/Launch] B --> C[ch04 运动控制
cmd_vel] C --> D[ch05 激光雷达] C --> E[ch06 IMU] D --> F[ch07 SLAM建图] F --> G[ch08 NAV2导航] E --> G B --> H[ch09 图像视觉] H --> I[ch10 三维视觉] I --> J[ch11 机械臂抓取] G --> K[ch12 综合应用
送饮料机器人] J --> K ``` ## 学习要点(全书主线) 1. **第 3 章**:节点/话题/Launch 是 ROS2 一切的基础,必须吃透 2. **第 4~6 章**:三种传感器(速度指令/激光雷达/IMU)的读写与控制闭环,学会"感知 → 决策 → 执行" 3. **第 7~8 章**:SLAM 建图 + NAV2 导航 = 移动机器人的"大脑"(先建图再导航) 4. **第 9~11 章**:视觉 + 点云 + 机械臂 = 机器人的"眼睛和手" 5. **第 12 章**:把所有能力编排成一个完整任务(状态机 + 话题解耦)