项目概述
hello! 大家好!这里是DuRuofu,欢迎来到我的新系列教程(或者学习项目记录)? 带你从零搭建一个ROS小车。
在开始这个项目之前,我们需要有一定的ROS2基础,这里推荐先看动手学ROS2|ROS2基础入门到实践教程打打基础,再进入项目实战。
在后续的记录中,关于ROS2的基本概念,比如节点,功能包,消息通信这些内容就不做过多解释了,在项目中更重要的是整体架构和实现思路,而不是零碎的基础语法。
一、这个项目是干什么的?
这是一个基于ROS2的智能采花机器人项目,说白了就是造一个能自己跑、自己看、自己抓的小车。这个小车可以在温室里自主移动,找到花朵并用机械臂把它们采摘下来。
主要实现下面这些基本功能:
- 自动识别和定位花朵。
- 自主移动至目标花朵前方。
- 使用机械臂完成简单的夹取操作。
- 提供基础的路径规划和避障能力,确保在温室复杂环境下稳定运行。
- 支持后续扩展(如多花目标识别、采摘规划、分拣等)。
整体外观结构类似于下图展示效果:

整体组成框架如下图:

我希望整个项目从最基础的仿真开始,一步步搭建出一个完整的机器人系统。不是那种买现成零件拼装的项目,而是从底层硬件设计到上层算法都尽量自己动手实现。
二、项目由什么组成?
这个机器人系统主要包含以下几个核心部分:
移动底盘系统
- 四轮差速底盘:采用4个520直流减速电机驱动,每个轮子都有编码器反馈
- 自研控制板:基于ESP32设计的电机驱动板,集成H桥驱动、电流采样、过流保护
- 闭环控制:PID算法实现精确的速度控制和里程计计算
感知系统
- 激光雷达:用于SLAM建图和导航避障
- RGB摄像头:实现花朵检测和视觉定位
- IMU传感器:提供姿态信息,与里程计融合提高定位精度
机械臂系统
- 多自由度机械臂:4-6自由度舵机机械臂,末端配备夹爪
- 视觉引导抓取:结合视觉识别结果,实现精准的花朵抓取
- ROS2集成:通过MoveIt框架实现运动规划和控制
智能算法
- SLAM建图:使用SLAM算法构建环境地图
- 自主导航:基于Nav2框架实现路径规划和避障
- 目标检测:使用YOLO模型进行花朵识别和定位
- 多传感器融合:融合激光雷达、IMU、里程计等多种传感器数据
系统架构
- 上位机:树莓派/Jetson运行ROS2系统,负责高级决策和算法处理
- 下位机:ESP32负责底层电机控制和传感器数据采集,机械臂控制
- 通信系统:串口实现上下位机通信
三、为什么要写这个教程(项目记录)?
写这个教程主要有几个目的:
记录实践过程:这个项目涉及的技术面很广,从硬件设计到软件算法,从仿真到实物调试。把整个过程详细记录下来,一方面是为了自己以后回顾,另一方面也能帮助遇到类似问题的朋友。
分享技术经验:ROS2的学习曲线还是比较陡峭的,特别是涉及到硬件集成的时候。希望通过这个完整的项目案例,能让大家更好地理解ROS2在实际机器人系统中的应用。
加深理解:教学相长嘛,在写教程的过程中,我也会重新梳理和思考整个系统的设计思路。把复杂的概念用简单的话讲清楚,这本身就是一个很好的学习过程。
开源精神:机器人技术发展需要大家一起努力,把自己的实践经验分享出来,也希望能得到大家的反馈和改进建议。
四、项目实施计划
整个项目分为5个主要阶段,循序渐进地完成:
| 阶段 | 名称 | 核心目标 |
|---|---|---|
| I | 仿真环境搭建 | 完整跑通ROS差速车仿真 |
| II | 底盘控制板设计与驱动 | 自研四驱控制板实现真实运动 |
| III | 机械臂控制板与机械臂仿真 | 舵机控制与MoveIt集成 |
| IV | 摄像头识别与定位 | 花朵检测 + 坐标系标定 |
| V | 整机协同与任务执行 | 自动导航到目标 → 识别花朵 → 抓取操作 |
每个阶段都会有详细的理论讲解、代码实现和调试过程,确保大家能够跟着一步步完成整个项目。
五、项目代码
项目代码会在每个阶段完成后逐步开源,代码仓库链接如下:
