【机器人】ROS 2(Robot Operating System 2)从入门到实战
目录
1.3 ROS 2 Humble安装(Ubuntu 22.04)
1.4 ROS 2 Jazzy安装(Ubuntu 24.04)
3.1.2 步骤2:编写C++发布者节点(publisher.cpp)
3.1.3 步骤3:编写C++订阅者节点(subscriber.cpp)
3.1.4 步骤4:修改CMakeLists.txt(编译配置)
3.2.2 步骤2:编写避障节点(obstacle_avoidance.cpp)
3.2.3 步骤3:修改CMakeLists.txt,添加编译配置
前言
ROS 2(Robot Operating System 2)是下一代开源机器人开发框架,基于Data Distribution Service(DDS)协议构建,解决了ROS 1的实时性、安全性短板,具备跨平台兼容性、分布式通信能力,已成为工业机器人、服务机器人、自动驾驶及具身智能领域的核心开发基座。本教程从初学者视角出发,遵循“理论筑基+实操赋能+部署闭环”的思路,逐步讲解ROS 2的核心知识与实战技巧,兼顾基础入门与企业级实操,帮助学习者快速掌握ROS 2开发能力,适配行业岗位需求。
适用人群:机器人相关专业学生、机器人开发初学者、想要从ROS 1迁移至ROS 2的开发者;
前置基础:具备基础的Linux命令操作能力、C++/Python编程基础,了解基本的机器人原理更佳;
推荐版本:ROS 2 Humble Hawksbill(长期支持版,适配Ubuntu 22.04,企业主流选择)、ROS 2 Jazzy(适配Ubuntu 24.04,适合追求新版本特性的学习者)。

第一部分:入门准备(环境搭建)
1.1 系统环境要求
ROS 2对系统环境有明确要求,不同版本适配不同的操作系统,主流搭配如下(优先推荐Ubuntu系统,兼容性最佳):
-
ROS 2 Humble:Ubuntu 22.04 LTS(x86_64/ARM64架构,最稳定,推荐初学者);
-
ROS 2 Jazzy:Ubuntu 24.04 LTS(x86_64/ARM64架构,新版本,支持更多新特性);
-
其他系统:Windows 10/11(需安装WSL 2)、macOS(通过UTM虚拟化)、嵌入式系统(树莓派、NVIDIA Jetson系列)【3】。
1.2 Ubuntu系统预处理(关键步骤)
若使用Ubuntu系统,需先完成系统配置,避免后续安装出错:
-
锁定内核(可选,提升系统稳定性):
# 查看当前内核版本 uname -r # 锁定内核镜像主体(以6.8.0-87-generic为例) sudo apt-mark hold linux-image-6.8.0-87-generic # 锁定内核模块 sudo apt-mark hold linux-modules-6.8.0-87-generic # 锁定内核头文件(开发内核模块时需执行) sudo apt-mark hold linux-headers-6.8.0-87-generic # 验证锁定结果 apt-mark showhold # 解除锁定命令(如需更新内核时使用) sudo apt-mark unhold linux-image-6.8.0-87-generic linux-headers-6.8.0-87-generic linux-modules-6.8.0-87-generic -
安装显卡驱动(NVIDIA显卡必备,避免可视化工具异常):
# 安装依赖库 sudo apt install build-essential # 安装gcc-12(部分驱动依赖) sudo apt install gcc-12 g++-12 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100 # 卸载旧NVIDIA驱动 sudo apt purge *nvidia* sudo apt autoremove # 添加NVIDIA官方PPA并更新 sudo add-apt-repository ppa:graphics-drivers/ppa -y sudo apt update # 查看推荐驱动版本并安装(替换xxx为推荐版本) ubuntu-drivers devices sudo apt install nvidia-driver-xxx # 重启验证 sudo reboot nvidia-smi -
配置conda环境(可选,便于项目依赖管理):
# 下载Miniconda安装包 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 赋予执行权限并安装 chmod +x Miniconda3-py310_23.3.1-0-Linux-x86_64.sh ./Miniconda3-py310_23.3.1-0-Linux-x86_64.sh # 创建并激活ROS 2专用环境 conda create --name ros2_env python=3.10 # 配置环境变量(永久生效) vim ~/.bashrc # 在文件末尾添加以下内容 conda activate ros2_env export PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple/ export PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn # 生效环境变量 source ~/.bashrc
1.3 ROS 2 Humble安装(Ubuntu 22.04)
采用官方推荐的apt安装方式,步骤如下,确保网络通畅(建议切换国内源,提升下载速度):
-
设置Locale(确保UTF-8支持):
sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8 -
添加ROS 2软件源:
sudo apt install software-properties-common sudo add-apt-repository universe # 安装curl并获取ROS 2源版本 sudo apt update && sudo apt install curl -y export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F" '{print $4}') # 下载并安装ROS 2源 curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb" sudo dpkg -i /tmp/ros2-apt-source.deb -
安装ROS 2 Humble桌面版(包含可视化工具,推荐):
sudo apt update && sudo apt upgrade -y sudo apt install ros-humble-desktop -y # 安装开发工具(用于编写和编译ROS 2项目) sudo apt install ros-dev-tools -y -
配置环境变量(永久生效):
# 将环境变量添加到.bashrc文件 echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc # 生效环境变量 source ~/.bashrc -
验证安装(关键步骤): 打开新终端,输入以下命令,若能正常显示版本信息,说明安装成功:
ros2 --version进一步验证:运行小海龟仿真(ROS 2自带的入门案例),打开两个终端,分别输入以下命令:# 终端1:启动小海龟节点ros2 run turtlesim turtlesim_node# 终端2:启动小海龟控制节点(按键盘方向键控制小海龟移动)ros2 run turtlesim turtle_teleop_key若能看到小海龟窗口,且能通过方向键控制移动,说明ROS 2环境完全正常。
1.4 ROS 2 Jazzy安装(Ubuntu 24.04)
适配Ubuntu 24.04系统,可通过自动化脚本快速安装,步骤如下:
# 下载自动化安装脚本(可从GitHub仓库获取)
# 假设脚本名为ros2_install_jazzy.sh,赋予执行权限
chmod +x ros2_install_jazzy.sh
# 运行脚本完成安装
./ros2_install_jazzy.sh # 配置环境变量(永久生效)
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc source ~/.bashrc
# 验证安装 ros2 --version
第二部分:ROS 2核心概念(必学基础)
ROS 2的核心是“分布式通信”,采用“节点-话题-服务-动作”的通信模型,基于DDS协议实现节点间无主节点依赖的交互,解决了ROS 1的单点故障问题【1】。以下是初学者必须掌握的核心概念,结合实操理解更高效。
2.1 核心通信模型组件
2.1.1 节点(Node)
节点是ROS 2中最小的执行单元,本质是一个可执行程序,负责完成特定的功能(如传感器数据采集、运动控制、图像处理等)。例如,小海龟仿真中的turtlesim_node(显示小海龟)、turtle_teleop_key(控制小海龟)都是独立的节点。
关键操作命令:
# 运行指定节点(格式:ros2 run 包名 节点名)
ros2 run turtlesim turtlesim_node
# 查看当前运行的所有节点
ros2 node list
# 查看某个节点的详细信息(格式:ros2 node info 节点名)
ros2 node info /turtlesim
2.1.2 话题(Topic)
话题是ROS 2中最常用的通信方式,采用“发布-订阅”模式(异步通信),适用于持续传输数据的场景(如传感器数据、速度指令)。例如,小海龟的位置信息通过/turtle1/pose话题发布,速度指令通过/cmd_vel话题发布。
关键特性:发布者(Publisher)和订阅者(Subscriber)无需直接关联,只需订阅相同话题即可实现通信;话题可被多个发布者和订阅者订阅。
关键操作命令:
# 查看当前所有话题
ros2 topic list
# 查看某个话题的消息类型(格式:ros2 topic type 话题名)
ros2 topic type /turtle1/pose
# 查看话题发布的数据(实时打印,按Ctrl+C停止)
ros2 topic echo /turtle1/pose
# 发布话题数据(格式:ros2 topic pub 话题名 消息类型 数据)
ros2 topic pub /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.5}}"
2.1.3 服务(Service)
服务是“请求-响应”模式(同步通信),适用于需要即时反馈的场景(如查询机器人状态、执行特定指令并返回结果)。例如,小海龟的重置功能通过/reset服务实现,客户端发送重置请求,服务端执行并返回成功信息。
关键操作命令:
# 查看当前所有服务
ros2 service list # 查看某个服务的类型(格式:ros2 service type 服务名)
ros2 service type /reset
# 调用服务(格式:ros2 service call 服务名 服务类型 请求数据)
ros2 service call /reset std_srvs/srv/Empty
2.1.4 动作(Action)
动作是基于话题和服务的扩展,适用于长时间运行的任务(如机器人导航、机械臂运动),支持任务取消、进度反馈。例如,让小海龟移动到指定位置,可通过动作实现,实时反馈移动进度,也可随时取消任务。
2.1.5 DDS通信机制
DDS(Data Distribution Service)是ROS 2的底层通信协议,负责节点间的数据传输,支持QoS(服务质量)配置,可根据机器人应用场景(如实时性要求、可靠性要求)调整通信参数,确保通信稳定性【1】。初学者无需深入研究DDS底层实现,重点掌握其核心作用即可。
2.2 其他核心概念
2.2.1 消息(Message)
消息是话题和服务的数据载体,定义了数据的格式(如位置消息包含x、y、z坐标,速度消息包含线速度和角速度)。ROS 2提供了大量内置消息类型(如geometry_msgs/msg/Twist、sensor_msgs/msg/LaserScan),也可自定义消息类型。
2.2.2 包(Package)
包是ROS 2的项目组织单元,包含节点、消息、服务、配置文件等,是ROS 2项目的最小发布单元。一个包可以包含多个节点,也可以被其他包依赖。
关键操作命令: # 创建一个新包(格式:ros2 pkg create 包名 --dependencies 依赖包) ros2 pkg create my_first_pkg --dependencies rclcpp rclpy geometry_msgs # 查看所有已安装的包 ros2 pkg list # 查看某个包的详细信息(格式:ros2 pkg info 包名) ros2 pkg info turtlesim
2.2.3 工作空间(Workspace)
工作空间是ROS 2项目的开发目录,用于存放自定义的包、编译文件等,常用的工作空间工具是colcon(ROS 2官方推荐)。典型的工作空间结构如下:
colcon_ws/ # 工作空间根目录 ├── build/ # 编译生成的文件目录 ├── install/ # 安装目录(环境变量指向此处) └── src/ # 源代码目录(存放自定义包)
关键操作命令: # 创建工作空间 mkdir -p ~/colcon_ws/src cd ~/colcon_ws # 编译工作空间(在工作空间根目录执行) colcon build # 加载工作空间环境变量(每次打开终端需执行,或添加到.bashrc) source install/setup.bash
2.2.4 TF坐标变换
TF(Transform)用于描述机器人各个部件之间的坐标关系(如底盘、摄像头、激光雷达的相对位置),是机器人定位、导航、抓取的核心基础【4】。例如,通过TF可以获取摄像头相对于底盘的位置,从而实现障碍物定位。
关键操作命令: # 查看当前所有TF坐标关系 ros2 run tf2_ros tf2_echo base_link camera_link # 可视化TF坐标关系(需启动rviz2) rviz2
第三部分:ROS 2实操实战(核心技能)
本部分通过两个核心实战案例,巩固ROS 2核心概念,掌握节点编写、项目编译、部署的全流程,贴合企业真实开发逻辑【4】。
3.1 实战案例1:自定义节点(C++/Python)
目标:创建一个自定义包,编写发布者和订阅者节点,实现简单的消息通信(发布速度指令,订阅并打印速度数据)。
3.1.1 步骤1:创建工作空间和包
# 创建工作空间(若已创建可跳过) mkdir -p ~/colcon_ws/src cd ~/colcon_ws # 创建自定义包,依赖rclcpp(C++)、rclpy(Python)、geometry_msgs(消息类型) cd src ros2 pkg create custom_node --dependencies rclcpp rclpy geometry_msgs cd ..
3.1.2 步骤2:编写C++发布者节点(publisher.cpp)
在custom_node/src目录下创建publisher.cpp文件,代码如下(注释详细,可直接复制运行):
#include "rclcpp/rclcpp.hpp" #include "geometry_msgs/msg/twist.hpp" // 定义发布者节点类,继承自rclcpp::Node class VelocityPublisherNode : public rclcpp::Node { public: // 构造函数,初始化节点名称和发布者 VelocityPublisherNode() : Node("velocity_publisher_node") { // 创建发布者,话题名为/cmd_vel,消息类型为geometry_msgs::msg::Twist,队列大小为10 publisher_ = this->create_publisher<geometry_msgs::msg::Twist>("/cmd_vel", 10); // 创建定时器,每隔1秒发布一次消息(回调函数为publish_velocity) timer_ = this->create_wall_timer( std::chrono::seconds(1), std::bind(&VelocityPublisherNode::publish_velocity, this) ); RCLCPP_INFO(this->get_logger(), "Velocity publisher node started!"); } private: // 发布速度消息的回调函数 void publish_velocity() { auto msg = geometry_msgs::msg::Twist(); // 设置线速度(x方向前进0.2m/s)和角速度(z方向左转0.5rad/s) msg.linear.x = 0.2; msg.angular.z = 0.5; // 发布消息 publisher_->publish(msg); RCLCPP_INFO(this->get_logger(), "Published velocity: linear.x=%.2f, angular.z=%.2f", msg.linear.x, msg.angular.z); } // 声明发布者和定时器 rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_; }; int main(int argc, char *argv[]) { // 初始化ROS 2节点 rclcpp::init(argc, argv); // 创建发布者节点实例 auto node = std::make_shared<VelocityPublisherNode>(); // 运行节点(阻塞,直到收到退出信号) rclcpp::spin(node); // 关闭ROS 2节点 rclcpp::shutdown(); return 0; }
3.1.3 步骤3:编写C++订阅者节点(subscriber.cpp)
在custom_node/src目录下创建subscriber.cpp文件,代码如下:
#include "rclcpp/rclcpp.hpp" #include "geometry_msgs/msg/twist.hpp" // 定义订阅者节点类,继承自rclcpp::Node class VelocitySubscriberNode : public rclcpp::Node { public: // 构造函数,初始化节点名称和订阅者 VelocitySubscriberNode() : Node("velocity_subscriber_node") { // 创建订阅者,订阅/cmd_vel话题,队列大小为10,回调函数为velocity_callback subscriber_ = this->create_subscription<geometry_msgs::msg::Twist>( "/cmd_vel", 10, std::bind(&VelocitySubscriberNode::velocity_callback, this, std::placeholders::_1) ); RCLCPP_INFO(this->get_logger(), "Velocity subscriber node started!"); } private: // 订阅消息的回调函数(收到消息后执行) void velocity_callback(const geometry_msgs::msg::Twist::SharedPtr msg) const { RCLCPP_INFO(this->get_logger(), "Received velocity: linear.x=%.2f, angular.z=%.2f", msg->linear.x, msg->angular.z); } // 声明订阅者 rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr subscriber_; }; int main(int argc, char *argv[]) { // 初始化ROS 2节点 rclcpp::init(argc, argv); // 创建订阅者节点实例 auto node = std::make_shared<VelocitySubscriberNode>(); // 运行节点 rclcpp::spin(node); // 关闭ROS 2节点 rclcpp::shutdown(); return 0; }
3.1.4 步骤4:修改CMakeLists.txt(编译配置)
打开custom_node/CMakeLists.txt,在文件末尾添加以下内容(用于编译C++节点):
# 编译发布者节点 add_executable(publisher src/publisher.cpp) ament_target_dependencies(publisher rclcpp geometry_msgs) install(TARGETS publisher DESTINATION lib/${PROJECT_NAME} ) # 编译订阅者节点 add_executable(subscriber src/subscriber.cpp) ament_target_dependencies(subscriber rclcpp geometry_msgs) install(TARGETS subscriber DESTINATION lib/${PROJECT_NAME} )
3.1.5 步骤5:编译和运行节点
# 回到工作空间根目录,编译项目 cd ~/colcon_ws colcon build # 加载工作空间环境变量 source install/setup.bash # 打开终端1,运行发布者节点 ros2 run custom_node publisher # 打开终端2,运行订阅者节点 ros2 run custom_node subscriber
若能看到两个终端分别打印发布和接收的速度数据,说明自定义节点编写成功。
3.2 实战案例2:智能避障机器人(企业级入门项目)
目标:基于ROS 2 Humble,编写激光雷达数据订阅节点和避障控制节点,实现机器人前方有障碍物时左转、无障碍物时前进的避障功能【1】。
3.2.1 步骤1:准备依赖包
# 安装激光雷达相关依赖(以rplidar为例) sudo apt install ros-humble-rplidar-ros # 安装导航相关依赖 sudo apt install ros-humble-nav2-core
3.2.2 步骤2:编写避障节点(obstacle_avoidance.cpp)
在custom_node/src目录下创建obstacle_avoidance.cpp文件,代码如下(核心逻辑:订阅激光雷达数据,判断前方0.5m内是否有障碍物,执行对应控制指令):
#include "rclcpp/rclcpp.hpp" #include "sensor_msgs/msg/laser_scan.hpp" #include "geometry_msgs/msg/twist.hpp" #include <algorithm> // 用于获取激光雷达数据的最小值 class ObstacleAvoidanceNode : public rclcpp::Node { public: ObstacleAvoidanceNode() : Node("obstacle_avoidance_node") { // 订阅激光雷达话题(话题名为/scan,不同激光雷达可能不同) scan_sub_ = this->create_subscription<sensor_msgs::msg::LaserScan>( "scan", 10, std::bind(&ObstacleAvoidanceNode::scan_callback, this, std::placeholders::_1)); // 发布速度控制话题(控制机器人运动) cmd_vel_pub_ = this->create_publisher<geometry_msgs::msg::Twist>("/cmd_vel", 10); RCLCPP_INFO(this->get_logger(), "Obstacle avoidance node started!"); } private: // 激光雷达数据回调函数 void scan_callback(const sensor_msgs::msg::LaserScan::SharedPtr msg) { geometry_msgs::msg::Twist cmd_vel; // 获取激光雷达数据中的最小距离(前方障碍物距离) float min_range = *std::min_element(msg->ranges.begin(), msg->ranges.end()); // 避障逻辑:前方0.5m内有障碍物则左转,无障碍物则前进 if (min_range < 0.5) { cmd_vel.angular.z = 0.5; // 左转角速度(正数为左转,负数为右转) cmd_vel.linear.x = 0.0; // 停止前进 RCLCPP_WARN(this->get_logger(), "Obstacle detected! Turning left..."); } else { cmd_vel.linear.x = 0.2; // 前进线速度 cmd_vel.angular.z = 0.0; // 不转向 } // 发布速度控制指令 cmd_vel_pub_->publish(cmd_vel); } // 声明订阅者和发布者 rclcpp::Subscription<sensor_msgs::msg::LaserScan>::SharedPtr scan_sub_; rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr cmd_vel_pub_; }; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); rclcpp::spin(std::make_shared<ObstacleAvoidanceNode>()); rclcpp::shutdown(); return 0; }
3.2.3 步骤3:修改CMakeLists.txt,添加编译配置
# 编译避障节点 add_executable(obstacle_avoidance src/obstacle_avoidance.cpp) ament_target_dependencies(obstacle_avoidance rclcpp geometry_msgs sensor_msgs) install(TARGETS obstacle_avoidance DESTINATION lib/${PROJECT_NAME} )
3.2.4 步骤4:编译和运行
# 编译项目 cd ~/colcon_ws colcon build # 加载环境变量 source install/setup.bash # 终端1:启动激光雷达节点(若没有真实激光雷达,可使用仿真节点) ros2 run rplidar_ros rplidar_composition # 终端2:启动避障节点 ros2 run custom_node obstacle_avoidance # 终端3:查看速度控制指令(可选) ros2 topic echo /cmd_vel
若激光雷达检测到前方有障碍物,机器人会自动左转;无障碍物时正常前进,说明避障功能实现成功。
第四部分:ROS 2进阶提升(企业级技能)
4.1 机器人建模(URDF)
URDF(Unified Robot Description Format)是ROS 2中用于描述机器人结构的文件格式,通过URDF可以定义机器人的连杆、关节、传感器位置等,让ROS 2“认识”机器人的结构【4】。核心步骤:编写URDF文件、通过RViz2可视化机器人模型。
4.2 SLAM建图与Nav2导航
SLAM(即时定位与地图构建)是移动机器人的核心能力,通过激光雷达或摄像头获取环境数据,构建环境地图并实现自身定位;Nav2是ROS 2官方推荐的导航框架,基于SLAM地图实现路径规划、避障导航【4】。关键操作:
# 启动SLAM建图(以GMapping为例) ros2 launch slam_toolbox online_async_launch.py # 启动Nav2导航 ros2 launch nav2_bringup navigation_launch.py
4.3 机械臂控制(MoveIt2)
MoveIt2是ROS 2中用于机械臂控制的框架,支持机械臂运动规划、抓取作业等功能,适用于工业机械臂、人形机器人手臂控制【4】。关键操作:
# 启动MoveIt2控制节点 ros2 launch moveit2_bringup moveit.launch.py
4.4 Docker容器化部署
Docker是操作系统级虚拟化平台,可将ROS 2项目及其依赖打包成容器,实现跨设备、跨环境的快速部署,是企业级开发中常用的部署方式【3】。核心步骤:编写Dockerfile、构建镜像、运行容器。
第五部分:常见问题排查(避坑指南)
5.1 环境变量问题
问题:运行ros2命令时提示“command not found”,或无法找到自定义节点。
解决方法:确认环境变量已加载,执行source /opt/ros/humble/setup.bash(ROS 2 Humble)或source install/setup.bash(自定义工作空间);若需永久生效,将命令添加到~/.bashrc文件。
5.2 节点通信问题
问题:发布者和订阅者无法通信,或话题无数据。
解决方法:使用ros2 doctor工具检查系统设置,排查通信问题【5】:
# 检查ROS 2整体设置 ros2 doctor # 查看详细报告(便于排查复杂问题) ros2 doctor --report # 确认节点、话题是否正常运行 ros2 node list ros2 topic list
5.3 编译失败问题
问题:colcon build编译时提示“依赖缺失”或“语法错误”。
解决方法:检查package.xml和CMakeLists.txt中的依赖配置是否完整;确认C++/Python代码语法正确;安装缺失的依赖包(sudo apt install 依赖包名)。
5.4 可视化工具异常
问题:rviz2无法启动,或无法显示机器人模型、TF坐标。
解决方法:检查显卡驱动是否安装成功;确认ROS 2可视化依赖包已安装(sudo apt install ros-humble-rviz2);在rviz2中正确添加TF、RobotModel等显示项。
第六部分:学习资源与进阶建议
6.1 官方资源
-
ROS 2官方文档:https://docs.ros.org/en/humble/index.html(最权威,包含详细的理论和实操指南);
-
ROS 2 GitHub仓库:https://github.com/ros2(查看源码,了解底层实现);
-
ROS 2官方教程:https://docs.ros.org/en/humble/Tutorials.html(循序渐进,适合初学者)。
6.2 学习建议
-
夯实基础:先掌握Linux命令、C++/Python编程,再深入ROS 2核心概念,避免跳过基础直接实操;
-
多做实操:ROS 2是实战性极强的框架,每天坚持编写节点、调试项目,才能熟练掌握;
-
聚焦项目:从简单的节点通信,逐步过渡到SLAM、导航、机械臂控制等复杂项目,形成“理论-实操-部署”的闭环;
-
关注行业:ROS 2与AI、边缘计算的融合是未来趋势,可深入学习“ROS 2+多模态感知”,提升自身竞争力。
6.3 总结
ROS 2的学习核心是“理论结合实操”,从环境搭建到核心概念,再到项目实战,逐步构建完整的知识体系。随着机器人产业向智能化、国产化升级,ROS 2工程师缺口持续扩大,具备全流程开发能力与场景化落地经验的开发者,将在工业自动化、智能服务等赛道拥有广阔职业空间【1】。坚持学习、多做实战,就能逐步掌握ROS 2开发技能,实现从初学者到专业开发者的跨越。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)