RS485和RS232通信协议驱动芯片选型实战指南
2026/1/14 1:15:27
Action 是 ROS2 里专门处理耗时久、需要中间反馈、还能随时取消的任务的通信方式。
| 题型 | 核心答案 |
|---|---|
| 单选题(6-1) | Action 比 Service 的优势:支持反馈与取消(答案 B) |
| 简答题(6-2) | 导航适合 Action 的原因:1. 导航耗时较长;2. 需要持续反馈(距离、进度);3. 可能需要取消(临时避障 / 改目标)。 |
| 场景题(6-3) | 导航无反馈 / 无结果的排查点(记 4 个即可):1. action server 是否存在 / 激活(比如 nav2 没启动);2. TF 坐标树是否完整(map→odom→base_link);3. 传感器 / 代价地图正常吗(比如激光雷达 /scan 话题没数据);4. 目标点是否在不可达区域(比如在墙里)。 |
bash
运行
ros2 action list # 列出所有正在运行的Action ros2 action info <action名> # 查看某个Action的详细信息(比如类型、服务器) ros2 action send_goal <action名> <目标类型> "目标参数" # 发送Action目标(比如导航目标)Interface 是 ROS2 中不同节点之间 “沟通的语言”,分三种:
geometry_msgs/msg/Twist(机器人速度指令,包含线速度和角速度)。std_srvs/srv/Empty(空服务,只请求不传数据,比如 “让机器人停止”)。nav2_msgs/action/NavigateToPose(导航动作,包含目标、反馈、结果)。| 题型 | 核心答案 |
|---|---|
| 单选题(7-1) | 查看 Twist 消息结构:ros2 interface show geometry_msgs/msg/Twist(答案 B) |
| 简答题(7-2) | 自定义接口编译时声明依赖的文件:1. package.xml:加 build_depend(编译依赖)和 exec_depend(运行依赖);2. CMakeLists.txt:find_package 找依赖 + rosidl_generate_interfaces 生成接口 + ament_export_dependencies 导出依赖。 |
| 场景题(7-3) | 自定义 msg 编译过但运行找不到的排查点:1. 有没有 source 当前工作空间的 setup.bash(source install/setup.bash);2. Python 包是否正确安装、entry_points 配置对不对;3. 是不是被其他工作空间的同名接口覆盖了;4. 有没有忘记加ament_export_dependencies(rosidl_default_runtime)。 |
ros2 interface show <接口类型>(比如ros2 interface show geometry_msgs/msg/Twist)。package.xml和CMakeLists.txt里声明依赖,否则编译 / 运行会报错。QoS 是 ROS2 中 “约定数据怎么传” 的规则,解决不同场景下的传输需求(比如要不要保证数据不丢、新订阅者能不能拿到历史数据)。
| 参数 | 含义 |
|---|---|
| Reliability | 可靠性:RELIABLE(可靠,保证数据不丢,重传丢失的包);BEST_EFFORT(尽力而为,丢包不重传,速度快)。 |
| Durability | 持久性:VOLATILE(易失,新订阅者只能拿到订阅后的新数据);TRANSIENT_LOCAL(本地暂存,新订阅者能立刻拿到最新的历史数据)。 |
| History/Depth | 历史策略:KEEP_LAST (n)(只保留最后 n 条数据);KEEP_ALL(保留所有数据,少用)。 |
| 题型 | 核心答案 |
|---|---|
| 单选题(8-1) | 新订阅者立刻拿到最新地图:TRANSIENT_LOCAL(答案 B) |
| 简答题(8-2) | 常用话题的 QoS 组合:1. /scan(激光雷达):BEST_EFFORT + KEEP_LAST (5~10)(高频、允许丢少量包,低延迟);2. /map(地图):RELIABLE + TRANSIENT_LOCAL(地图重要不丢包,新订阅者能拿到);3. /cmd_vel(速度指令):RELIABLE + KEEP_LAST (1)(指令要可靠,只需要最新的,避免积压)。 |
| 场景题(8-3) | rosbag2 回放看不到数据的原因 + 处理:原因:回放端和订阅端 QoS 不匹配(比如回放用 RELIABLE,订阅用 BEST_EFFORT),导致数据匹配失败;处理:调整订阅端 QoS(传感器用 BEST_EFFORT,地图用 TRANSIENT_LOCAL),或用 QoS 覆盖配置文件。 |
Parameter 是 ROS2 节点的 “配置参数”,比如机器人的速度上限、PID 参数、是否启用仿真时间,都可以用参数设置。
| 题型 | 核心答案 |
|---|---|
| 单选题(9-1) | 启用仿真时间:use_sim_time(答案 A) |
| 简答题(9-2) | ROS2 推荐先 declare 再 set 的原因:1. 防止拼写错误导致 “悄悄创建不存在的参数”;2. 明确参数类型和默认值,避免类型错误;3. 方便用 launch/YAML/ 工具管理参数。 |
| 场景题(9-3) | 调 PID 后机器人抖动的安全机制:1. 参数回调中加范围限制 + 平滑(比如每次修改步长不超过 0.1,渐变生效);2. 关键参数加保护(修改需要确认 / 密码);3. 记录参数变更日志,支持回滚到上一次稳定值。 |
bash
运行
ros2 param list # 列出节点的所有参数 ros2 param get <节点名> <参数名> # 获取参数值 ros2 param set <节点名> <参数名> <值> # 设置参数值 ros2 param dump <节点名> # 导出节点所有参数到文件| 题型 | 核心答案 |
|---|---|
| 单选题(10-1) | 重映射 /cmd_vel:launch / 命令行 remap(答案 B) |
| 简答题(10-2) | Namespace 在多机器人中的作用:1. 避免话题 / 服务 / Action 名冲突(比如两台机器人都有 /cmd_vel,加前缀后变成 /robot1/cmd_vel 和 /robot2/cmd_vel);2. 调试更清晰,能区分不同机器人的消息;3. 跨机部署时容易统一管理。 |
| 场景题(10-3) | RViz 位姿跳变的原因 + 解决:原因:两台机器人的 TF 坐标系名冲突(都用 base_link、odom),导致 TF 树混乱;解决:给坐标系加前缀(比如 robot1/base_link、robot2/base_link),或设置 tf_prefix 参数,确保每台机器人的 TF 唯一。 |
remap_rule=[('/原话题名', '/新话题名')],或命令行加--ros-args --remap /cmd_vel:=/robot1/cmd_vel。ros2 interface show;自定义接口必须改package.xml和CMakeLists.txt,运行前要 source。use_sim_time;先 declare 再 set 避免错误;调参数要加范围 / 平滑 / 回滚保护。