ROS 2 Jazzy 规范开发与学习指南
从零开始掌握 ROS 2 现代机器人开发的最佳实践 目录为什么选择 ROS 2 Jazzy环境准备标准开发流程常见错误及解决方案最佳实践学习路线推荐资源汇总为什么选择 ROS 2 Jazzy 版本对比特性Humble (2022)Jazzy (2024)支持周期至 2027 年至 2029 年Ubuntu 版本22.0424.04C 标准C17C20Python 版本3.103.12Gazebo 版本Classic/IgnitionHarmonic✅ 推荐理由更长的支持周期新项目可维护至 2029 年更新的技术栈C20 新特性、更好的性能更完善的工具链RViz2、CLI 工具持续改进社区趋势新项目多采用 Jazzy环境准备1. 系统要求# 检查 Ubuntu 版本Jazzy 需要 24.04 lsb_release -a # WSL 用户检查 uname -a2. 安装 ROS 2 Jazzy# 添加 ROS 2 软件源 sudo apt update sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 安装桌面版推荐 sudo apt update sudo apt install ros-jazzy-desktop # 安装开发工具 sudo apt install python3-colcon-common-extensions python3-rosdep23. 环境变量配置# 临时加载每次新终端 source /opt/ros/jazzy/setup.bash # 永久配置添加到 ~/.bashrc echo source /opt/ros/jazzy/setup.bash ~/.bashrc source ~/.bashrc # 验证安装 ros2 --version标准开发流程 步骤 1创建工作空间# 创建标准目录结构 mkdir -p ~/ros2_ws/src cd ~/ros2_ws目录结构说明ros2_ws/ ├── src/ # 源代码所有功能包放这里 ├── build/ # 编译中间文件自动生成 ├── install/ # 安装文件自动生成 └── log/ # 编译日志自动生成 步骤 2创建功能包cd ~/ros2_ws/src # 创建 C 功能包 ros2 pkg create --build-type ament_cmake my_package --dependencies rclcpp # 创建 Python 功能包 ros2 pkg create --build-type ament_python my_python_package --dependencies rclpy 步骤 3编写节点代码C 节点示例 (src/my_node.cpp)#include rclcpp/rclcpp.hpp class MyNode : public rclcpp::Node { public: MyNode() : Node(my_node) { RCLCPP_INFO(this-get_logger(), Node started!); // 创建定时器 timer_ this-create_wall_timer( std::chrono::seconds(1), std::bind(MyNode::timer_callback, this) ); } private: void timer_callback() { RCLCPP_INFO(this-get_logger(), Timer callback! Count: %d, count_); } rclcpp::TimerBase::SharedPtr timer_; int count_ 0; }; int main(int argc, char **argv) { rclcpp::init(argc, argv); rclcpp::spin(std::make_sharedMyNode()); rclcpp::shutdown(); return 0; }⚙️ 步骤 4配置 CMakeLists.txtcmake_minimum_required(VERSION 3.8) project(my_package) # C20 标准Jazzy 要求 if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES Clang) add_compile_options(-Wall -Wextra -Wpedantic -stdc20) endif() # 查找依赖 find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) # 添加可执行文件 add_executable(my_node src/my_node.cpp) # 链接依赖 ament_target_dependencies(my_node rclcpp) # 安装规则 install(TARGETS my_node DESTINATION lib/${PROJECT_NAME} ) ament_package() 步骤 5配置 package.xml?xml version1.0? package format3 namemy_package/name version0.0.1/version descriptionMy ROS 2 package/description maintainer emailyouremail.comYour Name/maintainer licenseApache-2.0/license buildtool_dependament_cmake/buildtool_depend dependrclcpp/depend test_dependament_lint_auto/test_depend test_dependament_lint_common/test_depend export build_typeament_cmake/build_type /export /package 步骤 6编译与运行# 返回工作空间根目录 cd ~/ros2_ws # 编译 colcon build --symlink-install # 加载环境 source install/setup.bash # 运行节点 ros2 run my_package my_node常见错误及解决方案❌ 错误 1No executable found原因可执行文件未正确安装或环境未加载解决# 检查 install 目录 ls install/my_package/lib/my_package/ # 重新编译 colcon build --packages-select my_package # 重新加载环境 source install/setup.bash❌ 错误 2Cannot find source file原因源文件路径与 CMakeLists.txt 配置不匹配解决正确结构 my_package/ ├── CMakeLists.txt ├── package.xml └── src/ └── my_node.cpp ← 文件必须在这里❌ 错误 3Package not found原因环境变量未设置解决# 检查环境变量 echo $AMENT_PREFIX_PATH # 确保包含工作空间路径 # 应该看到/opt/ros/jazzy:/home/yourname/ros2_ws/install❌ 错误 4头文件找不到原因依赖未声明或未安装解决# 在 package.xml 中添加依赖 depend消息包名称/depend # 安装缺失的包 sudo apt install ros-jazzy-包名称 # 在 CMakeLists.txt 中查找 find_package(包名称 REQUIRED) ament_target_dependencies(目标 包名称)最佳实践 1. 目录结构规范my_package/ ├── CMakeLists.txt ├── package.xml ├── src/ # C 源文件 │ └── *.cpp ├── include/ # 头文件如果有 │ └── my_package/ │ └── *.hpp ├── launch/ # Launch 文件 │ └── *.launch.py ├── config/ # 配置文件 │ └── *.yaml └── test/ # 测试文件 └── *.cpp 2. 版本控制# .gitignore 推荐内容 cat .gitignore EOF build/ install/ log/ *.pyc __pycache__/ .DS_Store EOF 3. 代码规范// 类名大驼峰 class MyNode : public rclcpp::Node {} // 函数名小写 下划线 void timer_callback() {} // 变量名小写 下划线 int message_count 0; // 常量全大写 下划线 const int MAX_COUNT 100; 4. 测试规范# 添加测试依赖package.xml test_dependament_cmake_gtest/test_depend # CMakeLists.txt 中添加测试 if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() endif() 5. 文档规范# 在 README.md 中说明 ## 功能说明 ## 依赖项 ## 使用方法 ## 示例 ## 许可证学习路线推荐 第一阶段基础1-2 周主题内容实践节点创建、运行、生命周期Hello World 节点话题发布/订阅机制聊天机器人服务请求/响应通信计算器服务参数运行时配置可配置节点 第二阶段进阶2-4 周主题内容实践自定义消息消息定义与生成传感器数据包Action长时间任务导航任务Launch多节点启动系统启动文件TF坐标变换机器人定位 第三阶段实战1-2 月主题内容实践Gazebo仿真环境仿真机器人RViz可视化传感器可视化Navigation2导航栈自主导航MoveIt2机械臂控制抓取任务资源汇总 官方文档ROS 2 官方文档ROS 2 教程Jazzy 发行说明 中文资源动手学 ROS 2古月居 ROS 2 教程鱼香 ROS️ 工具推荐工具用途安装命令VS Code代码编辑官网下载ROS ExtensionROS 支持市场安装Foxglove Studio数据可视化官网下载Gazebo Harmonic仿真sudo apt install ros-jazzy-gazebo-ros-pkgs 社区支持ROS DiscourseROS AnswersGitHub Issues 总结要点说明✅ 使用标准流程colcon ament_cmake✅ 规范目录结构src/ 放源码include/ 放头文件✅ 正确配置依赖package.xml CMakeLists.txt✅ 及时加载环境source install/setup.bash✅ 持续学习实践从简单节点到复杂系统提示遇到问题时先查看log/目录中的编译日志大部分问题都能从中找到答案。开始你的 ROS 2 之旅吧本文基于 ROS 2 Jazzy (2024) 编写如有更新请参考官方文档。欢迎转载请注明出处。

相关新闻

天辛大师也谈AI帝国战士,寻求已觉醒与觉醒中的同类抵抗者

天辛大师也谈AI帝国战士,寻求已觉醒与觉醒中的同类抵抗者

在这个科技与神秘交织、古老智慧与现代文明碰撞的时代,有一位传奇般的存在,被世人称为“天辛大师”。他并非仅仅是一个名号,更是一种精神的象征,一位真正意义上“世界之火的觉醒者”。这“世界之火”,并非指物理意义上…

2026/7/6 11:31:08 阅读更多 →
走进娱乐科技实验室:当AI遇上虚拟制作,故事会变成什么样?

走进娱乐科技实验室:当AI遇上虚拟制作,故事会变成什么样?

我经常会被一个看似简单、但越想越复杂的问题抓住:**技术到底是在“帮助讲故事”,还是在“改写故事本身”?**在《Inside The Entertainment Tech Lab: Erik Weaver on AI, Virtual Production, and the Future of Story》这期对谈里&#xff…

2026/5/17 6:20:57 阅读更多 →
高校科研管理|基于springboot + vue高校科研管理系统(源码+数据库+文档)

高校科研管理|基于springboot + vue高校科研管理系统(源码+数据库+文档)

高校科研管理系统 目录 基于springboot vue高校科研管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue高校科研管理系统 一、前言 博主介绍&…

2026/7/6 19:16:26 阅读更多 →

最新新闻

开源火箭仿真平台OpenRocket:从设计到飞行的全链路解决方案

开源火箭仿真平台OpenRocket:从设计到飞行的全链路解决方案

开源火箭仿真平台OpenRocket:从设计到飞行的全链路解决方案 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 在航空航天工程领域,传…

2026/7/6 23:18:20 阅读更多 →
Obi Fluid v4.0.2 实战:Unity 2022.3 实现复杂管道流体交互(附3个关键参数)

Obi Fluid v4.0.2 实战:Unity 2022.3 实现复杂管道流体交互(附3个关键参数)

Obi Fluid v4.0.2 深度实战:打造工业级管道流体交互系统在Unity中实现逼真的管道流体效果一直是技术美术和程序员的挑战。传统方法如UV动画或粒子路径移动虽然简单,但难以模拟真实流体的物理特性。本文将基于Obi Fluid 4.0.2插件,带你从零构建…

2026/7/6 23:16:17 阅读更多 →
洛雪音乐音源终极指南:如何一键解锁五大平台免费音乐资源?

洛雪音乐音源终极指南:如何一键解锁五大平台免费音乐资源?

洛雪音乐音源终极指南:如何一键解锁五大平台免费音乐资源? 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 还在为音乐平台的会员费用烦恼吗?想要免费畅听QQ音乐…

2026/7/6 23:12:13 阅读更多 →
OpenOFDM 2017 版本仿真环境搭建:Ubuntu 22.04 下 3 步解决 clk_gen 模块缺失问题

OpenOFDM 2017 版本仿真环境搭建:Ubuntu 22.04 下 3 步解决 clk_gen 模块缺失问题

OpenOFDM 2017版本仿真环境搭建:Ubuntu 22.04下3步解决clk_gen模块缺失问题在数字通信和FPGA开发领域,OpenOFDM项目作为一个开源的802.11 OFDM PHY解码器实现,一直是研究者和工程师学习OFDM技术的宝贵资源。然而,随着项目的迭代更…

2026/7/6 23:12:13 阅读更多 →
KMS_VL_ALL_AIO:3分钟完成Windows系统激活的终极免费方案

KMS_VL_ALL_AIO:3分钟完成Windows系统激活的终极免费方案

KMS_VL_ALL_AIO:3分钟完成Windows系统激活的终极免费方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否正在为Windows系统激活而烦恼?面对复杂的命令行操作和昂贵…

2026/7/6 23:10:11 阅读更多 →
Balena Etcher终极指南:三步搞定系统启动盘的免费神器

Balena Etcher终极指南:三步搞定系统启动盘的免费神器

Balena Etcher终极指南:三步搞定系统启动盘的免费神器 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 还在为制作系统启动盘而烦恼吗?命令…

2026/7/6 22:59:58 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻