机器人软件工程师:ROS 2 与 Gazebo 仿真的 10 个高级 AI 提示词

10 Elite AI Prompts for ROS 2 & Gazebo Simulation

现代机器人工程已超越手动配置和繁琐的样板代码。随着先进大语言模型(LLMs)的兴起,机器人软件工程师现在能以前所未有的速度加速自主系统开发、优化仿真物理特性,并调试分布式节点架构。

以下提示经过严格测试和优化,适用于 ChatGPT、Gemini、Claude 和 DeepSeek。尽管每个模型都拥有独特的认知架构——DeepSeek 擅长 C++ 逻辑,Claude 擅长系统设计,ChatGPT 擅长快速迭代——但这 10 个提示为使用 ROS 2 和 Gazebo 的机器人软件工程师提供了一个通用且高效的基础。


1. 生成复杂的 URDF/Xacro 模型

副标题: 自动化创建运动链和物理属性。
模型推荐: 使用 ChatGPT 快速生成样板代码,或使用 Claude 保持清晰的 XML 层次结构。

提示词:

扮演一名高级机器人工程师。为名为“[机器人名称]”的 [差速驱动/4自由度机械臂] 创建一个 ROS 2 Xacro(URDF)文件。

要求:
1. 为惯性属性(圆柱体、长方体、球体)定义适当的宏,以确保 Gazebo 物理模拟的准确性。
2. 为每个连杆包含碰撞、视觉和惯性标签。
3. 使用特定的关节限制:[插入限制,例如,旋转关节为 -3.14 到 3.14]。
4. 为仿真添加 Gazebo 特定标签(摩擦、阻尼、颜色)。
5. 生成 ros2_control 集成所需的传动标签。

收益: 消除数小时繁琐的 XML 标签编写,并确保物理属性(惯性矩阵)在数学上有效,防止 Gazebo 中的仿真“爆炸”。

2. 设计生命周期管理节点(C++)

副标题: 实现状态管理节点以实现稳健的系统行为。
模型推荐: DeepSeek,因其在处理复杂的 C++ 继承和指针逻辑方面表现出色。

提示词:

编写一个名为“SensorDriver”的 ROS 2 C++ 生命周期节点,用于与 [激光雷达/摄像头] 交互。

该节点必须实现以下状态转换:
1. on_configure:加载参数并预留内存。
2. on_activate:启动传感器数据流和发布器。
3. on_deactivate:停止数据流但保持连接活跃。
4. on_cleanup:释放内存并重置。
5. on_shutdown:完全安全终止。

确保使用 `rclcpp::LifecycleNode` 继承进行适当的错误处理,并包含一个用于旋转节点的主函数。

收益: 立即提供一个生产级的管理节点模板,确保您的系统确定性地处理启动和关闭序列,无需手动编写状态机代码。

3. 创建复杂的 Python 启动文件

副标题: 使用条件逻辑编排多节点启动。
模型推荐: Claude,因其能够生成高度可读、符合 Python 风格的启动配置。

提示词:

为导航栈创建一个稳健的 ROS 2 Python 启动文件(`.launch.py`)。

要求:
1. 使用 `LaunchConfiguration` 允许动态参数,如 'use_sim_time'、'map_path' 和 'params_file'。
2. 包含一个条件 `OpaqueFunction`,用于在启动驱动程序前检查特定硬件接口是否已连接。
3. 将 `/cmd_vel` 话题重映射到 `/robot_base/cmd_vel`。
4. 包含一个 `robot_state_publisher` 的 `Node`,仅在 URDF 文件更改时重新读取。
5. 结构化文件,以便轻松将此启动文件包含到其他父启动文件中。

收益: 生成灵活、模块化的启动文件,处理复杂的运行时参数和条件,取代脆弱、硬编码的启动脚本。

4. 为不可靠网络调优 QoS 配置文件

副标题: 为 Wi-Fi 或有损环境优化 DDS 通信。
模型推荐: DeepSeek,因其在中间件配置和 RMW 实现方面的技术准确性。

提示词:

我在 Wi-Fi 上传输高带宽话题(例如 PointCloud2)时遇到消息丢失。请提供 C++ 代码片段,用于为 ROS 2 发布器和订阅器配置自定义服务质量(QoS)配置文件。

规格:
1. 可靠性:尽力而为。
2. 持久性:易失性。
3. 历史:保留最后一条(深度 1)。
4. 解释这些设置如何与底层 DDS 中间件交互,以降低延迟和带宽使用,与默认的“可靠”设置相比。

收益: 通过提供精确的 DDS 调优代码,解决常见的“机器人卡顿”问题,确保高吞吐量的传感器数据不会成为网络瓶颈。

5. 开发自定义 Gazebo 插件

副标题: 使用自定义 C++ 物理逻辑扩展仿真能力。
模型推荐: Gemini,因其在综合文档和 C++ 标准库使用方面的优势。

提示词:

为需要应用自定义浮力(水下仿真)的机器人编写一个 Gazebo “ModelPlugin” C++ 插件。

该插件应:
1. 从 SDF 文件加载参数(流体密度、体积)。
2. 订阅 Gazebo 物理更新事件(`OnUpdate`)。
3. 根据阿基米德原理,在每个仿真步骤中计算并向模型质心施加向上的力。
4. 包含构建此插件所需的 `CMakeLists.txt` 代码片段,以链接 Gazebo 传输和物理库。

收益: 弥合标准仿真与自定义环境之间的差距,允许您模拟非标准动力学,如水下阻力或磁力。

6. 调试 TF2 变换树

副标题: 解决“查找需要外推到未来”的错误。
模型推荐: ChatGPT,用于快速故障排除和逻辑解释。

提示词:

我在 TF2 缓冲区中遇到“查找需要外推到未来”的错误。

上下文:
- 源坐标系:“base_link”
- 目标坐标系:“map”
- 错误发生在使用 `tf2_ros::Buffer` 的 C++ 节点中。

分析潜在原因(例如,时钟同步、use_sim_time、缓冲区持续时间)。提供一个修正后的 C++ 代码片段,实现安全的 `lookupTransform`,包含适当的超时和 `try-catch` 块,以优雅地处理此异常。

收益: 诊断机器人学中最令人沮丧的错误(TF 问题),并提供稳健的代码,防止在变换暂时不可用时节点崩溃。

7. 实现 ROS 2 动作(客户端与服务器)

副标题: 管理长时间运行的行为,如导航或抓取。
模型推荐: DeepSeekClaude,用于处理异步回调和线程安全。

提示词:

为自定义动作定义 `MapsToPose.action` 生成 ROS 2 动作服务器的 Python 样板代码。

动作服务器必须:
1. 接受一个目标位姿。
2. 执行一个反馈循环,每 1 秒发布一次“剩余距离”。
3. 支持目标取消(正确处理 `cancel_callback`)。
4. 在容差范围内时返回“成功”结果。

提供 `.action` 文件定义和 Python 节点代码。

收益: 自动化动作所需的复杂异步逻辑,确保您的机器人能够处理取消和反馈,而不会阻塞主线程。

8. 使用 GTest 生成单元测试

副标题: 确保代码可靠性并防止回归。
模型推荐: Claude,用于编写全面、可读的测试用例。

提示词:

为 ROS 2 C++ 节点编写一个通用的 Google Test(GTest)测试套件。

测试应:
1. 启动一个测试夹具,用于启动目标节点。
2. 创建一个临时订阅器,以验证节点初始化后是否在 `/status` 话题上发布正确的消息。
3. 验证节点参数是否初始化为其默认值。
4. 使用 `launch_testing` 管理测试生命周期。

收益: 通过消除设置繁琐的 GTest/ROS 2 测试基础设施的障碍,鼓励测试驱动开发(TDD)。

9. 使用自定义 Rviz2 插件可视化数据

副标题: 为机器人控制创建自定义 UI 面板。
模型推荐: DeepSeek,用于 Qt/C++ 集成逻辑。

提示词:

指导我创建一个 C++ 自定义 Rviz2 显示插件。

该插件应:
1. 将自定义消息类型 `BatteryStatus`(电压、电流)可视化为 3D 视图上的文本叠加。
2. 继承自 `rviz_common::MessageFilterDisplay`。
3. 包含 Rviz2 发现插件所需的必要 `plugin_description.xml` 导出。

收益: 允许工程师直接在 Rviz 中构建特定领域的调试工具,无需外部 GUI 即可提高操作员态势感知能力。

10. 优化 Nav2 行为树

副标题: 为特定环境定制导航逻辑。
模型推荐: ClaudeChatGPT,用于 XML 结构和逻辑流。

提示词:

为 ROS 2 导航栈(Nav2)创建一个自定义行为树 XML。

场景:仓库机器人。
逻辑:
1. 恢复:如果规划器失败,首先尝试清除局部代价地图。
2. 如果失败,让机器人旋转 360 度。
3. 如果再次失败,等待 5 秒后重试。
4. 流水线:使用特定的控制器 `DWBLocalPlanner` 和规划器 `SmacPlannerHybrid`。

输出与 Nav2 `bt_navigator` 兼容的有效 XML 结构。

收益: 揭开 Nav2 中使用的复杂行为树 XML 的神秘面纱,允许快速定制机器人恢复行为和导航策略。


专业技巧:上下文注入

当要求 AI 调试 ROS 2 节点时,务必 首先粘贴接口定义(.msg.srv.action 文件)和 package.xml 依赖项。例如,在要求模型编写订阅器之前,告诉它:“这是我的自定义消息定义 RobotStatus.msg…”。这可以防止 AI 产生不存在的字段,并确保生成的代码能够立即编译。