ROS2 面试总结

一、ROS2 核心一句话总结

ROS2 是基于 DDS 去中心化、支持实时、分布式、跨平台的机器人开发框架。相比 ROS1 去掉了 Master 单点故障,通过 QoS、执行器调度、生命周期节点、零拷贝、安全加密,适配工业机器人、自动驾驶、嵌入式实时场景。

二、ROS1 与 ROS2 最大 6 个区别(必问)

  1. 通信架构:ROS1 中心化 Master;ROS2 去中心化 DDS,无单点故障

  2. 实时性:ROS1 无实时保障;ROS2 支持硬实时、QoS、线程调度

  3. 回调调度:ROS1 单线程串行、容易阻塞;ROS2 Executor 多线程并行调度

  4. 编译构建:ROS1 catkin;ROS2 ament+colcon,并行编译、更规范

  5. 工程能力:ROS2 支持生命周期节点、组件化、参数动态更新、安全加密

  6. 跨平台:ROS2 原生支持 Windows/嵌入式/RTOS,ROS1 仅限 Linux

三、DDS 与 RMW(核心底层,面试高频)

1. DDS 作用

ROS2 底层通信协议,替代 Master,实现分布式、可靠、可配置实时通信

三大特点:去中心化、QoS 质量策略、实时性强

2. 两大 QoS 必考策略

  • RELIABLE 可靠传输:丢包重传,用于控制指令、参数、服务

  • BEST_EFFORT 尽力传输:不重传,用于相机、激光雷达等高频大数据

3. RMW 中间件层

ROS2 做了一层抽象,上层代码不绑定具体 DDS。可无缝切换 FastDDS、CycloneDDS、Connext,业务代码无需改动。

四、ROS2 三种通信模型(必考区别)

1. Pub/Sub 发布订阅

异步、一对多、数据流场景。适用:传感器数据、IMU、图像、点云。

2. Service 服务

同步、一问一答、单次交互。适用:设备查询、开关、单次指令。

3. Action 动作

异步长耗时任务,支持进度反馈、中途取消、状态查询。适用:导航、建图、机械臂运动、路径跟踪。

结构:Goal 目标 → Feedback 实时反馈 → Result 最终结果

五、Executor 执行器(ROS2 调度核心,面试重灾区)

解决 ROS1 单回调阻塞全局的问题。

  • SingleThreadedExecutor:简单稳定,小型嵌入式

  • MultiThreadedExecutor:多线程并行,多传感器并发场景

  • StaticSingleThreadedExecutor:静态调度,实时性最高,工业控制首选

核心原理:IO 等待与业务回调分离,慢回调不会卡死所有话题。

六、生命周期节点 Lifecycle(工业机器人必问)

标准化状态机,解决节点乱启动、资源抢占、启动时序问题。

状态流程:未配置 → 非激活 → 激活 → 终结

优势:可控启停、资源预分配、适合安全关键设备(机械臂、自动驾驶)。

七、参数系统

去中心化参数服务,支持:

  • 运行时动态修改参数

  • 参数回调监听

  • YAML 批量加载

  • 区分全局/私有参数

八、时间系统(仿真+实机核心)

  • 系统时间:物理机真实时间

  • 仿真时间 /clock:Gazebo/Isaac 统一授时,所有节点时间统一,支持倍速仿真、回放

九、组件化节点 Component

将节点编译为动态库,多个节点可跑在同一个进程内,减少进程间通信开销、节省嵌入式资源

两种模式:独立进程、共享容器进程。

十、Domain 域隔离

通过 ROS_DOMAIN_ID 实现局域网多机器人隔离,不同域节点互相发现不了,避免串扰。

十一、ROS2 实时性优化手段(项目面试加分)

  1. 配置 DDS QoS(截止时间、可靠性、租期)

  2. 使用静态执行器、绑定线程优先级

  3. 生命周期节点预分配资源,避免运行时内存分配

  4. 点云/图像开启 zero_copy 零拷贝传输

  5. RT-Linux 内核优化、锁内存、提升进程优先级

十二、高频面试问答(直接背答案)

Q1:ROS2 为什么比 ROS1 实时?

底层 DDS 支持实时 QoS;采用多线程执行器调度,无单点 Master;支持生命周期节点资源预分配,配合实时系统可实现硬实时。

Q2:Topic、Service、Action 怎么选?

高频数据流用 Topic;单次查询/指令用 Service;长时间、需要反馈、可取消的任务用 Action。

Q3:DDS QoS 怎么配置?项目怎么用?

传感器图像激光用 BEST_EFFORT 降低延迟;控制指令、导航、参数使用 RELIABLE 保证可靠。

Q4:Executor 作用是什么?

Executor 是 ROS2 回调调度器,核心作用是统一管理所有话题、服务、定时器的回调函数,分离 IO 监听与业务执行。解决了 ROS1 单线程回调阻塞全局的问题,支持多线程并行调度,大幅提升系统并发与实时性。

Q5:行为树是 ROS2 自带技术吗?(高频误区)

标准答案:不是 ROS2 原生核心技术,是机器人通用决策算法,ROS2 生态深度集成

  1. 归属本质:行为树(Behavior Tree)是独立的任务调度/决策逻辑模型,和ROS2底层通信、节点机制无关,不属于ROS2内核自带功能。

  2. ROS2 生态适配:ROS2 Nav2 导航栈默认集成行为树(BT-Navigator),替代ROS1的状态机,用于机器人自主导航、避障、任务重试、故障恢复等复杂逻辑,是ROS2商用机器人主流决策方案。

  3. 常用开源库:ROS2 项目标配 BehaviorTree.CPP,搭配可视化工具 Groot 调试行为树。

  4. 核心优势(面试加分):相比传统状态机,行为树可复用、可嵌套、逻辑清晰、支持中断与恢复,适合复杂机器人自主任务编排。

Q6:ROS2 自带 DDS 吗?

标准答案:ROS2 原生默认自带 DDS,无需额外安装

  1. 核心配置:ROS2 完整版默认内置 Fast DDS 作为默认通信中间件,开箱即用,是ROS2去中心化通信的底层核心。

  2. 解耦特性:依托RMW中间件抽象层,ROS2不绑定单一DDS,可无缝切换 Cyclone DDS、RTI Connext DDS 等主流实现,业务代码无需修改。

  3. 版本对比:ROS1 无DDS,依赖中心化Master通信;ROS2 原生集成DDS,是两者核心差异之一。

  4. 场景补充:常规桌面安装版本默认预装,仅极简编译版本可能不含,工业、开发场景无需手动部署DDS。

(注:部分内容可能由 AI 生成)

相关推荐
前端炒粉1 小时前
个人简历面经总结二
前端·网络·vue.js·react.js·面试
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第154题】【06_Spring篇】第14题:Spring 支持的 Bean 作用域
java·开发语言·spring·面试
小林ixn1 小时前
用 100 行代码手搓一个 MCP Server,让 LLM 直接读你本地文件
面试·llm
程序员杰哥2 小时前
接口自动化测试项目框架详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
wear工程师2 小时前
可重复读能不能防幻读?MVCC 和 Next-Key Lock 到底谁在起作用
mysql·面试
weedsfly2 小时前
Cookie 安全三属性:HttpOnly、Secure、SameSite 分别防什么?
前端·javascript·面试
多年小白2 小时前
第八篇 模拟面试套卷
人工智能·ai·面试·职场和发展
zzz_23682 小时前
【Java实习面试算法冲刺】哈希!
java·算法·面试
芝士爱知识a11 小时前
AI 模拟面试怎么做:智蛙公考智能体多轮对话 + 实时追问的工程实现
面试·职场和发展