【xmb】内部文档148344596
这里写自定义目录标题
- 摘要
- 引言
- 系统设计与实现
- 关键技术
- 地面线条识别与透视变换
- 二维码识别与分段导航
- 运动控制与PID调参
- 实验验证
- 总结与展望
摘要
本报告介绍了我们团队在2025年小米杯智能系统创新设计赛中的参赛项目——一种自主导航机器人系统的设计与实现。该系统基于ROS2框架,将视觉感知与导航控制相结合,实现了自主环境感知和路径规划。我们采用了分段导航策略,以二维码为阶段性定位标志,结合地面线条识别实现全局路径的逐段规划与执行。在视觉方面,使用摄像头进行赛道线检测与透视变换,获取精确的线路信息;通过二维码识别提供关键路标和定位校正。控制方面,设计了PID控制器并多次调参,以确保机器人运动稳定准确。我们搭建了Gazebo仿真环境对系统进行测试和验证,结果表明系统能够可靠地识别视觉特征并完成预定导航任务。本文将详细阐述系统的设计架构、关键技术实现、实验结果以及未来改进方向。
引言
2025年小米杯智能系统创新设计赛旨在促进机器人自主智能系统的研发与创新。参赛项目通常涉及机器人在未知或半结构化环境中的自主导航和任务执行。我们团队的参赛目标是研制一台能够在模拟仓储或室内环境中,自主导航并完成指定任务的移动机器人。本报告所述系统以轮式移动机器人为平台,配备摄像头等传感器,能够识别地面引导线和二维码标志,实现在环境中的定位、路径规划和运动控制。
自主移动机器人导航是机器人技术的重要研究方向,包括环境感知、定位、路径规划和运动控制等模块。传统导航技术如里程计推算和惯性导航存在误差累积问题,而视觉感知(例如地面线条和二维码)可为机器人提供重要的绝对位姿参考,从而提高导航精度。ROS2作为新一代机器人操作系统,为我们提供了良好的软件架构基础,使我们能够将各功能模块解耦成节点,通过话题(topic)和服务(service)进行数据交互,实现模块化设计和并行开发。Gazebo仿真平台则为算法验证和调试提供了安全高效的测试环境。本文接下来将介绍系统整体设计与实现,并着重讨论视觉感知、分段导航、路径规划、控制调优等关键技术细节。
系统设计与实现
本项目系统由感知模块、决策与规划模块、控制模块和执行机构四部分组成,整体架构如图1所示。感知模块利用摄像头获取环境信息,包括地面导引线检测和二维码识别;决策与规划模块结合感知信息进行分段导航决策和路径规划;控制模块根据规划输出通过PID算法计算控制指令;执行机构则包括机器人底盘、电机等,接收控制指令驱动机器人运动,并通过里程计反馈自身运动。各模块通过ROS2节点实现,主要数据流和交互如下:
flowchart TBsubgraph 传感与感知Camera(摄像头)Odometry(里程计)Camera --> |图像帧| Perception[视觉感知模块]endsubgraph 决策与规划Perception --> |线条检测结果/二维码信息| Planning[导航规划模块]Odometry --> |位置估计| Planningendsubgraph 控制与执行Planning --> |目标速度、转向| Control[控制模块(PID)]Control --> |PWM信号| Actuator[执行机构]Actuator --> |轮速反馈| Odometryend
图1:自主导航机器人系统架构。摄像头提供图像输入,视觉感知模块输出线条识别和二维码识别结果;导航规划模块结合视觉输入和里程计进行路径规划;控制模块通过PID闭环控制电机,实现对机器人的速度和转向控制。
在系统实现方面,我们首先构建了ROS2软件框架。使用ROS2 Foxy版本,创建了多个功能包(package),包括perception
(感知)、navigation
(导航规划)和control
(控制)等。各包内实现相应功能节点,例如视觉感知节点订阅摄像头话题并发布处理结果,控制节点订阅规划指令并发布电机控制指令。模块之间通过ROS2的Publish/Subscribe机制进行通信,这种架构使各模块可以独立开发、调试,然后集成。
我们利用Gazebo仿真构建了比赛环境模型,包括地面路线、障碍物和二维码标志的位置,将机器人URDF模型导入仿真,实现真实物理环境下的测试。Gazebo仿真提供了与ROS2集成的传感器插件,例如摄像头插件可在仿真中生成图像流供视觉算法使用,里程计插件模拟轮式编码器输出。在代码集成过程中,我们注重模块接口的一致性和坐标系(transform)的正确转换,例如确保摄像头坐标系到机器人底盘坐标系的透视变换精度,以使感知结果能够正确用于路径规划。
关键技术
地面线条识别与透视变换
线条识别是本系统视觉感知的核心任务之一。比赛环境通常在地面贴有显著颜色的引导线(赛道线)指示机器人行进路径。我们使用OpenCV对摄像头图像进行预处理和特征提取,主要步骤如下:
- 将图像转换为HSV颜色空间,并通过颜色阈值分割出地面线条区域;
- 采用形态学操作去除噪声并连接断裂的线段;
- 使用霍夫变换(Hough Transform)提取线条的方向和位置。
通过这些步骤,系统能够实时获得机器人前方赛道线相对于摄像头视野的偏移和角度信息。例如,检测得到赛道线偏离图像中心 d x dx dx个像素、倾斜角度 a l p h a \\alpha alpha,这些数据将提供给导航决策模块用于调整航向。
由于摄像头安装位置和角度的关系,直接使用图像坐标计算线条实际偏移会存在透视畸变。为此,我们在线条识别处理中加入了透视变换(Perspective Transform)。通过标定(camera calibration),获取摄像头内参和外参,计算地面平面的单应矩阵 H H H,将原始图像投影为俯视图(bird-eye view)。透视变换公式如下:
[ u ′ v ′ 1 ] = 1 Z H [ u v 1 ] , \begin{bmatrix} u' \\ v' \\ 1 \end{bmatrix} = \frac{1}{Z} H \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}, u′v′1 =Z1H uv1 ,
其中 ( u , v ) (u,v) (u,v)为原始图像像素坐标, ( u ′ , v ′ ) (u',v') (u′,v′)为透视变换后的俯视图坐标, H H H为 3 × 3 3\times3 3×3单应矩阵, Z Z Z为归一化因子。经过透视校正,地面线条在俯视图中呈现出接近平行于图像垂直轴的直线,使我们能够更准确地计算线条相对于机器人的位置偏差和角度偏差。该偏差信息记作 ( D e l t a x , D e l t a t h e t a ) (\\Delta x, \\Delta \\theta) (Deltax,Deltatheta),表示机器人当前相对赛道中心线的横向偏移和朝向偏差,将用于后续控制修正。
二维码识别与分段导航
二维码识别提供了关键的全局定位和导航阶段切换依据。比赛区域布置了若干二维码标志,起到了里程碑的作用:每当机器人抵达某一区域时,通过识别地面或墙壁上的二维码,获取当前位置的标识或下一步指令。例如,二维码可能编码了当前位置ID或下一目标点的坐标信息。我们在视觉感知模块中集成了OpenCV的QRCodeDetector,对摄像头图像进行二维码检测与解码。一旦检测到二维码并成功解码,系统将解析出其中包含的导航指令或位置标记,然后发送给导航规划模块。
我们采用分段导航策略将整体任务划分为若干阶段(segment):机器人依次从起点出发,沿第一段赛道线行驶至第一个二维码位置;读取二维码获取下一个目标或确认已到达阶段终点;然后根据需要调整导航策略或切换路径规划算法,进入下一段导航。如此循环,直到完成所有段的导航任务。分段导航有效地将长距离复杂路径规划问题转化为一系列局部导航问题,每段之间利用二维码进行误差校正和状态重置,从而降低里程计累计误差对全局导航的影响。当检测并识别二维码后,我们会将机器人当前位置根据二维码信息进行修正,例如将机器人在地图中的坐标重置为预先标定的该二维码所在坐标,以补偿前一段行驶中的里程计漂移。通过这种方式,即使里程计(Odometry)在长距离行驶后产生累计误差,我们的导航仍能在每段起点得到纠正。里程计估计公式如下,用于在每个控制周期更新机器人位姿:
Δ s = r ( Δ ϕ R + Δ ϕ L ) 2 , Δ θ = r ( Δ ϕ R − Δ ϕ L ) L , \Delta s = \frac{r(\Delta\phi_R + \Delta\phi_L)}{2}, \qquad \Delta\theta = \frac{r(\Delta\phi_R - \Delta\phi_L)}{L}, Δs=2r(ΔϕR+ΔϕL),Δθ=Lr(ΔϕR−ΔϕL),
x n e w = x o l d + Δ s cos θ o l d , y n e w = y o l d + Δ s sin θ o l d , θ n e w = θ o l d + Δ θ , x_{new} = x_{old} + \Delta s \cos\theta_{old}, \qquad y_{new} = y_{old} + \Delta s \sin\theta_{old}, \qquad \theta_{new} = \theta_{old} + \Delta\theta, xnew=xold+Δscosθold,ynew=yold+Δssinθold,θnew=θold+Δθ,
其中 r r r为轮子半径, L L L为两轮轴距, D e l t a p h i R \\Delta\\phi_R DeltaphiR和 D e l t a p h i L \\Delta\\phi_L DeltaphiL分别为左右轮增量转角。该里程计推进模型逐周期累积运动估计误差。如果不进行校正,误差会随运行时间线性累积,限制机器人长距离导航的准确性。例如,假设机器人每米运动存在1%的位置误差,那么行驶10米后位置误差可能接近0.1米;再假如每次运动存在一个微小角度误差 d e l t a t h e t a \\delta\\theta deltatheta,则前进距离 L L L后横向漂移约为 L s i n d e l t a t h e t a a p p r o x L d e l t a t h e t a L\\sin\\delta\\theta \\approx L\\delta\\theta LsindeltathetaapproxLdeltatheta。因此,引入二维码等绝对信息能够在分段导航中有效约束误差累积,提升全局导航精度。
在路径规划方面,当进入新的导航段时,系统根据当前定位和目标位置进行路径规划。如果比赛环境地图已知,我们可以采用A*或Dijkstra等算法在栅格地图上计算最优路径;若环境简单且路径预定义,则可以使用预设路径或规则驱动。我们的实现综合考虑了实时性和可靠性,采用了相对简单但鲁棒的局部规划方案:机器人主要沿地面引导线前进,只有在需要偏离引导线(例如绕过障碍)或直线距离导航时才调用全局路径规划算法。一旦规划出路径(通常表现为一系列航路点或者目标轨迹曲线),导航模块会逐步向控制模块发送局部目标点或速度指令。整个流程通过状态机管理:例如状态FOLLOW_LINE
用于沿线前进,状态DETECT_QR
用于减速并识别二维码,状态ADJUST_HEADING
用于朝向下一个目标的角度调整等。这样的设计保证了导航流程清晰明确,并且便于在复杂情况下进行扩展。
运动控制与PID调参
运动控制模块负责将导航决策转化为具体的轮子转速和转向动作。本项目机器人为差动驱动(differential drive)底盘,通过调整左右轮转速差实现转弯。我们为左右轮电机各设计了速度闭环控制器,并在高层使用一个PID控制器来基于视觉误差调整转向角速度。控制模块订阅导航模块输出的目标速度 v v v和目标航向角误差 D e l t a t h e t a \\Delta\\theta Deltatheta(或直接给定前轮转角等,根据底盘类型),通过PID控制律计算左右轮速度命令。
PID控制器根据偏差 e ( t ) e(t) e(t)计算控制量 u ( t ) u(t) u(t),其连续形式为:
u ( t ) = K P e ( t ) + K I ∫ 0 t e ( τ ) d τ + K D d e ( t ) d t , u(t) = K_P e(t) + K_I \int_{0}^{t} e(\tau)d\tau + K_D \frac{de(t)}{dt}, u(t)=KPe(t)+KI∫0te(τ)dτ+KDdtde(t),
其中 K P K_P KP、 K I K_I KI、 K D K_D KD分别为比例、积分、微分增益参数。对于本系统,偏差 e ( t ) e(t) e(t)可以定义为机器人相对引导线的横向偏移或航向角偏差。当 e ( t ) e(t) e(t)为航向角偏差时,控制输出 u ( t ) u(t) u(t)即为角速度校正 o m e g a \\omega omega;当 e ( t ) e(t) e(t)为横向位置偏差时,控制输出可转换为差速转向量。我们对PID参数进行了多次调参实验。在Gazebo仿真中,通过不断调整 K P K_P KP、 K I K_I KI、 K D K_D KD,使机器人在不同场景下均能平稳跟随赛道线且误差收敛。例如, K P K_P KP过小会导致转向反应迟缓、跟踪误差偏大,而 K P K_P KP过大会引起系统振荡;适当的 K I K_I KI可消除稳态误差,但过大会导致超调; K D K_D KD有助于抑制快速变化引起的超调,提高系统稳定性。经过调试,我们找到了一组较优参数,使机器人既能快速响应路径偏差,又不会在接近目标轨迹时产生明显超调。
在运动控制中,我们还考虑了速度规划和安全机制。导航模块输出的目标速度 v v v会根据环境情况进行调整,例如在直线路段和无障碍物时尽量提高速度以节约时间,在接近二维码或转弯时降低速度以保证识别准确和转向平稳。此外,我们引入了基本的避障策略:利用可能的超声波或深度相机数据(若有)来检测前方障碍物距离,在控制上限速或紧急制动,以防碰撞。在当前实现中,避障更多地依赖于预先规划好无障碍路径以及视觉引导,尚未集成复杂的动态避障算法,但预留了相应接口便于未来扩展。
实验验证
我们在仿真和实际环境中对整个系统进行了测试和验证。首先,在Gazebo仿真环境中构建了比赛场地的数字模型,包括带有分岔的地面引导线、若干模拟障碍物以及预定位置放置的二维码标志。通过ROS2,将摄像头和里程计插件的数据发布给我们的系统各节点,让仿真机器人在虚拟场景中执行导航任务。在仿真测试中,机器人能够较准确地沿引导线行驶,并在接近二维码标志时自动减速完成识别。在一次完整的仿真导航实验中,机器人依次经过三个导航段,到达了最终目的地。实验过程中观察到:视觉模块在理想光照条件下对赛道线几乎不会漏检;二维码识别在近距离(50厘米以内)十分稳定可靠,最远在约1.5米处仍可成功识别。在整段导航过程中,每段起点通过二维码校正后,机器人相对于理想路线的累计偏移均保持在几厘米以内,证明了分段导航结合视觉校正的有效性。
除了仿真,我们团队还在实际环境中进行了部分功能测试。例如,将摄像头安装在机器人上,在有实线标记的地面进行线条识别实验,验证算法在不同光照条件下的鲁棒性。实测显示,经过透视变换处理的图像使线条识别在阳光和阴影变化的环境下仍能可靠提取关键特征。对于PID控制,我们在实体机器人上以低速试跑,调整参数以达到类似仿真中的平稳跟踪效果。由于实际摩擦和电机特性差异,需要略微降低 K P K_P KP并提高 K D K_D KD来消除振荡。经过调试,机器人在真实地面上能够保持在赛道线附近行驶,偏差在允许范围内,没有出现明显偏离轨迹或失控。二维码识别在实际测试中同样表现良好,但需要保证摄像头对准二维码且有足够分辨率,因此我们在导航控制上进一步约束了机器人在接近二维码时的角度和距离,以确保相机视野能完整覆盖二维码图案。
系统集成测试方面,我们验证了多模块协同工作的可靠性。通过ROS2的ros2 bag
记录仿真运行数据,分析各话题消息的时延与正确性。结果表明感知、规划、控制模块之间的数据传输顺畅,实时性满足要求(整体控制闭环频率约为20Hz)。在长时间运行测试中(仿真连续运行30分钟,相当于多次完整任务),系统保持稳定,没有出现内存泄漏或节点崩溃等问题。代码模块整合后,我们也进行了压力测试,比如在仿真中引入人为干扰(突然在路径前添加障碍物、遮挡摄像头视野等)以测试系统鲁棒性。虽然当前避障能力有限,但机器人可以在检测到异常情况时及时停机并发出警报,为操作者介入提供时机。这说明我们的系统在可靠性和安全性方面已经达到了基本要求,能够应对一定程度的不确定环境变化。
总结与展望
本报告介绍了2025年小米杯智能系统创新设计赛中我们团队开发的自主导航机器人系统。从总体架构设计、视觉感知、导航策略到控制实现,我们详细阐述了系统各模块的功能和关键技术手段。通过引入地面线条识别和二维码分段导航,我们有效地解决了纯里程计导航误差累积的问题,实现了较高精度的长程导航;通过ROS2框架和Gazebo仿真,我们高效地集成和验证了系统的功能,各模块协同工作良好。实验结果证明,该系统能够可靠地完成预定的导航任务,在仿真和实际测试中均取得了令人满意的效果。
尽管如此,本项目仍有进一步改进和扩展的空间。在未来的工作中,我们计划引入更先进的定位与建图算法(如视觉SLAM),以使机器人在无引导线或更复杂环境下也能构建地图并自主导航;优化路径规划算法,引入动态避障功能,使机器人能够处理移动障碍物和临时变化的环境;同时,我们考虑利用深度学习方法增强视觉感知模块的鲁棒性,例如采用卷积神经网络提高线条和标志识别的抗干扰能力。系统在ROS2上的实现也为今后移植到实际机器人平台打下了基础,我们将针对实际硬件(传感器噪声、电机模型误差等)进行更细致的参数标定和性能优化。通过以上改进,我们期望机器人能够在更复杂多变的现实场景中执行更加多样的任务,提升自主智能水平。
最后,通过本次比赛项目,我们团队不仅掌握了机器人自主导航系统的开发流程和方法,也在团队协作、模块化设计和系统集成方面积累了宝贵经验。这些经验将为我们后续从事相关科研和开发打下坚实基础。