Skip to main content

agx-arm-codegen

引导 OpenClaw 根据用户自然语言生成基于 pyAgxArm 的机械臂控制代码。当用户用提示词描述机械臂动作且现有脚本无法直接满足时,根据本技能提供的 API 与示例自动组织并生成可执行的 Python 脚本。

ソース情報

リポジトリ
vanstrong12138/OpenClawPi
ソースの最終更新活動
2026年3月24日 02:43
検出された SKILL.md の言語
複数言語
スター
60
フォーク
8

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
2 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
agx-arm-codegen
description
引导 OpenClaw 根据用户自然语言生成基于 pyAgxArm 的机械臂控制代码。当用户用提示词描述机械臂动作且现有脚本无法直接满足时,根据本技能提供的 API 与示例自动组织并生成可执行的 Python 脚本。
metadata
{"openclaw":{"emoji":"🤖","requires":{"bins":"[Truncated]"}}}
## 功能概览 - 本技能用于**根据用户自然语言描述**,引导 OpenClaw **生成**可执行的 pyAgxArm 控制代码(Python 脚本),而不是仅调用现成 CLI。 - 参考 SDK:pyAgxArm([GitHub](https://github.com/agilexrobotics/pyAgxArm));参考示例:`pyAgxArm/demos/nero/test1.py`。 ## 何时使用本技能 - 用户说「写一段代码控制机械臂」「根据我的描述生成控制脚本」「让机械臂按顺序做多个动作」等。 - 用户明确要求「生成 Python 代码」或「给我可运行的脚本」来控制 Nero/Piper 等 AgileX 机械臂。 ## 使用本技能生成代码 - 根据用户提示词,结合本技能的 `references/pyagxarm-api.md` 中的 API 与模板,生成一段完整、可运行的 Python 脚本。 - 生成后说明:脚本需在已安装 pyAgxArm 和 python-can 的环境中运行,且需 CAN 已激活、机械臂上电;提醒用户注意安全(工作区域无人、可先小幅度测试)。 ## 生成代码时的规则 1. **连接与配置** - 使用 `create_agx_arm_config(robot="nero", comm="can", channel="can0", interface="socketcan")` 创建配置(Nero 示例;Piper 可用 `robot="piper"` / `robot="piper_h"` / `robot="piper_l"` / `robot="piper_x"`)。 - 使用 `AgxArmFactory.create_arm(robot_cfg)` 创建机械臂实例,再 `robot.connect()` 建立连接。 2. **使能与运动前** - CRITICAL: The robot MUST BE ENABLED before switching modes. If the robot is in a disabled state, you cannot switch modes. - 运动前需切换为普通模式,让后使能:`robot.set_normal_mode()`,然后轮询 `robot.enable()` 直到成功;可设 `robot.set_speed_percent(100)`。 - 运动模式:每当需要使用move_*时或需要切换为*模式时候,需要显式的设置`robot.set_motion_mode(robot.MOTION_MODE.J)`(关节)、`P`(点到点)、`L`(直线)、`C`(圆弧)、`JS`(关节快速响应,慎用)。 - 备注(与旧规则兼容):SDK 通常在调用 `move_*` 时会自动切换到对应运动模式;若你已按旧规则显式调用 `robot.set_motion_mode(...)`,保持即可。 3. **运动接口与单位** - 关节运动:`robot.move_j([j1, j2, ..., j7])`,单位为**弧度**,Nero 为 7 关节。 - 若用户目标是 `piper/piper_h/piper_l/piper_x`(六轴),则 `robot.move_j`/`robot.move_js` 的关节数组长度应为 6(单位仍为弧度)。 - 笛卡尔:`robot.move_p(pose)` / `robot.move_l(pose)`,pose 为 `[x, y, z, roll, pitch, yaw]`,位置单位**米**,姿态**弧度**。 - 圆弧:`robot.move_c(start_pose, mid_pose, end_pose)`,每个 pose 为 6 个浮点数。 - CRITICAL: All movement commands (move_j, move_js, move_mit, move_c, move_l, move_p) must be used in normal mode - 运动完成后应轮询 `robot.get_arm_status().msg.motion_status == 0` 或封装 `wait_motion_done(robot, timeout=...)` 再执行下一步。 4. **模式切换** - Switching modes (master, slave, normal) requires 1s delay before and after the mode switch - Use `robot.set_normal_mode()` to set normal mode - Use `robot.set_master_mode()` to set master mode - Use `robot.set_slave_mode()` to set slave mode - CRITICAL: Enable the robot FIRST with `robot.enable()` BEFORE switching modes 5. **安全与结尾** - 在生成脚本中可注明:执行前确认工作区域安全;首次建议小幅度移动;紧急时使用物理急停或 `robot.electronic_emergency_stop()` / `robot.disable()`。 - 若用户要求「完成后失能」,在脚本末尾调用 `robot.disable()`。 6. **实现细节** - When waiting for motion to complete, use shorter timeout (2-3 seconds) - After each mechanical arm operation, add a small sleep (0.01 seconds) - Motion completion detection: `robot.get_arm_status().msg.motion_status == 0` (not == 1) 7. **针对 Piper 六轴机械臂(`piper/piper_h/piper_l/piper_x`)** - 关节向量:`move_j([j1..j6])` / `move_js([j1..j6])`;若 joints 数不对,必须先用 `robot.joint_nums` 校验并修正。 - 使能/失能(可选):若用户指定“只使能某一关节”,则 `joint_index` 只允许 `1..6`;不指定时直接用 `robot.enable()` / `robot.disable()`(通常=255=全部)。 - 回零:优先用通用写法 `robot.move_j([0] * robot.joint_nums)`;Piper 机型则等价为长度 6 的 `[0]*6`。 8. **针对 Nero 七轴机械臂(`nero`)** - 关节向量:`move_j([j1..j7])` / `move_js([j1..j7])`;必须严格使用长度 7,且“关节1..7”按顺序映射到 `j1..j7`。 - `move_js`:除非用户明确要求“快速响应/跟随/JS 控制”,否则默认使用 `move_j`;并在脚本注释中标注 `move_js` 风险(冲击/振荡/失稳、无平滑)。 - 若用户只给出部分关节目标:建议获取当前关节角 `robot.get_joint_angles().msg`,未指定的关节保持当前值,避免其它关节发生突变回跳。 9. **读取机械臂参数(可选,推荐用于调试/自检)** - 读取接口优先级:`robot.get_arm_status()`(motion_status/异常)→ `robot.get_joint_angles()` → `robot.get_flange_pose()`。 - `robot.joint_nums` 用于处理 6/7 轴差异,电机/驱动器/使能列表建议用 `for i in range(1, robot.joint_nums + 1)` 循环,并传入 1-based 的 `joint_index`。 - 可选扩展读取: - `robot.is_ok()` / `robot.get_fps()`:数据接收监控。 - `robot.get_joints_enable_status_list()` 或 `robot.get_joint_enable_status(i)`:关节使能状态。 - `robot.get_motor_states(i)` / `robot.get_driver_states(i)`:电机/驱动反馈(单关节)。 - `robot.get_tcp_pose()`:TCP 位姿(若你之前调用过 `robot.set_tcp_offset(...)`)。 ## 参考文件 - **API 与最小可运行模板**:`references/pyagxarm-api.md` 生成代码时请结合该文件中的接口说明与代码片段,保证与 pyAgxArm 及 test1.py 用法一致。 ## 安全注意事项 - 生成的代码会驱动真实机械臂,必须提醒用户:执行前确认工作区域内无人员和障碍物;建议先小幅度、低速度测试。 - 高风险模式(如 `move_js`、`move_mit`)应在代码注释或对用户说明中标注风险,并建议仅在了解后果后使用。 - 本技能只负责「引导生成代码」,不直接执行运动;实际运行环境、CAN 激活、pyAgxArm 安装由用户自行准备(可参考 agx-arm 技能中的环境准备)。
GitHubで見る