机器人系统ros2&期末速通2

6. Action(动作):带反馈、可取消的长任务

6.1 核心概念(先搞懂是什么)

Action 是 ROS2 里专门处理耗时久、需要中间反馈、还能随时取消的任务的通信方式。

  • 专业名词拆解
    • Goal(目标):你给 Action 下达的任务(比如 "导航到 (1,2) 点")。
    • Feedback(反馈):任务执行中持续返回的状态(比如导航时 "距离目标还有 0.5 米""当前速度 0.2m/s")。
    • Result(结果):任务完成后返回的最终状态(比如 "导航成功"/"导航失败,原因:目标点不可达")。
    • Cancel(取消):任务执行中可以中断(比如导航时突然改主意,取消本次导航)。
  • 对比 Service(服务):Service 是 "一问一答",只能等任务结束才返回结果,中间没反馈、也不能取消(比如问 "机器人当前位置?",立刻回答,这适合用 Service)。

6.2 考点提炼(考试直接用)

题型 核心答案
单选题(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. 目标点是否在不可达区域(比如在墙里)。

6.3 常用命令(记下来,考到直接写)

bash

运行

复制代码
ros2 action list          # 列出所有正在运行的Action
ros2 action info <action名> # 查看某个Action的详细信息(比如类型、服务器)
ros2 action send_goal <action名> <目标类型> "目标参数" # 发送Action目标(比如导航目标)

7. Interface(接口):msg/srv/action 定义与自定义

7.1 核心概念(先搞懂是什么)

Interface 是 ROS2 中不同节点之间 "沟通的语言",分三种:

  • 专业名词拆解
    • msg(消息):单向通信(比如传感器数据、机器人速度指令),对应 Topic(话题)通信。例:geometry_msgs/msg/Twist(机器人速度指令,包含线速度和角速度)。
    • srv(服务):双向一问一答,对应 Service(服务)通信。例:std_srvs/srv/Empty(空服务,只请求不传数据,比如 "让机器人停止")。
    • action(动作):带反馈 / 取消的长任务,对应 Action(动作)通信。例:nav2_msgs/action/NavigateToPose(导航动作,包含目标、反馈、结果)。

7.2 考点提炼(考试直接用)

题型 核心答案
单选题(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)

7.3 关键操作(理解即可,考试考概念)

  • 查看接口结构:ros2 interface show <接口类型>(比如ros2 interface show geometry_msgs/msg/Twist)。
  • 自定义接口核心:必须在package.xmlCMakeLists.txt里声明依赖,否则编译 / 运行会报错。

8. QoS(服务质量):控制数据传输的规则

8.1 核心概念(先搞懂是什么)

QoS 是 ROS2 中 "约定数据怎么传" 的规则,解决不同场景下的传输需求(比如要不要保证数据不丢、新订阅者能不能拿到历史数据)。

  • 核心 QoS 参数(必考)

    参数 含义
    Reliability 可靠性:RELIABLE(可靠,保证数据不丢,重传丢失的包);BEST_EFFORT(尽力而为,丢包不重传,速度快)。
    Durability 持久性:VOLATILE(易失,新订阅者只能拿到订阅后的新数据);TRANSIENT_LOCAL(本地暂存,新订阅者能立刻拿到最新的历史数据)。
    History/Depth 历史策略:KEEP_LAST (n)(只保留最后 n 条数据);KEEP_ALL(保留所有数据,少用)。

8.2 考点提炼(考试直接用)

题型 核心答案
单选题(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 覆盖配置文件。

8.3 记忆技巧

  • 传感器(/scan、/image):BEST_EFFORT(快,允许丢包)+ KEEP_LAST。
  • 关键数据(/map、/cmd_vel):RELIABLE(不丢包);地图额外加 TRANSIENT_LOCAL。

9. Parameter(参数):节点的配置项

9.1 核心概念(先搞懂是什么)

Parameter 是 ROS2 节点的 "配置参数",比如机器人的速度上限、PID 参数、是否启用仿真时间,都可以用参数设置。

  • 专业名词拆解
    • declare_parameter:声明参数(ROS2 强制推荐!先声明 "参数名、类型、默认值",再使用)。
    • 动态参数:运行时可以修改的参数(比如在线调 PID),修改时可以加回调函数校验。

9.2 考点提炼(考试直接用)

题型 核心答案
单选题(9-1) 启用仿真时间:use_sim_time(答案 A)
简答题(9-2) ROS2 推荐先 declare 再 set 的原因:1. 防止拼写错误导致 "悄悄创建不存在的参数";2. 明确参数类型和默认值,避免类型错误;3. 方便用 launch/YAML/ 工具管理参数。
场景题(9-3) 调 PID 后机器人抖动的安全机制:1. 参数回调中加范围限制 + 平滑(比如每次修改步长不超过 0.1,渐变生效);2. 关键参数加保护(修改需要确认 / 密码);3. 记录参数变更日志,支持回滚到上一次稳定值。

9.3 常用命令(记下来)

bash

运行

复制代码
ros2 param list          # 列出节点的所有参数
ros2 param get <节点名> <参数名> # 获取参数值
ros2 param set <节点名> <参数名> <值> # 设置参数值
ros2 param dump <节点名> # 导出节点所有参数到文件

10. Launch、Remap、Namespace:系统编排与多机器人

10.1 核心概念(先搞懂是什么)

  • Launch:ROS2 的 "启动脚本",可以一次性启动多个节点、传参数、重映射话题、设置命名空间,不用手动一个个启动。
  • Remap(重映射):修改话题 / 服务 / Action 的名字(比如把机器人 1 的 /cmd_vel 改成 /robot1/cmd_vel)。
  • Namespace(命名空间):给节点 / 话题加 "前缀",隔离多机器人的通信(比如机器人 1 的所有话题都放在 /robot1 / 下)。

10.2 考点提炼(考试直接用)

题型 核心答案
单选题(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 唯一。

10.3 关键技巧

  • 多机器人核心:Namespace 隔离话题 + TF 坐标系加前缀,避免所有 "重名" 问题。
  • Remap 常用方式:在 launch 文件里写remap_rule=[('/原话题名', '/新话题名')],或命令行加--ros-args --remap /cmd_vel:=/robot1/cmd_vel

考试通关总结(必背)

核心考点速记

  1. Action :核心优势是支持反馈与取消,适合长任务(导航);排查导航问题先看 action server 和 TF。
  2. 接口 :查看结构用ros2 interface show;自定义接口必须改package.xmlCMakeLists.txt,运行前要 source。
  3. QoS:地图用 TRANSIENT_LOCAL,传感器用 BEST_EFFORT,指令用 RELIABLE+KEEP_LAST (1);bag 回放问题多是 QoS 不匹配。
  4. 参数 :启用仿真时间是use_sim_time;先 declare 再 set 避免错误;调参数要加范围 / 平滑 / 回滚保护。
  5. 多机器人:Namespace 隔离话题,TF 加前缀避免冲突;Remap 主要在 launch / 命令行设置。

答题技巧

  • 单选题:直接记答案(比如 Action 选 B、QoS 选 B、参数选 A、Remap 选 B)。
  • 简答题:按 "1、2、3" 分点答,和参考答案要点一致即可(不用多写,考点踩中就得分)。
  • 场景题:先答 "原因",再答 "解决方法",分点列,优先写参考答案里的要点(比如导航无反馈先查 action server 和 TF)。
相关推荐
京东云开发者22 分钟前
京东市民服务又“上新”!这次是黑龙江“龙易办”
前端
用户5191495848451 小时前
Windows 渗透测试载荷加载器 POC 工具集
人工智能·aigc
袋鱼不重1 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
大树881 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
用户8356290780511 小时前
使用 Python 操作 Word 内容控件
后端·python
通信小呆呆1 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
施小赞1 小时前
普通 RAG vs GraphRAG 核心对比
人工智能·ai
EAIReport1 小时前
RuoYi-AI 企业级AI开发平台实战详解
人工智能
Fireworks1 小时前
深入vue3源码解读 -- 1、响应式的基础概念
前端
程序员黑豆1 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程