# AGENTS.md

本文件为 Codex、Claude Code 及其他编码智能体提供仓库级工作指引。若与更高优先级的系统或开发者指令冲突，以后者为准。

## 项目概览

本仓库是 ROS2 Humble 工作空间的 `src/` 目录，用于通过 PICO/XR 控制器遥操作左右两台 RealMan RM75 机械臂。

控制器映射、运动控制链路和 IK 实现后续可能调整。修改前应阅读当前源码、启动文件、配置和 `README.md`，不要将现有 topic 链路、适配器或 IK 算法视为固定架构。

## 仓库结构

- `xr_rm_interfaces`：ROS 消息定义。
- `xr_rm_input`：XR 控制器数据输入与测试发送工具。
- `xr_rm_teleop`：控制器映射、机械臂控制及相关算法。
- `xr_rm_bringup`：启动文件、机械臂配置及启动工具。
- `unity/XR_RM_PICO_UDP_Sender`：Unity/PICO 数据发送项目。

工作空间根目录：`/home/robot/WS_xr`

源码根目录：`/home/robot/WS_xr/src`

除非任务明确涉及，否则将 PICO SDK、XRoboToolkit、机械臂 SDK 及其他引入的依赖视为第三方代码。

## 构建与运行

在工作空间根目录执行 ROS2 命令：

```bash
cd /home/robot/WS_xr
source /opt/ros/humble/setup.bash
colcon build --symlink-install
source install/setup.bash
```

Mock 模式启动：

```bash
ros2 launch xr_rm_bringup arm_debug.launch.py arm:=both use_mock:=true
```

真实机械臂支持 `arm:=left|right|both` 和 `use_mock:=false`。只有在用户明确要求且测试环境安全时，才可执行真实机械臂测试。

## 开发流程

- 修改前阅读相关代码、配置和文档。
- 先执行 `git status --short`，保留用户未提交及与当前任务无关的修改。
- 修改应尽量小，并严格限定在当前任务范围内。
- 不得自动执行 `git add`、提交、推送、合并、强制推送或删除分支。
- 完成后说明修改的文件、已执行的验证及剩余风险。

### 文件修改确认门槛

- 任何创建、编辑、删除、重命名、格式化文件或生成会写入磁盘的产物，都属于文件修改。
- 修改前必须说明目标、涉及文件、实施方案、风险和验证方式，然后等待用户明确授权。
- 只有当前消息中包含明确执行意图，如“直接修改”“执行”“应用这些修改”“写入文件”“创建”或“删除”，才视为授权。
- “可以……吗”“能否……”“是否可以”“怎么修改”“这样行吗”等疑问或讨论，只表示咨询，不构成文件修改授权。此时只能回答问题或提出方案，不得写入文件。
- 用户此前允许过其他修改，不代表自动授权新的修改；每个新增范围都应重新确认。
- 授权仅覆盖用户明确提出的范围。发现需要修改额外文件时，应先说明原因并再次取得授权。
- 执行任何可能写入文件的工具前，应再次核对用户当前消息是否已经明确授权；无法确定时，必须先询问，不得自行推断。

## IK 与控制修改

- 将当前 IK 和控制策略视为可替换实现；先检查实际代码，不要预设使用笛卡尔流式控制、速度控制或某种特定求解器。
- 除非任务明确要求修改，否则保留现有 ROS 接口和启动参数；有意进行的兼容性变更必须写入文档。
- 明确坐标系、四元数顺序、单位、关节顺序和时间戳约定。
- 根据算法需要处理非有限数值、关节与工作空间限制、奇异点、指令频率限制和数据超时。
- 修改映射、滤波、IK、轨迹生成或适配器时，不得削弱停止机制。
- 算法修改应先通过静态检查、确定性输入测试或 Mock 测试，再进行真实机械臂测试。

## 安全规则

本项目能够控制真实机械臂，涉及硬件的修改必须保守进行。

不得随意修改机械臂 IP、端口 `8080`、工作空间或圆柱限制、坐标变换、初始位姿、速度/加速度限制及末端执行器配置。

当输入无效或被释放、数据过期、通信失败、适配器抛出异常、节点或应用退出时，机械臂必须安全停止。除非用户明确要求，否则 `move_to_initial_pose_on_connect` 默认保持为 `false`。

涉及安全的修改按以下顺序验证：

1. 静态检查和语法检查。
2. 针对性的单元测试或算法测试。
3. Mock 模式。
4. 单台真实机械臂低速测试。
5. 双臂真实测试。

除非相关能力已经实现并经过验证，否则不得声称项目具备碰撞规避、IK 安全保证或其他保护能力。

## 文档与生成文件

- `README.md` 是面向用户的主项目文档；`AGENTS.md` 用于记录智能体工作流程和安全规则。
- 项目自有的 Markdown 文档应以简体中文为主要叙述语言；新建或更新文档时，标题、正文、表格说明和验证结论默认使用中文。
- 代码、命令、路径、API、类名、函数名、变量名、配置键、topic、坐标系名称、协议字段、公式、单位、版本号、原始日志、英文论文标题及参考文献可按原文保留，避免翻译破坏可执行性、可检索性或技术含义。
- 编码智能体生成的 Markdown 报告也应遵循中文为主的要求；若固定字段需供程序解析，应保持字段兼容，并为面向读者的说明提供中文。
- 不得仅为统一语言而批量翻译第三方代码、SDK、依赖包或其随附文档。
- 与具体实现相关的协议、topic 和配置说明应放入对应 README 或专项文档，不在此处重复维护。
- 不得将尚未实现的功能描述为已完成。
- 将 Unity 的 `Library/`、`Builds/`、`Logs/`、`UserSettings/`、APK、生成日志及构建输出视为生成文件。
- 安全敏感修复期间避免大范围重构，代码应保持便于现场调试。

## 验证

根据修改内容选择合适的检查方式，至少执行：

```bash
cd /home/robot/WS_xr/src
git diff --check
```

修改 ROS 代码时，优先构建目标软件包，再进行完整工作空间构建。自动化测试无法单独证明真实硬件行为安全。
