ROS 高频面试题(20道)
以下是机器人岗位面试中 ROS 相关的高频问题,覆盖基础概念、核心机制、实操应用、性能优化等维度,既适合面试准备,也能检验 ROS 核心能力:
一、基础概念类
- ROS 的核心特点是什么?它和传统的机器人开发框架(如MRPT、YARP)有什么区别?
- ROS 中的节点(Node)、话题(Topic)、服务(Service)、参数(Parameter)分别是什么?各自的使用场景是什么?
- ROS Master 的作用是什么?如果 ROS Master 宕机,已经运行的节点之间还能通信吗?为什么?
- ROS 的通信机制有哪些?(话题、服务、动作库、参数服务器、ROS RPC 等),请分别说明它们的通信模式(同步/异步、单向/双向)。
- 什么是 ROS 功能包(Package)和功能包清单(package.xml)?清单文件中主要包含哪些关键信息?
二、核心机制类
- 话题(Topic)和服务(Service)的核心区别是什么?分别举一个实际机器人开发中的应用场景。
- 动作库(Action)的作用是什么?它和 Service 相比有什么优势?适用于哪些场景(如导航、抓取)?
- ROS 中的消息(Message)、服务消息(Service Message)、动作消息(Action Message)的文件格式是什么?如何自定义这些消息?
- 什么是 ROS 的命名空间(Namespace)和重映射(Remapping)?为什么需要使用它们?举一个重映射的实际例子。
- ROS 中的参数服务器支持哪些数据类型?如何在代码中(C++/Python)读取和修改参数?参数服务器的局限性是什么?
三、实操应用类
- 如何用 C++/Python 编写一个发布者(Publisher)和订阅者(Subscriber)?核心步骤是什么?
- 如何编写一个 Service 的服务端(Server)和客户端(Client)?如果客户端调用服务超时,该如何处理?
- ROS 中的启动文件(Launch 文件)有什么作用?请编写一个简单的 Launch 文件,实现启动两个节点并设置参数。
- 什么是 TF/TF2?它的核心作用是什么?如何在代码中监听和发布 TF 变换?
- ROS 中常用的调试工具有哪些?(如 rqt_graph、rostopic、rosnode、rviz 等),分别说明它们的使用场景。
四、进阶优化类
- ROS 节点通信的延迟如何优化?(从话题队列大小、消息类型、传输方式、节点调度等角度说明)
- 在多机器人系统中,如何避免不同机器人的 ROS 节点冲突?(命名空间、多 Master 等方案)
- ROS 中的日志系统(ROS_INFO/ROS_WARN/ROS_ERROR)如何使用?如何将日志输出到文件?
- 什么是 ROS 包的依赖管理?如何解决 "Package not found" 这类依赖问题?
- ROS1 和 ROS2 的核心区别是什么?(从通信架构、实时性、兼容性、生态等角度说明),你在项目中选择 ROS1/ROS2 的依据是什么?