# lear_ros2 **Repository Path**: felixmicrospace/lear_ros2 ## Basic Information - **Project Name**: lear_ros2 - **Description**: 这是一个ROS2学习项目,通过章节式结构组织不同的ROS2概念和示例。目前包含第2章和第3章的工作空间,涵盖了ROS2基础、话题通信、服务通信和自定义接口等核心功能的实现示例。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-04 - **Last Updated**: 2025-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: ros2 ## README # ROS2学习文档 本目录包含ROS2学习过程中的各种说明文档和教程。 ## 文档列表 ### 1. [ROS2 C++核心概念](readme/ros2_cpp_concepts.md) 这个文档介绍了ROS2 C++编程中的核心概念,包括: - 智能指针(std::make_shared, std::shared_ptr) - 异步编程(SharedFuture, async_send_request) - 回调函数(std::bind, 回调模式) - 节点生命周期管理 ### 2. [ROS2服务通信教程](readme/ros2_service_tutorial.md) 这个文档详细介绍了ROS2中的服务通信机制: - 服务通信概述 - 服务接口定义 - 服务端实现 - 客户端实现(同步和异步) - 构建与运行服务节点 - 常用服务命令 ### 3. [ROS2话题通信教程](readme/ros2_topic_tutorial.md) 这个文档详细介绍了ROS2中的话题通信机制: - 话题通信概述 - 消息接口定义 - 发布者实现 - 订阅者实现 - 构建与运行话题节点 - 常用话题命令 ### 4. [ROS2动作通信教程](readme/ros2_action_tutorial.md) 这个文档详细介绍了ROS2中的动作通信机制: - 动作通信概述 - 动作接口定义 - 动作服务器实现 - 动作客户端实现 - 构建与运行动作节点 - 常用动作命令 ### 5. [ROS2生命周期节点教程](readme/ros2_lifecycle_tutorial.md) 这个文档详细介绍了ROS2中的生命周期节点: - 生命周期节点概述 - 状态转换机制 - 生命周期节点实现 - 生命周期发布者 - 控制生命周期节点 - 最佳实践 ### 6. [ROS2参数教程](readme/ros2_parameters_tutorial.md) 这个文档详细介绍了ROS2中的参数系统: - 参数概述 - 参数声明与使用 - 参数类型 - 参数操作(声明、获取、设置) - 通过命令行操作参数 - 启动文件中的参数配置 - 最佳实践 ### 7. [ROS2 CMake命令说明](readme/ros2_cmake_commands.md) 这个文档解释了ROS2构建系统中常用的CMake命令: - ament_target_dependencies - install - 完整构建示例 ### 8. [ROS2项目的clangd配置指南](readme/clangd_config.md) 这个文档提供了为ROS2项目配置clangd语言服务器的详细步骤: - 创建.clangd配置文件 - 生成compile_commands.json - 配置VS Code设置 ### 9. [ROS2架构图解](readme/ros2_diagram.md) 这个文档通过图表形式展示ROS2的核心概念及其关系: - ROS2核心概念关系图 - 通信机制对比图 - 节点生命周期状态图 - 参数系统流程图 - 构建系统流程图 - 开发工具链图解 ### 10. [ROS2接口定义语言(IDL)问题排查指南](readme/ros2_idl_module.md) 这个文档提供了ROS2接口定义语言相关问题的排查和解决方法: - 常见错误分析 - Python环境冲突解决 - 接口定义文件检查 - 预防措施 ### 11. [ROS2 SSH登录环境自动配置指南](readme/ros2_ssh_environment.md) 这个文档介绍了如何解决SSH登录时ROS2环境自动加载的问题: - 问题描述与分析 - 配置.bash_profile解决方案 - 配置.profile文件方案 - 创建专用环境脚本方案 - 配置验证方法 - 常见问题排查 ### 12. ROS2 Python环境配置脚本 为解决Python环境冲突问题(特别是pyenv与ROS2的兼容性问题),我们提供了以下脚本: - **setup_ros2_python.sh**:一次性配置脚本,用于设置ROS2开发环境使用系统Python 3.10 - **ros2_python_env.sh**:环境配置文件,可以添加到.bashrc或每次开发前手动加载 #### 使用方法: 1. **初次配置**: ```bash cd ~/learn_ros2/utils ./setup_ros2_python.sh ``` 此命令会检查当前Python环境,安装必要的依赖,并创建ros2_python_env.sh配置文件。 2. **日常开发**: - **临时使用**:每次开始ROS2开发前,执行: ```bash source ~/learn_ros2/utils/ros2_python_env.sh ``` - **永久配置**:将配置添加到.bashrc文件: ```bash echo 'source ~/learn_ros2/utils/ros2_python_env.sh' >> ~/.bashrc ``` 这些脚本解决了以下问题: - 确保ROS2使用系统Python 3.10而非pyenv管理的其他Python版本 - 自动安装ROS2接口生成所需的empy模块 - 设置正确的ROS2环境变量 ## 使用方法 这些文档可以作为ROS2学习和开发的参考资料。建议按照以下顺序阅读: 1. 首先了解[ROS2架构图解](readme/ros2_diagram.md),获取整体概念 2. 学习C++核心概念,掌握智能指针和异步编程 3. 深入学习ROS2通信机制(话题、服务、动作) 4. 学习高级特性(生命周期节点、参数系统) 5. 配置开发环境,提高编码效率 ## 贡献 欢迎提供更多有用的ROS2学习资料和教程。如需贡献,请遵循以下步骤: 1. 创建新的Markdown文档 2. 更新README.md,添加新文档的链接和简介 3. 确保文档内容清晰、准确 ## 更新日志 ### 2025-06-11 - **会话目的**:添加ROS2动作通信示例和相关文档 - **完成任务**: - 添加ROS2动作通信示例代码,实现action_robot和action_control节点 - 创建项目README.md,包含ROS2学习文档目录 - 增强Python环境配置脚本,解决pyenv冲突问题 - 更新ROS2编码标准,添加版本控制规范 - **关键决策**: - 采用Conventional Commits规范进行版本控制 - 使用标准ROS2动作接口实现机器人控制 - 优化Python环境配置,确保系统Python与ROS2兼容 - **技术栈**: - ROS2 Humble - C++17 - CMake - rclcpp_action - **修改文件**: - `.cursor/rules/ros2_coding_standards.mdc` - `utils/ros2_python_env.sh` - `README.md` - `chapter4/chap4_ws/src/example_action_rclcpp/`(新增多个文件) ## 会话总结 ### 2025-06-11 14:04:23 (Asia/Shanghai) - **会话主要目的**:检查example_action_rclcpp包的编译文件是否有错误 - **完成的主要任务**: - 检查并修正了头文件保护宏定义中的拼写错误 - 修正了节点名称,使其与类名保持一致 - 修正了package.xml中的许可证拼写错误 - 添加了包描述信息 - 移除了未使用的example_interfaces依赖 - **关键决策和解决方案**: - 将头文件保护宏从EXAMPLE_ACTIONI_RCLCPP_ROBOT_H_修改为EXAMPLE_ACTION_RCLCPP_ROBOT_H_ - 将action_control_01节点名从"action_robot_cpp"修改为"action_control_01" - 将许可证从"APche-2.0"修改为"Apache-2.0" - 从CMakeLists.txt中移除了未使用的example_interfaces依赖 - **使用的技术栈**:ROS2, C++, CMake - **修改了哪些文件**: - chapter4/chap4_ws/src/example_action_rclcpp/include/example_action_rclcpp/robot.h - chapter4/chap4_ws/src/example_action_rclcpp/src/action_control_01.cpp - chapter4/chap4_ws/src/example_action_rclcpp/package.xml - chapter4/chap4_ws/src/example_action_rclcpp/CMakeLists.txt ### 2025-06-11 14:11:42 (Asia/Shanghai) - **会话主要目的**:解决编译成功后环境配置出错的问题 - **完成的主要任务**: - 修复了ROS2包安装配置问题 - 添加了缺失的ament_package()调用 - 成功测试了节点运行 - **关键决策和解决方案**: - 在CMakeLists.txt文件末尾添加ament_package()调用,确保正确生成安装文件 - 重新构建包并验证安装文件生成正确 - **使用的技术栈**:ROS2, CMake - **修改了哪些文件**: - chapter4/chap4_ws/src/example_action_rclcpp/CMakeLists.txt ### 2025-06-11 15:14:09 (Asia/Shanghai) - **会话主要目的**:解决ROS2节点调试权限问题 - **完成的主要任务**: - 分析了调试器权限错误的原因 - 提供了多种解决ptrace权限问题的方法 - **关键决策和解决方案**: - 识别出Linux系统ptrace_scope安全限制导致调试需要超级用户权限 - 提供了临时和永久修改ptrace_scope设置的方法 - 建议了多种调试ROS2节点的替代方案 - **使用的技术栈**:Linux系统配置, GDB调试器, ROS2调试 - **修改了哪些文件**: - 无文件修改,仅提供了系统配置建议 ### 2025-06-11 15:21:08 (Asia/Shanghai) - **会话主要目的**:创建ROS2调试权限问题解决指南 - **完成的主要任务**: - 创建了详细的ROS2调试权限问题解决指南文档 - 更新了tutorials目录的README.md以包含新指南的链接 - **关键决策和解决方案**: - 详细解释了Linux系统中ptrace_scope的作用和安全考虑 - 提供了5种不同的解决方案,包括临时和永久方法 - 添加了ROS2特有的调试方法,如使用`--debug`参数和在launch文件中配置调试 - **使用的技术栈**:Markdown, Linux系统配置, ROS2调试 - **修改了哪些文件**: - tutorials/ros2_debugging_permissions.md (新文件) - tutorials/README.md