5天ROS2快速上手学习路径(有经验开发人员版)
核心目标
5天内掌握ROS2核心框架、通信机制、工具链,能独立构建机器人节点、编写通信逻辑、完成仿真项目(以两轮差速机器人为例)。
第1天:ROS2基础与环境搭建(目标:打通开发环境,理解核心概念)
上午:环境搭建与Linux基础
Ubuntu与ROS2安装(1.5h)
安装Ubuntu 22.04 LTS(推荐虚拟机或双系统,参考文档“在虚拟机中安装Ubuntu”)。用小鱼一键脚本安装ROS2 Humble:wget http://fishros.com/install -O fishros && . fishros,选择“1-一键安装ROS”→“Humble版本”→“桌面版”。验证安装:终端输入ros2,能显示命令列表即成功。
Linux必备指令(1h)
掌握ls/cd/mkdir/rm/sudo/apt等基础指令,重点练习rosdep配置(小鱼脚本选“3-一键配置rosdep”)。
下午:ROS2核心概念与工具链
核心概念理解(1.5h)
理解节点(Node)、功能包(Package)、工作空间(Workspace)定义:节点是最小功能单元,功能包包含节点代码,工作空间是功能包的容器。掌握ROS2与ROS1的核心差异:去中心化(无Master)、中间件DDS、支持多平台。
CLI工具实战(1.5h)
节点操作:ros2 node list(查看节点)、ros2 node info <节点名>(查看节点信息)。功能包操作:ros2 pkg create(创建功能包,如ros2 pkg create demo_node --build-type ament_cmake --dependencies rclcpp)、colcon build(编译工作空间)。实战:运行turtlesim示例,ros2 run turtlesim turtlesim_node(启动乌龟仿真)、ros2 run turtlesim turtle_teleop_key(键盘控制),直观理解节点通信。
第2天:ROS2通信机制(目标:掌握话题、服务,能写基础通信节点)
上午:话题通信(单向高频数据传输)
话题原理与工具(1h)
理解发布-订阅模型:1对多、多对多通信,适用于传感器数据(如雷达、IMU)。CLI工具:ros2 topic list(查看话题)、ros2 topic echo <话题名>(打印话题数据)、ros2 topic pub <话题名> <消息类型> <数据>(手动发布话题)。
C++/Python写话题节点(2h)
C++(rclcpp):创建“发布者-订阅者”节点,示例:发布std_msgs/msg/String话题,订阅者接收并打印(参考文档“话题之RCLCPP实现”)。Python(rclpy):同上,用rclpy编写,重点关注create_publisher/create_subscription API(参考文档“话题之RCLPY实现”)。编译运行:colcon build --packages-select demo_node→source install/setup.bash→ros2 run demo_node <节点名>,验证通信。
下午:服务通信(双向请求-响应)
服务原理与工具(1h)
理解客户端-服务端模型:1对1通信,适用于需要反馈的场景(如控制机器人移动到目标点后返回结果)。CLI工具:ros2 service list(查看服务)、ros2 service call <服务名> <接口类型> <请求数据>(手动调用服务)。
自定义服务接口与节点开发(2h)
自定义接口:创建srv文件(如MoveRobot.srv,定义float32 distance --- float32 pose),配置CMakeLists.txt和package.xml生成接口(参考文档“自定义接口RCLCPP实战”)。写服务端/客户端:服务端接收“移动距离”请求,模拟机器人移动并返回“当前位置”;客户端发送请求并打印结果。实战:运行服务端和客户端,验证请求-响应逻辑。
第3天:ROS2进阶通信与工具(目标:掌握参数、动作,熟悉RVIZ2/Gazebo)
上午:参数与动作通信
参数通信(1h)
理解参数:节点配置项(键值对),适用于动态调整参数(如日志级别、传感器频率)。CLI工具:ros2 param list(查看参数)、ros2 param set <节点名> <参数名> <值>(动态改参数)、ros2 param dump <节点名>(保存参数)。实战:在昨天的节点中添加参数(如“移动速度”),通过declare_parameter声明参数,动态修改并生效。
动作通信(1.5h)
理解动作:目标-反馈-结果模型,适用于长耗时任务(如机器人导航、机械臂运动),支持取消任务。实战:用turtlesim的/turtle1/rotate_absolute动作,ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}" --feedback,观察目标、反馈、结果。
下午:可视化与仿真工具
RVIZ2(1h)
理解RVIZ2:数据可视化工具,支持显示TF、点云、机器人模型等。实战:加载turtlesim的TF数据,添加“TF”组件,查看乌龟坐标系变换;添加“Image”组件,显示相机图像(若有相机节点)。
Gazebo基础(1.5h)
理解Gazebo:物理仿真工具,生成虚拟环境和机器人模型,提供传感器数据(参考文档“兼容仿真工具-Gazebo”)。实战:运行ROS2官方Gazebo示例,ros2 launch gazebo_plugins gazebo_ros_diff_drive_demo.launch.py,查看两轮差速机器人仿真,用ros2 topic pub发布/demo/cmd_demo话题控制机器人移动。
第4天:机器人建模与坐标变换(目标:会用URDF/Xacro建模,理解TF2)
上午:URDF机器人建模
URDF基础(1.5h)
理解URDF:统一机器人描述语言,定义机器人连杆(link)、关节(joint)、可视化属性(参考文档“URDF统一机器人建模语言”)。实战:编写两轮差速机器人URDF,包含“base_link”(底座)、“left_wheel”/“right_wheel”(车轮),定义关节类型(固定关节、旋转关节)。
RVIZ2可视化URDF(1.5h)
编写launch文件,启动RVIZ2并加载URDF模型(参考文档“RVIZ2可视化URDF模型”)。实战:在RVIZ2中添加“RobotModel”组件,选择URDF文件,查看机器人模型;添加“JointState”组件,控制车轮关节转动。
下午:TF2坐标变换
TF2原理(1h)
理解TF2:管理机器人各坐标系(如base_link、wheel_link、camera_link)的变换关系,支持坐标转换(参考文档“tf2介绍”)。CLI工具:ros2 run tf2_ros tf2_echo <父坐标系> <子坐标系>(查看两坐标系变换)、ros2 run rviz2 rviz2(可视化TF树)。
TF2发布与应用(2h)
编写TF发布节点:发布“base_link”→“left_wheel”“right_wheel”的坐标变换(固定变换)。实战:在Gazebo中加载URDF模型,结合TF2发布坐标系,用RVIZ2查看完整TF树;编写节点,通过TF2 API将“车轮坐标系”的点转换到“底座坐标系”。
第5天:综合项目实战(目标:搭建两轮差速机器人仿真系统)
上午:项目框架搭建
项目需求(0.5h)
目标:搭建两轮差速机器人仿真系统,包含“键盘控制节点”“运动控制节点”“Gazebo仿真节点”,实现“键盘发送速度指令→运动控制节点解析→Gazebo机器人移动”。
功能包与节点划分(1.5h)
创建项目工作空间diff_drive_ws,创建3个功能包:
diff_drive_teleop:键盘控制节点,发布geometry_msgs/msg/Twist话题(线速度、角速度)。diff_drive_control:运动控制节点,订阅Twist话题,解析为左右轮速度(差速运动学正解),发布joint_state话题控制车轮转动。diff_drive_gazebo:Gazebo仿真节点,加载URDF模型和仿真环境,接收joint_state话题驱动机器人。
下午:编码与仿真运行
核心节点编码(2h)
diff_drive_teleop:参考turtle_teleop_key,修改为发布Twist话题。diff_drive_control:实现差速运动学正解(已知线速度v、角速度ω,计算左轮速度v_l = (2v - ωL)/2r,右轮速度v_r = (2v + ωL)/2r,L为轮距,r为轮半径)。diff_drive_gazebo:编写launch文件,集成Gazebo启动、URDF加载、TF发布(参考文档“Gazebo仿真插件之两轮差速”)。
系统集成与测试(1h)
编译工作空间:colcon build→source install/setup.bash。启动系统:ros2 launch diff_drive_gazebo diff_drive.launch.py。测试:运行diff_drive_teleop节点,用键盘控制机器人前进、转弯,观察Gazebo中机器人运动,验证系统功能。
关键参考文档
环境与基础:文档“1.ROS2介绍与安装”“2.ROS2第一个节点”。通信机制:文档“3.ROS2节点通信之话题与服务”“4.ROS2通信之参数与动作”。建模与仿真:文档“8.机器人建模”“9.机器人仿真”“tf2介绍”。代码模板:文档末尾“ROS2常用代码模板”(rclcpp/rclpy节点、参数、TF2代码)。